diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/oberdiek/picture.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/oberdiek/picture.dtx | 626 |
1 files changed, 626 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/oberdiek/picture.dtx b/Master/texmf-dist/source/latex/oberdiek/picture.dtx new file mode 100644 index 00000000000..c7d36515afc --- /dev/null +++ b/Master/texmf-dist/source/latex/oberdiek/picture.dtx @@ -0,0 +1,626 @@ +% \iffalse meta-comment +% +% Copyright (C) 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.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 2005/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Heiko Oberdiek. +% +% This work consists of the main source file picture.dtx +% and the derived files +% picture.sty, picture.pdf, picture.ins, picture.drv, +% picture-example.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/oberdiek/picture.dtx +% CTAN:macros/latex/contrib/oberdiek/picture.pdf +% +% Unpacking: +% (a) If picture.ins is present: +% tex picture.ins +% (b) Without picture.ins: +% tex picture.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{picture.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If picture.drv is present: +% latex picture.drv +% (b) Without picture.drv: +% latex picture.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex picture.dtx +% makeindex -s gind.ist picture.idx +% pdflatex picture.dtx +% makeindex -s gind.ist picture.idx +% pdflatex picture.dtx +% +% Installation: +% TDS:tex/latex/oberdiek/picture.sty +% TDS:doc/latex/oberdiek/picture.pdf +% TDS:doc/latex/oberdiek/picture-example.tex +% TDS:source/latex/oberdiek/picture.dtx +% +%<*ignore> +\begingroup + \def\x{LaTeX2e} +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +%</ignore> +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: picture 2006/08/26 v1.0 Dimens for picture macros (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\preamble + +This is a generated file. + +Copyright (C) 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.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 2005/12/01 or later. + +This work has the LPPL maintenance status "maintained". + +This Current Maintainer of this work is Heiko Oberdiek. + +This work consists of the main source file picture.dtx +and the derived files + picture.sty, picture.pdf, picture.ins, picture.drv, + picture-example.tex. + +\endpreamble + +\generate{% + \file{picture.ins}{\from{picture.dtx}{install}}% + \file{picture.drv}{\from{picture.dtx}{driver}}% + \usedir{tex/latex/oberdiek}% + \file{picture.sty}{\from{picture.dtx}{package}}% + \usedir{doc/latex/oberdiek}% + \file{picture-example.tex}{\from{picture.dtx}{example}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* picture.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `picture.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{picture.drv}% + [2006/08/26 v1.0 Dimens for picture macros (HO)] +\documentclass{ltxdoc} +\usepackage{holtxdoc} +\begin{document} + \DocInput{picture.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{294} +% +% \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 \~} +% +% \GetFileInfo{picture.drv} +% +% \title{The \xpackage{picture} package} +% \date{2006/08/26 v1.0} +% \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} +% +% \maketitle +% +% \begin{abstract} +% There are macro and environment arguments that expect numbers +% that will internally be multiplicated with \cs{unitlength}. +% This package extends the syntax of these arguments that +% dimens with calculation support can be added for these arguments. +% \end{abstract} +% +% \tableofcontents +% +% \section{User interface} +% +% \subsection{Introduction} +% +% The environment |picture| and macros such as \cs{put}, \cs{line}, +% \cs{vector} and other macros have arguments that expect numbers +% that are used as factor for \cs{unitlength}. +% This package redefines such macros and adds code that detects +% whether such an argument is given as number or as length. +% In the latter case, the length is used directly without multiplying +% with \cs{unitlength}. +% +% \subsection{Options} +% +% Depending on the available features, also length expressions +% can be given. Option \xoption{calc} loads package \xpackage{calc}. +% Then expressions of these package may be used. +% Otherwise \xoption{etex} wraps the length argument inside +% \cs{dimexpr}\dots\cs{relax}, if \eTeX\ is available. Otherwise +% option \xoption{plain} uses plain assignments without calculation +% support. +% +% The default is \xoption{calc} if package \xpackage{calc} +% is loaded before package \xoption{picture}. If you specify +% option \xoption{calc} the loading of \xpackage{calc} is ensured. +% Otherwise package \xpackage{picture} looks whether \cs{dimexpr} +% is available and uses then option \xoption{etex} as default. +% If \eTeX\ also could not be found, then \xoption{plain} is used. +% +% \subsection{Example} +% +% \begin{macrocode} +%<*example> +\documentclass{article} + +\usepackage[calc]{picture} + +\begin{document} + +\setlength{\unitlength}{1pt} + +\begin{picture}(\widthof{Hello World}, 10mm) + \put(0, 0){\makebox(0,0)[lb]{Hello World}} + \put(0, \heightof{Hello World} + \fboxsep){% + \line(1, 0){\widthof{Hello World}}% + } + \put(\widthof{Hello World}, 10mm){% + \line(0, -1){10mm}% + } +\end{picture}% + +\end{document} +%</example> +% \end{macrocode} +% +% \subsection{Supported packages} +% +% Package \xpackage{pspicture} is supported, but it must be loaded +% before package \xpackage{picture}. +% +% New macros can be supported by \cs{picture@redefine}. +% The first argument is the macro which contains the arguments +% in its parameter text that you want to support by package \xpackage{picture}. +% The second argument contains the parameter text. Change \# to \& for +% the arguments in question. +% Examples (already used by package \xpackage{picture}): +% \begin{quote} +% |\picture@redefine\put{(&1,&2)}|\\ +% |\picture@redefine\line{(#1,#2)&3}| +% \end{quote} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \subsection{Identification} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{picture}% + [2006/08/26 v1.0 Dimens for picture macros (HO)] +% \end{macrocode} +% +% \subsection{Options} +% +% \begin{macrocode} +\def\Pc@calcname{calc} +\def\Pc@etexname{etex} +\def\Pc@plainname{plain} +% \end{macrocode} +% \begin{macro}{\Pc@method} +% Macro \cs{Pc@method} stores the method to use for calculations. +% Check which features are available and set the default for \cs{Pc@method}. +% \begin{macrocode} +\@ifpackageloaded{calc}{% + \let\Pc@method\Pc@calcname +}{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname dimexpr\endcsname\relax + \let\Pc@method\Pc@plainname + \else + \let\Pc@method\Pc@etexname + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\DeclareOption{plain}{% + \let\Pc@method\Pc@plainname +} +\DeclareOption{etex}{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname dimexpr\endcsname\relax + \PackageError{picture}{% + e-TeX is not available% + }\@ehc + \else + \let\Pc@method\Pc@etexname + \fi +} +\DeclareOption{calc}{% + \let\Pc@method\Pc@calcname +} +\ProcessOptions* +\begingroup + \let\on@line\@empty + \PackageInfo{picture}{Calculation method: \Pc@method} +\endgroup +% \end{macrocode} +% +% \subsection{Calculation method} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@calcname + \RequirePackage{calc}% +\fi +% \end{macrocode} +% +% \subsubsection{Method \xoption{calc}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@calcname + \def\Pc@tokslength#1{% + \begingroup + \let\calc@error\Pc@calc@error + \setlength\dimen@{#1\unitlength}\Pc@next\Pc@nil{#1}% + }% + \let\PcOrg@calc@error\calc@error + \def\Pc@calc@error#1{% + \expandafter\ifx\expandafter\unitlength\noexpand#1\relax + \def\calc@next##1!{% + \endgroup + \aftergroup\afterassignment + \aftergroup\Pc@next + }% + \else + \@ReturnAfterFi{% + \PcOrg@calc@error{#1}% + }% + \fi + }% + \expandafter\@firstofone +\else + \expandafter\@gobble +\fi +{% + \long\def\@ReturnAfterFi#1\fi{\fi#1}% +} +% \end{macrocode} +% +% \subsubsection{Method \xoption{etex}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@etexname + \def\Pc@tokslength#1{% + \begingroup + \afterassignment\Pc@next + \dimen@=\dimexpr#1\unitlength\Pc@nil{#1}% + }% +\fi +% \end{macrocode} +% +% \subsubsection{Method \xoption{plain}} +% +% \begin{macrocode} +\ifx\Pc@method\Pc@plainname + \def\Pc@tokslength#1{% + \begingroup + \afterassignment\Pc@next + \dimen@=#1\unitlength\Pc@nil{#1}% + }% +\fi +% \end{macrocode} +% +% \subsubsection{Help macros} +% +% \begin{macrocode} +\def\Pc@next#1\Pc@nil#2{% + \ifx\\#1\\% + \endgroup + \Pc@addtoks{{#2}}% + \else + \expandafter\endgroup + \expandafter\Pc@addtoks\expandafter{% + \expandafter{\the\dimen@\@gobble}% + }% + \fi +} +% \end{macrocode} +% \begin{macro}{\Pc@nil} +% \cs{Pc@nil} must not have the meaning of \cs{relax} because of +% \cs{dimexpr}. +% \begin{macrocode} +\let\Pc@nil\message +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@addtoks} +% \begin{macrocode} +\def\Pc@addtoks#1{% + \toks@=\expandafter{\the\toks@#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@init} +% \begin{macrocode} +\def\Pc@init#1{% + \begingroup + \toks@={#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@finish} +% \begin{macrocode} +\def\Pc@finish#1{% + \expandafter\endgroup + \expandafter#1\the\toks@ +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Redefinitions} +% +% \begin{macro}{\picture@redefine} +% \begin{tabular}[t]{@{}l@{ }l@{}} +% |#1|:& command name\\ +% |#2|:& parameter text, length parameter with \& instead of \# +% \end{tabular} +% \begin{macrocode} +\def\picture@redefine#1#2{% + \begingroup + \edef\reserved@a{% + \noexpand\noexpand + \expandafter\noexpand + \csname PcOrg@\expandafter\@gobble\string#1\endcsname + }% + \toks0{#1}% + \Pc@first#2&0% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@first} +% \begin{macrocode} +\def\Pc@first#1&{% + \toks1={#1}% + \toks2={\Pc@init{#1}}% + \Pc@scanlength +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@scanlength} +% |#1|: number of length parameter or zero +% \begin{macrocode} +\def\Pc@scanlength#1{% + \ifcase#1 % + \expandafter\Pc@last + \else + \toks1=\expandafter{\the\toks1 ###1}% + \toks2=\expandafter{\the\toks2 \Pc@tokslength{###1}}% + \expandafter\Pc@scannext + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@scannext} +% \begin{macrocode} +\def\Pc@scannext#1&{% + \ifx\\#1\\% + \else + \toks1=\expandafter{\the\toks1 #1}% + \toks2=\expandafter{\the\toks2 \Pc@addtoks{#1}}% + \fi + \Pc@scanlength +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Pc@last} +% \begin{macrocode} +\def\Pc@last{% + \edef\x{% + \endgroup + \let\reserved@a\the\toks0 % + \def\the\toks0 \the\toks1 {% + \the\toks2 % + \noexpand\Pc@finish\reserved@a + }% + }% + \x +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{\LaTeX\ base macros} +% +% \begin{macrocode} +\picture@redefine\@picture{(&1,&2)(&3,&4)} +\picture@redefine\put{(&1,&2)} +\picture@redefine\multiput{(&1,&2)} +\picture@redefine\@multiput{(&1,&2)} +\picture@redefine\line{(#1,#2)&3} +\picture@redefine\vector{(#1,#2)&3} +\picture@redefine\dashbox{&1(&2,&3)} +\picture@redefine\@circle{&1} +\picture@redefine\@dot{&1} +\picture@redefine\@bezier{#1(&2,&3)(&4,&5)(&6,&7)} +\picture@redefine\@imakepicbox{(&1,&2)} +% \end{macrocode} +% +% \subsubsection{Package \xpackage{pspicture}} +% +% Package \xpackage{pspicture} changes the signature of \cs{@oval} +% by adding an optional argument. +% \begin{macrocode} +\@ifpackageloaded{pspicture}{% + \picture@redefine\@oval{[&1](&2,&3)} + \picture@redefine\Line{(&1,&2)} + \picture@redefine\Curve{(&1,&2)} + \picture@redefine\Vector{(&1,&2)} +}{ + \picture@redefine\@oval{(&1,&2)} +} +% \end{macrocode} +% \begin{macrocode} +%</package> +% \end{macrocode} +% \section{Installation} +% +% \paragraph{CTAN.} This package is available on +% CTAN\footnote{\url{ftp://ftp.ctan.org/tex-archive/}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/oberdiek/picture.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/oberdiek/picture.pdf}] Documentation. +% \end{description} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex picture.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \sbox0{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{$\quad\rightarrow\quad$}>{\ttfamily}l@{}} +% picture.sty & tex/latex/oberdiek/picture.sty\\ +% picture.pdf & doc/latex/oberdiek/picture.pdf\\ +% picture-example.tex & doc/latex/oberdiek/picture-example.tex\\ +% picture.dtx & source/latex/oberdiek/picture.dtx\\ +% \end{tabular}^^A +% }% +% \ifdim\wd0>\linewidth +% \mbox{}\nobreak\hskip0pt minus\leftmargin +% \usebox0 +% \nobreak\hskip0pt minus\rightmargin +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \paragraph{Refresh file databases.} If your \TeX~distribution +% (\teTeX, \mikTeX, \dots) rely on file databases, you must refresh +% these. For example, \teTeX\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Attached source.} +% +% The PDF documentation on CTAN also includes the +% \xfile{.dtx} source file. It can be extracted by +% AcrobatReader 6 or higher. Another option is \textsf{pdftk}, +% e.g. unpack the file into the current directory: +% \begin{quote} +% \verb|pdftk picture.pdf unpack_files output .| +% \end{quote} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intension: +% \begin{quote} +% \verb|latex \install=y\input{picture.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex picture.dtx +%makeindex -s gind.ist picture.idx +%pdflatex picture.dtx +%makeindex -s gind.ist picture.idx +%pdflatex picture.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{History} +% \begin{Version}{2006/08/26 v1.0} +% \item +% First released version. (First start of the project was June/July 2002.) +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput |