summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/pict2e/pict2e.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:03:17 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:03:17 +0000
commitecf966f305f6aeff2bbdf42c82d8425921aa9eda (patch)
treedb606a57e3619610e4c35cae849d41cf4e0937d5 /Master/texmf-dist/source/latex/pict2e/pict2e.dtx
parentac3c55a3216b5988f0e48ba9414ddb059f19a699 (diff)
source 1
git-svn-id: svn://tug.org/texlive/trunk@105 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/pict2e/pict2e.dtx')
-rw-r--r--Master/texmf-dist/source/latex/pict2e/pict2e.dtx3239
1 files changed, 3239 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/pict2e/pict2e.dtx b/Master/texmf-dist/source/latex/pict2e/pict2e.dtx
new file mode 100644
index 00000000000..19d15341143
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pict2e/pict2e.dtx
@@ -0,0 +1,3239 @@
+% \iffalse meta-comment
+%
+% Time-stamp: "pict2e.dtx 2004-08-06 15:01:38 CEST Tuesday hubertjg"
+%
+%
+% Copyright (C) 2003, 2004
+% Rolf Niepraschk, Rolf.Niepraschk@ptb.de
+% Hubert Gaesslein, HubertJG@open.mind.de
+%
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% This work consists of all files listed in manifest.txt.
+%
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] % ???
+%<package>\ProvidesPackage{pict2e}
+%<package> [2004/08/06 v0.2q Improved picture commands (HjG,RN)]
+%
+%<*driver>
+\listfiles
+\errorcontextlines5
+\documentclass{ltxdoc}
+\usepackage{pict2e} % [pstarrows]
+%%\usepackage[debug]{pict2e}
+\IfFileExists{ebezier.sty}{\usepackage{ebezier}}{%
+ } % \providecommand*\cbezier{}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{array}
+%%\usepackage{pstcol}
+\usepackage{longtable}
+\IfFileExists{geometry.sty}{%
+ \usepackage[left=\marginparwidth,textwidth=1.15\textwidth,%
+ top=20mm,bottom=30mm]{geometry}}{}
+\IfFileExists{url.sty}{\usepackage{url}}
+ {\newcommand*\url[1]{\texttt{#1}}}
+%%\OnlyDescription
+%%\AlsoImplementation
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+%%\tracingmacros\maxdimen
+%%\tracingall \tracingonline0
+%%\loggingall
+ \setlength\emergencystretch{3em}
+ \DocInput{pict2e.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{pict2e.sty}
+% \def\docdate{2004/08/06}
+%
+% \CheckSum{1499}
+%
+% ^^A ========
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% ^^A ========
+%
+% \makeatletter
+% \@ifundefined{ifdeveloping}{\newif\ifdeveloping}{} ^^A false by default
+% \makeatother
+%
+% ^^A ========
+%
+% \ifdeveloping ^^A Should be further refined
+%
+% \changes{v0.1a}{2003/07/18}{First version. New code for \cmd{\@sline}. (RN)}
+% \changes{v0.1b}{2003/07/20}{New code for \cmd{\@circle} and \cmd{\@dot}
+% added. (RN)}
+% \changes{v0.1c}{2003/07/21}{More flexibility with sampling the graphic
+% operators in token register (\cmd{\pIIe@GRAPH}). (RN)}
+% \changes{v0.1c}{2003/07/21}{Code for \cmd{\@bezier} added. (RN)}
+% \changes{v0.1d}{2003/07/22}{New code for \cmd{\cbezier}
+% (package `ebezier'). (RN)}
+% \changes{v0.1e}{2003/07/24}{New option ``debug''}
+% \changes{v0.1f}{2003/08/17}{Changed mode numbers. (RN)}
+% \changes{v0.1f}{2003/08/17}{\cmd{\pIIe@add@rcurveto} added. (RN)}
+% \changes{v0.1f}{2003/08/17}{\cmd{\pIIe@add@XY} added. (RN)}
+% \changes{v0.1g}{2003/08/23}{Changed code for \cmd{\pIIe@add@qcircle}.
+% (HjG,RN)}
+% \changes{v0.1g}{2003/08/23}{New code for \cmd{\@oval}. (HjG,RN)}
+% \changes{v0.1i}{2003/08/28}{Translation, scaling, rotation added. (HjG,RN)}
+% \changes{v0.1j}{2003/08/29}{Loads now `color.cfg' instead of `graphics.cfg'
+% for system default driver (no more trouble with commands like
+% \cmd{\DeclareGraphicsRule}) (RN)}
+% \changes{v0.1j}{2003/08/29}{Driver specific code now in new files
+% ``p2e-DRIVER.def''. (RN)}
+% \changes{v0.1k}{2003/08/30}{\cmd{\pIIe@PTtoBP} removed. Scaling with
+% PS/PDF code instead. (RN)}
+% \changes{v0.1l}{2003/09/24}{First implementation of \cmd{\vector}. (RN,HjG)}
+% \changes{v0.1m}{2003/09/26}{\cmd{\vector} complete (arctan version). (RN,HjG)}
+% \changes{v0.1n}{2003/10/01}{Loads now the own configuration file `pict2e.cfg'
+% instead of `color.cfg' (RN,HjG)}
+% \changes{v0.1n}{2003/10/01}{New Option `hide' suppresses the ps or pdf output (RN)}
+% \changes{v0.1o}{2003/10/17}{New implementation of opt. arg. to \cmd{\oval} (HjG,RN)}
+% \changes{v0.1p}{2003/10/29}{Improve \cmd{\@sline} (HjG,RN)}
+% \changes{v0.1p}{2003/10/29}{Some cleaning (HjG,RN)}
+% \changes{v0.1p}{2003/10/29}{Rudimentary Documentation, translated to English (HjG,RN)}
+% \changes{v0.1q}{2003/11/02}{Small fixes in documentation (HjG)}
+% \changes{v0.1r}{2003/11/12}{Cleaning and revamping (RN,HjG)}
+% \changes{v0.1r}{2003/11/12}{Rename commands: operators get `@op' suffix,
+% drawing commands loose `@add' (RN,HjG)}
+% \changes{v0.1s}{2003/11/13}{Avoid use of dimen registers
+% \cmd{\@tempdima} and \cmd{\@tempdimb} in all but low level auxillary
+% macros -- avoid potential pitfall (RN,HjG)}
+% \changes{v0.1t}{2003/11/13}{Some code and documentation cleaning (RN)}
+% \changes{v0.1u}{2003/11/18}{M-x delete-trailing-whitespace (HjG)}
+% \changes{v0.1u}{2003/11/19}{Some cleaning and revamping (HjG)}
+% \changes{v0.1u}{2003/11/20}{Finally, bring code snippets in a more
+% meaningful order (HjG)}
+% \changes{v0.1u}{2003/11/21}{Save many tokens by introducing ancillary macros (HjG)}
+% \changes{v0.1v}{2003/11/21}{More cleaning and revamping (HjG)}
+% \changes{v0.1v}{2003/11/22}{Return of ``cleaning and revamping'' (HjG)}
+% \changes{v0.1w}{2003/11/25}{Son of ``cleaning and revamping'' (HjG)}
+% \changes{v0.1w}{2003/11/25}{More documentation about usage (HjG)}
+% \changes{v0.1w}{2003/11/27}{Small fixes (RN,HjG)}
+% \changes{v0.1x}{2003/11/27}{Improve PSTricks-like arrows. (RN,HjG)}
+% \changes{v0.1y}{2003/11/27}{Implement LaTeX-like arrows. (RN,HjG)}
+% \changes{v0.1z}{2003/12/04}{Change \cmd{\cbezier}. (RN,HjG)}
+% \changes{v0.2a}{2003/12/04}{Return of the son of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2a}{2003/12/05}{M-x delete-trailing-whitespace (HjG)}
+% \changes{v0.2}{2003/12/11}{Minor changes. (RN,HjG)}
+% \changes{v0.2b}{2003/12/13}{Merge v0.2a and v0.2 (HjG)}
+% \changes{v0.2c}{2003/12/13}{Grandson of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2c}{2003/12/13}{Try new driver for \textsf{xdvi}---to no avail (HjG)}
+% \changes{v0.2*}{2003/12/17}{Improve LaTeX-like arrows. (RN,HjG)}
+% \changes{v0.2d}{2003/12/18}{Merge v0.2c and v0.2*. (HjG)}
+% \changes{v0.2e}{2003/12/18}{Merge new figures created by RN. (HjG)}
+% \changes{v0.2e}{2003/12/19}{Return of the grandson of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2f}{2003/12/19}{Cousin of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2f}{2003/12/20}{Return of the cousin of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2g}{2003/12/21}{Nephew of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2h}{2004/01/07}{Documentation and small code improvements (RN,HjG)}
+% \changes{v0.2i}{2004/01/29}{Slope arguments for \cmd{\vector} restricted
+% to values $\vert s \vert \le 1000$ (RN,HjG)}
+% \changes{v0.2i*}{2004/02/11}{Final touches for release (RN)}
+% \changes{v0.2j}{2004/02/19}{Final touches for release (HjG)}
+% \changes{v0.2k}{2004/03/24}{Return of the nephew of ``cleaning and revamping'' (HjG)}
+% \changes{v0.2k}{2004/03/26}{Better control for history entries
+% while debugging (HjG)}
+% \changes{v0.2l}{2004/04/08}{Added redefinition of \cmd{\line} (RN,HjG)}
+% \changes{v0.2m}{2004/04/10}{Minor touches (HjG)}
+% \changes{v0.2n}{2004/04/22}{Added lppl (RN,HjG)}
+% \changes{v0.2o}{2004/06/25}{Fix two bugs (HjG)}
+% \changes{v0.2o}{2004/06/25}{Numerous small fixes in documentation (HjG)}
+% \changes{v0.2p}{2004/07/06}{Small fixes in documentation (HjG)}
+%
+% \fi
+%
+% \changes{v0.1a}{2003/07/18}{First version. (RN)}
+% \changes{v0.2j}{2004/02/27}{First release to CTAN
+% (2004/02/19 v0.2j). (LaTeX Team)}
+% \changes{v0.2n}{2004/05/27}{Second release to CTAN
+% (2004/04/22 v0.2n). (RN/HjG)}
+% \changes{v0.2o}{2004/06/25}{Third release to CTAN
+% (2004/06/25 v0.2o). (RN/HjG)}
+% \changes{v0.2p}{2004/07/28}{Fourth release to CTAN
+% (2004/07/28 v0.2p). (RN)}
+% \changes{v0.2q}{2004/08/06}{Fourth release to CTAN
+% (2004/08/06 v0.2q). (RN/HjG)}
+%
+%
+% \DoNotIndex{\newcommand,\renewcommand,\newenvironment,\renewenvironment}
+% \DoNotIndex{\providecommand,\def,\edef,\let,\gdef,\xdef,\global,\newtoks}
+% \DoNotIndex{\RequirePackage,\DeclareOption,\ProcessOptions,\ExecuteOptions}
+% \DoNotIndex{\input,\InputIfFileExists}
+% \DoNotIndex{\@ifdefinable,\@ifundefined,\@percentchar}
+% \DoNotIndex{\AtBeginDocument,\AtEndOfPackage}
+% \DoNotIndex{\PackageError,\PackageWarning,\PackageWarningNoLine,\PackageInfo}
+% \DoNotIndex{\MessageBreak,\typeout}
+%
+% \DoNotIndex{\z@,\z@skip,\p@,\@ne,\tw@,\thr@@,\@iv,\two@fourteen,\strip@pt}
+% \DoNotIndex{\the,\if,\else,\or,\fi,\ifnum,\ifdim,\ifcase,\ifodd}
+% \DoNotIndex{\advance,\multiply,\divide}
+% \DoNotIndex{\@tfor,\do}
+% \DoNotIndex{\csname,\endcsname,\begingroup,\endgroup}
+% \DoNotIndex{\expandafter,\afterassignment,\noexpand}
+%
+% \changes{v0.1w}{2003/11/25}{Index use of temporary registers
+% while debugging (HjG)}
+% \changes{v0.2k}{2004/03/26}{Better control for indexing temporary
+% registers while debugging (HjG)}
+%^^A \ifdim0pt<\overfullrule\else
+% \ifdeveloping\else
+% \DoNotIndex{\@tempdima,\@tempdimb,\@tempdimc,\@tempcnta,\@tempcntb}
+% \DoNotIndex{\@halfwidth,\@wholewidth,\unitlength}
+% \DoNotIndex{\@clnwd,\@clnht,\@ovdx,\@ovdy,\@ovro,\@ovri,\@ovxx,\@ovyy}
+% \DoNotIndex{\@xarg,\@xdim,\@yarg,\@ydim,\@linelen,\@dashdim,\dimen@}
+% \fi
+%
+% \DoNotIndex{\reserved@a,\relax,\protect,\space}
+% \DoNotIndex{\if@tempswa,\@tempswatrue,\@tempswafalse}
+% \DoNotIndex{\if@ovt,\if@ovb,\if@ovl,\if@ovr}
+% \DoNotIndex{\@ovttrue,\@ovbtrue,\@ovltrue,\@ovrtrue}
+% \DoNotIndex{\@ovtfalse,\@ovbfalse,\@ovlfalse,\@ovrfalse}
+%
+% \DoNotIndex{\pdfcompresslevel}
+%
+% \DoNotIndex{\x,\y}
+% ^^A \DoNotIndex{}
+%
+% \newcommand*\BigIndent{\hspace{.2\linewidth}}
+% \renewcommand*\floatpagefraction{0.8}
+%
+% \newcommand*\PS{PostScript}
+% \newcommand*\PSTricks{PSTricks}
+% \newcommand*\PDF{PDF}
+% \newcommand*\SL{Standard \LaTeX}
+% ^^A stolen from pictex.tex
+% \newcommand*\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+% \newcommand*\PiCTeX{\PiC\kern-.11em\TeX}
+% \newcommand*\teTeX{te\kern-.11em\TeX}
+% \newcommand*\TeXlive{\TeX live}
+%
+% \newenvironment*{ltxquote}{\quote\slshape}{\endquote}
+%
+% \changes{v0.2k}{2004/03/26}{Better control over funny pagestyle
+% while debugging (HjG)}
+% \changes{v0.2l}{2004/04/08}{Even better control over funny pagestyle
+% while debugging (RN)}
+% \ifdeveloping
+% \makeatletter
+%
+% \newcommand*\isodattim{}
+% \begingroup
+% \count@\time
+% \divide\count@ 60
+% \count2=-\count@
+% \multiply\count2 60
+% \advance\count2 \time
+% \xdef\isodattim{^^A
+% \the\year-\two@digits{\the\month}-\two@digits{\the\day}^^A
+% ~\two@digits{\the\count@}:\two@digits{\the\count2}}
+% \endgroup
+%
+% \newcommand*\ps@myfootings{^^A cf. \ps@plain
+% \let\@mkboth\@gobbletwo
+% \let\@oddhead\@empty
+% \let\@evenhead\@empty
+% \def\@oddfoot{\reset@font
+% \rlap{\textsf{\filename}~\fileversion~\filedate}^^A
+% \hfil\thepage\hfil
+% \llap{\TeX ed \texttt{\isodattim}}}^^A
+% \def\@evenfoot{\reset@font
+% \rlap{\TeX ed \texttt{\isodattim}}^^A
+% \hfil\thepage\hfil
+% \llap{\filedate~\fileversion~\textsf{\filename}}}^^A
+% }
+% \pagestyle{myfootings}
+% \let\pagestyle\@gobble
+% \let\thispagestyle\@gobble
+%
+% \makeatother
+% \else
+% \makeatletter
+% ^^A \ifdim\overfullrule>\z@\else\let\ps@myfootings\ps@plain\fi
+% \makeatother
+% \fi
+%
+% \DeleteShortVerb{\|}
+% \newcommand*\abs[1]{\ensuremath{|#1|}}
+% \MakeShortVerb{\|}
+%
+% ^^A ========
+%
+% \newcommand*\OPOINT{^^A
+% \begingroup
+% \setlength\unitlength{.8pt}^^A
+% \circle{5}^^A
+% \endgroup
+% }
+% \newcommand*\FPOINT{^^A
+% \begingroup
+% \setlength\unitlength{.8pt}^^A
+% \circle*{5}^^A
+% \endgroup
+% }
+% \newcommand*\THICKLINES{\linethickness{1.4pt}}
+% \newcommand*\CBEZIER[4]{^^A
+% \cbezier(#1)(#2)(#3)(#4)^^A
+% \put(#2){\FPOINT}\put(#3){\FPOINT}}
+%
+% \newcommand*\LINETEST[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \begin{minipage}{100\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(100,100)^^A (-50,-50)^^A
+% \put(0,0){\framebox(100,100){}}^^A
+% \linethickness{2.6\unitlength}
+% \put(0,0){\line(1,0){50}}^^A
+% \put(0,0){\line(2,1){50}}^^A
+% \put(0,0){\line(1,1){50}}^^A
+% \put(0,0){\line(1,2){50}}^^A
+% \put(0,0){\line(0,1){50}}^^A
+% \ifnum #1>0
+% \color{red}^^A
+% \linethickness{3.8\unitlength}^^A
+% \put(50,0){\line(966,259){25}}^^A 15 degrees
+% \put(50,0){\line(866,500){25}}^^A 30 degrees
+% \put(50,0){\line(707,707){25}}^^A 45 degrees
+% \put(50,0){\line(500,866){25}}^^A 60 degrees
+% \put(50,0){\line(259,966){25}}^^A 75 degrees
+% \normalcolor^^A
+% \fi
+% \color{blue}^^A
+% \thicklines
+% \put(50,0){\line(4,2){50}}
+% \put(50,0){\line(2,4){50}}
+% ^^A \put(50,0){\line(5,5){50}}
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\VECTORTEST[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \begin{minipage}{100\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(100,100)(-50,-50)^^A
+% \put(-50,-50){\framebox(100,100){}}^^A
+% \thinlines
+% \put(0,0){\vector(1,0){50}}^^A
+% \thicklines
+% \put(0,0){\vector(2,1){50}}^^A
+% \linethickness{1.4pt}^^A
+% \put(0,0){\vector(1,1){50}}^^A
+% \linethickness{2.0pt}^^A
+% \put(0,0){\vector(1,2){25}}^^A
+% \ifnum #1>0
+% \color{red}^^A
+% \linethickness{2.6pt}^^A
+% \put(0,0){\vector(259,966){13}}^^A 75 degrees
+% \linethickness{3.8pt}^^A
+% \put(0,0){\vector(-259,966){13}}^^A
+% \normalcolor^^A
+% \fi
+% \linethickness{3.2pt}^^A
+% \put(0,0){\vector(0,1){50}}^^A
+% \linethickness{4.4pt}^^A
+% \put(0,0){\vector(-1,1){50}}^^A
+% \linethickness{5.0pt}^^A
+% \put(0,0){\vector(-1,-1){50}}^^A
+% \linethickness{8.0pt}^^A
+% \put(0,0){\vector(1,-1){50}}^^A
+% \thicklines^^A
+% \thinlines^^A
+% \put(1,-30){\line(1,0){10}}^^A
+% \put(-1,-30){\line(-1,0){10}}^^A
+% \put(0,-30){\vector(0,-1){0}}^^A
+% \put(0,-30){\vector(1,1){0}}^^A
+% \put(0,-30){\vector(-1,1){0}}^^A
+% ^^A \put(0,15){\psline[linecolor=green,linewidth=8.0pt,unit=\unitlength]{->}(50,-50)}^^A
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\CIRCLETEST[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \setlength\fboxsep{0pt}
+% \fbox{^^A
+% \begin{minipage}{118\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(118,60)(-45,-30)^^A
+% \linethickness{1.6pt}^^A
+% \put(-30,0){\circle{15}}^^A
+% \put(-20,0){\circle{20}}^^A
+% \put(-10,0){\circle{25}}^^A
+% \put(0,0){\circle{30}}^^A
+% \put(10,0){\circle{35}}^^A
+% \put(20,0){\circle{40}}^^A
+% \put(30,0){\circle{45}}^^A
+% \put(40,0){\circle{50}}^^A
+% \end{picture}^^A
+% \par
+% \begin{picture}(118,35)(-45,-20)^^A
+% \put(-20,0){\circle*{30}}^^A
+% \put(-10,0){\circle*{25}}^^A
+% \put(0,0){\circle*{20}}^^A
+% \put(10,0){\circle*{15}}^^A
+% \put(20,0){\circle*{12}}^^A
+% \put(30,0){\circle*{9}}^^A
+% \put(40,0){\circle*{6}}^^A
+% \put(50,0){\circle*{3}}^^A
+% \end{picture}^^A
+% \end{minipage}}
+% }
+%
+% \newcommand*\OVALTESTi[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \begin{minipage}{100\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(100,80)^^A
+% \put(0,0){\framebox(100,80){}}
+% ^^A \linethickness{1\unitlength}
+% \thicklines
+% ^^A \color{blue}^^A
+% \put(55,40){\oval[2](80,70)[r]}^^A
+% \put(55,40){\oval[2](65,40)[r]}^^A
+% \put(55,40){\oval[2](60,20)[r]}^^A
+% \put(55,40){\oval[2](55,15)[r]}^^A
+% \put(55,40){\oval[2](50,10)[r]}^^A
+% \put(55,40){\oval[2](45,5)[r]}^^A
+% \put(55,40){\oval[2](40,2)[r]}^^A
+% ^^A \color{black}^^A
+% \put(45,40){\oval(80,70)[l]}^^A
+% \put(45,40){\oval(65,40)[l]}^^A
+% \put(45,40){\oval(60,20)[l]}^^A
+% \put(45,40){\oval(55,15)[l]}^^A
+% \put(45,40){\oval(50,10)[l]}^^A
+% \put(45,40){\oval(45,5)[l]}^^A
+% \put(45,40){\oval(40,2)[l]}^^A
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\OVALTESTii[1]{^^A
+% \renewcommand*\maxovalrad{#1}^^A
+% \setlength\unitlength{.0060\linewidth}^^A
+% \noindent
+% \begin{minipage}{155\unitlength}
+% \begin{picture}(155,50)^^A
+% \put(0,0){\framebox(155,50){}}^^A
+% \put(0,0){^^A NE
+% \setlength\unitlength{.5\unitlength}^^A
+% \begin{picture}(100,100)(-50,-50)^^A
+% \put(-50,-50){\framebox(100,100){}}^^A
+% \put(0,0){\oval(80,80)}%
+% \put(0,0){\makebox(0,0){2.5}}%
+% \end{picture}^^A
+% }^^A
+% \put(55,0){^^A NW
+% \setlength\unitlength{.4\unitlength}^^A
+% \begin{picture}(100,100)(-50,-50)^^A
+% \put(-50,-50){\framebox(100,100){}}^^A
+% \put(0,0){\oval(80,80)}%
+% \put(0,0){\makebox(0,0){2}}%
+% \end{picture}^^A
+% }^^A
+% \put(100,0){^^A SW
+% \setlength\unitlength{.3\unitlength}^^A
+% \begin{picture}(100,100)(-50,-50)^^A
+% \put(-50,-50){\framebox(100,100){}}^^A
+% \put(0,0){\oval(80,80)}%
+% \put(0,0){\makebox(0,0){1.5}}%
+% \end{picture}^^A
+% }^^A
+% \put(135,0){^^A SE
+% \setlength\unitlength{.2\unitlength}^^A
+% \begin{picture}(100,100)(-50,-50)^^A
+% \put(-50,-50){\framebox(100,100){}}^^A
+% \put(0,0){\oval(80,80)}%
+% \put(0,0){\makebox(0,0){1}}%
+% \end{picture}^^A
+% }^^A
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\QBEZIERTEST[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \begin{minipage}{120\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(120,100)^^A
+% \put(0,0){\framebox(120,100){}}
+% \qbezier[0](10,10)(40,90)(110,90)
+% \put(10,10){\FPOINT}\put(40,90){\OPOINT}\put(110,90){\FPOINT}
+% \color{green}^^A
+% \qbezier[0](10,10)(20,90)(30,10)
+% \put(10,10){\FPOINT}\put(20,90){\OPOINT}\put(30,10){\FPOINT}
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\CBEZIERTEST[1][1]{^^A
+% \setlength\unitlength{.01\linewidth}^^A
+% \begin{minipage}{80\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(80,80)(-40,-40)^^A
+% \put(-40,-40){\framebox(80,80){}}
+% \cbezier(-10,-10)(-30,30)(30,30)(30,-5)
+% \cbezier(30,-5)(30,-30)(0,-35)(-20,-20)
+% \put(-10,-10){\FPOINT}
+% \put(-30,30){\OPOINT}\put(30,30){\OPOINT}
+% \put(30,-5){\FPOINT}
+% \put(30,-30){\OPOINT}\put(0,-35){\OPOINT}
+% \put(-20,-20){\FPOINT}
+% \color{green}^^A
+% \cbezier(0,36)(24,36)(24,24)(0,0)
+% \cbezier(0,0)(-24,-24)(-24,-36)(0,-36)
+% \put(0,36){\FPOINT}
+% \put(24,36){\OPOINT}\put(24,24){\OPOINT}
+% \put(0,0){\FPOINT}
+% \put(-24,-24){\OPOINT}\put(-24,-36){\OPOINT}
+% \put(0,-36){\FPOINT}
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% \newcommand*\QCBEZIERTEST[1][1]{^^A
+% \setlength\unitlength{.007\linewidth}^^A
+% \begin{minipage}{100\unitlength}
+% \ifnum #1>0 \else\OriginalPictureCmds\fi^^A
+% \begin{picture}(100,120)(-50,-60)^^A
+% \put(-50,-60){\framebox(100,120){}}
+% \color{green}^^A
+% \qbezier[0](-40,-30)(-30,10)(0,10)
+% \qbezier[0](0,10)(30,10)(40,50)
+% \put(-40,-30){\FPOINT}\put(-30,10){\OPOINT}
+% \put(0,10){\FPOINT}
+% \put(30,10){\OPOINT}\put(40,50){\FPOINT}
+% \color{black}^^A
+% \cbezier[0](-40,-50)(-20,30)(20,-50)(40,30)
+% \put(-40,-50){\FPOINT}\put(-20,30){\OPOINT}
+% \put(20,-50){\OPOINT}\put(40,30){\FPOINT}
+% \end{picture}^^A
+% \end{minipage}
+% }
+%
+% ^^A ========
+%
+% \newcommand*\Acknowledgements{%
+% \section*{Acknowledgements}
+% We would like to thank Michael Wichura for granting us permission to
+% use his implementation of the algorithm for ``pythagorean addition''
+% from his \PiCTeX\ package.
+% Thanks go to Michael Vulis (MicroPress) for hints regarding a driver
+% for the \textsf{V\TeX} system.
+% Walter Schmidt has reviewed the documentation and code, and has
+% tested the V\TeX\ driver.
+% The members of the ``\TeX-Stamm\-tisch'' in Berlin, Germany, have
+% been involved in the development of this package as our guinea pigs,
+% i.e., alpha-testers;
+% Jens-Uwe Morawski and Herbert Voss have also been helpful with many
+% suggestions and discussions.
+% \par
+% Finally we thank the members of The \LaTeX\ Team for taking the time
+% to evaluate our new implementation of the picture mode commands, and
+% eventually accepting it as the ``official'' \textsf{pict2e} package,
+% as well as providing the \texttt{README} file.
+% \par
+% }
+%
+% ^^A ========
+%
+% \title{The \textsf{pict2e} package\thanks{This document
+% corresponds to \textsf{\filename} \fileversion,
+% dated \filedate, documentation dated \docdate.}}
+% \author{%
+% Hubert G\"a{\ss}lein\thanks{\texttt{HubertJG@open.mind.de}}
+% \,and
+% Rolf Niepraschk\thanks{\texttt{Rolf.Niepraschk@ptb.de}}}
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package was described in the 2nd edition of ``\LaTeX{}: A
+% Document Preparation System'', but the \LaTeX{} project team
+% declined to produce the package.
+% For a long time, \LaTeX{} has included a ``pict2e package''
+% that merely produced an apologetic error message.
+%
+% The new package extends the existing \LaTeX{} \texttt{picture}
+% environment, using the familiar technique (cf.\ the
+% \textsf{graphics} and \textsf{color} packages) of driver
+% files.
+% In the user-level part of this documentation there is a fair
+% number of examples of use, showing where things are improved by
+% comparison with the \SL\ \texttt{picture} environment.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \listoffigures
+%
+% \section{Introduction}
+%
+% Here's a quote from the obsolete original official version of the
+% \textsf{pict2e} package (1993--2003):
+% \begin{ltxquote}
+% The package \textsf{pict2e} that is mentioned in the 2nd edition of
+% ``\LaTeX: A Document Preparation System'' has not yet been produced.
+% It is unlikely that the \LaTeX3 Project Team will ever produce this
+% package thus we would be very happy if someone else creates it.
+% \end{ltxquote}
+% Finally,
+% \marginpar[\hfill\texttt{:-)}]{\texttt{:-)}}
+% someone has produced a working implementation of the
+% \textsf{pict2e} package.
+%
+% This package redefines some of the drawing commands of the \LaTeX\ %
+% \textsf{picture} environment.
+% Like the \textsf{graphics} and \textsf{color} packages, it uses
+% driver files.
+%
+% ^^A Depending on the output format, we use \PS\ or \PDF\ Operators.
+% Currently there are only back-ends for \PS\ and \PDF.
+% (Other output formats may be added in the future.)
+%
+% \bigskip ^^A \pagebreak[2]
+% \noindent
+% Note/Warning:
+% \begin{itemize}
+% \item Documentation has been written somewhat ``hastily'' and may be
+% inaccurate.
+% \item
+% The status of this package is currently somewhere between ``beta''
+% and ``release'' \dots\
+% Users and package programmers should \emph{not} rely on
+% \emph{any} feature sported by the internal commands.
+% (Especially, the internal control sequence names may change without
+% notice in future versions of this package.)
+% \end{itemize}
+%
+% \section{Usage}
+%
+% To use the \textsf{pict2e} package, you put a
+% |\usepackage|\linebreak[0]\oarg{optionlist}\linebreak[0]|{pict2e}|
+% instruction in the preamble of your document.
+% Likewise, class or package writers just say
+% |\RequirePackage|\linebreak[0]\oarg{optionlist}\linebreak[0]|{pict2e}|
+% in an appropriate place in their class or package file.
+% (Nothing unusual here.)
+%
+% \noindent
+% Like the \textsf{graphics} and \textsf{color} packages, the
+% \textsf{pict2e} package supports a
+% configuration file (see Section~\ref{sec:cfg-file}).
+%
+% \subsection{Package options}
+%
+% \subsubsection{Driver options}
+%
+% \begin{minipage}{.5\textwidth}
+% \begin{tabular}{@{}lc@{\qquad\qquad}lc@{}}
+% driver & notes & driver & notes\\ \hline
+% dvips & x & dvipsone & x? \\
+% xdvi & x & dviwindo & x? \\
+% pdftex & x & dvipdf & x? \\
+% vtex & x & textures & x? \\
+% dvipdfm & x & pctexps & x? \\
+% oztex & (x) & pctex32 & x? \\ \hline
+% ^^A emtex & --
+% \end{tabular}
+%
+% \smallskip
+% \noindent x\,=\,supported; (x)\,=\,supported but untested; \par
+% \noindent x?\,=\,not yet implemented
+% ^^A --\,=\,unlikely to be ever supported
+% \end{minipage}
+%
+% \smallskip
+% The driver options are (mostly) implemented by means of definition
+% files (|p2e-|\meta{driver}\linebreak[0]|.def|).
+% For details, see file \texttt{p2e-drivers.dtx}.
+%
+% \begin{em}
+% Note:
+% You should specify the same driver for \textsf{pict2e} you use with
+% the \textsf{graphics/x} and \textsf{color} packages.
+% Otherwise, things may go haywire.
+% \par
+% \end{em}
+%
+% \subsubsection{Other options}
+%
+% Currently, there are two options that allow you to choose between
+% variants of the arrows-heads generated by the \cmd{\vector}
+% command.
+% See Figure~\ref{fig:vector:comparison}
+% in Section~\ref{sec:usage:vector} for the difference.
+%
+% \noindent
+% \begin{tabular}{@{}lp{.7\textwidth}@{}}
+% option & meaning \\
+% \hline
+% ltxarrows & Draw \LaTeX\ style vectors (default). \\
+% pstarrows & Draw \PSTricks\ style vectors. \\
+% \hline
+% \end{tabular}
+%
+% \subsubsection{Debugging options}
+%
+% These options are (mainly) for development and testing purposes.
+%
+% \noindent
+% \begin{tabular}{@{}lp{.7\textwidth}@{}}
+% option & meaning \\
+% \hline
+% original & Suppresses the new definitions. \\
+% debug & Suppresses the compressing of pdf\TeX\ output;
+% marks the \textsf{pict2e} generated code in the output
+% files. \\
+% hide & Suppresses all graphics output from \textsf{pict2e}. \\
+% \hline
+% \end{tabular}
+%
+% \subsection{Configuration file}
+% \label{sec:cfg-file}
+%
+% Similar to the \textsf{graphics} and \textsf{color} packages,
+% in most cases it is not necessary to give a driver option explicitly
+% withe the \cmd{\usepackage} (or \cmd{\RequirePackage}) command,
+% if a suitable configuration file \texttt{pict2e.cfg} is present on your
+% system (see the example file \texttt{pict2e-example.cfg}).
+% On many systems it may be sufficient to copy
+% \texttt{pict2e-example.cfg} to \texttt{pict2e.cfg};
+% on others you might need to modify your copy to suit your system.
+%
+% \subsection{Details: Changes to user-level commands}
+%
+% This section describes the improvements of the new implementation of
+% (some of) the \texttt{picture} commands.
+% For details, look up ``\texttt{pict2e} package'' in the index of the
+% \LaTeX\ manual~\cite{LAMPORT}.
+%
+% Here's a collection of quotes relevant to the \textsf{pict2e} package
+% from the \LaTeX\ manual~\cite{LAMPORT}.
+%
+% ^^A Indicate Chapter/Section with these quotes ???
+%
+% From \cite[p.~118]{LAMPORT}:
+% \begin{ltxquote}
+% However, the \texttt{pict2e} package uses device-driver support to
+% provide enhanced versions of these commands that remove some of
+% their restrictions.
+% The enhanced commands can draw straight lines and arrows of any
+% slope, circles of any size, and lines (straight and curved) of any
+% thickness.
+% \end{ltxquote}
+%
+% From \cite[p.~179]{LAMPORT}:
+% \begin{ltxquote}
+% \begin{description}
+% \item[\texttt{pict2e}]
+% Defines enhanced versions of the \texttt{picture} environment
+% commands that remove restrictions on the line slope, circle
+% radius, and line thickness.
+% \end{description}
+% \end{ltxquote}
+%
+% From \cite[pp.~221--223]{LAMPORT}:
+% \begin{ltxquote}
+% \begin{description}
+% \item[\cmd{\qbezier}]\mbox{}\\
+% (With the \texttt{pict2e} package, there is no limit to the
+% number of points plotted.)
+% \item[\cmd{\line}\textrm{ and }\cmd{\vector}]
+% Slopes $\abs x,\abs y \le 6 \mbox{ or } 4$, with no common
+% divisor except $\pm1$:\\
+% (These restrictions are eliminated by the \texttt{pict2e}
+% package.)
+% \item[\cmd{\line}\textrm{ and }\cmd{\vector}]
+% Smallest horizontal extent of sloped lines and vectors that can
+% be drawn:\\
+% (This does not apply when the \texttt{pict2e} package is
+% loaded.)
+% \item[\cmd{\circle}\textrm{ and }\cmd{\circle*}]
+% Largest circles and disks that can be drawn:\\
+% (With the \texttt{pict2e} package, any size circle or disk can
+% be drawn.)
+% \item[\cmd{\oval}]
+% \oarg{rad}:\\
+% An explicit \emph{rad} argument can be used only with the
+% \texttt{pict2e} package; the default value is the radius of the
+% largest quarter-circle \LaTeX\ can draw without the
+% \texttt{pict2e} package.
+% \end{description}
+% \end{ltxquote}
+%
+% \subsubsection{Line}
+% \label{sec:usage:line}
+%
+% \DescribeMacro\line
+% |\line|\parg{X,Y}\marg{LEN}\\
+% In the \SL\ implementation the slope arguments \parg{X,Y} are
+% restricted to integers in the range $-6 \le X,Y \le +6$, with no
+% common divisors except $\pm 1$.
+% (I.e., $X$ and $Y$ must be relatively prime.)
+% Furthermore, only horizontal and vertical lines can assume arbitrary
+% thickness;
+% sloped lines are restricted to the widths given by
+% the |\thinlines| and |\thicklines| declarations
+% (i.e., 0.4pt and 0.8pt, respectively).
+%
+% From \cite[p.~222]{LAMPORT}:
+% \begin{ltxquote}
+% These restrictions are eliminated by the \texttt{pict2e} package.
+% \end{ltxquote}
+%
+% However, to avoid overflow of \TeX's integer (dimen) arithmetic,
+% the current implementation restricts the slope arguments to
+% integers in the range $-1000 \le X,Y \le +1000$, which should be
+% enough.
+% ^^A ???
+%
+% Furthermore, unlike the \SL\ implementation, which silently converts
+% the ``impossible'' slope to a vertical line extending in the upward
+% direction ($(0,0) \mapsto (0,1)$), the \textsf{pict2e} package now
+% treats this as an error.
+% ^^A ???
+%
+% In the \SL\ implementation the horizontal extent of sloped lines
+% must be at least 10\,pt.
+% ^^A exactly or approximately ???
+%
+% From \cite[p.~222]{LAMPORT}:
+% \begin{ltxquote}
+% This does not apply when the \texttt{pict2e} package is loaded.
+% \end{ltxquote}
+%
+% Figure~\ref{fig:line} shows the difference between the old and new
+% implementations:
+% The black lines in the left half of each picture all have slopes
+% that conform to the restrictions of \SL.
+% However, with the new implementation of \textsf{pict2e} sloped lines
+% may assume any arbitrary width given by the |\linethickness|
+% declaration.
+% The right half demonstrates that now arbitrary slopes are possible.
+%
+% The blue lines represent ``illegal'' slopes specifications,
+% i.e., with common divisors.
+% Note the funny effect \SL\ produces in such cases.
+% (In \LaTeX\ releases prior to 2003/12/01,
+% some such ``illegal'' slopes might even lead to infinite loops!
+% Cf.\ problem report latex/3570.)
+%
+% The new implementation imposes no restriction with respect to line
+% thickness, minimal horizontal extent, and slope.
+%
+% The red lines correspond to angles of \(15^\circ\), \(30^\circ\),
+% \(45^\circ\), \(60^\circ\), and \(75^\circ\), respectively.
+% This was achieved by multiplying the sine and cosine of each angle
+% by 1000 and rounding to the nearest integer, like this:
+%\begin{verbatim}
+% \put(50,0){\line(966,259){25}}
+% \put(50,0){\line(866,500){25}}
+% \put(50,0){\line(707,707){25}}
+% \put(50,0){\line(500,866){25}}
+% \put(50,0){\line(259,966){25}}
+%\end{verbatim}
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \LINETEST[0] & \LINETEST
+% \end{tabular}
+% \caption{Line}
+% \label{fig:line}
+% \end{figure}
+%
+% \subsubsection{Vector}
+% \label{sec:usage:vector}
+%
+% \DescribeMacro\vector
+% |\vector|\parg{X,Y}\marg{LEN}\\
+% In the \SL\ implementation the slope arguments \parg{X,Y} are
+% restricted to integers in the range $-4 \le X,Y \le +4$, with no
+% common divisors except $\pm 1$.
+% (I.e., $X$ and $Y$ must be relatively prime.)
+% Furthermore, arrow heads come only in two shapes, corresponding to
+% the |\thinlines| and |\thicklines| declarations.
+% (There's also a flaw: the lines will be printed over the arrow
+% heads.
+% ^^A pr/???
+% See vertical vector in Figure~\ref{fig:vector}.)
+%
+% From \cite[p.~222]{LAMPORT}:
+% \begin{ltxquote}
+% These restrictions are eliminated by the \texttt{pict2e} package.
+% \end{ltxquote}
+%
+% However, to avoid overflow of \TeX's integer (dimen) arithmetic,
+% the current implementation restricts the slope arguments to
+% integers in the range $-1000 \le X,Y \le +1000$, which should be
+% enough.
+% ^^A ???
+%
+% Furthermore, unlike the \SL\ implementation, which silently converts
+% the ``impossible'' slope to a vertical vector extending in the upward
+% direction ($(0,0) \mapsto (0,1)$), the \textsf{pict2e} package now
+% treats this as an error.
+% ^^A ???
+%
+% In the \SL\ implementation the horizontal extent of sloped vectors
+% must be at least 10\,pt.
+% ^^A exactly or approximately ???
+%
+% From \cite[p.~222]{LAMPORT}:
+% \begin{ltxquote}
+% This does not apply when the \texttt{pict2e} package is loaded.
+% \end{ltxquote}
+%
+% Figure~\ref{fig:vector} shows the difference between the old and new
+% implementations:
+% The black arrows all have ``legal'' slopes.
+% The red arrows have slope arguments out of the range permitted by \SL.
+% Slope arguments that are ``illegal'' in \SL\ produce results similar
+% to those with the \cmd{\line} command (this has not been
+% demonstrated here).
+%
+% The new implementation imposes no restriction with respect to line
+% thickness, minimal horizontal extent, and slope.
+%
+% As with \SL, the arrow head will always be drawn.
+% In particular, only the arrow head will be drawn, if the total length
+% of the arrow is less than the length of the arrow head.
+% ^^A \SL: only if =0 ???
+% See right hand side of Figure~\ref{fig:vector:comparison}.
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \VECTORTEST[0] & \VECTORTEST[1]
+% \end{tabular}
+% \caption{Vector}
+% \label{fig:vector}
+% \end{figure}
+%
+% The current version of the \textsf{pict2e} package offers two
+% variants for the shape of the arrow heads, controlled by package
+% options.
+% One variant tries to mimic the fonts used in the \SL\
+% implementation (package option \textsf{ltxarrows}, the default;
+% see Figure~\ref{fig:vector:comparison}, top row),
+% though it is difficult to extrapolate from just two design sizes.
+% The other one is implemented like the arrows of the \PSTricks\
+% package~\cite{PSTRICKS} (package option \textsf{pstarrows};
+% see Figure~\ref{fig:vector:comparison}, bottom row).
+% ^^A See Figure~\ref{fig:vector:comparison}.
+%
+% \begin{figure}
+% \setlength\unitlength{.004\linewidth}^^A
+% \centering
+% \begin{picture}(200,100)
+% \put(0,0){\framebox(200,100){}}
+% \linethickness{12\unitlength}
+% \makeatletter \let\pIIe@vector=\pIIe@vector@pst \makeatother
+% \put(15,25){\vector(1,0){100}}
+% \put(185,25){\vector(1,0){0}}
+% \makeatletter \let\pIIe@vector=\pIIe@vector@ltx \makeatother
+% \put(15,75){\vector(1,0){100}}
+% \put(185,75){\vector(1,0){0}}
+% \end{picture}
+% \caption[Vector: shape variants of the arrow-heads]%
+% {Vector: shape variants of the arrow-heads.
+% Top: \LaTeX\ style vectors.
+% Bottom: \PSTricks\ style vectors.}
+% \label{fig:vector:comparison}
+% \end{figure}
+%
+% \subsubsection{Circle and Dot}
+% \label{sec:usage:circle+dot}
+%
+% \DescribeMacro\circle
+% \DescribeMacro{\circle*}
+% |\circle|\marg{DIAM}\\
+% |\circle*|\marg{DIAM}\\
+% The (hollow) circles and disks (filled circles) of the \SL\ ^^A
+% implementation had severe restrictions on the number of different
+% diameters and maximum diameters available.
+%
+% From \cite[p.~222]{LAMPORT}:
+% \begin{ltxquote}
+% With the \texttt{pict2e} package, any size circle or disk can be
+% drawn.
+% \end{ltxquote}
+%
+% \noindent
+% With the new implementation there are no more restrictions to the
+% diameter argument.
+% (However, negative
+% ^^A or zero
+% diameters are now trapped as an error.)
+%
+% Furthermore, hollow circles (like sloped lines) can now be drawn
+% with any line thickness.
+% Figure~\ref{fig:circle-dot} shows the difference.
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \CIRCLETEST[0] & \CIRCLETEST
+% \end{tabular}
+% \caption{Circle and Dot}
+% \label{fig:circle-dot}
+% \end{figure}
+%
+% \subsubsection{Oval}
+% \label{sec:usage:oval}
+%
+% \DescribeMacro\oval
+% |\oval|\oarg{rad}\parg{X,Y}\oarg{POS}\\
+% In the \SL\ implementation, the user has no control over the shape
+% of an oval besides its size, since its corners would always consist
+% of the ``quarter circles of the largest possible radius less than or
+% equal to \emph{rad}''~\cite[p.~223]{LAMPORT}.
+%
+% From \cite[p.~223]{LAMPORT}:
+% \begin{ltxquote}
+% An explicit \emph{rad} argument can be used only with the
+% \texttt{pict2e} package; the default value is the radius of the
+% largest quarter-circle \LaTeX\ can draw without the \texttt{pict2e}
+% package.
+% \end{ltxquote}
+%
+% This default value is 20\,pt, a length.
+% However, in an early reimplementation of the picture
+% commands~\cite{PSPICTURE}, there is such an optional argument too,
+% but it is given as a mere number, to be multiplied by |\unitlength|.
+%
+% Since both alternatives may make sense, we left the choice to the
+% user.
+% \ (See Figure~\ref{fig:oval:rad:2} for the differences.) \ ^^A
+% I.e., this implementation of \cmd{\oval} will ``auto-detect''
+% whether its \oarg{rad} argument is a length or a number.
+% \DescribeMacro\maxovalrad
+% Furthermore, the default value is not hard-wired either;
+% the user may access it under the moniker \cmd{\maxovalrad},
+% by the means of \cmd{\renewcommand*}.
+% (Names or values of length and counter registers may be given as
+% well, both as an explicit \oarg{rad} argument and when redefining
+% \cmd{\maxovalrad}.)
+%
+% (Both \oarg{rad} and the default value \cmd{\maxovalrad} are ignored
+% in ``standard \LaTeX\ mode'').
+%
+% The behaviour of |\oval| in the absence of the \oarg{rad} argument
+% is shown in Figure~\ref{fig:oval:rad:1}, left half of each picture.
+% Note that in the \SL\ implementation there is a minimum radius as
+% well (innermost ``salami'' is ``broken'').
+% In the right half of each picture, a \oarg{rad} argument has been
+% used: it has no effect with the original |\oval| command.
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands}\tabularnewline[1ex]
+% \OVALTESTi[0] & \OVALTESTi
+% \end{tabular}
+% \caption{Oval: Radius argument for \cmd{\oval} vs.\ \cmd{\maxovalrad}}
+% \label{fig:oval:rad:1}
+% \end{figure}
+%
+% Both \oarg{rad} and \cmd{\maxovalrad} may be given as an explicit
+% (rigid) length (i.e., with unit) or as a number.
+% In the latter case the value is used as a factor to multiply by
+% \cmd{\unitlength}.
+% \ (A length or counter register will do as well, of course.)
+%
+% If a number is given, the rounded corners of an oval will scale
+% according to the current value of \cmd{\unitlength}.
+% (See Figure~\ref{fig:oval:rad:2}, first row.)
+%
+% If a length is specified, the rounded corners of an oval will be the
+% same regardless of the current value of \cmd{\unitlength}.
+% (See Figure~\ref{fig:oval:rad:2}, second row.)
+%
+% The default value is 20\,pt as specified for the \oarg{rad}
+% argument of \cmd{\oval} by the \LaTeX\ manual \cite[p.~223]{LAMPORT}.
+% (See Figure~\ref{fig:oval:rad:2}, third row.)
+%
+% \bigskip
+%
+% \begin{figure}
+% \centering
+% \noindent
+% \begin{tabular}{@{}c@{}}
+% \textbf{Original Commands},
+% \oarg{rad} or \cmd{\maxovalrad} ignored\\[1ex]
+% \OriginalPictureCmds\OVALTESTii{0}\tabularnewline[1ex]\tabularnewline
+% \textbf{New Commands},
+% \oarg{rad} or \cmd{\maxovalrad} depends on \cmd{\unitlength}\\[1ex]
+% \OVALTESTii{20}\tabularnewline[1ex]\tabularnewline
+% \textbf{New Commands},
+% \oarg{rad} or \cmd{\maxovalrad} a fixed length\\[1ex]
+% \OVALTESTii{10.44pt}
+% \end{tabular}
+% \caption[Oval: Radius argument for \cmd{\oval}: length vs.\ number]%
+% {Oval: Radius argument for \cmd{\oval}: length vs.\ number.
+% The number at the centre of each oval gives the relative value of
+% \texttt{\char`\\unitlength}.}
+% \label{fig:oval:rad:2}
+% \end{figure}
+%
+% \subsubsection{Bezier Curves}
+% \label{sec:usage:bezier-curves}
+%
+% \DescribeMacro\bezier
+% \DescribeMacro\qbezier
+% \DescribeMacro\cbezier
+% \DescribeMacro\qbeziermax
+% |\bezier|\marg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY}\\
+% |\qbezier|\oarg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY}\\
+% |\cbezier|\oarg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY}\parg{DX,DY}\\
+% In \SL, the \emph{N} argument specifies the number of points to
+% ^^A ??? off by 1 !!!
+% plot, with the maximum defined by \cmd{\qbeziermax}.
+% ^^A Cite Lamport !!!
+% With \LaTeX\ versions prior to 2003/12/01, the quadratic Bezier
+% curves plotted by this package will not match those of the \SL\
+% implementation exactly, due to a bug in positioning the dots used to
+% produce a curve (cf.~latex/3566).
+%
+% \cmd{\bezier} is the obsolescent variant from the old
+% \textsf{bezier} package of vintage \LaTeX2.09.
+%
+% The |\cbezier| command draws a cubic Bezier curve;
+% see~\cite{EBEZIER}.
+% (This is not mentioned in \cite{LAMPORT} and has been added to the
+% package deliberately.)
+%
+% From \cite[p.~221--223]{LAMPORT}:
+% \begin{ltxquote}
+% With the \texttt{pict2e} package, there is no limit to the number
+% of points plotted.
+% \end{ltxquote}
+%
+% \noindent
+% More accurately, the argument specifying the maximum number of
+% points to plot is simply ignored in this new implementation of
+% \textsf{pict2e}, as is \cmd{\qbeziermax},
+% since the \textsf{pict2e} package uses primitive operators of the
+% output (back-end) format, using only the given ``control points''.
+% (For details, see the implementation part.)
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \QBEZIERTEST[0] & \QBEZIERTEST
+% \end{tabular}
+% \caption{Quadratic Bezier curves}
+% \label{fig:qbezier2}
+% \end{figure}
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \IfFileExists{ebezier.sty}{\CBEZIERTEST[0]}{%
+% \begin{slshape}^^A
+% Note:
+% Since the \textsf{ebezier} package is not installed on your system,
+% the `original' \cmd{\cbezier} command can't be used here.\par
+% \end{slshape}} & \CBEZIERTEST
+% \end{tabular}
+% \caption{Cubic Bezier curves}
+% \label{fig:cbezier}
+% \end{figure}
+%
+% \begin{figure}
+% \noindent
+% \begin{tabular}
+% {@{}>{\centering}p{.5\textwidth}@{}
+% >{\centering}p{.5\textwidth}@{}}
+% \textbf{Original Commands} & \textbf{New Commands} \tabularnewline[1ex]
+% \IfFileExists{ebezier.sty}{\QCBEZIERTEST[0]}{%
+% \begin{slshape}^^A
+% Note:
+% Since the \textsf{ebezier} package is not installed on your system,
+% the `original' \cmd{\cbezier} command can't be used here.\par
+% \end{slshape}} & \QCBEZIERTEST
+% \end{tabular}
+% \caption{Quadratic (green) and Cubic Bezier curves}
+% \label{fig:qcbezier}
+% \end{figure}
+%
+% \StopEventually{^^A
+% \Acknowledgements
+% ^^A \typeout{!!!
+% ^^A \ifx\Finale\relax \string\OnlyDescription
+% ^^A \else \string\AlsoImplementation \fi}^^A
+% ^^A Dirty Hack:
+% \ifx\Finale\relax ^^A \OnlyDescription
+% \begin{thebibliography}{9}
+% \raggedright
+%
+% \bibitem{LAMPORT} Leslie Lamport: \textit{\LaTeX\ -- A Document
+% Preparation System}, 2nd ed., 1994
+%
+% \bibitem{PSTRICKS} Timothy Van Zandt: \textit{The pstricks bundle.}
+% \texttt{CTAN:~graphics/pstricks/}, 1993, 1994, 2000
+%
+% \bibitem{PSPICTURE} David Carlisle: \textit{The pspicture package.}
+% \texttt{CTAN:~macros/latex/contrib/carlisle/}, 1992
+%
+% \bibitem{EBEZIER} Gerhard A. Bachmaier: \textit{The ebezier package.}
+% \texttt{CTAN:~macros/latex/contrib/ebezier/}, 2002
+%
+% \end{thebibliography}^^A
+%\else ^^A \AlsoImplementation
+% \begin{thebibliography}{9}
+% \raggedright
+%
+% \bibitem{LAMPORT} Leslie Lamport: \textit{\LaTeX\ -- A Document
+% Preparation System}, 2nd ed., 1994
+%
+% \bibitem{COMPANION} Michel Goossens, Frank Mittelbach, Alexander
+% Samarin: \textit{The \LaTeX\ Companion}, 1993
+%
+% \bibitem{EBEZIER} Gerhard A. Bachmaier: \textit{The ebezier package.}
+% \texttt{CTAN:~macros/latex/contrib/ebezier/}, 2002
+%
+% \bibitem{PICTEX} Michael Wichura: \textit{The PiC\TeX\ package.}
+% \texttt{CTAN:~graphics/pictex}, 1987
+%
+% \bibitem{PSPICTURE} David Carlisle: \textit{The pspicture package.}
+% \texttt{CTAN:~macros/latex/contrib/carlisle/}, 1992
+%
+% \bibitem{TRIG} David Carlisle: \textit{The trig package.}
+% \texttt{CTAN:~macros/latex/required/graphics/}, 1999
+%
+% \bibitem{PSPIC} Kresten Krab Thorup: \textit{The pspic package.}
+% \texttt{CTAN:~macros/latex209/contrib/misc/}, 1991
+%
+% \bibitem{PSTRICKS} Timothy Van Zandt: \textit{The pstricks bundle.}
+% \texttt{CTAN:~graphics/pstricks/}, 1993, 1994, 2000
+%
+% ^^A Wichura@Galton.Uchicago.EDU
+%
+% \end{thebibliography}
+%
+% \PrintChanges
+% \PrintIndex
+%
+%\fi
+% } ^^A \StopEventually
+%
+% ^^A
+% \clearpage
+%
+% \section{Implementation}
+%
+% ^^A cite some of these packages !!! ???
+% Unlike other packages that have reimplemented or extended some of
+% the commands from \SL's \texttt{picture} environment,
+% we do not use special fonts,
+% nor draw arbitrary shapes by the means of myriads of small (point)
+% characters,
+% nor do we use sophisticated programming in some back-end
+% programming language.
+%
+% In its present state, this implementation supports just \PS\ and
+% \PDF\ as back-end formats.
+% It just calculates the necessary control points and uses primitive
+% path drawing operators.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Initialisation}
+%
+% \begin{macro}{\Gin@codes}
+% First we save the catcodes of some characters, and set them to
+% fixed values whilst this file is being read.
+% \changes{v0.2o}{2004/06/25}
+% {Save and restore catcodes (HjG)}
+% (This is done in almost the same manner as in the \textsf{graphics}
+% and \textsf{color} packages. Alas, we don't need nor want to have
+% |*| as part of control sequence names, so we omit it here.)
+% \begin{macrocode}
+\edef\Gin@codes{%
+ \catcode`\noexpand\^^A\the\catcode`\^^A\relax
+ \catcode`\noexpand\"\the\catcode`\"\relax
+% \catcode`\noexpand\*\the\catcode`\*\relax
+ \catcode`\noexpand\!\the\catcode`\!\relax
+ \catcode`\noexpand\:\the\catcode`\:\relax}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\catcode`\^^A=\catcode`\%
+\@makeother\"%
+% \catcode`\*=11
+\@makeother\!%
+\@makeother\:%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Preliminaries}
+%
+% \begin{macro}{\pIIe@mode}
+% \begin{macro}{\pIIe@code}
+% \begin{macro}{\Gin@driver}
+% The first two of these commands determine how the \textsf{pict2e}
+% package works internally;
+% they should be defined properly by the
+% |p2e-|\meta{driver}\linebreak[0]|.def|
+% files.
+% (See file \texttt{p2e-drivers.dtx} for details and sample
+% implementations.)
+%
+% The latter command is well known from the \textsf{graphics} and
+% \textsf{color} packages from the \SL\ graphics bundle;
+% it should be set by a package option---most likely in a (system
+% dependent) configuration file \texttt{pict2e.cfg}.
+% (File \texttt{p2e-drivers.dtx} contains an example configuration
+% file suitable for the \teTeX\ and \TeXlive\ distributions;
+% it will be extracted as \texttt{pict2e-example.cfg}.)
+% \begin{macrocode}
+\newcommand*\pIIe@mode{-1}
+\newcommand*\pIIe@code[1]{}
+\providecommand*\Gin@driver{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@tempa}
+% \begin{macro}{\pIIe@tempb}
+% \begin{macro}{\pIIe@tempc}
+% At times, we need some temporary storage bins.
+% However, we only use some macros and do not allocate any new
+% registers; the ``superfluous'' ones from the picture module of the
+% kernel (|ltpictur.dtx|) and the general scratch registers should
+% suffice.
+% ^^A (This leads to somewhat vulnerable code below!)
+% \begin{macrocode}
+\newcommand*\pIIe@tempa{}
+\newcommand*\pIIe@tempb{}
+\newcommand*\pIIe@tempc{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Option processing}
+%
+% The driver options are not much of a surprise:
+% they are similar to those of the \textsf{graphics} and
+% \textsf{color} packages.
+% \begin{macrocode}
+\DeclareOption{dvips}{\def\Gin@driver{dvips.def}}
+\DeclareOption{xdvi}{\ExecuteOptions{dvips}}
+\DeclareOption{dvipdf}{\def\Gin@driver{dvipdf.def}}
+\DeclareOption{dvipdfm}{\def\Gin@driver{dvipdfm.def}}
+\DeclareOption{pdftex}{\def\Gin@driver{pdftex.def}}
+\DeclareOption{dvipsone}{\def\Gin@driver{dvipsone.def}}
+\DeclareOption{dviwindo}{\ExecuteOptions{dvipsone}}
+\DeclareOption{oztex}{\ExecuteOptions{dvips}}
+\DeclareOption{textures}{\def\Gin@driver{textures.def}}
+\DeclareOption{pctexps}{\def\Gin@driver{pctexps.def}}
+\DeclareOption{pctex32}{\def\Gin@driver{pctex32.def}}
+\DeclareOption{vtex}{\def\Gin@driver{vtex.def}}
+% \end{macrocode}
+% Request ``original'' \LaTeX\ mode.
+% ^^A Emulation. To be implemented yet.
+% \begin{macrocode}
+\DeclareOption{original}{\def\pIIe@mode{0}}
+% \end{macrocode}
+% Arrow shape options.
+% The values for \LaTeX-style arrows are ``hand optimized'';
+% they should be regarded as experimental,
+% i.e., they may change in future versions of this package.
+% The values for \PSTricks-style arrows are the default ones used by
+% that bundle.
+% If the \textsf{pstricks} package is actually loaded, then
+% \textsf{pict2e} will obey the current values of the corresponding
+% internal \PSTricks\ parameters;
+% this feature should be regarded as experimental,
+% i.e., it may change in future versions of this package.
+% \begin{macrocode}
+\DeclareOption{ltxarrows}{\AtEndOfPackage{%
+ \let\pIIe@vector=\pIIe@vector@ltx
+ \def\pIIe@FAL{1.52}%
+ \def\pIIe@FAW{3.2}%
+ \def\pIIe@CAW{1.5pt}%
+ \def\pIIe@FAI{0.25}%
+ }}
+\DeclareOption{pstarrows}{\AtEndOfPackage{%
+ \let\pIIe@vector=\pIIe@vector@pst
+ \def\pIIe@FAL{1.4}%
+ \def\pIIe@FAW{2}%
+ \def\pIIe@CAW{1.5pt}%
+ \def\pIIe@FAI{0.4}%
+ }}
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@debug@comment}
+% This makes debugging easier.
+% \begin{macrocode}
+\newcommand*\pIIe@debug@comment{}
+\DeclareOption{debug}{%
+ \def\pIIe@debug@comment{^^J^^J\@percentchar\space >>> pict2e <<<^^J}%
+ \begingroup
+ \@ifundefined{pdfcompresslevel}{}{\global\pdfcompresslevel\z@}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% A special variant of debugging. (Obsolescent? Once used for
+% performance measurements: arctan vs.\ pyth-add versions of
+% \cmd{\vector}.)
+% \begin{macrocode}
+\DeclareOption{hide}{\AtEndOfPackage{%
+% \def\pIIe@code#1{}%
+ \let\pIIe@code\@gobble
+}}
+% \end{macrocode}
+% Unknown options default to mode ``original.''
+% \begin{macrocode}
+\DeclareOption*{\ExecuteOptions{original}}
+% \end{macrocode}
+% By default, arrows are in the \LaTeX\ style.
+% \begin{macrocode}
+\ExecuteOptions{ltxarrows}
+% \end{macrocode}
+% Like the \textsf{graphics} and \textsf{color} packages, we support a
+% configuration file. (See file \texttt{p2e-drivers.dtx} for details
+% and an example.)
+% \begin{macrocode}
+\InputIfFileExists{pict2e.cfg}{}{}
+% \end{macrocode}
+% This now should make clear which ``mode'' and ``code'' we should use.
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \subsection{Output driver check}
+%
+% \begin{macrocode}
+\ifnum\pIIe@mode=\z@
+ \PackageInfo{pict2e}{Package option `original' requested}
+\else
+% \end{macrocode}
+% This code fragment is more or less cloned from the
+% \textsf{graphics} and \textsf{color} packages.
+% \begin{macrocode}
+ \if!\Gin@driver!
+ \PackageError{pict2e}
+ {No driver specified at all}
+ {You should make a default driver option in a file\MessageBreak
+ pict2e.cfg\MessageBreak eg: \protect\ExecuteOptions{dvips}}%
+ \else
+ \PackageInfo{pict2e}{Driver file: \Gin@driver}
+ \@ifundefined{ver@\Gin@driver}{\input{\Gin@driver}}{}
+ \PackageInfo{pict2e}{Driver file for pict2e: p2e-\Gin@driver}
+ \InputIfFileExists{p2e-\Gin@driver}{}{%
+ \PackageError{pict2e}%
+ {Driver file ``p2e-\Gin@driver'' not found}%
+ {Q: Is the file properly installed? A: No!}}
+ \fi
+\fi
+% \end{macrocode}
+%
+% \subsection{Mode check}
+%
+% For \PS\ and \PDF\ modes.
+% \begin{macrocode}
+\ifnum\pIIe@mode>\z@
+ \ifnum\pIIe@mode<\thr@@
+ \RequirePackage{trig}
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@oldline}
+% \begin{macro}{\pIIe@old@sline}
+% \begin{macro}{\pIIe@oldvector}
+% \begin{macro}{\pIIe@old@circle}
+% \begin{macro}{\pIIe@old@dot}
+% \begin{macro}{\pIIe@old@bezier}
+% \begin{macro}{\pIIe@old@cbezier}
+% \begin{macro}{\pIIe@oldoval}
+% \begin{macro}{\pIIe@old@oval}
+% Saved versions of some macros. (Or dummy definitions.)
+% \begin{macrocode}
+ \let\pIIe@oldline\line
+ \let\pIIe@old@sline\@sline
+ \let\pIIe@oldvector\vector
+ \let\pIIe@old@circle\@circle
+ \let\pIIe@old@dot\@dot
+ \let\pIIe@old@bezier\@bezier
+ \AtBeginDocument{%
+ \@ifundefined{@cbezier}{%
+ \def\pIIe@old@cbezier[#1](#2,#3)(#4,#5)(#6,#7)(#8,#9){}%
+ }{\let\pIIe@old@cbezier\@cbezier}}
+ \let\pIIe@oldoval\oval
+ \let\pIIe@old@oval\@oval
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\OriginalPictureCmds}
+% Switches back to the original definitions;
+% for testing and demonstration purposes only.
+% \begin{macrocode}
+ \newcommand*\OriginalPictureCmds{%
+ \let\@sline\pIIe@old@sline
+ \let\line\pIIe@oldline
+ \let\vector\pIIe@oldvector
+ \let\@circle\pIIe@old@circle
+ \let\@dot\pIIe@old@dot
+ \let\@bezier\pIIe@old@bezier
+ \let\@cbezier\pIIe@old@cbezier
+ \renewcommand*\oval[1][]{\pIIe@oldoval}%
+ \let\@oval\pIIe@old@oval
+ }
+% \end{macrocode}
+% \end{macro}
+% Overambitious drivers.
+% \begin{macrocode}
+ \else
+ \PackageError{pict2e}
+ {Unsupported mode (\pIIe@mode) specified}
+ {The driver you specified requested a mode\MessageBreak
+ not supported by this version of this package}
+ \fi
+% \end{macrocode}
+% Incapable drivers.
+% \begin{macrocode}
+\else
+ \ifnum\pIIe@mode<\z@
+ \PackageError{pict2e}
+ {No suitable driver specified}
+ {You should make a default driver option in a file\MessageBreak
+ pict2e.cfg\MessageBreak eg: \protect\ExecuteOptions{dvips}}
+ \fi
+\fi
+% \end{macrocode}
+% Big switch,\label{big-switch-begin}
+% completed near the end of the package
+% (see page~\pageref{big-switch-end}).
+% \begin{macrocode}
+\ifnum\pIIe@mode>\z@
+% \end{macrocode}
+%
+% \subsection{Graphics operators}
+%
+% The following definitions allow the \PS\ and \PDF\ operations below
+% to share some of the code.
+% \begin{macrocode}
+\ifcase\pIIe@mode\relax
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@moveto@op}
+% \begin{macro}{\pIIe@lineto@op}
+% \begin{macro}{\pIIe@setlinewidth@op}
+% \begin{macro}{\pIIe@stroke@op}
+% \begin{macro}{\pIIe@fill@op}
+% \begin{macro}{\pIIe@curveto@op}
+% \begin{macro}{\pIIe@concat@op}
+% \PS
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@moveto@op{moveto}
+ \newcommand*\pIIe@lineto@op{lineto}
+ \newcommand*\pIIe@setlinewidth@op{setlinewidth}
+ \newcommand*\pIIe@stroke@op{stroke}
+ \newcommand*\pIIe@fill@op{fill}
+ \newcommand*\pIIe@curveto@op{curveto}
+ \newcommand*\pIIe@concat@op{concat}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@moveto@op}
+% \begin{macro}{\pIIe@lineto@op}
+% \begin{macro}{\pIIe@setlinewidth@op}
+% \begin{macro}{\pIIe@stroke@op}
+% \begin{macro}{\pIIe@fill@op}
+% \begin{macro}{\pIIe@curveto@op}
+% \begin{macro}{\pIIe@concat@op}
+% \PDF
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@moveto@op{m}
+ \newcommand*\pIIe@lineto@op{l}
+ \newcommand*\pIIe@setlinewidth@op{w}
+ \newcommand*\pIIe@stroke@op{S}
+ \newcommand*\pIIe@fill@op{f}
+ \newcommand*\pIIe@curveto@op{c}
+ \newcommand*\pIIe@concat@op{cm}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \noindent
+% (Currently, there are no other modes.)
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \subsection{Low-level operations}
+%
+% \subsubsection{Collecting the graphics instructions and handling the output}
+%
+% \begin{macro}{\pIIe@GRAPH}
+% \begin{macro}{\pIIe@addtoGraph}
+% \changes{v0.1h}{2003/08/27}{Added newline code (to be improved eventually).
+% (RN,HjG)}
+% We collect all \PS\slash\PDF\ output code for a single picture
+% object in a token register.
+% \begin{macrocode}
+ \@ifdefinable\pIIe@GRAPH{\newtoks\pIIe@GRAPH}
+ \newcommand*\pIIe@addtoGraph[1]{%
+ \begingroup
+ \edef\x{\the\pIIe@GRAPH\space#1}%
+ \global\pIIe@GRAPH\expandafter{\x}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@fillGraph}
+% The path will either be filled \dots
+% \begin{macrocode}
+ \newcommand*\pIIe@fillGraph{\begingroup \@tempswatrue\pIIe@drawGraph}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@strokeGraph}
+% \dots\ or stroked.
+% \begin{macrocode}
+ \newcommand*\pIIe@strokeGraph{\begingroup \@tempswafalse\pIIe@drawGraph}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@drawGraph}
+% Common code.
+% When we are done with collecting the path of the picture object, we
+% output the contents of the token register.
+%
+% \changes{v0.1d}{2003/07/22}{``gsave/grestore'' added. (RN)}
+% \changes{v0.1g}{2003/08/23}{``gsave/grestore'' removed. (RN)}
+% \changes{v0.1i}{2003/08/28}{``gsave/grestore'' restored for PDF
+% (see `p2e-drivers.dtx'). (RN)}
+% \begin{macrocode}
+ \newcommand*\pIIe@drawGraph{%
+ \edef\x{\pIIe@debug@comment\space
+% \end{macrocode}
+% Instead of scaling individual coordinates, we scale the graph as a whole
+% (pt$\rightarrow$bp);
+% see Section~\ref{sec:implementation:transformations}.
+% \begin{macrocode}
+ \pIIe@scale@PTtoBP}%
+ \if@tempswa
+ \edef\y{\pIIe@fill@op}%
+ \else
+ \edef\x{\x\space\strip@pt\@wholewidth
+ \space\pIIe@setlinewidth@op}%
+ \edef\y{\pIIe@stroke@op}%
+ \fi
+ \expandafter\pIIe@code\expandafter{%
+ \expandafter\x\the\pIIe@GRAPH\space\y}%
+% \end{macrocode}
+% \changes{v0.1u}{2003/11/19}{Clear current point after output (HjG)}
+% Clear the graph and the current point after output.
+% \begin{macrocode}
+ \global\pIIe@GRAPH{}\xdef\pIIe@CPx{}\xdef\pIIe@CPy{}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Auxilliary macros}
+%
+% The following macros save us a plethora of tokens in subsequent code.
+%
+% Note that since we are using \cmd{\@tempdima} and \cmd{\@tempdimb}
+% both here and in medium-level macros below, we must be careful not
+% to spoil their values.
+%
+% \begin{macro}{\pIIe@CPx}
+% \begin{macro}{\pIIe@CPy}
+% \begin{macro}{\pIIe@add@CP}
+% \changes{v0.1u}{2003/11/21}{%
+% Rename \cmd{\pIIe@add@XY} to \cmd{\pIIe@add@CP} (HjG)}
+% The lengths (coordinates) given as arguments will be stored as
+% ``real'' numbers using the common trick; i.e., they are put in
+% `dimen' registers, scaled by $2^{16}$.
+% At the same time, we remember the ``current point.''
+% (Not strictly necessary for \PS, but for some operations in \PDF,
+% e.g., \textsl{rcurveto} emulation.)
+% \begin{macrocode}
+ \newcommand*\pIIe@CPx{} \newcommand*\pIIe@CPy{}
+ \newcommand*\pIIe@add@CP[2]{%
+ \begingroup
+ \@tempdima#1\xdef\pIIe@CPx{\the\@tempdima}%
+ \@tempdimb#2\xdef\pIIe@CPy{\the\@tempdimb}%
+ \pIIe@addtoGraph{\strip@pt\@tempdima\space\strip@pt\@tempdimb}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@add@nums}
+% Similar, but does not set the ``current point.''
+% Values need not be coordinates (e.g., may be scaling factors, etc.).
+% \begin{macrocode}
+ \newcommand*\pIIe@add@nums[2]{%
+ \begingroup
+ \@tempdima#1\relax
+ \@tempdimb#2\relax
+ \pIIe@addtoGraph{\strip@pt\@tempdima\space\strip@pt\@tempdimb}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@add@num}
+% Likewise, for a single argument.
+% \begin{macrocode}
+ \newcommand*\pIIe@add@num[1]{%
+ \begingroup
+ \@tempdima#1\relax
+ \pIIe@addtoGraph{\strip@pt\@tempdima}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Medium-level operations}
+%
+% \subsubsection{Transformations}
+% \label{sec:implementation:transformations}
+%
+% Transformation operators; not all are currently used.
+% (Hence, some are untested.)
+%
+% \begin{macro}{\pIIe@PTtoBP}
+% Scaling factor, used below.
+% ``pt$\rightarrow$bp'' ($72 / 72.27 \approx 0.99626401$).
+% Note the trailing space!
+% (Don't delete it, it saves us some tokens.)
+% \begin{macrocode}
+ \newcommand*\pIIe@PTtoBP{0.99626401 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\ifcase\pIIe@mode\relax
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@concat}
+% \begin{macro}{\pIIe@translate}
+% \begin{macro}{\pIIe@rotate}
+% \begin{macro}{\pIIe@scale}
+% \begin{macro}{\pIIe@scale@PTtoBP}
+% \PS: Use some operators directly.
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@concat[6]{%
+ \begingroup
+ \pIIe@addtoGraph{[}%
+ \@tempdima#1\relax \@tempdimb#2\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#3\relax \@tempdimb#4\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#5\relax \@tempdimb#6\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \pIIe@addtoGraph{] \pIIe@concat@op}%
+ \endgroup}
+ \newcommand*\pIIe@translate[2]{\pIIe@add@nums{#1}{#2}\pIIe@addtoGraph{translate}}
+ \newcommand*\pIIe@rotate[1]{\pIIe@add@num{#1}\pIIe@addtoGraph{rotate}}
+ \newcommand*\pIIe@scale[2]{\pIIe@add@nums{#1}{#2}\pIIe@addtoGraph{scale}}
+ \newcommand*\pIIe@scale@PTtoBP{\pIIe@PTtoBP \pIIe@PTtoBP scale}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@concat}
+% \begin{macro}{\pIIe@translate}
+% \begin{macro}{\pIIe@rotate}
+% \begin{macro}{\pIIe@scale}
+% \begin{macro}{\pIIe@scale@PTtoBP}
+% \PDF: Emulate. \mbox{\texttt{:-(}}
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@concat[6]{%
+ \begingroup
+ \@tempdima#1\relax \@tempdimb#2\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#3\relax \@tempdimb#4\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#5\relax \@tempdimb#6\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \pIIe@addtoGraph\pIIe@concat@op
+ \endgroup}
+ \newcommand*\pIIe@translate[2]{\pIIe@concat\p@\z@\z@\p@{#1}{#2}}
+ \newcommand*\pIIe@rotate[1]{%
+ \begingroup
+ \@tempdima#1\relax
+ \edef\pIIe@tempa{\strip@pt\@tempdima}%
+ \CalculateSin\pIIe@tempa
+ \CalculateCos\pIIe@tempa
+ \edef\pIIe@tempb{\UseSin\pIIe@tempa}%
+ \edef\pIIe@tempc{\UseCos\pIIe@tempa}%
+ \pIIe@concat{\pIIe@tempc\p@}{\pIIe@tempb\p@}%
+ {-\pIIe@tempb\p@}{\pIIe@tempc\p@}\z@\z@
+ \endgroup}
+ \newcommand*\pIIe@scale[2]{\pIIe@concat{#1}\z@\z@{#2}\z@\z@}
+ \newcommand*\pIIe@scale@PTtoBP{\pIIe@PTtoBP 0 0 \pIIe@PTtoBP 0 0 \pIIe@concat@op}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \noindent
+% (Currently, there are no other modes.)
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \subsubsection{Path definitions}
+% \label{sec:implementation:path-definitions}
+%
+% \begin{macro}{\pIIe@moveto}
+% Simple things \dots
+% \begin{macrocode}
+ \newcommand*\pIIe@moveto[2]{%
+ \pIIe@add@CP{#1}{#2}\pIIe@addtoGraph\pIIe@moveto@op}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@lineto}
+% \dots\ have to be defined, too.
+% \begin{macrocode}
+ \newcommand*\pIIe@lineto[2]{%
+ \pIIe@add@CP{#1}{#2}\pIIe@addtoGraph\pIIe@lineto@op}
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent
+% We'll use \cmd{\pIIe@rcurveto} to draw quarter circles.
+% (\cmd{\circle} and \cmd{\oval}).
+% \begin{macrocode}
+\ifcase\pIIe@mode\relax
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@rcurveto}
+% \PS:
+% Use the ``rcurveto'' operator directly.
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@rcurveto[6]{%
+ \begingroup
+ \@tempdima#1\relax \@tempdimb#2\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#3\relax \@tempdimb#4\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#5\relax \@tempdimb#6\relax
+ \pIIe@add@CP\@tempdima\@tempdimb
+ \pIIe@addtoGraph{rcurveto}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@rcurveto}
+% \PDF:
+% It's necessary to emulate the \PS\ operator ``rcurveto''.
+% For this, the ``current point'' must be known, i.e., all macros which
+% change the ``current point'' must set \cmd{\pIIe@CPx} and
+% \cmd{\pIIe@CPy}.
+% \begin{macrocode}
+\or
+ \newcommand*\pIIe@rcurveto[6]{%
+ \begingroup
+ \@tempdima#1\advance\@tempdima\pIIe@CPx\relax
+ \@tempdimb#2\advance\@tempdimb\pIIe@CPy\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#3\advance\@tempdima\pIIe@CPx\relax
+ \@tempdimb#4\advance\@tempdimb\pIIe@CPy\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#5\advance\@tempdima\pIIe@CPx\relax
+ \@tempdimb#6\advance\@tempdimb\pIIe@CPy\relax
+ \pIIe@add@CP\@tempdima\@tempdimb
+ \pIIe@addtoGraph\pIIe@curveto@op
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent
+% (Currently, there are no other modes.)
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\pIIe@curveto}
+% This is currently only used for Bezier curves and for drawing the
+% heads of \LaTeX-like arrows.
+% Note: It's the same for \PS\ and \PDF.
+% \begin{macrocode}
+ \newcommand*\pIIe@curveto[6]{%
+ \begingroup
+ \@tempdima#1\relax \@tempdimb#2\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#3\relax \@tempdimb#4\relax
+ \pIIe@add@nums\@tempdima\@tempdimb
+ \@tempdima#5\relax \@tempdimb#6\relax
+ \pIIe@add@CP\@tempdima\@tempdimb
+ \pIIe@addtoGraph\pIIe@curveto@op
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{``Pythagorean Addition'' and Division}
+%
+% \begin{macro}{\pIIe@pyth}
+% This algorithm is copied from the \PiCTeX\ package
+% \cite{PICTEX} by Michael Wichura, with his permission
+% ^^A (cite Email!?).
+%
+% Here is his description:
+% \begin{quote}
+% Suppose $x>0$, $y>0$.
+% Put $s = x+y$. Let $z = (x^2+y^2)^{1/2}$.
+% Then $z = s\times f$, where
+% \[
+% f = (t^2 + (1-t)^2)^{1/2} = ((1+\tau^2)/2)^{1/2}
+% \]
+% and $t = x/s$ and $\tau = 2(t-1/2)$.
+% \end{quote}
+% \begin{macrocode}
+\newcommand*\pIIe@pyth[3]{%
+ \begingroup
+ \@tempdima=#1\relax
+% \end{macrocode}
+% $\cmd{\@tempdima}=\mathrm{abs}(x)$
+% \begin{macrocode}
+ \ifnum\@tempdima<\z@\@tempdima=-\@tempdima\fi
+ \@tempdimb=#2\relax
+% \end{macrocode}
+% $\cmd{\@tempdimb}=\mathrm{abs}(y)$
+% \begin{macrocode}
+ \ifnum\@tempdimb<\z@\@tempdimb=-\@tempdimb\fi
+% \end{macrocode}
+% $\cmd{\@tempdimb} = s = \mathrm{abs}(x)+\mathrm{abs}(y)$
+% \begin{macrocode}
+ \advance\@tempdimb\@tempdima
+ \ifnum\@tempdimb=\z@
+% \end{macrocode}
+% $\cmd{\@tempdimc} = z = \sqrt{(x^2+y^2)}$
+% \begin{macrocode}
+ \global\@tempdimc=\z@
+ \else
+% \end{macrocode}
+% $\cmd{\@tempdima} = 8 \times\mathrm{abs}(x)$
+% \begin{macrocode}
+ \multiply\@tempdima 8\relax
+% \end{macrocode}
+% $\cmd{\@tempdimc} = 8\,t = 8 \times\mathrm{abs}(x) / s$
+% \begin{macrocode}
+ \pIIe@@divide\@tempdima\@tempdimb
+% \end{macrocode}
+% $\cmd{\@tempdimc} = 4\tau = (8\,t-4)$
+% \begin{macrocode}
+ \advance\@tempdimc -4pt
+ \multiply\@tempdimc 2
+ \edef\pIIe@tempa{\strip@pt\@tempdimc}%
+% \end{macrocode}
+% $\cmd{\@tempdima} = (8\,\tau)^2$
+% \begin{macrocode}
+ \@tempdima=\pIIe@tempa\@tempdimc
+% \end{macrocode}
+% $\cmd{\@tempdima} = [64+(8\,\tau)^2]/2 =(8\,f)^2$
+% \begin{macrocode}
+ \advance\@tempdima 64pt
+ \divide\@tempdima 2\relax
+% \end{macrocode}
+% initial guess at $\sqrt{(u)}$
+% \begin{macrocode}
+ \@dashdim=7pt
+% \end{macrocode}
+% $\cmd{\@dashdim} = \sqrt{(u)}$
+% \begin{macrocode}
+ \pIIe@@pyth\pIIe@@pyth\pIIe@@pyth
+ \edef\pIIe@tempa{\strip@pt\@dashdim}%
+ \@tempdimc=\pIIe@tempa\@tempdimb
+% \end{macrocode}
+% $\cmd{\@tempdimc} = z = (8\,f)\times s / 8$
+% \begin{macrocode}
+ \global\divide\@tempdimc 8
+ \fi
+ \endgroup
+ #3=\@tempdimc}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@@pyth}
+% $\cmd{\@dashdim} = g \leftarrow (g + u/g)/2$
+% \begin{macrocode}
+\newcommand*\pIIe@@pyth{%
+ \pIIe@@divide\@tempdima\@dashdim
+ \advance\@dashdim\@tempdimc
+ \divide\@dashdim\tw@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@@divide}
+% This division algorithm is similar to the one used for the tangent
+% in the \textsf{trig} package~\cite{TRIG}.
+% It does not allow large arguments. ^^A ???
+% A~very small denominator argument leads to division by zero.
+% \begin{macrocode}
+\newcommand*\pIIe@@divide[2]{%
+% \end{macrocode}
+% $2^{16}$ (sp)
+% \begin{macrocode}
+ \@tempcnta\p@
+% \end{macrocode}
+% $2^{30} > \cmd{\maxdimen}$ !
+% \begin{macrocode}
+ \multiply\@tempcnta\two@fourteen
+ \@clnwd#2\relax
+ \divide\@clnwd\@iv
+ \divide\@tempcnta\@clnwd
+ \@clnht\@tempcnta sp\relax
+ \@clnwd#1\relax
+ \@tempdimc\strip@pt\@clnwd\@clnht}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@divide}
+% Improve this documentation!
+% \[
+% \mbox{\#3} =
+% \frac{2^{30}\cdot \mbox{\#1}}{2^{-2}\cdot \mbox{\#2} \cdot 2^{16}}
+% \]
+% (The factor \(2^{16}\) is implied by \TeX's division.)
+% \begin{macrocode}
+\newcommand*\pIIe@divide[3]{%
+ \pIIe@@divide{#1}{#2}%
+ #3=\@tempdimc}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{High-level operations}
+%
+% \begin{macro}{\pIIe@checkslopeargs}
+% \changes{v0.2o}{2004/06/25}{Macro added (HjG)}
+% Common code for \cmd{\line} and \cmd{\vector}.
+% \begin{macrocode}
+\newcommand*\pIIe@checkslopeargs{%
+% \end{macrocode}
+% Missing macro: \cmd{\@abs}\marg{val} -- should be in the kernel!
+%\begin{verbatim}
+%\def\@abs#1{\ifnum#1<\z@-\fi#1}
+%\end{verbatim}
+% It would save a plethora of tokens here and in other packages
+% and even in the kernel itself
+% (e.g., cf.\ \cmd{\vector} in \texttt{ltpictur.dtx}).
+% Should we define it in this package?
+% \begin{macrocode}
+ \ifnum\ifnum\@xarg<\z@-\fi\@xarg>\@m \@badlinearg \fi
+ \ifnum\ifnum\@yarg<\z@-\fi\@yarg>\@m \@badlinearg \fi
+% \end{macrocode}
+% A bit incompatible with \SL:
+% slope \((0,0)\) raises an error.
+% \begin{macrocode}
+ \ifnum\@xarg=\z@ \ifnum\@yarg=\z@ \@badlinearg \fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Line}
+% \label{sec:implementation:line}
+%
+% \begin{macro}{\line}
+% \changes{v0.2l}{2004/04/08}{Macro added (RNH/HjG)}
+% \cmd{\line}\parg{x,y}\marg{$l_x$}:
+% \changes{v0.2o}{2004/06/25}{Use \cmd{\pIIe@checkslopeargs} (HjG)}
+% \begin{macrocode}
+ \def\line(#1,#2)#3{%
+ \@xarg #1\relax \@yarg #2\relax
+ \@linelen #3\unitlength
+ \pIIe@checkslopeargs
+ \ifdim\@linelen<\z@\@badlinearg\else
+ \ifnum\@xarg =\z@ \@vline
+ \else
+ \ifnum\@yarg =\z@ \@hline \else \@sline\fi
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sline}
+% (The implementation here is different from \cmd{\vector}!)
+% \begin{macrocode}
+ \def\@sline{%
+ \begingroup
+ \ifnum\@xarg<\z@\@linelen-\@linelen\fi
+ \pIIe@divide{\@yarg\p@}{\@xarg\p@}\dimen@
+ \@ydim=\strip@pt\dimen@\@linelen
+ \pIIe@moveto\z@\z@
+ \pIIe@lineto\@linelen\@ydim
+ \pIIe@strokeGraph
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Vector}
+% \label{sec:implementation:vector}
+%
+% \begin{macro}{\vector}
+% Unlike \cmd{\line}, \cmd{\vector} must be redefined, because
+% the kernel version checks for illegal slope arguments.
+%
+% \cmd{\vector}\parg{x,y}\marg{$l_x$}:
+% Instead of calculating \(\theta = \arctan \frac{y}{x}\), we use
+% ``pythagorean addition''~\cite{PICTEX}
+% to determine \(s=\sqrt{x^2+y^2}\) and to obtain the length
+% of the vector \(l = l_x \cdot \frac{s}{x}\)
+% and the values of \(\sin \theta = \frac{y}{s}\) and
+% \(\cos \theta = \frac{x}{s}\) for the rotation of the coordinate system.
+% ^^A (This is faster; is it more accurate?)
+% \changes{v0.2o}{2004/06/25}{Use \cmd{\pIIe@checkslopeargs} (HjG)}
+% \begin{macrocode}
+ \def\vector(#1,#2)#3{%
+ \begingroup
+ \@xarg#1\relax \@yarg#2\relax
+ \@linelen#3\unitlength
+ \pIIe@checkslopeargs
+ \ifdim\@linelen<\z@ \@badlinearg \else
+ \pIIe@pyth{\@xarg\p@}{\@yarg\p@}\dimen@
+ \ifnum\@xarg=\z@
+ \else\ifnum\@yarg=\z@
+ \else
+% \end{macrocode}
+% This calculation is only necessary, if the vector is actually
+% sloped.
+% \begin{macrocode}
+ \pIIe@divide\dimen@{\@xarg\p@}\@xdim
+ \@linelen\strip@pt\@xdim\@linelen
+ \ifdim\@linelen<\z@\@linelen-\@linelen\fi
+ \fi
+ \fi
+% \end{macrocode}
+% \BigIndent $\sin\theta$ and $\cos\theta$
+% \begin{macrocode}
+ \pIIe@divide{\@yarg\p@}\dimen@\@ydim
+ \pIIe@divide{\@xarg\p@}\dimen@\@xdim
+% \end{macrocode}
+% Rotate the following vector\slash arrow outlines by angle $\theta$.
+% \begin{macrocode}
+ \pIIe@concat\@xdim\@ydim{-\@ydim}\@xdim\z@\z@
+% \end{macrocode}
+% Internal command to draw the outline of the vector\slash arrow.
+% \begin{macrocode}
+ \pIIe@vector
+ \pIIe@fillGraph
+ \fi
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@vector}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% This command should be \cmd{\def}'ed or \cmd{\let} to a macro
+% that generates the vector's outline path.
+% Now initialized by package options, via |\AtEndOfPackage|.
+% \begin{macrocode}
+ \newcommand*\pIIe@vector{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@FAL}
+% \begin{macro}{\pIIe@FAW}
+% \begin{macro}{\pIIe@CAW}
+% \begin{macro}{\pIIe@FAI}
+% \changes{v0.1x}{2003/11/27}{Introduce ``inset''. (RN,HjG)}
+% \begin{macro}{\pIIe@@firstnum}
+% \changes{v0.1x}{2003/11/27}{New ancillary macro (RN,HjG)}
+% \begin{macro}{\pIIe@@secondnum}
+% \changes{v0.1x}{2003/11/27}{New ancillary macro (RN,HjG)}
+% Some macros to parametrize the shape of the vector outline.
+% ^^A Should be user-level macros or changeable via key-value interface.
+% ^^A (Defered to future version.)
+% See Figures~\ref{fig:vector:ltx} and~\ref{fig:vector:pst}.
+%\iffalse
+% Note that when the \textsf{pstricks} package has been loaded, its
+% arrow-drawing parameters will be dynamically evaluated;
+% of course,
+% this is only useful with the \textsf{pstarrows} package
+% option.
+% probably\slash most likely not useful with the default
+% \textsf{ltxarrows} package option.
+%\fi
+% \begin{macrocode}
+ \newcommand*\pIIe@FAL{}\newcommand*\pIIe@FAW{}\newcommand*\pIIe@CAW{}
+ \newcommand*\pIIe@FAI{}
+ \newcommand*\pIIe@@firstnum{}\newcommand*\pIIe@@secondnum{}
+ \AtBeginDocument{%
+ \@ifpackageloaded{pstricks}{%
+ \def\pIIe@FAL{\psk@arrowlength}%
+ \def\pIIe@FAW{\expandafter\pIIe@@secondnum\psk@arrowsize}%
+ \def\pIIe@CAW{\expandafter\pIIe@@firstnum\psk@arrowsize}%
+ \def\pIIe@FAI{\psk@arrowinset}%
+ \def\pIIe@@firstnum#1 #2 {#1\p@}%
+ \def\pIIe@@secondnum#1 #2 {#2}%
+ }{}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{\LaTeX\ version}
+%
+% The arrows drawn by the variant generated by the \textsf{ltxarrows}
+% package option are
+% modeled after those in the fonts used by the \SL\ version of the
+% picture commands (|ltpictur.dtx|).
+% ^^A line10 linew10
+% See Figure~\ref{fig:vector:ltx}.
+%
+% \begin{figure}
+% \setlength\unitlength{.0067\linewidth}\hfill
+% \makebox[0pt][r]{^^A
+% \begin{minipage}[c]{17em}^^A
+% \unboldmath\small
+% \setlength\arraycolsep{.5\arraycolsep}^^A
+% \begin{eqnarray*}
+% L & = & \cmd{\@linelen} \\
+% W & = & \cmd{\@wholewidth} = 2\times\cmd{\@halfwidth} \\
+% AW & = & \cmd{\pIIe@FAW}\times W + \cmd{\pIIe@CAW} \\
+% AL & = & \cmd{\pIIe@FAL}\times AW \\
+% IN & = & \cmd{\pIIe@FAI}\times AW / 2
+% \end{eqnarray*}
+% \end{minipage}}^^A
+% \hspace{\marginparsep}
+% \begin{minipage}[c]{105\unitlength}^^A
+% \rule{\linewidth}{0pt}
+% \begin{picture}(105,55)(0,-25)
+% \boldmath\bfseries
+% \THICKLINES
+% \put(100,0){\FPOINT} \put(101,-1){$P_1$}
+% ^^A \makeatletter
+% ^^A \pIIe@addtoGraph{^^J^^J\@percentchar\space >>> HUGO <<<^^J}^^A
+% ^^A \makeatother
+% \CBEZIER{100,0}{86.67,-1.67}{73.33,-8.33}{60,-20}^^A P1--P2
+% \put(60,-20){\FPOINT} \put(61,-23){$P_2$}
+% \put(60,-20){\line(0,1){10}}^^A P2--P3
+% \put(60,-10){\FPOINT} \put(61,-9){$P_3$}
+% \put(60,-10){\line(-1,0){60}}^^A P3--P4
+% \put(0,-10){\FPOINT} \put(1,-8){$P_4$}
+% \put(0,-10){\line(0,1){20}}^^A P4--P5
+% \put(0,10){\FPOINT} \put(1,6){$P_5$}
+% \put(0,10){\line(1,0){60}}^^A P5--P6
+% \put(60,10){\FPOINT} \put(61,7){$P_6$}
+% \put(60,10){\line(0,1){10}}^^A P6--P7
+% \put(60,20){\FPOINT} \put(61,21){$P_7$}
+% ^^A \makeatletter
+% ^^A \pIIe@addtoGraph{^^J^^J\@percentchar\space >>> HUGO <<<^^J}^^A
+% ^^A \makeatother
+% \CBEZIER{60,20}{73.33,8.33}{86.67,1.67}{100,0}^^A P7--P1
+% \thinlines
+% \put(100,0){\line(-2,-1){40}}^^A P1--P2
+% \put(60,20){\line(2,-1){40}}^^A P7--P1
+% ^^A
+% \put(93,-8){$P_a$}
+% \put(93,-6){\line(-3,2){6}}^^A
+% \put(80,-5){\OPOINT}
+% \put(73,-5){$P_m$}
+% \put(67,-8){$P_b$}
+% ^^A
+% \put(93,6){$P_d$}
+% \put(93,6){\line(-3,-2){6}}^^A
+% \put(80,5){\OPOINT}
+% \put(73,3){$P_n$}
+% \put(67,6){$P_c$}
+% ^^A
+% \put(-2,0){\line(1,0){4}}
+% \put(10,-7){\vector(-10,7){10}}\put(10,-8){$\,(0,0)$}
+% ^^A
+% \put(60,-20){\line(0,-1){5}}\put(100,0){\line(0,-1){25}}
+% \put(60,-25){\vector(1,0){40}}\put(100,-25){\vector(-1,0){40}}
+% \put(77,-24){$AL$}
+% ^^A
+% \put(0,10){\line(0,1){15}}\put(100,0){\line(0,1){25}}
+% \put(0,25){\vector(1,0){100}}\put(100,25){\vector(-1,0){100}}
+% \put(48,26){$L$}
+% ^^A
+% \put(60,-20){\line(-1,0){5}} \put(60,20){\line(-1,0){5}}
+% \put(55,-20){\vector(0,1){40}} \put(55,20){\vector(0,-1){40}}
+% \put(47,-2){$AW$}
+% ^^A
+% \put(25,-10){\vector(0,1){20}}\put(25,10){\vector(0,-1){20}}
+% \put(20,-2){$W$}
+% \put(80,-10){\line(1,0){5}} \put(80,-5){\line(1,0){5}}
+% \put(85,-7.5){\vector(0,-1){2.5}} \put(85,-7.5){\vector(0,1){2.5}}
+% \put(86,-10){$IN$}
+% \end{picture}
+% \end{minipage}
+% \caption[\LaTeX-like implementation of \cmd{\vector}]^^A
+% {Sketch of the path drawn by the \LaTeX-like implementation
+% of \cmd{\vector}. (Note: We are using the redefined macros of
+% \textsf{pict2e}!)}
+% \label{fig:vector:ltx}
+% \end{figure}
+%
+% \begin{macro}{\pIIe@vector@ltx}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% \changes{v0.1y}{2003/11/27}{First implementation. (RN,HjG)}
+% The arrow outline.
+% (Not yet quite the same as with \LaTeX's fonts.)
+%
+% Problem: Extrapolation.
+% There are only two design sizes (thicknesses) for \LaTeX's line
+% drawing fonts.
+% Where can we go from there?
+%
+% Note that only the arrow head will be drawn, if the length argument
+% of the \cmd{\vector} command is smaller than the calculated length
+% of the arrow head.
+% ^^A (Orig.\ \LaTeX: only, if length =~0!?)
+% \begin{macrocode}
+ \newcommand*\pIIe@vector@ltx{%
+ \@ydim\pIIe@FAW\@wholewidth \advance\@ydim\pIIe@CAW\relax
+ \@ovxx\pIIe@FAL\@ydim
+ \@xdim\@linelen \advance\@xdim-\@ovxx
+ \divide\@ydim\tw@
+ \divide\@ovxx\tw@ \advance\@ovxx\@xdim
+ \@ovyy\@ydim
+ \divide\@ovyy\tw@ \advance\@ovyy-\pIIe@FAI\@ydim
+% \end{macrocode}
+% \noindent
+% \BigIndent $P_d = P_1 + 1/3 (P_n - P_1)$
+% \begin{macrocode}
+ \pIIe@bezier@QtoC\@linelen\@ovxx\@ovro
+ \pIIe@bezier@QtoC\z@\@ovyy\@ovri
+% \end{macrocode}
+% \BigIndent $P_c = P_7 + 1/3 (P_n - P_7)$
+% \begin{macrocode}
+ \pIIe@bezier@QtoC\@xdim\@ovxx\@clnwd
+ \pIIe@bezier@QtoC\@ydim\@ovyy\@clnht
+% \end{macrocode}
+% \BigIndent $P_1$
+% \begin{macrocode}
+ \pIIe@moveto\@linelen\z@
+% \end{macrocode}
+% \BigIndent $P_a \quad P_b \quad P_2$
+% \begin{macrocode}
+ \pIIe@curveto\@ovro{-\@ovri}\@clnwd{-\@clnht}\@xdim{-\@ydim}%
+ \ifdim\@xdim>\z@
+% \end{macrocode}
+% \BigIndent $P_3$
+% \begin{macrocode}
+ \pIIe@lineto\@xdim{-\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_4$
+% \begin{macrocode}
+ \pIIe@lineto\z@{-\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_5$
+% \begin{macrocode}
+ \pIIe@lineto\z@{\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_6$
+% \begin{macrocode}
+ \pIIe@lineto\@xdim{\@halfwidth}%
+ \fi
+% \end{macrocode}
+% \BigIndent $P_7$
+% \begin{macrocode}
+ \pIIe@lineto\@xdim\@ydim
+% \end{macrocode}
+% \BigIndent $P_c \quad P_d \quad P_1$
+% \begin{macrocode}
+ \pIIe@curveto\@clnwd\@clnht\@ovro\@ovri\@linelen\z@}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{\PSTricks\ version}
+%
+% The arrows drawn by the variant generated by the \textsf{pstarrows}
+% package option are
+% modeled after those in the \textsf{pstricks} package~\cite{PSTRICKS}.
+% See Figure~\ref{fig:vector:pst}.
+%
+% \begin{figure}
+% \setlength\unitlength{.0067\linewidth}\hfill
+% \makebox[0pt][r]{^^A
+% \begin{minipage}[c]{17em}^^A
+% \unboldmath\small
+% \setlength\arraycolsep{.5\arraycolsep}^^A
+% \begin{eqnarray*}
+% L & = & \cmd{\@linelen} \\
+% W & = & \cmd{\@wholewidth} = 2\times\cmd{\@halfwidth} \\
+% AW & = & \cmd{\pIIe@FAW}\times W + \cmd{\pIIe@CAW} \\
+% AL & = & \cmd{\pIIe@FAL}\times AW \\
+% IN & = & \cmd{\pIIe@FAI}\times AL
+% \end{eqnarray*}
+% \end{minipage}}^^A
+% \hspace{\marginparsep}
+% \begin{minipage}[c]{105\unitlength}^^A
+% \rule{\linewidth}{0pt}
+% \begin{picture}(105,55)(0,-25)
+% \boldmath\bfseries
+% \THICKLINES
+% \put(100,0){\FPOINT} \put(101,-1){$P_1$}
+% \put(100,0){\line(-2,-1){40}}^^A P1--P2
+% \put(60,-20){\FPOINT} \put(61,-23){$P_2$}
+% \put(60,-20){\line(4,5){8}}^^A P2--P3
+% \put(68,-10){\FPOINT} \put(70,-11){$P_3$}
+% \put(68,-10){\line(-1,0){68}}^^A P3--P4
+% \put(0,-10){\FPOINT} \put(1,-8){$P_4$}
+% \put(0,-10){\line(0,1){20}}^^A P4--P5
+% \put(0,10){\FPOINT} \put(1,6){$P_5$}
+% \put(0,10){\line(1,0){68}}^^A P5--P6
+% \put(68,10){\FPOINT} \put(70,9){$P_6$}
+% \put(68,10){\line(-4,5){8}}^^A P6--P7
+% \put(60,20){\FPOINT} \put(61,21){$P_7$}
+% \put(60,20){\line(2,-1){40}}^^A P7--P1
+% \thinlines
+% \put(76,0){\FPOINT} \put(78,-1){$P_i$}
+% \put(68,-10){\line(4,5){8}}^^A P3--Pi
+% \put(68,10){\line(4,-5){8}}^^A P6--Pi
+% ^^A
+% \put(-2,0){\line(1,0){4}}
+% \put(10,-7){\vector(-10,7){10}}\put(10,-8){$\,(0,0)$}
+% ^^A
+% \put(60,-20){\line(0,-1){5}}\put(100,0){\line(0,-1){25}}
+% \put(60,-25){\vector(1,0){40}}\put(100,-25){\vector(-1,0){40}}
+% \put(77,-24){$AL$}
+% ^^A
+% \put(0,10){\line(0,1){15}}\put(100,0){\line(0,1){25}}
+% \put(0,25){\vector(1,0){100}}\put(100,25){\vector(-1,0){100}}
+% \put(48,26){$L$}
+% ^^A
+% \put(60,-20){\line(-1,0){5}} \put(60,20){\line(-1,0){5}}
+% \put(55,-20){\vector(0,1){40}} \put(55,20){\vector(0,-1){40}}
+% \put(47,-2){$AW$}
+% ^^A
+% \put(60,-20){\line(0,1){40}}
+% \put(60,0){\vector(1,0){15}}
+% \put(76,0){\vector(-1,0){16}}
+% \put(65,1){$IN$}
+% ^^A
+% \put(25,-10){\vector(0,1){20}}\put(25,10){\vector(0,-1){20}}
+% \put(20,-2){$W$}
+% \end{picture}
+% \end{minipage}
+% \caption[\PSTricks-like implementation of \cmd{\vector}]^^A
+% {Sketch of the path drawn by the \PSTricks-like implementation
+% of \cmd{\vector}. (Note: We are using the redefined macros of
+% \textsf{pict2e}!)}
+% \label{fig:vector:pst}
+% \end{figure}
+%
+% \begin{macro}{\pIIe@vector@pst}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% The arrow outline.
+% Note that only the arrowhead will be drawn, if the length argument
+% of the \cmd{\vector} command is smaller than the calculated length
+% of the arrow head.
+% ^^A (Orig.\ \LaTeX: only, if length =~0!?)
+% \begin{macrocode}
+ \newcommand*\pIIe@vector@pst{%
+ \@ydim\pIIe@FAW\@wholewidth \advance\@ydim\pIIe@CAW\relax
+ \@ovxx\pIIe@FAL\@ydim
+ \@xdim\@linelen \advance\@xdim-\@ovxx
+ \divide\@ydim\tw@
+ \@ovyy\@ydim \advance\@ovyy-\@halfwidth
+ \@ovdx\pIIe@FAI\@ovxx
+ \pIIe@@divide\@ovdx\@ydim
+ \@ovxx\strip@pt\@ovyy\@tempdimc
+ \advance\@ovxx\@xdim
+ \advance\@ovdx\@xdim
+% \end{macrocode}
+% \BigIndent $P_1$
+% \begin{macrocode}
+ \pIIe@moveto\@linelen\z@
+% \end{macrocode}
+% \BigIndent $P_2$
+% \begin{macrocode}
+ \pIIe@lineto\@xdim{-\@ydim}%
+ \ifdim\@xdim>\z@
+% \end{macrocode}
+% \BigIndent $P_3$
+% \begin{macrocode}
+ \pIIe@lineto\@ovxx{-\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_4$
+% \begin{macrocode}
+ \pIIe@lineto\z@{-\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_5$
+% \begin{macrocode}
+ \pIIe@lineto\z@{\@halfwidth}%
+% \end{macrocode}
+% \BigIndent $P_6$
+% \begin{macrocode}
+ \pIIe@lineto\@ovxx{\@halfwidth}%
+ \else
+% \end{macrocode}
+% \BigIndent $P_i$
+% \begin{macrocode}
+ \pIIe@lineto\@ovdx\z@
+ \fi
+% \end{macrocode}
+% \BigIndent $P_7$
+% \begin{macrocode}
+ \pIIe@lineto\@xdim\@ydim
+% \end{macrocode}
+% \BigIndent $P_1$
+% \begin{macrocode}
+ \pIIe@lineto\@linelen\z@}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Circle and Dot}
+% \label{sec:implementation:circle+dot}
+%
+% \begin{macro}{\@circle}
+% The circle will either be stroked \dots
+% \begin{macrocode}
+ \def\@circle#1{\begingroup \@tempswafalse\pIIe@circ{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@dot}
+% \dots\ or filled.
+% \begin{macrocode}
+ \def\@dot#1{\begingroup \@tempswatrue\pIIe@circ{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@circ}
+% Common code.
+% ^^A (Could\slash should be named \cmd{\@circ}!?)
+% \begin{macrocode}
+ \newcommand*\pIIe@circ[1]{%
+% \end{macrocode}
+% We need the radius instead of the diameter.
+% Unlike \SL, we check for negative or zero diameter argument.
+% ^^A Useful: error check when calculating coordinates.
+% \changes{v0.2h}{2004/01/07}{Check for negative or zero diameter
+% argument (RN,HjG)}
+% \changes{v0.2n}{2004/04/22}{Allow zero diameter (RN/HjG)}
+% \begin{macrocode}
+ \@tempdima#1\unitlength
+ \ifdim\@tempdima<\z@ \pIIe@badcircarg \fi
+ \divide\@tempdima\tw@
+ \pIIe@circle\@tempdima
+% \end{macrocode}
+% With the current state of affairs, we could use
+% \cmd{\pIIe@drawGraph} directly; but that would possibly be a case of
+% premature optimisation.
+% (Note to ourselves:
+% Use of the |@tempswa| switch both here and inside quarter-circle!
+% Hence a group is necessary there.)
+% \begin{macrocode}
+ \if@tempswa \pIIe@fillGraph \else \pIIe@strokeGraph \fi
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@circle}
+% Approximate a full circle by four quarter circles.
+% \changes{v0.1g}{2003/08/23}{Changed code (using
+% \cmd{\pIIe@add@qcircle}). (HjG,RN)}
+% \begin{macrocode}
+ \newcommand*\pIIe@circle[1]{%
+ \pIIe@qcircle[1]\z@{#1}\pIIe@qcircle \@ne{#1}%
+ \pIIe@qcircle \tw@{#1}\pIIe@qcircle\thr@@{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@qcircle}
+% \changes{v0.1u}{2003/11/21}{%
+% Change coding of quadrant number to match bit number in
+% \cmd{\pIIe@get@quadrants} (HjG)}
+% \changes{v0.1v}{2003/11/22}{Exchange \cmd{\@xdim} and \cmd{\@ydim} to
+% \cmd{\@ovri} and \cmd{\@ovro} (HjG)}
+% Approximate a quarter circle, using cubic Bezier splines.
+%
+% \begin{figure}
+% \setlength\unitlength{.0033\linewidth}\hfill
+% \begin{minipage}{125\unitlength}
+% \begin{picture}(125,122)(-13,-3)
+% \boldmath\bfseries
+% \thinlines
+% ^^A\put(-13,-3){\framebox(125,122){}}
+% \put(0,0){\OPOINT}\put(2,4){$(0,0)$}
+% \put(2,0){\vector(1,0){96}}\put(98,0){\vector(-1,0){96}}
+% \put(40,2){$radius$}
+% \put(0,2){\vector(0,1){96}}\put(0,98){\vector(0,-1){96}}
+% \put(-7,40){\rotatebox{90}{$radius$}}
+% \put(100,0){\FPOINT}\put(89,4){$P_0$}
+% \put(100,55){\OPOINT}\put(95,59){$P_1$}
+% \put(100,0){\line(1,0){10}}\put(102,55){\line(1,0){8}}
+% \put(110,0){\vector(0,1){55}}\put(110,55){\vector(0,-1){55}}
+% \put(104,2){{\footnotesize\rotatebox{90}{$0.5523\times radius$}}}
+% ^^A
+% \put(0,100){\line(0,1){10}}\put(55,102){\line(0,1){8}}
+% \put(0,110){\vector(1,0){55}}\put(55,110){\vector(-1,0){55}}
+% \put(2,112){{\footnotesize $0.5523\times radius$}}
+% ^^A
+% \put(55, 100){\OPOINT}\put(57,98){$P_2$}
+% \put(0,100){\FPOINT}\put(-12,98){$P_3$}
+% \THICKLINES
+% \cbezier(100,0)(100,55)(55,100)(0,100)
+% \end{picture}
+% \end{minipage}\hspace*{\fill}
+% \caption[Auxillary macro \cmd{\pIIe@qcircle}---draw a quarter circle]^^A
+% {Sketch of the quarter circle path drawn by \cmd{\pIIe@qcircle} (NE~quarter)}
+% \label{fig:qcircle}
+% \end{figure}
+%
+% \#1=Switch (0=no `moveto', 1=`moveto'),
+% \#2=Quadrant No., \#3=Radius.
+%
+% \begin{tabular}{l@{\qquad}l}
+% 0 = 1st Quadrant (NE) & 1 = 2nd Quadrant (NW) \\
+% 2 = 3rd Quadrant (SW) & 3 = 4th Quadrant (SE)
+% \end{tabular}
+%
+% \noindent
+% (\PS: We could use the \texttt{arc} operator!)
+%
+% $ 0.55228474983 = $``magic\ number'' (see~\cite{EBEZIER}).
+%
+% Sacrifice a save level (otherwise a private ``switch'' macro were
+% necessary!)
+% \begin{macrocode}
+ \newcommand*\pIIe@qcircle[3][0]{%
+ \begingroup
+ \@ovro#3\relax \@ovri0.55228474983\@ovro
+ \@tempdimc\@ovri \advance\@tempdimc-\@ovro
+ \ifnum#1>\z@ \@tempswatrue \else \@tempswafalse \fi
+ \ifcase#2\relax
+% \end{macrocode}
+% \BigIndent NE
+% \begin{macrocode}
+ \pIIe@@qcircle\@ovro\z@\z@\@ovri\@tempdimc\@ovro{-\@ovro}\@ovro
+ \or
+% \end{macrocode}
+% \BigIndent NW
+% \begin{macrocode}
+ \pIIe@@qcircle\z@\@ovro{-\@ovri}\z@{-\@ovro}\@tempdimc{-\@ovro}{-\@ovro}%
+ \or
+% \end{macrocode}
+% \BigIndent SW
+% \begin{macrocode}
+ \pIIe@@qcircle{-\@ovro}\z@\z@{-\@ovri}{-\@tempdimc}{-\@ovro}\@ovro{-\@ovro}%
+ \or
+% \end{macrocode}
+% \BigIndent SE
+% \begin{macrocode}
+ \pIIe@@qcircle\z@{-\@ovro}\@ovri\z@\@ovro{-\@tempdimc}\@ovro\@ovro
+ \fi
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@@qcircle}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% Ancillary macro; saves us some tokens above.
+%
+% Note:
+% Use of |rcurveto| instead of |curveto| makes it possible (or at
+% least much easier) to re-use this macro for the rounded corners of
+% ovals.
+% \begin{macrocode}
+ \newcommand*\pIIe@@qcircle[8]{%
+ \if@tempswa\pIIe@moveto{#1}{#2}\fi \pIIe@rcurveto{#3}{#4}{#5}{#6}{#7}{#8}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@badcircarg}
+% \changes{v0.2h}{2004/01/07}{New error message. (RN,HjG)}
+% Obvious cousin to |\@badlinearg| from the \LaTeX\ kernel.
+% \begin{macrocode}
+ \newcommand*\pIIe@badcircarg{%
+ \PackageError{pict2e}%
+ {Illegal argument in \protect\circle(*) or \protect\oval}%
+ {The radius of a circle, dot or oval corner must be greater than zero.}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Oval}
+% \label{sec:implementation:oval}
+%
+% \begin{macro}{\maxovalrad}
+% User level command, may be redefined by \cmd{\renewcommand*}.
+% It may be given as an explicit (rigid) length (i.e., with unit)
+% or as a number.
+% In the latter case it is used as a factor to be multiplied by
+% \cmd{\unitlength}.
+% \ (|dimen| and |count| registers should work, too.) \ ^^A
+% The default value is 20\,pt as specified for the \oarg{rad}
+% argument of \cmd{\oval} by the \LaTeX\ manual
+% \cite[p.~223]{LAMPORT}.
+% \begin{macrocode}
+\newcommand*\maxovalrad{20pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@defaultUL}
+% \begin{macro}{\pIIe@def@UL}
+% The aforementioned behaviour seems necessary, since
+% \cite[p.~223]{LAMPORT} does not specify explicitly whether the
+% \oarg{rad} argument should be given in terms of \cmd{\unitlength} or
+% as an absolute length.
+% To implement this feature, we borrow from the \textsf{graphics}
+% package:
+% See \cmd{\Gin@defaultbp} and \cmd{\Gin@def@bp} from
+% \texttt{graphics.dtx}.
+% \begin{macrocode}
+\newcommand*\pIIe@defaultUL[2]{%
+ \afterassignment\pIIe@def@UL\dimen@#2\unitlength\relax{#1}{#2}}
+% \end{macrocode}
+% However, things are simpler in our case, since we always need the
+% value stored in \cmd{\dimen@}.
+% Hence, we could\slash should omit the unnecessary argument!?)
+% \changes{v0.2h}{2004/01/07}{Check for negative or zero radius
+% argument (RN,HjG)}
+% \changes{v0.2n}{2004/04/22}{Moved radius test to \cmd{\oval},
+% where it belongs (RN/HjG)}
+% \begin{macrocode}
+\newcommand*\pIIe@def@UL{}
+\def\pIIe@def@UL#1\relax#2#3{%
+% \if!#1!%
+% \def#2{#3}% \edef ?
+% \else
+% \edef#2{\strip@pt\dimen@}%
+% \fi
+ \edef#2{\the\dimen@}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\oval}
+% \begin{macro}{\pIIe@maxovalrad}
+% The variant of \cmd{\oval} defined here takes an additional optional
+% argument, which specifies the maximum radius of the rounded corners
+% (default = 20\,pt, as given above).
+% ^^A [Test: length or counter register as optional argument?]
+% Unlike \SL, we check for negative or zero radius argument.
+% \cmd{\pIIe@maxovalrad} is the internal variant of \cmd{\maxovalrad}.
+% \changes{v0.2n}{2004/04/22}{Moved radius test from \cmd{\pIIe@def@UL}
+% (RN/HjG)}
+% \changes{v0.2n}{2004/04/22}{Allow zero diameter (RN/HjG)}
+% \begin{macrocode}
+\newcommand*\pIIe@maxovalrad{}
+\renewcommand*\oval[1][\maxovalrad]{%
+ \begingroup \pIIe@defaultUL\pIIe@maxovalrad{#1}%
+ \ifdim\pIIe@maxovalrad<\z@ \pIIe@badcircarg \fi
+% \end{macrocode}
+% Can't close the group here, since arguments must be parsed.
+% (This is done by calling the saved original.)
+% \begin{macrocode}
+ \pIIe@oldoval}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@oval}
+% (This is called in turn by the saved original.)
+% \begin{macrocode}
+\def\@oval(#1,#2)[#3]{%
+% \end{macrocode}
+% In analogy to circles, we need only half of the size value.
+% \begin{macrocode}
+ \@ovxx#1\unitlength \divide\@ovxx\tw@
+ \@ovyy#2\unitlength \divide\@ovyy\tw@
+ \@tempdimc \ifdim\@ovyy>\@ovxx \@ovxx \else \@ovyy \fi
+ \ifdim\pIIe@maxovalrad<\@tempdimc \@tempdimc\pIIe@maxovalrad\relax \fi
+% \end{macrocode}
+% Subtract the radius of the corners to get coordinates for the
+% straight line segments.
+% \begin{macrocode}
+ \@xdim\@ovxx \advance\@xdim-\@tempdimc
+ \@ydim\@ovyy \advance\@ydim-\@tempdimc
+% \end{macrocode}
+% Determine which parts of the oval we have to draw.
+% \begin{macrocode}
+ \pIIe@get@quadrants{#3}%
+% \end{macrocode}
+% ``\verb+@tempswa+ = false'' means, that we have to suppress the `moveto'
+% in the following quadrant.
+% \begin{macrocode}
+ \@tempswatrue
+% \end{macrocode}
+% The following isn't strictly necessary, but yields a single (unfragmented)
+% path even for \verb+[r]+ (right half of oval only).
+% Useful for future extensions.
+%
+% \noindent
+% Bits 3 and 0 set? (SE/NE)
+% \begin{macrocode}
+ \ifnum9=\@tempcnta
+ \pIIe@qoval\z@{-\@ovyy}{\@xdim}{-\@ovyy}\thr@@\@tempdimc\@ovxx\z@
+% \end{macrocode}
+% Bit 0 set! (NE)
+% \begin{macrocode}
+ \@tempcnta\@ne
+ \fi
+% \end{macrocode}
+% Bit 0 set? (NE)
+% \begin{macrocode}
+ \pIIe@qoval\@ovxx\z@\@ovxx\@ydim\z@\@tempdimc\z@\@ovyy
+% \end{macrocode}
+% Bit 1 set? (NW)
+% \begin{macrocode}
+ \pIIe@qoval\z@\@ovyy{-\@xdim}\@ovyy\@ne\@tempdimc{-\@ovxx}\z@
+% \end{macrocode}
+% Bit 2 set? (SW)
+% \begin{macrocode}
+ \pIIe@qoval{-\@ovxx}\z@{-\@ovxx}{-\@ydim}\tw@\@tempdimc\z@{-\@ovyy}%
+% \end{macrocode}
+% Bit 3 set? (SE)
+% \begin{macrocode}
+ \pIIe@qoval\z@{-\@ovyy}{\@xdim}{-\@ovyy}\thr@@\@tempdimc\@ovxx\z@
+% \end{macrocode}
+% Now we've finished, draw the oval and finally close the group opened
+% by \cmd{\oval} above.
+% \begin{macrocode}
+ \pIIe@strokeGraph
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@qoval}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% \changes{v0.1w}{2003/11/25}{Rename \cmd{\pIIe@oval}
+% to \cmd{\pIIe@qoval} (HjG)}
+% Ancillary macro; saves us some tokens above.
+%
+% \noindent
+% (\PS: We could use the \texttt{arc} or \texttt{arcto} operator!)
+% \begin{macrocode}
+ \newcommand*\pIIe@qoval[8]{%
+% \end{macrocode}
+% Bit set?
+% \begin{macrocode}
+ \ifodd\@tempcnta
+ \if@tempswa\pIIe@moveto{#1}{#2}\fi
+ \pIIe@lineto{#3}{#4}\pIIe@qcircle{#5}{#6}\pIIe@lineto{#7}{#8}%
+ \@tempswafalse
+ \else
+ \@tempswatrue
+ \fi
+% \end{macrocode}
+% Shift by one bit.
+% \begin{macrocode}
+ \divide\@tempcnta\tw@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@get@quadrants}
+% \changes{v0.1t}{2003/11/13}{Rename \cmd{\pIIe@get@ovalquadrants} to
+% \cmd{\pIIe@get@quadrants} (RN)}
+% According to the parameter (\texttt{tlbr}) bits are set in
+% \cmd{\@tempcnta}:\par
+% \begin{tabular}{l@{\qquad}l}
+% 0 = 1st Quadrant (NE) & 1 = 2nd Quadrant (NW) \\
+% 2 = 3rd Quadrant (SW) & 3 = 4th Quadrant (SE)
+% \end{tabular}\par\noindent
+% (Cf.\ \cmd{\@oval} and \cmd{\@ovvert} in the \LaTeX\ kernel.)
+% We abuse \cmd{\@setfpsbit} from the float processing modules of the
+% kernel.
+% ^^A (Should this go to section low-level?)
+% \begin{macrocode}
+ \newcommand*\pIIe@get@quadrants[1]{%
+ \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue \@tempcnta\z@
+ \@tfor\reserved@a:=#1\do{\csname @ov\reserved@a false\endcsname}%
+ \if@ovr \if@ovb\@setfpsbit2\fi \if@ovt\@setfpsbit4\fi \fi
+ \if@ovl \if@ovb\@setfpsbit1\fi \if@ovt\@setfpsbit8\fi \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Quadratic Bezier Curve}
+% \label{sec:implementation:bezier-curves}
+%
+% \begin{macro}{\@bezier}
+% \changes{v0.1u}{2003/11/21}{Change calculation of cubic bezier parameters
+% to use less tokens (HjG)}
+% \changes{v0.2o}{2004/06/25}
+% {Supply \cmd{\ignorespaces} to match kernel version (HjG)}
+% \changes{v0.2p}{2004/07/27}{\cmd{\@killglue} added. (RN)}
+% \#1, the maximum number of points to use, is simply ignored,
+% as well as \cmd{\qbeziermax}.
+%
+% The kernel version of \cmd{\@bezier} uses \cmd{\put} internally,
+% which features \cmd{\@killglue} and \cmd{\ignorespaces} commands
+% in turn (at the beginning and end, respectively).
+% Since we don't use \cmd{\put}, we have to add the latter commands
+% by hand.
+% \begin{macrocode}
+ \def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
+% \end{macrocode}
+% \BigIndent $P_0=(\#2,\#3)$\quad$P_m=(\#4,\#5)$\quad$P_3=(\#6,\#7)$
+% \begin{macrocode}
+ \@killglue
+ \begingroup
+ \@ovxx#2\unitlength \@ovyy#3\unitlength
+ \@ovdx#4\unitlength \@ovdy#5\unitlength
+ \@xdim#6\unitlength \@ydim#7\unitlength
+% \end{macrocode}
+% \noindent
+% \BigIndent $P_1 = P_m + 1/3 (P_0 - P_m)$
+% \begin{macrocode}
+ \pIIe@bezier@QtoC\@ovxx\@ovdx\@ovro
+ \pIIe@bezier@QtoC\@ovyy\@ovdy\@ovri
+% \end{macrocode}
+% \BigIndent $P_2 = P_m + 1/3 (P_3 - P_m)$
+% \begin{macrocode}
+ \pIIe@bezier@QtoC\@xdim\@ovdx\@clnwd
+ \pIIe@bezier@QtoC\@ydim\@ovdy\@clnht
+% \end{macrocode}
+% \BigIndent $(P_{0x},P_{0y})$
+% \begin{macrocode}
+ \pIIe@moveto\@ovxx\@ovyy
+% \end{macrocode}
+% \BigIndent $(P_{1x},P_{1y})$\quad$(P_{2x},P_{2y})$\quad$(P_{3x},P_{3y})$
+% \begin{macrocode}
+ \pIIe@curveto\@ovro\@ovri\@clnwd\@clnht\@xdim\@ydim
+ \pIIe@strokeGraph
+ \endgroup
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pIIe@bezier@QtoC}
+% \changes{v0.1u}{2003/11/21}{New ancillary macro (HjG)}
+% Ancillary macro; saves us some tokens above.
+%
+% \noindent
+% Transformation:
+% quadratic bezier parameters $\rightarrow$ cubic bezier parameters.
+%
+% \noindent
+% (Missing: Reference for mathematical formula. Or is this trivial?)
+% \begin{macrocode}
+ \newcommand*\pIIe@bezier@QtoC[3]{%
+ \@tempdimc#1\relax \advance\@tempdimc-#2\relax
+ \divide\@tempdimc\thr@@ \advance\@tempdimc #2\relax
+ #3\@tempdimc}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Commands from other packages}
+%
+% \subsubsection{Package \textsf{ebezier}}
+% \label{sec:implementation:ebezier}
+%
+% One feature from~\cite{EBEZIER}.
+%
+% \begin{macro}{\cbezier}
+% \begin{macro}{\@cbezier}
+% \changes{v0.2o}{2004/06/25}
+% {Supply \cmd{\ignorespaces} to match kernel version (HjG)}
+% \changes{v0.2p}{2004/07/27}{\cmd{\@killglue} added. (RN)}
+% \begin{macro}{\pIIe@@cbezier}
+% \#1, the maximum number of points to use, is simply ignored,
+% as well as \cmd{\qbeziermax}.
+%
+% Like the kernel version of \cmd{\@bezier},
+% the original version of \cmd{\@cbezier} uses \cmd{\put} internally,
+% which features \cmd{\@killglue} and \cmd{\ignorespaces} commands
+% in turn (at the beginning and end, respectively).
+% Since we don't use \cmd{\put}, we have to add the latter commands
+% by hand.
+%
+% ^^A (What about |\lbezier|?)
+%
+% \noindent
+% Original head of the macro:\par
+% \verb|\def\cbezier{\@ifnextchar [{\@cbezier}{\@cbezier[0]}}|\par
+% \noindent Changed analogous to the \LaTeX\ kernel's \cmd{\qbezier} and
+% \cmd{\bezier}:
+% \begin{macrocode}
+ \AtBeginDocument{\@ifundefined{cbezier}{\newcommand}{\renewcommand}*%
+ \cbezier[2][0]{\pIIe@@cbezier[#1]#2}%
+ \@ifdefinable\pIIe@@cbezier{}%
+ \def\pIIe@@cbezier#1)#2(#3)#4(#5)#6({\@cbezier#1)(#3)(#5)(}%
+ \def\@cbezier[#1](#2,#3)(#4,#5)(#6,#7)(#8,#9){%
+ \@killglue
+ \pIIe@moveto{#2\unitlength}{#3\unitlength}%
+ \pIIe@curveto{#4\unitlength}{#5\unitlength}%
+ {#6\unitlength}{#7\unitlength}{#8\unitlength}{#9\unitlength}%
+ \pIIe@strokeGraph
+ \ignorespaces}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Other packages}
+% \label{sec:implementation:others}
+%
+% Other macros from various packages may be included in future
+% versions of this package.
+% ^^A (Or in a sibling package \textsf{pict2x} or \textsf{pict2ext}.)
+%
+% \subsection{Mode `original'}
+%
+% ^^A Necessary? Useful?
+% ^^A \bigskip
+%
+% \noindent
+% Other branch of the big switch,\label{big-switch-end}
+% started near the beginning of the code
+% (see page~\pageref{big-switch-begin}).
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \begin{macro}{\oval}
+% \begin{macro}{\maxovalrad}
+% \begin{macro}{\OriginalPictureCmds}
+% Gobble the new optional argument and continue with saved version.
+% \cmd{\maxovalrad} is there to avoid error messages in case the
+% user's document redefines it with \cmd{\renewcommand*}.
+% Likewise, \cmd{\OriginalPictureCmds} is only needed for test
+% documents.
+% \begin{macrocode}
+ \renewcommand*\oval[1][]{\pIIe@oldoval}
+ \newcommand*\maxovalrad{20pt}
+ \newcommand*\OriginalPictureCmds{}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Final clean-up}
+%
+% Restore Catcodes.
+% \begin{macrocode}
+\Gin@codes
+\let\Gin@codes\relax
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+%\ifdeveloping
+%
+% \section{Bugs}
+%
+% Das muss hier besser werden! Wie? longtable!?
+%
+% \bigskip
+% \noindent
+% \begin{tabular}{@{}rlccclp{30mm}@{}}
+% \hline
+% No. & Submitted by & Reported & V.no. & Fixed & Fixed by
+% & Remark \\
+% \hline
+% \hline
+% 1 & Volker Kiefel & 2004/05/29 & v0.2o & 2004/06/25 & HjG
+% & Trouble with language support; e.g., \texttt{german.sty}.
+% ($\mapsto$ Save and restore catcodes.) \\
+% \hline
+% 2 & Dwight Aplevich & 2004/06/04 & v0.2o & 2004/06/25 & HjG
+% & Cannot connect two |\cbezier| curves (second one displaced).
+% ($\mapsto$ Supply |\ignorespaces| in definition of bezier
+% commands.) \\
+% \hline
+% 3 & Alan G. Isaac & 2004/06/23 & v0.2o & 2004/06/25 & HjG
+% & Like \#2. \\
+% \hline
+% \end{tabular}
+%
+%\iffalse
+% \newenvironment{erratalist}
+% {\begin{longtable}{r>{\raggedright}p{2cm}l>{\raggedright}p{10cm}l}}
+% {\endgobble\end{longtable}}
+%\fi
+%
+% \bigskip
+% \noindent
+% \begin{longtable}{@{}r^^A No.
+% >{\raggedright}p{2cm}^^A Submitted
+% >{\raggedright}p{2cm}^^A Fixed
+% >{\raggedright}p{8.5cm}^^A Remark
+% @{}}
+% \hline
+% No. & Submitted & Fixed & Remark (Synopsis and Fix)
+% \tabularnewline \hline \hline
+% 1 & v0.2n? 2004/05/29 Volker Kiefel
+% & v0.2o 2004/06/25 HjG
+% & Trouble with language support; e.g., \texttt{german.sty}.
+% \\ ($\mapsto$ Save and restore catcodes.)
+% \tabularnewline \hline
+% 2 & v0.2n? 2004/06/04 Dwight Aplevich
+% & v0.2o 2004/06/25 HjG
+% & Cannot connect two |\cbezier| curves (second one displaced).
+% \\ ($\mapsto$ Supply |\ignorespaces| in definition of bezier
+% commands.)
+% \tabularnewline \hline
+% 3 & v0.2n? 2004/06/23 Alan G. Isaac
+% & v0.2o 2004/06/25 HjG
+% & Like \#2.
+% \tabularnewline \hline
+% \end{longtable}
+%
+% \bigskip
+% \noindent
+% \begin{tabular}{@{}r>{\raggedright}p{.6\textwidth}@{}}^^A tabularx? RN
+% \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 1 \\
+% Submitted by & Volker Kiefel \\
+% Reported & 2004/05/29 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Trouble with language support; e.g., \texttt{german.sty}.
+% ($\mapsto$\,Save and restore catcodes.)
+% \tabularnewline \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 2 \\
+% Submitted by & Dwight Aplevich \\
+% Reported & 2004/06/04 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Cannot connect two |\cbezier| curves (second one displaced).
+% ($\mapsto$ Supply |\ignorespaces| in definition of bezier
+% commands.)
+% \tabularnewline \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 3 \\
+% Submitted by & Alan G. Isaac \\
+% Reported & 2004/06/23 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Like \#2.
+% \tabularnewline \hline
+% \end{tabular}
+%
+% \bigskip
+% \noindent
+% \begin{longtable}{@{}rp{.6\textwidth}@{}}
+% \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 1 \\
+% Submitted by & Volker Kiefel \\
+% Reported & 2004/05/29 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Trouble with language support; e.g., \texttt{german.sty}.
+% ($\mapsto$\,Save and restore catcodes.)
+% \tabularnewline \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 2 \\
+% Submitted by & Dwight Aplevich \\
+% Reported & 2004/06/04 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Cannot connect two |\cbezier| curves (second one displaced).
+% ($\mapsto$ Supply |\ignorespaces| in definition of bezier
+% commands.)
+% \tabularnewline \hline
+% \begin{tabular}[t]{@{}>{\bfseries}rl@{}}
+% No. & 3 \\
+% Submitted by & Alan G. Isaac \\
+% Reported & 2004/06/23 \\
+% Version & v0.2o \\
+% Fixed & 2004/06/25 \\
+% Fixed by & HjG
+% \end{tabular} &
+% Like \#2.
+% \tabularnewline \hline
+% \end{longtable}
+%
+%\fi
+%
+%
+% \Finale
+\endinput