% \iffalse meta-comment
%% File: fusering.dtx
%
%  Copyright 1998,2001,2002,2004 by Shinsaku Fujita
%
%  This file is part of XyMTeX system.
%  -------------------------------------
%
% 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, 
%   Department of Chemistry and Materials Technology, 
%   Kyoto Institute of Technology, \\
%   Matsugasaki, Sakyoku, Kyoto, 606 Japan
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{fusering}
% \def\versi@ndate{December 25, 1998}
% \def\versi@nno{ver2.00}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{fusering}
% \def\versi@ndate{June 20, 2001}
% \def\versi@nno{ver2.01}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{fusering}
% \def\versi@ndate{April 30, 2002}
% \def\versi@nno{ver3.00}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{fusering}
% \def\versi@ndate{May 30, 2002}
% \def\versi@nno{ver4.00}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \fi
%
% \CheckSum{3906}
%% \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{v2.00}{1998/12/25}{enhanced edition for LaTeX2e}
% \changes{v2.01}{2001/06/20}{Size reduction and 
% clipping information}
% \changes{v3.00}{2002/04/30}{sfpicture environment, etc.}
% \changes{v4.00}{2002/05/30}{PostScript output and ShiftPicEnv}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
\ProvidesFile{fusering.dtx}[2004/08/30 v4.01 XyMTeX{} package file]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{fusering.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{Fusing Ring Units by {\sffamily fusering.sty} 
(\fileversion) of \XyMTeX{}}
\author{Shinsaku Fujita \\ 
Department of Chemistry and Materials Technology, \\
Kyoto Institute of Technology, \\
Matsugasaki, Sakyoku, Kyoto, 606 Japan
}
\date{\filedate}
%
\begin{document}
   \maketitle
   \DocInput{fusering.dtx}
\end{document}
%</driver>
% \fi
%
% \section{Introduction}\label{methylen:intro}
%
% \subsection{Options for {\sffamily docstrip}}
%
% \DeleteShortVerb{\|}
% \begin{center}
% \begin{tabular}{|l|l|}
% \hline
% \emph{option} & \emph{function}\\ \hline
% fusering & fusering.sty \\
% driver & driver for this dtx file \\
% \hline
% \end{tabular}
% \end{center}
% \MakeShortVerb{\|}
%
% \subsection{Version Information}
%
%    \begin{macrocode}
%<*fusering>
\typeout{XyMTeX for Drawing Chemical Structural Formulas. Version 4.01}
\typeout{       -- Released August 30, 2004 by Shinsaku Fujita}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\j@urnalname{fusering}
\def\versi@ndate{August 30, 2004}
\def\versi@nno{ver4.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 fusering.sty}
%
% \begin{verbatim}
% **********************************
% * fusering.sty: list of commands * 
% **********************************
%
%  <Six-membered fused ring units>
%    \sixfusev       \@sixfusev        \sixfuseposv
%    \sixfusevi      \@sixfusevi       \sixfuseposvi
%    \sixfuseh       \@sixfuseh        \sixfuseposh
%    \sixfusehi      \@sixfusehi       \sixfuseposhi
%
%  <Five-membered fused ring units>
%    \fivefusev      \@fivefusev       \fivefuseposv
%    \fivefusevi     \@fivefusevi      \fivefuseposvi
%    \fivefuseh      \@fivefuseh       \fivefuseposh
%    \fivefusehi     \@fivefusehi      \fivefuseposhi
%
%  <Four-membered fused ring units>
%    \fourfuse       \@fourfuse        \fourfusepos
%
%  <Three-membered fused ring units>
%    \threefusev     \@threefusev       \threefuseposv
%    \threefusevi    \@threefusevi      \threefuseposvi
%    \threefuseh     \@threefuseh       \threefuseposh
%    \threefusehi    \@threefusehi      \threefuseposhi

% \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 polymers.sty} for the present case).  Hence, the combination 
% of |\input| and |\@ifundefined| is used to crossload sty 
% files ({\sf chemstr.sty} etc. for the present case) in place of the 
% |\RequirePackage| command of \LaTeXe{}. 
%
%    \begin{macrocode}
% *************************
% * input of basic macros *
% *************************
\@ifundefined{setsixringv}{\input chemstr.sty\relax}{}
\@ifundefined{bzdrv}{\input carom.sty\relax}{}
\@ifundefined{hbonde}{\input hetaromh.sty\relax}{}
\@ifundefined{bonde}{\input hetarom.sty\relax}{}
\unitlength=0.1pt
%    \end{macrocode}
%
% \section{Six-Membered Fusing Units}
% \subsection{Vertical Type}
% 
% The command |\sixfusev| produces a six-membered fusing unit 
% of vertical type.  The structure produced lacks a given bond 
% in order to realize ring fusion, which produces a new ring system. 
% The following numbering is adopted in this macro. 
% Note that the difference between |\sixfusev| and |\sixuniv|, 
% the latter of which is designed as an inner command for giving 
% a building block with no adjustment of attached sites, while 
% the former has a function of such adjustment. 
%
% \begin{verbatim}
% *****************************
% * six-membered fusing unit  *
% *  (vertical type)          *
% *****************************
%
%          1
%      f   *  a
%     6  *   *  2
%     d |     | b
%       |     |
%     5  *   *  3
%       d  * c
%          4 <===== the original point
% \end{verbatim}
%
% The macro |\sixfusev| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE|  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}
%   \sixfusev(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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'. 
%
% \begin{verbatim}
%     SKBONDLIST =  
%            A:      dotted bond for an alpha (down) bond
%            B:      boldfaced bond for a beta (upper) bond
%
% \end{verbatim}
%
% 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       :  fully saturated
%           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 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
%
%       for n = 1 to 6 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, e, or f)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \sixfusev{1==N}{1==Cl;2==F}{e}
% \end{verbatim}
%
% \changes{v2.00}{1998/12/25}{New command: \cs{sixfusev}} 
%
% \begin{macro}{\if@skbondlist}
%    \begin{macrocode}
%\newif\if@skbondlist
%\@skbondlistfalse
%    \end{macrocode}
% \end{macro}% to hetarom.sty
%
% \begin{macro}{\sixfusev}
% \begin{macro}{\@six@fusev}
% \begin{macro}{\@six@@fusev}
% \begin{macro}{\@sixfusev}
%    \begin{macrocode}
\def\sixfusev{\@ifnextchar({\@six@fusev(@}{\@six@fusev(@)}}
\def\@six@fusev(#1){\@ifnextchar[{\@six@@fusev(#1)[@}%
{\@six@@fusev(#1)[@]}}
\def\@six@@fusev(#1)[#2]#3#4#5{\@ifnextchar[%
{\@sixfusev(#1)[#2]{#3}{#4}{#5}[@}%
{\@sixfusev(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@sixfusev(#1)[#2]#3#4#5[#6]{%
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize%
\test@vertix@sixv{#3}{a}{b}{c}{d}{e}{f}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sixfuseposv{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-\shiftii,-\shifti){sixfusev}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE into a list 1993/11/21 by Shinsaku Fujita
{%
\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bond{#1}{a}{a}% bond between 1 and 2 \@aaa -> \skbonda etc
\set@skel@bond{#1}{b}{b}% bond between 2 and 3 \@bbb -> \skbondb etc
\set@skel@bond{#1}{c}{c}% bond between 3 and 4 \@ccc -> \skbondc etc
\set@skel@bond{#1}{d}{d}% bond between 4 and 5 \@ddd -> \skbondd etc
\set@skel@bond{#1}{e}{e}% bond between 5 and 6 \@eee -> \skbonde etc
\set@skel@bond{#1}{f}{f}% bond between 6 and 1 \@fff -> \skbondf etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member l\relax%
\else\if\member a\relax% 
  \bonda%
\else\if\member b\relax% 
   \bondb%
\else\if\member c\relax%
   \bondc%
\else\if\member d\relax%
   \bondd%
\else\if\member e\relax%
   \bonde%
\else\if\member f\relax%
   \bondf%
\else\if\member A\relax%left aromatic circle 
  \Put@oCircle(0,203){240}%               %circle
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
\else \expandafter\twoCH@@R\member//%
     \set@fusionadd@sixv
\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixv{#3}{0}{0}{7}{0}%    %atom 1--6%
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringv{#4}{0}{0}{7}{0}%
\end{ShiftPicEnv}%
\sixfuseposv{#5}%for FuseWaring when nested
\iniatom\iniflag}%     %end of \sixfusev macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\sixfuseposv| is used in the definition of 
% the |\sixfusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\if@sixfuseposv}
% \begin{macro}{\sixfuseposv}
%    \begin{macrocode}
\newif\if@sixfuseposv \@sixfuseposvfalse
\def\fuseAx{0}
\def\fuseAy{0}
\def\fuseBx{0}
\def\fuseBy{0}
\def\sixfuseposv#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer f\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `f'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer F\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `F'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi}}}% end of the macro \sixfuseposv
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% The macro |\@bond@fuse@omit| is used in |\sixfusev| etc. 
% for detecting omitted bonds, where |\@aaa| etc. are empty if 
% they are omitted. 
%
% \begin{macro}{\@bond@fuse@omit}
%    \begin{macrocode}
\def\@bond@fuse@omit#1#2{%
\ifx#1a\relax\gdef\@aaa{}\fi
\ifx#1b\relax\gdef\@bbb{}\fi
\ifx#1c\relax\gdef\@ccc{}\fi
\ifx#1d\relax\gdef\@ddd{}\fi
\ifx#1e\relax\gdef\@eee{}\fi
\ifx#1f\relax\gdef\@fff{}\fi
\ifx#1A\relax\gdef\@aaa{}\fi
\ifx#1B\relax\gdef\@bbb{}\fi
\ifx#1C\relax\gdef\@ccc{}\fi
\ifx#1D\relax\gdef\@ddd{}\fi
\ifx#1E\relax\gdef\@eee{}\fi
\ifx#1F\relax\gdef\@fff{}\fi
%%%%
\@tfor\memBer:=#2\do{%
\if\memBer a\relax\gdef\@aaa{}%
 \ifx#1a\relax
  \XyMTeXWarning{Double spec. of bond `a' in FUSE and OMIT}\fi
\fi%
\if\memBer A\relax\gdef\@aaa{}%
 \ifx#1a\relax
  \XyMTeXWarning{Double spec. of bond `a' in FUSE and OMIT}\fi
\fi%
\if\memBer b\relax\gdef\@bbb{}%
 \ifx#1b\relax
  \XyMTeXWarning{Double spec. of bond `b' in FUSE and OMIT}\fi
\fi%
\if\memBer B\relax\gdef\@bbb{}%
 \ifx#1b\relax
  \XyMTeXWarning{Double spec. of bond `b' in FUSE and OMIT}\fi
\fi%
\if\memBer c\relax\gdef\@ccc{}%
 \ifx#1c\relax
  \XyMTeXWarning{Double spec. of bond `c' in FUSE and OMIT}\fi
\fi%
\if\memBer C\relax\gdef\@ccc{}%
 \ifx#1c\relax
  \XyMTeXWarning{Double spec. of bond `c' in FUSE and OMIT}\fi
\fi%
\if\memBer d\relax\gdef\@ddd{}%
 \ifx#1d\relax
  \XyMTeXWarning{Double spec. of bond `d' in FUSE and OMIT}\fi
\fi%
\if\memBer D\relax\gdef\@ddd{}%
 \ifx#1d\relax
  \XyMTeXWarning{Double spec. of bond `d' in FUSE and OMIT}\fi
\fi%
\if\memBer e\relax\gdef\@eee{}%
 \ifx#1e\relax
  \XyMTeXWarning{Double spec. of bond `e' in FUSE and OMIT}\fi
\fi%
\if\memBer E\relax\gdef\@eee{}%
 \ifx#1e\relax
  \XyMTeXWarning{Double spec. of bond `e' in FUSE and OMIT}\fi
\fi%
\if\memBer f\relax\gdef\@fff{}%
 \ifx#1f\relax
  \XyMTeXWarning{Double spec. of bond `f' in FUSE and OMIT}\fi
\fi%
\if\memBer F\relax\gdef\@fff{}%
 \ifx#1f\relax
  \XyMTeXWarning{Double spec. of bond `f' in FUSE and OMIT}\fi
\fi%
}}%
%    \end{macrocode}
% \end{macro}
%
% The macros |\sixunitv| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{sixunitv}} 
% 
% \begin{macro}{\sixunitv}
%    \begin{macrocode}
\def\sixunitv{\@ifnextchar[{\@six@unitv}{\@six@unitv[@]}}
\def\@six@unitv[#1]#2#3#4{\sixfusev[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Inverse Vertical Type}
% 
% The command |\sixfusevi| produces a six-membered fusing unit 
% of vertical type.  The structure produced lacks a given bond 
% in order to realize ring fusion, which produces a new ring system. 
% The following numbering is adopted in this macro. 
% Note that the difference between |\sixfusevi| and |\sixunivi|, 
% the latter of which is designed as an inner command for giving 
% a building block with no adjustment of attached sites, while 
% the former has a function of such adjustment. 
%
% \begin{verbatim}
% *****************************
% * six-membered fusing unit  *
% *  (inverse vertical type)  *
% *****************************
%
%          4
%       d  *  c
%     5  *   *  3
%     e |     | b
%       |     |
%     6  *   *  2
%       f  * a
%          1 <===== the original point
% \end{verbatim}
%
% The macro |\sixfusevi| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \sixfusevi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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'. 
%
% \begin{verbatim}
%     SKBONDLIST =  
%            A:      dotted bond for an alpha (down) bond
%            B:      boldfaced bond for a beta (upper) bond
% \end{verbatim}
%
% 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       :  fully saturated
%           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 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
%
%       for n = 1 to 6 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, e, or f)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \sixfusevi{1==N}{1==Cl;2==F}{e}
% \end{verbatim}
%
% \changes{v2.00}{1998/12/25}{New command: \cs{sixfusevi}} 
%
% \begin{macro}{\sixfusevi}
% \begin{macro}{\@six@fusevi}
% \begin{macro}{\@six@@fusevi}
% \begin{macro}{\@sixfusevi}
%    \begin{macrocode}
\def\sixfusevi{\@ifnextchar({\@six@fusevi(@}{\@six@fusevi(@)}}
\def\@six@fusevi(#1){\@ifnextchar[{\@six@@fusevi(#1)[@}%
{\@six@@fusevi(#1)[@]}}
\def\@six@@fusevi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@sixfusevi(#1)[#2]{#3}{#4}{#5}[@}%
{\@sixfusevi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@sixfusevi(#1)[#2]#3#4#5[#6]{%
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize%
\test@vertix@sixv{#3}{d}{c}{b}{a}{f}{e}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sixfuseposvi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-\shiftii,-\shifti){sixfusevi}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE into a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bond{#1}{a}{c}% bond between 1 and 2 \@aaa -> \skbondc etc
\set@skel@bond{#1}{b}{b}% bond between 2 and 3 \@bbb -> \skbondb etc
\set@skel@bond{#1}{c}{a}% bond between 3 and 4 \@ccc -> \skbonda etc
\set@skel@bond{#1}{d}{f}% bond between 4 and 5 \@ddd -> \skbondf etc
\set@skel@bond{#1}{e}{e}% bond between 5 and 6 \@eee -> \skbonde etc
\set@skel@bond{#1}{f}{d}% bond between 6 and 1 \@fff -> \skbondd etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member l\relax%
\else\if\member a\relax% 
  \bondc%
\else\if\member b\relax% 
   \bondb%
\else\if\member c\relax%
   \bonda%
\else\if\member d\relax%
   \bondf%
\else\if\member e\relax%
   \bonde%
\else\if\member f\relax%
   \bondd%
\else\if\member A%left aromatic circle 
  \Put@oCircle(0,203){240}%               %circle
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
\else \expandafter\twoCH@@R\member//%
     \set@fusionadd@sixvi
\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixv{#3}{5}{0}{5}{-1}%    %atom 1--4%
\set@hetatom@sixv{#3}{11}{4}{7}{-1}%   %atom 5 and 6%
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringv{#4}{5}{0}{5}{-1}%    %subst 1--4
\setsixringv{#4}{11}{4}{7}{-1}%   %subst 5 and 6
\end{ShiftPicEnv}%
\sixfuseposvi{#5}%%for FuseWaring when nested
\iniatom\iniflag}%     %end of \sixfusevi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\sixfuseposvi| is used in the definition of 
% the |\sixfusevi| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\sixfuseposvi}
%    \begin{macrocode}
\def\sixfuseposvi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `b'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `a'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `A'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer f\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `f'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer F\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `F'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \sixfuseposvi
%    \end{macrocode}
% \end{macro}
%
% The macros |\sixunitvi| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{sixunitvi}} 
% 
% \begin{macro}{\sixunitvi}
%    \begin{macrocode}
\def\sixunitvi{\@ifnextchar[{\@six@unitvi}{\@six@unitvi[@]}}
\def\@six@unitvi[#1]#2#3#4{\sixfusevi[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Normal Horizontal Type}
% 
% The command |\sixfuseh| produces a six-membered fusing unit 
% of horizontal type.  The structure produced lacks a given bond 
% in order to realize ring fusion, which produces a new ring system. 
% The following numbering is adopted in this macro. 
% Note that the difference between |\sixfuseh| and |\sixunih|, 
% the latter of which is designed as an inner command for giving 
% a building block with no adjustment of attached sites, while 
% the former has a function of such adjustment. 
%
% \begin{verbatim}
% *****************************
% * six-membered fusing unit  *
% *     (horizontal type)     *
% *****************************
%                                   b
%                                2      3  
%                            a    -----    c
%                               *       *
%   the original point ===> 1 *           * 4
%          (0,0)                *       *  d
%                            f    -----
%                                6      5 
%                                   e
% \end{verbatim}
%
% The macro |\sixfuseh| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \sixfuseh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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       :  fully saturated
%           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 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
%
%       for n = 1 to 6 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, e, or f)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \sixfuseh{1==N}{1==Cl;2==F}{e}
% \end{verbatim}
%
% The definition of |\sixfuseh| 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 by using |\setsixringh|. 
% \end{enumerate}
% \changes{v2.00}{1998/12/29}{New command: \cs{sixfuseh}} 
%
% \begin{macro}{\sixfuseh}
% \begin{macro}{\@six@fuseh}
% \begin{macro}{\@six@@fuseh}
% \begin{macro}{\@sixfuseh}
%    \begin{macrocode}
\def\sixfuseh{\@ifnextchar({\@six@fuseh(@}{\@six@fuseh(@)}}
\def\@six@fuseh(#1){\@ifnextchar[{\@six@@fuseh(#1)[@}%
{\@six@@fuseh(#1)[@]}}
\def\@six@@fuseh(#1)[#2]#3#4#5{\@ifnextchar[%
{\@sixfuseh(#1)[#2]{#3}{#4}{#5}[@}%
{\@sixfuseh(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@sixfuseh(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize%
\test@vrtx@sixh{#3}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sixfuseposh{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-240,-400){sixfuseh}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE into a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bondh{#1}{a}{a}% bond between 1 and 2 \@aaa -> \hskbonda etc
\set@skel@bondh{#1}{b}{b}% bond between 2 and 3 \@bbb -> \hskbondb etc
\set@skel@bondh{#1}{c}{c}% bond between 3 and 4 \@ccc -> \hskbondc etc
\set@skel@bondh{#1}{d}{d}% bond between 4 and 5 \@ddd -> \hskbondd etc
\set@skel@bondh{#1}{e}{e}% bond between 5 and 6 \@eee -> \hskbonde etc
\set@skel@bondh{#1}{f}{f}% bond between 6 and 1 \@fff -> \hskbondf etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else \if\member l\relax%
\else \if\member a\relax%
  \hbonda%
\else \if\member b\relax%
   \hbondb%
\else \if\member c\relax%
   \hbondc%
\else \if\member d\relax%
   \hbondd%
\else \if\member e\relax%
   \hbonde%
\else \if\member f\relax%
   \hbondf%
\else \if\member A%left aromatic circle 
  \Put@oCircle(203,0){240}%                %circle
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
\else \expandafter\twoCH@@R\member//%
     \set@fusionadd@sixh
\fi\fi\fi\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixh{#3}{0}{0}{7}{0}%    %atom 1--6%
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringh{#4}{0}{0}{7}{0}%
\end{ShiftPicEnv}%
\sixfuseposh{#5}%%for FuseWaring when nested
\iniatom\iniflag}%     %end of \sixfuseh macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\sixfuseposh| is used in the definition of 
% the |\sixfuseh| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\sixfuseposh}
%    \begin{macrocode}
\def\sixfuseposh#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer f\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `f'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer F\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `F'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi}}}% end of the macro \sixfuseposh
%    \end{macrocode}
% \end{macro}
%
% The macros |\sixunith| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{sixunith}} 
% 
% \begin{macro}{\sixunith}
%    \begin{macrocode}
\def\sixunith{\@ifnextchar[{\@six@unith}{\@six@unith[@]}}
\def\@six@unith[#1]#2#3#4{\sixfuseh[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Inverse Horizontal Type}
% 
% The command |\sixfusehi| produces a six-membered fusing unit 
% of inverse horizontal type.  The structure produced lacks a given bond 
% in order to realize ring fusion, which produces a new ring system. 
% The following numbering is adopted in this macro. 
%
% \begin{verbatim}
% *****************************
% * six-membered fusing unit  *
% * (inverse horizontal type) *
% *****************************
%           b
%        3      2 
%    c    -----    a
%       *        *
%    4 *           * 1 <== the original point (0,0)
%        *       * f
%    d    -----
%        5      6 
%           e
% \end{verbatim}
%
% The macro |\sixfusehi| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \sixfusehi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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       :  fully saturated
%           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 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
%
%       for n = 1 to 6 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, e, or f)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \sixfusehi{1==N}{1==Cl;2==F}{e}
% \end{verbatim}
%
% \changes{v2.00}{1998/12/29}{New command: \cs{sixfusehi}} 
%
% \begin{macro}{\sixfusehi}
% \begin{macro}{\@six@fusehi}
% \begin{macro}{\@six@@fusehi}
% \begin{macro}{\@sixfusehi}
%    \begin{macrocode}
\def\sixfusehi{\@ifnextchar({\@six@fusehi(@}{\@six@fusehi(@)}}
\def\@six@fusehi(#1){\@ifnextchar[{\@six@@fusehi(#1)[@}%
{\@six@@fusehi(#1)[@]}}
\def\@six@@fusehi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@sixfusehi(#1)[#2]{#3}{#4}{#5}[@}%
{\@sixfusehi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@sixfusehi(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize%
\test@vrtx@sixhi{#3}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\sixfuseposhi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-240,-400){sixfusehi}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE into a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bondh{#1}{a}{c}% bond between 1 and 2 \@aaa -> \hskbondc etc
\set@skel@bondh{#1}{b}{b}% bond between 2 and 3 \@bbb -> \hskbondb etc
\set@skel@bondh{#1}{c}{a}% bond between 3 and 4 \@ccc -> \hskbonda etc
\set@skel@bondh{#1}{d}{f}% bond between 4 and 5 \@ddd -> \hskbondf etc
\set@skel@bondh{#1}{e}{e}% bond between 5 and 6 \@eee -> \hskbonde etc
\set@skel@bondh{#1}{f}{d}% bond between 6 and 1 \@fff -> \hskbondd etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else \if\member l\relax%
\else \if\member a\relax%
  \hbondc%
\else \if\member b\relax%
   \hbondb%
\else \if\member c\relax%
   \hbonda%
\else \if\member d\relax%
   \hbondf%
\else \if\member e\relax%
   \hbonde%
\else \if\member f\relax%
   \hbondd%
\else \if\member A%left aromatic circle 
  \Put@oCircle(203,0){240}%                %circle
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
\else \expandafter\twoCH@@R\member//%
     \set@fusionadd@sixhi
\fi\fi\fi\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixh{#3}{5}{0}{5}{-1}%               %subst 1--4
\set@hetatom@sixh{#3}{11}{4}{7}{-1}%              %subst 5 and 6
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringh{#4}{5}{0}{5}{-1}%               %subst 1--4
\setsixringh{#4}{11}{4}{7}{-1}%              %subst 5 and 6
\end{ShiftPicEnv}%
\sixfuseposhi{#5}%%for FuseWaring when nested
\iniatom\iniflag}%     %end of \sixfusehi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\sixfuseposhi| is used in the definition of 
% the |\sixfusehi| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\sixfuseposhi}
%    \begin{macrocode}
\def\sixfuseposhi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `C'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `c'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `B'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `b'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `A'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `a'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer F\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `F'}%
 \else
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer f\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `f'}%
 \else
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi}}}% end of the macro \sixfuseposhi
%    \end{macrocode}
% \end{macro}
%
%
% The macros |\sixunithi| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{sixunithi}} 
% 
% \begin{macro}{\sixunithi}
%    \begin{macrocode}
\def\sixunithi{\@ifnextchar[{\@six@unithi}{\@six@unithi[@]}}
\def\@six@unithi[#1]#2#3#4{\sixfusehi[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \section{Five-membered fused ring unit}
% \subsection{Vertical type}
%
% The macro |\fivefusev| is a five-membered fragment that can be 
% fused to another 
% ring structure to produce a new ring system. The following 
% numbering is adopted in this macro. 
%
% \begin{verbatim}
% **********************
% * five-membered fused*
% *  (vertical type)   *
% **********************
%
%     4 _______ 3
%       |     |
%       |     |
%     5  *   *  2
%          *
%          1 <===== the original point
% \end{verbatim}
%
% The macro |\fivefusev| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \fivefusev(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 e, 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: list of inner double bonds 
%
%           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+}       :  plus at the 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 5 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
%
%       for n = 1 to 5 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted for fusion. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, or e)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \fivefusev{1==N}{1==H;2==F}{a}
% \end{verbatim}
%
% \begin{macro}{\fivefusev}
% \begin{macro}{\@five@fusev}
% \begin{macro}{\@five@@fusev}
% \begin{macro}{\@fivefusev}
%    \begin{macrocode}
\def\fivefusev{\@ifnextchar({\@five@fusev(@}{\@five@fusev(@)}}
\def\@five@fusev(#1){\@ifnextchar[{\@five@@fusev(#1)[@}%
{\@five@@fusev(#1)[@]}}
\def\@five@@fusev(#1)[#2]#3#4#5{\@ifnextchar[%
{\@fivefusev(#1)[#2]{#3}{#4}{#5}[@}%
{\@fivefusev(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@fivefusev(#1)[#2]#3#4#5[#6]{%
\iniatom\iniflag%initialize
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\test@vertix@sixv{#3}{d}{c}{b}{f}{e}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fivefuseposv{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-\shiftii,-\shifti){fivefusev}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%
% %% outer skeleton %
% %%%%%%%%%%%%%%%%%%%
% changed FUSE to a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bond{#1}{a}{c}% bond between 1 and 2 \@aaa -> \skbondc etc
\set@skel@bond{#1}{b}{b}% bond between 2 and 3 \@bbb -> \skbondb etc
\set@skel@longbond{#1}{c}{skbondhoriz}%
      % bond between 3 and 4 \@ccc -> \skbondhoriz etc
\set@skel@bond{#1}{d}{e}% bond between 4 and 5 \@ddd -> \skbonde etc
\set@skel@bond{#1}{e}{d}% bond between 5 and 1 \@eee -> \skbondd etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%
% %% inner double bond %
% %%%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r%
\else\if\member a\relax%
   \bondc%
\else\if\member b\relax%
  \bondb%
\else\if\member c\relax%
   \bondhoriz%
\else\if\member d\relax%
  \bonde%
\else\if\member e\relax%
  \bondd%
\else
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
    \expandafter\twoCH@@R\member//%
    \set@fusionadd@fivev
\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%
% % setting heteroatoms %
% %%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixv{#3}{5}{1}{5}{-1}%   % for 1 to 3
\set@hetatom@sixv{#3}{10}{4}{7}{-1}%  % for 4 to 5
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringv{#4}{5}{1}{5}{-1}%   % for 1 to 3
\setsixringv{#4}{10}{4}{7}{-1}%  % for 4 to 5
\end{ShiftPicEnv}%
{\let\XyMTeXWarning\@gobble
\fivefuseposv{#5}}%%for FuseWaring when nested
\iniatom\iniflag}%end of \fivefusev macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\fivefuseposv| is used in the definition of 
% the |\fivefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\fivefuseposv}
%    \begin{macrocode}
\def\fivefuseposv#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer c\relax
        \XyMTeXWarning{Not-used fusion at bond `c'}%
\fi
\if\memBer C\relax
        \XyMTeXWarning{Not-used fusion at bond `C'}%
\fi
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `b'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `a'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `A'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `f'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `F'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \fivefuseposv
%    \end{macrocode}
% \end{macro}
%
% The macros |\fiveunitv| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{fiveunitv}} 
% 
% \begin{macro}{\fiveunitv}
%    \begin{macrocode}
\def\fiveunitv{\@ifnextchar[{\@five@unitv}{\@five@unitv[@]}}
\def\@five@unitv[#1]#2#3#4{\fivefusev[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Inverse vertical type}
%
% The macro |\fivefusevi| typesets a five-membered fragment that can be 
% fused to another 
% ring structure to produce a new ring system. The following 
% numbering is adopted in this macro. 
%
% \begin{verbatim}
% ************************************
% * five-membered fusing unit        *
% *  (vertical type, inverse type)   *
% ************************************
%
%          1
%          * 
%     6  *   *  2
%       |     |
%       |_____|
%     4         3
%          *
%        (0,0) <===== the original point
% \end{verbatim}
%
% The macro |\fivefusevi| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \fivefusevi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 e, 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: list of inner double bonds 
%
%           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+}       :  plus at the 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 5 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
%
%       for n = 1 to 5 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, or e)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \fivefusevi{1==N}{1==H;2==F}{a}
% \end{verbatim}
%
% \begin{macro}{\fivefusevi}
% \begin{macro}{\@five@fusevi}
% \begin{macro}{\@five@@fusevi}
% \begin{macro}{\@fivefusevi}
%    \begin{macrocode}
\def\fivefusevi{\@ifnextchar({\@five@fusevi(@}{\@five@fusevi(@)}}
\def\@five@fusevi(#1){\@ifnextchar[{\@five@@fusevi(#1)[@}%
{\@five@@fusevi(#1)[@]}}
\def\@five@@fusevi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@fivefusevi(#1)[#2]{#3}{#4}{#5}[@}%
{\@fivefusevi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@fivefusevi(#1)[#2]#3#4#5[#6]{%
\iniatom\iniflag%initialize
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\test@vertix@sixv{#3}{a}{b}{c}{e}{f}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fivefuseposvi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-\shiftii,-\shifti){fivefusevi}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE to a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bond{#1}{a}{a}% bond between 1 and 2 \@aaa -> \skbonda etc
\set@skel@bond{#1}{b}{b}% bond between 2 and 3 \@bbb -> \skbondb etc
\set@skel@longbond{#1}{c}{skbondhorizi}%
      % bond between 3 and 4 \@ccc -> \skbondhorizi etc
\set@skel@bond{#1}{d}{e}% bond between 4 and 5 \@ddd -> \skbonde etc
\set@skel@bond{#1}{e}{f}% bond between 5 and 6 \@eee -> \skbondf etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r%
\else\if\member a\relax%
   \bonda%
\else\if\member b\relax%
  \bondb%
\else\if\member c\relax%
   \bondhorizi%
\else\if\member d\relax%
  \bonde%
\else\if\member e\relax%
  \bondf%
\else 
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
    \expandafter\twoCH@@R\member//%
    \set@fusionadd@fivevi
\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%
% % setting heteroatoms %
% %%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixv{#3}{0}{0}{4}{0}%  % for 1 to 3
\set@hetatom@sixv{#3}{1}{4}{7}{0}%  % for 4 to 5
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringv{#4}{0}{0}{4}{0}%  % for 1 to 3
\setsixringv{#4}{1}{4}{7}{0}%  % for 4 to 5
\end{ShiftPicEnv}%
{\let\XyMTeXWarning\@gobble
\fivefuseposvi{#5}}%%for FuseWaring when nested
\iniatom\iniflag}%               %end of \fivefusevi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\fivefuseposvi| is used in the definition of 
% the |\fivefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\fivefuseposvi}
%    \begin{macrocode}
\def\fivefuseposvi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{303}%
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{303}%
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
        \XyMTeXWarning{Not-used fusion at bond `c'}%
\fi
\if\memBer C\relax
        \XyMTeXWarning{Not-used fusion at bond `C'}%
\fi
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \gdef\fuseBx{0}\gdef\fuseBy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \gdef\fuseAx{0}\gdef\fuseAy{406}%
  \global\@sixfuseposvtrue
 \fi
\fi}}}% end of the macro \fivefuseposvi
%    \end{macrocode}
% \end{macro}
%
% The macros |\fiveunitvi| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{fiveunitvi}} 
% 
% \begin{macro}{\fiveunitvi}
%    \begin{macrocode}
\def\fiveunitvi{\@ifnextchar[{\@five@unitvi}{\@five@unitvi[@]}}
\def\@five@unitvi[#1]#2#3#4{\fivefusevi[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Horizonatl type}
%
% The macro |\fivefuseh| is a five-membered fragment that can be 
% fused to another 
% ring structure to produce a new ring system. The following 
% numbering is adopted in this macro. 
%
% \begin{verbatim}
% **********************
% * five-membered unit *
% *  (horizontal type) *
% **********************
%
%     3  _____  2
%       |       *
%       |         * 1 <===== the original point
%       |       *
%     4  -----  5
% \end{verbatim}
%
% The macro |\fivefuseh| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 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}
%   \fivefuseh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 e, 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: list of inner double bonds 
%
%           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
%           A          :  aromatic circle
%           {n+}       :  plus at the n-nitrogen atom (n = 1 to 5)
%           {0+}       :  plus (or others) at the center
% \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 5 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
%
%       for n = 1 to 5 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, or e)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \fivefuseh{1==N}{1==H;2==F}{a}
% \end{verbatim}
%
% \begin{macro}{\fivefuseh}
% \begin{macro}{\@five@fuseh}
% \begin{macro}{\@five@@fuseh}
% \begin{macro}{\@fivefuseh}
%    \begin{macrocode}
\def\fivefuseh{\@ifnextchar({\@five@fuseh(@}{\@five@fuseh(@)}}
\def\@five@fuseh(#1){\@ifnextchar[{\@five@@fuseh(#1)[@}%
{\@five@@fuseh(#1)[@]}}
\def\@five@@fuseh(#1)[#2]#3#4#5{\@ifnextchar[%
{\@fivefuseh(#1)[#2]{#3}{#4}{#5}[@}%
{\@fivefuseh(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@fivefuseh(#1)[#2]#3#4#5[#6]{%
\iniatom\iniflag%initialize
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\test@vertix@sixv{#3}{d}{c}{b}{f}{e}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fivefuseposh{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-240,-400){fivefuseh}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE to a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bondh{#1}{a}{c}% bond between 1 and 2 \@aaa -> \skbondc etc
\set@skel@bondh{#1}{b}{b}% bond between 2 and 3 \@bbb -> \skbondb etc
\set@skel@longbond{#1}{c}{hskbondvert}%
      % bond between 3 and 4 \@ccc -> \hskbondvert etc
\set@skel@bondh{#1}{d}{e}% bond between 4 and 5 \@ddd -> \skbonde etc
\set@skel@bondh{#1}{e}{d}% bond between 5 and 6 \@eee -> \skbondd etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r%
\else \if\member a\relax%
   \hbondc%
\else \if\member b\relax%
  \hbondb%
\else \if\member c\relax%
   \hbondvert%
\else \if\member d\relax%
  \hbonde%
\else \if\member e\relax%
  \hbondd%
\else \if\member A%left aromatic circle 
  \Put@oCircle(233,0){180}%               %circle
\else 
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
    \expandafter\twoCH@@R\member//%
    \set@fusionadd@fiveh
\fi\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%
% % setting heteroatoms %
% %%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixh{#3}{5}{1}{5}{-1}%   % for 1 to 3
\set@hetatom@sixh{#3}{10}{4}{7}{-1}%  % for 4 to 5
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringh{#4}{5}{1}{5}{-1}%   % for 1 to 3
\setsixringh{#4}{10}{4}{7}{-1}%  % for 4 to 5
\end{ShiftPicEnv}%
{\let\XyMTeXWarning\@gobble
\fivefuseposh{#5}}%for FuseWaring when nested%
\iniatom\iniflag}%  %end of \fivefuseh macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\fivefuseposh| is used in the definition of 
% the |\sixfusehi| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\fivefuseposh}
%    \begin{macrocode}
\def\fivefuseposh#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer c\relax
        \XyMTeXWarning{Not-used fusion at bond `c'}%
\fi
\if\memBer C\relax
        \XyMTeXWarning{Not-used fusion at bond `C'}%
\fi
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `B'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `b'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `A'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `a'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseAx{406}\gdef\fuseAy{0}%
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseBx{406}\gdef\fuseBy{0}%
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \fivefuseposh
%    \end{macrocode}
% \end{macro}
%
% The macros |\fiveunith| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{fiveunith}} 
% 
% \begin{macro}{\fiveunith}
%    \begin{macrocode}
\def\fiveunith{\@ifnextchar[{\@five@unith}{\@five@unith[@]}}
\def\@five@unith[#1]#2#3#4{\fivefuseh[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Inverse horizontal type}
%
% The macro |\fivefusehi| typesets a five-membered fragment that can be 
% fused to another 
% ring structure to produce a new ring system. The following 
% numbering is adopted in this macro. 
%
% \begin{verbatim}
% ************************************
% * five-membered fusing unit        *
% *  (horizontal type, inverse type) *
% ************************************
%
%                       2  -----  3
%                        *       |
% the original point 1 *         |
%                        *       |
%                           _____|
%                        5        4
% \end{verbatim}
%
% The macro |\fivefusehi| has three arguments |ATOMLIST|, |SUBSLIST| 
% and |FUSE| 
% 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}
%   \fivefusehi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 e, 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: list of inner double bonds 
%
%           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
%           A          :  aromatic circle
%           {n+}       :  plus at the n-nitrogen atom (n = 1 to 5)
%           {0+}       :  plus (or others) at the center
% \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 5 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
%
%       for n = 1 to 5 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, d, or e)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as 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. 
%        
%        \fivefusehi{1==N}{1==H;2==F}{a}
% \end{verbatim}
%
% \begin{macro}{\fivefusehi}
% \begin{macro}{\@five@fusehi}
% \begin{macro}{\@five@@fusehi}
% \begin{macro}{\@fivefusehi}
%    \begin{macrocode}
\def\fivefusehi{\@ifnextchar({\@five@fusehi(@}{\@five@fusehi(@)}}
\def\@five@fusehi(#1){\@ifnextchar[{\@five@@fusehi(#1)[@}%
{\@five@@fusehi(#1)[@]}}
\def\@five@@fusehi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@fivefusehi(#1)[#2]{#3}{#4}{#5}[@}%
{\@fivefusehi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@fivefusehi(#1)[#2]#3#4#5[#6]{%
\iniatom\iniflag%initialize
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\test@vertix@sixv{#3}{a}{b}{c}{e}{f}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adjustment of attached positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fivefuseposhi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-240,-400){fivefusehi}%2002/4/30 by S. Fujita
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
% changed FUSE to a list 1993/11/21 by Shinsaku Fujita
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\set@skel@bondh{#1}{a}{a}% bond between 1 and 2 \@aaa -> \hskbonda etc
\set@skel@bondh{#1}{b}{b}% bond between 2 and 3 \@bbb -> \hskbondb etc
\set@skel@longbond{#1}{c}{hskbondverti}%
      % bond between 3 and 4 \@ccc -> \hskbondverti etc
\set@skel@bondh{#1}{d}{e}% bond between 4 and 5 \@ddd -> \hskbonde etc
\set@skel@bondh{#1}{e}{f}% bond between 5 and 6 \@eee -> \hskbondf etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r%
\else \if\member a\relax%
   \hbonda%
\else \if\member b\relax%
  \hbondb%
\else \if\member c\relax%
   \hbondverti%
\else \if\member d\relax%
  \hbonde%
\else \if\member e\relax%
  \hbondf%
\else \if\member A%left aromatic circle 
  \Put@oCircle(173,0){180}%                %circle
\else 
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
    \expandafter\twoCH@@R\member//%
    \set@fusionadd@fivehi
\fi\fi\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%
% % setting heteroatoms %
% %%%%%%%%%%%%%%%%%%%%%%%
\set@hetatom@sixh{#3}{0}{0}{4}{0}%  % for 1 to 3
\set@hetatom@sixh{#3}{1}{4}{7}{0}%  % for 4 to 5
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\setsixringh{#4}{0}{0}{4}{0}%  % for 1 to 3
\setsixringh{#4}{1}{4}{7}{0}%  % for 4 to 5
\end{ShiftPicEnv}%
{\let\XyMTeXWarning\@gobble
\fivefuseposhi{#5}}%for FuseWaring when nested
\iniatom\iniflag}%      %end of \fivefusehi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\fivefuseposhi| is used in the definition of 
% the |\sixfuseh| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\fivefuseposhi}
%    \begin{macrocode}
\def\fivefuseposhi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{171}%
  \gdef\fuseBx{303}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{171}%
  \gdef\fuseAx{303}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
        \XyMTeXWarning{Not-used fusion at bond `c'}%
\fi
\if\memBer C\relax
        \XyMTeXWarning{Not-used fusion at bond `C'}%
\fi
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseAx{303}\gdef\fuseAy{-171}%
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseBx{303}\gdef\fuseBy{-171}%
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer e\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `e'}%
 \else
  \gdef\fuseAx{103}\gdef\fuseAy{-171}%
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer E\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `E'}%
 \else
  \gdef\fuseBx{103}\gdef\fuseBy{-171}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi}}}% end of the macro \fivefuseposhi
%    \end{macrocode}
% \end{macro}
%
% The macros |\fiveunithi| has been revived for compativility. 
% \changes{v3.00}{2002/4/30}{Revived command: \cs{fiveunithi}} 
% 
% \begin{macro}{\fiveunithi}
%    \begin{macrocode}
\def\fiveunithi{\@ifnextchar[{\@five@unithi}{\@five@unithi[@]}}
\def\@five@unithi[#1]#2#3#4{\fivefusehi[#1]{#2}{#3}{#4}}
%    \end{macrocode}
% \end{macro}
%
% \section{Four-membered fused ring unit}
%
% The macro |\fourfuse| typesets a four-membered ring unit for ring fusion.  
% The following numbering is adopted in this macro. 
%
% \begin{verbatim}
% **************************
% * fourfuse derivatives   *
% *  (vertical type)       *
% **************************
% The following numbering is adopted in this macro. 
%
%          c
%     4  _____  3
%    d  |     |  b
%       |     |
%     1  -----  2<===== the original point
%          a
% \end{verbatim}
%
% The macro |\fourfuse| has two arguments |ATOMLIST|, |SUBSLIST| and |FUSE| 
% 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}
%   \fourfuse(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 e, each of which indicates the presence of 
% an inner (endcyclic) double bond on the corresponding position. 
% The option `$n+$' ($n=1$ to $4$) represents a plus charge on a hetero atom 
% at the $n$-position. 
%
% \begin{verbatim}
%     BONDLIST: list of inner double bonds 
%
%           a          :  1,2-double bond
%           b          :  2,3-double bond
%           c          :  4,3-double bond
%           e          :  4,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 4 atoms)
%
%       for n = 1 to 4
%
%           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
%
%       for n = 1 to 4 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, c, or d)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as non-fused positions. 
%
% \begin{verbatim}
%     OMIT:  one or more bonds omitted (a, b, c, or d)
% \end{verbatim}
%
% Several examples are shown as follows.
% \begin{verbatim}
%       e.g. 
%        
%        \fourfuse{1==N}{1==H;2==F}{c}
%        \fourfuse[c]{1==N}{1==Cl;4==F;2==CH$_{3}$}{a}
% \end{verbatim}
%
% \changes{v1.02}{1998/10/31}{Adding \cs{ylposition}, \cs{if@ylsw},
% \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, 
% \cs{yl@xdiff} and \cs{yl@ydiff}}
% \changes{v2.00}{1998/12/5}{Add: spiro and fused rings}
%
% \begin{macro}{\fourfuse}
% \begin{macro}{\@four@fuse}
% \begin{macro}{\@four@@fuse}
% \begin{macro}{\@fourfuse}
%    \begin{macrocode}
\def\fourfuse{\@ifnextchar({\@four@fuse(@}{\@four@fuse(@)}}
\def\@four@fuse(#1){\@ifnextchar[{\@four@@fuse(#1)[@}%
{\@four@@fuse(#1)[@]}}
\def\@four@@fuse(#1)[#2]#3#4#5{\@ifnextchar[%
{\@fourfuse(#1)[#2]{#3}{#4}{#5}[@}%
{\@fourfuse(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@fourfuse(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{e}{c}{b}{f}{@}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adustment of subs positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fourfusepos{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,880)(-571,-137){fourfuse}%2002/4/30 by S. Fujita
(571,137)(171,-103)%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\Put@Direct(0,0){\set@skel@longbond{#1}{a}{skbondshorizi}}%
       % bond between 1 and 2 \@aaa -> \skbondshorizi etc
\Put@Direct(-142,0){\set@skel@bond{#1}{b}{b}}%
       % bond between 2 and 3 \@bbb -> \skbondb etc
\Put@Direct(0,0){\set@skel@longbond{#1}{c}{skbondshoriz}}%
      % bond between 3 and 4 \@ccc -> \skbondshoriz etc
\Put@Direct(0,0){\set@skel@bond{#1}{d}{e}}%
     % bond between 4 and 1 \@ddd -> \skbonde etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r%
\else\if\member a\relax \Put@Direct(0,0){\bondshorizi}%
\else\if\member b\relax \Put@Direct(-142,0){\bondb}%
\else\if\member c\relax \Put@Direct(0,0){\bondshoriz}%
\else\if\member d\relax \Put@Direct(0,0){\bonde}%
\else 
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
   \expandafter\twoCH@@R\member//%
    \set@fusionadd@fourv
\fi\fi\fi\fi\fi}%
%    \end{macrocode}
%
% \changes{v2.01}{2001/6/20}{The \cs{storeclipinfo} command is added.}
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%
% % setting heteroatoms %
% %%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-142,0){\set@hetatom@sixv{#3}{5}{1}{4}{-1}%
\storeclipinfo
}% for 2 to 3
\developclipinfo
\Put@Direct(0,0){\set@hetatom@sixv{#3}{4}{4}{6}{0}%
\storeclipinfo
}% for 1
\developclipinfo
\Put@Direct(0,0){\set@hetatom@sixv{#3}{2}{5}{7}{0}
\storeclipinfo
}% for 4
\developclipinfo
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-142,0){\setsixringv{#4}{5}{1}{4}{-1}}% for 2 to 3
\Put@Direct(0,0){\setsixringv{#4}{4}{4}{6}{0}}% for 1
\Put@Direct(0,0){\setsixringv{#4}{2}{5}{7}{0}}% for 4
\end{ShiftPicEnv}%
\fourfusepos{#5}%%for FuseWaring when nested
\iniatom\iniflag
\global\@smallringswtrue%for permition at a center bond
}%     %end of \fourfuse macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\fourfusepos| is used in the definition of 
% the |\sixfuseh| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\fourfusepos}
%    \begin{macrocode}
\def\fourfusepos#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \gdef\fuseBx{29}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{29}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{29}\gdef\fuseAy{103}%
  \gdef\fuseBx{29}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{29}\gdef\fuseBy{103}%
  \gdef\fuseAx{29}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{29}\gdef\fuseAy{303}%
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseBx{29}\gdef\fuseBy{303}%
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer d\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `d'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{303}%
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer D\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `D'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{303}%
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \fourfusepos
%    \end{macrocode}
% \end{macro}
%
% \section{Three-membered fusing unit}
% \subsection{Vertical type}
%
% The macro |\threefusev| typesets a three-membered ring to be fused.  
% The following numbering is adopted in this macro. 
%
% \begin{verbatim}
% **********************
% * theree fusing unit *
% *  (vertical type)   *
% **********************
%
%         b
%     3--------2
%    c `     / a
%        `1/ <===== the original point
% \end{verbatim}
%
% The macro |\threefusev| has two arguments |ATOMLIST|, |SUBSLIST| and 
% |FUSE| 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}
%   \threefusev(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 c, each of which indicates the presence of 
% an inner (endcyclic) double bond on the corresponding position. 
% The option `$n+$' ($n=1$ to $3$) represents a plus charge on a hetero atom 
% at the $n$-position. 
% The option `$n+$' ($n=4$ to $6$) represents a plus charge outside the ring. 
% The option `$0+$' typesets a plus charge at the center of the ring. 
%
% \begin{verbatim}
%     BONDLIST = 
%
%           none       :  saturated 
%           a          :  1,2-double bond
%           b          :  2,3-double bond
%           c          :  3,1-double bond
%           A          :  aromatic circle 
%           {n+}       :  plus at the n-hetero atom (n = 1 to 3)
%                      :  n=4 -- outer plus at 1 position
%                      :  n=5 -- outer plus at 2 position
%                      :  n=6 -- outer plus at 3 position
%           {0+}       :  plus at the center of a cyclopropane ring
% \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 3 atoms)
%
%       for n = 1 to 3
%
%           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
%
%       for n = 1 to 3 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, or c)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as non-fused positions. 
%
% \begin{verbatim}
%     OMIT:  one or more bonds omitted (a, b, or c)
% \end{verbatim}
%
% Several examples are shown as follows.
% \begin{verbatim}
%       e.g. 
%        
%        \threefusev{1==N}{1==Cl;2==F}{b}
% \end{verbatim}
%
% \changes{v1.02}{1998/10/31}{Adding \cs{ylposition}, \cs{if@ylsw},
% \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, 
% \cs{yl@xdiff} and \cs{yl@ydiff}}
% \changes{v2.00}{1998/12/5}{Add: spiro and fused rings}
%
% \begin{macro}{\threefusev}
% \begin{macro}{\@three@fusev}
% \begin{macro}{\@three@@fusev}
% \begin{macro}{\@threefusev}
%    \begin{macrocode}
\def\threefusev{\@ifnextchar({\@three@fusev(@}{\@three@fusev(@)}}
\def\@three@fusev(#1){\@ifnextchar[{\@three@@fusev(#1)[@}%
{\@three@@fusev(#1)[@]}}
\def\@three@@fusev(#1)[#2]#3#4#5{\@ifnextchar[%
{\@threefusev(#1)[#2]{#3}{#4}{#5}[@}%
{\@threefusev(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@threefusev(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{d}{b}{f}{@}{@}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adustment of subs positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\threefuseposv{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,580)(-468,-240){threefusev}%2002/4/30 by S. Fujita
(468,240)(68,0)%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\Put@Direct(-68,0){\set@skel@longbond{#1}{a}{skbondtria}}%
       % bond between 1 and 2 \@aaa -> \skbondtria etc
\Put@Direct(0,-132){\set@skel@longbond{#1}{b}{skbondshoriz}}%
       % bond between 2 and 3 \@bbb -> \skbondb etc
\Put@Direct(-68,0){\set@skel@longbond{#1}{c}{skbondtrib}}%
       % bond between 3 and 1 \@ccc -> \skbondtria etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member a\relax\Put@Direct(-68,0){\bondtria}%
\else\if\member b\relax\Put@Direct(0,-126){\bondshoriz}%
\else\if\member c\relax\Put@Direct(-68,0){\bondtrib}%
\else\if\member A\relax% aromatic circle 
  \Put@oCircle(-70,108){100}%               %circle
\else
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
   \expandafter\twoCH@@R\member//%
    \set@fusionadd@threev
\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
% \changes{v2.01}{2001/6/20}{The \cs{storeclipinfo} command is added.}
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-68,0){\set@hetatom@sixv{#3}{3}{3}{5}{0}%
%\if@clip\global\@cliptrue\fi
\storeclipinfo
}%subst 1
\developclipinfo
\Put@Direct(-142,-132){\set@hetatom@sixv{#3}{0}{1}{3}{0}%
%\if@bclip\global\@bcliptrue\fi
\storeclipinfo
}%subst 2
\developclipinfo
\Put@Direct(0,-132){\set@hetatom@sixv{#3}{3}{5}{7}{0}%
%\if@fclip\global\@fcliptrue\fi
\storeclipinfo
}%subst 3
\developclipinfo
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-68,0){\setsixringv{#4}{3}{3}{5}{0}}%subst 1
\Put@Direct(-142,-132){\setsixringv{#4}{0}{1}{3}{0}}%subst 2
\Put@Direct(0,-132){\setsixringv{#4}{3}{5}{7}{0}}%subst 3
\end{ShiftPicEnv}%
\threefuseposv{#5}%%for FuseWaring when nested
\iniatom\iniflag
\global\@smallringswtrue%for permition at a center bond
}%     %end of \threefusev macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\threefuseposv| is used in the definition of 
% the |\threefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\threefuseposv}
%    \begin{macrocode}
\def\threefuseposv#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{-68}\gdef\fuseAy{0}%
%  \gdef\fuseBx{29}\gdef\fuseBy{171}%
  \gdef\fuseBx{35}\gdef\fuseBy{171}%corrected
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
%  \gdef\fuseBx{-68}\gdef\fuseBy{0}%
  \gdef\fuseBx{-74}\gdef\fuseBy{0}%corrected
  \gdef\fuseAx{29}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{29}\gdef\fuseAy{171}%
  \gdef\fuseBx{-171}\gdef\fuseBy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{29}\gdef\fuseBy{171}%
  \gdef\fuseAx{-171}\gdef\fuseAy{171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{171}%
  \gdef\fuseBx{-68}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{171}%
  \gdef\fuseAx{-68}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \threefuseposv
%    \end{macrocode}
% \end{macro}
%
% \subsection{Inverse vertical type}
%
% The macro |\threefusevi| typesets a three-membered ring of 
% inverse vertical type.  The following numbering is adopted 
% in this macro. 
% \changes{v1.02}{1998/10/20}{Newly added commands: 
% \cs{threefusevi}}
%
% \begin{verbatim}
% ****************************
% * thereehetero derivatives *
% *  (inverse vertical type) *
% ****************************
%
%        /1` <===== the original point
%    c /     ` a
%     3--------2
%         b
% \end{verbatim}
%
% The macro |\threefusevi| has two arguments |ATOMLIST|, |SUBSLIST| and |FUSE|
% 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}
%   \threefusevi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 c, each of which indicates the presence of 
% an inner (endcyclic) double bond on the corresponding position. 
% The option `$n+$' ($n=1$ to $3$) represents a plus charge on a hetero atom 
% at the $n$-position. 
% The option `$n+$' ($n=4$ to $6$) represents a plus charge outside the ring. 
% The option `$0+$' typesets a plus charge at the center of the ring. 
%
% \begin{verbatim}
%     BONDLIST = 
%
%           none       :  saturated 
%           a          :  1,2-double bond
%           b          :  2,3-double bond
%           c          :  3,1-double bond
%           A          :  aromatic circle 
%           {n+}       :  plus at the n-hetero atom (n = 1 to 3)
%                      :  n=4 -- outer plus at 1 position
%                      :  n=5 -- outer plus at 2 position
%                      :  n=6 -- outer plus at 3 position
%           {0+}       :  plus at the center of a cyclopropane ring
% \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 3 atoms)
%
%       for n = 1 to 3
%
%           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
%
%       for n = 1 to 3 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, or c)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as non-fused positions. 
%
% \begin{verbatim}
%     OMIT:  one or more bonds omitted (a, b, or c)
% \end{verbatim}
%
% Several examples are shown as follows.
% \begin{verbatim}
%       e.g. 
%        
%        \threefusevi{1==N}{1==Cl;2==F}{c}
%        \threefusevi[c]{1==N}{1==Cl;3==F;2==CH$_{3}$}{a}
%        \threefusevi{1==N}{1D==O}{b}
% \end{verbatim}
%
% \changes{v1.02}{1998/10/31}{Adding \cs{ylposition}, \cs{if@ylsw},
% \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, 
% \cs{yl@xdiff} and \cs{yl@ydiff}}
% \changes{v2.00}{1998/12/5}{Add: spiro and fused rings}
%
% \begin{macro}{\threefusevi}
% \begin{macro}{\@three@fusevi}
% \begin{macro}{\@three@@fusevi}
% \begin{macro}{\@threefusevi}
%    \begin{macrocode}
\def\threefusevi{\@ifnextchar({\@three@fusevi(@}{\@three@fusevi(@)}}
\def\@three@fusevi(#1){\@ifnextchar[{\@three@@fusevi(#1)[@}%
{\@three@@fusevi(#1)[@]}}
\def\@three@@fusevi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@threefusevi(#1)[#2]{#3}{#4}{#5}[@}%
{\@threefusevi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@threefusevi(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{a}{c}{e}{@}{@}{@}%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adustment of subs positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\threefuseposvi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(800,580)(-468,-340){threefusevi}%2002/4/30 by S. Fujita
(468,340)(68,0)%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\Put@Direct(-68,0){\set@skel@longbond{#1}{a}{skBondtria}}%
       % bond between 1 and 2 \@aaa -> \skBondtria etc
\Put@Direct(0,-275){\set@skel@longbond{#1}{b}{skbondshorizi}}%
       % bond between 2 and 3 \@bbb -> \skbondb etc
\Put@Direct(-68,0){\set@skel@longbond{#1}{c}{skBondtrib}}%
       % bond between 3 and 1 \@ccc -> \skBondtrib etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member a\relax\Put@Direct(-68,0){\Bondtria}%
\else\if\member b\relax\Put@Direct(0,-274){\bondshorizi}%
\else\if\member c\relax\Put@Direct(-68,0){\Bondtrib}%
\else\if\member A\relax% aromatic circle 
  \Put@oCircle(-70,-108){100}%               %circle
\else
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
   \expandafter\twoCH@@R\member//%
    \set@fusionadd@threevi
\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
% \changes{v2.01}{2001/6/20}{The \cs{storeclipinfo} command is added.}
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-68,-406){\set@hetatom@sixv{#3}{0}{0}{2}{0}%
%\if@aclip\global\@acliptrue\fi
\storeclipinfo
}%subst 1
\developclipinfo
\Put@Direct(0,-275){\set@hetatom@sixv{#3}{2}{4}{6}{0}%
%\if@cclip\global\@ccliptrue\fi
\storeclipinfo
}%subst 3
\developclipinfo
\Put@Direct(-142,-275){\set@hetatom@sixv{#3}{1}{2}{4}{0}%
%\if@eclip\global\@ecliptrue\fi
\storeclipinfo
}%subst 2
\developclipinfo
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-68,-406){\setsixringv{#4}{0}{0}{2}{0}}%subst 1
\Put@Direct(0,-275){\setsixringv{#4}{2}{4}{6}{0}}%subst 3
\Put@Direct(-142,-275){\setsixringv{#4}{1}{2}{4}{0}}%subst 2
\end{ShiftPicEnv}%
\threefuseposvi{#5}%%for FuseWaring when nested
\iniatom\iniflag
\global\@smallringswtrue%for permition at a center bond
}%     %end of \threefusevi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\threefuseposvi| is used in the definition of 
% the |\threefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\threefuseposvi}
%    \begin{macrocode}
\def\threefuseposvi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{-68}\gdef\fuseAy{0}%
%  \gdef\fuseBx{29}\gdef\fuseBy{-171}%
  \gdef\fuseBx{35}\gdef\fuseBy{-171}%corrected
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
%  \gdef\fuseBx{-68}\gdef\fuseBy{0}%
  \gdef\fuseBx{-74}\gdef\fuseBy{0}%corrected
  \gdef\fuseAx{29}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{29}\gdef\fuseAy{-171}%
  \gdef\fuseBx{-171}\gdef\fuseBy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{29}\gdef\fuseBy{-171}%
  \gdef\fuseAx{-171}\gdef\fuseAy{-171}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{-171}%
  \gdef\fuseBx{-68}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{-171}%
  \gdef\fuseAx{-68}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \threefuseposvi
%    \end{macrocode}
% \end{macro}
%
% \subsection{Horizontal type}
%
% The macro |\threefuseh| typesets a three-membered ring to be fused.  
% The following numbering is adopted in this macro. 
%
% \begin{verbatim}
% ****************************
% * thereehetero fusing unit *
% *  (horizontal type)       *
% ****************************

%   aaa fff
%    3
%    | ` c
%  b |    1 bbb ccc
%    |  / a
%    2/
%    ddd eee
%
% \end{verbatim}
%
% The macro |\threefuseh| has two arguments |ATOMLIST|, |SUBSLIST| and |FUSE| 
% 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}
%   \threefuseh(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 c, each of which indicates the presence of 
% an inner (endcyclic) double bond on the corresponding position. 
% The option `$n+$' ($n=1$ to $3$) represents a plus charge on a hetero atom 
% at the $n$-position. 
% The option `$n+$' ($n=4$ to $6$) represents a plus charge outside the ring. 
% The option `$0+$' typesets a plus charge at the center of the ring. 
%
% \begin{verbatim}
%     BONDLIST = 
%
%           none       :  saturated 
%           a          :  1,2-double bond
%           b          :  2,3-double bond
%           c          :  3,1-double bond
%           A          :  aromatic circle 
%           {n+}       :  plus at the n-hetero atom (n = 1 to 3)
%                      :  n=4 -- outer plus at 1 position
%                      :  n=5 -- outer plus at 2 position
%                      :  n=6 -- outer plus at 3 position
%           {0+}       :  plus at the center of a cyclopropane ring
% \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 3 atoms)
%
%       for n = 1 to 3
%
%           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
%
%       for n = 1 to 3 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, or c)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as non-fused positions. 
%
% \begin{verbatim}
%     OMIT:  one or more bonds omitted (a, b, or c)
% \end{verbatim}
%
% Several examples are shown as follows.
% \begin{verbatim}
%       e.g. 
%        
%        \threefuseh{1==N}{1==Cl;2==F}{c}
% \end{verbatim}
%
% \changes{v1.02}{1998/10/31}{Adding \cs{ylposition}, \cs{if@ylsw},
% \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, 
% \cs{yl@xdiff} and \cs{yl@ydiff}}
% \changes{v2.00}{1998/12/5}{Add: spiro and fused rings}
%
% \begin{macro}{\threefuseh}
% \begin{macro}{\@three@fuseh}
% \begin{macro}{\@three@@fuseh}
% \begin{macro}{\@threefuseh}
%    \begin{macrocode}
\def\threefuseh{\@ifnextchar({\@three@fuseh(@}{\@three@fuseh(@)}}
\def\@three@fuseh(#1){\@ifnextchar[{\@three@@fuseh(#1)[@}%
{\@three@@fuseh(#1)[@]}}
\def\@three@@fuseh(#1)[#2]#3#4#5{\@ifnextchar[%
{\@threefuseh(#1)[#2]{#3}{#4}{#5}[@}%
{\@threefuseh(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@threefuseh(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{d}{f}{b}{@}{@}{@}%tentative use for six-h
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adustment of subs positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\threefuseposh{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(580,700)(-200,-240){threefuseh}%2002/4/30 by S. Fujita
(200,200)%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % retreatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{c}{e}{a}{@}{@}{@}%
\test@vertix@sixv{#3}{b}{d}{f}{@}{@}{@}%
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\Put@Direct(0,0){\set@skel@bond{#1}{a}{c}}%
       % bond between 1 and 2 \@aaa -> \skbondc etc
\Put@Direct(171,-103){\set@skel@bond{#1}{b}{e}}%
       % bond between 2 and 3 \@bbb -> \skbonde etc
\Put@Direct(0,-200){\set@skel@bond{#1}{c}{a}}%
       % bond between 3 and 1 \@ccc -> \skbonda etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member a\relax\Put@Direct(0,0){\bondc}%
\else\if\member b\relax\Put@Direct(171,-103){\bonde}%
\else\if\member c\relax\Put@Direct(0,-200){\bonda}%
\else\if\member A\relax% aromatic circle 
  \Put@oCircle(70,103){100}%               %circle
\else
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
   \expandafter\twoCH@@R\member//%
    \set@fusionadd@threeh
\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
% \changes{v2.01}{2001/6/20}{The \cs{storeclipinfo} command is added.}
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\iniflag
%\Put@Direct(-235,103){\set@hetatom@sixh{#3}{3}{3}{5}{0}%
\Put@Direct(-215,103){\set@hetatom@sixh{#3}{3}{3}{5}{0}%
%\if@clip \global\@cliptrue\fi
\storeclipinfo
}%subst 1 <--six h 4
\developclipinfo
\Put@Direct(-103,29){\set@hetatom@sixh{#3}{-1}{1}{3}{0}%
%\if@bclip \global\@bcliptrue\fi
\storeclipinfo
}%subst 3 <--six h 2
\developclipinfo
\Put@Direct(-103,171){\set@hetatom@sixh{#3}{4}{5}{7}{0}%
%\if@fclip \global\@fcliptrue\fi
\storeclipinfo
}%subst 2 <--six h 6
\developclipinfo
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-235,103){\setsixringh{#4}{3}{3}{5}{0}}%subst 1
\Put@Direct(-103,29){\setsixringh{#4}{-1}{1}{3}{0}}%subst 3
\Put@Direct(-103,171){\setsixringh{#4}{4}{5}{7}{0}}%subst 2
\end{ShiftPicEnv}%
\threefuseposh{#5}%%for FuseWaring when nested
\iniatom\iniflag
\global\@smallringswtrue%for permition at a center bond
}%     %end of \threefuseh macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\threefuseposh| is used in the definition of 
% the |\threefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\threefuseposh}
%    \begin{macrocode}
\def\threefuseposh#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{171}\gdef\fuseAy{103}%corrected
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{0}\gdef\fuseBy{200}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{0}\gdef\fuseAy{200}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{200}%
%  \gdef\fuseBx{171}\gdef\fuseBy{103}%
  \gdef\fuseBx{171}\gdef\fuseBy{97}%corrected
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
%  \gdef\fuseBx{0}\gdef\fuseBy{200}%
  \gdef\fuseBx{0}\gdef\fuseBy{206}%corrected
  \gdef\fuseAx{171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \threefuseposh
%    \end{macrocode}
% \end{macro}
%
% \subsection{Inverse horizontal type}
%
% The macro |\threefusehi| typesets a three-membered ring to be fused.  
% The following numbering is adopted in this macro. 
%
% \begin{verbatim}
% *******************************
% * thereehetero fusing unit    *
% *  (vertical horizontal type) *
% *******************************
%
%          aaa bbb
%     c    3
%       /  |
% eee  1   | b
% fff   a` |
%          2 <---original point
%          ccc ddd
% \end{verbatim}
%
% The macro |\threefusehi| has two arguments |ATOMLIST|, |SUBSLIST| and |FUSE|
% 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}
%   \threefusehi(SKBONDLIST)[BONDLIST]{ATOMLIST}{SUBSLIST}{FUSE}[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 c, each of which indicates the presence of 
% an inner (endcyclic) double bond on the corresponding position. 
% The option `$n+$' ($n=1$ to $3$) represents a plus charge on a hetero atom 
% at the $n$-position. 
% The option `$n+$' ($n=4$ to $6$) represents a plus charge outside the ring. 
% The option `$0+$' typesets a plus charge at the center of the ring. 
%
% \begin{verbatim}
%     BONDLIST = 
%
%           none       :  saturated 
%           a          :  1,2-double bond
%           b          :  2,3-double bond
%           c          :  3,1-double bond
%           A          :  aromatic circle 
%           {n+}       :  plus at the n-hetero atom (n = 1 to 3)
%                      :  n=4 -- outer plus at 1 position
%                      :  n=5 -- outer plus at 2 position
%                      :  n=6 -- outer plus at 3 position
%           {0+}       :  plus at the center of a cyclopropane ring
% \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 3 atoms)
%
%       for n = 1 to 3
%
%           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
%
%       for n = 1 to 3 
%
%           nD         :  exocyclic double bond at n-atom
%           n or nS    :  exocyclic single bond at n-atom
%           nA         :  alpha single bond at n-atom
%           nB         :  beta single bond at n-atom
%           nSA        :  alpha single bond at n-atom (boldface)
%           nSB        :  beta single bond at n-atom (dotted line)
%           nSa        :  alpha (not specified) single bond at n-atom
%           nSb        :  beta (not specified) single bond at n-atom
%
%           nSd        :  alpha single bond at n-atom (dotted line) 
%                           with an alternative direction to nSA 
%           nSu        :  beta single bond at n-atom (boldface) 
%                           with an alternative direction to nSB 
%           nFA        :  alpha single bond at n-atom (dotted line) 
%                           for ring fusion 
%           nFB        :  beta single bond at n-atom (boldface) 
%                           for ring fusion 
%           nGA        :  alpha single bond at n-atom (dotted line) 
%                           for the other ring fusion 
%           nGB        :  beta single bond at n-atom (boldface) 
%                           for the other ring fusion 
% \end{verbatim}
%
% The argument |FUSE| represents one bond to be omitted. 
% The omitted edge is regarded as a fused position. 
%
% \begin{verbatim}
%     FUSE:  one bond omitted (a, b, or c)
% \end{verbatim}
%
% The argument |OMIT| represents one or more bonds to be omitted. 
% The omitted edges are regarded as non-fused positions. 
%
% \begin{verbatim}
%     OMIT:  one or more bonds omitted (a, b, or c)
% \end{verbatim}
%
% Several examples are shown as follows.
% \begin{verbatim}
%       e.g. 
%        
%        \threefusehi{1==N}{1==Cl;2==F}{c}
%        \threefusehi[c]{1==N}{1==Cl;3==F;2==CH$_{3}$}{a}
% \end{verbatim}
%
% \changes{v1.02}{1998/10/31}{Adding \cs{ylposition}, \cs{if@ylsw},
% \cs{yl@shifti}, \cs{@ylii}, \cs{yl@shiftii}, \cs{@ylii}, 
% \cs{yl@xdiff} and \cs{yl@ydiff}}
% \changes{v2.00}{1998/12/5}{Add: spiro and fused rings}
%
% \begin{macro}{\threefusehi}
% \begin{macro}{\@three@fusehi}
% \begin{macro}{\@three@@fusehi}
% \begin{macro}{\@threefusehi}
%    \begin{macrocode}
\def\threefusehi{\@ifnextchar({\@three@fusehi(@}{\@three@fusehi(@)}}
\def\@three@fusehi(#1){\@ifnextchar[{\@three@@fusehi(#1)[@}%
{\@three@@fusehi(#1)[@]}}
\def\@three@@fusehi(#1)[#2]#3#4#5{\@ifnextchar[%
{\@threefusehi(#1)[#2]{#3}{#4}{#5}[@}%
{\@threefusehi(#1)[#2]{#3}{#4}{#5}[@]}}
\def\@threefusehi(#1)[#2]#3#4#5[#6]{%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%
% % treatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{a}{e}{c}{@}{@}{@}%tentative use for six-h
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % adustment of subs positions %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\threefuseposhi{#5}%
\begin{ShiftPicEnv}[1](0,0)(-\yl@shiftii,-\yl@shifti)/%
(580,700)(-400,-240){threefusehi}%2002/4/30 by S. Fujita
(400,200)%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % retreatment of atom list %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iniatom\iniflag%initialize
\test@vertix@sixv{#3}{e}{c}{a}{@}{@}{@}%
\test@vertix@sixv{#3}{f}{d}{b}{@}{@}{@}%
% %%%%%%%%%%%%%%%%%%
% % outer skeleton %
% %%%%%%%%%%%%%%%%%%
{\resetbdsw%
\@bond@fuse@omit{#5}{#6}%
\Put@Direct(0,0){\set@skel@bond{#1}{a}{d}}%
       % bond between 1 and 2 \@aaa -> \skbondd etc
\Put@Direct(-171,-103){\set@skel@bond{#1}{b}{b}}%
       % bond between 2 and 3 \@bbb -> \skbondb etc
\Put@Direct(0,-200){\set@skel@bond{#1}{c}{f}}%
       % bond between 3 and 1 \@ccc -> \skbondf etc
}%
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%
% % inner double bond %
% %%%%%%%%%%%%%%%%%%%%%
\@tfor\member:=#2\do{%
\if\member r\relax%
\else\if\member a\relax\Put@Direct(0,0){\bondd}%
\else\if\member b\relax\Put@Direct(-171,-103){\bondb}%
\else\if\member c\relax\Put@Direct(0,-200){\bondf}%
\else\if\member A\relax% aromatic circle 
  \Put@oCircle(70,103){100}%               %circle
\else
% %%%%%%%%%%%%%%%%%%%%%%%%%
% % inner bond attachment %
% %%%%%%%%%%%%%%%%%%%%%%%%%
   \expandafter\twoCH@@R\member//%
    \set@fusionadd@threehi
\fi\fi\fi\fi\fi%
}%
%    \end{macrocode}
%
% \changes{v2.01}{2001/6/20}{The \cs{storeclipinfo} command is added.}
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting hetero atoms %
% %%%%%%%%%%%%%%%%%%%%%%%%
\iniflag
\Put@Direct(-171,103){\set@hetatom@sixh{#3}{0}{0}{2}{0}%
%\if@aclip \global\@acliptrue\fi
\storeclipinfo
}%subst 1 <--six h 1
\developclipinfo
\Put@Direct(-303,29){\set@hetatom@sixh{#3}{0}{2}{4}{0}%
%\if@cclip \global\@ccliptrue\fi
\storeclipinfo
}%subst 3 <--six h 3
\developclipinfo
\Put@Direct(-303,171){\set@hetatom@sixh{#3}{3}{4}{6}{0}%
%\if@eclip \global\@ecliptrue\fi
\storeclipinfo
}%subst 2 <--six h 5
\developclipinfo
%    \end{macrocode}
%
%    \begin{macrocode}
% %%%%%%%%%%%%%%%%%%%%%%%%
% % setting substituents %
% %%%%%%%%%%%%%%%%%%%%%%%%
\Put@Direct(-171,103){\setsixringh{#4}{0}{0}{2}{0}}%subst 1
\Put@Direct(-303,29){\setsixringh{#4}{0}{2}{4}{0}}%subst 3
\Put@Direct(-303,171){\setsixringh{#4}{3}{4}{6}{0}}%subst 2
\end{ShiftPicEnv}%
\threefuseposhi{#5}%%for FuseWaring when nested
\iniatom\iniflag
\global\@smallringswtrue%for permition at a center bond
}%     %end of \threefusehi macro
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The macro |\threefuseposhi| is used in the definition of 
% the |\threefusev| macro to detect a fused edge, where 
% the coordinates of a reference terminal (|\fuseAx| and |\fuseAy|) 
% and of the other terminal of the edge (|\fuseBx| and |\fuseBy|) 
% are given for the successive process of adjustment. 
%
% \begin{macro}{\threefuseposhi}
%    \begin{macrocode}
\def\threefuseposhi#1{%
\global\@sixfuseposvfalse
{\resetbdsw%
\@tfor\memBer:=#1\do{%
\if\memBer a\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `a'}%
 \else
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%corrected
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer A\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `A'}%
 \else
  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer b\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bond at bond `b'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{0}%
  \gdef\fuseBx{0}\gdef\fuseBy{200}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer B\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `B'}%
 \else
  \gdef\fuseBx{0}\gdef\fuseBy{0}%
  \gdef\fuseAx{0}\gdef\fuseAy{200}%
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer c\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `c'}%
 \else
  \gdef\fuseAx{0}\gdef\fuseAy{200}%
%  \gdef\fuseBx{-171}\gdef\fuseBy{103}%
  \gdef\fuseBx{-171}\gdef\fuseBy{97}%corrected
  \global\@sixfuseposvtrue
 \fi
\fi%
\if\memBer C\relax
 \if@sixfuseposv
  \XyMTeXWarning{Double fused bonds at bond `C'}%
 \else
%  \gdef\fuseBx{0}\gdef\fuseBy{200}%
  \gdef\fuseBx{0}\gdef\fuseBy{206}%corrected
  \gdef\fuseAx{-171}\gdef\fuseAy{103}%
  \global\@sixfuseposvtrue
 \fi
\fi%
}}}% end of the macro \threefuseposhi
%</fusering>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%
\endinput
