summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/mfpic/mfpic.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/mfpic/mfpic.tex')
-rw-r--r--Master/texmf-dist/tex/generic/mfpic/mfpic.tex1603
1 files changed, 1603 insertions, 0 deletions
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'.