% \iffalse meta-comment %% File: hcycle.dtx % % Copyright 1993,1996,1998,2001,2002,2004,2010,2013 by Shinsaku Fujita % % This file is part of XyMTeX system. % ------------------------------------- % % This file is a successor to: % % hcycle.sty % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \typeout{XyMTeX for Drawing Chemical Structural Formulas. Version 1.00} % \typeout{ -- Released December 1, 1993 by Shinsaku Fujita} % Copyright (C) 1993 by Shinsaku Fujita, all rights reserved. % % This file is a part of the macro package ``XyMTeX'' which has been % designed for typesetting chemical structural formulas. % % This file is to be contained in the ``xymtex'' directory which is % an input directory for TeX. It is a LaTeX optional style file and % should be used only within LaTeX, because several macros of the file % are based on LaTeX commands. % % For the review of XyMTeX, see % (1) Shinsaku Fujita, ``Typesetting structural formulas with the text % formatter TeX/LaTeX'', Computers and Chemistry, in press. % The following book deals with an application of TeX/LaTeX to % preparation of manuscripts of chemical fields: % (2) Shinsaku Fujita, ``LaTeX for Chemists and Biochemists'' % Tokyo Kagaku Dozin, Tokyo (1993) [in Japanese]. % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % The Current Maintainer of this work is Shinsaku Fujita. % % This work consists of the files hcycle.dtx and hcycle.ins % and the derived file hcycle.sty. % % Please report any bugs, comments, suggestions, etc. to: % Shinsaku Fujita, % Shonan Institute of Chemoinformatics and Mathematical Chemistry % Kaneko 479-7 Ooimachi, Ashigara-Kami-Gun, Kanagawa 250-0019 Japan % (old address) % Ashigara Research Laboratories, Fuji Photo Film Co., Ltd., % Minami-Ashigara, Kanagawa-ken, 250-01, Japan. % (old address) % Department of Chemistry and Materials Technology, % Kyoto Institute of Technology, \\ % Matsugasaki, Sakyoku, Kyoto, 606 Japan % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{December 01, 1993} % \def\versi@nno{ver1.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{August 16, 1996} % \def\versi@nno{ver1.01} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{October 31, 1998} % \def\versi@nno{ver1.02} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{December 25, 1998} % \def\versi@nno{ver2.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{June 20, 2001} % \def\versi@nno{ver2.01} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{April 30, 2002} % \def\versi@nno{ver3.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{May 30, 2002} % \def\versi@nno{ver4.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{August 30, 2004} % \def\versi@nno{ver4.01} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{October 01, 2010} % \def\versi@nno{ver5.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{hcycle} % \def\versi@ndate{March 31, 2013} % \def\versi@nno{ver5.01b} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \fi % % \CheckSum{3807} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % % \setcounter{StandardModuleDepth}{1} % % \StopEventually{} % \MakeShortVerb{\|} % % \iffalse % \changes{v1.01}{1996/06/26}{first edition for LaTeX2e} % \changes{v1.02}{1998/10/31}{revised edition for LaTeX2e} % \changes{v2.00}{1998/12/25}{enhanced edition for LaTeX2e} % \changes{v2.01}{2001/6/20}{Command for Sugars} (private version) % \changes{v3.00}{2002/4/30}{Command for Sugars} % \changes{v4.00}{2002/05/30}{PostScript output and ShiftPicEnv} % \changes{v4.01}{2004/08/30}{Minor additions} % \changes{v5.00}{2010/10/01}{bond coloring and the LaTeX Project Public License} % \changes{v5.01b}{2013/03/30}{Improvement of this documentation} % \changes{v5.01bb}{2013/03/31}{\cs{pyranosew} etc. added} % \changes{v5.01}{2013/06/25}{\cs{sixsugarhw} etc. added. Wavy bonds added} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi \ProvidesFile{hcycle.dtx}[2013/06/25 v5.01 XyMTeX{} package file] % \iffalse \documentclass{ltxdoc} \GetFileInfo{hcycle.dtx} % % %%XyMTeX Logo: Definition 2%%% \def\UPSILON{\char'7} \def\XyM{X\kern-.30em\smash{% \raise.50ex\hbox{\UPSILON}}\kern-.30em{M}} \def\XyMTeX{\XyM\kern-.1em\TeX} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{Further Hetrocycles by {\sffamily hcycle.sty} (\fileversion) of \XyMTeX{}} \author{Shinsaku Fujita \\ Shonan Institute of Chemoinformatics and Mathematical Chemistry, \\ Kaneko 479-7 Ooimachi, Ashigara-Kami-Gun, Kanagawa 250-0019 Japan % % (old address) % %Department of Chemistry and Materials Technology, \\ % %Kyoto Institute of Technology, \\ % %Matsugasaki, Sakyoku, Kyoto, 606-8585 Japan % %% (old address) % %% Ashigara Research Laboratories, % %% Fuji Photo Film Co., Ltd., \\ % %% Minami-Ashigara, Kanagawa, 250-01 Japan } \date{\filedate} % \begin{document} \maketitle \DocInput{hcycle.dtx} \end{document} % % \fi % % \section{Introduction}\label{hcycle:intro} % % \subsection{Options for {\sffamily docstrip}} % % \DeleteShortVerb{\|} % \begin{center} % \begin{tabular}{|l|l|} % \hline % \emph{option} & \emph{function}\\ \hline % hcycle & hcycle.sty \\ % driver & driver for this dtx file \\ % \hline % \end{tabular} % \end{center} % \MakeShortVerb{\|} % % \subsection{Version Information} % % \begin{macrocode} %<*hcycle> \typeout{XyMTeX for Drawing Chemical Structural Formulas. Version 5.01} \typeout{ -- Released June 25, 2013 by Shinsaku Fujita} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\j@urnalname{hcycle} \def\versi@ndate{June 25, 2013} \def\versi@nno{ver5.01} \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \typeout{XyMTeX Macro File `\j@urnalname' (\versi@nno) <\versi@ndate>% \space[\copyrighth@lder]} % \end{macrocode} % % \section{List of commands for hcycle.sty} % % \begin{verbatim} % ******************************** % * hcycle.sty: list of commands * % ******************************** % % % % \@pyrana % \@pyranb % \@pyranbb % \@pyranbB % \@pyranbC % \@pyranc % % % % construction: % \pyranose \@pyranose % \Pyranose \@Pyranose % \furanose \@furanose % \Furanose \@Furanose % % \pyranosew \@pyranosew % \Pyranosew \@Pyranosew % \furanosew \@furanosew % \Furanosew \@Furanosew % % adjustment: % \ylpyranoseposition % \ylfuranoseposition % % % large dimension: % (construction) % \SixSugarh \@Six@Sugarh \@Six@@Sugarh \@SixSugarh % % (adjustment) % \ylSixSugarhposition \test@vrtx@SixSugarh % \set@skel@Sugarhbond \set@hetatom@Sugarh % % (bond) % \Sugarhskbonda \Sugarhskbondc \Sugarhskbondd % \Sugarhskbondb \Sugarhskbonde \Sugarhskbondf % % \Sugarhbonda \Sugarhbondf \Sugarhbondc % \Sugarhbondd \Sugarhbonde \Sugarhbondb % % normal dimension: % (construction) % \sixsugarh \@six@sugarh \@six@@sugarh \@sixsugarh % \sixsugarhw \@six@sugarhw % % (adjustment) % \set@skel@sugarhbond \set@hetatom@sugarh % % (bond) % \sugarhskbonda \sugarhskbondc \sugarhskbondd % \sugarhskbondb \sugarhskbonde \sugarhskbondf % % \sugarhbonda \sugarhbondf \sugarhbondc % \sugarhbondd \sugarhbonde \sugarhbondb % % % % large dimension: % (construction) % \FiveSugarh \@Five@Sugarh \@Five@@Sugarh \@FiveSugarh % % (adjustment) % \ylFiveSugarhposition % \set@hteatom@FiveSugarh % % (bond) % \fSugarhskbondd \fSugarhskbonde % % \fSugarhbondd \fSugarhbonde % % normal dimension: % (construction) % \fivesugarh \@five@sugarh \@five@@sugarh \@fivesugarh % \fivesugarhw \@five@sugarhw % % (adjustment) % \ylfiveSugarhposition % \set@hteatom@fivesugarh % % (bond) % \fsugarhskbondd \fsugarhskbonde % % \fsugarhbondd \fsugarhbonde % % % \cyclitol \@cyclitol % \Cyclitol \@Cyclitol % % % \end{verbatim} % % \section{Input of basic macros} % % To assure the compatibility to \LaTeX{}2.09 (the native mode), % the commands added by \LaTeXe{} have not been used in the resulting sty % files ({\sf hcycle.sty} for the present case). Hence, the combination % of |\input| and |\@ifundefined| is used to crossload sty % files ({\sf chemstr.sty} for the present case) in place of the % |\RequirePackage| command of \LaTeXe{}. % % \begin{macrocode} % ************************* % * input of basic macros * % ************************* \@ifundefined{setsixringv}{\input chemstr.sty\relax}{} \unitlength=0.1pt % \end{macrocode} % % \section{Pyranoses and Furanoses} % \subsection{Macros for setting substituents} % % Macros |\@pyrana| to |\@pyranc| are used to set substituents % on each position of a pyranose and furanose. Note that % comments (conerning locant numbers) on the end of each row have % lost the exact meaning, % since such a command moiety is used in many macros after copying. % % \begin{macro}{\@pyrana} % \begin{macro}{\@pyranb} % \begin{macro}{\@pyranbb} % \begin{macro}{\@pyranbB} % \begin{macro}{\@pyranc} % \begin{macro}{\@pyranbC} % \changes{v1.02}{1998/10/31}{Adding \cs{yl@xdiff} and \cs{yl@ydiff}} % \changes{v2.01}{2001/6/20}{Adding \cs{\@pyranbC}} % \changes{v5.01}{2013/6/25}{Adding wavy bonds} % \begin{macrocode} % ************************************************** % * setting substituents for pyranose and furanose * % ************************************************** % %%%%%%%%%%%%%%% % % subst. on 1 % % %%%%%%%%%%%%%%% \newif\if@clipping \@clippingfalse \def\@pyrana{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(45,0)(1,0){80}% single bond at 1 \putratom{130}{-30}{\@memberb}% right type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){73}% single bond at 1 alpha (down) \putratom{-32}{-190}{\@memberb}% right type \else\if\@tmpc b%(e) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){73}% single bond at 1 beta (up) \putratom{-32}{130}{\@memberb}% right type \else\if\@tmpc A% alpha \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(25,-25)(1,-1){100}% single bond at 1 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc B% beta \yl@xdiff=-10 \yl@ydiff=10 \Put@Line(25,25)(1,1){100}% single bond at 1 \putratom{130}{110}{\@memberb}% right type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(30,-15)(1,0){90}% double bond at 1 \Put@Line(30,15)(1,0){90}% double bond at 1 \putratom{130}{-30}{\@memberb}% right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=30\relax {% \WaveBonds% \Put@Line(25,0)(1,0){100}% % wavy bond at 1 }% \putratom{130}{-30}{\@memberb}% right type % \else% \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(45,0)(1,0){90}% single bond at 1 \putratom{130}{-30}{\@memberb}% right type \fi \fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(0,0)(1,0){120}% single bond at 1 \putratom{130}{-30}{\@memberb}% right type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond at 1 alpha (down) \putratom{-32}{-190}{\@memberb}% right type \else\if\@tmpc b%(e) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond at 1 beta (up) \putratom{-32}{130}{\@memberb}% right type \else\if\@tmpc A% alpha \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(0,0)(1,-1){120}% single bond at 1 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc B% beta \yl@xdiff=-10 \yl@ydiff=10 \Put@Line(0,0)(1,1){120}% single bond at 1 \putratom{130}{110}{\@memberb}% right type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(0,-15)(1,0){120}% double bond at 1 \Put@Line(0,15)(1,0){120}% double bond at 1 \putratom{130}{-30}{\@memberb}% right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=30\relax {% \WaveBonds% \Put@Line(0,0)(1,0){120}% % wavy bond at 1 }% \putratom{130}{-30}{\@memberb}% right type % \else% \yl@xdiff=-10 \yl@ydiff=30 \Put@Line(0,0)(1,0){120}% single bond at 1 \putratom{130}{-30}{\@memberb}% right type \fi\fi\fi \fi }% % \end{macrocode} % % \changes{v1.02}{1998/10/25}{\cs{@pyranb} is divided into % \cs{@pyranb}, \cs{@pyranbb} and \cs{@pyranbB}} % \changes{v1.02}{1998/10/31}{Adding \cs{yl@xdiff} and \cs{yl@ydiff}} % \begin{macrocode} % %%%%%%%%%%%%%%%%%%% % % subst. on 2,3,5 % % %%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%% % % subst. on 2 % % %%%%%%%%%%%%%%% \def\@pyranb{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(45,-45)(1,-1){100}% single bond at 2 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){73}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){73}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \else\if\@tmpc A%(A) beta \yl@xdiff=10 \yl@ydiff=40 \Put@Line(40,-40)(1,-1){100}% single bond at 2 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc B%(B) beta \yl@xdiff=-10 \yl@ydiff=40 \Put@Line(-40,-40)(-1,-1){100}% single bond at 2 \putlatom{-130}{-180}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(15,-45)(1,-1){100}% double bond at 2 \Put@Line(45,-15)(1,-1){100}% double bond at 2 \putratom{130}{-180}{\@memberb}% right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=40\relax {% \WaveBonds% \Put@Line(40,-40)(1,-1){90}% % wavy bond at 2 }% \putratom{130}{-180}{\@memberb}% right type % \else% \yl@xdiff=-10 \yl@ydiff=10 \Put@Line(45,45)(1,1){100}% single bond at 1 \putratom{130}{110}{\@memberb}% left type \fi\fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(0,0)(1,-1){120}% single bond at 1 \putratom{130}{-180}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \fi\fi\fi%\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(-15,-15)(1,-1){120}% double bond at 1 \Put@Line(0,15)(1,-1){120}% double bond at 1 \putratom{130}{-180}{\@memberb}% right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=60\relax {% \WaveBonds% \Put@Line(0,0)(1,-1){120}% % wavy bond at 2 }% \putratom{130}{-180}{\@memberb}% right type % \else% \yl@xdiff=-10 \yl@ydiff=10 \Put@Line(0,0)(1,1){120}% single bond at 1 \putratom{130}{110}{\@memberb}% left type \fi\fi\fi \fi }% % \end{macrocode} % % \changes{v1.02}{1998/10/31}{Adding \cs{yl@xdiff} and \cs{yl@ydiff}} % \begin{macrocode} % %%%%%%%%%%%%%%% % % subst. on 3 % % %%%%%%%%%%%%%%% \def\@pyranbb{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(45,-45)(1,-1){100}% single bond at 3 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){73}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){73}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \else\if\@tmpc A%(A) beta% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(45,-45)(1,-1){100}% single bond at 3 \putratom{130}{-180}{\@memberb}% right type \else\if\@tmpc B%(B) beta \yl@xdiff=10 \yl@ydiff=60 \Put@Line(-45,-45)(-1,-1){100}% single bond at 3 \putlatom{-130}{-180}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=20 \yl@ydiff=60 \Put@Line(-15,-45)(-1,-1){100}% double bond at 3 \Put@Line(-45,-15)(-1,-1){100}% double bond at 3 \putlatom{-130}{-180}{\@memberb}%left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=60\relax {% \WaveBonds% \Put@Line(-40,-40)(-1,-1){90}% % wavy bond at 2 }% \putlatom{-130}{-180}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=60 \Put@Line(-45,-45)(-1,-1){100}% single bond at 1 \putlatom{-130}{-180}{\@memberb}% left type \fi\fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(0,0)(1,-1){120}% single bond at 1 \putratom{130}{-180}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \fi\fi\fi%\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=20 \yl@ydiff=60 \Put@Line(15,-15)(-1,-1){120}% double bond at 1 \Put@Line(0,15)(-1,-1){120}% double bond at 1 \putlatom{-130}{-180}{\@memberb}%left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=-10\relax \yl@ydiff=60\relax {% \WaveBonds% \Put@Line(0,0)(-1,-1){120}% % wavy bond at 2 }% \putlatom{-130}{-180}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=60 \Put@Line(0,0)(-1,-1){120}% single bond at 1 \putlatom{-130}{-180}{\@memberb}% left type \fi\fi\fi \fi }% % \end{macrocode} % % \changes{v1.02}{1998/10/31}{Adding \cs{yl@xdiff} and \cs{yl@ydiff}} % \begin{macrocode} % %%%%%%%%%%%%%%% % % subst. on 5 % % %%%%%%%%%%%%%%% \def\@pyranbB{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=10 \yl@ydiff=-60 \Put@Line(-45,45)(-1,1){100}% single bond at 5 \putlatom{-130}{130}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){73}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){73}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \else\if\@tmpc A%(A) beta \yl@xdiff=10 \yl@ydiff=-60 \Put@Line(-45,45)(-1,1){100}% single bond at 5 \putlatom{-130}{130}{\@memberb}% left type \else\if\@tmpc B%(B) beta \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(45,45)(1,1){100}% single bond at 5 \putratom{130}{130}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=0 \yl@ydiff=-20 \Put@Line(-15,45)(-1,1){100}% double bond at 5 \Put@Line(-45,15)(-1,1){100}% double bond at 5 \putlatom{-120}{140}{\@memberb}%left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=10\relax \yl@ydiff=-60\relax {% \WaveBonds% \Put@Line(-40,40)(-1,1){90}% % wavy bond at 5 }% \putlatom{-130}{130}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=-60 \Put@Line(-45,45)(-1,1){100}% single bond at 5 \putlatom{-130}{130}{\@memberb}% left type \fi\fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(0,0)(1,-1){120}% single bond at 5 \putratom{130}{-180}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \fi\fi\fi%\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=0 \yl@ydiff=-20 \Put@Line(15,15)(-1,1){120}% double bond at 5 \Put@Line(0,-15)(-1,1){120}% double bond at 5 \putlatom{-120}{140}{\@memberb}%left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=10\relax \yl@ydiff=-60\relax {% \WaveBonds% \Put@Line(0,0)(-1,1){120}% % wavy bond at 5 }% \putlatom{-130}{130}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=-20 \Put@Line(0,0)(-1,1){120}% single bond at 1 \putlatom{-130}{140}{\@memberb}% left type \fi\fi\fi \fi }% % \end{macrocode} % % \changes{v1.02}{1998/10/31}{Adding \cs{yl@xdiff} and \cs{yl@ydiff}} % \begin{macrocode} % %%%%%%%%%%%%%%% % % subst. on 4 % % %%%%%%%%%%%%%%% \def\@pyranc{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=10 \yl@ydiff=30 \Put@Line(-45,0)(-1,0){80}% single bond at 4 \putlatom{-130}{-30}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=-32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){80}% single bond at 4 \putlatom{32}{-190}{\@memberb}% left type \else\if\@tmpc b%(e) beta \yl@xdiff=-32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){80}% single bond at 4 beta (up) \putlatom{32}{130}{\@memberb}% left type \else\if\@tmpc A% alpha \yl@xdiff=10 \yl@ydiff=60 \Put@Line(-30,-30)(-1,-1){100}% single bond at 4 \putlatom{-130}{-180}{\@memberb}% left type \else\if\@tmpc B% beta \yl@xdiff=10 \yl@ydiff=10 \Put@Line(-30,30)(-1,1){100}% single bond at 4 \putlatom{-130}{110}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond \yl@xdiff=10 \yl@ydiff=30 \Put@Line(-30,-15)(-1,0){100}% double bond at 4 \Put@Line(-30,15)(-1,0){100}% double bond at 4 \putlatom{-130}{-30}{\@memberb}% left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=10\relax \yl@ydiff=30\relax {% \WaveBonds% \Put@Line(-30,0)(-1,0){100}% % wavy bond at 4 }% \putlatom{-130}{-30}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=30 \Put@Line(-45,0)(-1,0){80}% single bond at 4 \putlatom{-130}{-30}{\@memberb}% left type \fi\fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=10 \yl@ydiff=30 \Put@Line(0,0)(-1,0){120}% single bond at 4 \putlatom{-130}{-30}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=-32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond at 4 alpha (down) \putlatom{32}{-190}{\@memberb}% left type \else\if\@tmpc b%(e) beta \yl@xdiff=-32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond at 4 beta (up) \putlatom{32}{130}{\@memberb}% left type \else\if\@tmpc A% alpha \yl@xdiff=10 \yl@ydiff=60 \Put@Line(0,0)(-1,-1){120}% single bond at 4 \putlatom{-130}{-180}{\@memberb}% left type \else\if\@tmpc B% beta \yl@xdiff=10 \yl@ydiff=10 \Put@Line(0,0)(-1,1){120}% single bond at 4 \putlatom{-130}{110}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond \yl@xdiff=10 \yl@ydiff=30 \Put@Line(0,-15)(-1,0){120}% double bond at 4 \Put@Line(0,15)(-1,0){120}% double bond at 4 \putlatom{-130}{-30}{\@memberb}% left type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=10\relax \yl@ydiff=30\relax {% \WaveBonds% \Put@Line(0,0)(-1,0){120}% % wavy bond at 4 }% \putlatom{-130}{-30}{\@memberb}% left type % \else% \yl@xdiff=10 \yl@ydiff=30 \Put@Line(0,0)(-1,0){120}% single bond at 4 \putlatom{-130}{-30}{\@memberb}% left type \fi\fi\fi \fi }% % \end{macrocode} % % \changes{v2.01}{2001/06/20}{New command for SixSugar} % \begin{macrocode} % %%%%%%%%%%%%%%% % % subst. on 6 % % %%%%%%%%%%%%%%% \def\@pyranbC{% \if@clipping%clipping \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=5 \yl@ydiff=5 \Put@Line(45,45)(1,1){100}% single bond at 6 \putratom{130}{140}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,-45)(0,-1){73}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,45)(0,1){73}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \else\if\@tmpc A%(A) \yl@xdiff=5 \yl@ydiff=5 \Put@Line(45,45)(1,1){100}% single bond at 6 \putratom{130}{140}{\@memberb}% right type \else\if\@tmpc B%(B) \yl@xdiff=5 \yl@ydiff=-15 \Put@Line(-45,45)(-1,1){100}% single bond at 6 \putlatom{-130}{140}{\@memberb}% left type \fi\fi\fi\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=0 \yl@ydiff=-20 \Put@Line(45,15)(1,1){100}% double bond at 6 \Put@Line(15,45)(1,1){100}% double bond at 6 \putratom{130}{140}{\@memberb}%right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=5\relax \yl@ydiff=5\relax {% \WaveBonds% \Put@Line(40,40)(1,1){90}% % wavy bond at 6 }% \putratom{130}{130}{\@memberb}% right type % \else% \yl@xdiff=5 \yl@ydiff=5 \Put@Line(45,45)(1,1){100}% single bond at 6 \putratom{130}{140}{\@memberb}% left type \fi\fi\fi \else \if\@tmpb S%single bond \ifx\@tmpc\empty% \yl@xdiff=-10 \yl@ydiff=60 \Put@Line(0,0)(1,-1){120}% single bond at 6 \putratom{130}{-180}{\@memberb}% left type \else\if\@tmpc a%(a) alpha \yl@xdiff=32 \yl@ydiff=72 \Put@Line(0,0)(0,-1){118}% single bond alpha (down) \putlratom{-32}{-190}{\@memberb}% left & right type \else\if\@tmpc b%(b) beta \yl@xdiff=32 \yl@ydiff=-12 \Put@Line(0,0)(0,1){118}% single bond beta (up) \putlratom{-32}{130}{\@memberb}% left & right type \fi\fi\fi%\fi\fi% \else \if\@tmpb D%double bond: Added by SF 1998/10/25 \yl@xdiff=0 \yl@ydiff=-20 \Put@Line(15,-15)(1,1){120}% double bond at 6 \Put@Line(0,15)(1,1){120}% double bond at 6 \putratom{130}{140}{\@memberb}%right type %2013/06/25 \else\if\@tmpb U%(U) alpha undefined \yl@xdiff=5\relax \yl@ydiff=5\relax {% \WaveBonds% \Put@Line(0,0)(1,1){120}% % wavy bond at 6 }% \putratom{130}{130}{\@memberb}% right type % \else% \yl@xdiff=10 \yl@ydiff=-20 \Put@Line(0,0)(1,1){120}% single bond at 6 \putratom{130}{140}{\@memberb}% right type \fi\fi\fi \fi }% % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \subsection{Pyranose derivatives} % % The standard skeleton of pyranose is selected % to have the following locant numbers. % % \begin{verbatim} % *********************** % * pyranose derivative * % *********************** % % The following numbering is adopted in this macro. % % 5 e 6 % ----O % d * * f % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % \end{verbatim} % % The macro |\pyranose| has an argument |SUBSLIST| as well as an optional % argument |BONDLIST|. % \begin{verbatim} % % \pyranose[BONDLIST]{SUBSLIST} % % \end{verbatim} % % The |BONDLIST| argument contains one or more % characters selected from a to f, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % \begin{verbatim} % % BONDLIST = % % none : mother skeleton % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,6-double bond % f : 6,1-double bond % % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % \begin{verbatim} % % SUBSLIST: list of substituents (max 5 substitution positions) % % for n = 1 to 5 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom % % \end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % % \pyranose{1Sb==Cl;2Sa==F} % \pyranose{1Sb==Cl;4Sa==F;2Sa==CH$_{3}$} % \pyranose[a]{3Sb==OAc;4Sb==\lmoiety{MeO};5Sb==CH$_{2}$OAc} % \end{verbatim} % % The definition of |\@pyranose| uses a picture environment, in which % bonds are put directly, while subsituents are typset by using % the macros |\@pyrana| to |\@pyranc| described above. % \changes{v1.02}{1998/10/31}{Adding \cs{ylpyranoseposition}, \cs{if@ylsw}, % \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, % \cs{yl@xdiff} and \cs{yl@ydiff}} % % \changes{v2.01}{2001/06/20}{The definition has been changed: % the old \cs{pyranose} to \cs{pyranoseold}} % \changes{v5.00}{2010/10/01}{For bond coloring} % \begin{macro}{\pyranoseold} % \begin{macro}{\@pyranoseold} % \begin{macrocode} %<*hcycleold> \def\pyranoseold{\@ifnextchar[{\@pyranoseold}{\@pyranoseold[r]}} \def\@pyranoseold[#1]#2{% \@reset@ylsw% \ylpyranoseposition{#2}% \def\@@ylii{0}\def\@@yli{0}% \begin{ShiftPicEnvB}(0,0)(-\yl@shiftii,-\yl@shifti)/% (880,800)(-240,-400){pyranose}% (240,400)%2002/4/30 by S. Fujita \Put@Line(0,0)(3,5){120}% %bond 4-5 \Put@Line(120,200)(1,0){252}% %bond 5-6 \Put@Line(532,0)(-3,5){96}% %bond 1-6 {\thicklines% \Put@Line(0,0)(3,-5){120}% %bond 4-3 \Put@Line(412,-200)(3,5){120}% %bond 2-1 \Put@Line(120,-200)(1,0){292}}% %bond 3-2 \putratom{382}{160}{O}% left type % \@tfor\member:=#1\do{% \if\member r%no endcyclic double bonds \else \if\member a% \Put@Line(400,-150)(3,5){90}% %double bond 2-1 \else \if\member b% \Put@Line(150,-160)(1,0){232}% %double bond 3-2 \else \if\member c% \Put@Line(50,-12)(3,-5){90}% %double bond 4-3 \else \if\member d% \Put@Line(50,12)(3,5){90}% %double bond 4-5 \else \if\member e% \Put@Line(150,160)(1,0){232}% %double bond 5-6 \else \if\member f% \Put@Line(482,12)(-3,5){70}% %double bond 1-6 \fi\fi\fi\fi\fi\fi\fi}% % \@forsemicol\member:=#2\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(532,0){% \if@clip \@clippingtrue \else \@clippingfalse\fi \@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(412,-200){% \if@eclip \@clippingtrue \else \@clippingfalse\fi \@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(120,-200){% \if@fclip \@clippingtrue \else \@clippingfalse\fi \@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){% \if@aclip \@clippingtrue \else \@clippingfalse\fi \@pyranc}}% subst. on 4 \or\setBScolor{\Put@Direct(120,200){% \if@bclip \@clippingtrue \else \@clippingfalse\fi \@pyranbB}}% subst. on 5 \or\setBScolor{\Put@Direct(412,200){% \if@cclip \@clippingtrue \else \@clippingfalse\fi \@pyranbC}}% subst. on 6%%added 2001/6/20 \fi %end of ifcase \fi\fi% }% \end{ShiftPicEnvB}% }% %end of \pyranose macro % % \end{macrocode} % \end{macro} % \end{macro} % % \changes{v2.01}{2001/06/20}{The new definition for \cs{pyranose}} % % \begin{macro}{\pyranose} % \begin{macro}{\@pyranose} % \begin{macrocode} %<*hcycle> \def\pyranose{\@ifnextchar[{\@pyranose}{\@pyranose[]}} \def\@pyranose[#1]#2{\sixsugarh[#1]{6==O}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % The front skeletal bonds of a pyranose ring are typeset with a bold line and wedged lines. % \changes{v5.01}{2013/03/31}{added the definition for \cs{pyranosew}} % % \begin{macro}{\pyranosew} % \begin{macro}{\@pyranosew} % \begin{macrocode} \def\pyranosew{\@ifnextchar[{\@pyranosew}{\@pyranosew[]}} \def\@pyranosew[#1]#2{% \sixsugarh[#1]{6==O;1s==\WedgeAsSubst(0,0)(-3,-5){120};4s==\WedgeAsSubst(0,0)(3,-5){120};% 3s==\PutBondLine(-17,0)(307,0){2.8pt}}{#2}[abc]} % \end{macrocode} % \end{macro} % \end{macro} % % Pyranose derivatives of slightly large dimension can be % drawn by the |\Pyranose| macro. % % \changes{v2.01}{2001/06/20}{New command: \cs{Pyranose}} % % \begin{macro}{\Pyranose} % \begin{macro}{\@Pyranose} % \begin{macrocode} \def\Pyranose{\@ifnextchar[{\@Pyranose}{\@Pyranose[]}} \def\@Pyranose[#1]#2{\SixSugarh[#1]{6==O}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % The front skeletal bonds of a pyranose ring are typeset with a bold line and wedged lines. % This command cannot be used in |\TeX|/|\LaTeX| mode. The PostScript mode or the PDF mode % should be used. % \changes{v5.01}{2013/03/31}{added the definition for \cs{Pyranosew}} % % \begin{macro}{\Pyranosew} % \begin{macro}{\@Pyranosew} % \begin{macrocode} \def\Pyranosew{\@ifnextchar[{\@Pyranosew}{\@Pyranosew[]}} \def\@Pyranosew[#1]#2{% \SixSugarh[#1]{6==O;1s==\WedgeAsSubst(0,0)(-3,-5){153};4s==\WedgeAsSubst(0,0)(3,-5){153};% 3s==\PutBondLine(-17,0)(376,0){2.8pt}}{#2}[abc]} % % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Furanose derivatives} % % The standard skeleton of furanose is selected % to have the following locant numbers. % % \begin{verbatim} % *********************** % * furanose derivative * % *********************** % % The following numbering is adopted in this macro. % % 5 % O % d * * e % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % % \end{verbatim} % % The macro |\furanose| has an argument |SUBSLIST| as well as an optional % argument |BONDLIST|. % \begin{verbatim} % \furanose[BONDLIST]{SUBSLIST} % \end{verbatim} % % The |BONDLIST| argument contains one or more % characters selected from a to e, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % \begin{verbatim} % BONDLIST = % % none : mother skeleton % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,6-double bond % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % \begin{verbatim} % SUBSLIST: list of substituents (max 4 substitution positions) % % for n = 1 to 4 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom %\end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % % \furanose{1Sa==Cl;2Sb==F} % % \end{verbatim} % % The definition of |\@furanose| uses a picture environment, in which % bonds are put directly, while subsituents are typset by using % the macros |\@pyrana| to |\@pyranc| described above. % \changes{v1.02}{1998/10/31}{Adding \cs{ylfuranoseposition}, \cs{if@ylsw}, % \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, % \cs{yl@xdiff} and \cs{yl@ydiff}} % \changes{v5.00}{2010/10/01}{For bond coloring} % % \begin{macro}{\furanoseold} % \begin{macro}{\@furanoseold} % \begin{macrocode} %<*hcycleold> \def\furanoseold{\@ifnextchar[{\@furanoseold}{\@furanoseold[r]}} \def\@furanoseold[#1]#2{% \@reset@ylsw% \ylfuranoseposition{#2}% \def\@@ylii{0}\def\@@yli{0}% \begin{ShiftPicEnvB}(0,0)(-\yl@shiftii,-\yl@shifti)/% (880,800)(-240,-400){furanose}% (240,400)%2002/4/30 by S. Fujita \Put@Line(0,0)(5,3){236}% %bond 4-5 \Put@Line(532,0)(-5,3){236}% %bond 1-5 {\thicklines% \Put@Line(0,0)(3,-5){120}% %bond 4-3 \Put@Line(412,-200)(3,5){120}% %bond 2-1 \Put@Line(120,-200)(1,0){292}}% %bond 3-2 \putratom{236}{130}{O}% left type % \@tfor\member:=#1\do{% \if\member r%no endcyclic double bonds \else \if\member a% \Put@Line(400,-150)(3,5){80}% %double bond 2-1 \else \if\member b% \Put@Line(150,-160)(1,0){232}% %double bond 3-2 \else \if\member c% \Put@Line(50,-12)(3,-5){80}% %double bond 4-3 \else \if\member d% \Put@Line(50,0)(5,3){180}% %double bond 4-5 \else \if\member e% \Put@Line(482,0)(-5,3){180}% %double bond 1-5 \fi\fi\fi\fi\fi\fi}% % \@forsemicol\member:=#2\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(532,0){\@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(412,-200){\@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(120,-200){\@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){\@pyranc}}% subst. on 4 \fi%end of ifcase \fi\fi% }% \end{ShiftPicEnvB}% }% %end of \furanoseold macro % % \end{macrocode} % \end{macro} % \end{macro} % % \changes{v2.01}{2001/06/20}{The new definition for \cs{furanose}} % \begin{macro}{\furanose} % \begin{macro}{\@furanose} % \begin{macrocode} %<*hcycle> \def\furanose{\@ifnextchar[{\@furanose}{\@furanose[]}} \def\@furanose[#1]#2{\fivesugarh[#1]{5==O}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % The front skeletal bonds of a pyranose ring are typeset with a bold line and wedged lines. % \changes{v5.01}{2013/03/31}{New command \cs{furanosew}} % \begin{macro}{\furanosew} % \begin{macro}{\@furanosew} % \begin{macrocode} \def\furanosew{\@ifnextchar[{\@furanosew}{\@furanosew[]}} \def\@furanosew[#1]#2{% \fivesugarh[#1]{5==O;1s==\WedgeAsSubst(0,0)(-3,-5){120};% 4s==\WedgeAsSubst(0,0)(3,-5){120};% 3s==\PutBondLine(-17,0)(307,0){2.8pt}}{#2}[abc]} % \end{macrocode} % \end{macro} % \end{macro} % % Furanose derivatives of slightly large dimension can be % drawn by the |\Furanose| macro. % % \changes{v2.01}{2001/06/20}{New command: \cs{Furanose}} % % \begin{macro}{\Furanose} % \begin{macro}{\@Furanose} % \begin{macrocode} \def\Furanose{\@ifnextchar[{\@Furanose}{\@Furanose[]}} \def\@Furanose[#1]#2{\FiveSugarh[#1]{5==O}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % The front skeletal bonds of a pyranose ring are typeset with a bold line and wedged lines. % This command cannot be used in |\TeX|/|\LaTeX| mode. The PostScript mode or the PDF mode % should be used. % \changes{v5.01}{2013/03/31}{New command \cs{Furanosew}} % \begin{macro}{\Furanosew} % \begin{macro}{\@Furanosew} % \begin{macrocode} \def\Furanosew{\@ifnextchar[{\@Furanosew}{\@Furanosew[]}} \def\@Furanosew[#1]#2{% \FiveSugarh[#1]{5==O;1s==\WedgeAsSubst(0,0)(-3,-5){153};% 4s==\WedgeAsSubst(0,0)(3,-5){153};% 3s==\PutBondLine(-17,0)(376,0){2.8pt}}{#2}[abc]} % \end{macrocode} % \end{macro} % \end{macro} % % \section{Six-Membered Sugar Derivatives of Large Dimension} % \subsection{General Conventions} % % The standard skeleton of cyclitol is selected % to have the following locant numbers. % % \begin{verbatim} % ******************** % * Sugarh derivative * % ******************** % % The following numbering is adopted in this macro. % % 5 e 6 % ---- % d * * f % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % \end{verbatim} % % % The macro |\SixSugarh| has two arguments |ATOMLIST| and |SUBSLIST| % as well as an optional argument |BONDLIST|. % Two optional arguments |SKBONDLIST| and |OMIT| are added to % treat stereochemical information or other bond situations. % % \begin{verbatim} % \SixSugarh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}[OMIT] % \end{verbatim} % % The |SKBONDLIST| argument contains pairs of two alphabets in % parentheses, e.g. (\{bA\}\{fB\}). Each pair contains a lowercase % character selected from bond specifiers `a' to `f' and a uppercase % character `A' or `B'. % % The |BONDLIST| argument contains one % character selected from a to f, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % The option `$n+$' ($n=1$ to $6$) represents a plus charge on a hetero atom % at the $n$-position. % % \begin{verbatim} % % BONDLIST = % none or [] : fully saturated form % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,6-double bond % f : 6,1-double bond % {n+} : plus at the n-nitrogen atom (n = 1 to 4) % \end{verbatim} % % The |ATOMLIST| argument contains one or more heteroatom descriptors % which are separated from each other by a semicolon. Each heteroatom % descriptor consists of a locant number and a heteroatom, % where these are separated with a double equality symbol. % % \begin{verbatim} % ATOMLIST: list of heteroatoms (max 6 atoms) % % for n = 1 to 6 % % n : Hetero atom, e.g. N, O, etc. at n-position, % e.g. 1==N for N at 1-position % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % % \begin{verbatim} % % SUBSLIST: list of substituents (max 6 substitution positions) % % for n = 1 to 6 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom % % \end{verbatim} % % The argument |OMIT| represents one or more bonds to be omitted. % The omitted edges may be regarded as both fused and non-fused % positions. % % \begin{verbatim} % OMIT: one or more bonds omitted (a, b, c, d, e, or f) % \end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % \SixSugarh{6==O}{1Sa==OH;2Sa==OH} % \end{verbatim} % % The definition of |\SixSugarh| uses a picture environment and % consists of the same unit processes as shown in |\sixheteroh|: % \begin{enumerate} % \item treatment of atom list, % \item placing outer skeletons, % \item placing inner double bonds, % \item setting hetero atoms, and % \item placing substituents dirctly % (cf. |\setsixringh| for a |\sixheteroh|) % \end{enumerate} % \changes{v2.01}{2001/6/20}{Newly defined.} % \changes{v5.00}{2010/10/01}{For bond coloring} % % \begin{macro}{\SixSugarh} % \begin{macro}{\@Six@Sugarh} % \begin{macro}{\@Six@@Sugarh} % \begin{macro}{\@SixSugarh} % \begin{macrocode} \def\SixSugarh{\@ifnextchar({\@Six@Sugarh(@}{\@Six@Sugarh(@)}} \def\@Six@Sugarh(#1){\@ifnextchar[{\@Six@@Sugarh(#1)[@}% {\@Six@@Sugarh(#1)[@]}} \def\@Six@@Sugarh(#1)[#2]#3#4{\@ifnextchar[% {\@SixSugarh(#1)[#2]{#3}{#4}[@}% {\@SixSugarh(#1)[#2]{#3}{#4}[@]}} \def\@SixSugarh(#1)[#2]#3#4[#5]{% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%% % % treatment of atom list % % %%%%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \test@vrtx@SixSugarh{#3}% %test for a hetero atom or a spiro substituent on a vertex \@reset@ylsw% \ylSixSugarhposition{#4}%shift values \begin{ShiftPicEnv}(0,0)(-\yl@shiftii,-\yl@shifti)/% (880,800)(-240,-400){SixSugarh}%2002/4/30 by S. Fujita % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%% % % outer skeleton % % %%%%%%%%%%%%%%%%%% {\resetbdsw% \@bond@@omit{#5}%%%|\@aaa| etc. are empty if they are omitted. \molfronttrue \set@skel@Sugarhbond{#1}{a}{a}% %bond between 1 and 2 \@aaa -> \Sugarhskbonda etc \set@skel@Sugarhbond{#1}{b}{b}% %bond between 2 and 3 \@bbb -> \Sugarhskbondb etc \set@skel@Sugarhbond{#1}{c}{c}% %bond between 3 and 4 \@ccc -> \Sugarhskbondc etc \molfrontfalse \set@skel@Sugarhbond{#1}{d}{d}% %bond between 4 and 5 \@ddd -> \Sugarhskbondd etc \set@skel@Sugarhbond{#1}{e}{e}% %bond between 5 and 6 \@eee -> \Sugarhskbonde etc \set@skel@Sugarhbond{#1}{f}{f}% %bond between 6 and 1 \@fff -> \Sugarhskbondf etc }% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%% % % inner double bond % % %%%%%%%%%%%%%%%%%%%%% \@tfor\member:=#2\do{% \if\member r\relax \Sugarhbondd \Sugarhbondf \Sugarhbondb% \else \if\member l\relax \Sugarhbonda \Sugarhbondc \Sugarhbonde% \else \if\member a\relax \Sugarhbonda% \else \if\member b\relax \Sugarhbondb% \else \if\member c\relax \Sugarhbondc% \else \if\member d\relax \Sugarhbondd% \else \if\member e\relax \Sugarhbonde% \else \if\member f\relax \Sugarhbondf% \else \if\member A% no action: %%left aromatic circle % \Put@oCircle(203,0){240}% %circle % %%%%%%%%%%%%%%%%%%%%%%%%% % % inner bond attachment % % %%%%%%%%%%%%%%%%%%%%%%%%% \else \expandafter\twoCH@@R\member//% \set@fusionadd@sixhi \ifx\@@tmpa\empty% \XyMTeXWarning{Fused function is unavailable for SixSugarh.}\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi}% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting hetero atoms % % %%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \set@hetatom@Sugarh{#3}{-3}{0}{5}{1}% %subst 4--6 \set@hetatom@Sugarh{#3}{3}{3}{7}{1}% %subst 1 -- 3 % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting substituents % % %%%%%%%%%%%%%%%%%%%%%%%% \@forsemicol\member:=#4\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(668,0){% \if@clip \@clippingtrue \else \@clippingfalse\fi \@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(513,-255){% \if@eclip \@clippingtrue \else \@clippingfalse\fi \@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(153,-255){% \if@fclip \@clippingtrue \else \@clippingfalse\fi \@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){% \if@aclip \@clippingtrue \else \@clippingfalse\fi \@pyranc}}% subst. on 4 \or\setBScolor{\Put@Direct(153,255){% \if@bclip \@clippingtrue \else \@clippingfalse\fi \@pyranbB}}% subst. on 5 \or\setBScolor{\Put@Direct(513,255){% \if@cclip \@clippingtrue \else \@clippingfalse\fi \@pyranbC}}% subst. on 6 \fi %end of ifcase \fi\fi}% \end{ShiftPicEnv}% \iniatom\iniflag}% %end of \SixSugarh macro % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % The macro |\test@vrtx@SixSugarh| is used to test the presence of % a hetero atom or a spiro substituent on a vertex of the % sixheteroh nucleus. % % \begin{macro}{\test@vrtx@SixSugarh} % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\test@vrtx@SixSugarh#1{% \@forsemicol\member:=#1\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\twoch@r\@membera{}% \ifcase\@tmpa% \or \if\@tmpb s\relax\def\aaa{}\else\def\aaa{@}\fi \or \if\@tmpb s\relax\def\bbb{}\else\def\bbb{@}\fi \or \if\@tmpb s\relax\def\ccc{}\else\def\ccc{@}\fi \or \if\@tmpb s\relax\def\ddd{}\else\def\ddd{@}\fi \or \if\@tmpb s\relax\def\eee{}\else\def\eee{@}\fi \or \if\@tmpb s\relax\def\fff{}\else\def\fff{@}\fi \fi\fi}% }% end of \test@vrtx@SixSugarh % \end{macrocode} % \end{macro} % % The command |\ylSixSugarhposition| is to obtain the shift values % |\@ylii| and |\@yli| which are used for shifting the standard % point of a substituent. % \changes{v1.02}{1998/10/25}{New commands for setting substituents} % % \begin{macro}{\ylSixSugarhposition} % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\ylSixSugarhposition#1{% \@@ylswfalse%%%\@reset@ylsw \@forsemicol\member:=#1\do{% \if@@ylsw\else \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax \expandafter\threech@r\@membera{}{}\relax \ifx\@memberb\@yl\relax\@@ylswtrue\else\@@ylswfalse\fi \if@@ylsw \ifcase\@tmpa%0 omit \or\gdef\@ylii{-668}\gdef\@yli{0}\global\@ylswtrue% subst. on 1 \or\gdef\@ylii{-513}\gdef\@yli{255}\global\@ylswtrue% subst. on 2 \or\gdef\@ylii{-153}\gdef\@yli{255}\global\@ylswtrue% subst. on 3 \or\gdef\@ylii{0}\gdef\@yli{0}\global\@ylswtrue% subst. on 4 \or\gdef\@ylii{-153}\gdef\@yli{-255}\global\@ylswtrue% subst. on 5 \or\gdef\@ylii{-513}\gdef\@yli{-255}\global\@ylswtrue% subst. on 6 \fi%end of ifcase \fi\fi\fi}}% % \end{macrocode} % \end{macro} % % \subsection{Skeletal bonds of Sugarhs} % % The macro |\set@skel@Sugarhbond| is used in |\SixSugarh| etc. % for setting skeletal bonds (outer bonds), when |\@aaa| etc. % (produced by |\csname|...|\endcsname|) are equal to `a' % etc. (given as \#2). Thinline, thickline and dotted-line % skeletal bonds are available. % % \begin{macro}{\set@skel@Sugarhbond} % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \newif\ifmolfront \molfrontfalse \newif\if@fivemembered \@fivememberedfalse \def\set@skel@Sugarhbond#1#2#3{% \expandafter\if\csname @#2#2#2\endcsname #2\relax%OK % \if\@aaa #2\relax%OK \@skbondlistfalse \@tfor\member:=#1\do{% \expandafter\twoCH@@R\member//% \if\@@tmpa #2\relax% \if\@@tmpb A\relax% \if@fivemembered \expandafter\csname fdothskbond#3\endcsname% \dothskbonda etc. \else \expandafter\csname dothskbond#3\endcsname% \dothskbonda etc. \fi \@skbondlisttrue \else\if\@@tmpb B\relax% {\thicklines \if@fivemembered \expandafter\csname fSugarhskbond#3\endcsname% \dothskbonda etc. \else \expandafter\csname Sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \@skbondlisttrue \fi\fi \fi% }% \if@skbondlist\else \ifmolfront {\thicklines \if@fivemembered \expandafter\csname fSugarhskbond#3\endcsname% \dothskbonda etc. \else \expandafter\csname Sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \else {\thinlines \if@fivemembered \expandafter\csname fSugarhskbond#3\endcsname% \dothskbonda etc. \else \expandafter\csname Sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \fi \fi% \else \expandafter\ifx\csname @#2#2#2\endcsname \empty\relax% % \ifx\@aaa\empty\relax \@tfor\member:=#1\do{% \expandafter\twoCH@@R\member//% \if\@@tmpa #2\relax% \XyMTeXWarning{Unavailable bond `#2' in SKBONDLIST}\fi }% \fi\fi }% end of \set@skel@Sugarhbond % \end{macrocode} % \end{macro} % % The macros |\SixSugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\Sugarhskbonda| to |\Sugarhskbondf| are used to set a bond % on each edge of a six- or five-membered ring. % % \begin{verbatim} % ************************************ % * setting skeletal bonds of Sugarhs * % ************************************ % The following numbering is adopted in this macro. % % e % (eee) 5 6 (fff) % d ----- c % * * % the original point ===> 4 * (ddd) * 1 (aaa) % (0,0) * * a % c ----- % (ccc) 3 2 (bbb) % b % \end{verbatim} % % \begin{macro}{\Sugarhskbonda} % The macro |\Sugarhskbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 2 \def\Sugarhskbonda{% \ifx\aaa\empty% \ifx\bbb\empty% \Put@Line(668,0)(-3,-5){153}% %bond 1-2 \else% \Put@Line(668,0)(-3,-5){120}% %bond 1-2 \fi% \else% \ifx\bbb\empty% \Put@Line(635,-55)(-3,-5){120}% %bond 1-2 \else% \Put@Line(635,-55)(-3,-5){93}% %bond 1-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhskbondf} % The macro |\Sugarhskbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 6 \def\Sugarhskbondf{% \ifx\aaa\empty% \ifx\fff\empty% \Put@Line(668,0)(-3,5){153}% %bond 1-6 \else% \Put@Line(668,0)(-3,5){120}% %bond 1-6 \fi% \else% \ifx\fff\empty% \Put@Line(635,55)(-3,5){120}% %bond 1-6 \else% \Put@Line(635,55)(-3,5){93}% %bond 1-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhskbondc} % The macro |\Sugarhskbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ccc| and |\ddd|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 3 \def\Sugarhskbondc{% \ifx\ddd\empty% \ifx\ccc\empty% \Put@Line(0,0)(3,-5){153}% %bond 4-3 \else% \Put@Line(0,0)(3,-5){120}% %bond 4-3 \fi% \else% \ifx\ccc\empty% \Put@Line(33,-55)(3,-5){120}% %bond 4-3 \else% \Put@Line(33,-55)(3,-5){93}% %bond 4-3 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhskbondd} % The macro |\Sugarhskbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\Sugarhskbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(0,0)(3,5){153}% %bond 4-5 \else% \Put@Line(0,0)(3,5){120}% %bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(33,55)(3,5){120}% %bond 4-5 \else% \Put@Line(33,55)(3,5){93}% %bond 4-5 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhskbondb} % The macro |\Sugarhskbondb| refers to the control sequences representing % atoms on both of the terminal vertices (|\bbb| and |\ccc|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 3 and 2 \def\Sugarhskbondb{% \ifx\ccc\empty% \ifx\bbb\empty% \Put@Line(153,-255)(1,0){360}% %bond 3-2 \else% \Put@Line(153,-255)(1,0){314}% %bond 3-2 \fi% \else% \ifx\bbb\empty% \Put@Line(199,-255)(1,0){314}% %bond 3-2 \else% \Put@Line(199,-255)(1,0){278}% %bond 3-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhskbonde} % The macro |\Sugarhskbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 6 \def\Sugarhskbonde{% \ifx\eee\empty% \ifx\fff\empty% \Put@Line(153,255)(1,0){360}% %bond 5-6 \else% \Put@Line(153,255)(1,0){314}% %bond 5-6 \fi% \else% \ifx\fff\empty% \Put@Line(199,255)(1,0){314}% %bond 5-6 \else% \Put@Line(199,255)(1,0){278}% %bond 5-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \subsection{Inner Double Bonds of Sugarhs} % % The macros |\SixSugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\Sugarhbonda| to |\Sugarhbondf| are used to set a bond % on each edge of a six- or five-membered ring. % % \begin{verbatim} % ******************************************** % * setting skeletal bonds (horizontal type) * % ******************************************** % The following numbering is adopted in this macro. % % e % (eee) 5 6 (fff) % d ----- c % * * % the original point ===> 4 * (ddd) * 1 (aaa) % (0,0) * * a % c ----- % (ccc) 3 2 (bbb) % b % \end{verbatim} % % \begin{macro}{\Sugarhbonda} % The macro |\Sugarhbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 2 \def\Sugarhbonda{% \ifx\aaa\empty% \ifx\bbb\empty% \Put@Line(605,-22)(-3,-5){100}% %bond 1-2 \else% \Put@Line(604,-15)(-3,-5){93}% %bond 1-2 \fi% \else% \ifx\bbb\empty% \Put@Line(587,-52)(-3,-5){93}% %bond 1-2 \else% \Put@Line(593,-42)(-3,-5){93}% %bond 1-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhbondf} % The macro |\Sugarhbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 6 \def\Sugarhbondf{% \ifx\aaa\empty% \ifx\fff\empty% \Put@Line(605,22)(-3,5){100}% %bond 1-6 \else% \Put@Line(604,15)(-3,5){97}% %bond 1-6 \fi% \else% \ifx\fff\empty% \Put@Line(587,52)(-3,5){93}% %bond 1-6 \else% \Put@Line(593,42)(-3,5){93}% %bond 1-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhbondc} % The macro |\Sugarhbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ccc| and |\ddd|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 3 \def\Sugarhbondc{% \ifx\ddd\empty% \ifx\ccc\empty% \Put@Line(63,-22)(3,-5){100}% %bond 4-3 \else% \Put@Line(64,-15)(3,-5){97}% %bond 4-3 \fi% \else% \ifx\ccc\empty% \Put@Line(81,-52)(3,-5){93}% %bond 4-3 \else% \Put@Line(75,-42)(3,-5){93}% %bond 4-3 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhbondd} % The macro |\Sugarhbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\Sugarhbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(63,22)(3,5){100}% %bond 4-5 \else% \Put@Line(64,15)(3,5){97}% %bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(81,52)(3,5){93}% %bond 4-5 \else% \Put@Line(75,42)(3,5){93}% %bond 4-5 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhbondb} % The macro |\Sugarhbondb| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 3 and 2 \def\Sugarhbondb{% \ifx\ccc\empty% \ifx\bbb\empty% \Put@Line(183,-205)(1,0){300}% %bond 3-2 \else% \Put@Line(183,-205)(1,0){275}% %bond 3-2 \fi% \else% \ifx\bbb\empty% \Put@Line(203,-205)(1,0){275}% %bond 3-2 \else% \Put@Line(198,-205)(1,0){270}% %bond 3-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\Sugarhbonde} % The macro |\Sugarhbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 6 \def\Sugarhbonde{% \ifx\eee\empty% \ifx\fff\empty% \Put@Line(183,205)(1,0){300}% %bond 5-6 \else% \Put@Line(183,205)(1,0){275}% %bond 5-6 \fi% \else% \ifx\fff\empty% \Put@Line(203,205)(1,0){275}% %bond 5-6 \else% \Put@Line(198,205)(1,0){270}% %bond 5-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \subsection{Hetero Atoms on Sugarh Skeletons} % % The command |\set@hetatom@Sugarh| is to set a spiro group % (stored as |\@memberb|) % at a vertix designated by |\@tmpaa| (or originally by |\@tmpa|). % The atom modifier `s' designates that the spiro group contains % a carbon atom (a vertix) at a spiro position, while `h' % represents the presence of a hetero atom at a spiro position. % The absence of such atom modifiers shows the substitution % of a usual hetero atom. The command |\set@hetatom@Sugarh| is % used in such commands as |\SixSugarh| for treating thier ATOMLISTs, % e.g. |1==N;1s==\SixSugarh{}{1==(yl)}|. % % \begin{macro}{\set@hetatom@Sugarh} % \changes{v2.01}{2001/6/20}{New command: \cs{set@hetatom@Sugarh}} % \begin{macrocode} \def\set@hetatom@Sugarh#1#2#3#4#5{% \@forsemicol\member:=#1\do{% \ifx\member\empty\else% \expandafter\@m@mb@r\member;\relax% \expandafter\twoCH@R\@membera//% \ifnum#5 < 0\relax% \@tmpaa=-\@tmpa\relax \advance\@tmpaa by#2\relax% \else\@tmpaa=\@tmpa\relax \advance\@tmpaa by#2\relax \fi \ifnum\@tmpaa >#3\relax% \ifnum\@tmpaa <#4\relax% \ifcase\@tmpaa% \or%position 1 \if\@tmpb h\relax \@acliptrue% \putlatom{60}{0}{\@memberb}% % left type \else\if\@tmpb s\relax \@aclipfalse% \putlatom{0}{0}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@acliptrue% \putlatom{60}{-36}{\@memberb}% % left type \fi\fi\fi \or%position 2 \if\@tmpb h\relax \@bcliptrue% \putlatom{185}{225}{\@memberb}% % left type \else\if\@tmpb s\relax \@bclipfalse% \putlatom{153}{255}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@bcliptrue% \putlatom{185}{225}{\@memberb}% % left type \fi\fi\fi \or%position 3 \if\@tmpb h\relax \@ccliptrue% \putratom{483}{225}{\@memberb}% % right type \else\if\@tmpb s\relax \@cclipfalse% \putratom{513}{255}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@ccliptrue% \putratom{483}{225}{\@memberb}% % right type \fi\fi\fi \or%position 4 \if\@tmpb h\relax \@cliptrue% \putratom{608}{0}{\@memberb}% % right type \else\if\@tmpb s\relax \@clipfalse% \putratom{668}{0}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@cliptrue% \putratom{608}{-36}{\@memberb}% % right type \fi\fi\fi \or%position 5 \if\@tmpb h\relax \@ecliptrue% \putratom{493}{-225}{\@memberb}% % right type \else\if\@tmpb s\relax \@eclipfalse% \putratom{513}{-255}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@ecliptrue% \putratom{483}{-295}{\@memberb}% % right type \fi\fi\fi \or%position 6 \if\@tmpb h\relax \@fcliptrue% \putlatom{175}{-215}{\@memberb}% % left type \else\if\@tmpb s\relax \@fclipfalse% \putlatom{153}{-255}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@fcliptrue% \putlatom{185}{-295}{\@memberb}% % left type \fi\fi\fi \fi% end of ifcase \fi\fi\fi}}% end of the macro \set@hetatom@Sugarh % \end{macrocode} % \end{macro} % % \section{Six-Membered Sugar Derivatives of Normal Dimension} % \subsection{General Conventions} % % The standard skeleton of cyclitol is selected % to have the following locant numbers. % % \begin{verbatim} % ********************* % * sugarh derivative * % ********************* % % The following numbering is adopted in this macro. % % 5 e 6 % ---- % d * * f % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % \end{verbatim} % % % The macro |\sixsugarh| has two arguments |ATOMLIST| and |SUBSLIST| % as well as an optional argument |BONDLIST|. % Two optional arguments |SKBONDLIST| and |OMIT| are added to % treat stereochemical information or other bond situations. % % \begin{verbatim} % \sixsugarh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}[OMIT] % \end{verbatim} % % The |SKBONDLIST| argument contains pairs of two alphabets in % parentheses, e.g. (\{bA\}\{fB\}). Each pair contains a lowercase % character selected from bond specifiers `a' to `f' and a uppercase % character `A' or `B'. % % The |BONDLIST| argument contains one % character selected from a to f, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % The option `$n+$' ($n=1$ to $6$) represents a plus charge on a hetero atom % at the $n$-position. % % \begin{verbatim} % % BONDLIST = % % none or [] : fully saturated form % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,6-double bond % f : 6,1-double bond % {n+} : not supproted (+ at the n-hetro atom, n = 1 to 6) % \end{verbatim} % % The |ATOMLIST| argument contains one or more heteroatom descriptors % which are separated from each other by a semicolon. Each heteroatom % descriptor consists of a locant number and a heteroatom, % where these are separated with a double equality symbol. % % \begin{verbatim} % ATOMLIST: list of heteroatoms (max 6 atoms) % % for n = 1 to 6 % % n : Hetero atom, e.g. N, O, etc. at n-position, % e.g. 1==N for N at 1-position % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % % \begin{verbatim} % % SUBSLIST: list of substituents (max 6 substitution positions) % % for n = 1 to 6 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom % % \end{verbatim} % % The argument |OMIT| represents one or more bonds to be omitted. % The omitted edges may be regarded as both fused and non-fused % positions. % % \begin{verbatim} % OMIT: one or more bonds omitted (a, b, c, d, e, or f) % \end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % \sixsugarh{6==O}{1Sa==OH;2Sa==OH} % \end{verbatim} % % The definition of |\sixsugarh| uses a picture environment and % consists of the same unit processes as shown in |\sixheteroh|: % \begin{enumerate} % \item treatment of atom list, % \item placing outer skeletons, % \item placing inner double bonds, % \item setting hetero atoms, and % \item placing substituents dirctly % (cf. |\setsixringh| for a |\sixheteroh|) % \end{enumerate} % \changes{v2.01}{2001/6/20}{Newly defined.} % \changes{v5.00}{2010/10/01}{For bond coloring} % % \begin{macro}{\sixsugarh} % \begin{macro}{\@six@sugarh} % \begin{macro}{\@six@@sugarh} % \begin{macro}{\@sixsugarh} % \begin{macrocode} \def\sixsugarh{\@ifnextchar({\@six@sugarh(@}{\@six@sugarh(@)}} \def\@six@sugarh(#1){\@ifnextchar[{\@six@@sugarh(#1)[@}% {\@six@@sugarh(#1)[@]}} \def\@six@@sugarh(#1)[#2]#3#4{\@ifnextchar[% {\@sixsugarh(#1)[#2]{#3}{#4}[@}% {\@sixsugarh(#1)[#2]{#3}{#4}[@]}} \def\@sixsugarh(#1)[#2]#3#4[#5]{% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%% % % treatment of atom list % % %%%%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \test@vrtx@SixSugarh{#3}% %test for a hetero atom or a spiro substituent on a vertex \@reset@ylsw% \ylpyranoseposition{#4}%shift values \begin{ShiftPicEnv}(0,0)(-\yl@shiftii,-\yl@shifti)/% (880,800)(-240,-400){sixsugarh}%2002/4/30 by S. Fujita % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%% % % outer skeleton % % %%%%%%%%%%%%%%%%%% {\resetbdsw% \@bond@@omit{#5}%%%|\@aaa| etc. are empty if they are omitted. \@fivememberedfalse%not five-membered ring \molfronttrue%boldfaced lines (thicklines) \set@skel@sugarhbond{#1}{a}{a}% %bond between 1 and 2 \@aaa -> \sugarhskbonda etc \set@skel@sugarhbond{#1}{b}{b}% %bond between 2 and 3 \@bbb -> \sugarhskbondb etc \set@skel@sugarhbond{#1}{c}{c}% %bond between 3 and 4 \@ccc -> \sugarhskbondc etc \molfrontfalse%normal lines (thinelines) \set@skel@sugarhbond{#1}{d}{d}% %bond between 4 and 5 \@ddd -> \sugarhskbondd etc \set@skel@sugarhbond{#1}{e}{e}% %bond between 5 and 6 \@eee -> \sugarhskbonde etc \set@skel@sugarhbond{#1}{f}{f}% %bond between 6 and 1 \@fff -> \sugarhskbondf etc }% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%% % % inner double bond % % %%%%%%%%%%%%%%%%%%%%% \@tfor\member:=#2\do{% \if\member r\relax \sugarhbondd \sugarhbondf \sugarhbondb% \else \if\member l\relax \sugarhbonda \sugarhbondc \sugarhbonde% \else \if\member a\relax \sugarhbonda% \else \if\member b\relax \sugarhbondb% \else \if\member c\relax \sugarhbondc% \else \if\member d\relax \sugarhbondd% \else \if\member e\relax \sugarhbonde% \else \if\member f\relax \sugarhbondf% \else \if\member A% no action: %%left aromatic circle % \Put@oCircle(203,0){240}% %circle % %%%%%%%%%%%%%%%%%%%%%%%%% % % inner bond attachment % % %%%%%%%%%%%%%%%%%%%%%%%%% \else \expandafter\twoCH@@R\member//% \set@fusionadd@sixhi \ifx\@@tmpa\empty% \XyMTeXWarning{Fused function is unavailable for sixsugarh.}\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi}% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting hetero atoms % % %%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \set@hetatom@sugarh{#3}{-3}{0}{5}{1}% %subst 4--6 \set@hetatom@sugarh{#3}{3}{3}{7}{1}% %subst 1 -- 3 % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting substituents % % %%%%%%%%%%%%%%%%%%%%%%%% \@forsemicol\member:=#4\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(532,0){% \if@clip \@clippingtrue \else \@clippingfalse\fi \@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(412,-200){% \if@eclip \@clippingtrue \else \@clippingfalse\fi \@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(120,-200){% \if@fclip \@clippingtrue \else \@clippingfalse\fi \@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){% \if@aclip \@clippingtrue \else \@clippingfalse\fi \@pyranc}}% subst. on 4 \or\setBScolor{\Put@Direct(120,200){% \if@bclip \@clippingtrue \else \@clippingfalse\fi \@pyranbB}}% subst. on 5 \or\setBScolor{\Put@Direct(412,200){% \if@cclip \@clippingtrue \else \@clippingfalse\fi \@pyranbC}}% subst. on 6 \fi %end of ifcase \fi\fi}% \end{ShiftPicEnv}% \iniatom\iniflag}% %end of \sixsugarh macro % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % The command |\ylpyranoseposition| is to obtain the shift values % |\@ylii| and |\@yli| which are used for shifting the standard % point of a substituent. % \changes{v1.02}{1998/10/25}{New commands for setting substituents} % \changes{v2.01}{2001/6/20}{Added for position 6} % % \begin{macro}{\ylpyranoseposition} % \begin{macrocode} \def\ylpyranoseposition#1{% \@@ylswfalse%%%\@reset@ylsw \@forsemicol\member:=#1\do{% \if@@ylsw\else \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax \expandafter\threech@r\@membera{}{}\relax \ifx\@memberb\@yl\relax\@@ylswtrue\else\@@ylswfalse\fi \if@@ylsw \ifcase\@tmpa%0 omit \or\gdef\@ylii{-532}\gdef\@yli{0}\global\@ylswtrue% subst. on 1 \or\gdef\@ylii{-412}\gdef\@yli{200}\global\@ylswtrue% subst. on 2 \or\gdef\@ylii{-120}\gdef\@yli{200}\global\@ylswtrue% subst. on 3 \or\gdef\@ylii{0}\gdef\@yli{0}\global\@ylswtrue% subst. on 4 \or\gdef\@ylii{-120}\gdef\@yli{-200}\global\@ylswtrue% subst. on 5 \or\gdef\@ylii{-412}\gdef\@yli{-200}\global\@ylswtrue% subst. on 6 \fi%end of ifcase \fi\fi\fi}}% % \end{macrocode} % \end{macro} % % The front skeletal bonds of a pyranose ring are typeset with a bold line and wedged lines. % \changes{v5.01}{2013/06/25}{added the definition for \cs{sixsugarhw}} % % \begin{macro}{\sixsugarhw} % \begin{macro}{\@sixsugarhw} % \begin{macrocode} \def\sixsugarhw{\@ifnextchar[{\@sixsugarhw}{\@sixsugarhw[]}} \def\@sixsugarhw[#1]#2#3{% \sixsugarh[#1]{6==O;1s==\WedgeAsSubst(0,0)(-3,-5){120};% 4s==\WedgeAsSubst(0,0)(3,-5){120};% 3s==\PutBondLine(-17,0)(307,0){2.8pt};#2}{#3}[abc]} % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Skeletal bonds of sugarhs} % % The macro |\set@skel@sugarhbond| is used in |\sixsugarh| etc. % for setting skeletal bonds (outer bonds), when |\@aaa| etc. % (produced by |\csname|...|\endcsname|) are equal to `a' % etc. (given as \#2). Thinline, thickline and dotted-line % skeletal bonds are available. % % \begin{macro}{\set@skel@sugarhbond} % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\set@skel@sugarhbond#1#2#3{% \expandafter\if\csname @#2#2#2\endcsname #2\relax%OK % \if\@aaa #2\relax%OK \@skbondlistfalse \@tfor\member:=#1\do{% \expandafter\twoCH@@R\member//% \if\@@tmpa #2\relax% \if\@@tmpb A\relax% \if@fivemembered \expandafter\csname fdothskbond#3\endcsname% \dothskbonda etc. \else \expandafter\csname dothskbond#3\endcsname% \dothskbonda etc. \fi \@skbondlisttrue \else\if\@@tmpb B\relax% {\thicklines \if@fivemembered \expandafter\csname fsugarhskbond#3\endcsname% \hskbonda etc. \else \expandafter\csname sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \@skbondlisttrue \fi\fi \fi% }% \if@skbondlist\else \ifmolfront {\thicklines \if@fivemembered \expandafter\csname fsugarhskbond#3\endcsname% \hskbonda etc. \else \expandafter\csname sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \else {\thinlines \if@fivemembered \expandafter\csname fsugarhskbond#3\endcsname% \hskbonda etc \else \expandafter\csname sugarhskbond#3\endcsname% \hskbonda etc. \fi }% \fi \fi% \else \expandafter\ifx\csname @#2#2#2\endcsname \empty\relax% % \ifx\@aaa\empty\relax \@tfor\member:=#1\do{% \expandafter\twoCH@@R\member//% \if\@@tmpa #2\relax% \XyMTeXWarning{Unavailable bond `#2' in SKBONDLIST}\fi }% \fi\fi }% end of \set@skel@sugarhbond % \end{macrocode} % \end{macro} % % The macros |\sixsugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\sugarhskbonda| to |\sugarhskbondf| are used to set a bond % on each edge of a six- or five-membered ring. % % \begin{verbatim} % ************************************ % * setting skeletal bonds of sugarhs * % ************************************ % The following numbering is adopted in this macro. % % e % (eee) 5 6 (fff) % d ----- c % * * % the original point ===> 4 * (ddd) * 1 (aaa) % (0,0) * * a % c ----- % (ccc) 3 2 (bbb) % b % \end{verbatim} % % \begin{macro}{\sugarhskbonda} % The macro |\sugarhskbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 2 \def\sugarhskbonda{% \ifx\aaa\empty% \ifx\bbb\empty% \Put@Line(532,0)(-3,-5){120}% %bond 1-2 \else% \Put@Line(532,0)(-3,-5){96}% %bond 1-2 \fi% \else% \ifx\bbb\empty% % \Put@Line(635,-55)(-3,-5){120}% %bond 1-2 \Put@Line(511,-35)(-3,-5){96}% %bond 1-2 \else% \Put@Line(511,-35)(-3,-5){80}% %bond 1-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhskbondf} % The macro |\sugarhskbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 6 \def\sugarhskbondf{% \ifx\aaa\empty% \ifx\fff\empty% \Put@Line(532,0)(-3,5){120}% %bond 1-6 \else% \Put@Line(532,0)(-3,5){96}% %bond 1-6 \fi% \else% \ifx\fff\empty% \Put@Line(511,35)(-3,5){96}% %bond 1-6 \else% \Put@Line(511,35)(-3,5){80}% %bond 1-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhskbondc} % The macro |\sugarhskbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ccc| and |\ddd|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 3 \def\sugarhskbondc{% \ifx\ddd\empty% \ifx\ccc\empty% \Put@Line(0,0)(3,-5){120}% %bond 4-3 \else% \Put@Line(0,0)(3,-5){96}% %bond 4-3 \fi% \else% \ifx\ccc\empty% \Put@Line(21,-35)(3,-5){96}% %bond 4-3 \else% \Put@Line(21,-35)(3,-5){80}% %bond 4-3 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhskbondd} % The macro |\sugarhskbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\sugarhskbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(0,0)(3,5){120}% %bond 4-5 \else% \Put@Line(0,0)(3,5){97}% %bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(21,35)(3,5){97}% %bond 4-5 \else% \Put@Line(21,35)(3,5){80}% %bond 4-5 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhskbondb} % The macro |\sugarhskbondb| refers to the control sequences representing % atoms on both of the terminal vertices (|\bbb| and |\ccc|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 3 and 2 \def\sugarhskbondb{% \ifx\ccc\empty% \ifx\bbb\empty% \Put@Line(120,-200)(1,0){292}% %bond 3-2 \else% \Put@Line(120,-200)(1,0){252}% %bond 3-2 \fi% \else% \ifx\bbb\empty% \Put@Line(160,-200)(1,0){252}% %bond 3-2 \else% \Put@Line(160,-200)(1,0){212}% %bond 3-2 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhskbonde} % The macro |\sugarhskbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 6 \def\sugarhskbonde{% \ifx\eee\empty% \ifx\fff\empty% \Put@Line(120,200)(1,0){292}% %bond 5-6 \else% \Put@Line(120,200)(1,0){252}% %bond 5-6 \fi% \else% \ifx\fff\empty% \Put@Line(160,200)(1,0){252}% %bond 5-6 \else% \Put@Line(160,200)(1,0){212}% %bond 5-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \subsection{Hetero Atoms on sugarh Skeletons} % % The command |\set@hetatom@sugarh| is to set a spiro group % (stored as |\@memberb|) % at a vertix designated by |\@tmpaa| (or originally by |\@tmpa|). % The atom modifier `s' designates that the spiro group contains % a carbon atom (a vertix) at a spiro position, while `h' % represents the presence of a hetero atom at a spiro position. % The absence of such atom modifiers shows the substitution % of a usual hetero atom. The command |\set@hetatom@sugarh| is % used in such commands as |\sixsugarh| for treating thier ATOMLISTs, % e.g. |1==N;1s==\sixsugarh{}{1==(yl)}|. % % \begin{macro}{\set@hetatom@sugarh} % \changes{v2.01}{2001/6/20}{New command: \cs{set@hetatom@sugarh}} % \begin{macrocode} \def\set@hetatom@sugarh#1#2#3#4#5{% \@forsemicol\member:=#1\do{% \ifx\member\empty\else% \expandafter\@m@mb@r\member;\relax% \expandafter\twoCH@R\@membera//% \ifnum#5 < 0\relax% \@tmpaa=-\@tmpa\relax \advance\@tmpaa by#2\relax% \else\@tmpaa=\@tmpa\relax \advance\@tmpaa by#2\relax \fi \ifnum\@tmpaa >#3\relax% \ifnum\@tmpaa <#4\relax% \ifcase\@tmpaa% \or%position 1 \if\@tmpb h\relax \@acliptrue% \putlatom{60}{0}{\@memberb}% % left type \else\if\@tmpb s\relax \@aclipfalse% \putlatom{0}{0}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@acliptrue% \putlatom{60}{-36}{\@memberb}% % left type \fi\fi\fi \or%position 2 \if\@tmpb h\relax \@bcliptrue% \putlatom{155}{180}{\@memberb}% % left type \else\if\@tmpb s\relax \@bclipfalse% \putlatom{120}{200}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@bcliptrue% \putlatom{155}{180}{\@memberb}% % left type \fi\fi\fi \or%position 3 \if\@tmpb h\relax \@ccliptrue% \putratom{382}{180}{\@memberb}% % right type \else\if\@tmpb s\relax \@cclipfalse% \putratom{412}{200}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@ccliptrue% \putratom{382}{180}{\@memberb}% % right type \fi\fi\fi \or%position 4 \if\@tmpb h\relax \@cliptrue% \putratom{472}{0}{\@memberb}% % right type \else\if\@tmpb s\relax \@clipfalse% \putratom{532}{0}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@cliptrue% \putratom{472}{-36}{\@memberb}% % right type \fi\fi\fi \or%position 5 \if\@tmpb h\relax \@ecliptrue% \putratom{382}{-240}{\@memberb}% % right type \else\if\@tmpb s\relax \@eclipfalse% \putratom{412}{-200}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@ecliptrue% \putratom{382}{-240}{\@memberb}% % right type \fi\fi\fi \or%position 6 \if\@tmpb h\relax \@fcliptrue% \putlatom{155}{-240}{\@memberb}% % left type \else\if\@tmpb s\relax \@fclipfalse% \putlatom{120}{-200}{\@memberb}% % left type \else\if\@tmpb a\relax%omit fused position \else \@fcliptrue% \putlatom{155}{-240}{\@memberb}% % left type \fi\fi\fi \fi% end of ifcase \fi\fi\fi}}% end of the macro \set@hetatom@sugarh % \end{macrocode} % \end{macro} % % \subsection{Inner Double Bonds of sugarhs} % % The macros |\sixsugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\sugarhbonda| to |\sugarhbondf| are used to set a bond % on each edge of a six- or five-membered ring. % % \begin{verbatim} % ******************************************** % * setting skeletal bonds (horizontal type) * % ******************************************** % The following numbering is adopted in this macro. % e % (eee) 5 6 (fff) % d ----- c % * * % the original point ===> 4 * (ddd) * 1 (aaa) % (0,0) * * a % c ----- % (ccc) 3 2 (bbb) % b % \end{verbatim} % % \begin{macro}{\sugarhbonda} % The macro |\sugarhbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 2 %\else \if\member a% \def\sugarhbonda{% \ifx\aaa\empty% \ifx\bbb\empty% \Put@Line(482,-12)(-3,-5){90}% %double bond 1-2 \else% \Put@Line(482,-12)(-3,-5){80}% %double bond 1-2 \fi% \else% \ifx\bbb\empty% \Put@Line(394,-160)(3,5){70}% %double bond 2-1 \else% \Put@Line(394,-160)(3,5){70}% %double bond 2-1 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhbondf} % The macro |\sugarhbonda| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 1 and 6 \def\sugarhbondf{% \ifx\aaa\empty% \ifx\fff\empty% \Put@Line(482,12)(-3,5){90}% %double bond 1-6 \else% \Put@Line(482,12)(-3,5){80}% %double bond 1-6 \fi% \else% \ifx\fff\empty% \Put@Line(394,160)(3,-5){70}% %double bond 6-1 \else% \Put@Line(394,160)(3,-5){70}% %double bond 6-1 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhbondc} % The macro |\sugarhbondc| refers to the control sequences representing % atoms on both of the terminal vertices (|\ccc| and |\ddd|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 3 \def\sugarhbondc{% \ifx\ddd\empty% \ifx\ccc\empty% \Put@Line(50,-12)(3,-5){90}% %double bond 4-3 \else% \Put@Line(50,-12)(3,-5){80}% %double bond 4-3 \fi% \else% \ifx\ccc\empty% \Put@Line(138,-160)(-3,5){70}% %double bond 3-4 \else% \Put@Line(138,-160)(-3,5){70}% %double bond 3-4 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhbondd} % The macro |\sugarhbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\sugarhbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(50,12)(3,5){90}% %double bond 4-5 \else% \Put@Line(50,12)(3,5){80}% %double bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(138,160)(-3,-5){70}% %double bond 5-4 \else% \Put@Line(138,160)(-3,-5){70}% %double bond 5-4 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\sugarhbondb} % The macro |\sugarhbondb| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\bbb|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 3 and 2 \def\sugarhbondb{% \ifx\ccc\empty% \ifx\bbb\empty% \Put@Line(150,-160)(1,0){232}% %double bond 3-2 \else% \Put@Line(160,-160)(1,0){217}% %double bond 3-2 \fi% \else% \ifx\bbb\empty% \Put@Line(170,-160)(1,0){217}% %double bond 3-2 \else% \Put@Line(170,-160)(1,0){197}% %double bond 3-2 \fi\fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\sugarhbonde} % The macro |\sugarhbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\fff|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 6 \def\sugarhbonde{% \ifx\eee\empty% \ifx\fff\empty% \Put@Line(150,160)(1,0){232}% %double bond 5-6 \else% \Put@Line(160,160)(1,0){217}% %double bond 5-6 \fi% \else% \ifx\fff\empty% \Put@Line(170,160)(1,0){217}% %double bond 5-6 \else% \Put@Line(170,160)(1,0){197}% %double bond 5-6 \fi\fi}% % \end{macrocode} % \end{macro} % % \section{Cyclitol Derivaives} % % Cyclitol derivatives can be drawn by the |\cyclitol| macro. % % \changes{v2.01}{2001/06/20}{New command: \cs{cyclitol}} % % \begin{macro}{\cyclitol} % \begin{macro}{\@cyclitol} % \begin{macrocode} \def\cyclitol{\@ifnextchar[{\@cyclitol}{\@cyclitol[]}} \def\@cyclitol[#1]#2{\sixsugarh[#1]{}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % Cyclitol derivatives of slightly large dimension can be % drawn by the |\Cyclitol| macro. % % \changes{v2.01}{2001/06/20}{New command: \cs{Cyclitol}} % % \begin{macro}{\Cyclitol} % \begin{macro}{\@Cyclitol} % \begin{macrocode} \def\Cyclitol{\@ifnextchar[{\@Cyclitol}{\@Cyclitol[]}} \def\@Cyclitol[#1]#2{\SixSugarh[#1]{}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % \section{Five-Membered Sugar Derivatives of Normal Dimension} % \subsection{General Conventions} % % The standard skeleton of cyclitol is selected % to have the following locant numbers. % % \begin{verbatim} % ************************** % * five-sugarh derivative * % ************************** % % The following numbering is adopted in this macro. % % 5 % * % d * * e % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % % \end{verbatim} % % The macro |\fivesugarh| has two arguments |ATOMLIST| and |SUBSLIST| % as well as an optional argument |BONDLIST|. % Two optional arguments |SKBONDLIST| and |OMIT| are added to % treat stereochemical information or other bond situations. % % \begin{verbatim} % \fivesugarh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}[OMIT] % \end{verbatim} % % The |SKBONDLIST| argument contains pairs of two alphabets in % parentheses, e.g. (\{bA\}\{fB\}). Each pair contains a lowercase % character selected from bond specifiers `a' to `e' and a uppercase % character `A' or `B'. % % The |BONDLIST| argument contains one % character selected from a to f, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % The option `$n+$' ($n=1$ to $5$) represents a plus charge on a hetero atom % at the $n$-position. % % \begin{verbatim} % % BONDLIST = % % none or [] : fully saturated form % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,1-double bond % {n+} : not supported (+ at the n-nitrogen atom, n = 1 to 4) % \end{verbatim} % % The |ATOMLIST| argument contains one or more heteroatom descriptors % which are separated from each other by a semicolon. Each heteroatom % descriptor consists of a locant number and a heteroatom, % where these are separated with a double equality symbol. % % \begin{verbatim} % ATOMLIST: list of heteroatoms (max 6 atoms) % % for n = 1 to 5 % % n : Hetero atom, e.g. N, O, etc. at n-position, % e.g. 1==N for N at 1-position % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % % \begin{verbatim} % % SUBSLIST: list of substituents (max 5 substitution positions) % % for n = 1 to 5 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom % % \end{verbatim} % % The argument |OMIT| represents one or more bonds to be omitted. % The omitted edges may be regarded as both fused and non-fused % positions. % % \begin{verbatim} % OMIT: one or more bonds omitted (a, b, c, d, or e) % \end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % \fivesugarh{5==O}{1Sa==OH;2Sa==OH} % \end{verbatim} % % The definition of |\fivesugarh| uses a picture environment and % consists of the same unit processes as shown in |\fiveheteroh|: % \begin{enumerate} % \item treatment of atom list, % \item placing outer skeletons, % \item placing inner double bonds, % \item setting hetero atoms, and % \item placing substituents dirctly % (cf. |\setsixringh| for a |\fiveheteroh|) % \end{enumerate} % \changes{v2.01}{2001/6/20}{Newly defined.} % \changes{v5.01}{2001/6/25}{bug fix for position 5} % % \begin{macro}{\fivesugarh} % \begin{macro}{\@five@sugarh} % \begin{macro}{\@five@@sugarh} % \begin{macro}{\@fivesugarh} % \begin{macrocode} \def\fivesugarh{\@ifnextchar({\@five@sugarh(@}{\@five@sugarh(@)}} \def\@five@sugarh(#1){\@ifnextchar[{\@five@@sugarh(#1)[@}% {\@five@@sugarh(#1)[@]}} \def\@five@@sugarh(#1)[#2]#3#4{\@ifnextchar[% {\@fivesugarh(#1)[#2]{#3}{#4}[@}% {\@fivesugarh(#1)[#2]{#3}{#4}[@]}} \def\@fivesugarh(#1)[#2]#3#4[#5]{% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%% % % treatment of atom list % % %%%%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \test@vrtx@SixSugarh{#3}% %test for a hetero atom or a spiro substituent on a vertex \@reset@ylsw% \ylfuranoseposition{#4}%shift values \begin{ShiftPicEnv}(0,0)(-\yl@shiftii,-\yl@shifti)/% (880,800)(-240,-400){fivesugarh}%2002/4/30 by S. Fujita % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%% % % outer skeleton % % %%%%%%%%%%%%%%%%%% {\resetbdsw% \@bond@@omit{#5}%%%|\@aaa| etc. are empty if they are omitted. \@fivememberedfalse%common bonds to a six-membered ring \molfronttrue%boldfaced lines (thicklines) \set@skel@sugarhbond{#1}{a}{a}% %bond between 1 and 2 \@aaa -> \sugarhskbonda etc \set@skel@sugarhbond{#1}{b}{b}% %bond between 2 and 3 \@bbb -> \sugarhskbondb etc \set@skel@sugarhbond{#1}{c}{c}% %bond between 3 and 4 \@ccc -> \sugarhskbondc etc \@fivememberedtrue%bonds for a five-membered ring \molfrontfalse%normal lines (thinelines) \set@skel@sugarhbond{#1}{d}{d}% %bond between 4 and 5 \@ddd -> \fsugarhskbondd etc \set@skel@sugarhbond{#1}{e}{e}% %bond between 5 and 1 \@eee -> \fsugarhskbonde etc }% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%% % % inner double bond % % %%%%%%%%%%%%%%%%%%%%% \@tfor\member:=#2\do{% \if\member r\relax %no action \sugarhbondd \sugarhbondf \sugarhbondb% \else \if\member l\relax %no action \sugarhbonda \sugarhbondc \sugarhbonde% \else \if\member a\relax \sugarhbonda% \else \if\member b\relax \sugarhbondb% \else \if\member c\relax \sugarhbondc% \else \if\member d\relax \fsugarhbondd% \else \if\member e\relax \fsugarhbonde% \else \if\member A% no action: %%left aromatic circle % \Put@oCircle(203,0){240}% %circle % %%%%%%%%%%%%%%%%%%%%%%%%% % % inner bond attachment % % %%%%%%%%%%%%%%%%%%%%%%%%% \else%no action % \expandafter\twoCH@@R\member//% % \set@fusionadd@sixhi % \ifx\@@tmpa\empty% % \XyMTeXWarning{Fused function is unavailable for fivesugarh.}\fi \fi\fi\fi\fi\fi\fi\fi\fi}% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting hetero atoms % % %%%%%%%%%%%%%%%%%%%%%%%% \iniflag%initialize \set@hetatom@sugarh{#3}{-3}{0}{2}{1}% %subst 4 \set@hetatom@sugarh{#3}{3}{3}{7}{1}% %subst 1 -- 3 \set@hteatom@fivesugarh{#3}% %subsituent 5 % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting substituents % % %%%%%%%%%%%%%%%%%%%%%%%% \@forsemicol\member:=#4\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(532,0){% \if@clip \@clippingtrue \else \@clippingfalse\fi \@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(412,-200){% \if@eclip \@clippingtrue \else \@clippingfalse\fi \@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(120,-200){% \if@fclip \@clippingtrue \else \@clippingfalse\fi \@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){% \if@aclip \@clippingtrue \else \@clippingfalse\fi \@pyranc}}% subst. on 4 \or\setBScolor{\Put@Direct(266,160){% %\if@bclip \@clippingtrue \else \@clippingfalse\fi %\@pyranbB}}% subst. on 5 {\if@bclip \@acliptrue \put(0,-386){\@substa}%subst. on 5 bug fix 2013/06/25 \else \@aclipfalse% subst. on 5 bug fix 2013/06/25 \put(0,-406){\@substa}\fi}\@aclipfalse}}%%%\@pyranbB}}% subst. on 5 bug fix 2013/06/25 \fi %end of ifcase \fi\fi}% \end{ShiftPicEnv}% \iniatom\iniflag}% %end of \fivesugarh macro % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\resetflags} % \begin{macrocode} % (undefined) % \end{macrocode} % \end{macro} % % The front skeletal bonds of a furanose ring are typeset with a bold line and wedged lines. % \changes{v5.01}{2013/06/25}{added the definition for \cs{fivesugarhw}} % % \begin{macro}{\fivesugarhw} % \begin{macro}{\@fivesugarhw} % \begin{macrocode} \def\fivesugarhw{\@ifnextchar[{\@fivesugarhw}{\@fivesugarhw[]}} \def\@fivesugarhw[#1]#2#3{% \fivesugarh[#1]{5==O;1s==\WedgeAsSubst(0,0)(-3,-5){120};% 4s==\WedgeAsSubst(0,0)(3,-5){120};% 3s==\PutBondLine(-17,0)(307,0){2.8pt};#2}{#3}[abc]} % \end{macrocode} % \end{macro} % \end{macro} % % The command |\ylfuranoseposition| is to obtain the shift values % |\@ylii| and |\@yli| which are used for shifting the standard % point of a substituent. % \changes{v1.02}{1998/10/23}{New commands for setting substituents} % \changes{v2.01}{2001/6/20}{Added for position 5} % % \begin{macro}{\ylfuranoseposition} % \begin{macrocode} \def\ylfuranoseposition#1{% \@@ylswfalse%%%\@reset@ylsw \@forsemicol\member:=#1\do{% \if@@ylsw\else \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax \expandafter\threech@r\@membera{}{}\relax \ifx\@memberb\@yl\relax\@@ylswtrue\else\@@ylswfalse\fi \if@@ylsw \ifcase\@tmpa%0 omit \or\gdef\@ylii{-532}\gdef\@yli{0}\global\@ylswtrue% subst. on 1 \or\gdef\@ylii{-412}\gdef\@yli{200}\global\@ylswtrue% subst. on 2 \or\gdef\@ylii{-120}\gdef\@yli{200}\global\@ylswtrue% subst. on 3 \or\gdef\@ylii{0}\gdef\@yli{0}\global\@ylswtrue% subst. on 4 \or\gdef\@ylii{-266}\gdef\@yli{-160}\global\@ylswtrue% subst. on 5 \fi%end of ifcase \fi\fi\fi}}% % \end{macrocode} % \end{macro} % % \subsection{Skeletal Bonds of fivesugarh} % % The macros |\fivesugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\sugarhskbonda| to |\sugarhskbondc| % (common to |\sixsugarh|) as well as % |\fsugarhskbondd| to |\fsugarhskbonde| % to set a bond on each edge of a five-membered ring. % % \begin{macro}{\fsugarhskbondd} % The macro |\fsugarhskbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\fsugarhskbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(0,0)(5,3){266}% %bond 4-5 \else% \Put@Line(0,0)(5,3){231}% %bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(35,21)(5,3){231}% %bond 4-5 \else% \Put@Line(35,21)(5,3){200}% %bond 4-5 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\fsugarhskbonde} % The macro |\fsugarhskbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\aaa|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 1 \def\fsugarhskbonde{% \ifx\aaa\empty% \ifx\eee\empty% \Put@Line(532,0)(-5,3){266}% %bond 5-1 \else% \Put@Line(532,0)(-5,3){231}% %bond 5-1 \fi% \else% \ifx\eee\empty% \Put@Line(497,21)(-5,3){231}% %bond 5-1 \else% \Put@Line(497,21)(-5,3){200}% %bond 5-1 \fi\fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\set@hteatom@fivesugarh} % The macro |\set@hteatom@fivesugarh| put a hetero atom % on vertex no. 5 of |\fivesugarh|. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\set@hteatom@fivesugarh#1{% \@forsemicol\member:=#1\do{% \ifx\member\empty\else% \expandafter\@m@mb@r\member;\relax% \expandafter\twoCH@R\@membera//% \@tmpaa=\@tmpa\relax \ifnum\@tmpaa=5\relax \if\@tmpb h\relax \@bcliptrue% \putratom{236}{130}{\@memberb}% % right type \else\if\@tmpb s\relax \@bclipfalse% \putratom{266}{160}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@bcliptrue% \putratom{236}{130}{\@memberb}% left type \fi\fi\fi \fi% end of ifnum \fi }}% end of the macro \set@hetatom@fivesugarh % \end{macrocode} % \end{macro} % % \subsection{Inner Double Bonds of fivesugarh} % % The macros |\fivesugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\fsugarhbonda| to |\sugarhbondc| % (common to |\sixsugarh|) as well as % |\fsugarhbondd| and |\sugarhbonde| are used to set a bond % on each edge of a five-membered ring. % % \begin{macro}{\fsugarhbondd} % The macro |\fsugarhbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\fsugarhbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(60,-10)(5,3){190}% %double bond 4-5 \else% \Put@Line(60,-10)(5,3){170}% %double bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(80,6)(5,3){170}% %double bond 5-4 \else% \Put@Line(80,6)(5,3){160}% %double bond 5-4 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\fsugarhbonde} % The macro |\fsugarhbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 1 \def\fsugarhbonde{% \ifx\aaa\empty% \ifx\eee\empty% \Put@Line(472,-10)(-5,3){190}% %double bond 5-1 \else% \Put@Line(472,-10)(-5,3){170}% %double bond 5-1 \fi% \else% \ifx\eee\empty% \Put@Line(452,6)(-5,3){170}% %double bond 5-1 \else% \Put@Line(452,6)(-5,3){160}% %double bond 5-1 \fi\fi}% % \end{macrocode} % \end{macro} % % \section{Five-Membered Sugar Derivatives of Large Dimension} % \subsection{General Conventions} % % The standard skeleton of cyclitol is selected % to have the following locant numbers. % % \begin{verbatim} % ******************** % * Sugarh derivative * % ******************** % % The following numbering is adopted in this macro. % % % 5 % * % d * * e % the original point ===> 4 * * 1 % (0,0) * * a % c ----- % 3 b 2 % \end{verbatim} % % % The macro |\FiveSugarh| has two arguments |ATOMLIST| and |SUBSLIST| % as well as an optional argument |BONDLIST|. % Two optional arguments |SKBONDLIST| and |OMIT| are added to % treat stereochemical information or other bond situations. % % \begin{verbatim} % \FiveSugarh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}[OMIT] % \end{verbatim} % % The |SKBONDLIST| argument contains pairs of two alphabets in % parentheses, e.g. (\{bA\}\{fB\}). Each pair contains a lowercase % character selected from bond specifiers `a' to `e' and a uppercase % character `A' or `B'. % % The |BONDLIST| argument contains one % character selected from a to f, each of which indicates the presence of % an inner (endcyclic) double bond on the corresponding position. % The option `$n+$' ($n=1$ to $6$) represents a plus charge on a hetero atom % at the $n$-position. % % \begin{verbatim} % % BONDLIST = % % none or [] : fully saturated form % a : 1,2-double bond % b : 2,3-double bond % c : 4,3-double bond % d : 4,5-double bond % e : 5,1-double bond % {n+} : not suported: plus at n-nitrogen atom (n = 1 to 5) % \end{verbatim} % % The |ATOMLIST| argument contains one or more heteroatom descriptors % which are separated from each other by a semicolon. Each heteroatom % descriptor consists of a locant number and a heteroatom, % where these are separated with a double equality symbol. % % \begin{verbatim} % ATOMLIST: list of heteroatoms (max 6 atoms) % % for n = 1 to 5 % % n : Hetero atom, e.g. N, O, etc. at n-position, % e.g. 1==N for N at 1-position % \end{verbatim} % % The |SUBSLIST| argument contains one or more substitution descriptors % which are separated from each other by a semicolon. Each substitution % descriptor has a locant number with a bond modifier and a substituent, % where these are separated with a double equality symbol. % % \begin{verbatim} % % SUBSLIST: list of substituents (max 5 substitution positions) % % for n = 1 to 5 % % nD : exocyclic double bond at n-atom % n or nS : exocyclic single bond at n-atom % nSA : single bond (down) at n-atom (for n=1) % nSB : single bond (up) at n-atom (for n=1) % nSa : alpha single bond at n-atom % nSb : beta single bond at n-atom % % \end{verbatim} % % The argument |OMIT| represents one or more bonds to be omitted. % The omitted edges may be regarded as both fused and non-fused % positions. % % \begin{verbatim} % OMIT: one or more bonds omitted (a, b, c, d, or e) % \end{verbatim} % % Several examples are shown as follows. % \begin{verbatim} % e.g. % \FiveSugarh{6==O}{1Sa==OH;2Sa==OH} % \end{verbatim} % % The definition of |\FiveSugarh| uses a picture environment and % consists of the same unit processes as shown in |\sixheteroh|: % \begin{enumerate} % \item treatment of atom list, % \item placing outer skeletons, % \item placing inner double bonds, % \item setting hetero atoms, and % \item placing substituents dirctly % (cf. |\setsixringh| for a |\sixheteroh|) % \end{enumerate} % \changes{v2.01}{2001/6/20}{Newly defined.} % \changes{v5.00}{2010/10/01}{For bond coloring} % % \begin{macro}{\FiveSugarh} % \begin{macro}{\@Five@Sugarh} % \begin{macro}{\@Five@@Sugarh} % \begin{macro}{\@FiveSugarh} % \begin{macrocode} \def\FiveSugarh{\@ifnextchar({\@Five@Sugarh(@}{\@Five@Sugarh(@)}} \def\@Five@Sugarh(#1){\@ifnextchar[{\@Five@@Sugarh(#1)[@}% {\@Five@@Sugarh(#1)[@]}} \def\@Five@@Sugarh(#1)[#2]#3#4{\@ifnextchar[% {\@FiveSugarh(#1)[#2]{#3}{#4}[@}% {\@FiveSugarh(#1)[#2]{#3}{#4}[@]}} \def\@FiveSugarh(#1)[#2]#3#4[#5]{% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%% % % treatment of atom list % % %%%%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \test@vrtx@SixSugarh{#3}%common to six-membered ring %test for a hetero atom or a spiro substituent on a vertex \@reset@ylsw% \ylFiveSugarhposition{#4}%shift values \begin{ShiftPicEnv}(0,0)(-\yl@shiftii,-\yl@shifti)/% (1100,800)(-240,-400){FiveSugarh}%2002/4/30 by S. Fujita % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%% % % outer skeleton % % %%%%%%%%%%%%%%%%%% {\resetbdsw% \@bond@@omit{#5}%%%|\@aaa| etc. are empty if they are omitted. \molfronttrue \@fivememberedfalse%common bonds to a six-membered ring \set@skel@Sugarhbond{#1}{a}{a}% %bond between 1 and 2 \@aaa -> \Sugarhskbonda etc \set@skel@Sugarhbond{#1}{b}{b}% %bond between 2 and 3 \@bbb -> \Sugarhskbondb etc \set@skel@Sugarhbond{#1}{c}{c}% %bond between 3 and 4 \@ccc -> \Sugarhskbondc etc \molfrontfalse \@fivememberedtrue%only five-membered ring \set@skel@Sugarhbond{#1}{d}{d}% %bond between 4 and 5 \@ddd -> \fSugarhskbondd etc \set@skel@Sugarhbond{#1}{e}{e}% %bond between 5 and 1 \@eee -> \fSugarhskbonde etc }% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%% % % inner double bond % % %%%%%%%%%%%%%%%%%%%%% \@tfor\member:=#2\do{% \if\member r\relax %%% no action \Sugarhbondd \Sugarhbondf \Sugarhbondb% \else \if\member l\relax %% noaction \Sugarhbonda \Sugarhbondc \Sugarhbonde% \else \if\member a\relax \Sugarhbonda% \else \if\member b\relax \Sugarhbondb% \else \if\member c\relax \Sugarhbondc% \else \if\member d\relax \fSugarhbondd% \else \if\member e\relax \fSugarhbonde% \else \if\member A% no action: %%left aromatic circle % \Put@oCircle(203,0){240}% %circle % %%%%%%%%%%%%%%%%%%%%%%%%% % % inner bond attachment % % %%%%%%%%%%%%%%%%%%%%%%%%% %\else % \expandafter\twoCH@@R\member//% % \set@fusionadd@sixhi % \ifx\@@tmpa\empty% % \XyMTeXWarning{Fused function is unavailable for FiveSugarh.}\fi \fi\fi\fi\fi\fi\fi\fi\fi}% % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting hetero atoms % % %%%%%%%%%%%%%%%%%%%%%%%% \iniatom\iniflag%initialize \set@hetatom@Sugarh{#3}{-3}{0}{2}{1}% %subst 4 \set@hetatom@Sugarh{#3}{3}{3}{7}{1}% %subst 1 -- 3 \set@hteatom@FiveSugarh{#3}% %subst 5 % \end{macrocode} % % \begin{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%% % % setting substituents % % %%%%%%%%%%%%%%%%%%%%%%%% \@forsemicol\member:=#4\do{% \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax% \expandafter\threech@r\@membera{}{}% \ifx\@memberb\@yl\else \ifcase\@tmpa%0 omit \or\setBScolor{\Put@Direct(668,0){% \if@clip \@clippingtrue \else \@clippingfalse\fi \@pyrana}}% subst. on 1 \or\setBScolor{\Put@Direct(513,-255){% \if@eclip \@clippingtrue \else \@clippingfalse\fi \@pyranb}}% subst. on 2 \or\setBScolor{\Put@Direct(153,-255){% \if@fclip \@clippingtrue \else \@clippingfalse\fi \@pyranbb}}% subst. on 3 \or\setBScolor{\Put@Direct(0,0){% \if@aclip \@clippingtrue \else \@clippingfalse\fi \@pyranc}}% subst. on 4 \or\setBScolor{\Put@Direct(333,200){% \if@bclip \@clippingtrue \else \@clippingfalse\fi \@pyranbB}}% subst. on 5 \fi %end of ifcase \fi\fi}% \end{ShiftPicEnv}% \iniatom\iniflag}% %end of \FiveSugarh macro % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % The command |\ylFiveSugarhposition| is to obtain the shift values % |\@ylii| and |\@yli| which are used for shifting the standard % point of a substituent. % \changes{v1.02}{1998/10/25}{New commands for setting substituents} % % \begin{macro}{\ylFiveSugarhposition} % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\ylFiveSugarhposition#1{% \@@ylswfalse%%%\@reset@ylsw \@forsemicol\member:=#1\do{% \if@@ylsw\else \ifx\member\empty\else \expandafter\@m@mb@r\member;\relax \expandafter\threech@r\@membera{}{}\relax \ifx\@memberb\@yl\relax\@@ylswtrue\else\@@ylswfalse\fi \if@@ylsw \ifcase\@tmpa%0 omit \or\gdef\@ylii{-668}\gdef\@yli{0}\global\@ylswtrue% subst. on 1 \or\gdef\@ylii{-513}\gdef\@yli{255}\global\@ylswtrue% subst. on 2 \or\gdef\@ylii{-153}\gdef\@yli{255}\global\@ylswtrue% subst. on 3 \or\gdef\@ylii{0}\gdef\@yli{0}\global\@ylswtrue% subst. on 4 \or\gdef\@ylii{-333}\gdef\@yli{-200}\global\@ylswtrue% subst. on 5 \fi%end of ifcase \fi\fi\fi}}% % \end{macrocode} % \end{macro} % % \subsection{Skeletal Bonds of FiveSugarh} % % The macros |\FiveSugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\sugarhskbonda| to |\sugarhskbondc| % (common to |\sixsugarh|) as well as % |\fSugarhskbondd| to |\fSugarhskbonde| % to set a bond on each edge of a five-membered ring. % % \begin{macro}{\fSugarhskbondd} % The macro |\fSugarhskbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\fSugarhskbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(0,0)(5,3){333}% %bond 4-5 \else% \Put@Line(0,0)(5,3){298}% %bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(35,21)(5,3){298}% %bond 4-5 \else% \Put@Line(35,21)(5,3){263}% %bond 4-5 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\fSugarhskbonde} % The macro |\fSugarhskbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\eee| and |\aaa|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 1 \def\fSugarhskbonde{% \ifx\aaa\empty% \ifx\eee\empty% \Put@Line(668,0)(-5,3){333}% %bond 5-1 \else% \Put@Line(668,0)(-5,3){298}% %bond 5-1 \fi% \else% \ifx\eee\empty% \Put@Line(633,21)(-5,3){298}% %bond 5-1 \else% \Put@Line(633,21)(-5,3){263}% %bond 5-1 \fi\fi}% % \end{macrocode} % \end{macro} % \begin{macro}{\set@hteatom@FiveSugarh} % The macro |\set@hteatom@FiveSugarh| put a hetero atom % on vertex no. 5 of |\FiveSugarh|. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} \def\set@hteatom@FiveSugarh#1{% \@forsemicol\member:=#1\do{% \ifx\member\empty\else% \expandafter\@m@mb@r\member;\relax% \expandafter\twoCH@R\@membera//% \@tmpaa=\@tmpa\relax \ifnum\@tmpaa=5\relax \if\@tmpb h\relax \@bcliptrue% \putratom{303}{170}{\@memberb}% % right type \else\if\@tmpb s\relax \@bclipfalse% \putratom{333}{200}{\@memberb}% % right type \else\if\@tmpb a\relax%omit fused position \else \@bcliptrue% \putratom{303}{170}{\@memberb}% left type \fi\fi\fi \fi% end of ifnum \fi }}% end of the macro \set@hetatom@FiveSugarh % \end{macrocode} % \end{macro} % % \subsection{Inner Double Bonds of FiveSugarh} % % The macros |\FiveSugarh| uses inner macros for setting % skeletal bonds in accordance with the presence or the absence of % hetero atoms. During the processes of such setting, % the inner macros |\Sugarhbonda| to |\Sugarhbondc| % (common to |\SixSugarh|) as well as % |\fSugarhbondd| and |\fSugarhbonde| are used to set a bond % on each edge of a five-membered ring. % % \begin{macro}{\fSugarhbondd} % The macro |\fSugarhbondd| refers to the control sequences representing % atoms on both of the terminal vertices (|\ddd| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 4 and 5 \def\fSugarhbondd{% \ifx\ddd\empty% \ifx\eee\empty% \Put@Line(60,-10)(5,3){257}% %double bond 4-5 \else% \Put@Line(60,-10)(5,3){237}% %double bond 4-5 \fi% \else% \ifx\eee\empty% \Put@Line(80,6)(5,3){237}% %double bond 5-4 \else% \Put@Line(80,6)(5,3){227}% %double bond 5-4 \fi\fi}% % \end{macrocode} % \end{macro} % % \begin{macro}{\fSugarhbonde} % The macro |\fSugarhbonde| refers to the control sequences representing % atoms on both of the terminal vertices (|\aaa| and |\eee|) and % examine whether these are empty or not. Thereby, % it decides the vertices to be truncated. % % \changes{v2.01}{2001/6/20}{Newly defined.} % \begin{macrocode} %bond between 5 and 1 \def\fSugarhbonde{% \ifx\aaa\empty% \ifx\eee\empty% \Put@Line(608,-10)(-5,3){257}% %double bond 5-1 \else% \Put@Line(608,-10)(-5,3){237}% %double bond 5-1 \fi% \else% \ifx\eee\empty% \Put@Line(588,6)(-5,3){237}% %double bond 5-1 \else% \Put@Line(588,6)(-5,3){227}% %double bond 5-1 \fi\fi}% % % \end{macrocode} % \end{macro} % % \Finale % \endinput %