% \iffalse meta-comment
%% File: sizeredc.dtx
%
%  Copyright 1996, 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, Sakyo-ku, 606-8585, Japan
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{sizeredc}
% \def\versi@ndate{June 12, 2001}
% \def\versi@nno{ver1.00}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \def\j@urnalname{sizeredc}
% \def\versi@ndate{April 30, 2002}
% \def\versi@nno{ver1.01}
% \def\copyrighth@lder{SF} % Shinsaku Fujita
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \fi
%
% \CheckSum{428}
%% \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}{2001/06/12}{first edition for LaTeX2e}
% \changes{v1.01}{2002/04/30}{2nd edition for XyMTeX v3.00}
% \changes{v4.01}{2004/08/30}{Adjust XyMTeX v4.01}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
\ProvidesFile{sizeredc.dtx}[2004/08/30 v4.01 XyMTeX{} package file]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{sizeredc.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{Size Reduction of Structural Formulas 
by {\sffamily sizeredc.sty} (\fileversion) of \XyMTeX{}}
\author{Shinsaku Fujita \\ 
Department of Chemistry and Materials Technology, \\
Kyoto Institute of Technology, \\ 
Matsugasaki, Sakyo-ku, 606-8585, Japan}
\date{\filedate}
%
\begin{document}
   \maketitle
   \DocInput{sizeredc.dtx}
\end{document}
%</driver>
% \fi
%
% \section{Introduction}\label{sizeredc:intro}
%
% \subsection{Options for {\sffamily docstrip}}
%
% \DeleteShortVerb{\|}
% \begin{center}
% \begin{tabular}{|l|l|}
% \hline
% \emph{option} & \emph{function}\\ \hline
% sizeredc & sizeredc.sty \\
% driver & driver for this dtx file \\
% \hline
% \end{tabular}
% \end{center}
% \MakeShortVerb{\|}
%
% \subsection{Version Information}
%
%    \begin{macrocode}
%<*sizeredc>
\typeout{XyMTeX for Drawing Chemical Structural Formulas. Version 4.01}
\typeout{       -- Released August 30, 2004 by Shinsaku Fujita}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\j@urnalname{sizeredc}
\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{Macros for Size Reduction}
% \subsection{Division of Integers}
%
% \begin{macro}{\DIVIDE}
% The macro |\DIVIDE| is used to the devision of an integer 
% by a divisor.  The result (rounded to an integer) is stored 
% in a control sequence such as |\Quatient|. 
% \begin{verbatim}
%  \DIVDE{integer}{divisor}\Quatient
% \end{verbatim}
% 
%    \begin{macrocode}
\newcount\@tempcntx \newcount\@tempcnty \newcount\@tempcntz
\newif\ifseifuflag \seifuflagfalse 
\def\DIVIDE#1#2#3{%
\seifuflagfalse \@tempcntx=#1
\ifnum\@tempcntx<0 \@tempcntx=-\@tempcntx\seifuflagtrue\fi
\divide\@tempcntx by#2\relax
\ifnum\@tempcntx<0 \@tempcntx=-\@tempcntx
\ifseifuflag \seifuflagfalse \else \seifuflagtrue\fi\fi
\@tempcntz=\@tempcntx%%store
\@tempcnty=\@tempcntx \multiply\@tempcnty by#2%
\ifnum\@tempcnty<0 \@tempcnty=-\@tempcnty\fi
\@tempcntx=#1%
\ifnum\@tempcntx<0 \@tempcntx=-\@tempcntx\fi
\advance\@tempcntx by-\@tempcnty%
\multiply\@tempcntx by10 \edef\s{\the\@tempcntx}%
\divide\@tempcntx by#2 
\ifnum\@tempcntx<0 \@tempcntx=-\@tempcntx\fi
\ifnum\@tempcntx>4\relax \advance\@tempcntz by1\fi
\ifseifuflag \xdef#3{-\the\@tempcntz}%
\else\xdef#3{\the\@tempcntz}\fi}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Size Reduction of Formulas}
%
% \begin{macro}{\LineTemp}
% The macro |\LineTemp| is used to redefine the |\line| commond of 
% the \LaTeXe{} picture environment. Thereby, the macro 
% |\LineTemp(a,b){c}| is transformed into the macro 
% |\drawline(0,0)(c, ca/b)| for epic.sty, where |ca/b| is 
% calculated by the macro |\DIVIDE| defined above. 
%
%    \begin{macrocode}
\newcount\@xArg \newcount\@yArg
\def\LineTemp(#1,#2)#3{\begingroup
\@xArg #1\relax \@yArg #2\relax
\ifnum\@xArg<0 \@tempcntx=-#3 \else
\ifnum\@xArg>0 \@tempcntx=#3 \else \@tempcntx=0 \fi\fi
\@tempcnty=#3
\multiply\@tempcnty by\@yArg\relax
\ifnum\@tempcnty<0 \@tempcnty=-\@tempcnty\fi
\ifnum\@xArg<0 \@xArg=-\@xArg\fi
\ifnum\@xArg=0 \edef\RR{#3}\else
{\DIVIDE{\@tempcnty}{\@xArg}\RR}\fi
\@tempcnty=\RR%
\ifnum\@yArg<0 \ifnum\@tempcnty>0 \@tempcnty=-\@tempcnty\fi\fi
\drawline(0,0)(\the\@tempcntx,\the\@tempcnty)%
\endgroup}
%    \end{macrocode}
% \end{macro}
% 
% The if-phrase |\ifsizereduction| is to determine whether 
% size-reduction is carried out or not. 
% Then, |\LineTemp| is substituted for the original |\line| 
% if |\sizereductiontrue| is declared and if |\unitlength| 
% is smaller than 0.1pt. 
%
% \begin{macro}{\line}
% \begin{macro}{\ifsizereduction}
%    \begin{macrocode}
\RequirePackage{epic}%
\newif\ifsizereduction \sizereductionfalse
%\let\@ldline=\line
\def\reduced@line(#1,#2)#3{\ifsizereduction
\ifdim\unitlength<0.1pt \LineTemp(#1,#2){#3}\else
\@ldline(#1,#2){#3}\fi
\else\@ldline(#1,#2){#3}\fi}
\let\line=\reduced@line
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% The command |\changeunitlength| is used to set |\unitlength| 
% and to declare |\sizereductiontrue| 
% if |\unitlength| is smaller than 0.1pt. 
% The font size of substituents is changed by |\substfontsize| 
% according to the size reduction. 
%
% \changes{v4.00}{2002/5/30}{Added: \cs{substfontsize}}
%
% \begin{macro}{\@changeunitlength}
%    \begin{macrocode}
\def\@changeunitlength#1{\unitlength=#1\relax
\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}
\let\changeunitlength=\@changeunitlength
%    \end{macrocode}
% \end{macro}
%
% The reduced setting is the original LaTeX picture environment but 
% include the size-reduction mechanism. 
% To switch the size-reduction meachism and the pstricks mechanism, 
% we can use a switching command such as |\originalpicture|. 
% \changes{v3.00}{2002/4/30}{New environment: sfpicture}
%
% \begin{macro}{\reducedsizepicture}
%    \begin{macrocode}
\def\reducedsizepicture{%
\@ifnextchar[{\reduced@picture}{\reduced@picture[0.1pt]}}
\def\reduced@picture[#1]{%
\sizereductiontrue
\let\sfpicture=\picture
\let\endsfpicture=\endpicture
\let\Put@Direct=\put
\let\Multiput@Direct=\multiput
\let\thicklines=\@ldthicklines
\let\thinlines=\@ldthinlines
\let\line=\reduced@line
\let\dotorline=\d@t@rline
\let\Put@Line=\Put@@Line
\let\Put@sCircle=\Put@@sCircle
\let\Put@oCircle=\Put@@oCircle
\xymtexpsswfalse
\let\changeunitlength=\@changeunitlength
\changeunitlength{#1}}
\reducedsizepicture%size-reduction setting
%    \end{macrocode}
% \end{macro}
%
%
% The command |\lineslope| of epic.sty has been redefined 
% to give a more precise result. 
%
% \begin{macro}{\lineslope}
%    \begin{macrocode}
\let\oldlineslope=\lineslope%used only in the manual 
\def\lineslope(#1,#2){%
\begingroup
\ifdim #1 <0pt \@xdim= -#1 \else\@xdim=#1\fi
\ifdim #2 <0pt \@ydim= -#2 \else\@ydim=#2\fi
%\typeout{LLL= \the#1, \the#2}
\multiply\@xdim by10\relax%by S. Fujita 2001/6/20
\multiply\@ydim by10\relax%by S. Fujita 2001/6/20
%\typeout{xdim,ydim= \the\@xdim, \the\@ydim}
\ifdim\@xdim >\@ydim \@tempdima=\@xdim \@xdim=\@ydim \@ydim=\@tempdima
\@flippedargstrue\else\@flippedargsfalse\fi% x < y
\ifdim\@ydim >1pt \@tempcntx=\@ydim
            \divide\@tempcntx by 65536% now \@tempcntx=integral part of #1.
            \divide\@xdim \@tempcntx\fi
%\typeout{xdim: \the\@xdim}%
\ifdim\@xdim <.083333pt \@xarg=1 \@yarg=0
 \else\ifdim\@xdim <.183333pt	\@xarg=6 \@yarg=1
 \else\ifdim\@xdim <.225pt 	\@xarg=5 \@yarg=1
 \else\ifdim\@xdim <.291666pt 	\@xarg=4 \@yarg=1
 \else\ifdim\@xdim <.366666pt 	\@xarg=3 \@yarg=1
 \else\ifdim\@xdim <.45pt 	\@xarg=5 \@yarg=2
 \else\ifdim\@xdim <.55pt 	\@xarg=2 \@yarg=1
 \else\ifdim\@xdim <.633333pt 	\@xarg=5 \@yarg=3
 \else\ifdim\@xdim <.708333pt 	\@xarg=3 \@yarg=2
 \else\ifdim\@xdim <.775pt 	\@xarg=4 \@yarg=3
 \else\ifdim\@xdim <.816666pt 	\@xarg=5 \@yarg=4
 \else\ifdim\@xdim <.916666pt 	\@xarg=6 \@yarg=5
       \else			\@xarg=1 \@yarg=1%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\if@flippedargs\relax\else\@tempcntx=\@xarg \@xarg=\@yarg
			  \@yarg=\@tempcntx\fi
\ifdim #1 <0pt \global\@xarg= -\@xarg\else\global\@xarg= \@xarg\fi
\ifdim #2 <0pt \global\@yarg= -\@yarg\else\global\@yarg= \@yarg\fi
%%\typeout{closest slope integers = \the\@xarg, \the\@yarg}
\endgroup}
%</sizeredc>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%
\endinput
