diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/mfpic')
-rw-r--r-- | Master/texmf-dist/tex/generic/mfpic/mfpic.sty | 36 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/mfpic/mfpic.tex | 1603 |
2 files changed, 1639 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/mfpic/mfpic.sty b/Master/texmf-dist/tex/generic/mfpic/mfpic.sty new file mode 100644 index 00000000000..cdd50eb92f8 --- /dev/null +++ b/Master/texmf-dist/tex/generic/mfpic/mfpic.sty @@ -0,0 +1,36 @@ +%% +%% This is file `mfpic.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% mfpic.dtx (with options: `sty') +%% +%% ------------------------------------------------------------------- +%% +%% Copyright 2002--2003, Daniel H. Luecking +%% +%% Mfpic consists of the 3 files mfpic.dtx, grafbase.dtx and mfpic.ins +%% and the 5 files they generate: mfpic.tex, mfpic.sty, grafbase.mf, +%% grafbase.mp, and dvipsnam.mp. +%% +%% Documentation, examples, and ancillary files are separate. See +%% readme.1st for a complete list. +%% +%% Mfpic may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version +%% 1999/12/01 or later. +%% +%% With respect to the proposed draft LPPL-1.3: mfpic has maintenance +%% status "maintained". The Current Maintainer is Daniel H. Luecking. There +%% are several Base Interpreters: TeX, LaTeX, MetaPost and Metafont. +%% +\input mfpic.tex\relax +\endinput +%% +%% End of file `mfpic.sty'. diff --git a/Master/texmf-dist/tex/generic/mfpic/mfpic.tex b/Master/texmf-dist/tex/generic/mfpic/mfpic.tex new file mode 100644 index 00000000000..df2b23850b0 --- /dev/null +++ b/Master/texmf-dist/tex/generic/mfpic/mfpic.tex @@ -0,0 +1,1603 @@ +%% +%% This is file `mfpic.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% mfpic.dtx (with options: `tex') +%% +%% ------------------------------------------------------------------- +%% +%% Copyright 2002--2003, Daniel H. Luecking +%% +%% Mfpic consists of the 3 files mfpic.dtx, grafbase.dtx and mfpic.ins +%% and the 5 files they generate: mfpic.tex, mfpic.sty, grafbase.mf, +%% grafbase.mp, and dvipsnam.mp. +%% +%% Documentation, examples, and ancillary files are separate. See +%% readme.1st for a complete list. +%% +%% Mfpic may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version +%% 1999/12/01 or later. +%% +%% With respect to the proposed draft LPPL-1.3: mfpic has maintenance +%% status "maintained". The Current Maintainer is Daniel H. Luecking. There +%% are several Base Interpreters: TeX, LaTeX, MetaPost and Metafont. +%% +{\catcode\lq\.12 \catcode\lq\/12% +\gdef\mfpfileversion{0.7a beta}% +\gdef\mfpfiledate{2004/04/16}% +\gdef\mfpicversion{70}}% +\ifx\MFPicpackagE\UndEfInEd\else\expandafter\endinput\fi% +\let\mfpsaveplus\+% +\let\+\tabalign% +\edef\MFPrestoreequal{\catcode61\space\the\catcode61\relax}% +\catcode61 12\relax% +\edef\MFPrestorespace{\catcode32=\the\catcode32\relax}% +\catcode32=10\relax% +\edef\MFPrestoreEOL{\catcode13=\the\catcode13\relax}% +\catcode13=5\relax +\edef\MFPrestorelq{\catcode96=\the\catcode96\relax}% +\catcode96=12 +\def\MFPrestorecode#1{\catcode`\string#1=\the\catcode`#1\relax}% +\edef\MFPicpackagE{% + \MFPrestorecode{@}\MFPrestorecode{-}% + \MFPrestorecode{:}\MFPrestorecode{;}% + \MFPrestorecode{.}\MFPrestorecode{,}% + \MFPrestorecode{!}\MFPrestorecode{?}% + \MFPrestorecode{(}\MFPrestorecode{)}% + \MFPrestorecode{[}\MFPrestorecode{]}% + \MFPrestorecode{'}\MFPrestorecode{/}% + \MFPrestorecode{"}\MFPrestorecode{*}% + \MFPrestorecode{$}\MFPrestorecode{+}% + \MFPrestorecode{_}\MFPrestorecode{>}% + \MFPrestorecode{<}\MFPrestorecode{~}% + \MFPrestorelq\MFPrestoreEOL\MFPrestorespace + \MFPrestoreequal\catcode 10=\number\catcode10}% +\catcode`\@=11 +\ifx\@makeother\UndEfInEd \def\@makeother#1{\catcode`#1=12\relax}\fi +\def\mfp@sanitize{% +\catcode10=12\catcode13=5\catcode`\$=3\catcode`\ =10 +\@makeother\:\@makeother\;\@makeother\.\@makeother\,% +\@makeother\!\@makeother\?\@makeother\(\@makeother\)% +\@makeother\[\@makeother\]% +\@makeother\'\@makeother\/\@makeother\"\@makeother\*% +\@makeother\_\@makeother\`\@makeother\+\@makeother\=% +\@makeother\>\@makeother\<\@makeother\~\@makeother\-}% +\mfp@sanitize +\edef\restorenewlinechar{\newlinechar=\number\newlinechar\relax}% +\chardef\mfp@ctrlJ10 \chardef\mfp@ctrlM13 +\newlinechar\mfp@ctrlJ\def\@nl{^^J}% +\newif\ifmfpicdebug +\ifx\mfpicdebug\UndEfInEd \mfpicdebugfalse +\else \mfpicdebugtrue +\fi +\def\mfp@DBlog#1{% + \ifmfpicdebug{\let\@msgbreak\mfp@errbrk\wlog{Mfpic debug: #1}}\fi}% +\def\mfp@msg#1{{\newlinechar\mfp@ctrlJ\immediate\write16{#1}}}% +\def\@msgbreak{^^J}% +\def\mfp@spaces{\space\space\space\space\space\space}% +\def\mfp@msgbrk{^^J\mfp@spaces\space}% +\def\mfp@errbrk{\mfp@msgbrk\mfp@spaces}% +\def\mfp@warnbrk{\mfp@errbrk\space\space}% +\def\Mfpic@msg#1{{\let\@msgbreak=\mfp@msgbrk + \mfp@msg{Mfpic: #1 }}}% +\def\Mfpic@warn#1{{\let\@msgbreak=\mfp@warnbrk + \mfp@msg{^^JMfpic warning: #1}}}% +\def\mfp@errmsg#1#2{{\newlinechar\mfp@ctrlJ + \let\@msgbreak\mfp@errbrk + \errhelp{#2}\errmessage{Mfpic error: #1}}}% +\def\@online{ on line \number\inputlineno}% +\def\@mfplineno{line \number\inputlineno\space in TeX source}% +\ifx\@firstoftwo\UndEfInEd \long\def\@firstoftwo#1#2{#1}\fi +\ifx\@secondoftwo\UndEfInEd \long\def\@secondoftwo#1#2{#2}\fi +\let\@xp\expandafter +\def\@XP{\@xp\@xp\@xp}% +\def\mfp@ifdefined#1{% + \ifx#1\UndEfInEd \@xp\@secondoftwo + \else\ifx#1\relax \@XP\@secondoftwo + \else \@XP\@firstoftwo + \fi\fi}% +\mfp@ifdefined\@firstofone{}{\long\def\@firstofone#1{#1}}% +\newif\if@mfp@latex \@mfp@latexfalse +\mfp@ifdefined\documentstyle + {{\def\x{AmS-TeX}% + \ifx \fmtname\x \mfp@DBlog{AmS-TeX detected.}% + \else + \global\@mfp@latextrue \mfp@DBlog{LaTeX detected.}% + \fi}}% + {\mfp@DBlog{Neither LaTeX2e nor LaTeX209 nor AmS-TeX.}}% +\newif\if@mfp@latexe \@mfp@latexefalse +\mfp@ifdefined\documentclass + {\@mfp@latexetrue \mfp@DBlog{LaTeX2e detected.}}% + {\mfp@DBlog{Not LaTeX2e.}}% +\newif\if@mfp@pdf \@mfp@pdffalse +\mfp@ifdefined\pdfoutput + {\mfp@DBlog{PdfTeX detected...}% + \ifcase\pdfoutput + \mfp@DBlog{...with dvi output.}% + \else + \@mfp@pdftrue \mfp@DBlog{...with PDF output.}% + \fi}% + {\mfp@DBlog{Not pdfTeX.}}% +\if@mfp@latex \else \let\@@par\endgraf \fi +\def\mfp@restorepar{\let\par\@@par}% +\if@mfp@latex\else + \def\@namedef#1{\@xp\def\csname #1\endcsname}% + \def\@nameuse#1{\csname #1\endcsname}% +\fi +\mfp@ifdefined\@bsphack{}% + {\@nameuse{newskip}\@savsk + \@nameuse{newcount}\@savsf + \def\@bsphack{\relax + \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi}% + \def\@esphack{\relax + \ifhmode \spacefactor\@savsf + \ifdim\@savsk>\z@ \ignorespaces + \fi\fi}}% +\mfp@DBlog{Defining test for previous definitions of macros.}% +\mfp@ifdefined\mfp@testdef + {\Mfpic@warn{% + Hey! How can \string\mfp@testdef\space already be defined? % + \@msgbreak I'll redefine it anyway!}}% + {}% +\def\mfp@testdef#1{% + \ifx#1\UndEfInEd + \else\ifx#1\relax + \Mfpic@warn{\string #1 was previouly defined to be \string\relax.}% + \else + \Mfpic@warn{\string #1 is already defined!}% + \fi\fi}% +\mfp@testdef\newdef +\mfp@testdef\newlet +\def\newdef#1{\mfp@testdef#1\def#1}% +\newdef\newlet#1{\mfp@testdef#1\let#1}% +\global\let\ifmfpmpost\iffalse +\newdef\mfp@mposttrue {\global\let\ifmfpmpost\iftrue}% +\newdef\mfp@mpostfalse{\global\let\ifmfpmpost\iffalse}% +\newdef\mfp@ifmpost{% + \ifmfpmpost\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}% +\newdef\usemetafont{\mfp@mpostfalse + \def\preparemfpicgraphic##1{}% + \def\setmfpicgraphic##1{\@graphfont\char\mfp@count}% + \def\getmfpicoffset##1{}}% +\newdef\MPtoolate@error{% + \mfp@errmsg {Command \string\usemetapost\space too late.}% + {It is too late to select the metapost option.^^J% + It must be selected before the \opengraphsfile command.^^J% + If you proceed, the metafont option will be assumed.}}% +\newdef\@ifmfpfileisopen{\mfp@ifdefined\mfp@filename}% +\newdef\setmfvariable#1#2#3{% + \@ifmfpfileisopen{\mfcmd{setvariable (#1) (#2) (#3)}}{}}% +\newlet\setmpvariable\setmfvariable +\newdef\setmfboolean#1#2{\setmfvariable{boolean}{#1}{#2}}% +\newdef\setmfnumeric#1#2{\setmfvariable{numeric}{#1}{#2}}% +\newdef\setmfcolor#1#2{\setmfvariable{color}{#1}{#2}}% +\let\ifin@mfpicenv\iffalse +\newdef\mfp@local{\relax\ifin@mfpicenv\else\global\fi}% +\newdef\mf@T{true}% +\newdef\mf@F{false}% +\newdef\mfp@let{\mfp@local\let}% +\newdef\mfp@def{\mfp@local\def}% +\newdef\usecenteredcaptions{\mfp@let\if@mfp@centcapt\iftrue}% +\newdef\nocenteredcaptions {\mfp@let\if@mfp@centcapt\iffalse}% +\nocenteredcaptions +\newdef\mfp@makeoption#1#2#3#4{% + \newdef#1{\mfp@let#3\iftrue\setmfboolean{#4}\mf@T}% + \newdef#2{\mfp@let#3\iffalse\setmfboolean{#4}\mf@F} + #2}% +\mfp@makeoption\clipmfpic\noclipmfpic\if@mfp@clip{clipall}% +\mfp@makeoption\usetruebbox\notruebbox\if@mfp@truebbox{truebbox}% +\newdef\noMP@error#1{% + \mfp@errmsg {Metafont does not support #1, use MetaPost.}% + {Metafont doesn't support #1. Perhaps you forgot to turn on^^J% + MetaPost support by using the metapost option or issuing the^^J% + command \usemetapost. For now, I will ignore it.}}% +\newdef\usemplabels{\mfp@let\if@mfp@mplabels\iftrue + \@ifmfpfileisopen + {\mfp@ifmpost{}% + {\noMP@error{mplabels}\global\let\if@mfp@mplabels\iffalse}}{}}% +\newdef\nomplabels{\mfp@let\if@mfp@mplabels\iffalse}% +\newdef\@ifmplabels{% + \if@mfp@mplabels\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}% +\nomplabels +\mfp@makeoption% + \overlaylabels\nooverlaylabels\if@mfp@overlabels{overlaylabels}% +\mfp@makeoption% + \clearsymbols\noclearsymbols\if@mfp@clearsym{clearsymbols}% +\def\mfpicllx{0}% +\def\mfpiclly{0}% +\newdef\@setmfpicgraphic#1{% + \preparemfpicgraphic{#1}\setmfpicgraphic{#1}\getmfpicoffset{#1}}% +\usemetafont +\newdef\setfilename#1#2{#1.#2}% +\newif\ifmfpicdraft +\newif\if@mfp@draft +\newif\if@mfp@final +\newif\if@mfp@nowrite +\newdef\mfpicdraft{% + \@ifmfpfileisopen{\global\mfpicdrafttrue}% + {\global\@mfp@drafttrue}}% +\newdef\mfpicfinal{% + \@ifmfpfileisopen{\global\mfpicdraftfalse}% + {\global\@mfp@finaltrue}}% +\newdef\mfpicnowrite{% + \@ifmfpfileisopen + {\mfp@errmsg + {Improper use of command \string\mfpicnowrite\@online.}% + {You must issue the command \mfpicnowrite prior to + \opengraphsfile. It will be ignored now.}}% + {\global\@mfp@nowritetrue}}% +\if@mfp@latexe + \ProvidesPackage{mfpic}[2004/04/16 v0.7a beta.]% + \DeclareOption{draft}{\mfpicdraft}% + \DeclareOption{final}{\mfpicfinal}% + \DeclareOption{nowrite}{\mfpicnowrite}% + \DeclareOption{metapost}{\mfp@mposttrue}% + \DeclareOption{metafont}{\usemetafont}% + \DeclareOption{centeredcaptions}{\usecenteredcaptions}% + \DeclareOption{clip}{\clipmfpic}% + \DeclareOption{truebbox}{\usetruebbox}% + \DeclareOption{mplabels}{\usemplabels}% + \DeclareOption{overlaylabels}{\overlaylabels}% + \DeclareOption{clearsymbols}{\clearsymbols}% + \DeclareOption{debug}{\mfpicdebugtrue}% + \DeclareOption*{% + \@ifpackageloaded{graphics}% + {\Mfpic@warn{Unrecognized option \CurrentOption.}}% + {\Mfpic@msg{Passing option \CurrentOption\space to % + graphics package.}% + \PassOptionsToPackage{\CurrentOption}{graphics}}}% + \InputIfFileExists{mfpic.cfg}{}{}% + \ProcessOptions*\relax + \def\usemetapost{% + \@ifmfpfileisopen{\mfp@mpostfalse\MPtoolate@error}% + {\mfp@mposttrue \RequirePackage{graphics}% + \global\let\mfp@save@parse@bb\Gread@parse@bb + \gdef\mfp@parse@bb##1 ##2 ##3 ##4 ##5\\{% + \mfp@save@parse@bb##1 ##2 ##3 ##4 ##5\\% + \xdef\mfpicllx{\Gin@llx}\xdef\mfpiclly{\Gin@lly}}% + \if@mfp@pdf \gdef\mfp@Gtype{mps}% + \else \gdef\mfp@Gtype{eps}% + \fi + \gdef\preparemfpicgraphic##1{% + \let\Gread@parse@bb\mfp@parse@bb}% + \gdef\getmfpicoffset##1{}% + \gdef\setmfpicgraphic##1{\includegraphics{##1}}}}% + \mfp@ifmpost{\usemetapost}{}% + \AtEndDocument{\@closegraphsfile}% +\else + \Mfpic@msg{\mfpfiledate\space v\mfpfileversion.}% + \if@mfp@pdf + \def\usemetapost{% + \@ifmfpfileisopen{\mfp@mpostfalse\MPtoolate@error}% + {\mfp@mposttrue + \mfp@ifdefined\convertMPtoPDF{}{\input supp-pdf\relax}% + \gdef\setmfpicgraphic##1{\convertMPtoPDF{##1}{1}{1}}% + \gdef\getmfpicoffset##1{% + \xdef\mfpicllx{\MPllx}\xdef\mfpiclly{\MPlly}}}}% + \else + \def\usemetapost{% + \@ifmfpfileisopen{\mfp@mpostfalse\MPtoolate@error}% + {\mfp@mposttrue + \mfp@ifdefined\epsfbox {}{\input epsf\relax}% + \gdef\setmfpicgraphic##1{\epsfbox{##1}}% + \gdef\getmfpicoffset##1{% + \xdef\mfpicllx{\epsfllx}\xdef\mfpiclly{\epsflly}}}}% + \fi +\fi +\mfp@DBlog{Handlers for optional parameters.}% +\long\def\mfp@ifnextchar#1#2#3{% + \let\mfptmp@d=#1\def\mfptmp@a{#2}% + \def\mfptmp@b{#3}\mfp@checknext}% +\def\mfp@checknext{\futurelet\@let@token\mfp@ifnch}% +\def\mfp@ifnch{% + \ifx\@let@token\@sptoken + \let\mfptmp@c\eatspace@checknext + \else\ifx\@let@token\relax + \long\def\mfptmp@c##1{\mfp@checknext}% + \else\ifx\@let@token\mfptmp@d + \let\mfptmp@c\mfptmp@a + \else + \let\mfptmp@c\mfptmp@b + \fi\fi\fi\mfptmp@c}% +\begingroup + \def\:{\global\let\@sptoken= }\: % + \def\:{\eatspace@checknext}\@xp\gdef\: {\mfp@checknext}% +\endgroup +\newdef\mfp@ifempty#1{% + \if~#1~\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}% +\begingroup +\catcode`Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}% +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}% +\endgroup +\newdef\@ifmtsub#1#2{\@ifmtarg{#1}{#2}{#1}}% +\newdef\mfp@mtsub#1#2{\mfp@ifempty{#1}{#2}{#1}}% +\newdef\do@ptparam#1#2{\mfp@ifnextchar[{#1}{#1[#2]}}% +\newdef\simple@opt#1#2{% + \mfp@ifnextchar[{\process@opt{#1}{#2}}{#1{#2}}}% +\newdef\process@opt#1#2[#3]{% + \mfp@ifempty{#3}{#1{#2}}{#1{#3}}}% +\newdef\null@opt#1{\mfp@ifnextchar[{#1}{#1[]}}% +\newdef\do@mtparam#1#2#3{\mfp@ifempty{#1}{#3[#2]}{#3[#1]}}% +\mfp@DBlog{Direct output to Metafont/Post file.}% +\begingroup + \catcode\mfp@ctrlM\active% + \gdef\@activectrlM{^^M}% + \gdef\mfpicobeylines{\catcode\mfp@ctrlM\active\let^^M\relax}% +\endgroup +\newdef\preservelines{\newlinechar\mfp@ctrlM + \endlinechar\newlinechar \mfpicobeylines}% +\newdef\unpreservelines{\catcode\mfp@ctrlM=5 }% +\newdef\mfsrc {\@mfwrite\@mfsrc\mfsrc}% +\newdef\mfcmd {\@mfwrite\@mfcmd}% +\newdef\mflist{\@mfwrite\@mflist}% +\newdef\@mfwrite{\begingroup + \preservelines \let\@nl\@activectrlM}% +\newdef\@mfsrc#1#2{% + \@ifmfpfileisopen{\immediate\write\mfp@out{#2}}% + {\nooutputfileerror{#1}}\endgroup}% +\newdef\@mfcmd#1{\@mfsrc\mfcmd{#1;}}% +\newdef\@mflist#1{\@mfsrc\mflist{(#1);}}% +\newdef\mfp@gobble#1{}% +\edef\mf@p{\@xp\mfp@gobble\string\%}% percent (%) +\edef\mf@s{\@xp\mfp@gobble\string\#}% sharp (#) +\edef\mf@b{\@xp\mfp@gobble\string\\}% backslash (\) +\newdef\mf@d{--------------}% +\newdef\mfp@delim{% + \mfp@errmsg {Misplaced \string\mfp@delim.}% + {If you get this message but did not (mis)use the command^^J% + \mfp@delim, please report this to the mfpic maintainer.}}% +{\mfp@ifdefined\normalmonth + {\let\month\normalmonth\let\year\normalyear}{}% + \xdef\mfp@today{\number\year/\ifnum\month<10 0\fi\number\month/% + \ifnum\day<10 0\fi\number\day}% + \count2=\time \divide\count2 by 60 + \xdef\mfp@now{\ifnum\count2<10 0\fi\number\count2:}% + \multiply\count2 by -60 \advance\count2 \time + \xdef\mfp@now{\mfp@now\ifnum\count2<10 0\fi\number\count2 }}% +\mfp@DBlog{Declarations used with data and graphs files.}% +\newwrite\mfp@out +\newread\mfp@graph +\newlet\mfp@data\mfp@graph +\newcount\mfp@count +\newcount\mfp@linetype +\newcount\mfp@n +\newcount\mfp@sequence +\newtoks\mfp@toks +\newtoks\every@tlabel +\newtoks\mfp@verbtex +\newtoks\mfp@commonverbatimtex +\every@tlabel{}% +\begingroup + \let\newtoks\relax + \@makeother\%\@makeother\#\preservelines + \global\mfp@commonverbatimtex= + {\def\MFPtext#1{% + \vbox{\def\\{\cr}\MFPcfont\everylabel + \halign{##\hfil\cr#1\crcr}}}% + }\endgroup +\mfp@DBlog{Macros to open and close graphs files.}% +\newdef\opengraphsfile#1{\@bsphack + \@ifmfpfileisopen% + {\Mfpic@warn + {An attempt has been made to open a graph file, #1, + \@msgbreak while another, \mfp@filename, is still open. + \@msgbreak Closing \mfp@filename.}% + \@closegraphsfile}% + {}% + \xdef\mfp@filename{#1}% + \mfp@ifmpost{% + \openin\mfp@graph=\setfilename{\mfp@filename}{\number\mfp@count}% + \relax + \ifeof\mfp@graph \mfp@msg{}% + \Mfpic@msg + {No file \setfilename{\mfp@filename}{\number\mfp@count}.^^J}% + \global\mfpicdrafttrue + \else + \global\mfpicdraftfalse + \fi + \if@mfp@nowrite \else + \immediate\openout\mfp@out=\mfp@filename.mp\relax + \Mfpic@msg{Don't forget to process \mfp@filename.mp! % + \@msgbreak (Apply metapost to \mfp@filename.mp.)}% + \fi + }{% metafont + \openin\mfp@graph=\mfp@filename.tfm\relax + \ifeof\mfp@graph \mfp@msg{}% + \Mfpic@msg{No file \mfp@filename.tfm .^^J}% + \global\let\@graphfont=\mfp@dummy + \global\mfpicdrafttrue + \else + \global\font\@graphfont=\mfp@filename\relax + \global\mfpicdraftfalse + \fi + \if@mfp@nowrite \else + \immediate\openout\mfp@out=\mfp@filename.mf\relax + \Mfpic@msg{Don't forget to process \mfp@filename.mf! % + \@msgbreak (Apply metafont to \mfp@filename.mf, % + then gftopk to the resulting gf file.)}% + \fi + }% + \closein\mfp@graph + \if@mfp@nowrite\else + \Mfpic@msg{Then reprocess this file (\jobname).^^J}% + \fi + \if@mfp@draft\global\mfpicdrafttrue\fi + \if@mfp@final\global\mfpicdraftfalse\fi + \if@mfp@nowrite\gdef\@mfsrc##1##2{}\fi + \mfsrc{% + \mf@p\space\mfp@filename.m\mfp@ifmpost{p}{f}, % + generated by Mfpic, v\mfpfileversion\space\mfpfiledate,\@nl + \mf@p\space from TeX source "\jobname" % + on \mfp@today\space at \mfp@now\@nl + numeric mfpicversion; mfpicversion:=\mfpicversion;\@nl + if unknown mode: mode := localfont; fi\@nl + if unknown mag: mag := \number\mag/1000; fi\@nl + if unknown grafbase: input grafbase; fi\@nl\@nl + if unknown grafbaseversion: grafbaseversion := 0; fi\@nl + if grafbaseversion <> mfpicversion :\@nl + GBmsg "Bad mfpic installation: mfpic and grafbase % + versions do not match.";\@nl + fi\@nl}% + \mfp@ifmpost + {\mfsrc{% + if unknown Apricot: input dvipsnam.mp; fi\@nl + verbatimtex\@nl + \the\mfp@commonverbatimtex\@nl + \def\noexpand\everylabel{\the\every@tlabel}\@nl + \if@mfp@verbtex \the\mfp@verbtex\@nl \fi + etex;\@nl}% + \global\@mfp@verbtexfalse\mfp@verbtex{}% + \@ifmplabels{\usemplabels}{}% + \if@mfp@truebbox \usetruebbox \fi + \if@mfp@overlabels \overlaylabels \fi}{}% + \if@mfp@clip \clipmfpic \fi + \if@mfp@clearsym \clearsymbols \fi + \if@shipping\else\stopshipping\fi + \@esphack}% +\newdef\closegraphsfile{% + \@ifmfpfileisopen{}{\nooutputfileerror\closegraphsfile}% + \@closegraphsfile \global\let\mfp@filename\UndEfInEd}% +\newdef\@closegraphsfile{% + \@ifmfpfileisopen + {\if@mfp@nowrite \else + \mfsrc{\@nl end.}\immediate\closeout\mfp@out + \fi}{}}% +\def\nooutputfileerror#1{% + \mfp@errmsg {No output file has been opened.}% + {You have tried to used a command, #1, that requires an output^^J% + file to be opened with the \opengraphsfile command, which^^J% + was either not issued or was not successful.}}% +\mfp@DBlog{Using dummy font's dimensions, to spare TeX registers.}% +\font\mfp@dummy=dummy scaled 1042 +\fontdimen100\mfp@dummy=0pt +\newcount\mfp@fdc +\mfp@fdc=22 +\newdef\newfdim#1{% + \global\advance\mfp@fdc 1 + \xdef#1{\fontdimen\number\mfp@fdc\mfp@dummy}% + \wlog{\string#1=\string\fontdimen\number\mfp@fdc\mfp@dummy}}% +\mfp@DBlog{A box register for whole labeled graph, % + and a temporary one.}% +\newbox\@wholegraph +\newbox\@textbox +\newdef\tb@ht{\ht\@textbox}% height, +\newdef\tb@dp{\dp\@textbox}% depth and +\newdef\tb@wd{\wd\@textbox}% width of the text label. +\newbox\@alltlabels +\newfdim\@tlabelstop +\newfdim\@tlabelsbot +\newfdim\@tlabelsleft +\newfdim\@tlabelsright +\mfp@DBlog{Internal dimension parameters for graph dimensions...}% +\newfdim\@graphwd +\newfdim\@graphright +\newfdim\@graphleft +\newfdim\@graphtop +\newfdim\@graphbot +\mfp@DBlog{...and dimension parameters for tlabel positioning.}% +\newfdim\tb@raise +\newfdim\tb@moveright +\newfdim\tb@totalht +\newfdim\tlabel@hadj +\newfdim\tlabel@vadj +\newfdim\tlabel@sep +\tlabel@hadj=0pt +\tlabel@vadj=0pt +\tlabel@sep=0pt +\mfp@DBlog{User level dimension parameters, with default settings.}% +\newfdim\mfpicunit % unit of length +\newfdim\pointsize % diameter of circle +\newfdim\shadespace % spacing of shade dots +\newfdim\polkadotspace % spacing of polkadots +\newfdim\hatchspace % spacing of lines +\newfdim\headlen % size of arrowhead (\arrow) +\newfdim\axisheadlen % size of arrowhead (x, y axes) +\newfdim\sideheadlen % size of arrowhead (border axes) +\newfdim\hashlen % length of marks on axes +\newfdim\dashlen % length of dashes (\dashed) +\newfdim\dashspace % space between dashes +\newfdim\dotsize % size of dots (\dotted) +\newfdim\dotspace % space between dots +\newfdim\symbolspace % space between symbols (\plot) +\mfpicunit=1pt +\pointsize=2pt +\shadespace=1pt +\polkadotspace=10pt +\hatchspace=3pt +\headlen=3pt +\axisheadlen=5pt +\sideheadlen=0pt +\hashlen=4pt +\dashlen=4pt +\dashspace=4pt +\dotsize=0.5pt +\dotspace=3pt +\symbolspace=5pt +\newdef\save@mfpicdimens{% + \edef\restore@mfpicdimens{% + \mfpicunit =\the\mfpicunit + \pointsize =\the\pointsize + \shadespace =\the\shadespace +\polkadotspace =\the\polkadotspace + \hatchspace =\the\hatchspace + \headlen =\the\headlen + \axisheadlen =\the\axisheadlen + \sideheadlen =\the\sideheadlen + \hashlen =\the\hashlen + \dashlen =\the\dashlen + \dashspace =\the\dashspace + \dotsize =\the\dotsize + \dotspace =\the\dotspace + \symbolspace =\the\symbolspace + \tlabel@hadj =\the\tlabel@hadj + \tlabel@vadj =\the\tlabel@vadj + \tlabel@sep =\the\tlabel@sep}}% +\newdimen\mfp@scratch +\newdimen\mfp@scratchB +\newdimen\mfpframesep +\newdimen\mfpframethickness +\newdimen\mfpicheight +\newdimen\mfpicwidth +\newskip\mfpiccaptionskip +\mfpframethickness0.4pt +\mfpframesep2pt +\mfpiccaptionskip=\medskipamount +\def\mfpicnumber#1{\global\mfp@count=#1\relax}% +\newdef\mfpaddto#1#2{\mfp@scratch=#1pt\advance\mfp@scratch#2pt + \edef#1{\mfp@strippt\mfp@scratch}}% +\newdef\mfpmultiply#1#2{\mfp@scratch=#1pt \mfp@scratch#2\mfp@scratch + \edef#1{\mfp@strippt\mfp@scratch}}% +\begingroup + \@makeother P\@makeother T\lowercase{\gdef\mfp@factor#1PT{#1}}% +\endgroup +\newdef\mfp@strippt{\@xp\mfp@factor\the}% +\newdef\pointdef#1(#2,#3){% + \@namedef{#1}{(#2,#3)}\@namedef{#1x}{#2}\@namedef{#1y}{#3}}% +\newdef\pairarray#1{% + \mfcmd{save #1}\mfsrc{textpairs (#1)}\mfp@writedata}% +\newdef\numericarray#1{\mfcmd{save #1; numeric #1; numeric #1[]}% + \mfsrc{list (#1)}\mfp@writedata}% +\newdef\lightershade{\shadespace=1.2\shadespace}% +\newdef\darkershade{\shadespace=.833333\shadespace}% +\newdef\dashlineset{\dashlen=4pt \dashspace=4pt}% +\newdef\dotlineset{\dashlen=1pt \dashspace=2pt}% +\let\ifpointfill\iftrue +\newdef\pointfilltrue{\mfp@let\ifpointfill\iftrue}% +\newdef\pointfillfalse{\mfp@let\ifpointfill\iffalse}% +\mfp@DBlog{Tests to control multiple prefix commands.}% +\newif\if@startfig\@startfigtrue +\newif\if@imrend\@imrendtrue +\newdef\store@path{\mfsrc{\@nl store (curpath)}}% +\newdef\@firststage{\relax + \if@startfig \store@path \@imrendtrue \@startfigfalse\fi}% +\newdef\@rendmac{\@firststage \@imrendfalse \mfsrc}% +\newdef\@modmac{\@firststage \mfsrc}% +\newdef\@closmac{\@firststage \if@imrend\@xp\@render\fi \mfsrc}% +\newdef\@render{\draw[]}% +\newdef\setrender#1{\mfp@def\@render{#1}}% +\newdef\@figmacstart{% + \@firststage \if@imrend\@xp\@render\fi \@startfigtrue}% +\newdef\@figmac{\@figmacstart\mfcmd}% +\newdef\@listmac#1{\@figmacstart\mfsrc{#1}\mfp@writedata}% +\newdef\mfp@writedata{% + \mfp@ifnextchar\datafile{\mfp@writefile}{\mflist}}% +\newdef\mfp@writefile\datafile#1{\@processdatafile{#1}{\mfp@rwdata}}% +\newif\if@mfpswitch +\newdef\mftitle{\@bsphack\@mfpswitchtrue\mfp@gettoks\mf@title}% +\newdef\tmtitle{\mfp@gettoks\tm@title}% +\newdef\mfp@gettoks#1{\afterassignment#1\mfp@toks=}% +\newdef\tm@title{\@mfpswitchfalse\mf@title + \wlog{\the\mfp@toks}{\the\mfp@toks}}% +\newdef\mf@title{\mfsrc{}% + \immediate\write\mfp@out{mftitle "\the\mfp@toks";}% + \if@mfpswitch\@esphack\fi}% +\newdef\stopshipping{\mfp@let\if@shipping\iffalse + \@ifmfpfileisopen{\mfcmd{save shipit;def shipit = relax enddef}}{}}% +\newdef\resumeshipping{\mfp@let\if@shipping\iftrue + \@ifmfpfileisopen{\mfcmd{save shipit;def shipit = shipit_ enddef}}{}}% +\newlet\noship\stopshipping +\resumeshipping +\newdef\@processdatafile#1#2{% + \openin\mfp@data=#1\relax + \ifeof\mfp@data \nodatafileerror{#1}% + \else + \begingroup + \mfp@resetwhitespace \mfp@setcomment + \skipBlanksandComments + \ifeof\mfp@data \emptydatafileerror{#1}\else #2\fi + \global\mfp@n=\mfp@linetype + \endgroup + \mfp@linetype=\mfp@n + \fi + \closein\mfp@data}% +\newdef\nodatafileerror#1{% + \mfp@errmsg{No data file: #1 .}% + {The data file you tried to plot can't be found.}}% +\newdef\emptydatafileerror#1{% + \mfp@errmsg{Empty data file: #1 .}% + {The file you tried to plot contains only empty lines and comments.}}% +\newdef\mfp@resetwhitespace{% + \catcode`\^^M=5 \catcode`\ =10 \catcode`\^^I=10 }% +\mfp@ifdefined\@empty{}{\def\@empty{}}% +\newdef\skipcomments{\read\mfp@data to \mfp@temp + \ifx\mfp@temp\@empty \@xp\skipcomments\fi}% +\newdef\skipBlanksandComments{\skipcomments + \ifeof\mfp@data + \else\ifx\mfp@temp\mfp@par \@XP\skipBlanksandComments + \fi\fi}% + \def\mfp@rwdata{\mfp@n=1 \mfp@sequence=1 + \def\sequence{\number\mfp@sequence}% + \edef\mfp@temp{\mfp@temp\space}% + \edef\mfp@buffer{(\@xp\parse@data\mfp@temp\mfp@delim}% + \mfp@rwdataloop}% + \def\mfp@rwdataloop{% + \read\mfp@data to \mfp@temp + \ifx\mfp@temp\mfp@par + \mfcmd{\mfp@buffer)}% + \else + \ifx\mfp@temp\@empty % comment line, read another + \else + \edef\mfp@temp{\mfp@temp\space}% + \advance\mfp@sequence1 + \edef\mfp@buffer{\mfp@buffer\mfp@join}% + \ifnum\mfp@n<\mfpdataperline\relax + \advance\mfp@n1 + \else + \mfsrc{\mfp@buffer}% + \mfp@n=1 + \def\mfp@buffer{}% + \fi + \edef\mfp@buffer{\mfp@buffer + \@xp\parse@data\mfp@temp\mfp@delim}% + \fi + \@xp\mfp@rwdataloop + \fi}% +\newdef\drawpen#1{\mfcmd{\@nl resizedrawpen (#1)}}% +\newlet\pen=\drawpen \newlet\penwd=\drawpen +\newdef\shadewd#1{\setmfnumeric{shadewd}{#1}}% +\newdef\polkadotwd#1{\setmfnumeric{polkadotwd}{#1}}% +\newdef\hatchwd#1{\setmfnumeric{hatchwd}{#1}% + \setmfvariable{pen}{hatchpen}{pencircle scaled hatchwd}}% +\newdef\dashpattern#1#2{\mfcmd{save #1; dashpat (#1) (#2)}}% +\newdef\settension#1{\setmfnumeric{default_tension}{#1}}% +\newcount\tl@vpos \newcount\tl@hpos +\tl@vpos=-1 \tl@hpos=-1 +\newdef\tlabel@rot{}% +\newdef\tlabeljustify#1{% + \mfp@ifempty{#1}{}{\mfp@justify#1\mfp@delim}}% +\def\mfp@justify#1#2\mfp@delim{\mfp@local\mfp@vconv{#1}% + \mfp@ifempty{#2}{}{\@mfp@justify#2\mfp@delim}}% +\newdef\@mfp@justify#1#2\mfp@delim{% + \mfp@local\mfp@hconv{#1}\mfp@local\edef\tlabel@rot{#2} + \@ifmplabels{}% + {\mfp@ifempty{#2}{}% + {\Mfpic@warn{Rotation of labels is not supported without the + mplabels\@msgbreak option. Rotation may be ignored\@online .}}}}% +\newdef\mfp@vconv#1{% + \if B#1\tl@vpos=-1 \else + \if b#1\tl@vpos= 0 \else + \if c#1\tl@vpos= 1 \else + \if t#1\tl@vpos= 2 \else + \tl@vpos=-1 \mfp@justifyerror + \fi\fi\fi\fi}% +\newdef\mfp@hconv#1{% + \if l#1\tl@hpos=-1 \else + \if c#1\tl@hpos= 0 \else + \if r#1\tl@hpos= 1 \else + \tl@hpos=-1 \mfp@justifyerror + \fi\fi\fi}% +\newdef\mfp@justifyerror{% + \mfp@errmsg{Invalid justification parameter for text label.}% + {The optional argument for a text label must be^^J% + one of B, b, c or t^^J + followed by l or r or c,^^J% + followed by an angle (optionally).}}% +\newdef\tlpathjustify#1{% + \mfp@ifempty{#1}{}{\tlp@justify#1\mfp@delim}}% +\newdef\tlp@justify#1#2\mfp@delim{\mfp@def\tlpath@v{#1}% + \mfp@ifempty{#2}{}{\tlp@@justify#2\mfp@delim}}% +\newdef\tlp@@justify#1#2\mfp@delim{% + \mfp@def\tlpath@h{#1}\mfp@def\tlpath@r{#2}}% +\tlpathjustify{cc}% +\newdef\tlabelsep#1{\mfp@local\tlabel@sep=#1\relax + \setmfnumeric{label_sep}{\the\tlabel@sep}}% +\newdef\tlabeloffset#1#2{% + \mfp@local\tlabel@hadj=#1\relax \mfp@local\tlabel@vadj=#2\relax + \setmfvariable{pair}{label_adjust}% + {(\the\tlabel@hadj,\the\tlabel@vadj)}}% +\newdef\everytlabel{\afterassignment\@everytlabel + \mfp@local\every@tlabel}% +\newdef\@everytlabel{% + \mfp@ifmpost + {\@ifmfpfileisopen + {\mfcmd{verbatimtex\@nl + \def\noexpand\everylabel{\the\every@tlabel} etex}}% + {}}% + {}}% +\newdef\headshape#1#2#3{\mfcmd{\@nl headshape (#1, #2, #3)}}% +\newdef\mfpdefinecolor#1#2#3{\setmfcolor{#1}{#2(#3)}}% +\newdef\fillcolor{\@mfpcolor{fillcolor}}% +\newdef\drawcolor{\@mfpcolor{drawcolor}}% +\newdef\headcolor{\@mfpcolor{headcolor}}% +\newdef\hatchcolor{\@mfpcolor{hatchcolor}}% +\newdef\pointcolor{\@mfpcolor{pointcolor}}% +\newdef\tlabelcolor{\@mfpcolor{tlabelcolor}}% +\newdef\backgroundcolor{\@mfpcolor{background}}% +\newdef\@mfpcolor#1{% + \mfp@ifnextchar[{\mfp@color{#1}}{\setmfcolor{#1}}}% +\newdef\mfp@color#1[#2]#3{\setmfcolor{#1}{#2(#3)}}% +\newdef\dashedlines{\mfp@local\mfp@linetype0 + \mfp@def\mfp@setstyle{\gendashed{getdashpat\number\mfp@linetype}}}% +\dashedlines +\newdef\coloredlines{% + \mfp@ifmpost + {\mfp@local\mfp@linetype0 + \mfp@def\mfp@setstyle{\draw [getcolor\number\mfp@linetype]}}% + {\Mfpic@warn{You can't use \string\coloredlines\space in + Metafont.\@msgbreak Using \dashedlines instead}% + \dashedlines}}% +\newdef\pointedlines{\mfp@local\mfp@linetype0 + \mfp@def\mfp@setstyle{\plot{getsymbol\number\mfp@linetype}}}% +\newdef\datapointsonly{\mfp@local\mfp@linetype0 + \mfp@def\mfp@setstyle{\relax + \plotnodes{getsymbol \number\mfp@linetype}}}% +\newdef\reconfigureplot#1{\mfsrc{setdata#1}\mfp@writedata}% +\newdef\defaultplot#1{\mfcmd{default#1}}% +\newdef\mfplinetype#1{\mfp@local\mfp@linetype=#1}% +\newlet\mfplinestyle\mfplinetype +\mfplinetype{0}% +\newdef\mfp@lshift{0}% +\newdef\mfp@bshift{0}% +\newdef\mfp@rshift{0}% +\newdef\mfp@tshift{0}% +\newdef\axismargin#1#2{\setmfnumeric{#1axis}{#2}% + \mfp@local\@namedef{mfp@#1shift}{#2}}% +\newdef\setaxismargins#1#2#3#4{\axismargin l{#1}\axismargin b{#2}% + \axismargin r{#3}\axismargin t{#4}}% +\newdef\setallaxismargins#1{\setaxismargins{#1}{#1}{#1}{#1}}% +\newcount\mfp@axisnum +\def\get@axisnum#1#2{% + \if x#1\relax \mfp@axisnum0 + \else\if y#1\relax \mfp@axisnum1 + \else\if l#1\relax \mfp@axisnum2 + \else\if b#1\relax \mfp@axisnum3 + \else\if r#1\relax \mfp@axisnum4 + \else\if t#1\relax \mfp@axisnum5 + \else + \mfp@errmsg {Invalid axis letter "#1".}% + {The command #2 requires an axis to be designated by one of^^J% + the following letters: x, y, l, b, r, or t. If you proceed, ^^J% + x will be assumed.}% + \fi\fi\fi\fi\fi\fi}% +\newdef\setaxismarks#1#2{\setmfnumeric{#1tick}{#2}}% +\newdef\setxmarks#1{\setaxismarks x{#1}}% +\newdef\setymarks#1{\setaxismarks y{#1}}% +\newdef\setbordermarks#1#2#3#4{\setaxismarks l{#1}\setaxismarks b{#2}% + \setaxismarks r{#3}\setaxismarks t{#4}}% +\newdef\setallbordermarks#1{\setbordermarks{#1}{#1}{#1}{#1}}% +\newdef\smoothdata{\null@opt\@smoothdata}% +\newdef\@smoothdata[#1]{\mfp@def\mfp@smoothness{s}% + \mfp@def\mfp@tension{#1}}% +\newdef\unsmoothdata{\mfp@def\mfp@smoothness{p}% + \mfp@def\mfp@tension{}}% +\unsmoothdata% default +\newdef\using#1#2{\mfp@def\parse@data#1\mfp@delim{#2}}% +\newdef\usingpairdefault{\using{##1 ##2 ##3}{(##1,##2)}}% +\newdef\usingnumericdefault{\using{##1 ##2}{##1}}% +\usingpairdefault +\newdef\mfpdataperline{5}% +\newdef\mfp@par{\par}% +\newdef\mfp@join{,}% +\newcount\@datacommentchar \@datacommentchar`\% +\newdef\makepercentother{\@makeother\%}% +\newdef\makepercentcomment{\catcode`\%=14 }% +\newdef\mfpdatacomment#1{\mfp@local\@datacommentchar`#1}% +\newdef\mfp@setcomment{\makepercentother\catcode\@datacommentchar14 }% +\newdef\fdef{\begingroup\@makeother\#\preservelines\@fdef}% +\newdef\@fdef#1#2#3{\mfcmd{\@nl save #1;\@nl + vardef #1 (expr #2) = \@nl #3\@nl enddef}\endgroup}% +\newdef\mfp@additions{}% +\newdef\@mfpic@graf@macs{% + \newdef\plotdata{\null@opt\@plotdata}% + \newdef\@plotdata[##1]##2{\@processdatafile{##2}{\mfp@doplots{##1}}}% + \def\mfp@doplots##1{\mfp@setstyle + \advance\mfp@linetype1 \@figmacstart + \do@datafile{##1}% + \@if@enddata{}{\mfp@doplots{##1}}}% + \newdef\@if@enddata{% check for another blank line + \ifeof\mfp@data \@xp\@firstoftwo + \else + \skipcomments + \ifx\mfp@temp\mfp@par \@XP\@firstoftwo + \else \@XP\@secondoftwo + \fi + \fi}% + \newdef\datafile{\null@opt\@datafile}% + \newdef\@datafile[##1]##2{\@figmacstart + \@processdatafile{##2}{\do@datafile{##1}}}% + \newdef\do@datafile##1{% + \do@mtparam{##1}{\mfp@smoothness\mfp@tension}\@do@datafile}% + \newdef\@do@datafile[##1##2]{% + \mfsrc{% + \if s##1 \mfp@ifempty{##2}{curve }{tcurve (##2) }% + \else polyline + \fi (\mf@F)}\mfp@rwdata}% + \newdef\store##1##2{\@rendmac{stored (##1)}##2}% + \newlet\mfobj\@figmac + \newlet\mpobj\@figmac + \newdef\cutoffafter##1{\@closmac{cutoffafter (##1)}}% + \newdef\cutoffbefore##1{\@closmac{cutoffbefore (##1)}}% + \newdef\trimpath##1{\@getdimens##1,,\mfp@delim + \@closmac{trimmedpath (\the\mfp@scratch, \the\mfp@scratchB)}}% + \newdef\@getdimens##1,##2,##3\mfp@delim{% + \mfp@scratch \@ifmtsub{##1}{\z@}\relax + \mfp@scratchB\@ifmtsub{##2}{\mfp@scratch}\relax}% + \newdef\partpath##1{\@closmac{partialpath (##1)}}% + \newdef\subpath##1{\@closmac{gsubpath (##1)}}% + \newdef\draw{\null@opt\@draw}% + \newdef\@draw[##1]{% + \@rendmac{\mfp@ifempty{##1}{drawn}{colordrawn (##1)}}}% + \newdef\dashed{\simple@opt\@dashed{\the\dashlen,\the\dashspace}}% + \newdef\@dashed##1{\@rendmac{DASHED (##1)}}% + \newdef\dotted{\simple@opt\@dotted{\the\dotsize,\the\dotspace}}% + \newdef\@dotted##1{\@rendmac{dotted (##1)}}% + \newdef\gendashed##1{\@rendmac{gendashed (##1)}}% + \newdef\plot{\simple@opt\@plot{\the\pointsize, \the\symbolspace}}% + \newdef\@plot##1##2{\@rendmac{doplot (##2, ##1)}}% + \newdef\plotnodes{\simple@opt\@plotnodes{\the\pointsize}}% + \newdef\@plotnodes##1##2{\@rendmac{plotnodes (##2, ##1)}}% + \newdef\@closed##1##2{% + \@closmac{##1closed\mfp@ifempty{##2}{}{t (##2)}}}% + \newdef\bclosed{\null@opt\@bclosed}% + \newdef\@bclosed[##1]{\@closed b{##1}}% + \newdef\sclosed{\null@opt\@sclosed}% + \newdef\@sclosed[##1]{\@closed s{##1}}% + \newdef\lclosed{\@closed l{}}% + \newdef\cbclosed{\@closed{cb}{}}% + \newdef\qbclosed{\@closed{qb}{}}% + \newlet\uclosed\bclosed + \newdef\tess##1{\@rendmac{tess (##1)}}% + \newdef\shade{\simple@opt\@shade{\the\shadespace}}% + \newdef\@shade##1{\@rendmac{shade (##1)}}% + \newdef\polkadot{\simple@opt\@polkadot{\the\polkadotspace}}% + \newdef\@polkadot##1{\@rendmac{polkadot (##1)}}% + \newdef\thatch{\simple@opt\@thatch{\the\hatchspace,0}}% + \newdef\@thatch##1{\null@opt{\@@thatch{##1}}}% + \newdef\@@thatch##1[##2]{\@rendmac{% + \mfp@ifempty{##2}{thatch}{colorthatch (##2)} (##1)}}% + \newdef\lhatch{\simple@opt\@lhatch{\the\hatchspace}}% + \newdef\@lhatch##1{\@thatch{##1,-45}}% + \newdef\rhatch{\simple@opt\@rhatch{\the\hatchspace}}% + \newdef\@rhatch##1{\@thatch{##1,45}}% + \newdef\xhatch{\simple@opt\@xhatch{\the\hatchspace}}% + \newdef\@xhatch##1{\null@opt{\@@xhatch{##1}}}% + \newdef\@@xhatch##1[##2]{\@rendmac{% + \mfp@ifempty{##2}{xhatch}{colorxhatch (##2)} (##1)}}% + \newlet\hatch=\xhatch + \newdef\gfill{\null@opt\@gfill}% + \newdef\@gfill[##1]{% + \@rendmac{\mfp@ifempty{##1}{filled}{colorfilled (##1)}}}% + \newdef\gclear{\@rendmac{unfilled}}% + \newdef\gclip{\@rendmac{Clip}}% + \newdef\reverse{\@modmac{reverse}}% + \newdef\xyswappath{\@closmac{xyswappedpath}}% + \newdef\rotatepath##1{\@closmac{rotatedpath (##1)}}% + \newdef\shiftpath##1{\@closmac{shiftedpath (##1)}}% + \newdef\scalepath##1{\@closmac{scaledpath (##1)}}% + \newdef\xscalepath##1{\@closmac{xscaledpath (##1)}}% + \newdef\yscalepath##1{\@closmac{yscaledpath (##1)}}% + \newdef\slantpath##1{\@closmac{xslantedpath (##1)}}% + \newlet\xslantpath\slantpath + \newdef\yslantpath##1{\@closmac{yslantedpath (##1)}}% + \newdef\reflectpath##1{\@closmac{reflectedpath (##1)}}% + \newdef\transformpath##1{\@closmac{transformedpath (##1)}}% + \def\arrow{\def\@hbackset{0}\def\@hcolour{}% + \edef\@hlength{\the\headlen}\def\@hrotate{0}% + \@arrow}% + \newdef\@arrow{\mfp@ifnextchar[{\@arrowoption}{\@@arrow}}% + \newdef\@@arrow{% + \@modmac{% + \mfp@ifempty{\@hcolour}{headpath}{colorheadpath (\@hcolour)}% + \space(\@hlength, \@hrotate, \@hbackset)}}% + \newdef\@arrowoption[##1]{% + \mfp@ifempty{##1}{}{\@@arrowoption##1\mfp@delim}\@arrow}% + \newdef\@@arrowoption##1##2\mfp@delim{% + \if l##1\relax \mfp@ifempty{##2}{}{\def\@hlength{##2}}% + \else\if r##1\relax \mfp@ifempty{##2}{}{\def\@hrotate{##2}}% + \else\if b##1\relax \mfp@ifempty{##2}{}{\def\@hbackset{##2}}% + \else\if c##1\relax \mfp@ifempty{##2}{}{\def\@hcolour{##2}}% + \else + \Mfpic@warn{Improper option to \string\arrow\@online .}% + \fi\fi\fi\fi}% + \newdef\coords{\mfsrc{\@nl bcoords\@nl}}% + \newdef\endcoords{\mfsrc{\@nl ecoords\@nl}}% + \newdef\applyT##1{\mfsrc{\@nl hide(apply_t (##1))}}% + \def\rotate##1{\applyT{rotated ##1}}% + \newdef\rotatearound##1##2{% + \applyT{rotatedaround (##1, ##2)}}% + \newdef\turn{\simple@opt\@turn{(0,0)}}% + \newdef\@turn##1##2{\rotatearound{##1}{##2}}% + \newdef\reflectabout##1##2{% + \applyT{reflectedabout (##1, ##2)}}% line ##1--##2. + \let\mirror=\reflectabout + \newdef\shift##1{\applyT{shifted ##1}}% pair. + \def\scale##1{\applyT{scaled ##1}}% same scaling + \newdef\xscale##1{\applyT{xscaled ##1}}% + \newdef\yscale##1{\applyT{yscaled ##1}}% + \newdef\zscale##1{\applyT{zscaled ##1}}% + \newdef\xslant##1{\applyT{xslant ##1}}% + \newdef\yslant##1{\applyT{yslant ##1}}% + \newdef\zslant##1{\applyT{zslant ##1}}% + \newdef\boost##1{\applyT{boost ##1}}% + \newdef\xyswap{\applyT{xyswap}}% + \newdef\xaxis{\simple@opt\@xaxis{\the\axisheadlen}}% + \newdef\yaxis{\simple@opt\@yaxis{\the\axisheadlen}}% + \newdef\axes{\simple@opt\@axes{\the\axisheadlen}}% + \newdef\@axes##1{\mfcmd{\@nl axes (##1)}}% + \newdef\@xaxis##1{\mfcmd{\@nl xaxis (##1)}}% + \newdef\@yaxis##1{\mfcmd{\@nl yaxis (##1)}}% + \newdef\axis{\null@opt\@axis}% + \newdef\@axis[##1]##2{\get@axisnum{##2}\axis + \mfp@ifempty{##1}% + {\edef\mfp@param{% + \ifnum\mfp@axisnum<2 \the\axisheadlen + \else \the\sideheadlen + \fi}\@@axis{\mfp@param}}{\@@axis{##1}}{##2}}% + \newdef\@@axis##1##2{\arrow[l##1]\@figmac{axisline.##2}}% + \newdef\doaxes{\null@opt\@doaxes}% + \newdef\@doaxes[##1]##2{\def\mfp@axis{\@axis[##1]}% + \do@axis##2\mfp@delim}% + \newdef\do@axis##1{% + \ifx\mfp@delim##1\relax\else\mfp@axis{##1}\@xp\do@axis\fi}% + \newdef\axismarks##1{\simple@opt{\@marks{##1}}{\the\hashlen}}% + \newdef\@marks##1##2{\mfsrc{\@nl ##1marks (##2)}\mfp@writedata}% + \newdef\xmarks{\axismarks x}% + \newdef\ymarks{\axismarks y}% + \newdef\lmarks{\axismarks l}% + \newdef\bmarks{\axismarks b}% + \newdef\rmarks{\axismarks r}% + \newdef\tmarks{\axismarks t}% + \def\grid{\null@opt\@grid}% + \newdef\@grid[##1]##2{% + \mfcmd{\mfp@ifempty{##1}{grid}{vgrid (##1)} (##2)}}% + \newlet\gridpoints=\grid \newlet\lattice=\grid + \newdef\gridlines##1{\mfcmd{\@nl gridlines (##1)}}% + \newdef\vgridlines##1{\mfcmd{\@nl vgridlines (##1)}}% + \newdef\hgridlines##1{\mfcmd{\@nl hgridlines (##1)}}% + \newdef\plrgrid##1{\mfcmd{\@nl polargrid (##1)}}% + \newdef\plrgridpoints{\simple@opt\@plrgp{\the\dotsize}}% + \newdef\@plrgp##1##2{\mfcmd{\@nl polargridpoints (##1, ##2)}}% + \newdef\gridarcs##1{\mfcmd{\@nl gridarcs (##1)}}% + \newdef\gridrays##1{\mfcmd{\@nl gridrays (##1)}}% + \newdef\plrpatch##1{\mfcmd{\@nl polarpatch (##1)}}% + \newdef\point{\simple@opt\@point{\the\pointsize}}% + \newdef\@point##1{% + \mfsrc{\@nl pointd (##1, \ifpointfill\mf@T\else\mf@F\fi)}% + \mfp@writedata}% + \newdef\plotsymbol{\simple@opt\@plotsymbol{\the\pointsize}}% + \newdef\@plotsymbol##1##2{% + \mfsrc{\@nl plotsymbol (##2, ##1)}\mfp@writedata}% + \newdef\plottext{\simple@opt\@plottext{cc}}% + \newdef\@plottext##1{% + \begingroup + \mfp@resetwhitespace \tlabeljustify{##1}% + \@ifmplabels{\@makeother\#}{}% + \mfp@gettoks\@@plottext}% + \newdef\@@plottext##1{% + \@ifmplabels + {\mfp@setMPpos \def\mfp@points{##1}\@@@tlabel}% + {\@@@plottext##1,\mfp@delim}}% + \newdef\@@@plottext{% + \mfp@ifnextchar\mfp@delim{\@firstoftwo\endgroup}{\x@plottext}}% + \newdef\x@plottext(##1,##2),{\begingroup + \@tlabel{##1}{##2}{\the\mfp@toks}\@@@plottext}% + \newdef\rect##1{\@figmac{rect (##1)}}% +\newdef\regpolygon##1##2##3##4{% + \@figmac{regularpolygon(##1)(##2)(##3;##4;)}}% + \def\circle{\null@opt\circl@}% + \newdef\circl@[##1]##2{% + \if t##1\relax \@figmac{circleppp (##2)}% + \else\if c##1\relax \@figmac{circlecp (##2)}% + \else\if s##1\relax \@figmac{circlepps (##2)}% + \else \@figmac{circle (##2)}% + \fi\fi\fi}% + \newdef\ellipse{\simple@opt\@ellipse{0}}% + \newdef\@ellipse##1##2{\@figmac{ellipse (##2, ##1)}}% + \newdef\sector##1{\@figmac{sector (##1)}}% + \newdef\makesector{\@closmac{makesector}}% + \newdef\arc{\null@opt\@arc}% + \newdef\@arc[##1]##2{% + \if t##1\relax \@figmac{arcppp (##2)}% + \else\if p##1\relax \@figmac{arcplr (##2)}% + \else\if a##1\relax \@figmac{arcalt (##2)}% + \else\if c##1\relax \@figmac{arccps (##2)}% + \else \@figmac{arcpps (##2)}% + \fi\fi\fi\fi}% + \newdef\plr##1{map (polar) (##1)}% + \newdef\midpoint##1{(0.5[##1])}% + \newdef\polyline{\@polyline\mf@F}% + \newlet\lines=\polyline + \newdef\polygon{\@polyline\mf@T}% + \newdef\@polyline##1{\@listmac{polyline (##1)}}% + \newdef\curve {\null@opt{\@curve\mf@F}}% + \newdef\cyclic{\null@opt{\@curve\mf@T}}% + \newdef\@curve##1[##2]{% + \@listmac{\mfp@ifempty{##2}{curve}{tcurve (##2)} (##1)}}% + \newdef\fcncurve{\null@opt\@fcncurve}% + \newdef\@fcncurve[##1]{% + \@listmac{\mfp@ifempty{##1}{fcncurve}{functioncurve (##1)}}}% + \newdef\qspline{\@listmac{openqbs}}% + \newdef\closedqspline{\@listmac{closedqbs}}% + \newdef\cspline{\@listmac{opencbs}}% + \newdef\closedcspline{\@listmac{closedcbs}}% + \newdef\mfbezier{\null@opt{\@mfbezier\mf@F}}% + \newdef\closedmfbezier{\null@opt{\@mfbezier\mf@T}}% + \newdef\@mfbezier##1[##2]{% + \@listmac{\mfp@ifempty{##2}{bezier}{tbezier (##2)} (##1)}}% + \newdef\qbeziers{\@listmac{qbezier (\mf@F)}}% + \newdef\closedqbeziers{\@listmac{qbezier (\mf@T)}}% + \newdef\turtle{\@listmac{turtle}}% + \newdef\function{\def\mfp@name{function}\mfp@fcn}% + \newdef\parafcn{\def\mfp@name{parafcn}\mfp@fcn}% + \newdef\plrfcn{\def\mfp@name{plrfcn}\mfp@fcn}% + \newdef\mfp@fcn{\simple@opt\@mfp@fcn{s}}% + \newdef\@mfp@fcn##1{\@@mfp@fcn##1\mfp@delim}% + \newdef\@@mfp@fcn##1##2\mfp@delim##3##4{% + \@figmac{\mfp@ifempty{##2}{}{t}\mfp@name\space + (\if p##1\mf@F\else\mf@T\fi \mfp@ifempty{##2}{}{, ##2}) + (##3) (##4)}}% + \newdef\btwnfcn{\simple@opt\@btwnfcn{p}}% + \newdef\@btwnfcn##1{\@@btwnfcn##1\mfp@delim}% + \newdef\@@btwnfcn##1##2\mfp@delim##3##4##5{\btwn@params{##1}{##2}% + \@figmac{\t@pref btwnfcn (\s@vals) (##3) (##4) (##5)}}% + \newdef\btwn@params##1##2{% + \edef\s@vals{\if s##1\mf@T\else\mf@F\fi}% + \mfp@ifempty{##2}{\def\t@pref{}}% + {\def\t@pref{t}\edef\s@vals{\s@vals, ##2}}}% + \newdef\plrregion{\simple@opt\@plrregion{p}}% + \newdef\@plrregion##1{\@@plrregion##1\mfp@delim}% + \newdef\@@plrregion##1##2\mfp@delim##3##4{\btwn@params{##1}{##2}% + \@figmac{((0,0)--(\t@pref plrfcn (\s@vals) (##3) (##4))% + --cycle)}}% + \newdef\tile##1{\mfcmd{\@nl tile (##1)}}% + \newdef\endtile{\mfsrc{endtile;\@nl}}% + \newdef\patharr##1{\begingroup + \mfsrc{hide(numeric ##1; path ##1[]; ##1 = 0)}% + \def\store@path{\mfsrc{\@nl store (##1[incr ##1])}}% + \setrender{}}% + \newdef\endpatharr{\endgroup}% + \newdef\connect{\@figmac{begingroup; save nexus}% + \patharr{nexus}}% + \newdef\endconnect{\endpatharr + \mfcmd{\@nl mkpoly (\mf@F, nexus)\@nl endgroup}% + \if@mfp@latex \def\mfptmp@a{connect}% + \ifx\mfptmp@a\@currenvir + \aftergroup\@startfigtrue %\aftergroup\@imrendtrue + \fi + \fi}% + \newdef\piechart{\simple@opt\@piechart{c}}% + \newdef\@piechart##1{\@@piechart##1\mfp@delim}% + \newdef\@@piechart##1##2\mfp@delim##3{% + \mfsrc{\@nl piechart(\if a##1 \else-\fi1, % + \mfp@mtsub{##2}{90}, ##3)}\mfp@writedata}% + \newdef\piewedge{\simple@opt\@piewedge{d}}% + \newdef\@piewedge##1{\@@piewedge##1\mfp@delim}% + \newdef\@@piewedge##1##2\mfp@delim##3{% + \@figmac{(piewedge[##3]% + \if x##1 shifted (##2*piedirection[##3])% + \else\if s##1 shifted (##2)% + \else\if m##1 shifted (##2 - piecenter)% + \else + \fi\fi\fi)}}% + \newdef\barchart{\simple@opt\@barchart{0,1,1}}% + \newdef\@barchart##1##2{% + \mfsrc{\@nl barchart (##1, \if h##2\mf@F\else\mf@T\fi)}% + \mfp@writedata}% + \newlet\bargraph=\barchart + \newlet\histogram=\barchart + \newlet\gantt\barchart + \newdef\chartbar##1{\@figmac{chartbar[##1]}}% + \newlet\graphbar=\chartbar + \newlet\histobar=\chartbar + \newlet\ganttbar=\chartbar + \newdef\pinumber{3.14159}% + \mfp@additions +}% +\newdef\mfpic{\simple@opt\@mfpicA{1}}% +\newdef\@mfpicA#1{\simple@opt{\@mfpic{#1}}{#1}}% +\newdef\@mfpic#1#2#3#4#5#6{% + \save@mfpicdimens + \begingroup % ended near end of \endmfpic + \@ifmfpfileisopen{}% + {\if@mfp@nowrite\else \nooutputfileerror{\mfpic}% + \def\@mfsrc##1##2{}% + \fi}% + \mfp@DBlog{Starting mfpic \number\mfp@count \@online.}% + \font\@tcurr=\fontname\font\relax + \let\ifin@mfpicenv\iftrue + \let\par\@empty + \nullfont + \@mfpic@graf@macs + \newdef\@xconv##1{% + {\mfp@scratch = ##1\relax + \advance\mfp@scratch by -#3\mfpicunit + \mfp@scratch = #1\mfp@scratch + \global ##1 = \mfp@scratch}}% + \newdef\@yconv##1{% + {\mfp@scratch=##1\relax + \advance\mfp@scratch by -#5\mfpicunit + \mfp@scratch = #2\mfp@scratch + \global ##1 = \mfp@scratch}}% +\setbox\@alltlabels\vbox{\hbox{}}% +\@tlabelsbot \maxdimen +\@tlabelstop -\maxdimen +\@tlabelsleft \maxdimen +\@tlabelsright-\maxdimen + \@graphright=#4\mfpicunit \@xconv\@graphright + \@graphtop=#6\mfpicunit \@yconv\@graphtop + \@graphleft=0pt + \@graphbot=0pt + \@graphwd=\@graphright + \mfsrc{\@nl \mf@p\mf@d\mf@d\mf@d\@nl + unitlen := \the\mfpicunit\mf@s;\@nl + xscale := #1; yscale := #2;\@nl + bounds (#3, #4, #5, #6);\@nl + \@nl + beginmfpic(\number\mfp@count); \mf@p\space\@mfplineno. + \mfp@ifmpost + {\@nl verbatimtex \@nl + \begingroup\space\font\noexpand\MFPcfont=\fontname\@tcurr\@nl + etex;}{}}% + \newdef\tlabel{% + \begingroup % ended in \@(@@)tlabel + \mfp@resetwhitespace + \@ifmplabels{}{\def\tlabel@rot{}}% + \null@opt\@tlabel@}% + \newdef\@tlabel@[##1]{\tlabeljustify{##1}% + \mfp@ifnextchar({\@@tlabel@}{\@@tlabel@@}}% + \newdef\@@tlabel@(##1,##2){% + \@ifmplabels + {\@@tlabel{(##1,##2)}}{\@tlabel{##1}{##2}}}% + \newdef\@@tlabel@@##1{% + \@ifmplabels {\@@tlabel{##1}}{\@@tlabel@##1}}% + \newdef\mfp@btex##1{btex \noexpand\MFPtext{##1} etex}% + \newdef\extraendtlabel{}% + \newdef\mfp@setMPpos{% + \edef\mfp@MPpos{% + \ifcase\tl@hpos .5\or 1\else 0\fi, % horizontal + \ifcase\tl@vpos 0\or .5\or 1\else 0\fi, % vertical + \ifnum \tl@vpos < 0 \mf@T\else\mf@F\fi, % true=Baseline + \mfp@mtsub{\tlabel@rot}{0}}}% + \newdef\@@tlabel##1{\def\mfp@points{##1}\mfp@restorepar + \mfp@setMPpos \@makeother\#\mfp@gettoks\@@@tlabel}% + \newdef\@@@tlabel{% + \mfcmd{\@nl + newgblabel(\mfp@MPpos)(\mfp@btex{\the\mfp@toks})(\mfp@points)}% + \endgroup \extraendtlabel}% + \newdef\set@textbox##1{% + \setbox\@textbox=\vbox{\def\\{\cr}\mfp@restorepar + \@tcurr\the\every@tlabel\halign{####\hfil\cr##1\crcr}}}% + \newdef\@tlabel##1##2##3{% + \set@textbox{##3}% + \mfp@scratch\tb@ht \advance\mfp@scratch\tb@dp + \tb@totalht\mfp@scratch + \mfp@scratch=##1\mfpicunit + \@xconv\mfp@scratch + \begingroup + \ifcase\tl@hpos \advance\mfp@scratch 0.5\tb@wd % center + \or \advance\mfp@scratch -\tlabel@sep % right + \else \advance\mfp@scratch \tb@wd % left + \advance\mfp@scratch \tlabel@sep + \fi + \advance\mfp@scratch \tlabel@hadj + \ifdim \mfp@scratch>\@tlabelsright + \@tlabelsright=\mfp@scratch + \fi + \endgroup + \begingroup + \ifcase\tl@hpos \advance\mfp@scratch -0.5\tb@wd % center + \or \advance\mfp@scratch -\tb@wd % right + \advance\mfp@scratch -\tlabel@sep + \else \advance\mfp@scratch \tlabel@sep % left + \fi + \advance\mfp@scratch \tlabel@hadj + \tb@moveright=\mfp@scratch + \ifdim \mfp@scratch<\@tlabelsleft + \@tlabelsleft=\mfp@scratch + \fi + \endgroup + \mfp@scratch=##2\mfpicunit + \@yconv\mfp@scratch + \begingroup + \ifcase\tl@vpos \advance\mfp@scratch \tb@totalht % bottom + \advance\mfp@scratch \tlabel@sep + \or \advance\mfp@scratch 0.5\tb@totalht % center + \or \advance\mfp@scratch -\tlabel@sep % top + \else \advance\mfp@scratch \tb@ht % baseline + \fi + \advance\mfp@scratch \tlabel@vadj + \tb@raise=\mfp@scratch + \ifdim \mfp@scratch>\@tlabelstop + \@tlabelstop=\mfp@scratch + \fi + \endgroup + \begingroup + \ifcase\tl@vpos \advance\mfp@scratch \tlabel@sep % bottom + \or \advance\mfp@scratch -0.5\tb@totalht % center + \or \advance\mfp@scratch -\tb@totalht % top + \advance\mfp@scratch -\tlabel@sep + \else \advance\mfp@scratch -\tb@dp % baseline + \fi + \advance\mfp@scratch \tlabel@vadj + \ifdim \mfp@scratch<\@tlabelsbot + \@tlabelsbot=\mfp@scratch + \fi + \endgroup + \global \setbox\@alltlabels=% + \vtop{\unvbox\@alltlabels + \vbox to 0pt{\kern-\tb@raise + \hbox{\kern\tb@moveright\box\@textbox}\vss}}% + \endgroup % group begun in \tlabel + \extraendtlabel}% End \@tlabel + \newdef\tlabelrect{\tlpath{rect}{0}}% + \newdef\tlabeloval{\tlpath{oval}{1}}% + \newdef\tlabelellipse{\tlpath{ellipse}{1}}% + \newdef\tlabelcircle{% + \mfp@ifnextchar*{\@firstoftwo{\tlabelellipse*[1]}}% + {\tlabelellipse[1]}}% + \newdef\tlpath##1##2{\@figmacstart + \begingroup % ended in \tlabelpath@ + \def\mfp@name{##1}\def\mfp@param{##2}% + \mfp@ifnextchar*% + {\@mfpswitchtrue\@firstoftwo{\@tlpath}}% gobbles the star + {\@mfpswitchfalse\@tlpath}}% + \newdef\@tlpath{\null@opt\@@tlpath}% + \newdef\@@tlpath[##1]{% + \edef\mfp@param{\mfp@mtsub{##1}{\mfp@param}}% + \mfp@resetwhitespace + \simple@opt\@@@tlpath{\tlpath@v\tlpath@h\tlpath@r}}% + \newdef\@@@tlpath##1{\tlabeljustify{##1}% + \mfp@setMPpos \mfp@ifnextchar({\@tlabelpath}{\@@tlabelpath}}% + \newdef\@tlabelpath (##1,##2){% + \def\mfp@points{(\@firstofone{##1},\@firstofone{##2})}% + \@@@tlabelpath}% + \newdef\@@tlabelpath##1{\def\mfp@points{##1}\@@@tlabelpath}% + \newdef\@@@tlabelpath{\mfp@restorepar + \@ifmplabels{\@makeother\#}{}\mfp@gettoks\tlabelpath@}% + \newdef\tlabelpath@{% + \@ifmplabels + {\mfcmd{text\mfp@name x (\mfp@MPpos)\@nl(origin, % dummy parameter + \mfp@btex{\the\mfp@toks}, \mfp@param, \mfp@points)}}% + {\measure@textbox{\the\mfp@toks}% + \mfcmd{text\mfp@name x (\mfp@MPpos)\@nl(\tb@ll, \tb@ur, % text bbox + \mfp@param, \mfp@points)}}% + \if@mfpswitch \endgroup % *-form, no label placed + \else % tlabel commands contain \endgroup + \@ifmplabels{\@@@tlabel}% + {\@xp\@@tlabel@\mfp@points{\the\mfp@toks}}% + \fi}% + \newdef\measure@textbox##1{% + \set@textbox{##1}% + \edef\tb@ll{(0, -(\the\tb@dp))}% + \edef\tb@ur{(\the\tb@wd, \the\tb@ht)}}% + \newdef\tlabels{% + \begingroup % ended in \do@tlabels + \mfp@resetwhitespace \@tlabels}% + \newdef\@tlabels##1{\def\extraendtlabel{\do@tlabels}% + \do@tlabels##1\mfp@delim}% + \newdef\do@tlabels{% + \mfp@ifnextchar\mfp@delim{\@firstoftwo\endgroup}{\tlabel}}% + \newdef\axislabels##1{% + \begingroup % ended in \do@axislabel + \mfp@resetwhitespace \tlabeljustify{cc}% + \let\mfp@xcoord=\@firstofone \let\mfp@ycoord=\@firstofone + \get@axisnum{##1}\axislabels + \ifcase\mfp@axisnum \tl@vpos=2 % x-axis -->[tc] + \def\mfp@ycoord{0}% + \or \tl@hpos=1 % y-axis-->[cr] + \def\mfp@xcoord{0} + \or \tl@hpos=1 % left -->[cr] + \edef\mfp@xcoord{\mfp@lshift}\mfpaddto\mfp@xcoord{#3}% + \or \tl@vpos=2 % bottom-->[tc] + \edef\mfp@ycoord{\mfp@bshift}\mfpaddto\mfp@ycoord{#5}% + \or \tl@hpos=-1 % right -->[cl] + \edef\mfp@xcoord{-\mfp@rshift}\mfpaddto\mfp@xcoord{#4}% + \or \tl@vpos=0 % top -->[bc] + \edef\mfp@ycoord{-\mfp@tshift}\mfpaddto\mfp@ycoord{#6}% + \fi + \ifx\@firstofone\mfp@xcoord + \edef\mfp@ycoord####1{\mfp@ycoord}% + \else + \edef\mfp@xcoord####1{\mfp@xcoord}% + \fi \null@opt\@axislabels}% + \newdef\@axislabels[##1]##2{% + \tlabeljustify{##1}% + \do@axislabel~ ##2,\mfp@delim}% + \newdef\do@axislabel~##1,{% + \@ifmtarg{##1}{\x@axislabel}{\do@@axislabel##1\@nil}}% + \newdef\do@@axislabel##1##2\@nil{% + \@ifmtarg{##2}% + {\Mfpic@warn{Possible extra comma, missing coordinate, or + missing\@msgbreak braces in \string\axislabels\@online. + Skipping this label.}}% + {\tlabel(\mfp@xcoord{##2},\mfp@ycoord{##2}){##1}}% + \x@axislabel}% + \newdef\x@axislabel{% check for end of list + \mfp@ifnextchar\mfp@delim{\@firstoftwo\endgroup}{\do@axislabel~ }}% + \newdef\@docaption{}% + \newdef\tcaption{\simple@opt\tcaption@{1.2, 1.0}}% + \newdef\tcaption@##1{\@tcaption##1\mfp@delim}% + \long\def\@tcaption##1,##2\mfp@delim##3{% + \def\@docaption{% + \setbox\@textbox=% + \hbox{\def\\{\hskip\@M\p@}\mfp@restorepar + \@tcurr##3}% + \@graphwd=\wd\@wholegraph + \ifdim\tb@wd>##1\@graphwd + \setbox\@textbox=% + \hbox{% + \vbox{% + \if@mfp@latex % keep LaTeX's `\\' + \else + \def\\{\unskip\hbox{}\hfil\penalty-\@M\ignorespaces}% + \fi + \if@mfp@centcapt + \leftskip=0pt plus 0.5fil + \rightskip=0pt plus -0.5fil + \parfillskip=0pt plus 1fil + \else + \leftskip=0pt + \rightskip=0pt + \fi + \hsize=##2\@graphwd \mfp@restorepar + \noindent\@tcurr ##3% + }% End vbox. + }% End hbox. + \fi + \mfp@scratch=\wd\@wholegraph + \ifdim \mfp@scratch<\tb@wd \mfp@scratch=\tb@wd \fi + \global\setbox\@wholegraph=% + \vbox{\hbox to \mfp@scratch{\hss\box\@wholegraph\hss}% + \nointerlineskip \vskip\mfpiccaptionskip + \hbox to \mfp@scratch{\hss\box\@textbox\hss}}% End vbox. + }% End \@docaption. + }% End \@tcaption. +}% End of \@mfpic +\mfp@DBlog{Definition of closure of mfpic environment.}% +\newdef\endmfpic{% + \mfsrc{\mfp@ifmpost{\@nl verbatimtex \endgroup\space etex;}{}\@nl + endmfpic;\mf@p (\number\mfp@count) \space\@mfplineno.\@nl + \mf@p\mf@d\mf@d\mf@d\@nl}% + \ifmfpicdebug\wlog{}\wlog{Mfpic: ENTERED endmfpic.}\wlog{}\fi + \if@shipping % + \global\setbox\@wholegraph=% + \vbox{% + \ifmfpicdraft + \vbox to \@graphtop{\vss + \hbox to \@graphwd{\kern2pt\tt\#\number\mfp@count\hss}% + \kern2pt}% + \else + \mfp@ifmpost{\vbox}{\vbox to \@graphtop}% + {\vss + \edef\@graphfilename{\setfilename{\mfp@filename}% + {\number\mfp@count}}% + \mfp@ifmpost + {\openin\mfp@graph=\@graphfilename\relax + \ifeof\mfp@graph + \Mfpic@msg{No graph file: \@graphfilename\space.}% + \def\@setmfpicgraphic##1{\raise2pt\hbox{\kern2pt\tt ##1}}% + \closein\mfp@graph + \else\if@mfp@latexe + \@namedef{Gin@rule@.\number\mfp@count}##1{% + {\mfp@Gtype}{.\number\mfp@count}{##1}}% + \fi\fi}{}% + \mfp@ifmpost{\hbox}{\hbox to \@graphwd}% + {\@xp\@setmfpicgraphic\@xp{\@graphfilename}\hss}% End hbox. + \kern0pt + }% End vbox + \fi + }%% End vbox (\setbox\@wholegraph) + \mfp@ifmpost + {\@graphright=\wd\@wholegraph + \@graphtop=\ht\@wholegraph + \@graphwd=\@graphright}{}% + \ifmfpicdebug + \wlog{Mfpic: graphleft = \the\@graphleft}% + \wlog{Mfpic: graphright = \the\@graphright}% + \wlog{Mfpic: graphtop = \the\@graphtop}% + \wlog{Mfpic: graphbot = \the\@graphbot}% + \wlog{Mfpic: graphwd = \the\wd\@wholegraph}% + \wlog{Mfpic: graphht = \the\ht\@wholegraph}% + \wlog{Mfpic: graphdp = \the\dp\@wholegraph}% + \wlog{}% + \fi + \ifmfpicdebug + \wlog{Mfpic: tlabelsleft = \the\@tlabelsleft}% + \wlog{Mfpic: tlabelsright = \the\@tlabelsright}% + \wlog{Mfpic: tlabelstop = \the\@tlabelstop}% + \wlog{Mfpic: tlabelsbot = \the\@tlabelsbot}% + \wlog{}% + \fi + \ifdim\@tlabelsleft < \maxdimen + \setbox\@alltlabels\vtop to 0pt{% + \kern \mfpiclly bp + \moveleft \mfpicllx bp \box\@alltlabels + \vss}% + \mfp@scratch\@tlabelsleft + \advance\mfp@scratch-\mfpicllx bp + \ifdim\mfp@scratch<\@graphleft + \@graphleft\mfp@scratch + \fi + \mfp@scratch\@tlabelsright + \advance\mfp@scratch-\mfpicllx bp + \ifdim\mfp@scratch>\@graphright + \@graphright\mfp@scratch + \fi + \mfp@scratch\@tlabelstop + \advance\mfp@scratch-\mfpiclly bp + \ifdim\mfp@scratch>\@graphtop + \@graphtop\mfp@scratch + \fi + \mfp@scratch\@tlabelsbot + \advance\mfp@scratch-\mfpiclly bp + \ifdim\mfp@scratch<\@graphbot + \@graphbot\mfp@scratch + \fi + \setbox\@wholegraph=\vtop{% + \unvbox\@wholegraph\box\@alltlabels}% + \fi + \ifmfpicdebug + \wlog{Mfpic: tlabelsleft = \the\@tlabelsleft}% + \wlog{Mfpic: tlabelsright = \the\@tlabelsright}% + \wlog{Mfpic: tlabelstop = \the\@tlabelstop}% + \wlog{Mfpic: tlabelsbot = \the\@tlabelsbot}% + \wlog{}% + \fi + \mfp@scratch=\@graphtop + \advance\mfp@scratch by -\@graphbot + \global \setbox\@wholegraph=% + \vbox to \mfp@scratch{\vss + \hbox{\kern-\@graphleft\box\@wholegraph}% + \kern-\@graphbot}% End vbox. + \ifmfpicdebug + \wlog{Mfpic: graphleft = \the\@graphleft}% + \wlog{Mfpic: graphright = \the\@graphright}% + \wlog{Mfpic: graphtop = \the\@graphtop}% + \wlog{Mfpic: graphbot = \the\@graphbot}% + \wlog{Mfpic: graphwd = \the\wd\@wholegraph}% + \wlog{Mfpic: graphht = \the\ht\@wholegraph}% + \wlog{Mfpic: graphdp = \the\dp\@wholegraph}% + \wlog{}% + \fi + \@docaption + \global\mfpicheight\ht\@wholegraph + \global\mfpicwidth\wd\@wholegraph + \ifmfpicdebug + \wlog{Mfpic: graphleft = \the\@graphleft}% + \wlog{Mfpic: graphright = \the\@graphright}% + \wlog{Mfpic: graphtop = \the\@graphtop}% + \wlog{Mfpic: graphbot = \the\@graphbot}% + \wlog{Mfpic: graphwd = \the\wd\@wholegraph}% + \wlog{Mfpic: graphht = \the\ht\@wholegraph}% + \wlog{Mfpic: graphdp = \the\dp\@wholegraph}% + \wlog{}% + \fi + \ifmfpicdraft + \setbox\@wholegraph=% + \hbox{\@mfpframed{-\mfpframethickness}{\box\@wholegraph}}% + \fi + \mfp@ifdefined\s@vemfpic + {\global\setbox\s@vemfpic=\box\@wholegraph}% + {\leavevmode\box\@wholegraph}% + \global\let\s@vemfpic\UndEfInEd + \global \advance\mfp@count1 + \fi % end of \if@shipping + \endgroup % Begun near start of \@mfpic + \restore@mfpicdimens + \if@mfp@latex + \def\mfptmp@a{mfpic}% + \ifx\mfptmp@a\@currenvir + \@ignoretrue% so \endmfpic and \end{mfpic} have the same effect. + \fi + \fi + \ignorespaces +}% +\newdef\newsavepic#1{% + \if@mfp@latex \newsavebox{#1}% + \else + \mfp@ifdefined{#1}% + {\mfp@errmsg + {Command \string #1 already defined.}% + {You have used \newsavepic with an already defined or an^^J% + improper control sequence. Replace #1 with another name.^^J% + If you proceed, \newsavepic will be ignored.}}% + {\csname newbox\endcsname#1}% + \fi}% +\newlet\newpic=\newsavepic % compatibility +\newdef\savepic#1{\relax + \mfp@ifdefined{#1}{\gdef\s@vemfpic{#1}}% + {\mfp@errmsg{Box \string#1 undefined.}% + {You tried to save a picture in a box which had not been^^J% + previously allocated. Use \newsavepic to allocate a box.}}}% +\newdef\usepic#1{\leavevmode \copy#1\relax}% +\newdef\mfpframed{\simple@opt\@mfpframed\mfpframesep}% +\newdef\mfpframe{\simple@opt\@mfpframe\mfpframesep}% +\newdef\@mfpframed#1#2{\@mfpframe{#1}#2\endmfpframe}% +\newdef\@mfpframe#1{% + \leavevmode\hbox\bgroup + \mfpframesep#1\relax + \vrule width\mfpframethickness + \vtop\bgroup + \vbox\bgroup + \hrule height\mfpframethickness + \kern\mfpframesep + \hbox\bgroup \kern\mfpframesep \ignorespaces}% +\newdef\endmfpframe{\unskip + \kern\mfpframesep + \egroup % end hbox + \egroup % end vbox + \kern\mfpframesep + \hrule height\mfpframethickness + \egroup % end vtop + \vrule width\mfpframethickness + \egroup}% end hbox +\mfp@ifdefined\framed{}{\newlet\framed=\mfpframed}% +\newif\if@mfp@verbtex +\def\mfpverbtex{% + \begingroup \preservelines \@makeother\#% + \afterassignment\mfp@writetex\global\mfp@verbtex=}% +\def\mfp@writetex{% + \endgroup + \@ifmfpfileisopen + {\mfp@ifmpost + {\mfsrc{verbatimtex}\mfsrc{\the\mfp@verbtex}\mfcmd{etex}}% + {\noMP@error{verbatimtex}}% + \global\@mfp@verbtexfalse\mfp@verbtex{}}% + {\global\@mfp@verbtextrue}}% +\global\mfp@count=1 % 1 because we now advance it in \endmfpic. +\newdef\MFPICinput#1{% + \immediate\openin\mfp@graph=#1 + \ifeof\mfp@graph + \immediate\closein\mfp@graph + \else + \immediate\closein\mfp@graph + \input #1 + \fi}% +\MFPICinput{mfppatch.tex}% +\mfp@DBlog{Punctuation, etc., will revert to old catcodes now.}% +\let\+\mfpsaveplus +\restorenewlinechar +\MFPicpackagE% +\MFPICinput{mfpic.usr}% +\endinput +%% +%% End of file `mfpic.tex'. |