%% The following copyright notice and licensing information was added %% by Clea F. Rees on behalf of Alexander Berdnikov on 2008/11/03. %% %% Copyright 1996 Alexander Berdnikov, Olga Grineva %% %% This file is part of pmgraph. %% %% pmgraph is free software: you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation, either version 3 of the License, or %% (at your option) any later version. %% %% pmgraph is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %% See the GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with pmgraph. If not, see . \chardef\oldatcatcode=\catcode`@ \catcode`@=11 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% PMGRAPH.STY --- intermediate version %% %% of poor-man-graphics style %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % save old LaTeX macro % \let\ltx@thinlines=\thinlines \let\ltx@thicklines=\thicklines \let\ltx@@getcirc=\@getcirc \let\ltx@@circ=\@circ \let\ltx@vector=\vector \let\ltx@@svector=\@svector \let\ltx@@getlarrow=\@getlarrow \let\ltx@@gerlarrow=\@getrarrow \newif\ifflag@thicklines \newdimen\@dimenA \newdimen\@dimenB \newdimen\@dimenC \newdimen\@dimenD % this is \put(x,y) where and are dimensions \def\@@put#1#2#3{\@killglue\raise#2\hbox to\z@{\hskip #1 #3\hss}} % dashed or solid vertical line \def\vdashline#1{% \@setdashlength{#1}% \ifnum \@dashcnt>0 \setbox\@dashbox\hbox{\vrule height \@dashdim width \@wholewidth}% \@tempcnta=0 \leavevmode \lower \@dashdim \hbox{\kern -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt \do{\copy\@dashbox \vskip\@tempdimb \advance\@tempcnta by 1}% }}% \else \advance\@tempdima \@halfwidth \ifdim \@tempdima>0pt \leavevmode\kern -\@halfwidth \vrule width \@wholewidth height \@tempdima depth \@halfwidth \relax \fi \fi } % dashed or solid horizontal line \def\hdashline#1{% \@setdashlength{#1}% \ifnum \@dashcnt>0 \setbox\@dashbox\hbox{\vrule width \@dashdim height \@halfwidth depth \@halfwidth \hskip \@tempdimb}% \@tempcnta=0 \@whilenum \@tempcnta<\@dashcnt \do{\copy\@dashbox \advance\@tempcnta by 1}% \else \advance\@tempdima \@wholewidth \ifdim \@tempdima>0pt \leavevmode\kern -\@halfwidth \vrule width \@tempdima height \@halfwidth depth \@halfwidth \relax \fi \fi } % length of the line is in \@tempdima % output : \@dashdim is the dash length, % \@tempdimb is the dash space % \@dashcnt is the number of dashes \def\@setdashlength#1{% \@dashdim=#1\unitlength \@tempdimb=0.5\@tempdima \advance\@tempdimb by 0.5\@dashdim \@dashcnt=\@tempdimb \@tempcnta=\@dashdim \ifnum \@tempcnta>0 \divide\@dashcnt by \@tempcnta \else \@dashcnt=0 \fi \advance\@dashcnt by -1 \ifnum \@dashcnt>0 \@tempdimb=-\@dashdim \multiply\@tempdimb by \@dashcnt \advance\@tempdimb by \@tempdima \advance\@tempdimb by -\@dashdim \divide\@tempdimb by \@dashcnt \advance\@dashcnt by 1 \else \@tempdimb=0pt\@dashcnt=0 \fi } %%% %%% romb frame commands %%% \def\romb{\@ifnextchar[{\romb@}{\romb@[c]}} \def\romb@[#1](#2,#3)#4{\csname romb@#1\endcsname(#2,#3){#4}} \def\romb@r(#1,#2)#3{% \put(-#3,0){\romb@c(#1,#2){#3}} } \def\romb@l(#1,#2)#3{% \put(#3,0){\romb@c(#1,#2){#3}} } \def\romb@c(#1,#2)#3{% \put(-#3,0){\line(#1,#2){#3}} \put(-#3,0){\line(#1,-#2){#3}} \put(#3,0){\line(-#1,#2){#3}} \put(#3,0){\line(-#1,-#2){#3}} } \def\rombBox{\@ifnextchar[{\@rombBox}{\@rombBox[x]}} \def\rombBoX{\@ifnextchar[{\@rombBoX}{\@rombBoX[x]}} \def\rombBOX{\@ifnextchar[{\@rombBOX}{\@rombBOX[x]}} \def\@rombBox[#1](#2,#3){% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \@HelpRomb{#2}{#3}{0}[#1]% }\@makepicbox(#2,#3)} \def\@rombBoX[#1](#2,#3){% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \@HelpRomb{#2}{#3}{0}[#1]% \@HelpRomb{#2}{#3}{1}[#1]% }\@makepicbox(#2,#3)} \def\@rombBOX[#1](#2,#3){% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \@HelpRomb{#2}{#3}{0}[#1]% \@HelpRomb{#2}{#3}{1}[#1]% \@HelpRomb{#2}{#3}{2}[#1]% }\@makepicbox(#2,#3)} \def\@HelpRomb#1#2#3[#4]{\@makerombslope \@dimenA=\@RombL\relax \multiply\@dimenA by #3 \@dimenB=\@dimenA \multiply\@dimenA by \@xarg \multiply\@dimenB by \@yarg \@dimenC=-\@dimenA \@dimenD=\@dimenC \multiply\@dimenA by 2 \@dimenB=\@dimenA \advance\@dimenA #1\unitlength \advance\@dimenB #2\unitlength \if x#4 \@romblengthX \else \if y#4 \@romblengthY \else \if z#4 \@romblengthZ \else \@romblengthX \fi\fi\fi \@makeromb} \def\@makerombslope{% \@xarg \@RombX\relax \@yarg \@RombY\relax \ifnum \@xarg<0 \@xarg -\@xarg \fi \ifnum \@yarg<0 \@yarg -\@yarg \fi \ifnum \@xarg=0 \xarg 2 \@yarg 1 \fi \ifnum \@yarg=0 \xarg 2 \@yarg 1 \fi } \def\@romblengthX{\@linelen=0.5\@dimenA} \def\@romblengthY{\@linelen=0.5\@dimenB \divide\@linelen by \@yarg \multiply\@linelen by \@xarg} \def\@romblengthZ{\@romblengthY \advance\@linelen by 0.5\@dimenA} % it is supposed that \@xarg and \@yarg are set to slope values, % and \@linelen is equal to the length of the romb side \def\@makeromb{% \@makerombhlp \advance\@tempdima by -\@linelen \@@put{\@tempdima}{\@tempdimb}{\@sline}% \@yarg=-\@yarg \@makerombhlp \advance\@tempdima by -\@linelen \@@put{\@tempdima}{\@tempdimb}{\@sline}% \@xarg=-\@xarg \@makerombhlp \advance\@tempdima by \@linelen \@@put{\@tempdima}{\@tempdimb}{\@sline}% \@yarg=-\@yarg \@makerombhlp \advance\@tempdima by \@linelen \@@put{\@tempdima}{\@tempdimb}{\@sline}% } \def\@makerombhlp{\@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima 0.5\@dimenA \advance\@tempdimb 0.5\@dimenB} \def\rombboxstyle(#1,#2,#3){\def\@RombX{#1}% \def\@RombY{#2}% \def\@RombL{#3}% \ignorespaces} %%% %%% rect frame commands %%% \def\frameBox{\@ifnextchar[{\@frameBox}{\@frameBox[]}} \def\frameBoX{\@ifnextchar[{\@frameBoX}{\@frameBoX[]}} \def\frameBOX{\@ifnextchar[{\@frameBOX}{\@frameBOX[]}} \def\ovalBox{\@ifnextchar[{\@ovalBox}{\@ovalBox[]}} \def\ovalBoX{\@ifnextchar[{\@ovalBoX}{\@ovalBoX[]}} \def\ovalBOX{\@ifnextchar[{\@ovalBOX}{\@ovalBOX[]}} \def\astroBox{\@ifnextchar[{\@astroBox}{\@astroBox[]}} \def\astroBoX{\@ifnextchar[{\@astroBoX}{\@astroBoX[]}} \def\astroBOX{\@ifnextchar[{\@astroBOX}{\@astroBOX[]}} \def\parquetBox{\@ifnextchar[{\@parquetBox}{\@parquetBox[]}} \def\parquetBoX{\@ifnextchar[{\@parquetBoX}{\@parquetBoX[]}} \def\parquetBOX{\@ifnextchar[{\@parquetBOX}{\@parquetBOX[]}} \def\octalBox{\@ifnextchar[{\@octalBox}{\@octalBox[]}} \def\octalBoX{\@ifnextchar[{\@octalBoX}{\@octalBoX[]}} \def\octalBOX{\@ifnextchar[{\@octalBOX}{\@octalBOX[]}} \def\dashBox#1{\@ifnextchar[{\@dashBox{#1}}{\@dashBox{#1}[]}} \def\dashBoX#1{\@ifnextchar[{\@dashBoX{#1}}{\@dashBoX{#1}[]}} \def\dashBOX#1{\@ifnextchar[{\@dashBOX{#1}}{\@dashBOX{#1}[]}} \def\userBox#1#2{\@ifnextchar[{\@userBox{#1}{#2}}{\@userBox{#1}{#2}[]}} \def\userBoX#1#2{\@ifnextchar[{\@userBoX{#1}{#2}}{\@userBoX{#1}{#2}[]}} \def\userBOX#1#2{\@ifnextchar[{\@userBOX{#1}{#2}}{\@userBOX{#1}{#2}[]}} \def\@frameBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{r}} \def\@frameBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{r}} \def\@frameBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{r}} \def\@ovalBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{O}} \def\@ovalBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{O}} \def\@ovalBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{O}} \def\@astroBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{A}} \def\@astroBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{A}} \def\@astroBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{A}} \def\@parquetBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{P}} \def\@parquetBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{P}} \def\@parquetBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{P}} \def\@octalBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{L}} \def\@octalBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{L}} \def\@octalBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{L}} \def\@dashBox#1[#2](#3,#4){\@makeBox{#3}{#4}{#2}{#1}{r}} \def\@dashBoX#1[#2](#3,#4){\@makeBoX{#3}{#4}{#2}{#1}{r}} \def\@dashBOX#1[#2](#3,#4){\@makeBOX{#3}{#4}{#2}{#1}{r}} \def\@userBox#1#2[#3](#4,#5){\@makeBox{#4}{#5}{#3}{#2}{#1}} \def\@userBoX#1#2[#3](#4,#5){\@makeBoX{#4}{#5}{#3}{#2}{#1}} \def\@userBOX#1#2[#3](#4,#5){\@makeBOX{#4}{#5}{#3}{#2}{#1}} % #1 = x, #2 = y % #3 = shadows % #4 = dash line (real) % #5 = frame style (,O,A,C,R,???) % \def\@makeBox#1#2#3#4#5{% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}% }\@makepicbox(#1,#2)} % \def\@makeBoX#1#2#3#4#5{% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \ifdim \framesepH>\z@ \@HelpFrame{#1}{#2}{0}{}{#4}{#5}% \@HelpFrame{#1}{#2}{1}{#3}{#4}{#5}% \else \@HelpFrame{#1}{#2}{1}{}{#4}{#5}% \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}% \fi}\@makepicbox(#1,#2)} % \def\@makeBOX#1#2#3#4#5{% \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@ \ifdim \framesepH>\z@ \@HelpFrame{#1}{#2}{0}{}{#4}{#5}% \@HelpFrame{#1}{#2}{1}{}{#4}{#5}% \@HelpFrame{#1}{#2}{2}{#3}{#4}{#5}% \else \@HelpFrame{#1}{#2}{2}{}{#4}{#5}% \@HelpFrame{#1}{#2}{1}{}{#4}{#5}% \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}% \fi}\@makepicbox(#1,#2)} \def\@warn@corner{\@warning{Unable to draw corner}} % #1 = x, #2 = y % #3 = multiple frame % #4 = list of shadows % #5 = dash/solid line (real) % #6 = frame corner style (,O,A,C,R,???) % \def\@HelpFrame#1#2#3#4#5#6{% \@tempdima=\framesepH\relax \multiply\@tempdima by #3 \@dimenA=\framesepXM\@tempdima \@dimenB=\framesepYM\@tempdima \@dimenC=-\@dimenA \@dimenD=-\@dimenB \advance\@dimenA by \framesepXP\@tempdima \advance\@dimenB by \framesepYP\@tempdima \advance\@dimenA #1\unitlength \advance\@dimenB #2\unitlength \advance\@dimenA by \frameexpandX\relax \advance\@dimenB by \frameexpandY\relax \@@makeframe{#5}{#6}% \advance\@dimenA by 2\@wholewidth \advance\@dimenB by 2\@wholewidth \advance\@dimenC by -\@wholewidth \advance\@dimenD by -\@wholewidth \@setshadowsize \@tfor \@tempa := #4 \do {\@negargtrue \ifdim \@dimenA>0pt \ifdim \@dimenB>0pt \csname @rectshadow@\@tempa\endcsname{#5}% \@updateshadowsize \@negargfalse \fi\fi \if@negarg \@warning{Shadow position is wrong}\fi }% } % in subsequent commands: % \@dimenA is x-size of the box, % \@dimenB is y-size of the box % \@dimenC is x-shift, \@dimenD is y-shift % % standard corner % \def\@prepdummy{\@ovxx=0pt \@ovyy=0pt \@ovdx=0pt \@ovdy=0pt \@yyarg=0 \@negargtrue} \def\@prepframe@R{\@prepdummy} \def\tl@corner@R{} \def\tr@corner@R{} \def\bl@corner@R{} \def\br@corner@R{} % % Oval corners % \def\@prepframe@O{% \@tempdima=\RoundCorner\relax \@tempdima=2\@tempdima \@negargtrue \ifdim \@tempdima>\@dimenA \@negargfalse \fi \ifdim \@tempdima>\@dimenB \@negargfalse \fi \if@negarg \@getcirc\@tempdima \@yyarg=\@tempcnta \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@tempdima=0.5\ht\@tempboxa \advance\@tempdima by -0.5\dp\@tempboxa \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima \@ovdy=\@ovdx \else \@warn@corner \fi } \def\tl@corner@O{\@@TLcircle} \def\tr@corner@O{\@@TRcircle} \def\bl@corner@O{\@@BLcircle} \def\br@corner@O{\@@BRcircle} % % Astro corners % \def\@prepframe@A{\@prepframe@O} \def\tl@corner@A{\@@brcircle} \def\tr@corner@A{\@@blcircle} \def\bl@corner@A{\@@trcircle} \def\br@corner@A{\@@tlcircle} % % Parquet corners % \def\@prepframe@P{\@negargtrue \@tempdima=\RectCorner\relax \ifdim \@tempdima>0.5\@dimenA \@negargfalse \fi \ifdim \@tempdima>0.5\@dimenB \@negargfalse \fi \if@negarg \@ovxx=\@tempdima \@ovyy=\@tempdima \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth \else \@warn@corner \fi } \def\tl@corner@P{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\kern \@ovxx \raise -\@ovyy \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern 0pt \raise -\@ovyy \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\tr@corner@P{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\kern -\@ovxx \raise -\@ovyy \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern -\@ovxx \raise -\@ovyy \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\bl@corner@P{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\kern \@ovxx \raise 0pt \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern 0pt \raise \@ovyy \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\br@corner@P{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\kern -\@ovxx \raise 0pt \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern -\@ovxx \raise \@ovyy \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } % % Ordinary corners: init= \def\@prepframe@D{\@prepframe@P} % \def\tl@corner@D{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\raise -\@ovyy \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\hdashline{\@tempa}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\tr@corner@D{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\raise -\@ovyy \hbox{\vdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern -\@ovxx \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\bl@corner@D{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\vdashline{\@tempa}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\hdashline{\@tempa}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } \def\br@corner@D{% \@tempdima=\@ovyy \setbox\@tempboxa\hbox{\vdashline{\@tempa}}% \wd\@tempboxa=0pt \copy\@tempboxa \@tempdima=\@ovxx \setbox\@tempboxa\hbox{\kern -\@ovxx \hbox{\hdashline{\@tempa}}}% \wd\@tempboxa=0pt \copy\@tempboxa \setbox\@tempboxa\hbox{}% } % % Octal corners % \def\@prepframe@L{% \@negargtrue \ifnum \@RombX>0 \else \@negargfalse \fi \ifnum \@RombY>0 \else \@negargfalse \fi \if@negarg \ifnum \@RombX>\@RombY \@tempdima=\LineCorner\relax \@tempdimb=\@tempdima \multiply\@tempdimb by \@RombY \divide\@tempdimb by \@RombX \else \@tempdimb=\LineCorner\relax \@tempdima=\@tempdimb \multiply\@tempdima by \@RombX \divide\@tempdima by \@RombY \fi \ifdim \@tempdima>0.5\@dimenA \@negargfalse \fi \ifdim \@tempdimb>0.5\@dimenB \@negargfalse \fi \@ovxx=\@tempdima \@ovyy=\@tempdimb \ifnum \@RombX>\@RombY \ifdim \@ovxx<10pt \@negargfalse \fi \else \ifdim \@ovyy<10pt \@negargfalse \fi \fi \if@negarg \@ovxx=\@tempdima \@ovyy=\@tempdimb \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth \else \@warn@corner \fi \fi } \def\tl@corner@L{\@xarg=\@RombX \@yarg=\@RombY \@linelen=\@ovxx \hbox{\raise -\@ovyy \hbox{\@sline}}} \def\tr@corner@L{\@xarg=-\@RombX \@yarg=\@RombY \@linelen=\@ovxx \hbox{\raise -\@ovyy \hbox{\@sline}}} \def\bl@corner@L{\@xarg=\@RombX \@yarg=-\@RombY \@linelen=\@ovxx \hbox{\raise \@ovyy \hbox{\@sline}}} \def\br@corner@L{\@xarg=-\@RombX \@yarg=-\@RombY \@linelen=\@ovxx \hbox{\raise \@ovyy \hbox{\@sline}}} % % Black box corners % \def\@prepframe@b{\@prepframe@P\@ovdx=0pt\@ovdy=0pt} \def\tl@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth \kern -\@halfwidth \raise -\@ovyy \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}} \def\tr@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth \kern -\@ovxx \raise -\@ovyy \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}} \def\bl@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth \kern -\@halfwidth \raise -\@halfwidth \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}} \def\br@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth \kern -\@ovxx \raise -\@halfwidth \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}} % % 0.75 Black box corners % \def\@prepframe@c{\@prepframe@P} \def\tl@corner@c{\tl@corner@P\tl@corner@cc} \def\tr@corner@c{\tr@corner@P\tr@corner@cc} \def\bl@corner@c{\bl@corner@P\bl@corner@cc} \def\br@corner@c{\br@corner@P\br@corner@cc} \def\tl@corner@cc{% \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth \setbox\@tempboxa\hbox{\kern -\@halfwidth \raise -0.75\@ovyy \hbox{\vrule width \@tempdima depth 0pt height \@tempdimb}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\tr@corner@cc{% \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth \setbox\@tempboxa\hbox{\kern -0.75\@ovxx \raise -0.75\@ovyy \hbox{\vrule width \@tempdima depth 0pt height \@tempdimb}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\bl@corner@cc{% \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth \setbox\@tempboxa\hbox{\kern -\@halfwidth \raise -\@halfwidth \hbox{\vrule width \@tempdima height \@tempdimb depth 0pt}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\br@corner@cc{% \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth \setbox\@tempboxa\hbox{\kern -0.75\@ovxx \raise -\@halfwidth \hbox{\vrule width \@tempdima height \@tempdimb depth 0pt}}% \wd\@tempboxa=0pt \copy\@tempboxa } % % 0.5 centered black box corners % \def\@prepframe@d{\@prepframe@P} \def\tl@corner@d{\tl@corner@P\tl@corner@D\tl@corner@dd} \def\tr@corner@d{\tr@corner@P\tr@corner@D\tr@corner@dd} \def\bl@corner@d{\bl@corner@P\bl@corner@D\bl@corner@dd} \def\br@corner@d{\br@corner@P\br@corner@D\br@corner@dd} \def\@prepframe@e{\@prepframe@P} \def\tl@corner@e{\tl@corner@D\tl@corner@dd} \def\tr@corner@e{\tr@corner@D\tr@corner@dd} \def\bl@corner@e{\bl@corner@D\bl@corner@dd} \def\br@corner@e{\br@corner@D\br@corner@dd} \def\@prepframe@f{\@prepframe@P} \def\tl@corner@f{\tl@corner@P\tl@corner@dd} \def\tr@corner@f{\tr@corner@P\tr@corner@dd} \def\bl@corner@f{\bl@corner@P\bl@corner@dd} \def\br@corner@f{\br@corner@P\br@corner@dd} \def\tl@corner@dd{% \@tempdima=0.25\@ovxx \advance\@tempdima by 0.5\@halfwidth \@tempdimb=-0.75\@ovyy \advance\@tempdimb by -0.5\@halfwidth \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb \hbox{\vrule width 0.5\@ovxx depth 0pt height 0.5\@ovyy}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\tr@corner@dd{% \@tempdima=-0.75\@ovxx \advance\@tempdima by -0.5\@halfwidth \@tempdimb=-0.75\@ovyy \advance\@tempdimb by -0.5\@halfwidth \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb \hbox{\vrule width 0.5\@ovxx depth 0pt height 0.5\@ovyy}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\bl@corner@dd{% \@tempdima=0.25\@ovxx \advance\@tempdima by 0.5\@halfwidth \@tempdimb=0.25\@ovyy \advance\@tempdimb by 0.5\@halfwidth \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb \hbox{\vrule width 0.5\@ovxx height 0.5\@ovyy depth 0pt}}% \wd\@tempboxa=0pt \copy\@tempboxa } \def\br@corner@dd{% \@tempdima=-0.75\@ovxx \advance\@tempdima by -0.5\@halfwidth \@tempdimb=0.25\@ovyy \advance\@tempdimb by 0.5\@halfwidth \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb \hbox{\vrule width 0.5\@ovxx height 0.5\@ovyy depth 0pt}}% \wd\@tempboxa=0pt \copy\@tempboxa } % % circle blobs at the corners % \def\@prepframe@o{\@tempdima=\DiskCorner\relax \get@Disk\@tempdima \if@negarg \@yyarg=\@tempcnta \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@ovdx=\@halfwidth \@ovdy=\@ovdx \ifdim \@ovxx>0.25\@dimenA \@negargfalse \fi \ifdim \@ovxx>0.25\@dimenB \@negargfalse \fi \fi \if@negarg \else \@warn@corner \fi } \def\tl@corner@o{% \kern \@ovxx \raise -\@ovyy \hbox{\@circlefnt \char\@tempcnta}} \def\tr@corner@o{% \kern -\@ovxx \raise -\@ovyy \hbox{\@circlefnt \char\@tempcnta}} \def\bl@corner@o{% \kern \@ovxx \raise \@ovyy \hbox{\@circlefnt \char\@tempcnta}} \def\br@corner@o{% \kern -\@ovxx \raise \@ovyy \hbox{\@circlefnt \char\@tempcnta}} %%% %%% frame drawing routine %%% \def\@@makeframe#1#2{\@ovxx=0pt \@ovyy=0pt \@ovdx=0pt \@ovdy=0pt \@yyarg=0 \@negargfalse \csname @prepframe@#2\endcsname \if@negarg \def\@tempa{#1}% \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname bl@corner@#2\endcsname}% \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth \advance\@tempdima by \@dimenA \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname br@corner@#2\endcsname}% \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tl@corner@#2\endcsname}% \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth \advance\@tempdima by \@dimenA \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tr@corner@#2\endcsname}% \fi \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenB \advance\@tempdima by \@wholewidth \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth \advance\@tempdima by \@dimenA \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenB \advance\@tempdima by \@wholewidth \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@wholewidth \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@wholewidth \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% } %%% %%% shadow drawing routines %%% % % draw shadow corner(s) % \def\@HelpshadowA#1#2{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by \@dimenB \advance\@tempdimb by -\@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tr@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname br@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname bl@corner@#2\endcsname}% } \def\@HelpshadowB#1#2{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tl@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname br@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tr@corner@#2\endcsname}% } \def\@HelpshadowC#1#2{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname bl@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by -\@shadowstepX \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tr@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tl@corner@#2\endcsname}% } \def\@HelpshadowD#1#2{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname bl@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowstepX \advance\@tempdima by \@dimenA \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname br@corner@#2\endcsname}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg \csname tl@corner@#2\endcsname}% } % % draw line shadow frame % \def\@helpshadowA#1{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by \@dimenB \advance\@tempdimb by -\@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB \advance\@tempdima by \@shadowsizeY \advance\@tempdima by -\@shadowstepY \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY \advance\@tempdima by -\@ovyy \advance\@tempdima by -\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% } \def\@helpshadowB#1{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY \advance\@tempdima by -\@ovyy \advance\@tempdima by -\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB \advance\@tempdima by \@shadowsizeY \advance\@tempdima by -\@shadowstepY \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% } \def\@helpshadowC#1{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB \advance\@tempdima by \@shadowsizeY \advance\@tempdima by -\@shadowstepY \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdima by -\@shadowstepX \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY \advance\@tempdima by -\@ovyy \advance\@tempdima by -\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% } \def\@helpshadowD#1{% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \hdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowstepX \advance\@tempdima by \@dimenA \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY \advance\@tempdima by -\@ovyy \advance\@tempdima by -\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB \advance\@tempdima by \@shadowsizeY \advance\@tempdima by -\@shadowstepY \advance\@tempdima by -2\@ovyy \advance\@tempdima by -2\@ovdy \vdashline{#1}}% \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \hdashline{#1}}% } % % draw solid shadow frame % \def\@helpShadowA#1{% #1 is ignored here \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \@tempdimb=\@shadowsizeY \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy \advance\@tempdimb by -\@ovdy \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by -2\@ovyy \advance\@tempdimb by -2\@ovdy \@tempdima=\@shadowsizeX \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \vrule height \@tempdimb width \@tempdima}% } \def\@helpShadowB#1{% #1 is ignored here \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \@tempdimb=\@shadowsizeY \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@shadowstepX \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy \advance\@tempdimb by -\@ovdy \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by -2\@ovyy \advance\@tempdimb by -2\@ovdy \@tempdima=\@shadowsizeX \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by \@dimenA \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \vrule height \@tempdimb width \@tempdima}% } \def\@helpShadowC#1{% #1 is ignored here \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \@tempdimb=\@shadowsizeY \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by \@dimenB \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy \advance\@tempdimb by -\@ovdy \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by -2\@ovyy \advance\@tempdimb by -2\@ovdy \@tempdima=\@shadowsizeX \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by \@shadowstepY \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \vrule height \@tempdimb width \@tempdima}% } \def\@helpShadowD#1{% #1 is ignored here \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \advance\@tempdima by -2\@ovxx \advance\@tempdima by -2\@ovdx \@tempdimb=\@shadowsizeY \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX \advance\@tempdima by -\@shadowstepX \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy \advance\@tempdimb by -\@ovdy \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy \advance\@tempdimb by \@ovdy \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by -2\@ovyy \advance\@tempdimb by -2\@ovdy \@tempdima=\@shadowsizeX \vrule height \@tempdimb width \@tempdima}% % \@tempdima=\@dimenC \@tempdimb=\@dimenD \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx \advance\@tempdima by \@ovdx \advance\@tempdimb by -\@shadowsizeY \@@put{\@tempdima}{\@tempdimb}{% \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY \advance\@tempdimb by -\@shadowstepY \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx \advance\@tempdima by -\@ovdx \vrule height \@tempdimb width \@tempdima}% } % % correct shadow position before drawing % \def\@Help@A{\advance\@dimenC \shadowsepX\relax \advance\@dimenD -\shadowsepY\relax} \def\@Help@B{\advance\@dimenC \shadowsepX\relax \advance\@dimenD \shadowsepY\relax} \def\@Help@C{\advance\@dimenC -\shadowsepX\relax \advance\@dimenD \shadowsepY\relax} \def\@Help@D{\advance\@dimenC -\shadowsepX\relax \advance\@dimenD -\shadowsepY\relax} % % correct shadow position after drawing % \def\@help@A{\advance\@dimenC \shadowstepX\relax \advance\@dimenC \@halfwidth \advance\@dimenD -\shadowstepY\relax \advance\@dimenD -\@halfwidth} \def\@help@B{\advance\@dimenC \shadowstepX\relax \advance\@dimenC \@halfwidth \advance\@dimenD \shadowstepY\relax \advance\@dimenD \@halfwidth} \def\@help@C{\advance\@dimenC -\shadowstepX\relax \advance\@dimenC -\@halfwidth \advance\@dimenD \shadowstepY\relax \advance\@dimenD \@halfwidth} \def\@help@D{\advance\@dimenC -\shadowstepX\relax \advance\@dimenC -\@halfwidth \advance\@dimenD -\shadowstepY\relax \advance\@dimenD -\@halfwidth} %% %% shadow types %% % % pure rectangle % \def\@rectshadow@R#1{% \csname @Help@\s@corn\endcsname \@prepdummy \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} \def\@rectshadow@r#1{% \csname @Help@\s@corn\endcsname \@prepdummy \csname @helpShadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} % % parquet shadows % \def\@prepshadow@P{\@tempdima=\RectCorner\relax \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi \@ovxx=\@tempdima \@ovyy=\@tempdima \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth } \def\@rectshadow@P#1{% \csname @Help@\s@corn\endcsname \@prepshadow@P \if@negarg \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{P}% \else \@prepdummy \@warn@corner \fi \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} \def\@rectshadow@p#1{% \csname @Help@\s@corn\endcsname \@prepshadow@P \if@negarg \else \@prepdummy \@warn@corner \fi \csname @helpShadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} \def\@rectshadow@B#1{% \csname @Help@\s@corn\endcsname \@prepshadow@P \if@negarg \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{c}% \else \@prepdummy \@warn@corner \fi \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} \def\@rectshadow@b#1{% \csname @Help@\s@corn\endcsname \@prepshadow@P \if@negarg \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{cc}% \else \@prepdummy \@warn@corner \fi \csname @helpShadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} % % octal shadows % \def\@prepshadow@L{\@negargtrue \@ovxx=0pt \@ovyy=0pt \@ovdx=0pt \@ovdy=0pt \ifnum \@RombX>0 \else \@negargfalse \fi \ifnum \@RombY>0 \else \@negargfalse \fi \if@negarg \ifnum \@RombX>\@RombY \@tempdima=\LineCorner\relax \@tempdimb=\@tempdima \multiply\@tempdimb by \@RombY \divide\@tempdimb by \@RombX \else \@tempdimb=\LineCorner\relax \@tempdima=\@tempdimb \multiply\@tempdima by \@RombX \divide\@tempdima by \@RombY \fi \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi \ifdim \@tempdimb>\@shadowsizeY\relax \@negargfalse \fi \@ovxx=\@tempdima \@ovyy=\@tempdimb \ifnum \@RombX>\@RombY \ifdim \@ovxx<10pt \@negargfalse \fi \else \ifdim \@ovyy<10pt \@negargfalse \fi \fi \if@negarg \@ovxx=\@tempdima \@ovyy=\@tempdimb \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth \fi \fi } \def\@rectshadow@L#1{% \csname @Help@\s@corn\endcsname \@prepshadow@L \if@negarg \csname @Helpshadow\s@corn\endcsname{#1}{L}% \else \@prepdummy \@warn@corner \fi \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} % % oval shadows % \def\@prepshadow@O{\@negargtrue \@tempdima=\RoundCorner\relax \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi \if@negarg \@tempdima=2\@tempdima \@getcirc\@tempdima \fi \if@negarg \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@yyarg=\@tempcnta \@tempdima=0.5\ht\@tempboxa \advance\@tempdima by -0.5\dp\@tempboxa \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima \@ovdy=\@ovdx \fi } \def\@rectshadow@O#1{% \csname @Help@\s@corn\endcsname \@prepshadow@O \if@negarg \csname @Helpshadow\s@corn\endcsname{#1}{O}% \else \@prepdummy \@warn@corner \fi \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} \def\@prepshadow@o{% \@tempdima=\DiskCorner\relax \get@Disk\@tempdima \if@negarg \@yyarg=\@tempcnta \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@ovdx=\@halfwidth \@ovdy=\@ovdx \ifdim 2\@ovxx>\@shadowsizeX\relax \@negargfalse \fi \ifdim 2\@ovxx>\@shadowsizeY\relax \@negargfalse \fi \fi } \def\@rectshadow@o#1{% \csname @Help@\s@corn\endcsname \@prepshadow@o \if@negarg \csname @Helpshadow\s@corn\endcsname{#1}{o}% \else \@prepdummy \@warn@corner \fi \csname @helpShadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} % % astro shadows % \def\@prepshadow@A{\@negargtrue \@tempdima=\RoundCorner\relax \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi \if@negarg \@tempdima=2\@tempdima \@getcirc\@tempdima \fi \if@negarg \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@yyarg=\@tempcnta \@tempdima=0.5\ht\@tempboxa \advance\@tempdima by -0.5\dp\@tempboxa \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima \@ovdy=\@ovdx \fi } \def\@rectshadow@A#1{% \csname @Help@\s@corn\endcsname \@prepshadow@A \if@negarg \csname @Helpshadow\s@corn\endcsname{#1}{A}% \else \@prepdummy \@warn@corner \fi \csname @helpshadow\s@corn\endcsname{#1}% \csname @help@\s@corn\endcsname} % % set frame/corner parameters % \def\framesep#1{\def\framesepH{#1}% \def\framesepXM{1.0}\def\framesepYM{1.0}% \def\framesepXP{1.0}\def\framesepYP{1.0}% \frameexpand{0pt}% \ignorespaces} \def\frameexpand#1{\def\frameexpandX{#1}% \def\frameexpandY{#1}% \ignorespaces} \def\shadowsep#1{\def\shadowsepX{#1}% \def\shadowsepY{#1}% \ignorespaces} \def\shadowsize#1{\def\shadowstepX{#1}\def\shadowstepY{#1}% \def\shadowsizeX{#1}\def\shadowsizeY{#1}% \shadowshrink{1.0}\shadowminsize{0pt}% \ignorespaces} \def\shadowminsize#1{\def\shadowminsizeX{#1}% \def\shadowminsizeY{#1}% \ignorespaces} \def\shadowshrink#1{% \def\shadowshrinkstepX{#1}\def\shadowshrinkstepY{#1}% \def\shadowshrinksizeX{#1}\def\shadowshrinksizeY{#1}% \ignorespaces} \def\shadowcorner#1{% \if A#1\relax \def\s@corn{A}% \else \if a#1\relax \def\s@corn{A}% \else \if B#1\relax \def\s@corn{B}% \else \if b#1\relax \def\s@corn{B}% \else \if C#1\relax \def\s@corn{C}% \else \if c#1\relax \def\s@corn{C}% \else \if D#1\relax \def\s@corn{D}% \else \if d#1\relax \def\s@corn{D}% \else \@warning{Illegal shadow corner (#1)}% \fi\fi\fi\fi\fi\fi\fi\fi \ignorespaces} \def\@setshadowsize{% \let\@shadowstepX=\shadowstepX \let\@shadowstepY=\shadowstepY \let\@shadowsizeX=\shadowsizeX \let\@shadowsizeY=\shadowsizeY } \def\@updateshadowsize{% \advance\@dimenA by \@shadowsizeX \advance\@dimenA by -\@shadowstepX \advance\@dimenB by \@shadowsizeY \advance\@dimenB by -\@shadowstepY \@shrink@size{\@shadowstepX}{\shadowshrinkstepX}% \@shrink@size{\@shadowstepY}{\shadowshrinkstepY}% \@shrink@size{\@shadowsizeX}{\shadowshrinksizeX}% \@shrink@size{\@shadowsizeY}{\shadowshrinksizeY}% \@tempdima=\@shadowstepX \advance\@tempdima by \shadowminsizeX \ifdim \@tempdima<\@dimenA \relax \else \@dimenA=0pt \fi \@tempdima=\@shadowstepY \advance\@tempdima by \shadowminsizeY \ifdim \@tempdima<\@dimenB \relax \else \@dimenB=0pt \fi } \def\@shrink@size#1#2{% \@tempdima=#1\relax \@tempdima=#2\@tempdima\relax \edef #1{\the\@tempdima}% } %%%%%%% !!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% %%%%%%% These are CIRC macro %%%%%%%%%%%%% %%%%%%% !!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% \def\mcircle@scaled{1000} \def\define@circlefnt{% \ifflag@thicklines \font\m@circlefnt=lcirclew10 scaled \mcircle@scaled \else \font\m@circlefnt=lcircle10 scaled \mcircle@scaled \fi \let\@circlefnt=\m@circlefnt \ignorespaces} \def\magcircle#1{% \edef\mcircle@scaled{% \if 0#1 1000 \else \if h#1 1095 \else \if 1#1 1200 \else \if 2#1 1440 \else \if 3#1 1728 \else \if 4#1 2074 \else \if 5#1 2488 \else 1000 \fi\fi\fi\fi\fi\fi\fi }\define@circlefnt \ignorespaces} \def\scaledcircle#1{% \def\mcircle@scaled{#1}% \ifnum #1>0 \def\mcircle@scaled{#1}% \else \def\mcircle@scaled{1000}% \fi \define@circlefnt \ignorespaces} \def\circle@factor{% \ifdim \@tempdima>16.383pt \divide\@tempdima by \mcircle@scaled\relax \multiply\@tempdima by 1000 \else \multiply\@tempdima by 1000 \divide\@tempdima by \mcircle@scaled\relax \fi } %%% %%% These macro are from LaTeX with some corrections %%% % now set thin/thick flag and update circle scaled font % \def\thinlines{\flag@thicklinesfalse\define@circlefnt \let\@linefnt\tenln \let\@circlefnt\tencirc \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth} % now set thin/thick flag and update circle scaled font % \def\thicklines{\flag@thicklinestrue\define@circlefnt \let\@linefnt\tenlnw \let\@circlefnt\tencircw \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth} % calculate \@tempcnta = oval char code, % \@tempboxa = base char, % \@tempdima = diameter. % it is corrected to scale circle font and to indicate % diameter error: \@negarg = false if diameter is too small % \def\@getcirc#1{\@tempdima #1\relax \circle@factor \advance\@tempdima 2\p@ \@tempcnta\@tempdima \@tempdima 4\p@ \divide\@tempcnta\@tempdima \ifnum \@tempcnta >10\relax \@tempcnta 10\relax\fi \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne \@negargtrue \else \@warning{Oval segment is too small}\@negargfalse \fi \multiply\@tempcnta 4\relax \setbox \@tempboxa \hbox{\@circlefnt \char \@tempcnta}% \@tempdima \wd \@tempboxa} % this macro draws blobs and disks, % it is corrected to scale circle font % \def\@circ#1#2{\get@circcode{#1}% \advance\@tempcnta #2\relax \@circlefnt \char\@tempcnta} %%% %%% New circle macros %%% % calculate \@tempcnta = blob/circle char code \def\get@circcode#1{\@tempdima=#1\relax \circle@factor \@negargfalse \advance\@tempdima by 0.5pt \@tempcnta=\@tempdima \@tempdima=1pt \divide\@tempcnta by \@tempdima \ifnum \@tempcnta>15\relax \@tempcnta=15\relax \fi \ifnum \@tempcnta>0\relax \advance\@tempcnta by -1 \@negargtrue \fi } % it calculates \@tempcnta = blob char code % \@tempboxa = base char, % \@tempdima = diameter. \def\get@Disk#1{\get@circcode{#1}% \advance\@tempcnta by 112 \setbox\@tempboxa\hbox{\@circlefnt \char\@tempcnta}% } % it calculates \@tempcnta = circle char code % \@tempboxa = base char, % \@tempdima = diameter. \def\get@Circle#1{\get@circcode{#1}% \advance\@tempcnta by 96 \setbox\@tempboxa\hbox{\@circlefnt \char\@tempcnta}% } % % top right segment: \put(10,10){\trcircle{10}} \def\trcircle#1{\@trcircle{#1\unitlength}} \def\@trcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@trcircle} \def\@@trcircle{\sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdima 0.5\wd \@tempboxa \@tempdimb 0.5\ht \@tempboxa \advance \@tempdimb -0.5\dp \@tempboxa \advance \@tempdima -\@tempdimb \hbox{\kern \@tempdima \lower -\@tempdima \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } % % bottom right segment: \put(10,10){\brcircle{10}} \def\brcircle#1{\@brcircle{#1\unitlength}} \def\@brcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@brcircle} \def\@@brcircle{\advance\@tempcnta 1\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdima 0.5\wd \@tempboxa \@tempdimb 0.5\ht \@tempboxa \advance \@tempdimb -0.5\dp \@tempboxa \advance \@tempdima -\@tempdimb \advance \@tempdimb 0.5\wd \@tempboxa \hbox{\kern \@tempdima \lower \@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } % % bottom left segment: \put(10,10){\blcircle{10}} \def\blcircle#1{\@blcircle{#1\unitlength}} \def\@blcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@blcircle} \def\@@blcircle{\advance\@tempcnta 2\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdima 0.5\wd \@tempboxa \@tempdimb 0.5\ht \@tempboxa \advance \@tempdimb -0.5\dp \@tempboxa \advance \@tempdimb \@tempdima \hbox{\kern -\@tempdimb \lower \@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } % % top left segment: \put(10,10){\tlcircle{10}} \def\tlcircle#1{\@tlcircle{#1\unitlength}} \def\@tlcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@tlcircle} \def\@@tlcircle{\advance\@tempcnta 3\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdima 0.5\wd \@tempboxa \@tempdimb 0.5\ht \@tempboxa \advance \@tempdimb -0.5\dp \@tempboxa \advance \@tempdimb \@tempdima \hbox{\kern -\@tempdimb \lower -\@tempdima \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } % \def\TRcircle#1{\@TRcircle{#1\unitlength}} \def\@TRcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@TRcircle} \def\@@TRcircle{\sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa \hbox{\kern -\@tempdimb \raise -\@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } \def\BRcircle#1{\@BRcircle{#1\unitlength}} \def\@BRcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@BRcircle} \def\@@BRcircle{\advance\@tempcnta 1\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa \hbox{\kern -\@tempdimb \raise -\@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } \def\BLcircle#1{\@BLcircle{#1\unitlength}} \def\@BLcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@BLcircle} \def\@@BLcircle{\advance\@tempcnta 2\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa \hbox{\kern -\@tempdimb \raise -\@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } \def\TLcircle#1{\@TLcircle{#1\unitlength}} \def\@TLcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@TLcircle} \def\@@TLcircle{\advance\@tempcnta 3\relax \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}% \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa \hbox{\kern -\@tempdimb \raise -\@tempdimb \hbox{\usebox\@tempboxa}}% \sbox{\@tempboxa}{}% } %%%%%%% !!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% %%%%%%% These are VECTOR macro %%%%%%%%%%%%% %%%%%%% !!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% % parameters for vector arrows: % \if@negarg shows that the arrow is rotated by 180^{\circ} % \@tempb is the relative position of the point of alignment % \@tempa is the alignment style: % e - arrow % b - backside % m - middle % E - above arrow % B - before backside \def\Vec@e{\def\@tempa{e}\def\@tempb{1.0}\@negargfalse} \def\Vec@E{\def\@tempa{b}\def\@tempb{1.0}\@negargtrue} \def\Vec@b{\def\@tempa{b}\def\@tempb{0.0}\@negargfalse} \def\Vec@B{\def\@tempa{e}\def\@tempb{0.0}\@negargtrue} \def\Vec@m{\def\@tempa{m}\def\@tempb{0.5}\@negargfalse} \def\Vec@M{\def\@tempa{m}\def\@tempb{0.5}\@negargtrue} \def\Vec@x{\def\@tempa{E}\def\@tempb{1.0}\@negargfalse} \def\Vec@X{\def\@tempa{B}\def\@tempb{1.0}\@negargtrue} \def\Vec@z{\def\@tempa{B}\def\@tempb{0.0}\@negargfalse} \def\Vec@Z{\def\@tempa{E}\def\@tempb{0.0}\@negargtrue} \def\VectorStyle[#1]#2#3#4{% \expandafter\edef\csname Vec@#1\endcsname{% \def\@tempa{#2}\def\@tempb{#3}% \if b#4 \@negargtrue \else \@negargfalse \fi }% } \def\@VecA@e{\@tempdimb 0pt} \def\@VecA@b{\@tempdimb 4pt} \def\@VecA@m{\@tempdimb 3pt} \def\@VecA@E{\@tempdimb -2pt} \def\@VecA@B{\@tempdimb 6pt} \def\VectorShiftStyle[#1]#2{% \expandafter\edef\csname @VecA@#1\endcsname{\@tempdimb #2\relax}% } \def\Vector{\@ifnextchar[{\@Vector}{\@Vector[e]}} \def\@Vector[#1](#2,#3)#4{% \@put{0pt}{0pt}{\line(#2,#3){#4}}% \@tfor\@tempa:=#1\do{% \def\@tempb{x} \csname Vec@\@tempa\endcsname \if\@tempb x\relax \else % % \@tempdima is the length factor, \ifnum #2=\z@ \@tempdima #4\unitlength \else \ifnum #2<\z@ \@tempdima -#4\unitlength \else \@tempdima #4\unitlength \fi \divide\@tempdima#2 \fi % % \@tempb contains fraction (0 <= \@tempb <= 1), \@tempdima \@tempb\@tempdima\relax % % \@tempa is the alignment type -- set \@tempdimb = shift \@tempdimb 0pt\relax \csname @VecA@\@tempa\endcsname % % assign square root value to \@tempa \@VecSqrt{#2}{#3}% % % correct alignment shift \@tempdimb \@tempa\@tempdimb\relax \if@negarg \advance\@tempdima -\@tempdimb \else \advance\@tempdima \@tempdimb \fi % % calculate final value \@tempdimb \@tempdima\relax \@tempdima #2\@tempdima\relax \@tempdimb #3\@tempdimb\relax % % get character \if@negarg \@xarg -#2\relax \@yarg -#3\relax \else \@xarg #2\relax \@yarg #3\relax \fi \setbox\@linechar\hbox{\@linefnt \ifnum \@xarg=0 \ifnum \@yarg>0 \char'66\relax \else \char'77\relax \fi \else \ifnum \@xarg<0 \@getlarrow(-\@xarg,-\@yarg)% \else \@getrarrow(\@xarg,\@yarg)% \fi\fi}% % % this is \put(x,y) \ifnum \@xarg>0 \advance\@tempdima -\wd\@linechar \fi \ifnum \@yarg>0 \advance\@tempdimb -\ht\@linechar \fi \@@put{\@tempdima}{\@tempdimb}{\box\@linechar}% \fi% }% enddo \@tfor } % assign square root value to \@tempa \def\@VecSqrt#1#2{\@xarg #1\relax \@yarg #2\relax \ifnum\@xarg<0 \@xarg -\@xarg \fi \ifnum\@yarg<0 \@yarg -\@yarg \fi \ifnum\@xarg<\@yarg \@yyarg \@xarg \relax \@xarg \@yarg \relax \@yarg \@yyarg \relax \fi \edef\@tempa{% \ifcase \@xarg 0.0 \or \ifcase \@yarg 1.0 \else 0.70710678 \fi \or \ifcase \@yarg 1.0 \or 0.44721360 \else 0.35355339 \fi \or \ifcase \@yarg 1.0 \or 0.31622777 \or 0.27735010 \else 0.23570226 \fi \or \ifcase \@yarg 1.0 \or 0.24253563 \or 0.22360680 \or 0.20000000 \else 0.17677670 \fi \or \ifcase \@yarg 1.0 \or 0.19611614 \or 0.18569534 \or 0.17149859 \or 0.15617376 \else 0.14142136 \fi \or \ifcase \@yarg 1.0 \or 0.16439899 \or 0.15811388 \or 0.14907120 \or 0.13867505 \or 0.12803688 \else 0.11785113 \fi \else 0.0 \fi}% } %%% %%% these are LaTeX macro which are corrected %%% to suite our purposes %%% \def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi \ifnum\@tempcnta<7\relax %% corr: 7 instead of 5 \@linelen #3\unitlength \ifnum\@xarg =\z@ \@vvector \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi \fi \else\@badlinearg\fi} \def\@svector{% %% corr: \@sline is moved from this place \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi \ifnum\@tempcnta <7 %% corr: 7 instead of 5 \@sline %% corr: \@sline is moved to this place %% original text was: % \hskip -\wd\@linechar % \@upordown\@clnht \hbox{\@linefnt \if@negarg % \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}% %% corrected text: \if@negarg \hskip -\wd\@linechar \fi \ifnum \@yarg>\z@ \advance\@clnht \ht\@linechar \fi \setbox\@linechar\hbox{\@linefnt \if@negarg \@getlarrow(\@xarg,\@yyarg)% \else \@getrarrow(\@xarg,\@yyarg)% \fi}% \if@negarg \else \hskip -\wd\@linechar \fi \ifnum \@yarg>\z@ \advance\@clnht -\ht\@linechar \fi \@upordown\@clnht \copy\@linechar \else\@badlinearg\fi} %% calculate (\@tempcnta,\@tempcntb) as correct vector slopes \def\@corrgetarrow#1#2{\@tempcnta #1\relax \@tempcntb #2\relax \ifnum #2<\z@ \@tempcntb -\@tempcntb \fi \ifcase \@tempcnta\relax % no action for x=0 \or \ifnum \@tempcntb>4 \@tempcntb 4 \fi % action for x=1 \or \ifnum \@tempcntb=5 \@tempcnta 1 \@tempcntb 3 \fi % action for x=2 \or \ifnum \@tempcntb=5 \@tempcnta 2 \@tempcntb 3 \fi % action for x=3 \or \ifnum \@tempcntb=5 \@tempcnta 3 \@tempcntb 4 \fi % action for x=4 \or \ifcase \@tempcntb\relax % 5,0 \or \@tempcnta 4% 5,1 \or \@tempcnta 3 \@tempcntb 1 % 5,2 \or \@tempcnta 3 \@tempcntb 2 % 5,3 \or \@tempcnta 4 \@tempcntb 3 % 5,4 \or \@tempcnta 1 \@tempcntb 1 % 5,5 \or \@tempcnta 3 \@tempcntb 4 % 5,6 \fi % action for x=5 \or \ifnum \@tempcntb=1 \@tempcnta 4 \fi % 6,1 \ifnum \@tempcntb=5 \@tempcnta 4 \@tempcntb 3 \fi % 6,5 % action for x=6 \fi \ifnum #2<\z@ \@tempcntb -\@tempcntb \fi } \def\@getlarrow(#1,#2){%% this macro is corrected \@corrgetarrow{#1}{#2}% \ifnum \@tempcntb=\z@ \@tempcnta'33 \else \multiply\@tempcnta \sixt@@n \advance\@tempcnta -9 \multiply\@tempcntb \tw@ \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb \else \advance\@tempcnta -\@tempcntb \advance\@tempcnta 64 \fi \fi \char\@tempcnta} \def\@getrarrow(#1,#2){%% this macro is corrected \@corrgetarrow{#1}{#2}% \ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi \ifcase \@tempcntb \@tempcnta'55 \or \ifnum \@tempcnta<\thr@@ \multiply\@tempcnta 24 \advance\@tempcnta -6 \else \ifnum \@tempcnta=\thr@@ \@tempcnta 49 \else\@tempcnta 58 \fi \fi \or \ifnum \@tempcnta<\thr@@ \multiply\@tempcnta 24 \advance\@tempcnta -\thr@@ \else \@tempcnta 51 \fi \or \multiply\@tempcnta \sixt@@n \advance\@tempcnta -\tw@ \else \multiply\@tempcnta \sixt@@n \advance\@tempcnta 7 \fi \ifnum #2<\z@ \advance\@tempcnta 64 \fi \char\@tempcnta} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % The command \pictureunit[percent]{xsize} % selects the value of \unitlength so that the picture % which is xsize units in width occupies percent % width of the paper. By default percent=100 which % correspond to 90% of the total width of the paper. % \pictureunit calculates \unitlength corectly also for % twocolumn mode and inside itemize/enumerate/etc. % % Example: % \pictureunit{75} % \begin{picture}(120,80) % ..... % % Default percentage value can be changed by % \renewcommand{\defaultpercent}{50} % % Environment mcpicture combines \pictureunit and % \begin{picture}-\end{picture}. % % \begin{Picture}(120,80)(-60,-40) % ....... % \end{Picture} % % Optional parameter can contain percent width value % which is used instead of \defaultpercent: % % \begin{Picture}[50](120,80)(-60,-40) % ....... % \end{Picture} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\pictureunit{\@ifnextchar[{\mc@scaleunit}{\mc@scaleunit[\defaultpercent]}} \def\mc@scaleunit[#1]#2{\@tempdima=0.009\hsize \@tempdima=#1\@tempdima \@tempdimb=#2pt \@divide{\@tempdima}{\@tempdimb}% {\@tempdima}{\unitlength}% \unitlength=\@tempdima} \newenvironment{Picture}{}{} \def\Picture{\@ifnextchar[{\mc@picture}{\mc@picture[\defaultpercent]}} \def\mc@picture[#1](#2,#3){% \mc@scaleunit[#1]{#2}% \picture(#2,#3)} \def\endPicture{\endpicture} % ********************************************************************* % *** The following macros are taken from PiCTeX with minor changes *** % ********************************************************************* % DIVISION (Does long division of dimension registers) % ** \@divide{DIVIDEND}{DIVISOR}{RESULT}{default} % ** \@divide DIVIDEND [by] DIVISOR [to get] ANSWER % ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the % ** quotient in the dimension register ANSWER. Values are understood to % ** be in points. E.g. 12.5pt/1.4pt=8.92857pt. % ** Quotient is accurate to 1/65536pt=2**[-16]pt % ** |DIVISOR| should be < 2048pt (about 28 inches). \def\@divide#1#2#3#4{% \ifdim #2=\z@ #3=#4\relax \else \@dimenB=#1% ** dimB holds current remainder (r) \@dimenC=#2% ** dimC holds divisor (d) \@dimenD=\@dimenB% ** dimD holds quotient q=r/d for this \divide \@dimenD \@dimenC% ** step, in units of scaled pts \@dimenA=\@dimenD% ** dimA eventually holds answer (a) \multiply\@dimenD \@dimenC% ** r <-- r - dq \advance\@dimenB -\@dimenD% ** First step complete. Have integer part % ** of a, and corresponding remainder. \@dimenD=\@dimenC% ** Temporarily use dimD to hold |d| \ifdim\@dimenD<\z@ \@dimenD=-\@dimenD \fi \ifdim\@dimenD<64pt% ** Branch on the magnitude of |d| \@divstep[256]\@divstep[256]% \else % ** The following code handles divisors d with % ** (1) .88in = 64pt <= d < 256pt = 3.54in % ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in % ** Anything bigger than that may result in an overflow condition. \ifdim\@dimenD<256pt \@divstep[64]\@divstep[32]\@divstep[32]% \else \@divstep[8]\@divstep[8]\@divstep[8]\@divstep[8]\@divstep[8]% \@dimenA=2\@dimenA \fi % ** For our purposes, we should never even see case (2). \fi #3=\@dimenA \fi\ignorespaces} % ** The following macro does the real long division work. \def\@divstep[#1]{% ** #1 = "B" \@dimenB=#1\@dimenB% ** r <-- B*r \@dimenD=\@dimenB% ** dimD holds quotient q=r/d for this \divide \@dimenD by \@dimenC% ** step, in units of scaled pts \@dimenA=#1\@dimenA% ** a <-- B*a + q \advance\@dimenA by \@dimenD% \multiply\@dimenD by \@dimenC% ** r <-- r - dq \advance\@dimenB by -\@dimenD} % ************************************************ % ******** End of PiCTeX division macros ********* % ************************************************ %%%%%%% !!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% %%%%%%% Default style data %%%%%%%%%%%%% %%%%%%% !!!!!!!!!!!!!!!!!! %%%%%%%%%%%%% \def\defaultpercent{100} \thinlines \def\DiskCorner{5pt} \def\RoundCorner{5pt} \def\LineCorner{10pt} \def\RectCorner{5pt} \framesep{4pt} \shadowsep{1pt} \shadowsize{5pt} \shadowshrink{1} \shadowcorner{A} \rombboxstyle(2,1,2pt) % % save updated LaTeX macro % % % switch two modes % \let\grf@thinlines=\thinlines \let\grf@thicklines=\thicklines \let\grf@@getcirc=\@getcirc \let\grf@@circ=\@circ \let\grf@vector=\vector \let\grf@@svector=\@svector \let\grf@@getlarrow=\@getlarrow \let\grf@@gerlarrow=\@getrarrow \def\setlatexmacro{% \let\thinlines=\ltx@thinlines \let\thicklines=\ltx@thicklines \let\@getcirc=\ltx@@getcirc \let\@circ=\ltx@@circ \let\vector=\ltx@vector \let\@svector=\ltx@@svector \let\@getlarrow=\ltx@@getlarrow \let\@gerlarrow=\ltx@@getrarrow \ignorespaces } \def\settestmacro{% \let\thinlines=\grf@thinlines \let\thicklines=\grf@thicklines \let\@getcirc=\grf@@getcirc \let\@circ=\grf@@circ \let\vector=\grf@vector \let\@svector=\grf@@svector \let\@getlarrow=\grf@@getlarrow \let\@gerlarrow=\grf@@getrarrow \ignorespaces } % \catcode`@=\oldatcatcode %