% \iffalse meta-comment %% File: xymtx-pdf.dtx % % Copyright 2002,2004,2005,2009,2010,2013 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. % % The following book deals with an application of TeX/LaTeX to % preparation of manuscripts of chemical fields: % (1) Shinsaku Fujita, ``LaTeX for Chemists and Biochemists'' % Tokyo Kagaku Dozin, Tokyo (1993) [in Japanese]. % (2) Shinsaku Fujita, ``XyMTeX. Typesetting Chemical Structural % Formulas'' Addison-Wesley, New York (1997). % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % The Current Maintainer of this work is Shinsaku Fujita. % % This work consists of the files xymtx-pdf.dtx and xymtx-pdf.ins % and the derived file xymtx-pdf.sty. % % Please report any bugs, comments, suggestions, etc. to: % Shinsaku Fujita, % Shonan Institute of Chemoinformatics and % Mathematical Chemistry % shinsaku_fujita@nifty.com % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{May 30, 2002} % \def\versi@nno{ver1.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{May 30, 2002} % \def\versi@nno{ver1.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{August 30, 2004} % \def\versi@nno{ver4.01} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{December 20, 2004} % \def\versi@nno{ver4.02} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{June 20, 2005} % \def\versi@nno{ver4.03} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{August 02, 2005} % \def\versi@nno{ver4.03a} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{June 15, 2009} % \def\versi@nno{ver4.04a} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-ps} % \def\versi@ndate{November 05, 2009} % \def\versi@nno{ver4.05} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-pdf} % \def\versi@ndate{October 01, 2010} % \def\versi@nno{ver5.00} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-pdf} % \def\versi@ndate{November 23, 2010} % \def\versi@nno{ver5.00b} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-pdf} % \def\versi@ndate{March 10, 2013} % \def\versi@nno{ver5.01b} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \def\j@urnalname{xymtx-pdf} % \def\versi@ndate{May 27, 2013} % \def\versi@nno{ver5.01bb} % \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \fi % % \CheckSum{1761} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % % \setcounter{StandardModuleDepth}{1} % % \StopEventually{} % \MakeShortVerb{\|} % % \iffalse % \changes{v1.00}{2002/05/30}{first edition for LaTeX2e} % \changes{v4.01}{2004/08/30}{Adjust for XyMTeX version 4.01} % \changes{v4.02}{2004/12/20}{Wedged bonds for stereochemistry} % \changes{v4.03}{2005/06/20}{Wave bonds for stereochemistry} % \changes{v4.03a}{2005/08/02}{Bug fix for the compatibility with % \changes{v4.04a}{2009/06/15}{Bug fix for \cs{\Put@@@@Direct}} % \changes{v4.05}{2009/11/05}{Bug fix for \cs{\Put@@@@Direct}; pLaTeXe vs. LaTeXe} % \changes{v5.00}{2010/10/01}{Change the PostScript mode into the PDF mode} % \changes{v5.00b}{2010/11/23}{added the pgfcore package for pdflatex} % \changes{v5.01b}{2013/03/10}{Bug fix for \cs{zahyozobun}} % \changes{v5.01bb}{2013/05/27}{\cs{WedgeAsSubstX} etc.} % \changes{v5.01}{2013/06/21}{\cs{WavyAsSubst} etc.} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi \ProvidesFile{xymtx-pdf.dtx}[2013/06/21 v5.01 xymtx-pdf package file] % \iffalse \documentclass{ltxdoc} \GetFileInfo{xymtx-pdf.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{Chemistry Conventions by {\sffamily xymtx-pdf.sty} (\fileversion) of \XyMTeX{}} \author{Shinsaku Fujita \\ Shonan Institute of Chemoinformatics Mathematical Chemistry, \\ Kaneko 479-7 Ooimachi, Ashigara-Kami-Gun, Kanagawa-Ken, 258-0019 Japan } \date{\filedate} % \begin{document} \maketitle \DocInput{xymtx-pdf.dtx} \end{document} % % \fi % % \section{Introduction}\label{xymtx-pdf:intro} % % This package aims at converting XyMTeX documents into PDF by % using the dvipdfm(x) converter or its equivalent. The codes % contained in xymtx-ps.dtx for the PostScript mode of XyMTeX % have been changed and extended to match direct conversion % into PDF files. % % \subsection{Options for {\sffamily docstrip}} % % \DeleteShortVerb{\|} % \begin{center} % \begin{tabular}{|l|l|} % \hline % \emph{option} & \emph{function}\\ \hline % xymtxpdf & xymtx-pdf.sty \\ % driver & driver for this dtx file \\ % \hline % \end{tabular} % \end{center} % \MakeShortVerb{\|} % % \subsection{Version Information} % % \begin{macrocode} %<*xymtxpdf> % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\j@urnalname{xymtx-pdf} \def\versi@ndate{June 21, 2013} \def\versi@nno{ver5.01} \def\copyrighth@lder{SF} % Shinsaku Fujita % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \typeout{XyMTeX Macro File `\j@urnalname' (\versi@nno) <\versi@ndate>% \space[\copyrighth@lder]} % \end{macrocode} % % \section{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 ccycle.sty} for the present case). Hence, the combination % of |\input| and |\@ifundefined| is used to crossload sty % files ({\sf chemstr.sty} for the present case) in place of the % |\RequirePackage| command of \LaTeXe{}. % The global setting of unit by |\psset| has caused imcompatibility % with the prosper package and so has been changed into a local setting. % \changes{v4.03a}{2005/08/02}{Bug fix for the compatibility with % the prosper package} % \changes{v5.00b}{2010/11/23}{added the pgfcore package for pdflatex} % % \begin{macrocode} % ************************* % * input of basic macros * % ************************* \@ifundefined{setsixringv}{\input chemstr.sty\relax}{} \RequirePackage{tikz} \RequirePackage{pgfcore}%%%added 2010/11/23 by S. Fujita \RequirePackage{xcolor} \usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,fit,calc} \unitlength=0.1pt \def\white{\color{white}} % \end{macrocode} % % \begin{macrocode} \newif\if@thicklinesw \@thicklineswfalse \def\Thick@Lines{\@thicklineswtrue}%redefinition \def\Thin@Lines{\@thicklineswfalse}%redefinition \def\thickLineWidth{1.6pt} \def\thinLineWidth{0.4pt} % \end{macrocode} % % Temporary count registers: % \begin{macrocode} \newcount\XyMTeXnuma \newcount\XyMTeXnumb \newcount\XyMTeXnumc \newcount\XyMTeXnumd \newcount\XyMTeXnume \newcount\XyMTeXnumf \newcount\XyMTeXnumg \newcount\XyMTeXnumh \newcount\XyMTeXnumi \newcount\XyMTeXcnta \newcount\XyMTeXcntb % \end{macrocode} % % Temporary dimension registers: % \begin{macrocode} \newdimen\XyMTeXdima \newdimen\XyMTeXdimb \newdimen\XyMTeXdimc \newdimen\XyMTeXdimd \newdimen\XyMTeXdime % \end{macrocode} % % Temporary box registers: % \begin{macrocode} \newbox\BondBox % \end{macrocode} % % % The macro |\Put@@@@Line| can draw dashed bonds or wedged bonds for supporting % stereochemistry. Two switches are available as follows: % % \begin{macro}{changedashtowedge} % \begin{macro}{changewedgetodash} % \changes{v4.02}{2004/12/20}{For PS mode: Switch for wedged bonds} % \begin{macrocode} \newif\if@wedgesw \@wedgeswtrue \newif\if@hasheddashsw \@hasheddashswtrue \def\wedgehasheddash{\@wedgeswtrue\@hasheddashswtrue} \def\wedgehashedwedge{\@wedgeswtrue\@hasheddashswfalse} \def\dashhasheddash{\@wedgeswfalse\@hasheddashswtrue} \@ifundefined{ifmolfront}{\newif\ifmolfront \molfrontfalse}{} \@ifundefined{if@skbondlist}{\newif\if@skbondlist \@skbondlistfalse}{} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\setUnitHalfScale} % % The macro |\setUnitHalfScale| calculates the half of a line width % (such as |\thinLineWidth| and |\thickLineWidth|), which is used % to adjust the staring point of a bond line. This macro is used % in |\PUT@@@@bondLINE|. % % \begin{macro}{\NumRound} % \begin{macro}{\UHalfScaleGain} % These macros result in, e.g., % 0.4pt $\rightarrow$ 0.4/0.1 (/2) $\rightarrow$ 1.999 $\rightarrow$ 2. % (Not used) % % \begin{macrocode} \def\NumRound#1.#2#3\@nil{%shishagonyu \begingroup \XyMTeXcnta=0 \XyMTeXcntb=0 \XyMTeXcnta=#1 %%\typeout{A:\the\XyMTeXcnta;} \XyMTeXcntb=#2 %%\typeout{B:\the\XyMTeXcntb;} \ifnum\XyMTeXcntb<5 \else \advance\XyMTeXcnta by1 %%\typeout{C:\the\XyMTeXcnta;} \fi\xdef\@UHalfScale{\the\XyMTeXcnta}\endgroup} {\catcode`\p=12 \catcode`\t=12 \gdef\UHalfScaleGain#1pt{\gdef\@@UHalfScale{#1}}} \def\setUnitHalfScale#1{% \@tempdima=#1 \dimen0=0.1pt \@tempcnta=\@tempdima \@tempcntb=\dimen0 \multiply\@tempcntb by10 \divide\@tempcntb by65536% \divide\@tempdima by \@tempcntb \multiply\@tempdima by5 %%\typeout{D:\the\@tempdima} \expandafter\UHalfScaleGain\the\@tempdima% \expandafter\NumRound\@@UHalfScale\@nil } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\PutSimpleBondBox} % \changes{v5.00}{2010/10/01}{For PDF mode: macro for adjusting the position of % a simple bond (straight line, dashed line, etc.)} % The macro |\PutSimpleBondBox| is used to adjust the coordinates of joint positions % by using the macros |\PUT@@@@bondLINE| and |h@shedd@shbond|, which draw simple bonds % such as straight lines and dashed lines. % % \begin{macrocode} %\newbox\BondBox \def\PutSimpleBondBox(#1,#2)(#3,#4)#5{%for simple bonds \setbox\BondBox=\hbox{#5}% \XyMTeXdima=#1\unitlength \XyMTeXdimb=#3\unitlength \XyMTeXdimc=\thickLineWidth \divide\XyMTeXdimc by2%adjustment by the half of a line width \ifdim \XyMTeXdima>\XyMTeXdimb\relax \XyMTeXdimd=\XyMTeXdima \XyMTeXdime=\XyMTeXdimb \advance\XyMTeXdime by -\XyMTeXdimd \advance\XyMTeXdime by -\XyMTeXdimc \put(#1,#2){\kern\XyMTeXdime\box\BondBox}% \else \ifdim \XyMTeXdima=\XyMTeXdimb\relax \XyMTeXdimd=-\XyMTeXdimc %%%\put(#1,#2){\kern\XyMTeXdimd\raise\XyMTeXdimd\hbox{\box\BondBox}}% \put(#1,#2){\kern\XyMTeXdimd\box\BondBox}% \else \XyMTeXdimd=-\XyMTeXdimc \put(#1,#2){\kern\XyMTeXdimd\box\BondBox}% \fi\fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\tikznodimension} % \changes{v5.00}{2010/10/01}{For PDF mode: macro for typesetting an object % as having no dimensions. } % The macro |\tikznodimension| is used in place of the macro |\PutSimpleBondBox|, which % is originally used to adjust the coordinates of joint positions. % Thereby, the macros |\PUT@@@@bondLINE| and |h@shedd@shbond| have a more rigorous basis % in putting such simple bonds as straight lines and dashed lines. % % \begin{macrocode} \def\tikznodimension#1{\tikz{% \pgfpathrectangle{\pgfpointorigin}{\pgfpointorigin} \pgfusepath{use as bounding box} % draws nothing #1}} % \end{macrocode} % \end{macro} % % The macro |\PUT@@@@bondLINE| is used in the macro |\Put@@@@Line|, % which draws a bond line. This macro relies on the |\tikz| graphic % enviroment. % % \begin{macro}{\PUT@@@@bondLINE} % \begin{macro}{\PutPDFLine} % \changes{v5.00}{2010/10/01}{For PDF mode: macro for % drawing a straight-line bond after adjusting its joint position} % \begin{macrocode} \def\PUT@@@@bondLINE(#1,#2)(#3,#4)#5{% \begingroup %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[line width=#5,line cap=round]% %(#1\unitlength,#2\unitlength) coordinate (X) -- (#3\unitlength,#4\unitlength);}}% %\PutSimpleBondBox(#1,#2)(#3,#4){\box0}% \tikznodimension{% \draw[line width=#5]% (#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength);}% \endgroup } \let\PutPDFLine=\PUT@@@@bondLINE%for user's use \let\PutBondLine=\PUT@@@@bondLINE%for user's use % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\PutBondBox} % \changes{v5.00}{2010/10/01}{For PDF mode: a macro for putting a bond box % after adjusting coordinates. } % The macro |\PutBondBox| put a bond box at an adjusted point, % where the bond box contain a wadge or wavy bond drawn by using % the pgf package (\verb/\tikz/). The macro is used in the % macros |\PUT@@@@wedgeLINE| and |\PUT@@@@wavyLINE|. % \begin{macrocode} %\newbox\BondBox \def\PutBondBox(#1,#2)(#3,#4)#5{%for wedge and wavy bonds \setbox\BondBox=\hbox{#5}% \XyMTeXdima=#1\unitlength \XyMTeXdimb=#3\unitlength \XyMTeXdimc=4pt% \divide\XyMTeXdimc by2%adjustment by the half of a line width \if@vertbond \XyMTeXdimd=\wd\BondBox \divide\XyMTeXdimd by2\relax \put(#1,#2){\kern-1.2\XyMTeXdimd\box\BondBox}%%tentative factor 1.2 \else \if@horizbond \ifdim \XyMTeXdima>\XyMTeXdimb\relax \XyMTeXdimd=\XyMTeXdima \XyMTeXdime=\XyMTeXdimb \advance\XyMTeXdime by -\XyMTeXdimd \put(#1,#2){\kern-5\unitlength\kern\XyMTeXdime\box\BondBox}%tentative factor 5 %%% \else \put(#1,#2){\kern-1.2\unitlength\box\BondBox}%tentative factor 1.2 \fi \else %% \ifdim \XyMTeXdima>\XyMTeXdimb\relax \XyMTeXdime=-\wd\BondBox \put(#1,#2){\kern0.2\unitlength\kern\XyMTeXdime\box\BondBox}%tentative shift factor \else \ifdim \wd\BondBox<4.3pt\relax \XyMTeXdimd=\wd\BondBox \divide\XyMTeXdimd by2\relax \put(#1,#2){\kern-1.3\XyMTeXdimd\box\BondBox}%tentative shift factor 1.3 % \else \put(#1,#2){\kern-3\unitlength\box\BondBox}%tentative shift factor 3 \fi\fi \fi\fi} % \end{macrocode} % \end{macro} % % The macro |\PUT@@@@wedgeLINE| is used in the macro |\Put@@@@Line|, % which draws a bond wedge. This macro relies on the |\tikz| graphic % enviroment. % % \begin{macro}{\PUT@@@@wedgeLINE} % \changes{v5.00}{2010/10/01}{For PDF mode: a macro for putting a wedge bond. } % \begin{macrocode} \newif\if@vertbond \@vertbondfalse \newif\if@horizbond \@horizbondfalse \def\PUT@@@@wedgeLINE(#1,#2)(#3,#4)(#5,#6){% \begingroup %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\filldraw[black,line cap=round]% %(#1\unitlength,#2\unitlength) coordinate (X) -- (#3\unitlength,#4\unitlength)% %-- (#5\unitlength,#6\unitlength) -- (#1\unitlength,#2\unitlength);}}% %\PutBondBox(#1,#2)(#3,#4){\box0}%adjustment \tikznodimension{% \filldraw% (#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength)% -- (#5\unitlength,#6\unitlength) -- (#1\unitlength,#2\unitlength);}% \endgroup } % \end{macrocode} % \end{macro} % % The macro |\PUT@@@@wavyLINE| is used in the macro |\Put@@@@Line|, % which draws a wavy bond. This macro relies on the |\tikz| graphic % enviroment. % % \begin{macro}{\PUT@@@@wavyLINE} % \changes{v5.00}{2010/10/01}{For PDF mode: a macro for putting a wavy bond. } % \begin{macrocode} \def\PUT@@@@wavyLINE(#1,#2)(#3,#4){% \begingroup %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[line cap=round,decorate, %decoration={coil,aspect=0,segment length=2pt,amplitude=1pt}]% %(#1\unitlength,#2\unitlength) coordinate (X) -- (#3\unitlength,#4\unitlength);}}% %\PutBondBox(#1,#2)(#3,#4){\box0}%adjustment \tikznodimension{% \draw[decorate, decoration={coil,aspect=0,segment length=2pt,amplitude=1pt}]% (#1\unitlength,#2\unitlength) coordinate (X) -- (#3\unitlength,#4\unitlength);}% \endgroup } % \end{macrocode} % \end{macro} % % \begin{macro}{\Put@@@@Line} % \changes{v4.02}{2004/12/20}{For PS modes: Wedged bonds for stereochemistry} % \changes{v4.03}{2005/07/20}{For PS modes: Switch for wave bonds} % \changes{v5.00}{2010/10/01}{For PDF mode: a macro for putting a bond line. } % % Temporary count registers: % \begin{macrocode} \newcount\@tempcntXa \newcount\@tempcntYa \newcount\@tempcntz \newcount\@tempcntXb \newcount\@tempcntYb \newcount\@tempcntzz \newcount\@tempcntXc \newcount\@tempcntYc \newcount\@tempcntzzz % \end{macrocode} % % \begin{macrocode} \long\gdef\Put@@@@Line(#1,#2)(#3,#4)#5{% \begingroup %%x-coordinate \@tempcntXa=0\relax \ifnum#3>0\relax \@tempcntXa=#5\relax \else\ifnum#3<0\relax\@tempcntXa=-#5\relax\fi\fi \advance\@tempcntXa by#1\relax %%y-coordinate \@tempcntYa=#5\relax \ifnum#3=0\relax\else \multiply\@tempcntYa by#4\relax\multiply\@tempcntYa by10\relax \divide\@tempcntYa by#3\relax\divide\@tempcntYa by10\relax\fi \ifnum\@tempcntYa<0\relax \ifnum#4>0\relax\@tempcntYa=-\@tempcntYa\fi \else \ifnum\@tempcntYa>0\relax \ifnum#4<0\relax\@tempcntYa=-\@tempcntYa\fi\fi \fi \advance\@tempcntYa by#2\relax % \if@thicklinesw \if@wedgesw \ifmolfront%bold dash bond for skeletal bond for pyranose etc. \PUT@@@@bondLINE(#1,#2)(\the\@tempcntXa,\the\@tempcntYa){\thickLineWidth}% \else \if@skbondlist%bold dash bond skeletal bond for general cases \PUT@@@@bondLINE(#1,#2)(\the\@tempcntXa,\the\@tempcntYa){\thickLineWidth}% \else%wedged bond \ifnum#1=#3 \@vertbondtrue\@horizbondfalse \else \ifnum#2=#4 \@vertbondfalse\@horizbondtrue \else \@vertbondfalse\@horizbondfalse \fi\fi \stereo@wedgedimension(#3,#4){10}% \PUT@@@@wedgeLINE(#1,#2)(\the\@tempcntXb,\the\@tempcntYb)(\the\@tempcntXc,\the\@tempcntYc)% \fi\fi \else \PUT@@@@bondLINE(#1,#2)(\the\@tempcntXa,\the\@tempcntYa){\thickLineWidth}% \fi \else \ifwavebond \ifnum#1=#3 \@vertbondtrue\@horizbondfalse \else \ifnum#2=#4 \@vertbondfalse\@horizbondtrue \else \@vertbondfalse\@horizbondfalse \fi\fi \PUT@@@@wavyLINE(#1,#2)(\the\@tempcntXa,\the\@tempcntYa)% \else \PUT@@@@bondLINE(#1,#2)(\the\@tempcntXa,\the\@tempcntYa){\thinLineWidth}% \fi \fi \@tempcntXa=0\relax \@tempcntYa=0\relax \endgroup}%end of Put@@@@Line % \end{macrocode} % \end{macro} % % The macro |\stereo@wedgedimension| calculates the coordinates of three positions % for drawing a wedged bond, which is drawn by the |\pspolygon| command of the PSTricks package. % % \begin{macro}{stereo@wedgedimension} % \changes{v4.02}{2004/12/20}{For PS mode: Wedged bonds for stereochemistry} % \begin{macrocode} \newif\if@wedgeadjust \def\stereo@wedgedimension(#1,#2)#3{% \@tempcntXb=0\relax \@tempcntYb=0\relax \@tempcntXc=0\relax \@tempcntYc=0\relax %% \@wedgeadjustfalse \ifnum#1<0 \@tempcntzz=-#1\else\@tempcntzz=#1\fi \ifnum#2<0 \@tempcntzzz=-#2\else\@tempcntzzz=#2\fi \ifnum#1=0\else \multiply\@tempcntzzz by10\relax \divide\@tempcntzzz by\@tempcntzz\fi%% (3/5)x10=6 \ifnum\@tempcntzzz>7\relax\else\@wedgeadjusttrue\fi %%one point of wedge \ifnum#1=0\relax \@tempcntXb=#3 \advance\@tempcntXb by8\relax \@tempcntYb=0\relax \else \ifnum#2=0\relax \@tempcntXb=0\relax \@tempcntYb=#3 \advance\@tempcntYb by8\relax \else \@tempcntXb=#3\relax \@tempcntYb=-#3\relax \if@wedgeadjust \advance\@tempcntXb by8\relax \advance\@tempcntYb by-8\relax \fi \multiply\@tempcntXb by#2\relax\multiply\@tempcntXb by10\relax \divide\@tempcntXb by#1\relax\divide\@tempcntXb by10\relax\fi\fi \advance\@tempcntXb by\@tempcntXa\relax \advance\@tempcntYb by\@tempcntYa\relax %%other point of wedge \ifnum#1=0\relax \@tempcntXc=-#3 \advance\@tempcntXc by-8\relax \@tempcntYc=0\relax \else \ifnum#2=0\relax \@tempcntXc=0\relax \@tempcntYc=-#3 \advance\@tempcntYc by-8\relax \else \@tempcntXc=-#3\relax \@tempcntYc=#3\relax \if@wedgeadjust \advance\@tempcntXc by-6\relax \advance\@tempcntYc by6\relax \fi \multiply\@tempcntXc by#2\relax\multiply\@tempcntXc by10\relax \divide\@tempcntXc by#1\relax\divide\@tempcntXc by10\relax\fi\fi \advance\@tempcntXc by\@tempcntXa\relax \advance\@tempcntYc by\@tempcntYa\relax }%%end of \stereo@wedgedimension % \end{macrocode} % \end{macro} % % The |Put@@@@Direct| macro is the same as the original command % |\put| for the LaTeX picture environment. % % \begin{macro}{Put@@@@Direct} % \changes{v5.00}{2010/10/01}{For PDF mode: a macro for putting an object. } % \begin{macrocode} \let\Put@@@@Direct=\put % \end{macrocode} % \end{macro} % % The macros |\Put@@@@oCircle| and |\Put@@@@sCircle| draw % small circles for designating original points. % % \begin{macro}{\Put@@@@oCircle} % \begin{macrocode} \def\Put@@@@oCircle(#1,#2)#3{\begingroup% \@tempcntz=#3 \divide\@tempcntz by2\relax %dimension \pgf@xx or \pgf@yy overflow %\setbox0=\hbox{% %{\tikz[baseline=(X.base)]{% %\draw[scale=\@UScale,line width=0.4pt]% %(#1,#2) coordinate (X) circle (\@tempcntz);}}}% \setbox0=\hbox{% {\tikz[baseline=(X.base)]{% \draw[line width=0.4pt]% (#1\unitlength,#2\unitlength) coordinate (X) circle (\@tempcntz\unitlength);}}}% \put(#1,#2){\kern-0.5\wd0\hbox{\box0}}% \endgroup} % \end{macrocode} % \end{macro} % % \begin{macro}{\Put@@@@sCircle} % \begin{macrocode} \def\Put@@@@sCircle(#1,#2)#3{\begingroup% \@tempcntz=#3 \divide\@tempcntz by2\relax %dimension pgf@xx or pgf@yy overflow %\setbox0=\hbox{% %{\tikz[baseline=(X.base)]{% %\draw[scale=\@UScale,line width=2pt]% %(#1,#2) coordinate (X) circle (\@tempcntz);}}}% \setbox0=\hbox{% {\tikz[baseline=(X.base)]{% \draw[line width=2pt]% (#1\unitlength,#2\unitlength) coordinate (X) circle (\@tempcntz\unitlength);}}}% \put(#1,#2){\kern-0.5\wd0\hbox{\box0}}% \endgroup} % \end{macrocode} % \end{macro} % % Dotted lines by the old macro |\d@@t@rline| are changed into hashed dash bonds % in the new macro |\d@@t@@rline| (|\@wedgeswfalse|). If |\@wedgeswtrue| is % declared (default), the new macro draws a hashed wedged bonds. % % \begin{macro}{d@@t@@rline} % \changes{v4.02}{2004/12/20}{Hashed wedged bonds for stereochemistry} % \changes{v5.00}{2010/10/01}{Renamed for PDF mode} % \begin{macrocode} \def\d@@t@@rline(#1,#2)(#3,#4)#5/(#6,#7)(#8,#9){% \if@hasheddashsw \@ifundefined{tikz}{% \XyMTeXWarning{A dottedline is replaced by a solid line.}% \Put@Line(#1,#2)(#3,#4){#5}% }{{\thicklines% \h@shedd@shbond(#1,#2)(#3,#4){#5}/(#6,#7)(#8,#9)}}% \else \if@skbondlist%hashed dash bond skeletal bond for general cases \@ifundefined{tikz}{% \XyMTeXWarning{A dottedline is replaced by a solid line.}% \Put@Line(#1,#2)(#3,#4){#5}% }{{\thicklines% \h@shedd@shbond(#1,#2)(#3,#4){#5}/(#6,#7)(#8,#9)}}% \else \h@shedw@dgebond(#1,#2)(#3,#4){#5}/(#6,#7)(#8,#9)% \fi\fi }%end of \d@@t@@rline % \end{macrocode} % \end{macro} % % The inner macro |\h@shedd@shbond| works in the macro |\d@@t@@rline| for % drawing a hased dash bond. % % \begin{macro}{h@shedd@shbond} % \changes{v4.02}{2004/12/20}{For PS mode: Hashed dash bonds for stereochemistry} % \changes{v5.00}{2010/10/01}{Renamed for PDF mode: macro for % drawing a hashed dash bond after adjusting its joint position} % \begin{macrocode} \def\h@shedd@shbond(#1,#2)(#3,#4)#5/(#6,#7)(#8,#9){% \begingroup \@tempcntzz=12\relax \@tempcntzzz=-30\relax%almost no shortening \bond@shorten(#1,#2)(#3,#4){#5}/(#6,#7)(#8,#9)% %\ifdim\unitlength>0.08pt %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[dashed,line width=\thickLineWidth,dash pattern=on 1pt off 1.2pt]% %(\@tempcntXb\unitlength,\@tempcntYb\unitlength) coordinate (X) --% %(\@tempcntXc\unitlength,\@tempcntYc\unitlength);}}% %\else %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[dashed,line width=\thickLineWidth,dash pattern=on 0.8pt off 1pt]% %(\@tempcntXb\unitlength,\@tempcntYb\unitlength) coordinate (X) --% %(\@tempcntXc\unitlength,\@tempcntYc\unitlength);}}% %\fi %\PutSimpleBondBox(\the\@tempcntXb,\the\@tempcntYb)(\the\@tempcntXc,\the\@tempcntYc){\box0}% \ifdim\unitlength>0.08pt \tikznodimension{% \draw[dashed,line width=\thickLineWidth,dash pattern=on 1pt off 1.2pt]% (\@tempcntXb\unitlength,\@tempcntYb\unitlength) coordinate (X) --% (\@tempcntXc\unitlength,\@tempcntYc\unitlength);}% \else \tikznodimension{% \draw[dashed,line width=\thickLineWidth,dash pattern=on 0.8pt off 1pt]% (\@tempcntXb\unitlength,\@tempcntYb\unitlength) coordinate (X) --% (\@tempcntXc\unitlength,\@tempcntYc\unitlength);}% \fi \endgroup} % \end{macrocode} % \end{macro} % % The inner macro |\h@shedw@dgebond| works in the macro |\d@@t@@rline| for % drawing a hashed wedged bond. % % % \begin{macro}{h@shedw@dgebond} % \changes{v4.02}{2004/12/20}{For PS mode: Hashed wedged bonds for stereochemistry} % \changes{v5.00}{2010/10/01}{For PDF mode: Hashed wedged bonds for stereochemistry} % \begin{macrocode} \def\h@shedw@dgebond(#1,#2)(#3,#4)#5/(#6,#7)(#8,#9){% \begingroup \@tempcntXa=#8\relax \@tempcntYa=#9\relax \stereo@wedgedimension(#3,#4){10}% \XyMTeXnumf=\@tempcntXb \XyMTeXnumg=\@tempcntYb \XyMTeXnumh=\@tempcntXc \XyMTeXnumi=\@tempcntYc \@tempcntzz=5\relax \@tempcntzzz=-12\relax \bond@shorten(#1,#2)(#3,#4){#5}/(#6,#7)(#8,#9)% %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\filldraw[black,line cap=round]% %(#1\unitlength,#2\unitlength) coordinate (X) --% %(\XyMTeXnumf\unitlength,\XyMTeXnumg\unitlength) --% %(\XyMTeXnumh\unitlength,\XyMTeXnumi\unitlength) -- (#1\unitlength,#2\unitlength);% %\draw[dashed,line width=4pt,dash pattern=on 1pt off 1.2pt,color=white]% %(\@tempcntXb\unitlength,\@tempcntYb\unitlength) --% %(\@tempcntXc\unitlength,\@tempcntYc\unitlength);% %}}% %\PutBondBox(#1,#2)(\the\@tempcntXc,\the\@tempcntYc){\box0}% \tikznodimension{% \filldraw% (#1\unitlength,#2\unitlength) --% (\XyMTeXnumf\unitlength,\XyMTeXnumg\unitlength) --% (\XyMTeXnumh\unitlength,\XyMTeXnumi\unitlength) -- (#1\unitlength,#2\unitlength);% \draw[dashed,line width=4pt,dash pattern=on 1pt off 1.2pt,color=white]% (\@tempcntXb\unitlength,\@tempcntYb\unitlength) --% (\@tempcntXc\unitlength,\@tempcntYc\unitlength);}% \endgroup }%%end of \h@shedw@dgebond % \end{macrocode} % \end{macro} % % The inner macro |\bond@shorten| works in the macros |\h@shedd@shbond| and |\h@shedw@dgebond| for % shortening the resulting hashed bonds. This macro calculates the coordinates of the staring % point and the end point. % % \begin{macro}{bond@shorten} % \changes{v4.02}{2004/12/20}{Hashed forms for dash and wedged bonds} % \begin{macrocode} \def\bond@shorten(#1,#2)(#3,#4)#5/(#6,#7)(#8,#9){% \@tempcntXb=#8\relax \@tempcntYb=#9\relax \advance\@tempcntXb by-#6\relax \divide\@tempcntXb by\@tempcntzz\relax \advance\@tempcntYb by-#7\relax \divide\@tempcntYb by\@tempcntzz\relax \advance\@tempcntXb by#6\relax \advance\@tempcntYb by#7\relax \@tempcntXc=#8\relax \@tempcntYc=#9\relax \advance\@tempcntXc by-#6\relax \divide\@tempcntXc by\@tempcntzzz\relax \advance\@tempcntYc by-#7\relax \divide\@tempcntYc by\@tempcntzzz\relax \advance\@tempcntXc by#8\relax \advance\@tempcntYc by#9\relax }%%end of \bondshorten % \end{macrocode} % \end{macro} % % Skeletal bold bonds can be changed into wedges, where % |\WedgeAsSubst| is described in an ATOMLIST as a kind of % spiro substituent. % % \begin{macro}{WedgeAsSubst} % \changes{v4.02}{2004/12/20}{For PS mode: Wedged skeletal bonds} % \changes{v5.00}{2010/10/01}{For PDF mode: Checked OK} % \begin{macrocode} \def\WedgeAsSubstPDF(#1,#2)(#3,#4)#5{% \begingroup \@thicklineswtrue \@wedgeswtrue \molfrontfalse \@skbondlistfalse \Put@@@@Line(#1,#2)(#3,#4){#5}% \endgroup} \let\WedgeAsSubst=\WedgeAsSubstPDF%for compatibility to PS mode % \end{macrocode} % \end{macro} % % The macro |\stereo@wedgedimensionX| has a starting point, % an endpoint, and the width of a wedge as its arguments. % Compare this command with |\stereo@wedgedimension|, which has % a starting point, a slope, and the width of a wedge % as its arguments. % % \begin{macro}{stereo@wedgedimensionX} % \changes{v5.01}{2013/05/27}{dimension of wedge} % \begin{macrocode} \def\stereo@wedgedimensionX(#1,#2)(#3,#4){% \@ifnextchar[{\stereo@@wedgedimensionX(#1,#2)(#3,#4)}% {\stereo@@wedgedimensionX(#1,#2)(#3,#4)[10]}} \def\stereo@@wedgedimensionX(#1,#2)(#3,#4)[#5]{% \@tempcnta=-#1\relax \advance\@tempcnta by#3\relax %%\typeout{KKK:\the\@tempcnta}% \@tempcntb=-#2\relax \advance\@tempcntb by#4\relax %%%\typeout{LLL:\the\@tempcntb}% \stereo@wedgedimension(\the\@tempcnta,\the\@tempcntb){#5}% %%%\typeout{MMM; (\the\@tempcntXb,\the\@tempcntYb)(\the\@tempcntXc,\the\@tempcntYc)} \advance\@tempcntXb by#3\relax \advance\@tempcntYb by#4\relax \advance\@tempcntXc by#3\relax \advance\@tempcntYc by#4\relax} % \end{macrocode} % \end{macro} % % The macro |\WedgeAsSubstX| has a starting point, % an endpoint, and the width of a wedge as its arguments. % Compare this command with |\WedgeAsSubst|, which has % a starting point, a slope, and the width of a wedge % as its arguments. % % \begin{macro}{WedgeAsSubstX} % \changes{v5.01}{2013/05/27}{For PDF mode: Checked OK} % \begin{macrocode} \def\WedgeAsSubstXPDF(#1,#2)(#3,#4){% \@ifnextchar[{\Wedge@AsSubstXPDF(#1,#2)(#3,#4)}% {\Wedge@AsSubstXPDF(#1,#2)(#3,#4)[10]}} \def\Wedge@AsSubstXPDF(#1,#2)(#3,#4)[#5]{% \begingroup \stereo@wedgedimensionX(#1,#2)(#3,#4)[#5]% \PUT@@@@wedgeLINE(#1,#2)(\the\@tempcntXb,\the\@tempcntYb)(\the\@tempcntXc,\the\@tempcntYc)% \endgroup} \let\WedgeAsSubstX=\WedgeAsSubstXPDF%for compatibility to PDF mode % \end{macrocode} % \end{macro} % % The macro |\NumR@und| gives a round integer. % For example 1.99996 is transformed into 2. A negative % value is permitted. % % \begin{macro}{\NumR@und} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \def\NumR@und#1.#2#3\@nil{%shishagonyu \begingroup \XyMTeXcnta=0 \XyMTeXcntb=0\relax \XyMTeXcnta=#1 %%\typeout{A:\the\XyMTeXcnta;} \XyMTeXcntb=#2 %%\typeout{B:\the\XyMTeXcntb;} \ifnum\XyMTeXcnta>0\relax \ifnum\XyMTeXcntb<5 \else \advance\XyMTeXcnta by1 %%\typeout{C:\the\XyMTeXcnta;} \fi \else \ifnum\XyMTeXcntb<5 \else \advance\XyMTeXcnta by-1 %%\typeout{C:\the\XyMTeXcnta;} \fi\fi\xdef\@yzobun{\the\XyMTeXcnta}\endgroup} % \end{macrocode} % \end{macro} % % The macro |\zahyozobun| calculates the increments of x- and y-coordinates % by starting from a slope of the LaTeX picture environment. % For example, the slope (5,3) (for the argument \verb/(#3,#4)/ and the x-increment \verb/#5/=171) % is transformed to give an x-increment (\verb/\@xzobun/ = 171) and % an y-increment (\verb/\@yzobun/ = 103). When the slope is (0,1) etc., we put the % x-increment (\verb/\@xzobun/ = 0) and y-increment (\verb/\@yzobun/ = \verb/#5/). % % \begin{macro}{\zahyozobun} % \changes{v5.00}{2010/10/01}{For PDF mode} % \changes{v5.01}{2013/03/10}{Bug fix for the slope (0,1) etc.} % \begin{macrocode} {\catcode`\p=12 \catcode`\t=12 \gdef\zobunGain#1pt{\gdef\@zobun{#1}}} \def\zahyozobun(#1,#2)(#3,#4)#5{% \@tempdima=#5\unitlength \@tempdimb=#3\unitlength \@tempcnta=\@tempdima \ifdim\@tempdimb<0pt \@tempcntb=-\@tempdimb \else \@tempcntb=\@tempdimb \fi %% \ifdim\@tempdimb=0pt%bugfix 2013/02/06 \else %% \multiply\@tempcntb by10\relax \divide\@tempcntb by65536% \divide\@tempdima by \@tempcntb \multiply\@tempdima by#4\relax \multiply\@tempdima by10 %%\typeout{D:\the\@tempdima} \expandafter\zobunGain\the\@tempdima% \expandafter\NumR@und\@zobun\@nil \fi%%% \ifnum#3<0 \xdef\@xzobun{-#5}% \else \ifnum#3=0%bugfix 2013/02/06 \xdef\@xzobun{#3}% \ifnum#4<0 \xdef\@yzobun{-#5}% \else \xdef\@yzobun{#5}% \fi%bugfix 2013/02/06 \else \xdef\@xzobun{#5}% \fi \fi } % \end{macrocode} % \end{macro} % % The inner macro |\bond@sh@rten| works in a similar way to |\bond@shorten| for % shortening the resulting hashed bonds. This macro calculates the coordinates of the starting % point and the end point. % % \begin{macro}{\bond@sh@rten} % \changes{v5.00}{2010/10/01}{For PDF mode: Hashed forms for dash and wedged bonds} % \begin{macrocode} \def\bond@sh@rten(#1,#2)(#3,#4)#5{%%%%%%%/(#6,#7)(#8,#9){% \zahyozobun(#1,#2)(#3,#4){#5}% \@tempcntXb=\@xzobun\relax%%\typeout{SSS:\@xzobun} \@tempcntYb=\@yzobun\relax%%\typeout{TTT:\@yzobun} \divide\@tempcntXb by\@tempcntzz\relax \divide\@tempcntYb by\@tempcntzz\relax \advance\@tempcntXb by#1\relax \advance\@tempcntYb by#2\relax \@tempcntXc=\@xzobun\relax%%\typeout{KKKK:\@xzobun} \@tempcntYc=\@yzobun\relax%%\typeout{LLLL:\@yzobun} \divide\@tempcntXc by\@tempcntzzz\relax \divide\@tempcntYc by\@tempcntzzz\relax \advance\@tempcntXc by#1\relax \advance\@tempcntXc by\@xzobun\relax%%\typeout{AAAA:\the\@tempcntXc} \advance\@tempcntYc by#2\relax \advance\@tempcntYc by\@yzobun\relax%%\typeout{BBBB:\the\@tempcntYc} }%%end of \bondshorten % \end{macrocode} % \end{macro} % Skeletal hashed dash bonds can be changed into hashed wedges, where % |\HashWedgeAsSubst| is described in an ATOMLIST as a kind of % spiro substituent. This macro is essentially equivalent to % the macro |h@shedw@dgebond|, whose last four arguments are omitted. % % \begin{macro}{HashWedgeAsSubst} % \changes{v4.02}{2004/12/20}{For PS mode: Hashed wedged bonds for stereochemistry} % \changes{v5.00}{2010/10/01}{For PDF mode: Hashed wedged bonds for stereochemistry} % \begin{macrocode} \def\HashWedgeAsSubstPDF(#1,#2)(#3,#4)#5{% \begingroup \zahyozobun(#1,#2)(#3,#4){#5}% \@tempcntXa=\@xzobun\relax \advance\@tempcntXa by#1\relax \@tempcntYa=\@yzobun\relax \advance\@tempcntYa by#2\relax \stereo@wedgedimension(#3,#4){10}% \XyMTeXnumf=\@tempcntXb%%\typeout{CCCCF:\the\XyMTeXnumf} \XyMTeXnumg=\@tempcntYb%%\typeout{CCCCG:\the\XyMTeXnumg} \XyMTeXnumh=\@tempcntXc%%\typeout{CCCCH:\the\XyMTeXnumh} \XyMTeXnumi=\@tempcntYc%%\typeout{CCCCI:\the\XyMTeXnumi} \@tempcntzz=5\relax \@tempcntzzz=-12\relax \bond@sh@rten(#1,#2)(#3,#4){#5}% %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\filldraw[black,line cap=round]% %(#1\unitlength,#2\unitlength) coordinate (X) --% %(\XyMTeXnumf\unitlength,\XyMTeXnumg\unitlength) --% %(\XyMTeXnumh\unitlength,\XyMTeXnumi\unitlength) -- (#1\unitlength,#2\unitlength);% %\draw[dashed,line width=4pt,dash pattern=on 1pt off 1.2pt,color=white]% %(\@tempcntXb\unitlength,\@tempcntYb\unitlength) --% %(\@tempcntXc\unitlength,\@tempcntYc\unitlength);% %}}% %\PutBondBox(#1,#2)(\the\@tempcntXc,\the\@tempcntYc){\box0}% \tikznodimension{% \filldraw% (#1\unitlength,#2\unitlength) coordinate (X) --% (\XyMTeXnumf\unitlength,\XyMTeXnumg\unitlength) --% (\XyMTeXnumh\unitlength,\XyMTeXnumi\unitlength) -- (#1\unitlength,#2\unitlength);% \draw[dashed,line width=4pt,dash pattern=on 1pt off 1.2pt,color=white]% (\@tempcntXb\unitlength,\@tempcntYb\unitlength) --% (\@tempcntXc\unitlength,\@tempcntYc\unitlength);}% \endgroup }%%end of \HashWedgeAsSubstPDF \let\HashWedgeAsSubst=\HashWedgeAsSubstPDF%For compatibility to PS mode % \end{macrocode} % \end{macro} % % The macro |\HashWedgeAsSubstX| has a starting point, % an endpoint, and the width of a wedge as its arguments. % Compare this command with |\HashWedgeAsSubst|, which has % a starting point, a slope, and the width of a wedge % as its arguments. % % \begin{macro}{HashWedgeAsSubstX} % \changes{v5.01}{2013/05/27}{For PDF mode: Hashed wedged bonds for stereochemistry} % \begin{macrocode} \def\HashWedgeAsSubstXPDF(#1,#2)(#3,#4){% \@ifnextchar[{\HashWedge@AsSubstXPDF(#1,#2)(#3,#4)}% {\HashWedge@AsSubstXPDF(#1,#2)(#3,#4)[10]}} \def\HashWedge@AsSubstXPDF(#1,#2)(#3,#4)[#5]{% \begingroup \WedgeAsSubstXPDF(#1,#2)(#3,#4)[#5]% \@tempdima=#5\unitlength \multiply\@tempdima by3\relax \advance\@tempdima by1pt%adjustment \tikznodimension{% \draw[dashed,line width=\@tempdima, dash pattern=on 1pt off 1.2pt,color=white]% (#1\unitlength,#2\unitlength) --% (#3\unitlength,#4\unitlength);}% \endgroup }%%end of \HashWedgeAsSubstXPDF \let\HashWedgeAsSubstX=\HashWedgeAsSubstXPDF%For compatibility to PDF mode % \end{macrocode} % \end{macro} % % Skeletal bold bonds can be changed into wavy bonds, where % |\WavyAsSubst| is described in an ATOMLIST as a kind of % spiro substituent. % % \begin{macro}{\WavyAsSubst} % \changes{v5.01}{2004/06/21}{For PDF mode: Wavy skeletal bonds} % \begin{macrocode} \def\WavyAsSubstPDF(#1,#2)(#3,#4)#5{% \begingroup \wavebondtrue \Put@@@@Line(#1,#2)(#3,#4){#5}% \endgroup} \let\WavyAsSubst=\WavyAsSubstPDF%for compatibility to PS mode % \end{macrocode} % \end{macro} % % The macro |\WavyAsSubstX| has a starting point, % an endpoint, and the width of a wedge as its arguments. % Compare this command with |\WavyAsSubst|, which has % a starting point, a slope, and the width of a wedge % as its arguments. % % \begin{macro}{WedgeAsSubstX} % \changes{v5.01}{2013/06/21}{For PDF mode: Checked OK} % \begin{macrocode} \let\WavyAsSubstXPDF=\PUT@@@@wavyLINE \let\WavyAsSubstX=\WavyAsSubstXPDF%for compatibility to PS mode % \end{macrocode} % \end{macro} % % The command \cs{downnobond} is redefined for pstricks. % \begin{macro}{\upnobond} % \begin{macro}{\downnobond} % \begin{macrocode} %\def\upnobond#1#2{%nochange %\hbox{\hbox to0.72em{\hss#1\hss}\kern-0.72em\raise2.2ex\hbox{#2}}} \def\downnobond#1#2{% \hbox{\smash{\hbox to0.72em{\hss#1\hss}\kern-0.72em\lower2.2ex\hbox{#2}}}} % \end{macrocode} % \end{macro} % \end{macro} % % The macro |\PUT@@@@dashedLINE| is used to draw a dashed bond line, % which usually links two non-adjacent atoms of a cyclic compound. % This macro relies on the |\tikz| graphic enviroment. % % \begin{macro}{\PUT@@@@dashedLINE} % \begin{macro}{\PutPDFdashed} % \begin{macro}{\PutDashedBond} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \def\PUT@@@@dashedLINE(#1,#2)(#3,#4)#5{% \begingroup %\ifdim\unitlength>0.08pt %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[dashed,line width=#5,dash pattern=on 1pt off 1.2pt]% %(#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength);}}% %\else %\setbox0=\hbox{% %\tikz[baseline=(X.base)]{% %\draw[dashed,line width=#5,dash pattern=on 0.8pt off 1pt]% %(#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength);}}% %\fi %\PutSimpleBondBox(#1,#2)(#3,#4){\box0}% \ifdim\unitlength>0.08pt \tikznodimension{% \draw[dashed,line width=#5,dash pattern=on 1pt off 1.2pt]% (#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength);}% \else \tikznodimension{% \draw[dashed,line width=#5,dash pattern=on 0.8pt off 1pt]% (#1\unitlength,#2\unitlength) -- (#3\unitlength,#4\unitlength);}% \fi \endgroup } \let\PutPDFdashed=\PUT@@@@dashedLINE%for user's use \let\PutDashedBond=\PUT@@@@dashedLINE%for compatibility to PS mode % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % The macro |\set@xy@PDFcoords| is used in the macro |\putRoundArrowPDF| % for drawing round arrows. This command supports a format-changing % mechanism to assure the compatibility to the PostScript mode. % % \begin{macro}{\Temp@ArCords} % \begin{macro}{\set@xy@PDFcoords} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \newtoks\Temp@ArCords \Temp@ArCords={} \def\set@xy@PDFcoords(#1,#2){% \ifnum\@tempcnta=1\relax \Temp@ArCords={(#1\unitlength,#2\unitlength) }\else \expandafter\Temp@ArCords\expandafter{\the\Temp@ArCords -- % (#1\unitlength,#2\unitlength)}\fi} % \end{macrocode} % \end{macro} % \end{macro} % % The macro |\setRoundArrPDF| is used in the macro |\putRoundArrowPDF| % for drawing round arrows. This command is based on |\tikznodimension| % to draw round arrows. The letter string |\RoundedCornersWidth| stores % the standard roundness st a corner point. % % \begin{macro}{\RoundedCornersWidth} % \begin{macro}{\setRoundArrPDF} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \def\RoundedCornersWidth{4pt} \def\setRoundArrPDF#1{% \ifnum\@tempcnta>5\relax \def\RoundedCornersWidth{4pt}% \else \def\RoundedCornersWidth{8pt}\fi \tikznodimension{% \draw[\RoundArrowHead,line width=0.4pt,% rounded corners=\RoundedCornersWidth]#1;}}% % \end{macrocode} % \end{macro} % \end{macro} % % The macro |\putRoundArrowPDF| throws its main task to its inner % macro |\putRound@rrowPDF|, which treats an optional argument % for specifying the direction of an arrow head and reads coordinates % repeatedly by using |\@forendparenthesis|. The |\@forendparenthesis| % command is defined in the \textsf{chemstr} package. % The macro |\putRoundArrow| is defined as a user command to % assure the compatibility to the PostScriot mode. % % \begin{macro}{\putRoundArrowPDF} % \begin{macro}{\putRound@rrowPDF} % \begin{macro}{\putRoundArrow} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \def\putRoundArrowPDF{% \@ifnextchar[{\putRound@rrowPDF}{\putRound@rrowPDF[->]}} \def\putRound@rrowPDF[#1]#2{% \edef\RoundArrowHead{#1}% \Temp@ArCords={}\@tempcnta=\@ne\relax \@forendparenthesis\member:=#2\do{% \ifx\member\empty\else \expandafter\set@xy@PDFcoords\member)\fi \advance\@tempcnta\@ne}% \expandafter\setRoundArrPDF\expandafter{\the\Temp@ArCords}% } \let\putRoundArrow=\putRoundArrowPDF % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % The command |\changeunitlength| is redefined for using the pgf (tikz) package. % The pgf package uses ``scale'' in optional designations in place of % the setting by \verb/\unitlength/. The setting of \verb/\unitlength=0.1pt/ is % regarded as corresponding to \verb/scale=0.00357/, which is stored in % \verb/\@UScale/ after it is obtained by the \verb/\setUnitScale/ command. % \begin{macro}{\changeunitlength} % \begin{macro}{\UScaleGain} % \begin{macro}{\setUnitScale} % \begin{macrocode} %%added 2010/08/17 {\catcode`\p=12 \catcode`\t=12 \gdef\UScaleGain#1pt{\gdef\@UScale{#1}}} \def\setUnitScale#1{% \@tempdima=#1 \dimen0=1cm \@tempcnta=\@tempdima \@tempcntb=\dimen0 \divide\@tempcntb by65536% \divide\@tempdima by \@tempcntb \expandafter\UScaleGain\the\@tempdima} \setUnitScale{0.1pt}%standard setting %%% \newif\ifsizereduction\sizereductionfalse \def\@@@changeunitlength#1{\unitlength=#1\relax \setUnitScale{#1}%%% scale=\@UScale \ifdim\unitlength<0.1pt \sizereductiontrue \ifdim\unitlength<0.062pt \let\substfontsize=\tiny \else \ifdim\unitlength<0.072pt \let\substfontsize=\scriptsize \else \ifdim\unitlength<0.082pt \let\substfontsize=\footnotesize \fi\fi\fi \else \let\substfontsize=\normalsize\fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\red etc.} % \changes{v5.00}{2010/10/01}{bond coloring for PDF mode} % \begin{macrocode} \def\red{\color{red}} \def\green{\color{green}} \def\blue{\color{blue}} \def\cyan{\color{cyan}} \def\magenta{\color{magenta}} \def\yellow{\color{yellow}} \def\black{\color{black}} \def\white{\color{white}} % \end{macrocode} % \end{macro} % % \begin{macro}{\xymcolor} % \begin{macro}{\redx etc.} % These macros are defined to avoid \texttt{**Warning** color stack underflow} % during processing by the dvipdfmx converter. % \changes{v5.00}{2010/10/01}{Added: Colors for TeX/LaTeX mode} % \begin{macrocode} \def\xymcolor#1#2{\mbox{\color{#1}#2}} %defined in the bondcolor packag %\def\redx#1{\xymcolor{red}{#1}} %\def\bluex#1{\xymcolor{blue}{#1}} %\def\greenx#1{\xymcolor{green}{#1}} %\def\blackx#1{\xymcolor{black}{#1}} %\def\cyanx#1{\xymcolor{cyan}{#1}} %\def\yellowx#1{\xymcolor{yellow}{#1}} %\def\magentax#1{\xymcolor{magenta}{#1}} %\def\whitex#1{\xymcolor{white}{#1}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Color@@@@Line} % \changes{v5.00}{2010/10/01}{For coloring skeletal bond in PDF mode} % The last argument (\#7) specifies a line color. % This command is used in the definition of |\replaceSKbond| % of the \textsf{bondcolor} package by putting \verb/#7=white/. % \begin{macro}{\Color@Line} % \begin{macrocode} \def\Color@@@@Line{% \@ifnextchar[{\C@lor@@@@Line}{\C@lor@@@@Line[0.4pt]}} \def\C@lor@@@@Line[#1](#2,#3)(#4,#5)#6#7{% \begingroup \SlopetoXY(#2,#3)(#4,#5){#6}%% \@tempdime=\unitlength \multiply\@tempdime by#2\relax \@tempdimb=\unitlength \multiply\@tempdimb by#3\relax \@tempdimc=\unitlength \multiply\@tempdimc by\@tempcntXa\relax \@tempdimd=\unitlength \multiply\@tempdimd by\@tempcntYa\relax \tikznodimension{% \draw[line width=#1,color=#7]% (\@tempdime,\@tempdimb) --(\@tempdimc,\@tempdimd);}% \endgroup}%end of \Color@@@@Line \let\Color@Line=\Color@@@@Line%for PDF mode % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{setxymtxpdf} % \changes{v5.00}{2010/10/01}{For PDF mode} % \begin{macrocode} \def\setxymtxpdf{% \@ifnextchar[{\@setxymtxpdf}{\@setxymtxpdf[0.1pt]}} \def\@setxymtxpdf[#1]{% \PDFmodetrue \let\sfpicture=\picture \let\endsfpicture=\endpicture \let\thicklines=\Thick@Lines \let\thinlines=\Thin@Lines \let\Put@Line=\Put@@@@Line \let\Color@Line=\Color@@@@Line%for PDF mode \let\Put@Direct=\Put@@@@Direct \let\Put@oCircle=\Put@@@@oCircle \let\Put@sCircle=\Put@@@@sCircle \let\dotorline=\d@@t@@rline \let\WedgeAsSubst=\WedgeAsSubstPDF%for compatibility to PS mode \let\HashWedgeAsSubst=\HashWedgeAsSubstPDF%For compatibility to PS mode \let\WedgeAsSubstX=\WedgeAsSubstXPDF%for compatibility to PDF mode \let\HashWedgeAsSubstX=\HashWedgeAsSubstXPDF%For compatibility to PDF mode \let\PutBondLine=\PUT@@@@bondLINE%for user's use \let\PutDashedBond=\PUT@@@@dashedLINE%for compatibility to PS mode \let\putRoundArrow=\putRoundArrowPDF%for compatibility to PS mode \let\changeunitlength=\@@@changeunitlength \changeunitlength{#1}% \wedgehasheddash% } \setxymtxpdf % % \end{macrocode} % \end{macro} % % \Finale % \endinput