% hcycle.sty
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\typeout{XyMTeX for Drawing Chemical Structural Formulas. Version 1.00}
\typeout{       -- Released December 1, 1993 by Shinsaku Fujita}
\typeout{}
\typeout{}
% 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].  
%
% Copying of this file is authorized only if either
%  (1) you make absolutely no changes to your copy, including name and 
%     directory name; or
%  (2) if you do make changes, 
%     (a) you name it something other than the names included in the 
%         ``xymtex'' directory and 
%     (b) you are requested to leave this notice intact.
% This restriction ensures that all standard styles are identical.
%
% Please report any bugs, comments, suggestions, etc. to:
%   Shinsaku Fujita, 
%   Ashigara Research Laboratories, Fuji Photo Film Co., Ltd., 
%   Minami-Ashigara, Kanagawa-ken, 250-01, Japan.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\j@urnalname{hcycle}
\def\versi@ndate{December 01, 1993}
\def\versi@nno{ver1.00}
\def\copyrighth@lder{SF} % Shinsaku Fujita
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\typeout{XyMTeX Macro File `\j@urnalname' (\versi@nno) <\versi@ndate>\space%
% [\copyrighth@lder]}
%
% ********************************
% * hcycle.sty: list of commands *
% ********************************
%
% <Convention for bond-setting>
%
%     \@pyrana
%     \@pyranb
%     \@pyranc
%
% <Pyranose and Furanose>
%
%     \pyranose                 \@pyranose
%     \furanose                 \@furanose
%
% *************************
% * input of basic macros *
% *************************
\@ifundefined{setsixringv}{\input chemstr.sty\relax}{}
\unitlength=0.1pt
% **************************************************
% * setting substituents for pyranose and furanose *
% **************************************************
%%%%%%%%%%%%%%%
% subst. on 1 %
%%%%%%%%%%%%%%%
\def\@pyrana{%
   \if\@tmpb S%single bond
    \ifx\@tmpc\empty%
           \put(0,0){\line(1,0){120}}% single bond at 1
           \putratom{130}{-30}{\@memberb}% right type
    \else\if\@tmpc a%(a) alpha
           \put(0,0){\line(0,-1){118}}% single bond at 1 alpha (down)
           \putratom{-32}{-190}{\@memberb}% right type
    \else\if\@tmpc b%(e) beta
           \put(0,0){\line(0,1){118}}% single bond at 1 beta (up)
           \putratom{-32}{130}{\@memberb}% right type
    \else\if\@tmpc A% alpha
           \put(0,0){\line(1,-1){120}}% single bond at 1
           \putratom{130}{-180}{\@memberb}% right type
    \else\if\@tmpc B% beta
           \put(0,0){\line(1,1){120}}% single bond at 1
           \putratom{130}{110}{\@memberb}% right type
    \fi\fi\fi\fi\fi%
   \else \if\@tmpb D%double bond
           \put(0,-15){\line(1,0){120}}% double bond at 1
           \put(0,15){\line(1,0){120}}% double bond at 1
           \putratom{130}{-30}{\@memberb}% right type
          \else%
           \put(0,0){\line(1,0){120}}% single bond at 1
           \putratom{130}{-30}{\@memberb}% right type
   \fi\fi}%
%%%%%%%%%%%%%%%%%%%
% subst. on 2,3,5 %
%%%%%%%%%%%%%%%%%%%
\def\@pyranb{%
   \if\@tmpb S%single bond
    \ifx\@tmpc\empty%
           \put(0,0){\line(1,-1){120}}% single bond at 1
           \putratom{130}{-180}{\@memberb}% left type
    \else\if\@tmpc a%(a) alpha
           \put(0,0){\line(0,-1){118}}% single bond alpha (down)
           \putlratom{-32}{-190}{\@memberb}% left & right type
    \else\if\@tmpc b%(b) beta
           \put(0,0){\line(0,1){118}}% single bond beta (up)
           \putlratom{-32}{130}{\@memberb}% left & right type
    \fi\fi\fi%\fi\fi%
          \else%
           \put(0,0){\line(1,1){120}}% single bond at 1
           \putratom{130}{110}{\@memberb}% left type
\fi}%
%%%%%%%%%%%%%%%
% subst. on 4 %
%%%%%%%%%%%%%%%
\def\@pyranc{%
   \if\@tmpb S%single bond
    \ifx\@tmpc\empty%
           \put(0,0){\line(-1,0){120}}% single bond at 4
           \putlatom{-130}{-30}{\@memberb}% left type
    \else\if\@tmpc a%(a) alpha
           \put(0,0){\line(0,-1){118}}% single bond at 4 alpha (down)
           \putlatom{32}{-190}{\@memberb}% left type
    \else\if\@tmpc b%(e) beta
           \put(0,0){\line(0,1){118}}% single bond at 4 beta (up)
           \putlatom{32}{130}{\@memberb}% left type
    \else\if\@tmpc A% alpha
           \put(0,0){\line(-1,-1){120}}% single bond at 4
           \putlatom{-130}{-180}{\@memberb}% left type
    \else\if\@tmpc B% beta
           \put(0,0){\line(-1,1){120}}% single bond at 4
           \putlatom{-130}{110}{\@memberb}% left type
    \fi\fi\fi\fi\fi%
   \else \if\@tmpb D%double bond
           \put(0,-15){\line(-1,0){120}}% double bond at 4
           \put(0,15){\line(-1,0){120}}% double bond at 4
           \putlatom{-130}{-30}{\@memberb}% left type
          \else%
           \put(0,0){\line(-1,0){120}}% single bond at 4
           \putlatom{-130}{-30}{\@memberb}% left type
   \fi\fi}%
% ***********************
% * 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
%
%   \pyranose[BONDLIST]{SUBSLIST}          
%
%     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
%
%     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
%
%       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}
%
\def\pyranose{\@ifnextchar[{\@pyranose}{\@pyranose[r]}}
\def\@pyranose[#1]#2{%
 \begin{picture}(880,800)(-240,-400)
  \iforigpt \put(-240,-400){\circle*{50}}%
           \put(0,0){\circle{50}}% 
   \typeout{command `pyranose' origin: (0,0) ---> (240,400)}
  \fi%
  \put(0,0){\line(3,5){120}}%           %bond 4-5
  \put(120,200){\line(1,0){252}}%       %bond 5-6
  \put(532,0){\line(-3,5){96}}%         %bond 1-6
 {\thicklines%
  \put(0,0){\line(3,-5){120}}%          %bond 4-3
  \put(412,-200){\line(3,5){120}}%      %bond 2-1
  \put(120,-200){\line(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(400,-150){\line(3,5){90}}%       %double bond 2-1
\else \if\member b%
  \put(150,-160){\line(1,0){232}}%      %double bond 3-2
\else \if\member c%
  \put(50,-12){\line(3,-5){90}}%        %double bond 4-3
\else \if\member d%
  \put(50,12){\line(3,5){90}}%          %double bond 4-5
\else \if\member e%
  \put(150,160){\line(1,0){232}}%       %double bond 5-6
\else \if\member f%
  \put(482,12){\line(-3,5){70}}%        %double bond 1-6
\fi\fi\fi\fi\fi\fi\fi}%
%
\@forsemicol\member:=#2\do{\expandafter\@m@mb@r\member;\relax%
\expandafter\threech@r\@membera{}{}%
\ifcase\@tmpa%0 omit
 \or \put(532,0){\@pyrana}% subst. on 1
 \or \put(412,-200){\@pyranb}% subst. on 2
 \or \put(120,-200){\@pyranb}% subst. on 3
 \or \put(0,0){\@pyranc}% subst. on 4
 \or \put(120,200){\@pyranb}% subst. on 5
\fi %end of ifcase
}\end{picture}}%               %end of \pyranose macro
%
% ***********************
% * 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
%
%   \furanose[BONDLIST]{SUBSLIST}          
%
%     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
%
%     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
%
%       e.g. 
%        
%        \furanose{1Sa==Cl;2Sb==F}
%
\def\furanose{\@ifnextchar[{\@furanose}{\@furanose[r]}}
\def\@furanose[#1]#2{%
 \begin{picture}(880,800)(-240,-400)
  \iforigpt \put(-240,-400){\circle*{50}}%
           \put(0,0){\circle{50}}% 
   \typeout{command `furanose' origin: (0,0) ---> (240,400)}
  \fi%
   \put(0,0){\line(5,3){236}}%          %bond 4-5
   \put(532,0){\line(-5,3){236}}%       %bond 1-5
 {\thicklines%
  \put(0,0){\line(3,-5){120}}%          %bond 4-3
  \put(412,-200){\line(3,5){120}}%      %bond 2-1
  \put(120,-200){\line(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(400,-150){\line(3,5){80}}%       %double bond 2-1
\else \if\member b%
  \put(150,-160){\line(1,0){232}}%      %double bond 3-2
\else \if\member c%
  \put(50,-12){\line(3,-5){80}}%        %double bond 4-3
\else \if\member d%
  \put(50,0){\line(5,3){180}}%          %double bond 4-5
\else \if\member e%
  \put(482,0){\line(-5,3){180}}%        %double bond 1-5
\fi\fi\fi\fi\fi\fi}%
%
\@forsemicol\member:=#2\do{\expandafter\@m@mb@r\member;\relax%
\expandafter\threech@r\@membera{}{}%
\ifcase\@tmpa%0 omit
 \or \put(532,0){\@pyrana}% subst. on 1
 \or \put(412,-200){\@pyranb}% subst. on 2
 \or \put(120,-200){\@pyranb}% subst. on 3
 \or \put(0,0){\@pyranc}% subst. on 4
\fi %end of ifcase
}\end{picture}}%               %end of \furanose macro

