summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xymtex/base/hcycle.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/xymtex/base/hcycle.dtx')
-rw-r--r--macros/latex/contrib/xymtex/base/hcycle.dtx3897
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>