diff options
Diffstat (limited to 'macros/latex/contrib/xymtex/base/hcycle.dtx')
-rw-r--r-- | macros/latex/contrib/xymtex/base/hcycle.dtx | 3897 |
1 files changed, 3897 insertions, 0 deletions
diff --git a/macros/latex/contrib/xymtex/base/hcycle.dtx b/macros/latex/contrib/xymtex/base/hcycle.dtx new file mode 100644 index 0000000000..87909359c3 --- /dev/null +++ b/macros/latex/contrib/xymtex/base/hcycle.dtx @@ -0,0 +1,3897 @@ +% \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} +%</driver> +% \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 * +% ******************************** +% +% <Convention for bond-setting> +% +% \@pyrana +% \@pyranb +% \@pyranbb +% \@pyranbB +% \@pyranbC +% \@pyranc +% +% <Pyranose and Furanose> +% +% construction: +% \pyranose \@pyranose +% \Pyranose \@Pyranose +% \furanose \@furanose +% \Furanose \@Furanose +% +% \pyranosew \@pyranosew +% \Pyranosew \@Pyranosew +% \furanosew \@furanosew +% \Furanosew \@Furanosew +% +% adjustment: +% \ylpyranoseposition +% \ylfuranoseposition +% +% <Six-membered Sugars> +% 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 +% +% <Five-membered Sugars> +% +% 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 +% +% <Applications> +% \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 +}% +%</hcycle> +% \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 +%</hcycleold> +% \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]} +%</hcycle> +% \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 +%</hcycleold> +% \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}% +%</hcycle> +% \end{macrocode} +% \end{macro} +% +% \Finale +% +\endinput +%</hcycle> |