summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/emp/emp.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/emp/emp.dtx')
-rw-r--r--macros/latex/contrib/emp/emp.dtx863
1 files changed, 863 insertions, 0 deletions
diff --git a/macros/latex/contrib/emp/emp.dtx b/macros/latex/contrib/emp/emp.dtx
new file mode 100644
index 0000000000..b502e62f7c
--- /dev/null
+++ b/macros/latex/contrib/emp/emp.dtx
@@ -0,0 +1,863 @@
+% \iffalse % emp.dtx - Encapsulated MetaPost for LaTeX(2e)
+% Copyright (C) 1997 by Thorsten.Ohl@Physik.TU-Darmstadt.de
+% $Id: emp.dtx,v 1.10 1997/11/12 21:14:41 ohl Exp $
+%
+% Emp is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2, or (at your option)
+% any later version.
+%
+% Emp is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% \fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%% \CheckSum{291}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \MakeShortVerb{\|}
+%
+% \title{%
+% \EMP: \\
+% Encapsulated \MP{} for \LaTeX\thanks{%
+% This is \texttt{\filename}, version \fileversion,
+% revision \filerevision, date \filedate.}}
+%
+% \author{%
+% Thorsten Ohl\thanks{e-mail:
+% \texttt{Thorsten.Ohl@Physik.TU-Darmstadt.de}}\\
+% \hfil \\
+% Technische Hochschule Darmstadt \\
+% Schlo\ss gartenstr. 9 \\
+% D-64289 Darmstadt \\
+% Germany}
+%
+% \maketitle
+% \begin{abstract}
+% The \EMP{} package allows to encapsulate \MP{} files in \LaTeX{}
+% sources. This is very useful for keeping illustrations in sync
+% with the text. It also frees the user from inventing descriptive
+% names for PostScript files that fit into the confines of file
+% system conventions.
+% \end{abstract}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \vfill
+% \section*{Copying}
+%
+% \EMP{} is free software; you can redistribute it and/or modify it
+% under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2, or (at your option)
+% any later version.
+%
+% \EMP{} is distributed in the hope that it will be useful, but
+% \emph{without any warranty}; without even the implied warranty of
+% \emph{merchantability} or \emph{fitness for a particular purpose}.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \newpage
+% \unitlength=1mm
+% \def\topfraction{0.9}
+% \def\bottomfraction{0.9}
+% \def\textfraction{0.1}
+% \empaddtoTeX{\usepackage{amsmath}}
+% \empprelude{input graph}
+% \begin{empfile}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Introduction}
+%
+% When adding illustrations to documents, one faces two bookkeeping
+% problems:
+% \begin{enumerate}
+% \item How to encourage oneself to keep the illustrations in sync
+% with the text, when the document is updated?
+% \item How to make sure that the illustrations appear on the right
+% spot?
+% \end{enumerate}
+% For both problems, the best solution is to encapsulate the figures
+% in the \LaTeX{} source:
+% \begin{enumerate}
+% \item It is much easier to remember to update an illustration if
+% one doesn't have to switch files in the editor.
+% \item One does not have to invent illustrative file names, if
+% the computer keeps track of them.
+% \end{enumerate}
+% Therefore \EMP{} was written to allow to encapsulate
+% \MP~\cite{MP,LaTeX-Graphics-Companion} into
+% \LaTeX~\cite{LaTeX-Graphics-Companion,LaTeX,LaTeX-Companion}.
+%
+% These macros have some overlap with
+% \FMF~\cite{LaTeX-Graphics-Companion,FeynMF},
+% |axodraw|~\cite{axodraw} and
+% |mfpic|~\cite{LaTeX-Graphics-Companion,mfpic}. In fact, most of the
+% functionality of \EMP{} is available from \FMF. Longer pieces of
+% \MP{} code are however not very conveniently typed in \FMF, because
+% there is no facility for multi line input (using |\fmfcmd| with long
+% arguments can overflow \MP's input buffers because of the missing
+% line breaks). Since \FMF{} provides much syntax that is superfluous
+% for \EMP's purpose (the \EMP{} package exports only five new
+% environments and five commands), it is more appropriate to create a
+% separate small package than to add this functionality to \FMF.
+% Similar comments apply to |mfpic|.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Usage}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Commands and Environments}
+% \label{sec:commands}
+%
+% \DescribeEnv{empfile}
+% All descriptions that should go into one \MP{} file are placed
+% inside a |empfile| environment which takes the name of the \MP{}
+% file as an optional argument:
+% \begin{quote}
+% \begin{flushleft}
+% |\begin{empfile}[|\meta{\MP-file}|]|\\
+% \qquad\ldots\\
+% |\end{empfile}|
+% \end{flushleft}
+% \end{quote}
+% The default \MP-filename is |\jobname.mp|.
+%
+% \DescribeEnv{emp}
+% The |emp| environment contains the description of a single
+% figure that will be placed at the location of the environment.
+% Required arguments are the width and the height of the figure, in
+% units of |\unitlength|. They will be available as the \MP{}
+% variables~|w| and~|h|. The optional argument assigns a name to be
+% used with |\empuse{|\meta{name}|}|.
+% \begin{quote}
+% \begin{flushleft}
+% |\begin{emp}[|\meta{name}|](|\meta{width}|,|\meta{height}|)|\\
+% \qquad\meta{\MP-commands}\\
+% |\end{emp}|
+% \end{flushleft}
+% \end{quote}
+% Note that this environment uses the |verbatim| package to process
+% the input lines and can therefore \emph{not} be used as an argument
+% to another macros. To work around this problem, you can first use
+% the |empdef| environment and |\empuse| it later.
+%
+% \DescribeMacro{\empuse}
+% Reuse a previously defined figure.
+%
+% \DescribeEnv{empdef}
+% The |empdef| environment is similar to |emp|, but the figure is not
+% drawn. This is useful, because these environments use the
+% |verbatim| package and can therefore \emph{not} be used as an
+% argument to another macros.
+% \begin{quote}
+% \begin{flushleft}
+% |\begin{empdef}[|\meta{name}|](|\meta{width}|,|\meta{height}|)|\\
+% \qquad\meta{\MP-commands}\\
+% |\end{empdef}|
+% \end{flushleft}
+% \end{quote}
+%
+% \DescribeEnv{empcmds}
+% Write \MP{} commands to the current file outside of a figure.
+% \begin{quote}
+% \begin{flushleft}
+% |\begin{empcmds}|\\
+% \qquad\meta{\MP-commands}\\
+% |\end{empcmds}|
+% \end{flushleft}
+% \end{quote}
+%
+% \DescribeEnv{empgraph}
+% The |empgraph| environment contains the description of a graph
+% that will be placed a the location of the environment.
+% The user is responsible for including the |graph| package by the
+% using the command |\empprelude{input graph}| in the preamble.
+% Required arguments are the width and
+% the height of the graph, in units of |\unitlength|. They will be
+% available as the \MP{} variables~|w| and~|h|. The optional argument
+% assigns a name to be used with |\empuse{|\meta{name}|}|.
+% \begin{quote}
+% \begin{flushleft}
+% |\begin{empgraph}[|\meta{name}|](|\meta{width}|,|\meta{height}|)|\\
+% \qquad\meta{\MP-commands}\\
+% |\end{empgraph}|
+% \end{flushleft}
+% \end{quote}
+%
+% \DescribeMacro{\empTeX}
+% Define a \LaTeX{} prelude to be written to the top of every \MP{}
+% file. The default is |\documentclass[|\meta{ptsize}|]{article}|.
+% If the prelude is not empty, |\begin{document}| will be added. Note
+% that you have to run \MP{} as |TEX=latex mpost| \meta{filename} if the
+% prelude calls \LaTeX.
+%
+% \DescribeMacro{\empaddtoTeX}
+% Add to the \LaTeX{} prelude.
+% E.g.~|\empaddtoTeX{\usepackage{euler}}| makes sure that \MP{} will
+% use the Euler fonts for the labels.
+%
+% \DescribeMacro{\empprelude}
+% \DescribeMacro{\empaddtoprelude}
+% Define and add to a \MP{} prelude to the top of every \MP{} file.
+% The default is empty.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{Examples}
+% \label{sec:examples}
+%
+% For a simple example, let's draw a smiling and a frowning face.
+% Since they are identical except for the mouth, we prepare a macro
+% for the common parts:
+% \begin{macrocode}
+%<*sample>
+\begin{empcmds}
+ vardef draw_face =
+ pair lefteye, righteye, nose[];
+ lefteye = c + (-0.25w,0.15h); righteye = c + (0.25w,0.15h);
+ nose1 = c - (0,0.05h); nose2 = c + (0,0.15h);
+ pickup pencircle scaled 1;
+ draw fullcircle xscaled w yscaled h shifted c;
+ draw fullcircle scaled 2 shifted lefteye;
+ draw fullcircle scaled 2 shifted righteye;
+ draw nose1--nose2; draw mouth1..mouth2..mouth3;
+ setbounds currentpicture to unitsquare xscaled w yscaled .5h;
+ enddef;
+\end{empcmds}
+% \end{macrocode}
+% \begin{empcmds}
+ vardef draw_face =
+ pair lefteye, righteye, nose[];
+ lefteye = c + (-0.25w,0.15h); righteye = c + (0.25w,0.15h);
+ nose1 = c - (0,0.05h); nose2 = c + (0,0.15h);
+ pickup pencircle scaled 1;
+ draw fullcircle xscaled w yscaled h shifted c;
+ draw fullcircle scaled 2 shifted lefteye;
+ draw fullcircle scaled 2 shifted righteye;
+ draw nose1--nose2; draw mouth1..mouth2..mouth3;
+ setbounds currentpicture to unitsquare xscaled w yscaled .5h;
+ enddef;
+\end{empcmds}
+% This can now be used for the frowning
+% \begin{emp}[frown](5,5)
+ pair mouth[], c; c = (0.5w,0);
+ mouth1 = c + (-0.2w,-0.25h);
+ mouth2 = c + (0,-0.2h);
+ mouth3 = c + (0.2w,-0.25h);
+ draw_face;
+\end{emp}
+% \begin{macrocode}
+\begin{emp}(5,5)
+ pair mouth[], c; c = (0.5w,0);
+ mouth1 = c + (-0.2w,-0.25h);
+ mouth2 = c + (0,-0.2h);
+ mouth3 = c + (0.2w,-0.25h);
+ draw_face;
+\end{emp}
+% \end{macrocode}
+% and the smiling
+% \begin{emp}[smile](5,5)
+ pair mouth[], c; c = (0.5w,0);
+ mouth1 = c + (-0.2w,-0.2h);
+ mouth2 = c + (0,-0.25h);
+ mouth3 = c + (0.2w,-0.2h);
+ draw_face;
+\end{emp}
+% face
+% \begin{macrocode}
+\begin{emp}[smile](5,5)
+ pair mouth[], c; c = (0.5w,0);
+ mouth1 = c + (-0.2w,-0.2h);
+ mouth2 = c + (0,-0.25h);
+ mouth3 = c + (0.2w,-0.2h);
+ draw_face;
+\end{emp}
+% \end{macrocode}
+% Since we have given a name to |smile|, we can now use it with
+% |\empuse{smile}|:
+% \begin{itemize}
+% \item[\empuse{smile}] Note that the reference point has been set
+% up such that it works best as replacement for |\bullet| in
+% |itemize| environments.
+% \item[\empuse{smile}] This is very useful for slides.
+% \end{itemize}
+%
+% \begin{figure}
+% \begin{center}
+% \begin{empgraph}(60,40)
+ pickup pencircle scaled 1pt;
+ path p;
+ for x = -20 step 0.2 until -0.2:
+ augment.p (x, sind(x*180/3.14159)/x);
+ endfor
+ augment.p (0, 1);
+ for x = 0.2 step 0.2 until 20:
+ augment.p (x, sind(x*180/3.14159)/x);
+ endfor
+ gdraw p;
+ glabel.lrt (btex $\displaystyle\frac{\sin(x)}{x}$ etex, (-20,1));
+\end{empgraph}
+% \vspace*{-1.5\baselineskip}
+% \end{center}
+% \caption{\label{fig:graph}%
+% \texttt{graph} example.}
+% \end{figure}
+% As a second example, the simple plot of
+% \begin{equation}
+% j_0 = \frac{\sin(x)}{x}
+% \end{equation}
+% is shown in figure~\ref{fig:graph}:
+% \begin{macrocode}
+\begin{empgraph}(60,40)
+ pickup pencircle scaled 1pt;
+ path p;
+ for x = -20 step 0.2 until -0.2:
+ augment.p (x, sind(x*180/3.14159)/x);
+ endfor
+ augment.p (0, 1);
+ for x = 0.2 step 0.2 until 20:
+ augment.p (x, sind(x*180/3.14159)/x);
+ endfor
+ glabel.lrt (btex $$\displaystyle\frac{\sin(x)}{x}$$ etex, (-20,1));
+ gdraw p;
+\end{empgraph}
+% \end{macrocode}
+% The command |\empprelude{input graph}| must have been put in the
+% preamble to make the |graph| package available.
+%
+% \begin{figure}
+% \begin{center}
+% \begin{empgraph}(60,40)
+ pi = 3.14159; beta0 = 11 - 2/3*4;
+ lambda1 = 0.15; lambda2 = 0.25;
+ vardef ln expr x = (mlog x) / 256 enddef;
+ vardef alphas (expr x, l) = 4*pi/(beta0*2ln(x/l)) enddef;
+ setcoords (log,linear);
+ pickup pencircle scaled 1pt;
+ path p[];
+ for x = 0.5 step 0.1 until 10:
+ augment.p1 (x, alphas (x, lambda1));
+ augment.p2 (x, alphas (x, lambda2));
+ endfor
+ gfill p1--(reverse p2)--cycle withcolor .5white;
+ glabel.lft (btex $\alpha_s(Q^2)$ etex rotated 90, OUT);
+ glabel.bot (btex $Q^2/\text{GeV}$ etex, OUT);
+\end{empgraph}
+% \vspace*{-1.5\baselineskip}
+% \end{center}
+% \caption{\label{fig:alphas}%
+% Another \texttt{graph} example.}
+% \end{figure}
+% Finally, another application of the |graph| package:
+% \begin{equation}
+% \alpha_s(Q^2) = \frac{4\pi}{\beta_0\ln(Q^2/\Lambda_{\text{QCD}}^2)}
+% \end{equation}
+% with $\Lambda_{\text{QCD}}\in[0.15\,\text{GeV},0.25\,\text{GeV}]$
+% and $\beta_0=11-2N_f/3$ is shown in figure~\ref{fig:alphas}:
+% \begin{macrocode}
+\begin{empgraph}(60,40)
+ pi = 3.14159; beta0 = 11 - 2/3*4;
+ lambda1 = 0.15; lambda2 = 0.25;
+ vardef ln expr x = (mlog x) / 256 enddef;
+ vardef alphas (expr x, l) = 4*pi/(beta0*2ln(x/l)) enddef;
+ setcoords (log,linear);
+ pickup pencircle scaled 1pt;
+ path p[];
+ for x = 0.5 step 0.1 until 10:
+ augment.p1 (x, alphas (x, lambda1));
+ augment.p2 (x, alphas (x, lambda2));
+ endfor
+ gfill p1--(reverse p2)--cycle withcolor .5white;
+ glabel.lft (btex $\alpha_s(Q^2)$ etex rotated 90, OUT);
+ glabel.bot (btex $Q^2/\text{GeV}$ etex, OUT);
+\end{empgraph}
+%</sample>
+% \end{macrocode}
+% Note that the |\text| macro of AMS-\LaTeX{} has been used,
+% therefore, the command |\empaddtoTeX{\usepackage{amsmath}}| must
+% have been put in the preamble for this example to work.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \begin{thebibliography}{99}
+% \bibitem{MP} John D.~Hobby, \textit{A User's Manual for
+% \MP}, Computer Science Report \#162, AT\&T Bell
+% Laboratories, April 1992.
+% \bibitem{LaTeX-Graphics-Companion} Michel Goossens, Sebastian
+% Rahtz, and Frank Mittelbach, \textit{The \LaTeX{} Graphics
+% Companion}, Addison-Wesley, Reading MA, 1997.
+% \bibitem{LaTeX} Leslie Lamport, \textit{\LaTeX{} --- A
+% Documentation Preparation System},
+% Addison-Wesley, Reading MA, 1985.
+% \bibitem{LaTeX-Companion} Michel Goossens, Frank Mittelbach, and
+% Alexander Samarin, \textit{The \LaTeX{} Companion},
+% Addison-Wesley, Reading MA, 1994.
+% \bibitem{FeynMF} Thorsten Ohl,
+% Comp.~Phys.~Comm.~\textbf{90} (1995) 340;
+% CERN Computer Newsletter~\textbf{220} (1995) 22;
+% \textbf{221} (1995) 46; \textbf{222} (1996) 24.
+% \texttt{axodraw} is available from CTAN
+% (cf.~p.~\pageref{pg:CTAN}), in the
+% \texttt{latex/contrib/supported} directory.
+% \bibitem{axodraw} Jos Vermaseren,
+% Comp.~Phys.~Comm.~\textbf{83} (1994) 45.
+% \texttt{axodraw} is available from CTAN
+% (cf.~p.~\pageref{pg:CTAN}), in the \texttt{graphics} directory.
+% \bibitem{mfpic} Thomas E.~Leathrum, \texttt{mfpic}, available from
+% CTAN (cf.~p.~\pageref{pg:CTAN}), in the \texttt{graphics}
+% directory.
+% \end{thebibliography}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section*{Distribution}
+% \label{sec:distribution}
+%
+% \EMP{} is available by anonymous internet ftp from any of the
+% Comprehensive \TeX{} Archive Network (CTAN) hosts
+% \label{pg:CTAN}
+% \begin{quote}
+% |ftp.tex.ac.uk|, |ftp.dante.de|
+% \end{quote}
+% in the directory
+% \begin{quote}
+% |macros/latex/contrib/supported/emp|
+% \end{quote}
+% It is also available from the host
+% \begin{quote}
+% |crunch.ikp.physik.tu-darmstadt.de|
+% \end{quote}
+% in the directory
+% \begin{quote}
+% |pub/ohl/emp|
+% \end{quote}
+% Unsupported snapshots of work in progress are provided as
+% \begin{quote}
+% |pub/ohl/emp.versions/emp-current.tar.gz|
+% \end{quote}
+% ^^A There are two mailing lists
+% ^^A \begin{quote}
+% ^^A \begin{flushleft}
+% ^^A |emp-announce@crunch.ikp.physik.tu-darmstadt.de|\\
+% ^^A |emp-bugs@crunch.ikp.physik.tu-darmstadt.de|
+% ^^A \end{flushleft}
+% ^^A \end{quote}
+% ^^A open for subscription. The former should carry only important
+% ^^A announcements, of new versions in particular. To subscribe, send
+% ^^A mail to the (electronic) mailing list manager
+% ^^A \begin{quote}
+% ^^A |majordomo@crunch.ikp.physik.tu-darmstadt.de|
+% ^^A \end{quote}
+% ^^A and \emph{not} to the lists itself. The following commands (on a
+% ^^A line in the body of the mail, not in the subject) are useful:
+% ^^A \begin{quote}
+% ^^A \begin{flushleft}
+% ^^A |subscribe emp-announce|\\
+% ^^A |unsubscribe emp-announce|\\
+% ^^A |help|
+% ^^A \end{flushleft}
+% ^^A \end{quote}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{empfile}
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+% \changes{v1.00}{1997/11/12}{Version 1.00 frozen.}
+%
+% It's is good practice to identify this version of the document style
+% option. We do this by parsing an RCS |Id| string and storing the
+% result in the conventional \TeX{} control sequences:
+% \begin{macrocode}
+%<*style>
+\def\fileversion{v1.00}
+\NeedsTeXFormat{LaTeX2e}
+{\def\RCS#1#2\endRCS{%
+ \ifx$#1%
+ \@RCS $#2 \endRCS
+ \else
+ \@RCS $*: #1#2$ \endRCS
+ \fi}%
+ \def\@RCS $#1: #2,v #3 #4 #5 #6 #7$ \endRCS{%
+ \gdef\filename{#2}%
+ \gdef\filerevision{#3}%
+ \gdef\filedate{#4}%
+ \gdef\filemaintainer{#6}}%
+\RCS $Id: emp.dtx,v 1.10 1997/11/12 21:14:41 ohl Exp $ \endRCS}%
+% \end{macrocode}
+%
+% And now the standard procedure:
+% \begin{macrocode}
+\ProvidesPackage{emp}[\filedate\space\fileversion\space
+ Encapsulated MetaPost LaTeX Package (\filemaintainer)]
+% \end{macrocode}
+% Every option we don't understand is sent down to |graphics|:
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{graphics}}
+\ProcessOptions
+\RequirePackage{graphics}[1994/12/15]
+\RequirePackage{verbatim}
+% \end{macrocode}
+%
+% \begin{macro}{\empwrite}
+% \begin{macrocode}
+{\catcode`\%=11\gdef\p@rcent{%}}
+\def\empwrite#1{%
+ \if@empio
+ \immediate\write\@outemp{#1}%
+ \fi
+ \ignorespaces}
+\newif\if@empio
+\@empiotrue
+\newwrite\@outemp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empfile}
+% This environment encloses each \MP{} input file. The single optional
+% argument gives the name of the file.
+% \begin{macrocode}
+\newcommand{\empfile}[1][\jobname]{%
+ \def\theempfile{#1}%
+% \end{macrocode}
+% Open the \MP{} file. If we're running under AMS-\LaTeX, turn off
+% I/O during the first pass over equation environments.
+% \begin{macrocode}
+ \if@empio
+ \@ifundefined{ifmeasuring@}%
+ {}%
+ {\def\if@empio{\ifmeasuring@\else}}%
+ \immediate\openout\@outemp=\theempfile.mp\relax
+ \empwrite{\p@rcent\p@rcent\p@rcent\space \theempfile.mp -- %
+ do not edit, generated automatically by \jobname.tex}%
+% \end{macrocode}
+% append |\begin{document}| to a non-empty |\LaTeX| prelude and write
+% it out:
+% \begin{macrocode}
+ \expandafter\ifx\expandafter*\the\emp@TeX*\else
+ \emp@TeX=\expandafter{\the\emp@TeX^^J\begin{document}}%
+ \empwrite{verbatimtex^^J\the\emp@TeX^^Jetex;}%
+ \fi
+ \expandafter\ifx\expandafter*\the\emp@prelude*\else
+ \empwrite{\the\emp@prelude;}%
+ \fi
+ \fi
+% \end{macrocode}
+% Count the figures
+% \begin{macrocode}
+ \setcounter{empfig}{0}}
+\let\theempfile\relax
+\newcounter{empfig}
+% \end{macrocode}
+% Standard preludes:
+% \begin{macrocode}
+\newtoks\emp@TeX
+\ifcase\@ptsize
+ \emp@TeX={\documentclass[10pt]{article}}
+\or
+ \emp@TeX={\documentclass[11pt]{article}}
+\or
+ \emp@TeX={\documentclass[12pt]{article}}
+\else
+ \emp@TeX={\documentclass{article}}
+\fi
+\newtoks\emp@prelude
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empTeX}
+% \begin{macro}{\empaddtoTeX}
+% \begin{macro}{\empprelude}
+% \begin{macro}{\empaddtoprelude}
+% \begin{macrocode}
+\def\empTeX#1{\emp@TeX={#1}}
+\def\empaddtoTeX#1{\emp@TeX=\expandafter{\the\emp@TeX^^J#1}}
+\def\empprelude#1{\emp@prelude={#1}}
+\def\empaddtoprelude#1{\emp@prelude=\expandafter{\the\emp@prelude^^J#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endempfile}
+% And here is how we close the |empfile| environment:
+% \begin{macrocode}
+\def\endempfile{%
+ \expandafter\ifx\expandafter*\the\emp@TeX*\else
+ \empwrite{verbatimtex^^J\string\end{document}^^Jetex;}%
+ \fi
+ \empwrite{\p@rcent\p@rcent\p@rcent\space the end.^^J%
+ end.^^J%
+ endinput;}%
+ \let\theempfile\relax
+ \if@empio
+ \immediate\closeout\@outemp
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp}
+% \begin{macrocode}
+\newcommand{\emp}[1][*]{%
+ \def\emp@@name{#1}%
+ \emp@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@}
+% \begin{macrocode}
+\def\emp@(#1,#2){%
+ \emp@start{#1}{#2}%
+ \emp@includegraphics{\theempfile}{\theempfig}%
+ \empcmds}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@start}
+% \begin{macrocode}
+\def\emp@start#1#2{%
+ \emp@checkfile
+% \end{macrocode}
+% We can't use |\stepcounter| because of the |amstext| option of
+% AMS-\LaTeX{} disables it sometimes.
+% \begin{macrocode}
+ \global\expandafter\advance\csname c@empfig\endcsname \@ne
+ \emp@@def{\emp@@name}%
+% \end{macrocode}
+% Start the \MP{} figure:
+% \begin{macrocode}
+ \empwrite{beginfig(\theempfig);^^J%
+ LaTeX_unitlength := \the\unitlength;^^J%
+ w := #1*LaTeX_unitlength;^^J%
+ h := #2*LaTeX_unitlength;}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@checkfile}
+% Make sure that a \MP{} file is open, otherwise \emph{really}
+% obscure error messages are possible:
+% \begin{macrocode}
+\def\emp@checkfile{%
+ \ifx\theempfile\relax
+ \errhelp={Outside a empfile environment, I have no clue as to where^^J%
+ the MetaPost commands should go. I will use empdefault.mp^^J%
+ for this graph, but you'd better fix your code!}%
+ \errmessage{I detected a emp environment outside of empfile}%
+ \empfile[empdefault]
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@includegraphics}
+% \begin{macrocode}
+\def\emp@includegraphics#1#2{%
+ \leavevmode
+ \IfFileExists{#1.#2}%
+ {\includegraphics{#1.#2}}%
+ {\typeout{%
+ emp: File #1.#2\space not found:^^J%
+ emp: Process #1.mp with MetaPost and then %
+ reprocess this file.}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empcmds}
+% Write to the file:
+% \begin{macrocode}
+\def\empcmds{%
+ \begingroup
+ \@bsphack
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active
+ \def\verbatim@processline{\empwrite{\the\verbatim@line}}%
+ \verbatim@start}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endempcmds}
+% \begin{macrocode}
+\def\endempcmds{%
+ \@esphack
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endemp}
+% \begin{macrocode}
+\def\endemp{%
+ \endempcmds
+ \empwrite{endfig;}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empdef}
+% \begin{macrocode}
+\newcommand{\empdef}[1][\relax]{%
+ \def\emp@@name{#1}%
+ \emp@def}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@def}
+% \begin{macrocode}
+\def\emp@def(#1,#2){%
+ \emp@start{#1}{#2}%
+ \empcmds}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endempdef}
+% \begin{macrocode}
+\def\endempdef{\endemp}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@@def}
+% \begin{macrocode}
+\def\emp@@def#1{%
+ \global\e@namedef{emp@k:f:#1}{\theempfile}%
+ \global\e@namedef{emp@k:c:#1}{\theempfig}}
+\def\e@namedef#1{\expandafter\edef\csname #1\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empgraph}
+% \begin{macrocode}
+\newcommand{\empgraph}[1][*]{%
+ \def\emp@@name{#1}%
+ \emp@graph}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emp@graph}
+% \begin{macrocode}
+\def\emp@graph(#1,#2){%
+ \emp@start{#1}{#2}%
+ \empwrite{draw begingraph (w, h);}%
+ \emp@includegraphics{\theempfile}{\theempfig}%
+ \empcmds}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endempgraph}
+% \begin{macrocode}
+\def\endempgraph{%
+ \endempcmds
+ \empwrite{endgraph;^^Jendfig;}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empuse}
+% \begin{macrocode}
+\def\empuse#1{%
+ \@ifundefined{emp@k:f:#1}%
+ {\typeout{emp: \string\empuse: `#1' undefined!}}%
+ {\emp@includegraphics{\@nameuse{emp@k:f:#1}}{\@nameuse{emp@k:c:#1}}}}
+%</style>
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \appendix
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Driver File}
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass[a4paper]{article}
+\usepackage{doc}
+\usepackage{amsmath}
+% \end{macrocode}
+% The \MF{} and \MP{} logos come out much nicer if you have |mflogo|
+% installed:
+% \begin{macrocode}
+\IfFileExists{mflogo.sty}%
+ {\usepackage{mflogo}%
+ \def\FMF{\texttt{feyn}\textlogo{MF}}%
+ \def\EMP{\textlogo{EMP}}}%
+ {\def\MF{\textsf{META}\-\textsf{FONT}}%
+ \def\MP{\textsf{META}\-\textsf{POST}}%
+ \def\FMF{\texttt{feyn}\textsf{MF}}%
+ \def\EMP{\textsf{EMF}}}
+% \end{macrocode}
+% Protect against certain obsolete versions of the |graphics| package:
+% \begin{macrocode}
+\usepackage{graphics}[1994/12/15]
+\usepackage{emp}
+% \end{macrocode}
+% \begin{macrocode}
+\setlength{\parindent}{0pt}
+\def\manindex#1{\SortIndex{#1}{#1}}
+%<manual>\OnlyDescription
+\EnableCrossrefs
+\RecordChanges
+\CodelineIndex
+\DoNotIndex{\def,\gdef,\long,\let,\begin,\end,\if,\ifx,\else,\fi}
+\DoNotIndex{\immediate,\write,\newwrite,\openout,\closeout,\typeout}
+\DoNotIndex{\font,\jobname,\documentclass,\char,\catcode,\ }
+\DoNotIndex{\CodelineIndex,\DocInput,\DoNotIndex,\EnableCrossrefs}
+\DoNotIndex{\filedate,\filename,\fileversion,\logo,\manfnt}
+\DoNotIndex{\NeedsTeXFormat,\ProvidesPackage,\RecordChanges,\space}
+\DoNotIndex{\begingroup,\csname,\edef,\endcsname,\expandafter}
+\DoNotIndex{\usepackage,\@ifundefined,\ignorespaces,\item,\leavevmode}
+\DoNotIndex{\newcounter,\newif,\par,\parindent}
+\DoNotIndex{\relax,\setcounter,\stepcounter,\the,\advance}
+\DoNotIndex{\CurrentOption,\DeclareOption,\documentstyle}
+\DoNotIndex{\endgroup,\global,\hfuzz,\LaTeX,\LaTeXe}
+\DoNotIndex{\macrocode,\OnlyDescription,\PassOptionsToPackage}
+\DoNotIndex{\ProcessOptions,\RequirePackage,\string,\textsf,\unitlength}
+\DoNotIndex{\@bsphack,\@esphack,\@nameuse,\@ne,\active,\do,\dospecials}
+\DoNotIndex{\errhelp,\errmessage,\ifcase,\IfFileExists,\includegraphics}
+\DoNotIndex{\manindex,\SortIndex,\newcommand,\newtoks,\or,\origmacrocode}
+\DoNotIndex{\alpha,\displaystyle,\frac,\sin,\texttt}
+% \end{macrocode}
+% Cut the line breaking some slack for macro code which might contain
+% long lines (it doesn't really hurt if they stick out a bit).
+% \begin{macrocode}
+\let\origmacrocode\macrocode
+\def\macrocode{\hfuzz 5em\origmacrocode}
+\begin{document}
+ \DocInput{emp.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+Local Variables:
+mode:LaTeX
+fill-prefix:"% "
+indent-tabs-mode:nil
+change-log-default-name:"TODO"
+page-delimiter:"^% %%%%%%%%%*\n"
+End: