% \iffalse meta-comment % % Copyright (C) 1993-2024 % The LaTeX Project and any individual authors listed elsewhere % in this file. % % This file is part of the LaTeX base system. % ------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % https://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2008 or later. % % This file has the LPPL maintenance status "maintained". % % The list of all files belonging to the LaTeX base distribution is % given in the file `manifest.txt'. See also `legal.txt' for additional % information. % % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % % \fi % % \iffalse %%% From File: ltpictur.dtx %<*driver> % \fi \ProvidesFile{ltpictur.dtx} [2021/04/20 v1.2b LaTeX Kernel (Picture Mode)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltpictur.dtx} \title{\filename} \date{\filedate} \author{% Johannes Braams\and David Carlisle\and Alan Jeffrey\and Leslie Lamport\and Frank Mittelbach\and Chris Rowley\and Rainer Sch\"opf} \begin{document} \MaintainedByLaTeXTeam{latex} \maketitle \DocInput{\filename} \end{document} % % \fi % % % \changes{v1.0g}{1995/05/07}{Use \cs{hb@xt@}} % \changes{v1.1a}{1995/05/19}{Support autoloading feature} % \changes{v1.1b}{1995/06/13}{Use \cs{ProvidesFile} in autoload} % \changes{v1.1d}{1995/07/12}{allow 2e commands in 209 mode. latex/1737} % \changes{v1.1e}{1995/10/03}{New autoload code} % \changes{v1.1h}{1999/04/15}{Replaced octal numbers, CAR} % \changes{v1.1k}{2015/02/21}{Removed autoload code} % % \section{Picture Mode} % Picture mode commands. In addition to the commands available in % \LaTeX2.09, This section adds the new |\qbezier| command for % drawing curves. % % \DescribeMacro{\qbezier} % |\qbezier|\oarg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY} % plots a quadratic Bezier curve from \parg{AX,AY} to \parg{CX,CY}, % with \parg{BX,BY} as the third Bezier point, using $N+1$ points % equally spaced parametrically. % If $N = 0$ (the default value), then a sufficient number of points % are used to draw a connected curve--except that at most % $|\qbeziermax| + 1$ points are drawn. A ``point'' is a square of % side |\@wholewidth|. % % \DescribeMacro{\bezier} % In addition, to be compatible with the old |bezier| package, a % variant of this command, |\bezier|, is defined, in which the first % argument is not optional. % % \MaybeStop{} % % % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx} % \changes{v0.1a}{1994/03/07}{Long lines wrapped to 72 columns} % \changes{v0.1b}{1994/04/24} % {Removed surplus spaces after \cs{hbox to } in several cases} % \changes{v0.1d}{1994/05/13} % {Removed surplus braces from \cs{@if..} constructions} % \changes{v0.1e}{1994/05/22}{Use new warning cmds} % \changes{v1.0f}{1994/11/17} % {\cs{@tempa} to \cs{reserved@a}} % \changes{v1.1m}{2019/08/27}{Remove several unnecessary \cs{gdef} definitions} % \changes{v1.1m}{2019/08/27}{Make various commands robust} % % \begin{oldcomments} % % \unitlength = value of dimension argument % \@wholewidth = current line width % \@halfwidth = half of current line width % \@linefnt = font for drawing lines % \@circlefnt = font for drawing circles % % \linethickness{DIM} : Sets the width of horizontal and vertical lines % in a picture to DIM. Does not change width of slanted lines % or circles. Width of all lines reset by \thinlines and % \thicklines % % \picture(XSIZE,YSIZE)(XORG,YORG) % BEGIN % \@picht :=L YSIZE * \unitlength % box \@picbox := % \hb@xt@ XSIZE * \unitlength % {\hskip -XORG * \unitlength % \lower YORG * \unitlength % \hbox{ % \ignorespaces %% added 13 June 89 % END % % \endpicture == % BEGIN % } \hss } % height of \@picbox := \@picht % depth of \@picbox := 0 % \mbox{\box\@picbox} %% change 26 Aug 91 % END % % \put(X, Y){OBJ} == % BEGIN % \@killglue % \raise Y * \unitlength \hb@xt@ 0pt { \hskip X * \unitlength % OBJ \hss } % \ignorespaces % END % % \multiput(X,Y)(DELX,DELY){N}{OBJ} == % BEGIN % \@killglue % \@multicnt := N % \@xdim := X * \unitlength % \@ydim := Y * \unitlength % while \@multicnt > 0 % do \raise \@ydim \hb@xt@ 0pt { \hskip \@xdim % OBJ \hss } % \@multicnt := \@multicnt - 1 % \@xdim := \@xdim + DELX * \unitlength % \@ydim := \@ydim + DELY * \unitlength % od % \ignorespaces % END % % \shortstack[POS]{TEXT} : Makes a \vbox containing TEXT stacked as % a one-column array, positioned l, r or c as indicated by POS. % % \end{oldcomments} % % The `2ekernel' code ensures that a |\usepackage{autopict}| is % essentially ignored if a `full' format is being used that has % picture mode already in the format. % \begin{macrocode} %<2ekernel>\expandafter\let\csname ver@autopict.sty\endcsname\fmtversion % \end{macrocode} % % \begin{macro}{\@wholewidth} % \begin{macro}{\@halfwidth} % \begin{macrocode} %<*2ekernel> \newdimen\@wholewidth \newdimen\@halfwidth % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\unitlength} % \begin{macrocode} \newdimen\unitlength \unitlength =1pt % \end{macrocode} % \end{macro} % % \begin{macro}{\@picbox} % \begin{macro}{\@picht} % \begin{macrocode} \newbox\@picbox \newdimen\@picht % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@defaultunitsset} % \changes{v1.2a}{2020/08/15}{Macro added} % Set a length register, |#1|, % accepting number or an etex length expression, |#2|, % with default unit, |#3|. % % The register name in |#1| can be prefixed by |\advance| so that % the register is incremented by the supplied value. % % |\@defaultunitsset{\advance\@vxx}{\textwidth-15pt}\unitlength| % % |#3| can be a literal unit such as |cm| or a length register such % as |\unitlength|. % % This is used in all |picture| commands that take picture coordinates. % So |\put(2,2)| as previously but now |\put(\textwidth-5cm,0.4\texteight)| % Note that you can only use expressions with lengths, |\put(1+2,0)| is not % supported. % % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@defaultunitsset}{default units}% \def\@defaultunitsset#1#2#3{% \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@defaultunitsset}{default units}% %\let\@defaultunitsset\@undefined %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{environment}{picture} % \begin{macro}{\picture} % \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces before (} % |#1| should be white space. % \begin{macro}{\pictur@} % \changes{v1.0h}{1995/05/12}{Macro added for latex/1355} % |#1| should be a |(| (eating any white space before the bracket), % \begin{macrocode} \long\def\picture#1{\pictur@#1} \def\pictur@(#1){% \@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@picture} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@picture}{default units}% \def\@picture(#1,#2)(#3,#4){% \@defaultunitsset\@picht{#2}\unitlength \@defaultunitsset\@tempdimc{#1}\unitlength \setbox\@picbox\hb@xt@\@tempdimc\bgroup \@defaultunitsset\@tempdimc{#3}\unitlength \hskip -\@tempdimc \@defaultunitsset\@tempdimc{#4}\unitlength \lower\@tempdimc\hbox\bgroup \ignorespaces} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@picture}{default units}% %\def\@picture(#1,#2)(#3,#4){% % \@picht#2\unitlength % \setbox\@picbox\hb@xt@#1\unitlength\bgroup % \hskip -#3\unitlength % \lower #4\unitlength\hbox\bgroup % \ignorespaces} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\endpicture} % \changes{LaTeX2.09}{1991/08/26} % {(RmS \& FMi) extra boxing level around \cs{@picbox} % to guard against unboxing in math mode % (proposed by John Hobby)} % % \begin{macrocode} \def\endpicture{% \egroup\hss\egroup \ht\@picbox\@picht\dp\@picbox\z@ \mbox{\box\@picbox}} % \end{macrocode} % \end{macro} % \end{environment} % % In the definitions of |\put| and |\multiput|, |\hskip| was replaced by % |\kern| just in case arg |#3| = ``plus''. (Bug detected by Don Knuth. % changed 20 Jul 87). % % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\put}{default units}% %\expandafter\let\csname put \endcsname\@undefind \long\def\put(#1,#2)#3{% \@killglue \@defaultunitsset\@tempdimc{#2}\unitlength \raise\@tempdimc \hb@xt@\z@{% \@defaultunitsset\@tempdimc{#1}\unitlength \kern\@tempdimc #3\hss}% \ignorespaces} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\put}{default units}% %\expandafter\let\csname put \endcsname\@undefind %\long\def\put(#1,#2)#3{% % \@killglue\raise#2\unitlength % \hb@xt@\z@{\kern#1\unitlength #3\hss}% % \ignorespaces} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % % % \begin{macro}{\multiput} % \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces between )(} % |#3| had better be a |(|. % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\multiput}{default units}% %\expandafter\let\csname multiput \endcsname\@undefind \def\multiput(#1,#2)#3{% \@defaultunitsset\@xdim{#1}\unitlength \@defaultunitsset\@ydim{#2}\unitlength \@multiput(} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\multiput}{default units}% %\expandafter\let\csname multiput \endcsname\@undefind %\def\multiput(#1,#2)#3{% % \@xdim #1\unitlength % \@ydim #2\unitlength % \@multiput(} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@multiput} % \changes{v0.1c}{1994/04/28}{(DPC) Macro added} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@multiput}{default units}% \long\def\@multiput(#1,#2)#3#4{% \@killglue\@multicnt #3\relax \@whilenum \@multicnt >\z@\do {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% \advance\@multicnt\m@ne \@defaultunitsset{\advance\@xdim}{#1}\unitlength \@defaultunitsset{\advance\@ydim}{#2}\unitlength}% \ignorespaces} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@multiput}{default units}% %\long\def\@multiput(#1,#2)#3#4{% % \@killglue\@multicnt #3\relax % \@whilenum \@multicnt >\z@\do % {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% % \advance\@multicnt\m@ne % \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}% % \ignorespaces} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@killglue} % \begin{macrocode} \def\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}} % \end{macrocode} % \end{macro} % % \begin{macro}{\thinlines} % \begin{macro}{\thicklines} % \begin{macrocode} \DeclareRobustCommand\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth} \DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\linethickness} % \changes{v1.1n}{2020/02/14}{Suppress spaces following the declaration (gh/274)} % \changes{v1.1p}{2020/07/27}{Don't make the command \cs{long} (gh/354)} % \begin{macrocode} \DeclareRobustCommand*\linethickness[1] {\@wholewidth #1\relax \@halfwidth .5\@wholewidth \ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\ishortstack} % \begin{macrocode} \def\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@ishortstack} % \begin{macrocode} \def\@shortstack[#1]{% \leavevmode \vbox\bgroup \baselineskip-\p@\lineskip 3\p@ \let\mb@l\hss\let\mb@r\hss \expandafter\let\csname mb@#1\endcsname\relax \let\\\@stackcr \@ishortstack} % \end{macrocode} % \end{macro} % % % \changes{LaTeX2.09}{1991/08/14} % {(RmS) inserted extra braces around entry for NFSS} % \changes{LaTeX2.09}{1993/11/03} % {(RmS) changed \cs{halign} to \cs{ialign} to initialize % \cs{tabskip} and \cs{everycr}} % % \begin{macro}{\@ishortstack} % \begin{macrocode} \def\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup} % \end{macrocode} % \end{macro} % % \begin{macro}{\@stackcr} % \changes{v1.2b}{2021/04/20}{Use \cs{protected} for \cs{\bslash} variant (gh/548)} % \begin{macro}{\@ixstackcr} % \begin{macrocode} \protected\def\@stackcr{\@ifstar\@ixstackcr\@ixstackcr} \def\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@istackcr} % \changes{v1.1o}{2020/04/21}{Support calc syntax (gh/152)} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@istackcr}{\shortstack calc support}% \def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@istackcr}{\shortstack calc support}% % %\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{oldcomments} % \line(X,Y){LEN} == % BEGIN % \@xarg := X % \@yarg := Y % \@linelen := LEN * \unitlength % if \@xarg = 0 % then \@vline % else if \@yarg = 0 % then \@hline % else \@sline % if % if % END % % \@sline == % BEGIN % if \@xarg < 0 % then @negarg := T % \@xarg := -\@xarg % \@yyarg := -\@yarg % else @negarg := F % \@yyarg := \@yarg % fi % \@tempcnta := |\@yyarg| % if \@tempcnta > 6 % then error: 'LATEX ERROR: Illegal \line or \vector argument.' % \@tempcnta := 0 % fi % \box\@linechar := \hbox{\@linefnt \@getlinechar(\@xarg,\@yyarg) } % if \@yarg > 0 then \@upordown = \raise % \@clnht := 0 % else \@upordown = \lower % \@clnht := height of \box\@linechar % fi % \@clnwd := width of \box\@linechar % if @negarg % then \hskip - width of \box\@linechar % \reserved@a == \hskip - 2* width of box \@linechar % else \reserved@a == \relax % fi % %% Put out integral number of line segments % while \@clnwd < \@linelen % do \@upordown \@clnht \copy\@linechar % \reserved@a % \@clnht := \@clnht + ht of \box\@linechar % \@clnwd := \@clnwd + width of \box\@linechar % od % % %% Put out last segment % \@clnht := \@clnht - height of \box\@linechar % \@clnwd := \@clnwd - width of \box\@linechar % \@tempdima := \@linelen - \@clnwd % \@tempdimb := \@tempdima - width of \box\@linechar % if @negarg then \hskip -\@tempdimb % else \hskip \@tempdimb % fi % \@tempdima := 1000 * \@tempdima % \@tempcnta := \@tempdima / width of \box\@linechar % \@tempdima := (\@tempcnta * ht of \box\@linechar)/1000 % \@clnht := \@clnht + \@tempdima % if \@linelen < width of box\@linechar % then \hskip width of box\@linechar % else \hbox{\@upordown \@clnht \copy\@linechar} % fi % END % % \@hline == % BEGIN % if \@xarg < 0 then \hskip -\@linelen \fi % \vrule height \@halfwidth depth \@halfwidth width \@linelen % if \@xarg < 0 then \hskip -\@linelen \fi % END % % \@vline == if \@yarg < 0 \@downline else \@upline fi % % % \@getlinechar(X,Y) == % BEGIN % \@tempcnta := 8*X - 9 % if Y > 0 % then \@tempcnta := \@tempcnta + Y % else \@tempcnta := \@tempcnta - Y + 64 % fi % \char\@tempcnta % END % % \vector(X,Y){LEN} == % BEGIN % \@xarg := X % \@yarg := Y % \@linelen := LEN * \unitlength % if \@xarg = 0 % then \@vvector % else if \@yarg = 0 % then \@hvector % else \@svector % if % if % END % % \@hvector == % BEGIN % \@hline % {\@linefnt if \@xarg < 0 then \@getlarrow(1,0) % else \@getrarrow(1,0) % fi} % END % % \@vvector == if \@yarg < 0 \@downvector else \@upvector fi % % \@svector == % BEGIN % \@sline % \@tempcnta := |\@yarg| % if \@tempcnta < 5 % then \hskip - width of \box\@linechar % \@upordown \@clnht \hbox % {\@linefnt % if @negarg then \@getlarrow(\@xarg,\@yyarg) % else \@getrarrow(\@xarg,\@yyarg) % fi } % else error: 'LATEX ERROR: Illegal \line or \vector argument.' % fi % END % % \@getlarrow(X,Y) == % BEGIN % if Y = 0 % then \@tempcnta := '33 % else \@tempcnta := 16 * X - 9 % \@tempcntb := 2 * Y % if \@tempcntb > 0 % then \@tempcnta := \@tempcnta + \@tempcntb % else \@tempcnta := \@tempcnta - \@tempcntb + 64 % fi % fi % \char\@tempcnta % END % % \@getrarrow(X,Y) == % BEGIN % \@tempcntb := |Y| % case of \@tempcntb % 0 : \@tempcnta := '55 % 1 : if X < 3 % then \@tempcnta := 24*X - 6 % else if X = 3 % then \@tempcnta := 49 % else \@tempcnta := 58 fi % fi % 2 : if X < 3 % then \@tempcnta := 24*X - 3 % else \@tempcnta := 51 % X must = 3 % fi % 3 : \@tempcnta := 16*X - 2 % 4 : \@tempcnta := 16*X + 7 % endcase % if Y < 0 % then \@tempcnta := \@tempcnta + 64 % fi % \char\@tempcnta % END % \end{oldcomments} % % \begin{macro}{\if@negarg} % \begin{macrocode} \newif\if@negarg % \end{macrocode} % \end{macro} % % \begin{macro}{\line} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\line}{default units}% %\expandafter\let\csname line \endcsname\@undefind \def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax \@defaultunitsset\@linelen{#3}\unitlength \ifdim\@linelen<\z@\@badlinearg\else \ifnum\@xarg =\z@ \@vline \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi \fi \fi} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\line}{default units}% %\expandafter\let\csname line \endcsname\@undefind %\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax % \@linelen #3\unitlength % \ifdim\@linelen<\z@\@badlinearg\else % \ifnum\@xarg =\z@ \@vline % \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi % \fi % \fi} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@sline} % \begin{macrocode} \def\@sline{% \ifnum\@xarg<\z@ \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg \else \@negargfalse \@yyarg \@yarg \fi \ifnum \@yyarg >\z@ \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi \ifnum\@tempcnta>6 \@badlinearg\@tempcnta\z@ \fi \ifnum\@xarg>6 \@badlinearg\@xarg \@ne \fi \setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}% % \end{macrocode} % If we have something like |\line(5,5){30}| the |\@linechar| will % not contain a char and later on we will end in an infinite loop. % So we check the width of the box and put in something as an % emergency fix if necessary. % \changes{v1.1k}{2003/08/27}{check for \cs{@linechar} being empty pr/3570} % \begin{macrocode} \ifdim\wd\@linechar=\z@ \setbox\@linechar\hbox{.}% \@badlinearg \fi \ifnum \@yarg >\z@ \let\@upordown\raise \@clnht\z@ \else\let\@upordown\lower \@clnht \ht\@linechar\fi \@clnwd \wd\@linechar \if@negarg \hskip -\wd\@linechar \def\reserved@a{\hskip -2\wd\@linechar}% \else \let\reserved@a\relax \fi \@whiledim \@clnwd <\@linelen \do {\@upordown\@clnht\copy\@linechar \reserved@a \advance\@clnht \ht\@linechar \advance\@clnwd \wd\@linechar}% \advance\@clnht -\ht\@linechar \advance\@clnwd -\wd\@linechar \@tempdima\@linelen\advance\@tempdima -\@clnwd \@tempdimb\@tempdima\advance\@tempdimb -\wd\@linechar \if@negarg \hskip -\@tempdimb \else \hskip \@tempdimb \fi \multiply\@tempdima \@m \@tempcnta \@tempdima \@tempdima \wd\@linechar \divide\@tempcnta \@tempdima \@tempdima \ht\@linechar \multiply\@tempdima \@tempcnta \divide\@tempdima \@m \advance\@clnht \@tempdima \ifdim \@linelen <\wd\@linechar \hskip \wd\@linechar % \end{macrocode} % Warn if line gets so short that it can't be printed. % \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524} % But don't warn if it is exactly zero since that was probably % deliberate (e.g., to get a vector head only). % \changes{v1.1j}{2001/06/04}{Don't warn for exactly zero pr/3318} % \begin{macrocode} \ifdim \@linelen = \z@ \else \@picture@warn \fi \else\@upordown\@clnht\copy\@linechar\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@hline} % \begin{macrocode} \def\@hline{\ifnum \@xarg <\z@ \hskip -\@linelen \fi \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen \ifnum \@xarg <\z@ \hskip -\@linelen \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@getlinechar} % \begin{macrocode} \def\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8% \advance\@tempcnta -9\ifnum #2>\z@ \advance\@tempcnta #2\relax\else \advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi \char\@tempcnta} % \end{macrocode} % \end{macro} % % \begin{macro}{\vector} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\vector}{default units}% %\expandafter\let\csname vector \endcsname\@undefind \def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi \ifnum\@tempcnta<5\relax \@defaultunitsset\@linelen{#3}\unitlength \ifdim\@linelen<\z@\@badlinearg\else \ifnum\@xarg =\z@ \@vvector \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi \fi \fi \else\@badlinearg\fi} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\vector}{default units}% %\expandafter\let\csname vector \endcsname\@undefind %\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax % \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi % \ifnum\@tempcnta<5\relax % \@linelen #3\unitlength % \ifdim\@linelen<\z@\@badlinearg\else % \ifnum\@xarg =\z@ \@vvector % \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi % \fi % \fi % \else\@badlinearg\fi} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@hvector} % \begin{macrocode} \def\@hvector{\@hline\hb@xt@\z@{\@linefnt \ifnum \@xarg <\z@ \@getlarrow(1,0)\hss\else \hss\@getrarrow(1,0)\fi}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@vvector} % \begin{macrocode} \def\@vvector{\ifnum \@yarg <\z@ \@downvector \else \@upvector \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@svector} % \begin{macrocode} \def\@svector{\@sline \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi \ifnum\@tempcnta <5% \hskip -\wd\@linechar \@upordown\@clnht \hbox{\@linefnt \if@negarg \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}% \else\@badlinearg\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@getlarrow} % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} % \begin{macrocode} \def\@getlarrow(#1,#2){\ifnum #2=\z@ \@tempcnta 27 % '33 \else \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n \advance\@tempcnta -9 \@tempcntb #2\relax\multiply\@tempcntb \tw@ \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb \else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64 \fi\fi\char\@tempcnta} % \end{macrocode} % \end{macro} % % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} % \begin{macro}{\@getrarrow} % \begin{macrocode} \def\@getrarrow(#1,#2){\@tempcntb #2\relax \ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi \ifcase \@tempcntb\relax \@tempcnta 45 % '55 \or \ifnum #1<\thr@@ \@tempcnta #1\relax\multiply\@tempcnta 24\advance\@tempcnta -6 \else \ifnum #1=\thr@@ \@tempcnta 49 \else\@tempcnta 58 \fi\fi\or \ifnum #1<\thr@@ \@tempcnta=#1\relax\multiply\@tempcnta 24\advance\@tempcnta -\thr@@ \else \@tempcnta 51 \fi\or \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n \advance\@tempcnta -\tw@ \else \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n \advance\@tempcnta 7 \fi\ifnum #2<\z@ \advance\@tempcnta 64 \fi \char\@tempcnta} % \end{macrocode} % \end{macro} % % \begin{macro}{\@vline} % \begin{macrocode} \def\@vline{\ifnum \@yarg <\z@ \@downline \else \@upline\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@upline} % \begin{macrocode} \def\@upline{% \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth \@height \@linelen \@depth \z@\hss}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@downline} % \begin{macrocode} \def\@downline{% \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth \@height \z@ \@depth \@linelen \hss}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@upvector} % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} % \changes{v1.1i}{2000/01/15}{Removed space at end-of-line, CAR} % \begin{macrocode} \def\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char 54}% '66 \raise \@linelen \hb@xt@\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}} % \end{macrocode} % \end{macro} % % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} % \begin{macro}{\@downvector} % \begin{macrocode} \def\@downvector{\@downline\lower \@linelen \hb@xt@\z@{\@linefnt\char 63 % '77 \hss}} % \end{macrocode} % \end{macro} % % \begin{oldcomments} % \dashbox{D}(X,Y) == % BEGIN % leave vertical mode % \hb@xt@ 0pt { % \baselineskip := 0pt % \lineskip := 0pt % %% HORIZONTAL DASHES % \@dashdim := X * \unitlength % \@dashcnt := \@dashdim + 200 % to prevent roundoff error % \@dashdim := D * \unitlength % \@dashcnt := \@dashcnt / \@dashdim % if \@dashcnt is odd % then \@dashdim := 0pt % \@dashcnt := (\@dashcnt + 1) / 2 % else \@dashdim := \@dashdim / 2 % \@dashcnt := \@dashcnt / 2 - 1 % \box\@dashbox := \hbox{\vrule height \@halfwidth % depth \@halfwidth width \@dashdim} % \put(0,0){\copy\@dashbox} % \put(0,Y){\copy\@dashbox} % \put(X,0){\hskip -\@dashdim\copy\@dashbox} % \put(X,Y){\hskip -\@dashdim\box\@dashbox} % \@dashdim := 3 * \@dashdim % fi % \box\@dashbox := \hbox{\vrule height \@halfwidth % depth \@halfwidth width D * \unitlength % \hskip D * \unitlength} % \@tempcnta := 0 % \put(0,0){\hskip \@dashdim % while \@tempcnta < \@dascnt % do \copy\@dashbox % \@tempcnta := \@tempcnta + 1 % od % } % \@tempcnta := 0 % put(0,Y){\hskip \@dashdim % while \@tempcnta < \@dascnt % do \copy\@dashbox % \@tempcnta := \@tempcnta + 1 % od % } % % %% vertical dashes % \@dashdim := Y * \unitlength % \@dashcnt := \@dashdim + 200 % to prevent roundoff error % \@dashdim := D * \unitlength % \@dashcnt := \@dashcnt / \@dashdim % if \@dashcnt is odd % then \@dashdim := 0pt % \@dashcnt := (\@dashcnt + 1) / 2 % else \@dashdim := \@dashdim / 2 % \@dashcnt := \@dashcnt / 2 - 1 % \box\@dashbox := \hbox{\hskip -\@halfwidth % \vrule width \@wholewidth % height \@dashdim } % \put(0,0){\copy\@dashbox} % \put(X,0){\copy\@dashbox} % \put(0,Y){\lower\@dashdim\copy\@dashbox} % \put(X,Y){\lower\@dashdim\copy\@dashbox} % \@dashdim := 3 * \@dashdim % fi % \box\@dashbox := \hbox{\vrule width \@wholewidth % height D * \unitlength } % \@tempcnta := 0 % put(0,0){\hskip -\halfwidth % \vbox{while \@tempcnta < \@dashcnt % do \vskip D*\unitlength % \copy\@dashbox % \@tempcnta := \@tempcnta + 1 % od % \vskip \@dashdim % } } % \@tempcnta := 0 % put(X,0){\hskip -\halfwidth % \vbox{while \@tempcnta < \@dashcnt % do \vskip D*\unitlength % \copy\@dashbox % \@tempcnta := \@tempcnta + 1 % od % \vskip \@dashdim % } % } % } % END DASHES % % \@imakepicbox(X,Y) % END % \end{oldcomments} % % \begin{macro}{\dashbox} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\dashbox}{default units}% %\expandafter\let\csname dashbox \endcsname\@undefind \def\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip \lineskip \z@skip \@defaultunitsset\@dashdim{#2}\unitlength \@dashcnt \@dashdim \advance\@dashcnt 200 \@defaultunitsset\@dashdim{#1}\unitlength \divide\@dashcnt \@dashdim \ifodd\@dashcnt\@dashdim \z@ \advance\@dashcnt \@ne \divide\@dashcnt \tw@ \else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ \advance\@dashcnt \m@ne \setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth \@width \@dashdim}\put(0,0){\copy\@dashbox}% \put(0,#3){\copy\@dashbox}% \put(#2,0){\hskip-\@dashdim\copy\@dashbox}% \put(#2,#3){\hskip-\@dashdim\box\@dashbox}% \multiply\@dashdim \thr@@ \fi \setbox\@dashbox \hbox{% \@defaultunitsset\@tempdimc{#1}\unitlength \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc \hskip\@tempdimc}% \@tempcnta\z@ \put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt \do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ \put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt \do{\copy\@dashbox\advance\@tempcnta \@ne }}% \@defaultunitsset\@dashdim{#3}\unitlength \@dashcnt \@dashdim \advance\@dashcnt 200 \@defaultunitsset\@dashdim{#1}\unitlength \divide\@dashcnt \@dashdim \ifodd\@dashcnt \@dashdim \z@ \advance\@dashcnt \@ne \divide\@dashcnt \tw@ \else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ \advance\@dashcnt \m@ne \setbox\@dashbox\hbox{\hskip -\@halfwidth \vrule \@width \@wholewidth \@height \@dashdim}\put(0,0){\copy\@dashbox}% \put(#2,0){\copy\@dashbox}% \put(0,#3){\lower\@dashdim\copy\@dashbox}% \put(#2,#3){\lower\@dashdim\copy\@dashbox}% \multiply\@dashdim \thr@@ \fi \@defaultunitsset\@tempdimb{#1}\unitlength \setbox\@dashbox\hbox{% \vrule \@width \@wholewidth \@height\@tempdimb}% \@tempcnta\z@ \put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt \do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% \vskip\@dashdim}}\@tempcnta\z@ \put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt \do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }% \vskip\@dashdim}}}\@makepicbox(#2,#3)} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\dashbox}{default units}% %\expandafter\let\csname dashbox \endcsname\@undefind %\def\dashbox#1(#2,#3){% %\leavevmode\hb@xt@\z@{\baselineskip \z@skip %\lineskip \z@skip %\@dashdim #2\unitlength %\@dashcnt \@dashdim \advance\@dashcnt 200 %\@dashdim #1\unitlength\divide\@dashcnt \@dashdim %\ifodd\@dashcnt\@dashdim \z@ %\advance\@dashcnt \@ne \divide\@dashcnt \tw@ %\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ %\advance\@dashcnt \m@ne %\setbox\@dashbox \hbox{% % \vrule \@height \@halfwidth \@depth \@halfwidth % \@width \@dashdim}\put(0,0){\copy\@dashbox}% %\put(0,#3){\copy\@dashbox}% %\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% %\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% %\multiply\@dashdim \thr@@ %\fi %\setbox\@dashbox \hbox{% % \vrule \@height \@halfwidth \@depth \@halfwidth % \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ %\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt %\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ %\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt %\do{\copy\@dashbox\advance\@tempcnta \@ne }}% %\@dashdim #3\unitlength %\@dashcnt \@dashdim \advance\@dashcnt 200 %\@dashdim #1\unitlength\divide\@dashcnt \@dashdim %\ifodd\@dashcnt \@dashdim \z@ %\advance\@dashcnt \@ne \divide\@dashcnt \tw@ %\else %\divide\@dashdim \tw@ \divide\@dashcnt \tw@ %\advance\@dashcnt \m@ne %\setbox\@dashbox\hbox{\hskip -\@halfwidth %\vrule \@width \@wholewidth %\@height \@dashdim}\put(0,0){\copy\@dashbox}% %\put(#2,0){\copy\@dashbox}% %\put(0,#3){\lower\@dashdim\copy\@dashbox}% %\put(#2,#3){\lower\@dashdim\copy\@dashbox}% %\multiply\@dashdim \thr@@ %\fi %\setbox\@dashbox\hbox{\vrule \@width \@wholewidth %\@height #1\unitlength}\@tempcnta\z@ %\put(0,0){% % \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt % \do{\vskip #1\unitlength\copy\@dashbox % \advance\@tempcnta\@ne }% % \vskip\@dashdim}}\@tempcnta\z@ %\put(#2,0){% % \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt % \do{\vskip #1\unitlength\copy\@dashbox % \advance\@tempcnta \@ne }% % \vskip\@dashdim}}}\@makepicbox(#2,#3)} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{oldcomments} % CIRCLES AND OVALS % % USER COMMANDS: % % \circle{D} : Produces the circle with the diameter as close as % possible to D * \unitlength. \put(X,Y){\circle{D}} % puts the circle with its center at (X,Y). % % \oval(X,Y) : Makes an oval as round as possible that fits in the % rectangle of width X * \unitlength and height % Y * \unitlength. The reference point is the center. % % \oval(X,Y)[POS] : Save as \oval(X,Y) except it draws only the % half or quadrant of the oval indicated by POS. % E.G., \oval(X,Y)[t] draws just the top half % and \oval(X,Y)[br] draws just the bottom right % quadrant. In all cases, the reference point is % the same as the unqualified \oval(X,Y) command. % % \@ovvert {DELTA1} {DELTA2} : Makes a vbox containing either the left % side or the right side of the oval being constructed. The baseline % will coincide with the outside bottom edge of the oval; the left % side of the box will coincide with the left edge of the vertical % rule. The width of the box will be \@tempdima. % DELTA1 and DELTA2 are added to the character number in \@tempcnta % to get the characters for the top and bottom quarter circle pieces. % % \@ovhorz : Makes an hbox containing the straight rule for either the % top or the bottom of the oval being constructed. The baseline % will coincide with bottom edge of the rule; the left side of % the box will coincide with the left side of the oval. % The width of the box will be \@ovxx. % % \@getcirc {DIAM} : Sets \@tempcnta to the character number % of the top-right quarter circle with the largest % diameter less than or equal to DIAM. % Sets \@tempboxa to an hbox containing that character. % Sets \@tempdima to \wd \@tempboxa, which is the distance % from the circle's left outside edge to its right % inside edge. % (These characters are like those described in the % TeXbook, pp. 389-90.) % % \@getcirc {DIAM} == % BEGIN % \@tempcnta := integer coercion of (DIAM + 2pt) % + 2pt added 1 Nov 88 % \@tempcnta := \@tempcnta / integer coercion of 4pt % if \@tempcnta > 10 % then \@tempcnta := 10 fi % if \@tempcnta > 0 % then \@tempcnta := \@tempcnta-1 % else LaTeX Warning: Oval too small. % fi % \@tempcnta := 4 * \@tempcnta % \@tempboxa := \hbox{\@circlefnt \char \@tempcnta} % \@tempdima := \wd \@tempboxa % END % % \@put{X}{Y}{OBJ} == % BEGIN % \raise Y \hb@xt@ 0pt{\hskip X OBJ \hss} % END % % \@oval(X,Y)[POS] == % BEGIN % \begingroup % \boxmaxdepth := \maxdimen % @ovt := @ovb := @ovl := @ovr := true % for all E in POS % do @ovE := false od % \@ovxx := X * \unitlength % \@ovyy := Y * \unitlength % \@tempdimb := min(\@ovxx,\@ovyy) % \@getcirc{\@tempdimb-2pt} %% "-2pt" added 7 Dec 89 % \@ovro := \ht \@tempboxa % \@ovri := \dp \@tempboxa % \@ovdx := \@ovxx - \@tempdima % \@ovdx := \@ovdx/2 % \@ovdy := \@ovyy - \@tempdima % \@ovdy := \@ovyy/2 % \@circlefnt % \@tempboxa := % \hbox{ % if @ovr % then \@ovvert{3}{2} \kern -\@tempdima % fi % if @ovl % then \kern \@ovxx \@ovvert{0}{1} \kern -\@tempdima % \kern -\@ovxx % fi % if @ovt % then \@ovhorz \kern -\@ovxx % fi % if @ovb % then \raise \@ovyy \@ovhorz % fi % } % \@ovdx := \@ovdx + \@ovro % \@ovdy := \@ovdy + \@ovro % \ht\@tempboxa := \dp\@tempboxa := 0 % \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa} % \endgroup % END % % \@ovvert {DELTA1} {DELTA2} == % BEGIN % \vbox to \@ovyy { % if @ovb % then \@tempcntb := \@tempcnta + DELTA1 % \kern -\@ovro % \hbox { \char \@tempcntb } % \nointerlineskip % else \kern \@ovri \kern \@ovdy % fi % \leaders \vrule width \@wholewidth \vfil % \nointerlineskip % if @ovt % then \@tempcntb := \@tempcnta + DELTA2 % \hbox { \char \@tempcntb } % else \kern \@ovdy \kern \@ovro % fi % } % END % % \@ovhorz == % BEGIN % \hb@xt@ \@ovxx{ % \kern \@ovro % if @ovr % then % else \kern \@ovdx % fi % \leaders \hrule height \@wholewidth \hfil % if @ovl % then % else \kern \@ovdx % fi % \kern \@ovri % } % END % % \circle{DIAM} == % BEGIN % \begingroup % \boxmaxdepth := maxdimen % \@tempdimb := DIAM *\unitlength % if \@tempdimb > 15.5pt % then \@getcirc{\@tempdimb} % \@ovro := \ht \@tempboxa % \@tempboxa := \hbox{ % \@circlefnt % \@tempcnta := \@tempcnta + 2 % \char \@tempcnta % \@tempcnta := \@tempcnta - 1 % \char \@tempcnta % \kern -2\@tempdima % \@tempcnta := \@tempcnta + 2 % \raise \@tempdima \hbox { \char \@tempcnta } % \raise \@tempdima \box\@tempboxa % } % \ht\@tempboxa := \dp\@tempboxa := 0 % \@put{-\@ovro}{-\@ovro}{\@tempboxa} % else % \@circ{\@tempdimb}{96} % fi % \endgroup % END % % \circle*{DIAM} == \@dot{DIAM} == \@circ{DIAM*\unitlength}{112} % % \@circ{DIAM}{CHAR} == % BEGIN % \@tempcnta := integer coercion of (DIAM + .5pt)/1pt. % if \@tempcnta > 15 then \@tempcnta := 15 fi % if \@tempcnta > 1 then \@tempcnta := \@tempcnta - 1 fi % \@tempcnta := \@tempcnta + CHAR % \@circlefnt % \char \@tempcnta % END % \end{oldcomments} % % % \begin{macro}{\if@ovt} % \begin{macro}{\if@ovb} % \begin{macro}{\if@ovl} % \begin{macro}{\if@ovr} % If producing the Top Bottom Left or Right of an oval. % \begin{macrocode} \newif\if@ovt \newif\if@ovb \newif\if@ovl \newif\if@ovr % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \begin{macro}{\@ovxx} % \begin{macro}{\@ovyy} % \begin{macro}{\@ovdx} % \begin{macro}{\@ovdy} % \begin{macro}{\@ovro} % \begin{macro}{\@ovri} % \begin{macrocode} \newdimen\@ovxx \newdimen\@ovyy \newdimen\@ovdx \newdimen\@ovdy \newdimen\@ovro \newdimen\@ovri % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % |\advance\@tempdima 2pt\relax| added 1 Nov 88 to fix bug in which % size of drawn circle not monotonic function of argument of |\circle|, % caused by different rounding for dimensions of large and small % circles. % % % \begin{macro}{\@getcirc} % \changes{v1.1j}{2003/12/30}{issue warning if circle size can't be met pr/3473} % \begin{macrocode} \def\@getcirc#1{\@tempdima #1\relax \advance\@tempdima 2\p@ \@tempcnta\@tempdima \@tempdima 4\p@ \divide\@tempcnta\@tempdima \ifnum \@tempcnta >10\relax \@picture@warn \@tempcnta 10\relax \fi \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne % \end{macrocode} % Warn if requirements for oval or circle can't be met. % \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524} % \begin{macrocode} \else \@picture@warn \fi \multiply\@tempcnta 4\relax \setbox \@tempboxa \hbox{\@circlefnt \char \@tempcnta}\@tempdima \wd \@tempboxa} % \end{macrocode} % \end{macro} % % \begin{macro}{\@picture@warn} % Generic warning for lines, vectors (used in |\@sline|) and % oval or circle (used in |\@getcirc|) are not available at % right size. % \changes{v1.1g}{1997/09/15}{Macro added pr/2524} % \begin{macrocode} \def\@picture@warn{\@latex@warning{% \string\oval, \string\circle, or \string\line\space size unavailable}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@put} % \begin{macrocode} \def\@put#1#2#3{\raise #2\hb@xt@\z@{\hskip #1#3\hss}} % \end{macrocode} % \end{macro} % % \begin{macro}{\oval} % \begin{macrocode} \def\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}} % \end{macrocode} % \end{macro} % % \begin{macrocode} % %\IncludeInRelease{2016/03/31}% % {\@ovhlinetrue}% % {Avoid almost zero length leaders}% %<*2ekernel|latexrelease> % \end{macrocode} % % \begin{macro}{\if@ovvline} % \changes{v1.1l}{2016/03/29}{macro added (latex/4452)} % \begin{macro}{\if@ovhline} % \changes{v1.1l}{2016/03/29}{macro added (latex/4452)} % Tests whether horizontal or vertical lines are needed. % \begin{macrocode} \newif\if@ovvline \@ovvlinetrue \newif\if@ovhline \@ovhlinetrue % \begin{macrocode} % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@ovhlinetrue}% % {Avoid almost zero length leaders}% %\let\if@ovvline\@undefined %\let\if@ovhline\@undefined %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@oval} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@oval}{default units}% \def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue % \end{macrocode} % \changes{v1.1l}{2016/03/29}{initialise tests} % \begin{macrocode} \@ovvlinefalse \@ovhlinefalse % \end{macrocode} % \begin{macrocode} \@tfor\reserved@a :=#3\do{% \csname @ov\reserved@a false\endcsname}% \@defaultunitsset\@ovxx{#1}\unitlength \@defaultunitsset\@ovyy{#2}\unitlength % \end{macrocode} % \changes{v1.1l}{2016/03/29}{add setting of line tests} % \begin{macrocode} \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi % \end{macrocode} % \begin{macrocode} \advance \@tempdimb -2\p@ \@getcirc \@tempdimb \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ % \end{macrocode} % \changes{v1.1l}{2016/03/29}{add setting of line tests} % \begin{macrocode} \ifdim \@ovdx >\z@ \@ovhlinetrue \fi \ifdim \@ovdy >\z@ \@ovvlinetrue \fi % \end{macrocode} % \begin{macrocode} \@circlefnt \setbox\@tempboxa \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi \if@ovt \@ovhorz \kern -\@ovxx \fi \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% \endgroup} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{2016/03/31}% % {\@oval}{default units}% %\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen % \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue % \@ovvlinefalse \@ovhlinefalse % \@tfor\reserved@a :=#3\do{% % \csname @ov\reserved@a false\endcsname}% % \@ovxx #1\unitlength % \@ovyy #2\unitlength % \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue % \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue % \fi\fi % \advance \@tempdimb -2\p@ % \@getcirc \@tempdimb % \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa % \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ % \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ % \ifdim \@ovdx >\z@ \@ovhlinetrue \fi % \ifdim \@ovdy >\z@ \@ovvlinetrue \fi % \@circlefnt \setbox\@tempboxa % \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi % \if@ovl % \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx % \fi % \if@ovt \@ovhorz \kern -\@ovxx \fi % \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro % \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ % \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% % \endgroup} %\EndIncludeInRelease % \end{macrocode} % % \begin{macrocode} %\IncludeInRelease{0000/00/00}% % {\@oval}{default units}% %\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen % \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue % \@tfor\reserved@a :=#3\do % {\csname @ov\reserved@a false\endcsname}% % \@ovxx #1\unitlength % \@ovyy #2\unitlength % \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi % \advance \@tempdimb -2\p@ % \@getcirc \@tempdimb % \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa % \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ % \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ % \@circlefnt \setbox\@tempboxa % \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi % \if@ovl % \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx % \fi % \if@ovt \@ovhorz \kern -\@ovxx \fi % \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro % \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ % \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% % \endgroup} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@ovvert} % \begin{macrocode} % %\IncludeInRelease{2016/03/31}% % {\@ovvert}{Avoid almost zero length leaders}% %<*2ekernel|latexrelease> \def\@ovvert#1#2{\vbox to\@ovyy{% \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip \else \kern \@ovri \kern \@ovdy \fi % \end{macrocode} % \changes{v1.1l}{2016/03/29} % {use glue not leaders if vertical line not required} % \begin{macrocode} \if@ovvline \leaders\vrule \@width \@wholewidth \fi % \end{macrocode} % \begin{macrocode} \vfil \nointerlineskip \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax \hbox{\char \@tempcntb}% \else \kern \@ovdy \kern \@ovro \fi}} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@ovvert}{Avoid almost zero length leaders}% %\def\@ovvert#1#2{\vbox to\@ovyy{% % \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax % \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip % \else \kern \@ovri \kern \@ovdy \fi % \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip % \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax % \hbox{\char \@tempcntb}% % \else \kern \@ovdy \kern \@ovro \fi}} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@ovhorz} % \begin{macrocode} % %\IncludeInRelease{2016/03/31}% % {\@ovhorz}{Avoid almost zero length leaders}% %<*2ekernel|latexrelease> \def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro \if@ovr \else \kern \@ovdx \fi % \end{macrocode} % \changes{v1.1l}{2016/03/29} % {use glue not leaders if horizontal line not required} % \begin{macrocode} \if@ovhline \leaders \hrule \@height \@wholewidth \fi % \end{macrocode} % % \begin{macrocode} \hfil \if@ovl \else \kern \@ovdx \fi \kern \@ovri}} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@ovhorz}{Avoid almost zero length leaders}% %\def\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro % \if@ovr \else \kern \@ovdx \fi % \leaders \hrule \@height \@wholewidth \hfil % \if@ovl \else \kern \@ovdx \fi % \kern \@ovri}} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\circle} % \changes{LaTeX2.09}{1993/08/05} % {(RMS) Added error message if \cs{circle} is used in math mode.} % \begin{macrocode} \def\circle{\@inmatherr\circle\@ifstar\@dot\@circle} % \end{macrocode} % \end{macro} % % \begin{macro}{\@circle} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@circle}{default units}% \def\@circle#1{% \begingroup \boxmaxdepth \maxdimen \@defaultunitsset\@tempdimb{#1}\unitlength \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb \@ovro\ht\@tempboxa \setbox\@tempboxa\hbox{\@circlefnt \advance\@tempcnta\tw@ \char \@tempcnta \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima \advance\@tempcnta\tw@ \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% \else \@circ\@tempdimb{96}\fi\endgroup} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@circle}{default units}% %\def\@circle#1{% % \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength % \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb % \@ovro\ht\@tempboxa % \setbox\@tempboxa\hbox{\@circlefnt % \advance\@tempcnta\tw@ \char \@tempcnta % \advance\@tempcnta\m@ne \char \@tempcnta % \kern -2\@tempdima % \advance\@tempcnta\tw@ % \raise \@tempdima \hbox{\char\@tempcnta}% % \raise \@tempdima % \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ % \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% % \else \@circ\@tempdimb{96}\fi\endgroup} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@dot} % Internal form of |\circle*|. % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@dot}{default units}% \def\@dot#1{% \@defaultunitsset\@tempdimb{#1}\unitlength \@circ\@tempdimb{112}} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@dot}{default units}% %\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % % \begin{macro}{\@circ} % \begin{macrocode} \def\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@ \@tempcnta\@tempdima \@tempdima \p@ \divide\@tempcnta\@tempdima \ifnum\@tempcnta >15\relax \@tempcnta 15\relax \fi \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne\fi \advance\@tempcnta #2\relax \@circlefnt \char\@tempcnta} % \end{macrocode} % \end{macro} % % % \begin{macro}{\@xarg} % \begin{macro}{\@yarg} % \begin{macro}{\@yyarg} % Counters used for manipulating the `slope' arguments. % \begin{macrocode} \newcount\@xarg \newcount\@yarg \newcount\@yyarg % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@multicnt} % Counter used in |\multiput|, and also |\multicolumn|. % \begin{macrocode} \newcount\@multicnt % \end{macrocode} % \end{macro} % % \begin{macro}{\@xdim} % \begin{macro}{\@ydim} % Length registers. % \begin{macrocode} \newdimen\@xdim \newdimen\@ydim % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@linechar} % Box for holding a line segment character, for sloping lines. % \begin{macrocode} \newbox\@linechar % \end{macrocode} % \end{macro} % % \begin{macro}{\@linelen} % Length of the line currently being built. % \begin{macrocode} \newdimen\@linelen % \end{macrocode} % \end{macro} % % \begin{macro}{\@clnwd} % \begin{macro}{\@clnht} % Height and width of current line segment. % \begin{macrocode} \newdimen\@clnwd \newdimen\@clnht % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@dashdim} % \begin{macro}{\@dashbox} % \begin{macro}{\@dashcnt} % |\dashbox| internal registers. % \begin{macrocode} \newdimen\@dashdim \newbox\@dashbox \newcount\@dashcnt % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % Initialization: ``|\thinlines|'' % \changes{v1.1f}{1995/10/27} % {Move initialization to kernel from autoload file} % \begin{macrocode} \let\@linefnt\tenln \let\@circlefnt\tencirc \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth % \end{macrocode} % % % % \subsection{Curves} % The new |\qbezier| command, based on the old |\bezier| defined in % |bezier.sty|. % \changes{v0.1c}{1994/04/28}{bezier curves added} % % \begin{oldcomments} % % \qbezier[N] == \bezier{N} % % \bezier{N}(AX,AY)(BX,BY)(CX,CY) == % BEGIN % IF N = 0 % THEN \@xdima := |BX - AX| % \@xb := |CX - BX| % \@xa := Max(\@xa, \@xb) % \@ya := |BY - AY| % \@yb := |CY - BY| % \@ya := Max(\@ya, \@yb) % @sc := Max(\@xa, \@ya) % %% The coefficient .5 below is the degree of overlap of % %% successive points, where 1 is no overlap and 0 is % %% complete overlap. A coefficient of C multiplies % %% the number of points plotted by 1/C. % %% % \@xa := .5 * \@halfwidth % @sc := @sc / \@halfwidth % @sc := Max(@sc, qbeziermax) % ELSE @sc := N % @scp := @sc+1 % \@xb := 2 * (BX - AX) * \unitlength % \@xa := ((CX-AX)*\unitlength - \@xb)/@sc % \@yb := 2 * (BY - AY) * \unitlength % \@ya := ((CY-AY)*\unitlength - \@yb)/@sc % \@pictdot := square rule of width \@wholewidth % \count@ := 0 % WHILE \count@ < @scp % DO \@xdim := ((\count@*\@xa + @xb) / @sc) * \count@ % \@ydim := ((\count@*\@ya + @yb) / @sc) * \count@ % plot pt with relative coords (\@xdim,\@ydim) % \count@ := \count@+1 % OD % % \end{oldcomments} % % \begin{macro}{\qbeziermax} % The maximum number of points to plot. % \begin{macrocode} \def\qbeziermax{500} % \end{macrocode} % \end{macro} % % % In the code below, to save registers |\@a| \ldots\ are not used. % Instead other registers are reused. % % |\newcounter{@sc} -> \c@multicnt|\par % |\newcounter{@scp} -> \@tempcnta|\par % |\newdimen\@xa -> \@ovxx|\par % % |\newdimen\@xb -> \@ovdx| % % |\newdimen\@ya -> \@ovyy|\par % |\newdimen\@yb -> \@ovdy| % % |\newsavebox{\@pictdot} -> \@tempboxa| % % \begin{macro}{\qbezier} % Main user-level command to plot quadratic bezier curves. % |#2| should be |(|. % \begin{macrocode} \newcommand\qbezier[2][0]{\bezier{#1}#2} % \end{macrocode} % \end{macro} % % \begin{macro}{\bezier} % Form of |\bezier| compatible with 2.09 |bezier.sty|, but modified to % ignore spaces between its arguments. % |#2| should be white space, and |#4| should be |(|. % \begin{macrocode} \def\bezier#1)#2(#3)#4({\@bezier#1)(#3)(} % \end{macrocode} % % \begin{macro}{\@bezier} % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2020/10/01}% % {\@bezier}{default units}% \def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% \ifnum #1=\z@ \@defaultunitsset\@ovxx{#4}\unitlength \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi \@defaultunitsset\@ovdx{#6}\unitlength \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi \@defaultunitsset\@ovyy{#5}\unitlength \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi \@defaultunitsset\@ovdy{#7}\unitlength \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi \@multicnt \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi \else \@multicnt#1\relax \fi \@tempcnta\@multicnt \advance\@tempcnta\@ne \@defaultunitsset\@ovdx{#4}\unitlength \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength \multiply\@ovdx \tw@ \@defaultunitsset\@ovxx{#6}\unitlength \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt \@defaultunitsset\@ovdy{#5}\unitlength \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength \multiply\@ovdy \tw@ \@defaultunitsset\@ovyy{#7}\unitlength \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt % \end{macrocode} % % \changes{v1.1k}{2003/08/27}{added missing displacement pr/3566} % \begin{macrocode} \setbox\@tempboxa\hbox{% \hskip -\@halfwidth \vrule \@height\@halfwidth \@depth \@halfwidth \@width \@wholewidth}% \put(#2,#3){% \count@\z@ \@whilenum{\count@<\@tempcnta}\do {\@xdim\count@\@ovxx \advance\@xdim\@ovdx \divide\@xdim\@multicnt \multiply\@xdim\count@ \@ydim\count@\@ovyy \advance\@ydim\@ovdy \divide\@ydim\@multicnt \multiply\@ydim\count@ \raise \@ydim \hb@xt@\z@{\kern\@xdim \unhcopy\@tempboxa\hss}% \advance\count@\@ne}}} % % \end{macrocode} % % \begin{macrocode} %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\@bezier}{default units}% %\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){% % \ifnum #1=\z@ % \@ovxx #4\unitlength % \advance\@ovxx -#2\unitlength % \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi % \@ovdx #6\unitlength % \advance\@ovdx -#4\unitlength % \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi % \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi % \@ovyy #5\unitlength % \advance\@ovyy -#3\unitlength % \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi % \@ovdy #7\unitlength % \advance\@ovdy -#5\unitlength % \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi % \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi % \@multicnt % \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi % \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx % \ifnum % \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax % \fi % \else \@multicnt#1\relax \fi % \@tempcnta\@multicnt \advance\@tempcnta\@ne % \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength % \multiply\@ovdx \tw@ % \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength % \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt % \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength % \multiply\@ovdy \tw@ % \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength % \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt % \setbox\@tempboxa\hbox{% % \hskip -\@halfwidth % \vrule \@height\@halfwidth % \@depth \@halfwidth % \@width \@wholewidth}% % \put(#2,#3){% % \count@\z@ % \@whilenum{\count@<\@tempcnta}\do % {\@xdim\count@\@ovxx % \advance\@xdim\@ovdx % \divide\@xdim\@multicnt % \multiply\@xdim\count@ % \@ydim\count@\@ovyy % \advance\@ydim\@ovdy % \divide\@ydim\@multicnt % \multiply\@ydim\count@ % \raise \@ydim % \hb@xt@\z@{\kern\@xdim % \unhcopy\@tempboxa\hss}% % \advance\count@\@ne}}} %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % \end{macro} % \end{macro} % % As the commands above all use ``picture'' interface we couldn't define them with % |\DeclareRobustCommand| so we do that now. % \begin{macrocode} % %<*2ekernel|latexrelease> %\IncludeInRelease{2019/10/01}% % {\bezier}{Make commands robust}% \MakeRobust\bezier \MakeRobust\circle \MakeRobust\dashbox \MakeRobust\line \MakeRobust\linethickness \MakeRobust\multiput \MakeRobust\oval \MakeRobust\put \MakeRobust\qbezier \MakeRobust\shortstack \MakeRobust\thinlines \MakeRobust\vector % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\bezier}{Make commands robust}% % %\kernel@make@fragile\bezier %\kernel@make@fragile\circle %\kernel@make@fragile\dashbox %\kernel@make@fragile\line %\kernel@make@fragile\linethickness %\kernel@make@fragile\multiput %\kernel@make@fragile\oval %\kernel@make@fragile\put %\kernel@make@fragile\qbezier %\kernel@make@fragile\shortstack %\kernel@make@fragile\thinlines %\kernel@make@fragile\vector % %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} % % \Finale %