1 % \iffalse meta-comment
4 % The LaTeX3 Project and any individual authors listed elsewhere
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 % http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX
16 % version 2005/12/01 or later.
18 % This file has the LPPL maintenance status "maintained".
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
24 % The list of derived (unpacked) files belonging to the distribution
25 % and covered by LPPL is defined by the unpacking scripts (with
26 % extension .ins) which are part of the distribution.
31 %%% From File: ltpictur.dtx
34 \ProvidesFile{ltpictur.dtx}
35 [2016/03/29 v1.1l LaTeX Kernel (Picture Mode)]
37 \documentclass{ltxdoc}
38 \GetFileInfo{ltpictur.dtx}
50 \MaintainedByLaTeXTeam{latex}
58 % \changes{v1.0g}{1995/05/07}{Use \cs{hb@xt@}}
59 % \changes{v1.1a}{1995/05/19}{Support autoloading feature}
60 % \changes{v1.1b}{1995/06/13}{Use \cs{ProvidesFile} in autoload}
61 % \changes{v1.1d}{1995/07/12}{allow 2e commands in 209 mode. latex/1737}
62 % \changes{v1.1e}{1995/10/03}{New autoload code}
63 % \changes{v1.1h}{1999/04/15}{Replaced octal numbers, CAR}
64 % \changes{v1.1k}{2015/02/21}{Removed autoload code}
66 % \section{Picture Mode}
67 % Picture mode commands. In addition to the commands available in
68 % \LaTeX2.09, This section adds the new |\qbezier| command for
71 % \DescribeMacro{\qbezier}
72 % |\qbezier|\oarg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY}
73 % plots a quadratic Bezier curve from \parg{AX,AY} to \parg{CX,CY},
74 % with \parg{BX,BY} as the third Bezier point, using $N+1$ points
75 % equally spaced parametrically.
76 % If $N = 0$ (the default value), then a sufficient number of points
77 % are used to draw a connected curve--except that at most
78 % $|\qbeziermax| + 1$ points are drawn. A ``point'' is a square of
79 % side |\@wholewidth|.
81 % \DescribeMacro{\bezier}
82 % In addition, to be compatible with the old |bezier| package, a
83 % variant of this command, |\bezier|, is defined, in which the first
84 % argument is not optional.
89 % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx}
90 % \changes{v0.1a}{1994/03/07}{Long lines wrapped to 72 columns}
91 % \changes{v0.1b}{1994/04/24}
92 % {Removed surplus spaces after \cs{hbox to } in several cases}
93 % \changes{v0.1d}{1994/05/13}
94 % {Removed surplus braces from \cs{@if..} constructions}
95 % \changes{v0.1e}{1994/05/22}{Use new warning cmds}
96 % \changes{v1.0f}{1994/11/17}
97 % {\cs{@tempa} to \cs{reserved@a}}
101 % \unitlength = value of dimension argument
102 % \@wholewidth = current line width
103 % \@halfwidth = half of current line width
104 % \@linefnt = font for drawing lines
105 % \@circlefnt = font for drawing circles
107 % \linethickness{DIM} : Sets the width of horizontal and vertical lines
108 % in a picture to DIM. Does not change width of slanted lines
109 % or circles. Width of all lines reset by \thinlines and
112 % \picture(XSIZE,YSIZE)(XORG,YORG)
114 % \@picht :=L YSIZE * \unitlength
116 % \hb@xt@ XSIZE * \unitlength
117 % {\hskip -XORG * \unitlength
118 % \lower YORG * \unitlength
120 % \ignorespaces %% added 13 June 89
126 % height of \@picbox := \@picht
127 % depth of \@picbox := 0
128 % \mbox{\box\@picbox} %% change 26 Aug 91
134 % \raise Y * \unitlength \hb@xt@ 0pt { \hskip X * \unitlength
139 % \multiput(X,Y)(DELX,DELY){N}{OBJ} ==
143 % \@xdim := X * \unitlength
144 % \@ydim := Y * \unitlength
145 % while \@multicnt > 0
146 % do \raise \@ydim \hb@xt@ 0pt { \hskip \@xdim
148 % \@multicnt := \@multicnt - 1
149 % \@xdim := \@xdim + DELX * \unitlength
150 % \@ydim := \@ydim + DELY * \unitlength
155 % \shortstack[POS]{TEXT} : Makes a \vbox containing TEXT stacked as
156 % a one-column array, positioned l, r or c as indicated by POS.
160 % The `2ekernel' code ensures that a |\usepackage{autopict}| is
161 % essentially ignored if a `full' format is being used that has
162 % picture mode already in the format.
164 %<2ekernel>\expandafter\let\csname ver@autopict.sty\endcsname\fmtversion
167 % \begin{macro}{\@wholewidth}
168 % \begin{macro}{\@halfwidth}
171 \newdimen\@wholewidth
177 % \begin{macro}{\unitlength}
179 \newdimen\unitlength \unitlength =1pt
183 % \begin{macro}{\@picbox}
184 % \begin{macro}{\@picht}
192 % \begin{macro}{\picture}
193 % \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces before (}
194 % |#1| should be white space.
195 % \begin{macro}{\pictur@}
196 % \changes{v1.0h}{1995/05/12}{Macro added for latex/1355}
197 % |#1| should be a |(| (eating any white space before the bracket),
199 \long\gdef\picture#1{\pictur@#1}
201 \@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}}
206 % \begin{macro}{\@picture}
208 \gdef\@picture(#1,#2)(#3,#4){%
210 \setbox\@picbox\hb@xt@#1\unitlength\bgroup
211 \hskip -#3\unitlength
212 \lower #4\unitlength\hbox\bgroup
217 % \begin{macro}{\endpicture}
218 % \changes{LaTeX2.09}{1991/08/26}
219 % {(RmS \& FMi) extra boxing level around \cs{@picbox}
220 % to guard against unboxing in math mode
221 % (proposed by John Hobby)}
226 \ht\@picbox\@picht\dp\@picbox\z@
231 % In the definitions of |\put| and |\multiput|, |\hskip| was replaced by
232 % |\kern| just in case arg |#3| = ``plus''. (Bug detected by Don Knuth.
233 % changed 20 Jul 87).
236 \long\gdef\put(#1,#2)#3{%
237 \@killglue\raise#2\unitlength
238 \hb@xt@\z@{\kern#1\unitlength #3\hss}%
243 % \begin{macro}{\multiput}
244 % \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces between )(}
245 % |#3| had better be a |(|.
247 \gdef\multiput(#1,#2)#3{%
254 % \begin{macro}{\multiput}
255 % \changes{v0.1c}{1994/04/28}{(DPC) Macro added}
257 \long\gdef\@multiput(#1,#2)#3#4{%
258 \@killglue\@multicnt #3\relax
259 \@whilenum \@multicnt >\z@\do
260 {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}%
261 \advance\@multicnt\m@ne
262 \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
267 % \begin{macro}{\@killglue}
269 \gdef\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}}
273 % \begin{macro}{\thinlines}
274 % \begin{macro}{\thicklines}
276 \gdef\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
277 \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
278 \gdef\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
279 \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
284 % \begin{macro}{\linethickness}
286 \gdef\linethickness#1{\@wholewidth #1\relax \@halfwidth .5\@wholewidth}
290 % \begin{macro}{\ishortstack}
292 \gdef\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}}
296 % \begin{macro}{\@ishortstack}
298 \gdef\@shortstack[#1]{%
301 \baselineskip-\p@\lineskip 3\p@
302 \let\mb@l\hss\let\mb@r\hss
303 \expandafter\let\csname mb@#1\endcsname\relax
310 % \changes{LaTeX2.09}{1991/08/14}
311 % {(RmS) inserted extra braces around entry for NFSS}
312 % \changes{LaTeX2.09}{1993/11/03}
313 % {(RmS) changed \cs{halign} to \cs{ialign} to initialize
314 % \cs{tabskip} and \cs{everycr}}
316 % \begin{macro}{\@ishortstack}
318 \gdef\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup}
322 % \begin{macro}{\@stackcr}
323 % \begin{macro}{\@ixstackcr}
325 \gdef\@stackcr{\@ifstar\@ixstackcr\@ixstackcr}
326 \gdef\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}}
331 % \begin{macro}{\@istackcr}
333 \gdef\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
337 % \begin{oldcomments}
342 % \@linelen := LEN * \unitlength
361 % \@tempcnta := |\@yyarg|
363 % then error: 'LATEX ERROR: Illegal \line or \vector argument.'
366 % \box\@linechar := \hbox{\@linefnt \@getlinechar(\@xarg,\@yyarg) }
367 % if \@yarg > 0 then \@upordown = \raise
369 % else \@upordown = \lower
370 % \@clnht := height of \box\@linechar
372 % \@clnwd := width of \box\@linechar
374 % then \hskip - width of \box\@linechar
375 % \reserved@a == \hskip - 2* width of box \@linechar
376 % else \reserved@a == \relax
378 % %% Put out integral number of line segments
379 % while \@clnwd < \@linelen
380 % do \@upordown \@clnht \copy\@linechar
382 % \@clnht := \@clnht + ht of \box\@linechar
383 % \@clnwd := \@clnwd + width of \box\@linechar
386 % %% Put out last segment
387 % \@clnht := \@clnht - height of \box\@linechar
388 % \@clnwd := \@clnwd - width of \box\@linechar
389 % \@tempdima := \@linelen - \@clnwd
390 % \@tempdimb := \@tempdima - width of \box\@linechar
391 % if @negarg then \hskip -\@tempdimb
392 % else \hskip \@tempdimb
394 % \@tempdima := 1000 * \@tempdima
395 % \@tempcnta := \@tempdima / width of \box\@linechar
396 % \@tempdima := (\@tempcnta * ht of \box\@linechar)/1000
397 % \@clnht := \@clnht + \@tempdima
398 % if \@linelen < width of box\@linechar
399 % then \hskip width of box\@linechar
400 % else \hbox{\@upordown \@clnht \copy\@linechar}
406 % if \@xarg < 0 then \hskip -\@linelen \fi
407 % \vrule height \@halfwidth depth \@halfwidth width \@linelen
408 % if \@xarg < 0 then \hskip -\@linelen \fi
411 % \@vline == if \@yarg < 0 \@downline else \@upline fi
414 % \@getlinechar(X,Y) ==
416 % \@tempcnta := 8*X - 9
418 % then \@tempcnta := \@tempcnta + Y
419 % else \@tempcnta := \@tempcnta - Y + 64
424 % \vector(X,Y){LEN} ==
428 % \@linelen := LEN * \unitlength
441 % {\@linefnt if \@xarg < 0 then \@getlarrow(1,0)
442 % else \@getrarrow(1,0)
446 % \@vvector == if \@yarg < 0 \@downvector else \@upvector fi
451 % \@tempcnta := |\@yarg|
453 % then \hskip - width of \box\@linechar
454 % \@upordown \@clnht \hbox
456 % if @negarg then \@getlarrow(\@xarg,\@yyarg)
457 % else \@getrarrow(\@xarg,\@yyarg)
459 % else error: 'LATEX ERROR: Illegal \line or \vector argument.'
463 % \@getlarrow(X,Y) ==
466 % then \@tempcnta := '33
467 % else \@tempcnta := 16 * X - 9
468 % \@tempcntb := 2 * Y
470 % then \@tempcnta := \@tempcnta + \@tempcntb
471 % else \@tempcnta := \@tempcnta - \@tempcntb + 64
477 % \@getrarrow(X,Y) ==
481 % 0 : \@tempcnta := '55
483 % then \@tempcnta := 24*X - 6
485 % then \@tempcnta := 49
486 % else \@tempcnta := 58 fi
489 % then \@tempcnta := 24*X - 3
490 % else \@tempcnta := 51 % X must = 3
492 % 3 : \@tempcnta := 16*X - 2
493 % 4 : \@tempcnta := 16*X + 7
496 % then \@tempcnta := \@tempcnta + 64
502 % \begin{macro}{\if@negarg}
508 % \begin{macro}{\line}
510 \gdef\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
511 \@linelen #3\unitlength
512 \ifdim\@linelen<\z@\@badlinearg\else
513 \ifnum\@xarg =\z@ \@vline
514 \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
520 % \begin{macro}{\@sline}
523 \ifnum\@xarg<\z@ \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg
524 \else \@negargfalse \@yyarg \@yarg \fi
525 \ifnum \@yyarg >\z@ \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi
526 \ifnum\@tempcnta>6 \@badlinearg\@tempcnta\z@ \fi
527 \ifnum\@xarg>6 \@badlinearg\@xarg \@ne \fi
528 \setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
530 % If we have something like |\line(5,5){30}| the |\@linechar| will
531 % not contain a char and later on we will end in an infinite loop.
532 % So we check the width of the box and put in something as an
533 % emergency fix if necessary.
534 % \changes{v1.1k}{2003/08/27}{check for \cs{@linechar} being empty pr/3570}
536 \ifdim\wd\@linechar=\z@
537 \setbox\@linechar\hbox{.}%
540 \ifnum \@yarg >\z@ \let\@upordown\raise \@clnht\z@
541 \else\let\@upordown\lower \@clnht \ht\@linechar\fi
542 \@clnwd \wd\@linechar
544 \hskip -\wd\@linechar \def\reserved@a{\hskip -2\wd\@linechar}%
546 \let\reserved@a\relax
548 \@whiledim \@clnwd <\@linelen \do
549 {\@upordown\@clnht\copy\@linechar
551 \advance\@clnht \ht\@linechar
552 \advance\@clnwd \wd\@linechar}%
553 \advance\@clnht -\ht\@linechar
554 \advance\@clnwd -\wd\@linechar
555 \@tempdima\@linelen\advance\@tempdima -\@clnwd
556 \@tempdimb\@tempdima\advance\@tempdimb -\wd\@linechar
557 \if@negarg \hskip -\@tempdimb \else \hskip \@tempdimb \fi
558 \multiply\@tempdima \@m
559 \@tempcnta \@tempdima
560 \@tempdima \wd\@linechar \divide\@tempcnta \@tempdima
561 \@tempdima \ht\@linechar \multiply\@tempdima \@tempcnta
562 \divide\@tempdima \@m
563 \advance\@clnht \@tempdima
564 \ifdim \@linelen <\wd\@linechar
567 % Warn if line gets so short that it can't be printed.
568 % \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524}
569 % But don't warn if it is exactly zero since that was probably
570 % deliberate (e.g., to get a vector head only).
571 % \changes{v1.1j}{2001/06/04}{Don't warn for exactly zero pr/3318}
573 \ifdim \@linelen = \z@
577 \else\@upordown\@clnht\copy\@linechar\fi}
581 % \begin{macro}{\@hline}
583 \gdef\@hline{\ifnum \@xarg <\z@ \hskip -\@linelen \fi
584 \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen
585 \ifnum \@xarg <\z@ \hskip -\@linelen \fi}
589 % \begin{macro}{\getlinechar}
591 \gdef\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8%
592 \advance\@tempcnta -9\ifnum #2>\z@ \advance\@tempcnta #2\relax\else
593 \advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi
598 % \begin{macro}{\vector}
600 \gdef\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
601 \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
602 \ifnum\@tempcnta<5\relax
603 \@linelen #3\unitlength
604 \ifdim\@linelen<\z@\@badlinearg\else
605 \ifnum\@xarg =\z@ \@vvector
606 \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
609 \else\@badlinearg\fi}
613 % \begin{macro}{\@hvector}
615 \gdef\@hvector{\@hline\hb@xt@\z@{\@linefnt
616 \ifnum \@xarg <\z@ \@getlarrow(1,0)\hss\else
617 \hss\@getrarrow(1,0)\fi}}
621 % \begin{macro}{\@vvector}
623 \gdef\@vvector{\ifnum \@yarg <\z@ \@downvector \else \@upvector \fi}
627 % \begin{macro}{\@svector}
629 \gdef\@svector{\@sline
630 \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi
632 \hskip -\wd\@linechar
633 \@upordown\@clnht \hbox{\@linefnt \if@negarg
634 \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}%
635 \else\@badlinearg\fi}
639 % \begin{macro}{\@getlarrow}
640 % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR}
642 \gdef\@getlarrow(#1,#2){\ifnum #2=\z@ \@tempcnta 27 % '33
644 \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n
645 \advance\@tempcnta -9 \@tempcntb #2\relax\multiply\@tempcntb \tw@
646 \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb
647 \else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64
648 \fi\fi\char\@tempcnta}
652 % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR}
653 % \begin{macro}{\@getrarrow}
655 \gdef\@getrarrow(#1,#2){\@tempcntb #2\relax
656 \ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi
657 \ifcase \@tempcntb\relax \@tempcnta 45 % '55
659 \ifnum #1<\thr@@ \@tempcnta #1\relax\multiply\@tempcnta
660 24\advance\@tempcnta -6 \else \ifnum #1=\thr@@ \@tempcnta 49
661 \else\@tempcnta 58 \fi\fi\or
662 \ifnum #1<\thr@@ \@tempcnta=#1\relax\multiply\@tempcnta
663 24\advance\@tempcnta -\thr@@ \else \@tempcnta 51 \fi\or
664 \@tempcnta #1\relax\multiply\@tempcnta
665 \sixt@@n \advance\@tempcnta -\tw@ \else
666 \@tempcnta #1\relax\multiply\@tempcnta
667 \sixt@@n \advance\@tempcnta 7 \fi\ifnum #2<\z@ \advance\@tempcnta 64 \fi
672 % \begin{macro}{\@vline}
674 \gdef\@vline{\ifnum \@yarg <\z@ \@downline \else \@upline\fi}
678 % \begin{macro}{\@upline}
681 \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
682 \@height \@linelen \@depth \z@\hss}}
686 % \begin{macro}{\@downline}
689 \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
690 \@height \z@ \@depth \@linelen \hss}}
694 % \begin{macro}{\@upvector}
695 % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR}
696 % \changes{v1.1i}{2000/01/15}{Removed space at end-of-line, CAR}
698 \gdef\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char 54}% '66
699 \raise \@linelen \hb@xt@\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}}
703 % \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR}
704 % \begin{macro}{\@downvector}
706 \gdef\@downvector{\@downline\lower \@linelen
707 \hb@xt@\z@{\@linefnt\char 63 % '77
712 % \begin{oldcomments}
713 % \dashbox{D}(X,Y) ==
715 % leave vertical mode
717 % \baselineskip := 0pt
719 % %% HORIZONTAL DASHES
720 % \@dashdim := X * \unitlength
721 % \@dashcnt := \@dashdim + 200 % to prevent roundoff error
722 % \@dashdim := D * \unitlength
723 % \@dashcnt := \@dashcnt / \@dashdim
724 % if \@dashcnt is odd
725 % then \@dashdim := 0pt
726 % \@dashcnt := (\@dashcnt + 1) / 2
727 % else \@dashdim := \@dashdim / 2
728 % \@dashcnt := \@dashcnt / 2 - 1
729 % \box\@dashbox := \hbox{\vrule height \@halfwidth
730 % depth \@halfwidth width \@dashdim}
731 % \put(0,0){\copy\@dashbox}
732 % \put(0,Y){\copy\@dashbox}
733 % \put(X,0){\hskip -\@dashdim\copy\@dashbox}
734 % \put(X,Y){\hskip -\@dashdim\box\@dashbox}
735 % \@dashdim := 3 * \@dashdim
737 % \box\@dashbox := \hbox{\vrule height \@halfwidth
738 % depth \@halfwidth width D * \unitlength
739 % \hskip D * \unitlength}
741 % \put(0,0){\hskip \@dashdim
742 % while \@tempcnta < \@dascnt
744 % \@tempcnta := \@tempcnta + 1
748 % put(0,Y){\hskip \@dashdim
749 % while \@tempcnta < \@dascnt
751 % \@tempcnta := \@tempcnta + 1
756 % \@dashdim := Y * \unitlength
757 % \@dashcnt := \@dashdim + 200 % to prevent roundoff error
758 % \@dashdim := D * \unitlength
759 % \@dashcnt := \@dashcnt / \@dashdim
760 % if \@dashcnt is odd
761 % then \@dashdim := 0pt
762 % \@dashcnt := (\@dashcnt + 1) / 2
763 % else \@dashdim := \@dashdim / 2
764 % \@dashcnt := \@dashcnt / 2 - 1
765 % \box\@dashbox := \hbox{\hskip -\@halfwidth
766 % \vrule width \@wholewidth
768 % \put(0,0){\copy\@dashbox}
769 % \put(X,0){\copy\@dashbox}
770 % \put(0,Y){\lower\@dashdim\copy\@dashbox}
771 % \put(X,Y){\lower\@dashdim\copy\@dashbox}
772 % \@dashdim := 3 * \@dashdim
774 % \box\@dashbox := \hbox{\vrule width \@wholewidth
775 % height D * \unitlength }
777 % put(0,0){\hskip -\halfwidth
778 % \vbox{while \@tempcnta < \@dashcnt
779 % do \vskip D*\unitlength
781 % \@tempcnta := \@tempcnta + 1
786 % put(X,0){\hskip -\halfwidth
787 % \vbox{while \@tempcnta < \@dashcnt
788 % do \vskip D*\unitlength
790 % \@tempcnta := \@tempcnta + 1
801 % \begin{macro}{\dashbox}
803 \gdef\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip
805 \@dashdim #2\unitlength
806 \@dashcnt \@dashdim \advance\@dashcnt 200
807 \@dashdim #1\unitlength\divide\@dashcnt \@dashdim
808 \ifodd\@dashcnt\@dashdim \z@
809 \advance\@dashcnt \@ne \divide\@dashcnt \tw@
810 \else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
811 \advance\@dashcnt \m@ne
812 \setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
813 \@width \@dashdim}\put(0,0){\copy\@dashbox}%
814 \put(0,#3){\copy\@dashbox}%
815 \put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
816 \put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
817 \multiply\@dashdim \thr@@
819 \setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
820 \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
821 \put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
822 \do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
823 \put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
824 \do{\copy\@dashbox\advance\@tempcnta \@ne }}%
825 \@dashdim #3\unitlength
826 \@dashcnt \@dashdim \advance\@dashcnt 200
827 \@dashdim #1\unitlength\divide\@dashcnt \@dashdim
828 \ifodd\@dashcnt \@dashdim \z@
829 \advance\@dashcnt \@ne \divide\@dashcnt \tw@
831 \divide\@dashdim \tw@ \divide\@dashcnt \tw@
832 \advance\@dashcnt \m@ne
833 \setbox\@dashbox\hbox{\hskip -\@halfwidth
834 \vrule \@width \@wholewidth
835 \@height \@dashdim}\put(0,0){\copy\@dashbox}%
836 \put(#2,0){\copy\@dashbox}%
837 \put(0,#3){\lower\@dashdim\copy\@dashbox}%
838 \put(#2,#3){\lower\@dashdim\copy\@dashbox}%
839 \multiply\@dashdim \thr@@
841 \setbox\@dashbox\hbox{\vrule \@width \@wholewidth
842 \@height #1\unitlength}\@tempcnta\z@
843 \put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
844 \do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
845 \vskip\@dashdim}}\@tempcnta\z@
846 \put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
847 \do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
848 \vskip\@dashdim}}}\@makepicbox(#2,#3)}
852 % \begin{oldcomments}
857 % \circle{D} : Produces the circle with the diameter as close as
858 % possible to D * \unitlength. \put(X,Y){\circle{D}}
859 % puts the circle with its center at (X,Y).
861 % \oval(X,Y) : Makes an oval as round as possible that fits in the
862 % rectangle of width X * \unitlength and height
863 % Y * \unitlength. The reference point is the center.
865 % \oval(X,Y)[POS] : Save as \oval(X,Y) except it draws only the
866 % half or quadrant of the oval indicated by POS.
867 % E.G., \oval(X,Y)[t] draws just the top half
868 % and \oval(X,Y)[br] draws just the bottom right
869 % quadrant. In all cases, the reference point is
870 % the same as the unqualified \oval(X,Y) command.
872 % \@ovvert {DELTA1} {DELTA2} : Makes a vbox containing either the left
873 % side or the right side of the oval being constructed. The baseline
874 % will coincide with the outside bottom edge of the oval; the left
875 % side of the box will coincide with the left edge of the vertical
876 % rule. The width of the box will be \@tempdima.
877 % DELTA1 and DELTA2 are added to the character number in \@tempcnta
878 % to get the characters for the top and bottom quarter circle pieces.
880 % \@ovhorz : Makes an hbox containing the straight rule for either the
881 % top or the bottom of the oval being constructed. The baseline
882 % will coincide with bottom edge of the rule; the left side of
883 % the box will coincide with the left side of the oval.
884 % The width of the box will be \@ovxx.
886 % \@getcirc {DIAM} : Sets \@tempcnta to the character number
887 % of the top-right quarter circle with the largest
888 % diameter less than or equal to DIAM.
889 % Sets \@tempboxa to an hbox containing that character.
890 % Sets \@tempdima to \wd \@tempboxa, which is the distance
891 % from the circle's left outside edge to its right
893 % (These characters are like those described in the
894 % TeXbook, pp. 389-90.)
896 % \@getcirc {DIAM} ==
898 % \@tempcnta := integer coercion of (DIAM + 2pt)
899 % + 2pt added 1 Nov 88
900 % \@tempcnta := \@tempcnta / integer coercion of 4pt
902 % then \@tempcnta := 10 fi
904 % then \@tempcnta := \@tempcnta-1
905 % else LaTeX Warning: Oval too small.
907 % \@tempcnta := 4 * \@tempcnta
908 % \@tempboxa := \hbox{\@circlefnt \char \@tempcnta}
909 % \@tempdima := \wd \@tempboxa
912 % \@put{X}{Y}{OBJ} ==
914 % \raise Y \hb@xt@ 0pt{\hskip X OBJ \hss}
917 % \@oval(X,Y)[POS] ==
920 % \boxmaxdepth := \maxdimen
921 % @ovt := @ovb := @ovl := @ovr := true
923 % do @ovE := false od
924 % \@ovxx := X * \unitlength
925 % \@ovyy := Y * \unitlength
926 % \@tempdimb := min(\@ovxx,\@ovyy)
927 % \@getcirc{\@tempdimb-2pt} %% "-2pt" added 7 Dec 89
928 % \@ovro := \ht \@tempboxa
929 % \@ovri := \dp \@tempboxa
930 % \@ovdx := \@ovxx - \@tempdima
932 % \@ovdy := \@ovyy - \@tempdima
938 % then \@ovvert{3}{2} \kern -\@tempdima
941 % then \kern \@ovxx \@ovvert{0}{1} \kern -\@tempdima
945 % then \@ovhorz \kern -\@ovxx
948 % then \raise \@ovyy \@ovhorz
951 % \@ovdx := \@ovdx + \@ovro
952 % \@ovdy := \@ovdy + \@ovro
953 % \ht\@tempboxa := \dp\@tempboxa := 0
954 % \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}
958 % \@ovvert {DELTA1} {DELTA2} ==
962 % then \@tempcntb := \@tempcnta + DELTA1
964 % \hbox { \char \@tempcntb }
966 % else \kern \@ovri \kern \@ovdy
968 % \leaders \vrule width \@wholewidth \vfil
971 % then \@tempcntb := \@tempcnta + DELTA2
972 % \hbox { \char \@tempcntb }
973 % else \kern \@ovdy \kern \@ovro
986 % \leaders \hrule height \@wholewidth \hfil
998 % \boxmaxdepth := maxdimen
999 % \@tempdimb := DIAM *\unitlength
1000 % if \@tempdimb > 15.5pt
1001 % then \@getcirc{\@tempdimb}
1002 % \@ovro := \ht \@tempboxa
1003 % \@tempboxa := \hbox{
1005 % \@tempcnta := \@tempcnta + 2
1007 % \@tempcnta := \@tempcnta - 1
1009 % \kern -2\@tempdima
1010 % \@tempcnta := \@tempcnta + 2
1011 % \raise \@tempdima \hbox { \char \@tempcnta }
1012 % \raise \@tempdima \box\@tempboxa
1014 % \ht\@tempboxa := \dp\@tempboxa := 0
1015 % \@put{-\@ovro}{-\@ovro}{\@tempboxa}
1017 % \@circ{\@tempdimb}{96}
1022 % \circle*{DIAM} == \@dot{DIAM} == \@circ{DIAM*\unitlength}{112}
1024 % \@circ{DIAM}{CHAR} ==
1026 % \@tempcnta := integer coercion of (DIAM + .5pt)/1pt.
1027 % if \@tempcnta > 15 then \@tempcnta := 15 fi
1028 % if \@tempcnta > 1 then \@tempcnta := \@tempcnta - 1 fi
1029 % \@tempcnta := \@tempcnta + CHAR
1036 % \begin{macro}{\if@ovt}
1037 % \begin{macro}{\if@ovb}
1038 % \begin{macro}{\if@ovl}
1039 % \begin{macro}{\if@ovr}
1040 % If producing the Top Bottom Left or Right of an oval.
1053 % \begin{macro}{\@ovxx}
1054 % \begin{macro}{\@ovyy}
1055 % \begin{macro}{\@ovdx}
1056 % \begin{macro}{\@ovdy}
1057 % \begin{macro}{\@ovro}
1058 % \begin{macro}{\@ovri}
1075 % |\advance\@tempdima 2pt\relax| added 1 Nov 88 to fix bug in which
1076 % size of drawn circle not monotonic function of argument of |\circle|,
1077 % caused by different rounding for dimensions of large and small
1081 % \begin{macro}{\@getcirc}
1082 % \changes{v1.1j}{2003/12/30}{issue warning if circle size can't be met pr/3473}
1084 \gdef\@getcirc#1{\@tempdima #1\relax \advance\@tempdima 2\p@
1085 \@tempcnta\@tempdima
1086 \@tempdima 4\p@ \divide\@tempcnta\@tempdima
1087 \ifnum \@tempcnta >10\relax
1091 \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne
1093 % Warn if requirements for oval or circle can't be met.
1094 % \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524}
1096 \else \@picture@warn \fi
1097 \multiply\@tempcnta 4\relax
1098 \setbox \@tempboxa \hbox{\@circlefnt
1099 \char \@tempcnta}\@tempdima \wd \@tempboxa}
1103 % \begin{macro}{\@picture@warn}
1104 % Generic warning for lines, vectors (used in |\@sline|) and
1105 % oval or circle (used in |\@getcirc|) are not available at
1107 % \changes{v1.1g}{1997/09/15}{Macro added pr/2524}
1109 \def\@picture@warn{\@latex@warning{%
1110 \string\oval, \string\circle, or \string\line\space
1115 % \begin{macro}{\@put}
1117 \gdef\@put#1#2#3{\raise #2\hb@xt@\z@{\hskip #1#3\hss}}
1121 % \begin{macro}{\oval}
1123 \gdef\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}}
1129 %<latexrelease>\IncludeInRelease{2016/03/31}%
1130 %<latexrelease> {\@ovhlinetrue}%
1131 %<latexrelease> {Avoid almost zero length leaders}%
1132 %<*2ekernel|latexrelease>
1135 % \begin{macro}{\if@ovvline}
1136 % \changes{v.1l}{2016/03/29}{macro added (latex/4452)}
1137 % \begin{macro}{\if@ovhline}
1138 % \changes{v.1l}{2016/03/29}{macro added (latex/4452)}
1139 % Tests whether horizontal or vertical lines are needed.
1141 \newif\if@ovvline \@ovvlinetrue
1142 \newif\if@ovhline \@ovhlinetrue
1147 % \begin{macro}{\@oval}
1149 \gdef\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
1150 \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
1152 % \changes{v.1l}{2016/03/29}{initialise tests}
1154 \@ovvlinefalse \@ovhlinefalse
1157 \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}%
1158 \@ovxx #1\unitlength
1159 \@ovyy #2\unitlength
1161 % \changes{v.1l}{2016/03/29}{add setting of line tests}
1163 \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
1164 \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi
1167 \advance \@tempdimb -2\p@
1168 \@getcirc \@tempdimb
1169 \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
1170 \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
1171 \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
1173 % \changes{v.1l}{2016/03/29}{add setting of line tests}
1175 \ifdim \@ovdx >\z@ \@ovhlinetrue \fi
1176 \ifdim \@ovdy >\z@ \@ovvlinetrue \fi
1179 \@circlefnt \setbox\@tempboxa
1180 \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi
1181 \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
1182 \if@ovt \@ovhorz \kern -\@ovxx \fi
1183 \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
1184 \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
1185 \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
1190 % \begin{macro}{\@ovvert}
1192 \gdef\@ovvert#1#2{\vbox to\@ovyy{%
1193 \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
1194 \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
1195 \else \kern \@ovri \kern \@ovdy \fi
1197 % \changes{v.1l}{2016/03/29}
1198 % {use glue not leaders if vertical line not required}
1200 \if@ovvline \leaders\vrule \@width \@wholewidth \fi
1203 \vfil \nointerlineskip
1204 \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
1205 \hbox{\char \@tempcntb}%
1206 \else \kern \@ovdy \kern \@ovro \fi}}
1210 % \begin{macro}{\@ovhorz}
1212 \gdef\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro
1213 \if@ovr \else \kern \@ovdx \fi
1215 % \changes{v.1l}{2016/03/29}
1216 % {use glue not leaders if horizontal line not required}
1218 \if@ovhline \leaders \hrule \@height \@wholewidth \fi
1222 \if@ovl \else \kern \@ovdx \fi
1228 %</2ekernel|latexrelease>
1229 %<latexrelease>\EndIncludeInRelease
1230 %<latexrelease>\IncludeInRelease{0000/00/00}%
1231 %<latexrelease> {\@ovhlinetrue}%
1232 %<latexrelease> {Avoid almost zero length leaders}%
1233 %<latexrelease>\let\if@ovvline\@undefined
1234 %<latexrelease>\let\if@ovhline\@undefined
1235 %<latexrelease>\gdef\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
1236 %<latexrelease> \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
1237 %<latexrelease> \@tfor\reserved@a :=#3\do
1238 %<latexrelease> {\csname @ov\reserved@a false\endcsname}%
1239 %<latexrelease> \@ovxx #1\unitlength
1240 %<latexrelease> \@ovyy #2\unitlength
1241 %<latexrelease> \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
1242 %<latexrelease> \advance \@tempdimb -2\p@
1243 %<latexrelease> \@getcirc \@tempdimb
1244 %<latexrelease> \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
1245 %<latexrelease> \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
1246 %<latexrelease> \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
1247 %<latexrelease> \@circlefnt \setbox\@tempboxa
1248 %<latexrelease> \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi
1249 %<latexrelease> \if@ovl
1250 %<latexrelease> \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx
1252 %<latexrelease> \if@ovt \@ovhorz \kern -\@ovxx \fi
1253 %<latexrelease> \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
1254 %<latexrelease> \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
1255 %<latexrelease> \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
1256 %<latexrelease> \endgroup}
1257 %<latexrelease>\gdef\@ovvert#1#2{\vbox to\@ovyy{%
1258 %<latexrelease> \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
1259 %<latexrelease> \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
1260 %<latexrelease> \else \kern \@ovri \kern \@ovdy \fi
1261 %<latexrelease> \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip
1262 %<latexrelease> \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
1263 %<latexrelease> \hbox{\char \@tempcntb}%
1264 %<latexrelease> \else \kern \@ovdy \kern \@ovro \fi}}
1265 %<latexrelease>\gdef\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro
1266 %<latexrelease> \if@ovr \else \kern \@ovdx \fi
1267 %<latexrelease> \leaders \hrule \@height \@wholewidth \hfil
1268 %<latexrelease> \if@ovl \else \kern \@ovdx \fi
1269 %<latexrelease> \kern \@ovri}}
1270 %<latexrelease>\EndIncludeInRelease
1274 % \begin{macro}{\circle}
1275 % \changes{LaTeX2.09}{1993/08/05}
1276 % {(RMS) Added error message if \cs{circle} is used in math mode.}
1278 \gdef\circle{\@inmatherr\circle\@ifstar\@dot\@circle}
1282 % \begin{macro}{\@circle}
1285 \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
1286 \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
1288 \setbox\@tempboxa\hbox{\@circlefnt
1289 \advance\@tempcnta\tw@ \char \@tempcnta
1290 \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima
1291 \advance\@tempcnta\tw@
1292 \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima
1293 \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
1294 \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
1295 \else \@circ\@tempdimb{96}\fi\endgroup}
1299 % \begin{macro}{\@dot}
1300 % Internal form of |\circle*|.
1302 \gdef\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
1306 % \begin{macro}{\@circ}
1308 \gdef\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@
1309 \@tempcnta\@tempdima \@tempdima \p@
1310 \divide\@tempcnta\@tempdima
1311 \ifnum\@tempcnta >15\relax \@tempcnta 15\relax \fi
1312 \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne\fi
1313 \advance\@tempcnta #2\relax
1314 \@circlefnt \char\@tempcnta}
1319 % \begin{macro}{\@xarg}
1320 % \begin{macro}{\@yarg}
1321 % \begin{macro}{\@yyarg}
1322 % Counters used for manipulating the `slope' arguments.
1332 % \begin{macro}{\@multicnt}
1333 % Counter used in |\multiput|, and also |\multicolumn|.
1339 % \begin{macro}{\@xdim}
1340 % \begin{macro}{\yxdim}
1349 % \begin{macro}{\@linechar}
1350 % Box for holding a line segment character, for sloping lines.
1356 % \begin{macro}{\@linelen}
1357 % Length of the line currently being built.
1363 % \begin{macro}{\@clnwd}
1364 % \begin{macro}{\@clnht}
1365 % Height and width of current line segment.
1373 % \begin{macro}{\@dashdim}
1374 % \begin{macro}{\@dashbox}
1375 % \begin{macro}{\@dashcnt}
1376 % |\dashbox| internal registers.
1386 % Initialization: ``|\thinlines|''
1387 % \changes{v1.1f}{1995/10/27}
1388 % {Move initialisation to kernel from autoload file}
1391 \let\@circlefnt\tencirc
1392 \@wholewidth\fontdimen8\tenln
1393 \@halfwidth .5\@wholewidth
1398 % \subsection{Curves}
1399 % The new |\qbezier| command, based on the old |\bezier| defined in
1401 % \changes{v0.1c}{1994/04/28}{bezier curves added}
1403 % \begin{oldcomments}
1405 % \qbezier[N] == \bezier{N}
1407 % \bezier{N}(AX,AY)(BX,BY)(CX,CY) ==
1410 % THEN \@xdima := |BX - AX|
1412 % \@xa := Max(\@xa, \@xb)
1415 % \@ya := Max(\@ya, \@yb)
1416 % @sc := Max(\@xa, \@ya)
1417 % %% The coefficient .5 below is the degree of overlap of
1418 % %% successive points, where 1 is no overlap and 0 is
1419 % %% complete overlap. A coefficient of C multiplies
1420 % %% the number of points plotted by 1/C.
1422 % \@xa := .5 * \@halfwidth
1423 % @sc := @sc / \@halfwidth
1424 % @sc := Max(@sc, qbeziermax)
1427 % \@xb := 2 * (BX - AX) * \unitlength
1428 % \@xa := ((CX-AX)*\unitlength - \@xb)/@sc
1429 % \@yb := 2 * (BY - AY) * \unitlength
1430 % \@ya := ((CY-AY)*\unitlength - \@yb)/@sc
1431 % \@pictdot := square rule of width \@wholewidth
1433 % WHILE \count@ < @scp
1434 % DO \@xdim := ((\count@*\@xa + @xb) / @sc) * \count@
1435 % \@ydim := ((\count@*\@ya + @yb) / @sc) * \count@
1436 % plot pt with relative coords (\@xdim,\@ydim)
1437 % \count@ := \count@+1
1442 % \begin{macro}{\qbeziermax}
1443 % The maximum number of points to plot.
1445 \gdef\qbeziermax{500}
1450 % In the code below, to save registers |\@a| \ldots\ are not used.
1451 % Instead other registers are reused.
1453 % |\newcounter{@sc} -> \c@multicnt|\par
1454 % |\newcounter{@scp} -> \@tempcnta|\par
1455 % |\newdimen\@xa -> \@ovxx|\par
1457 % |\newdimen\@xb -> \@ovdx|
1459 % |\newdimen\@ya -> \@ovyy|\par
1460 % |\newdimen\@yb -> \@ovdy|
1462 % |\newsavebox{\@pictdot} -> \@tempboxa|
1464 % \begin{macro}{\qbezier}
1465 % Main user-level command to plot quadratic bezier curves.
1466 % |#2| should be |(|.
1468 \newcommand\qbezier[2][0]{\bezier{#1}#2}
1472 % \begin{macro}{\bezier}
1473 % Form of |\bezier| compatible with 2.09 |bezier.sty|, but modified to
1474 % ignore spaces between its arguments.
1475 % |#2| should be white space, and |#4| should be |(|.
1477 \gdef\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
1480 % \begin{macro}{\@bezier}
1482 \gdef\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
1484 \@ovxx #4\unitlength
1485 \advance\@ovxx -#2\unitlength
1486 \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
1487 \@ovdx #6\unitlength
1488 \advance\@ovdx -#4\unitlength
1489 \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
1490 \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
1491 \@ovyy #5\unitlength
1492 \advance\@ovyy -#3\unitlength
1493 \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
1494 \@ovdy #7\unitlength
1495 \advance\@ovdy -#5\unitlength
1496 \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi
1497 \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi
1499 \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
1500 \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
1501 \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi
1502 \else \@multicnt#1\relax \fi
1503 \@tempcnta\@multicnt \advance\@tempcnta\@ne
1504 \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
1505 \multiply\@ovdx \tw@
1506 \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
1507 \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
1508 \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
1509 \multiply\@ovdy \tw@
1510 \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
1511 \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
1514 % \changes{v1.1k}{2003/08/27}{added missing displacement pr/3566}
1516 \setbox\@tempboxa\hbox{%
1518 \vrule \@height\@halfwidth
1520 \@width \@wholewidth}%
1523 \@whilenum{\count@<\@tempcnta}\do
1524 {\@xdim\count@\@ovxx
1525 \advance\@xdim\@ovdx
1526 \divide\@xdim\@multicnt
1527 \multiply\@xdim\count@
1529 \advance\@ydim\@ovdy
1530 \divide\@ydim\@multicnt
1531 \multiply\@ydim\count@
1533 \hb@xt@\z@{\kern\@xdim
1534 \unhcopy\@tempboxa\hss}%
1535 \advance\count@\@ne}}}