summaryrefslogtreecommitdiff
path: root/graphics/mfpic/doc/mfpguide.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/mfpic/doc/mfpguide.tex
Initial commit
Diffstat (limited to 'graphics/mfpic/doc/mfpguide.tex')
-rw-r--r--graphics/mfpic/doc/mfpguide.tex1640
1 files changed, 1640 insertions, 0 deletions
diff --git a/graphics/mfpic/doc/mfpguide.tex b/graphics/mfpic/doc/mfpguide.tex
new file mode 100644
index 0000000000..01cba68471
--- /dev/null
+++ b/graphics/mfpic/doc/mfpguide.tex
@@ -0,0 +1,1640 @@
+% File: mfpguide.tex
+% A part of mfpic 1.10 2012/12/03
+%
+% Tutorial on mfpic
+\documentclass[letterpaper]{article}
+
+\usepackage[chapters]{mfpdoc}
+
+\renewcommand{\thefigure}{\thesection.\arabic{figure}}
+
+\newenvironment{mfpfig}[1]
+{\figure[htb] \centering \refstepcounter{figure} \label{#1}}
+{\par\medskip Figure \thefigure. \endfigure}
+
+\ifpdf
+ \usepackage[pdftex,final]{graphics}
+\else
+ \usepackage[dvips,final]{graphics}
+\fi
+
+\usepackage[metapost]{mfpic}
+\opengraphsfile{guide}
+
+\dotsize1pt
+
+\ifpdf
+\expandafter\usepackage\expandafter
+ [\mfpHyOpts,plainpages=false,naturalnames=true]{hyperref}
+\expandafter\pdfstringdefDisableCommands\expandafter
+ {\mfpHyDisable}
+
+\fi
+
+\def\theHfigure{\thefigure}
+
+\begin{document}
+
+\title{\Mfp: A Short Introduction}
+\author{Daniel H. Luecking\thanks{luecking at uark dot edu}}
+\date{\mfpfiledate}
+
+\maketitle
+\tableofcontents
+
+\chapter{Introduction}\label{sec:intro}
+
+As this document aims only to instruct the reader in the building of
+figures with \mfp{}, we will not be too concerned with the intricacies
+of running programs in various operating systems and \TeX{}
+distributions. What will be described here is the simplest case: a
+command-line system in which commands are typed at a keyboard. To
+simplify things further, we will assume that \mfp{} is used with the
+\opt{metapost} option, in a \LaTeX{} document, with \pdfLaTeX{} as the
+compiler. An appendix will discuss some of the differences when these
+assumptions are not satisfied.
+
+We will start right out with the ``Hello, world'' of \mfp{}. Construct a
+\LaTeX{} document by typing the following in a text editor and saving it
+as \file{first.tex}.
+\begin{verbatim}
+% first.tex
+\documentclass{article}
+ \usepackage[metapost]{mfpic}
+ \opengraphsfile{myfigs}
+\begin{document}
+ My first figure:
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \end{mfpic}
+ \closegraphsfile
+\end{document}
+\end{verbatim}
+Run the command
+\begin{ex}
+ \texttt{pdflatex first}
+\end{ex}
+which should create several files, the two most important being
+\file{first.pdf} and \file{myfigs.mp}. You can go ahead and open
+\file{first.pdf}. You should see a 2 inch by 2 inch square with
+something similar to `\texttt{\#1}' in the lower left corner. This shows
+where the picture will be when it has been created.
+
+Now run the command
+\begin{ex}
+ \texttt{mpost myfigs}
+\end{ex}
+which should create the file \file{myfigs.1}. This is an EPS file
+(Encapsulated PostScript) and can be opened in GhostScript or GSview or
+similar Postscript viewing program to see an ellipse.
+
+If you are viewing \file{first.pdf} in Acrobat Reader or Adobe Reader,
+you will need to close it. Now repeat the \pdfLaTeX{} step:
+\begin{ex}
+ \texttt{pdflatex first}
+\end{ex}
+and then view the file \file{first.pdf}. You should see something very
+close to figure~\ref{fig1}.
+\begin{mfpfig}{fig1}
+ My first figure:
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \end{mfpic}
+\end{mfpfig}
+
+What can go wrong? According to Murphy's Law: anything. If \mfp{} is not
+properly installed, one could obtain messages of files not found. If
+that happens, determine (from your \TeX{} system's documentation) where
+\TeX{} input files should go and make sure that \file{mfpic.sty},
+\file{mfpic.tex} and \file{mfpicdef.tex} reside there. Similarly, find
+out where \MP{} inputs should go and make sure that \file{grafbase.mp}
+and \file{dvipsnam.mp} reside there. Then run whatever command your
+\TeX{} system might require to ``update the filename database''. You may
+safely ignore the message from \mfp{} itself that \file{myfigs.1} is not
+found (on the first run of \pdfLaTeX). This file should be created only
+after running \texttt{mpost}.
+
+If you get an error message from \LaTeX{}, carefully check your typing.
+Also check whether an older version of \mfp{} might have been used
+instead of the current version. If you get an error message from \MP{}
+do the same, especially checking the typing within the \env{mfpic}
+environment. If you get a message from \MP{} that ``Grafbase'' believes
+your \mfp{} installation may be broken, check the log files
+(\file{first.log} and \file{myfigs.log}) to find out the locations of
+these input files:
+\begin{ex}
+ \file{mfpic.tex} and \file{grafbase.mp}
+\end{ex}
+and make sure that both these files are from the most recently installed
+\mfp{} package. If you are only evaluating \mfp{} without committing to
+installing it, just make sure all the files mentioned in the previous
+paragraphs are in the current directory.
+
+If \pdfLaTeX{} complains it can't write on the file \file{first.pdf},
+unload \file{first.pdf} from your pdf viewer and try again.
+
+If the figures look a little choppy in Acrobat Reader, turn on ``smooth
+line art'' in the edit preferences dialogue.
+
+I will assume that eventually all went well and you are now able to
+obtain the ellipse of figure~\ref{fig1}. Each time you change an
+\env{mfpic} environment or the options to the package, you potentially
+change the file \file{myfigs.mp} produced and you should repeat the
+sequence:
+\begin{verbatim}
+pdflatex first
+mpost myfigs
+pdflatex first
+\end{verbatim}
+to be sure of seeing the changes.
+
+One thing you might notice about figure~\ref{fig1} is that the ellipse
+is positioned quite a bit above the base line of the text. This is
+because \mfp{} reserves the amount of space specified in the arguments
+of the \env{mfpic} environment. These arguments were
+\verb$[72]{-1}{1}{-1}{1}$, which means that each unit in the picture is
+72 times the value of \cs{mfpicunit}, that is, about one inch. The first
+pair of mandatory arguments, \verb${-1}{1}$, indicate the
+$x$-coordinates run from $-1$ to $1$. Since these differ by 2, they
+indicate a width of two inches. The second pair similarly represents a
+height of two inches. But the ellipse is centered at $(0,0)$, which is
+one inch above the bottom (bottom is at $y = -1$), and its vertical
+radius is .5. So the lowest point on the ellipse should be 0.5 inches
+above the bottom of the space reserved. \Mfp{} provides a way to fit the
+space reserved to the actual extent of `ink' in the picture. That is by
+the option \opt{truebbox}:
+\begin{verbatim}
+\usepackage[metapost,truebbox]{mfpic}
+\end{verbatim}
+This would then produce something like figure~\ref{fig2}.
+From now on, this option will be in effect in our examples.
+\usetruebbox
+\begin{mfpfig}{fig2}
+ My first figure:
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \end{mfpic}
+\end{mfpfig}
+
+Even though the arguments to the \env{mfpic} environment are ignored in
+determining the size of the figure (under \opt{truebbox}), they are
+still needed in order to establish the coordinate system that the
+ordered pairs refer to (for example \texttt{(0,0)} in the \cs{ellipse}
+arguments).
+
+\chapter{Positioning text}\label{sec:text}
+
+By now you are probably thinking: ``This so-called `Hello, world'
+of \mfp{} doesn't say `Hello, world' anywhere!'' We correct that
+with the following example:
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \tlabel[cc](0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+This should give you figure~\ref{fig3}.
+\begin{mfpfig}{fig3}
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \tlabel[cc](0,0){Hello, world.}
+ \end{mfpic}
+\end{mfpfig}
+
+The \cs{tlabel} command places the given text at the given position
+($(0,0)$) adjusted according to the optional argument \texttt{[cc]},
+which says to center the text (both vertically and horizontally) at that
+location. The \texttt{[cc]} is optional. Without it, the text would have
+the leftmost point of its baseline (the imaginary line that most letters
+sit on) placed at $(0,0)$.
+
+You are no doubt thinking: ``The ellipse doesn't really match the
+text. What you need is some macro that measures the text and produces an
+oval with similar dimensions.'' For that we have the \cs{tlabeloval}
+command. The \cs{tlabeljustify} command in the example below is to
+communicate to both the text placement and the curve generation
+procedures that they are to be centered at the point $(0,0)$. (We'll see
+an easier way to do this later.)
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlabeljustify{cc}
+ \tlabeloval(0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+This produces figure~\ref{fig4}.
+\begin{mfpfig}{fig4}
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlabeljustify{cc}
+ \tlabeloval(0,0){Hello, world.}
+ \end{mfpic}
+\end{mfpfig}
+
+This would be better still if a little space is left around the text so
+the ellipse doesn't touch it. The \cs{tlpathsep} command can do that:
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlabeljustify{cc}
+ \tlpathsep{3pt}
+ \tlabeloval(0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+producing figure~\ref{fig5}.
+\begin{mfpfig}{fig5}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlabeljustify{cc}
+ \tlpathsep{3pt}
+ \tlabeloval(0,0){Hello, world.}
+\end{mfpic}
+\end{mfpfig}
+
+It would be nice to make the text pop out a bit with some color%
+ \footnote{Colors are included in this document only to give
+ examples of their use in \prog{mfpic}. I do not necessarily
+ recommend any of them.}%
+. You can do that by adding \verb$\gfill[yellow]$ in front of either
+\verb$\ellipse$ or \verb$\tlabeloval$:
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlpathsep{3pt}
+ \tlabeljustify{cc}
+ \gfill[yellow]\tlabeloval(0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+This will produce figure~\ref{fig6}.
+\begin{mfpfig}{fig6}
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \tlpathsep{3pt}
+ \tlabeljustify{cc}
+ \gfill[yellow]\tlabeloval(0,0){Hello, world.}
+ \end{mfpic}
+\end{mfpfig}
+
+Notice that now the boundary of the oval has not been drawn. This is the
+standard behavior of \mfp{}. A figure command alone will draw the
+figure. If you want some other rendering than that, you must explicitly
+provide all of it. To get the boundary back, simply add \verb$\draw$
+before the \verb$\gfill$. You can draw the curve in a color other than
+black with an optional argument. We can also make the line thicker with
+the command \verb$\penwd$:
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \penwd{1.5pt}
+ \tlpathsep{3pt}
+ \tlabeljustify{cc}
+ \draw[blue]\gfill[yellow]\tlabeloval(0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+This will produce figure~\ref{fig7}.
+\begin{mfpfig}{fig7}
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \penwd{1.5pt}
+ \tlpathsep{3pt}
+ \tlabeljustify{cc}
+ \draw[blue]\gfill[yellow]\tlabeloval(0,0){Hello, world.}
+ \end{mfpic}
+\end{mfpfig}
+
+This last version doesn't look too bad, but it seems that the oval ought
+to be a little fatter (slightly higher than it is now). By default,
+\verb$\tlabeloval$ will make the ratio of width to height the same as
+that of the text, or rather of the text plus the additional space
+specified by \verb$\tlpathsep$. This can be changed with an optional
+argument, a number that multiplies the width-to-height ratio. Decreasing
+this ratio will decrease the width (slightly) and increase the height.
+Here we have also omitted the \cs{tlabeljustify} command and shown that
+\cs{tlabeloval} takes a second optional argument that can be used to
+`justify' both the curve and the text. To use this, one must explicitly
+include the first optional argument; if the default is intended, an
+empty pair of brackets may be used.
+\begin{verbatim}
+\begin{mfpic}[72]{-1}{1}{-1}{1}
+ \penwd{1.5pt}
+ \tlpathsep{3pt}
+ \draw[blue]\gfill[yellow]\tlabeloval[.8][cc](0,0){Hello, world.}
+\end{mfpic}
+\end{verbatim}
+This will produce figure~\ref{fig8}.
+\begin{mfpfig}{fig8}
+ \begin{mfpic}[72]{-1}{1}{-1}{1}
+ \penwd{1.5pt}
+ \tlpathsep{3pt}
+ \draw[blue]\gfill[yellow]\tlabeloval[.8][cc](0,0){Hello, world.}
+ \end{mfpic}
+\end{mfpfig}
+
+The \cs{tlabeloval} command places the label last, after the action of
+all the preceding macros; therefore the text ends up on top of
+everything else. The \cs{tlabeloval} command also has a \mbox{`*-form'} that
+does everything \emph{except} place the text. Finally, ovals are not the
+only thing that can be used to surround text. See the manual
+(\file{mfpic-doc.pdf}) and below for others.
+
+Here is a more common use of \verb$tlabel$ commands: labeling a graph
+and axes. In the following example we have given \cs{tlabel} the option
+\texttt{[bl]} to place the bottom left corner of the text at the given
+coordinates. However, we have used \verb$\tlpointsep{3pt}$, which has
+the effect of shifting text away from its nominal location, to prevent the
+text from colliding with the curve.%
+ \footnote{One can also use \cs{tlabelsep}, which is equivalent to
+ \cs{tlpathsep} plus \cs{tlpointsep}.}
+The value set by \cs{tlpointsep} has an effect only if the point is on
+the edge of the text, so there would be no shifting with the
+\texttt{[cc]} placement used earlier.
+\begin{verbatim}
+\begin{mfpic}[72]{0}{2.5}{0}{1}
+ \tlpointsep{3pt}
+ \polyline{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \tlabel[bl](.5,1){Max output}
+ \dashed\polyline{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \tlabel[bl](1.5,.7){Max input}
+\end{mfpic}
+\end{verbatim}
+This will produce figure~\ref{fig9}.
+\begin{mfpfig}{fig9}
+ \begin{mfpic}[72]{0}{2.5}{0}{1}
+ \tlpointsep{3pt}
+ \polyline{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \tlabel[bl](.5,1){Max output}
+ \dashed\polyline{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \tlabel[bl](1.5,.7){Max input}
+ \end{mfpic}
+\end{mfpfig}
+
+Notice that \verb$\polyline$ alone produces a solid line while
+\verb$\dashed\polyline$ makes a dashed line. Let us close this section
+by dressing up this figure with axes, some fat dots marking the
+keypoints, and hash marks on the axes:
+\begin{verbatim}
+\begin{mfpic}[72]{0}{2.5}{0}{1}
+ \tlpointsep{3pt}
+ \polyline{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \tlabel[bl](.5,1){Max output}
+ \dashed\polyline{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \tlabel[bl](1.5,.7){Max input}
+ \axes
+ \xmarks{0,0.5,1,1.5,2}
+ \axislabels x{{$50$} .5, {$100$} 1, {$150$} 1.5, {$200$} 2}
+\end{mfpic}
+\end{verbatim}
+This will produce figure~\ref{fig10}.
+\begin{mfpfig}{fig10}
+ \begin{mfpic}[72]{0}{2.5}{0}{1}
+ \tlpointsep{3pt}
+ \polyline{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \tlabel[bl](.5,1){Max output}
+ \dashed\polyline{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \tlabel[bl](1.5,.7){Max input}
+ \axes
+ \xmarks{0,0.5,1,1.5,2}
+ \axislabels x{{$50$} .5, {$100$} 1, {$150$} 1.5, {$200$} 2}
+ \end{mfpic}
+\end{mfpfig}
+
+The optional argument of \verb$\point$ specifies the diameter of the
+points to draw. The command \verb$\pointfillfalse$ forces the points to
+be drawn as open circles. The axes configure themselves to the size
+specified in the argument of the \env{mfpic} environment. The
+\verb$axislabels$ command takes as arguments a letter, to specify the
+axis, and a comma separated list of labels, each of which is specified
+by some text to place (in braces) and the x-coordinate to place it at.
+
+\chapter{Drawing figures}
+
+\Mfp{} has several predefined figures and commands to obtain essentially
+any curve (provided one can obtain enough points on it with sufficient
+precision). We've already seen \verb$\polyline$ and \verb$\ellipse$. The
+former needs a list of points to connect with line segments and the
+latter needs the center and radii of the ellipse. The \verb$\ellipse$
+also takes an optional argument: the number of degrees to rotate the
+ellipse. Here we list some of the more common such figures. Remember
+that all of them will produce some sort of line drawing if used alone.
+They can be preceded by \verb$\dashed$ to make the lines dashed or
+\verb$\dotted$ to make them dotted. If the figure is a closed curve,
+\verb$\gfill$ will fill it in.
+\begin{verbatim}
+\begin{mfpic}[72]{0}{4}{0}{1}
+ \rect{(0,0),(1,.75)}
+ \circle{(1.5,.5),.45}
+ \arc[s]{(3,0),(2,1),45}
+ \ellipse[20]{(3.5, 0.5), 0.6, 0.4}
+\end{mfpic}
+\end{verbatim}
+This produces figure~\ref{fig11}. The \verb$\arc$ command has several
+forms. The optional argument picks the form to use. This one specifies
+the endpoints of the circular arc and the angle of the arc (the angle
+between the radii from the center of the circle to those two points).
+Other possibilities are a three-point form (option \texttt{[t]}), a
+polar form (option \texttt{[p]}), and a center-point-sweep form (option
+\texttt{[c]}, specify a center, starting point, and angle). See the
+manual for details. The default (what would be assumed if no optional
+argument is given) is \oarg{s} and is called the ``point-sweep'' form.
+\begin{mfpfig}{fig11}
+ \begin{mfpic}[72]{0}{4}{0}{1}
+ \rect{(0,0),(1,.75)}
+ \circle{(1.5,.5),.45}
+ \arc[s]{(3,0),(2,1),45}
+ \ellipse[20]{(3.5, 0.5), 0.6, 0.4}
+ \end{mfpic}
+\end{mfpfig}
+
+The \cs{polyline} command draws straight lines connecting points. We can
+also draw smooth curves. Lets take the same points from our
+\cs{polyline} example (figure~\ref{fig9}), but change \cs{polyline} to
+\cs{curve}, omit the text, and add the points from figure~\ref{fig10}:
+\begin{verbatim}
+\begin{mfpic}[72]{0}{2.5}{0}{1}
+ \curve{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \dashed\curve{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+\end{mfpic}
+\end{verbatim}
+This should produce figure~\ref{fig12}.
+\begin{mfpfig}{fig12}
+ \begin{mfpic}[72]{0}{2.5}{0}{1}
+ \curve{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \dashed\curve{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \end{mfpic}
+\end{mfpfig}
+
+This is somewhat unsatisfying. One could improve the result by selecting
+more points, or by increasing the `tension' in the curve.
+
+Roughly speaking, tension determines how straight the segments between
+the points are, and how sharp the turns at each point. High tension
+makes the curve look a little more like a polyline. The default tension
+is 1, a tension of about 5 makes the result look somewhat like a
+polyline with very slightly rounded corners, very high tensions make the
+curve indistinguishable from a polyline. Tension must (almost) always be
+greater than $0.75$.
+
+Another effect of increased tension is to reduce the little wobbles we
+can see in the first curve. Let's try a tension of 1.5, which can be
+specified as an optional argument to \cs{curve}:
+\begin{verbatim}
+\begin{mfpic}[72]{0}{2.5}{0}{1}
+ \curve[1.5]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \dashed\curve[1.5]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+\end{mfpic}
+\end{verbatim}
+This give figure~\ref{fig13}.
+\begin{mfpfig}{fig13}
+ \begin{mfpic}[72]{0}{2.5}{0}{1}
+ \curve[1.5]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \point[3pt]{(0,.2),(.5,1),(1,.7),(1.5,0),(2,.3)}
+ \dashed\curve[1.5]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,.6),(1,.3),(1.5,.7),(2,.1)}
+ \end{mfpic}
+\end{mfpfig}
+
+When we use \cs{curve}, there is no way \MP{} can tell if we are just
+connecting points or if we are trying to graph a function.
+It \emph{cannot} enforce the requirement, which every function must
+satisfy, that the curve should travel left-to-right. The command
+\cs{fcncurve} does enforce this (assuming the points to be connected are
+listed in left-to-right order). This command also permits an optional
+tension argument. The dotted line in figure~\ref{fig14} is produced with
+\cs{curve}, the solid one with \cs{fcncurve}. One might conceivably want
+to decrease the tension a bit here.
+\begin{verbatim}
+\begin{mfpic}[72]{0}{2.5}{0}{1}
+ \dotted\curve{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+ \fcncurve{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig14}
+ \begin{mfpic}[72]{0}{2.5}{0}{1}
+ \dotted\curve{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+ \fcncurve{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+ \pointfillfalse
+ \point[3pt]{(0,.2),(.5,0),(.85,.5),(1,1),(1.5,0),(2,.3)}
+ \end{mfpic}
+\end{mfpfig}
+
+Other figures available include\leftmargini=2\leftmargini
+\begin{description}
+\item[\cs{cyclic}] Used just like \cs{curve} but closes the path
+ (connects the last point smoothly to the starting point).
+\item[\cs{polygon}] Used just like \cs{polyline} except it connects the
+ last point to the first with a straight line.
+\item[\cs{sector}] Makes a wedge with two straight lines and an arc. The
+ arguments are almost the same as \cs{arc}\oarg{p}, but the order is
+ different: center, radius and two angles.
+\end{description}
+
+Here are some other curves that, like \cs{tlabeloval}, are proportioned
+to fit given text. All have a \texttt{*}-form that draws the path
+without placing the text.
+\begin{description}
+\item[\cs{tlabelrect}] This produces a rectangle. It has the same usage
+ as \cs{tlabeloval}, except the first optional argument specifies
+ the radius of quarter-circles used to make rounded corners.
+\item[\cs{tlabelellipse}] This is similar to \cs{tlabeloval}
+ except that instead of modifying the width-to-height ratio, the
+ first optional argument \emph{is} the width-to-height ratio. If that
+ argument is 1 (the default) you get a circle.
+\item[\cs{tlabelcircle}] This produces a circle, of course.
+\end{description}
+
+
+\chapter{Functions}
+
+\CMP{} is able to calculate a number of functions natively, and still
+more have been defined in \mfp{}. Also available are the usual
+arithmetic operations. Any valid \MP{} expression, containing
+one unknown \gbc{x} and producing a numerical result can be graphed.
+
+Here is an example of the graphs of $y = x^2$ and $y = \pm\sqrt{x}$.
+Note that exponentials are denoted by \texttt{**} and it is important to
+note that it has the same precedence as multiplication (denoted by a
+single \texttt{*}). That is, in a formula like \mfc{3*3**2}, the
+operations are performed in order, left to right, producing $(3\cdot
+3)^2 = 81$ and not $3\cdot 3^2 = 27$. Parentheses are needed if the
+latter is intended: \mfc{3*(3**2)}.
+\begin{verbatim}
+\setlength{\mfpicunit}{1cm}
+\begin{mfpic}{-2.5}{2.5}{-1.5}{4}
+ \function{-2,2,.1}{x**2}
+ \function{0,2,.1}{sqrt x}
+ \function{0,2,.1}{-sqrt x}
+ \axes
+ \xmarks{-2,-1,1,2}
+ \ymarks{-1,1,2,3}
+ \tlpointsep{3pt}
+ \axislabels x{{$-2$}-2,{$-1$}-1,{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1,{$2$}2,{$3$}3}
+\end{mfpic}
+\end{verbatim}
+This produces figure~\ref{fig15}.
+\begin{mfpfig}{fig15}
+ \setlength{\mfpicunit}{1cm}
+ \begin{mfpic}{-2.5}{2.5}{-1.5}{4}
+ \function{-2,2,.1}{x**2}
+ \function{0,2,.1}{sqrt x}
+ \function{0,2,.1}{-sqrt x}
+ \axes
+ \xmarks{-2,-1,1,2}
+ \ymarks{-1,1,2,3}
+ \tlpointsep{3pt}
+ \axislabels x{{$-2$}-2,{$-1$}-1,{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1,{$2$}2,{$3$}3}
+ \end{mfpic}
+\end{mfpfig}
+
+The command \cs{function} has two arguments. The first contains the
+starting and ending x-values of the desired graph, followed by a
+\emph{step size}. Generally the smaller the steps the better the
+accuracy, but \MP{} has a limit on the number of steps (usually about
+2000). There is also an optional argument which can be \oarg{s}, the
+default, which means the graph is to be smooth, or \oarg{p}, which means
+the graph is constructed by connecting the calculated points with
+straight lines. Here is the same example with larger step size to
+emphasize the difference (see figure~\ref{fig16})
+\begin{verbatim}
+\setlength{\mfpicunit}{1cm}
+\begin{mfpic}{-2.5}{2.5}{-1.5}{4}
+ \function[p]{-2,2,.5}{x**2}
+ \function[p]{0,2,.5}{sqrt x}
+ \function[p]{0,2,.5}{-sqrt x}
+ \axes
+ \xmarks{-2,-1,1,2}
+ \ymarks{-1,1,2,3}
+ \tlpointsep{3pt}
+ \axislabels x{{$-2$}-2,{$-1$}-1,{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1,{$2$}2,{$3$}3}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig16}
+ \setlength{\mfpicunit}{1cm}
+ \begin{mfpic}{-2.5}{2.5}{-1.5}{4}
+ \function[p]{-2,2,.5}{x**2}
+ \function[p]{0,2,.5}{sqrt x}
+ \function[p]{0,2,.5}{-sqrt x}
+ \axes
+ \xmarks{-2,-1,1,2}
+ \ymarks{-1,1,2,3}
+ \tlpointsep{3pt}
+ \axislabels x{{$-2$}-2,{$-1$}-1,{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1,{$2$}2,{$3$}3}
+ \end{mfpic}
+\end{mfpfig}
+
+In addition, one can increase the tension in the curve drawn by putting
+a tension value after the \gbc{s} in \oarg{s}. For a tension of 2.4:
+\cs{function}\oarg{s2.4}\marg{\dots}.
+
+The functions available include \gbc{sqrt} and all the trig functions:
+\gbc{sin x} assumes \gbc{x} is an angle in radians, \mfc{sind x} assumes
+it is in degrees, with a similar naming convention for the remaining
+trig functions. The inverses are \gbc{asin x}, \gbc{acos x}, and
+\gbc{atan x}, which produce angles in degrees, and \gbc{invsin x}, etc.,
+which produce angles in radians. There is also \gbc{ln~x} or \gbc{log~x}
+for the natural logarithm, \gbc{exp~x} for $e^x$, \gbc{logten}~\gbc{x}
+for the base 10 logarithm, \gbc{logtwo}~\gbc{x} for base 2, and
+\gbc{logbase} for other bases:
+\gbc{logbase(16)}~\gbc{x} (for example) for base 16. The general syntax of
+these functions is the following: if the argument is \gbc{x} alone or a
+pure number alone or the particular case of a number followed by \gbc{x}
+(no \gbc{*} in between!) then parentheses are not needed. Example:
+\gbc{sin~2x}. For almost anything else, parentheses are required:
+\gbc{sin(3*x)} or \gbc{sin(x**2)}.
+
+Some other functions available are the hyperbolic functions, \gbc{sinh x},
+\gbc{cosh x}, etc. (all 6 of them), and the inverses of three of them:
+\gbc{asinh x}, \gbc{acosh x}, and \gbc{atanh x}.
+
+These functions (or any \MP{} numeric expression) can also be used in
+any of the coordinates of points in drawing commands like \cs{polyline}
+(but not usually in text placement commands like \cs{tlabeloval}). For
+example (from now on the value of \cs{mfpicunit} is set to
+\texttt{1cm}):\setlength{\mfpicunit}{1cm}
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-1.5}{1.5}
+ \polyline{(2,-sqrt 2),(1,-1),(.5,- sqrt .5),(0,0),
+ (.5,sqrt .5),(1,1),(2,sqrt 2)}
+ \axes
+ \xmarks{1,2}
+ \ymarks{-1,1}
+ \tlpointsep{3pt}
+ \axislabels x{{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig17}
+ \begin{mfpic}{-.5}{2.5}{-1.5}{1.5}
+ \polyline{(2,-sqrt 2),(1,-1),(.5,- sqrt .5),(0,0),
+ (.5,sqrt .5),(1,1),(2,sqrt 2)}
+ \axes
+ \xmarks{1,2}
+ \ymarks{-1,1}
+ \tlpointsep{3pt}
+ \axislabels x{{$1$}1,{$2$}2}
+ \axislabels y{{$-1$}-1,{$1$}1}
+ \end{mfpic}
+\end{mfpfig}
+
+There are other types of functions: parametric functions, and polar
+coordinate versions. \Mfp{} provides \cs{parafcn} and \cs{plrfcn} to
+graph these. The \cs{parafcn} requires a starting value, and ending
+value and a step size just as in \cs{function}, but in the second
+argument there must be either a pair of expressions in the variable
+\gbc{t}, separated by a comma and enclosed in parentheses, or a single
+\emph{pair-valued} expression. \CMP{} and \mfp{} provide only a few
+pair-valued functions; one is used below.
+
+The second argument of \cs{plrfcn} must contain a single numeric
+expression in the variable \gbc{t}, and indicates a function of $\theta$
+to be graphed in polar coordinates: $r = f(\theta)$. In the following
+example (figure~\ref{fig22}), we draw a portion of the graph of $x =
+y^2$ by representing it as the graph of the parametric equations $x =
+t^2$, $y = t$, and a portion of a circle of radius $1.5$ by representing
+it as the graph of the pair-valued function \mfc{dir(t)}. The expression
+\mfc{dir(t)} gives the point whose distance from $(0,0)$ is $1$ in the
+direction given by the angle \mfc{t}.
+\begin{verbatim}
+\begin{mfpic}{-2}{4}{-2}{2}
+ \parafcn{-2,2,.1}{(t**2,t)}
+ \dotted\parafcn{45,315,5}{1.5*dir(t)}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig22}
+ \begin{mfpic}{-2}{4}{-2}{2}
+ \parafcn{-2,2,.1}{(t**2,t)}
+ \dotted\parafcn{45,315,5}{1.5*dir(t)}
+ \end{mfpic}
+\end{mfpfig}
+
+
+Here is an example of a graph of the polar coordinate function
+$r=2\sin 3\theta$ (figure~\ref{fig23}). We use the degree version
+\mfc{sind} in order to work with integers.
+\begin{verbatim}
+\begin{mfpic}{-2}{2}{-2}{2}
+ \plrfcn{0,180,5}{2*sind 3t}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig23}
+ \begin{mfpic}{-2}{2}{-2}{2}
+ \plrfcn{0,180,5}{2*sind 3t}
+ \end{mfpic}
+\end{mfpfig}
+
+
+\chapter{Transforming figures}
+
+\CMP{} is capable of any affine transformation (things like shifting,
+rotating, scaling, reflecting and slanting) of any path. The figures
+we've been dealing with so far (\cs{ellipse}, \cs{curve}, \cs{function},
+etc.) all produce, in the \MP{} code, the definition of some path (as
+well as a drawing of that path). \Mfp{} provides for different methods
+of `drawing' the path with \emph{prefix macros}. We've seen \cs{dashed},
+\cs{dotted}, \cs{gfill} so far, in addition to the default \cs{draw}.
+\Mfp{} also provides for modifying the shape and position of the path
+with other prefixes. Here's a simple example.
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \rotatepath{(1,.5), 45}\rect{(0,0),(2,1)}
+ \point{(1,.5)}
+\end{mfpic}
+\end{verbatim}
+The command \cs{rotatepath} obviously rotates the path that follows, but
+it needs to know what the center of rotation will be, and how much to
+rotate. These are given in its mandatory argument, separated by a comma.
+The example above (pictured in figure~\ref{fig18}) rotates 45 degrees
+around the center of the rectangle.
+\begin{mfpfig}{fig18}
+ \begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \rotatepath{(1,.5), 45}\rect{(0,0),(2,1)}
+ \point{(1,.5)}
+ \end{mfpic}
+\end{mfpfig}
+
+Notice that we have no drawing prefix. A combination of
+transformation-plus-figure is treated as a figure in its own right and
+behaves the same. If we want the figure dashed, we could write
+\begin{verbatim}
+\dashed\rotatepath{(1,.5),45}\rect{(0,0),(2,1)}
+\end{verbatim}
+It may not be obvious, but we can also write a drawing macro between
+the rotation and the figure, producing figure~\ref{fig19}
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \rotatepath{(1,.5), 45}\draw\rect{(0,0),(2,1)}
+ \point{(1,.5)}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig19}
+ \begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \rotatepath{(1,.5), 45}\draw\rect{(0,0),(2,1)}
+ \point{(1,.5)}
+ \end{mfpic}
+\end{mfpfig}
+
+This illustrates another property of \mfp{} macros: the combination of a
+rendering prefix and a figure is also treated the same as a figure in
+its own right: the same figure as the one that follows. In fact, the
+only difference between \cs{rect} and \cs{draw}\cs{rect} in this
+example is that the second one has a minor(!) side effect: the
+rectangle is drawn.
+
+Finally, try to guess what happens if we add another prefix at the
+front:
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \dotted\rotatepath{(1,.5), 45}
+ \draw\rect{(0,0),(2,1)}
+\end{mfpic}
+\end{verbatim}
+and if we add another rotation in front of that.
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \rotatepath{(0,0),45}
+ \dotted\rotatepath{(1,.5), 45}
+ \draw\rect{(0,0),(2,1)}
+\end{mfpic}
+\end{verbatim}
+
+
+Available transformations include
+\begin{display}\raggedright
+ \cs{scalepath}, \cs{shiftpath}, \cs{xscalepath}, \cs{yscalepath},
+ \cs{slantpath}, and \cs{reflectpath}.
+\end{display}
+See the manual for a description of what arguments are required for
+each. Here's a final example, producing figure~\ref{fig20}
+\begin{verbatim}
+\begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \shiftpath{(-1,1)}\draw[red]\slantpath{.5,1}\dotted
+ \rotatepath{(0,0), 90}\dashed\rect{(0,0),(2,1)}
+ \point{(0,0),(2,1)}
+ \tlpointsep{2pt}
+ \tlabel[tr](0,0){$(0,0)$}
+ \tlabel[bl](2,1){$(2,1)$}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig20}
+ \begin{mfpic}{-.5}{2.5}{-.5}{2.5}
+ \shiftpath{(-1,1)}\draw[red]\slantpath{.5,1}\dotted
+ \rotatepath{(0,0), 90}\dashed\rect{(0,0),(2,1)}
+ \point{(0,0),(2,1)}
+ \tlpointsep{2pt}
+ \tlabel[tr](0,0){$(0,0)$}
+ \tlabel[bl](2,1){$(2,1)$}
+ \end{mfpic}
+\end{mfpfig}
+
+\chapter{Rendering figures}
+
+\emph{Rendering} is the act of making a description of a figure visible.
+Examples are: drawing a solid curve, drawing a dashed curve, or filling
+its interior, For \mfp{} figure macros the default, in the absence of
+explicit commands, is to use \cs{draw}. That is,
+\begin{verbatim}
+\rect{(0,0),(1,2)}
+\end{verbatim}
+has the same result as
+\begin{verbatim}
+\draw\rect{(0,0),(1,2)}
+\end{verbatim}
+The default rendering can be changed. Just say
+\cs{setrender}\marg{\cs{dashed}}, and all figures afterward will be dashed
+(see figure~\ref{fig21}).
+\begin{verbatim}
+\begin{mfpic}{0}{2}{0}{1}
+\setrender{\dashed}
+ \rect{(0,0),(1,1)}
+ \circle{(1.5,.5),.5}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig21}
+ \begin{mfpic}{0}{2}{0}{1}
+ \setrender{\dashed}
+ \rect{(0,0),(1,1)}
+ \circle{(1.5,.5),.5}
+ \end{mfpic}
+\end{mfpfig}
+The \cs{setrender} command can be inside an \env{mfpic} environment to
+affect only later commands in that figure, or outside to affect all
+later \mfp{} figures.
+
+We give a few examples now of the renderings possible. These divide
+more-or-less into those that trace a path and those that fill in a path.
+In order to fill in a path, it must be a closed path, of course, but
+\MP{} distinguishes between closed paths and those that merely happen to
+end where they began. There is a good reason for this: \MP{} cannot,
+without human aid, know if two points are the same, or merely
+accidentally so close that the accuracy of the program sees them as the
+same. It requires human aid in the form of an explicit request to
+create a closed path. Of the \mfp{} macros we've seen so far,
+\cs{ellipse}, \cs{circle}, \cs{rect}, \cs{polygon}, and \cs{cyclic}
+produce closed paths, but \cs{polyline}, \cs{curve}, \cs{function},
+\cs{parafcn}, and \cs{plrfcn} do not. Also producing closed paths are
+\cs{tlabeloval} and its relatives.
+
+The following example illustrates filling with a hatching pattern
+(parallel lines) and an \emph{unfilling}. Clearing the interior of a
+path may not seem like rendering, but it is treated in exactly the same way
+(think of it as a negative rendering). We first hatch a rectangle, then
+clear out a smaller rectangle with rounded corners to place our text
+inside. The results are in figure~\ref{fig24}.
+\begin{verbatim}
+\begin{mfpic}{0}{2}{0}{2}
+ \draw[red]\lhatch[2pt][blue]\rect{(0,0),(2,2)}
+ \gclear\tlabelrect[6pt][cc](1,1){Hatching!}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig24}
+ \begin{mfpic}{0}{2}{0}{2}
+ \draw[red]\lhatch[2pt][blue]\rect{(0,0),(2,2)}
+ \gclear\tlabelrect[6pt][cc](1,1){Hatching!}
+ \end{mfpic}
+\end{mfpfig}
+This example illustrates that \cs{lhatch} fills with left slanting
+lines. And that it takes two optional arguments. The first is the
+distance between lines, and the second is the color to make the lines.
+There are also \cs{rhatch} which slants the lines the other way,
+\cs{xhatch} which uses both slants, and \cs{thatch} which can draw
+the lines at any angle.
+
+Here is another example of rendering (figure~\ref{fig26}). The new
+macro is \cs{polkadot}. We've repeated this example twice to
+show the effect of changing the order of the prefixes. Each prefix
+applies its rendering to the result of everything to the right of it. In
+the second example the hatching goes over the dots (and a bit of the
+dashes as well). If the \cs{gfill} were first, it would cover almost
+everything else.
+\begin{verbatim}
+\begin{mfpic}{0}{6}{0}{2}
+ \penwd{2pt}
+ \hatchwd{2pt}
+ \drawcolor{blue}
+ \hatchcolor{red}
+ \fillcolor{green}
+ \dashed\polkadot\rhatch[5pt]\gfill[yellow]\rect{(0,0),(2.8,1.8)}
+ \rhatch[5pt]\dashed\polkadot\gfill[yellow]\rect{(3,0),(5.8,1.8)}
+\end{mfpic}
+\end{verbatim}
+We've added a couple of other new features to this example. To emphasize
+effects, we've increased the thickness of the drawing pen (\cs{penwd})
+and the hatch lines (\cs{hatchwd}). We've also used the \cs{drawcolor}
+macro and its relatives to set the colors to be used. The \cs{polkadot}
+macro uses the color set by \cs{fillcolor}; so does \cs{gfill} if no
+optional color is given.
+\begin{mfpfig}{fig26}
+ \begin{mfpic}{0}{6}{0}{2}
+ \penwd{2pt}
+ \hatchwd{2pt}
+ \drawcolor{blue}
+ \hatchcolor{red}
+ \fillcolor{green}
+ \dashed\polkadot\rhatch[5pt]\gfill[yellow]\rect{(0,0),(2.8,1.8)}
+ \rhatch[5pt]\dashed\polkadot\gfill[yellow]\rect{(3,0),(5.8,1.8)}
+ \end{mfpic}
+\end{mfpfig}
+
+If one wants to plot several curves in a single graph, they often need
+to be rendered differently. The three methods we've seen so far,
+\cs{draw}, \cs{dashed}, and \cs{dotted}, may not be enough. The
+\cs{dashed} and \cs{dotted} commands permit an optional argument to
+adjust the length of the dashes and spaces, and size of the dots. One
+can also change the curve thickness with \cs{penwd}. But
+that may not be `different' enough. \Mfp{} provides a few solutions.
+When color is available, they may be drawn in different colors. When
+not, there are two possibilities: \cs{gendashed} and \cs{plot}.
+
+The first, \cs{gendashed}, is a generalized dashing macro. It takes one
+mandatory argument, the name of a dashing pattern. Named dashing
+patterns may be created with the \cs{dashpattern} command, as shown by
+the following example (see figure~\ref{fig27}):
+\begin{verbatim}
+\begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \dashpattern{dotdash}{0pt,4pt,3pt,4pt}
+ \gendashed{dotdash}\function{-pi,pi,.2}{sin 2x}
+ \function{-pi,pi,.2}{cos 2x}
+ \axes
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig27}
+ \begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \dashpattern{dotdash}{0pt,4pt,3pt,4pt}
+ \gendashed{dotdash}\function{-pi,pi,.2}{sin 2x}
+ \function{-pi,pi,.2}{cos 2x}
+ \axes
+ \end{mfpic}
+\end{mfpfig}
+
+The \cs{dashpattern} command takes a name and an even number of lengths.
+The first, third, etc., lengths represent the lengths of dashes
+(\texttt{0pt} means a dot), and the second, fourth, etc., represent
+spaces. The given pattern is dot-space-dash-space. This pattern, when
+used in a \cs{gendashed} command, is repeated for the length of the
+curve.
+
+This last example illustrates that the predefined \MP{} variable
+\gbc{pi} (equal to 3.14159) can be used pretty much anywhere a number
+can be used (except, often, in text label commands).
+
+Another way to get more distinctive curves is to `dot' them with
+something other than tiny dots. The \cs{plot} command does that. It
+takes one mandatory argument, the name of a symbol to use instead of a
+dot. Here are the same two curves \cs{plot}-ed (figure~\ref{fig28}):
+\begin{verbatim}
+\begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \setlength{\pointsize}{2.5pt}
+ \plot{Triangle}\function{-pi,pi,.2}{sin 2x}
+ \plot[2pt,6pt]{SolidCircle}\function{-pi,pi,.2}{cos 2x}
+ \axes
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig28}
+ \begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \setlength{\pointsize}{2.5pt}
+ \plot{Triangle}\function{-pi,pi,.2}{sin 2x}
+ \plot[2pt,6pt]{SolidCircle}\function{-pi,pi,.2}{cos 2x}
+ \axes
+ \end{mfpic}
+\end{mfpfig}
+
+The \cs{plot} command takes an optional argument to specify the size of
+the symbols and the spacing between them. The size of the symbols can
+also be adjusted by changing the length command \cs{pointsize} (that also
+adjusts the size of the dots placed with the \cs{point} command).
+
+In this last example, \cs{plotnodes} is similar to \cs{plot}, except it
+placed the symbols at the `nodes' defined by the path command. In the
+case of \cs{function}, these are the points $(x_k, f(x_k))$ with $x_k$
+stepping through all the $x$-values determined by the first argument of
+\cs{function} (figure~\ref{fig29}).
+\begin{verbatim}
+\begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \plotnodes[2.5pt]{Square}\function{-pi,pi,pi/16}{sin 2x}
+ \axes
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig29}
+ \begin{mfpic}{-3.5}{3.5}{-1.2}{1.2}
+ \plotnodes[2.5pt]{Square}\function{-pi,pi,pi/16}{sin 2x}
+ \axes
+ \end{mfpic}
+\end{mfpfig}
+
+See the manual for the list of predefined symbols available to the
+\cs{plot} and \cs{plotnodes} command.
+
+\chapter{More on text}
+
+The text positioning commands used so far in this guide are entirely
+handled by \TeX{} or \LaTeX. This is why we have occasionally had to say
+that certain things could be done ``except in text placement commands''.
+It is possible for text positioning to be done within \MP, making many
+things possible that couldn't be done otherwise. For example, text can
+be rotated about the point of placement. You are probably thinking that
+\LaTeX{} can rotate text, but it is not all that easy to arrange for the
+point on the graph where we place the text to be the center of rotation.
+Below are two examples, in which we attempt to place the text separated
+from $(0,0)$ by \texttt{5pt} and rotated 45 degrees around $(0,0)$. In
+the first we try to use \LaTeX's \cs{rotatebox} command, and in the
+second we turn on \MP{} handling of labels and use a rotation option to
+the \cs{tlabel} command.
+\begin{verbatim}
+\begin{mfpic}{0}{1}{0}{1}
+ \point{(0,0)}
+ \polyline{(0,0),(1,1)}
+\tlabel[Bl](0,0){\rotatebox{45}{\hspace{5pt}Test text}}
+\end{mfpic}
+\end{verbatim}
+\begin{verbatim}
+\usemplabels
+\begin{mfpic}{0}{1}{0}{1}
+ \point{(0,0)}
+ \polyline{(0,0),(1,1)}
+ \tlpointsep{5pt}
+ \tlabel[Bl45](0,0){Test text}
+\end{mfpic}
+\end{verbatim}
+\begin{figure}[!hb]
+ \centering
+ \begin{minipage}{4cm}
+ \centering
+ \begin{mfpic}{0}{1}{0}{1}
+ \point{(0,0)}
+ \polyline{(0,0),(1,1)}
+ \tlabel[Bl](0,0){\rotatebox{45}{\hspace{5pt}Test text}}
+ \end{mfpic}\renewcommand\thefigure{\thesection.\arabic{figure}a}
+ \refstepcounter{figure}\label{fig30a}
+ \par\medskip (a)
+ \end{minipage}\addtocounter{figure}{-1}\qquad
+ \begin{minipage}{4cm}\usemplabels
+ \centering
+ \begin{mfpic}{0}{1}{0}{1}
+ \point{(0,0)}
+ \polyline{(0,0),(1,1)}
+ \tlpointsep{5pt}
+ \tlabel[Bl45](0,0){Test text}
+ \end{mfpic}\renewcommand\thefigure{\thesection.\arabic{figure}b}
+ \refstepcounter{figure}\label{fig30b}
+ \par\medskip (b)
+ \end{minipage}
+
+ \medskip Figure \thesection.\arabic{figure}.
+\end{figure}
+
+The first produces figure~\ref{fig30a} and the second produces
+figure~\ref{fig30b}. Our goal was to get the baseline of the text lined
+up with the reference line drawn.
+
+In the first example, \LaTeX's \cs{rotatebox} command produces the
+following result, where we put a frame around both the unrotated text
+and the rotated result to emphasize what \LaTeX{} sees as the
+boundaries:
+$$
+ \hbox{\setlength\fboxsep{0pt}%
+ \fbox{\rotatebox{45}{\fbox{\hspace{5pt}Test text}}}}
+$$
+This is then placed by the \cs{tlabel} command with the lower left
+corner of the \emph{outer} box at $(0,0)$. But \LaTeX's axis of rotation
+was at the lower left corner of the inner box. In the second case, \MP{}
+placed the label. The command \cs{tlpointsep}\marg{5pt} and the parameter
+\oarg{Bl45} explicitly request that the label be placed with its left
+baseline 5 points from $(0,0)$ and rotated 45 degrees \emph{about the
+point $(0,0)$}.
+
+The \cs{usemplabels} command used above asks \MP{} to arrange for the
+setting of labels. Adding the option \opt{mplabels} to the
+\cs{usepackage} command that loads \mfp{} has the same effect for the
+whole document. There can be problems with using \MP{} to set labels.
+One is that \MP{} has to call a \file{tex} program to do the actual
+typesetting, and then one must either make arrangements that ensure
+\MP{} will call \LaTeX, or never use any macros in the labels that are
+not defined in plain\TeX. If one does arrange for \LaTeX{} to be used,
+one needs to arrange that a \LaTeX{} preamble is prepended to the output
+\file{.mp} file. The \cs{mfpverbtex} command can be used for this.
+
+The command \cs{nomplabels} can be used to return to having labels set
+at the document level. For the rest of this guide, we have
+\opt{mplabels} in effect.
+
+There are a few more commands that place text on the picture. All of
+them pass the final responsability for text placement to \MP{} if
+\opt{mplabels} is in effect. See the manual for more details.
+
+
+\chapter{Arrows}
+
+The command \cs{arrow} adds an arrowhead onto the \emph{end} of any path
+that follows. For this to have predictable effects, you need to know
+which part of a curve is the end, and which the start. Not surprisingly,
+for the commands that connect a list of points in order the first point
+in the list is the start point and the last point is the end. Except the
+closed paths (\cs{cyclic}, \cs{polygon}, etc.); for them, the start and
+the end points are the same, but the order of the points gives a
+direction to the arrowhead. The default \cs{circle} has an anticlockwise
+direction, but if the circle is defined by three points (for example)
+the direction of the circle is determined by the order in which the
+points are written.
+
+Anyway, here are a few examples, illustrating the use of \cs{arrow}, and
+some of its optional arguments.
+\begin{verbatim}
+\begin{mfpic}{0}{4}{0}{4}
+ \arrow[r-5]\circle{(1,1),.5}
+ \arrow[b4pt]\arrow\polyline{(3,2),(3,0)}
+ \arrow[cred]\reverse\arrow\polyline{(0,3),(2,3)}
+ \arrow[l 5pt]\rect{(4,2),(2,4)}
+\end{mfpic}
+\end{verbatim}
+See figure~\ref{fig31} for the results of this example. There are four
+possible optional arguments, the first character inside the brackets
+tells what option the rest of the argument applies to. The first example
+above starts with `\texttt{r}', which stands for `rotate' and asks for
+the arrowhead to be rotated $-5$ degrees (positive rotation means
+anticlockwise, negative means clockwise). This is frequently useful for
+arrows on curved paths, as the default direction (tangent to the path)
+often just looks wrong). The second example starts with `\texttt{b}',
+which stands for `backset' and it moves the head back \texttt{4pt} from
+where it would otherwise be placed. In the example, this is used to put
+a double arrowhead on the line. In the third example we put an arrow at
+both ends by reversing the sense of the curve in between the two
+\cs{arrow} prefixes. We also used the letter `\texttt{c}' in the
+optional argument of one arrowhead. This stands for `color' and the
+requested color is `\texttt{red}'. Finally, the \texttt{l} option
+(that's a lowercase `ell', not the number `one') changes the length of
+the arrowhead to 5 points (from the \verb$3pt$ default).%
+ \footnote{I have put a space between the \texttt{l} and the
+ \texttt{5pt} so it won't be mistaken for `$15$pt. Normally one
+ should avoid spaces in \mfp{} optional arguments, but this is one
+ case where it will cause no harm.}
+\begin{mfpfig}{fig31}
+ \begin{mfpic}{0}{4}{0}{4}
+ \arrow[r-5]\circle{(1,1),.5}
+ \arrow[b4pt]\arrow\polyline{(3,2),(3,0)}
+ \arrow[cred]\reverse\arrow\polyline{(0,3),(2,3)}
+ \arrow[l 5pt]\rect{(4,2),(2,4)}
+ \end{mfpic}
+\end{mfpfig}
+
+The options can be combined in one command:
+\cs{arrow}\oarg{cblue}\oarg{b4pt}\oarg{r25}\oarg{l6pt} would produce a
+\texttt{6pt} long blue arrowhead rotated 25 degrees anticlockwise, set
+back \texttt{4pt}. The setting back is done in the direction determined
+\emph{after} rotation. The order of the options is not significant.
+
+The shape of the arrowhead can be changed with the \cs{headshape}
+command. The following example draws the arrowhead first normally, and
+then after an instance of this command. We draw it a third time, exactly
+like the second time, except we use the *-form. We have increased the
+length of head and the thickness of the pen to emphasize the effects.
+\begin{verbatim}
+\begin{mfpic}{0}{4}{0}{4}
+ \setlength{\headlen}{20pt}
+ \penwd{3pt}
+ \arrow\polyline{(0,3),(4,3)}
+ \headshape{.5}{2}{true}
+ \arrow\polyline{(0,2),(4,2)}
+ \arrow*\polyline{(0,1),(4,1)}
+\end{mfpic}
+\end{verbatim}
+The results are pictured in figure~\ref{fig32}. The first argument to
+\cs{headshape} sets the ratio of width to height for the head. We have
+cut it in half here. The second argument sets the tension in the curves
+that form the sides of the head. This reduces the curvature in the
+sides. The third argument can be only \texttt{true} or \texttt{false}
+and determines whether the head is a solid shape, or only the two
+`barbs'. The defaults correspond to \verb$\headshape{1}{1}{false}$. The
+filled form does not draw the outline so what we see is the pointy
+arrowhead on top of a thick line. The *-form tries to erase part of the
+line so that one sees an actual pointy arrow.
+\begin{mfpfig}{fig32}
+ \begin{mfpic}{0}{4}{0}{4}
+ \setlength{\headlen}{20pt}
+ \penwd{3pt}
+ \arrow\polyline{(0,3),(4,3)}
+ \headshape{.5}{2}{true}
+ \arrow\polyline{(0,2),(4,2)}
+ \arrow*\polyline{(0,1),(4,1)}
+ \end{mfpic}
+\end{mfpfig}
+
+
+\chapter{Color}
+
+We saw the use of color in earlier sections, and now it's time to be
+systematic about it. The several rendering commands have a color option;
+examples are \cs{draw}, \cs{gfill}, \cs{arrow}, and the hatching
+commands. However, even those commands that don't provide such an option
+can have the color of their rendering changed. \Mfp{} provides the
+following commands to change certain colors. Those commands with a
+color option can be used without that option and then they will the use
+the appropriate color described here. Each of these color-changing
+commands takes a mandatory argument containing the color to change to,
+and an optional argument to be described later.
+
+\begin{description}
+\item[\cs{backgroundcolor}] This sets the color to be used by \cs{gclear}.
+ It is the same color used by \cs{point} for the inside of the
+ points when \cs{pointfillfalse} has been used. In \MP{}, the
+ only way to clear the inside of a region is to cover it up. The
+ default color for this purpose is \mfc{white}. Use this command
+ to change that default.
+\item[\cs{drawcolor}] This sets the default color used by those rendering
+ commands that draw a path. This includes \cs{draw}, but also
+ includes \cs{dashed}, \cs{dotted}, \cs{plot} and \cs{plotnodes}.
+ It is also used by other commands that produce lines or curves:
+ figure macros used without any rendering prefix, as well as
+ \cs{axes} and related commands.
+\item[\cs{fillcolor}] This sets the default color used by \cs{gfill}. It
+ is also used by \cs{polkadot} (which has no color option).
+\item[\cs{hatchcolor}] This sets the default color used by any hatching
+ command.
+\item[\cs{headcolor}] This sets the default color for arrowheads added
+ by the \cs{arrow} command. It is also the color of
+ arrowheads on any coordinate axis.
+\item[\cs{pointcolor}] This sets the color used by \cs{point}, \cs{grid},
+ and \cs{plotsymbol} (the last one will be described later).
+\item[\cs{tlabelcolor}] This sets the color used for all text labels if
+ the \opt{mplabels} option is turned on.
+\end{description}
+
+The color can be a common name for a color, provided that name is one of
+the following: \texttt{white}, \texttt{black}, \texttt{red},
+\texttt{green}, \texttt{blue}, \texttt{cyan}, \texttt{magenta}, or
+\texttt{yellow}. We have already seen this usage. It can also be a color
+name defined in the file \file{dvipsnam.mp} that accompanies \mfp. It can
+also be an explicit color formula, where color formulas are described in
+the \mfp{} manual.
+
+The optional argument is one of the \emph{color models}. See the manual
+for details, but the syntax is just like that of the \prog{color}
+package's \cs{color} command. For example,
+\begin{verbatim}
+\pointcolor[rgb]{0,1,0}
+\end{verbatim}
+would use the color model \opt{rgb} with parameters 0, 1, and 0 (this is
+green). After each of these commands a certain color name is assigned a
+value. For example, a use of the \cs{pointcolor} command assigns a value
+to the color named \gbc{pointcolor}. Also \cs{drawcolor} sets
+\gbc{drawcolor} and this pattern is followed for all the color setting
+commands above except \cs{backgroundcolor}, which assigns its value to
+the color named \gbc{background}.
+
+Color names for \mfp{} use can be defined using the \cs{mfpdefinecolor}
+command. Here's an example (figure~\ref{fig33}). Note the use of the
+color name \gbc{pointcolor} to make arrowheads and points have the same
+color.
+\begin{verbatim}
+\begin{mfpic}{0}{3.5}{0}{3.5}
+ \tlabelcolor{red}
+ \pointcolor{rgb(0,1,0)}% green
+ \drawcolor[rgb]{0,0,1} % blue
+ \fillcolor{Goldenrod} % from dvipsnam.mp
+ \headcolor{pointcolor} % will be green after above
+ \mfpdefinecolor{DarkerRed}{rgb}{.67,0,0}
+ \hatchcolor{DarkerRed}
+ \penwd{1pt}
+ \gfill\circle{(1,1),.5}
+ \point[3pt]{(1,.5),(1,1.5),(.5,1),(1.5,1)}
+ \hatch\rect{(2.5,2.5),(3.5,3.5)}
+ \arrow[l 5pt]\polyline{(1,1),(3,3)}
+ \tlabel[cc](1,3){Examples\\of\\colors}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig33}
+ \begin{mfpic}{0}{3.5}{0}{3.5}
+ \tlabelcolor{red}
+ \pointcolor{rgb(0,1,0)}% green
+ \drawcolor[rgb]{0,0,1} % blue
+ \fillcolor{Goldenrod} % from dvipsnam.mp
+ \headcolor{pointcolor} % will be green after above
+ \mfpdefinecolor{DarkerRed}{rgb}{.67,0,0}
+ \hatchcolor{DarkerRed}
+ \penwd{1pt}
+ \gfill\circle{(1,1),.5}
+ \point[3pt]{(1,.5),(1,1.5),(.5,1),(1.5,1)}
+ \hatch\rect{(2.5,2.5),(3.5,3.5)}
+ \arrow[l 5pt]\polyline{(1,1),(3,3)}
+ \tlabel[cc](1,3){Examples\\of\\colors}
+ \end{mfpic}
+\end{mfpfig}
+
+\chapter{Closing paths}
+
+There are many different ways to modify a figure. We have already seen
+\cs{arrow}, which appends an arrowhead, \cs{reverse} which reverses the
+sense, and several that apply an affine transformation
+(\cs{rotatepath}, \cs{shiftpath}, etc.). Now we will see the simple
+operation of closing a path.
+
+All methods of closing a path have to connect the end to the start, but
+simply drawing a connection is not enough. \MP{} has to be told to close
+the path, and what kind of connection is desired. We have several macros
+that can do the job, the simplest being \cs{lclosed}, which closes with
+a straight line. Putting \cs{lclosed} in front of \cs{polyline}, for
+example, produces the same result as \cs{polygon}. Another macro is
+\cs{sclosed} which produces a smooth closure. Putting it in front of
+\cs{curve} gives (almost) the same result as \cs{cyclic}. There is one
+other useful macro, \cs{bclosed}, which also informs \MP{} to make a
+smooth closure. The difference between \cs{sclosed} and \cs{bclosed} is
+that the first modifies slightly the original path (in order to achieve
+the effect that \cs{sclosed}${}+{}$\cs{curve}${}\approx{}$\cs{cyclic}),
+the second just asks \MP{} to do its best to connect the ends smoothly.
+Here's an example comparing the two smooth methods (figure~\ref{fig34}).
+\begin{verbatim}
+\begin{mfpic}{0}{4}{0}{4}
+ % an open curve:
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ % \sclosed a shifted copy:
+ \draw\gfill[green]\sclosed\shiftpath{(2,0)}
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ % \bclosed another copy:
+ \draw\gfill[yellow]\bclosed\shiftpath{(2,-2)}
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ % \cyclic with same points, shifted:
+ \draw\gfill[red]\shiftpath{(0,-2)}
+ \cyclic{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \tlabeljustify{bc}
+ \nomplabels
+ \tlabels{
+ (1,2.4){\cs{curve}}
+ (3,2.4){\cs{sclosed}}
+ (1,0.4){\cs{cyclic}}
+ (3,0.4){\cs{bclosed}}
+ }
+ % Some points to help illustrate
+ \point{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \point{(2.49,3),(2.5,3.7),(3,4),(3.5,3.7),(3.51,3)}
+ \point{(0.49,1),(.5,1.7),(1,2),(1.5,1.7),(1.51,1)}
+ \point{(2.49,1),(2.5,1.7),(3,2),(3.5,1.7),(3.51,1)}
+\end{mfpic}
+\end{verbatim}
+\begin{mfpfig}{fig34}
+ \begin{mfpic}{0}{4}{0}{4}
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \draw\gfill[green]\sclosed\shiftpath{(2,0)}
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \draw\gfill[yellow]\bclosed\shiftpath{(2,-2)}
+ \curve{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \draw\gfill[red]\shiftpath{(0,-2)}
+ \cyclic{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \tlabeljustify{bc}
+ \nomplabels
+ \tlabels{
+ (1,2.4){\cs{curve}}
+ (3,2.4){\cs{sclosed}}
+ (1,0.4){\cs{cyclic}}
+ (3,0.4){\cs{bclosed}}
+ }
+ \point{(0.49,3),(.5,3.7),(1,4),(1.5,3.7),(1.51,3)}
+ \point{(2.49,3),(2.5,3.7),(3,4),(3.5,3.7),(3.51,3)}
+ \point{(0.49,1),(.5,1.7),(1,2),(1.5,1.7),(1.51,1)}
+ \point{(2.49,1),(2.5,1.7),(3,2),(3.5,1.7),(3.51,1)}
+ \end{mfpic}
+\end{mfpfig}
+
+A word about the labels: we turned off \opt{mplabels} with the command
+\verb$\nomplabels$, because we used a command (\verb$\cs$) defined for
+this document and not known to basic \TeX{} or \LaTeX. The labels
+therefore are positioned by \LaTeX{} while it assembles this document,
+instead of by \MP{} which would call a separate instance of \TeX{} or
+\LaTeX{} where \cs{cs} was unknown. We could have kept \opt{mplabels},
+provided we had used \verb$\mfpverbtex$ to write the appropriate
+\LaTeX{} preamble to the \file{.mp} output. It would need to be some
+subset of the preamble of this document.
+
+
+\chapter*{Appendices}
+\addcontentsline{toc}{section}{Appendices}
+
+In addition to \pdfLaTeX, \Mfp{} works with plain \pdfTeX, \LaTeX, and
+plain \TeX{}. Instead of \MP{} as the figure processor, \MF{} can also
+be used. Let's start with the difference between using \mfp{} in a
+plain~\TeX{} document and using it in a \LaTeX{} document.
+
+\renewcommand\thesubsection{\Alph{subsection}}
+
+\section{\Mfp{} in plain \TeX}
+
+Here is a sample plain \pdfTeX{} document with results the same as our
+first ``Hello, world'' example. Let's call this file \file{plfirst}
+\begin{verbatim}
+\input mfpic
+ \usemetapost
+\opengraphsfile{myfigs}
+ My first figure:
+ \mfpic[72]{-1}{1}{-1}{1}
+ \ellipse{(0,0),1,.5}
+ \endmfpic
+\closegraphsfile
+\end
+\end{verbatim}
+The main difference is the lack of \LaTeX{} commands. The crucial
+difference is in the first two lines. There we simply
+\verb$\input mfpic$ and we turn on \MP{} support with the
+\verb$\usemetapost$ command instead of an option to \verb$\usepackage$.
+
+Since \verb$\usepackage$ and its options don't exist in plain \TeX{},
+all those features that we select with options in \LaTeX{} must be
+selected by some command in plain. For example, the \opt{mplabels}
+option is replaced with the command \verb$\usemplabels$ (which can also
+be used in \LaTeX).
+
+Also, plain \TeX{} doesn't have environments, so instead of
+\verb$\begin{mfpic}$ we just use \verb$\mfpic$ and instead of
+\verb$\end{mfpic}$ we use \verb$\endmfpic$.
+
+The external processing is essentially the same:
+\begin{verbatim}
+pdftex plfirst
+mpost myfigs
+pdftex plfirst
+\end{verbatim}
+should produce \texttt{plfirst.pdf} with the same picture of an ellipse.
+
+
+\section{\Mfp{} without PDF}
+
+If we wish to use nonPDF versions of \LaTeX{} or plain \TeX, the only
+difference is in the processing steps. To process \file{first.tex} with
+\LaTeX, run the command
+\begin{verbatim}
+latex first
+\end{verbatim}
+followed by
+\begin{verbatim}
+mpost myfigs
+\end{verbatim}
+followed by latex again.
+\begin{verbatim}
+latex first
+\end{verbatim}
+Then run the dvi processor of your choice. It should be one that can
+successfully handle eps figures (or at least the simple eps produced by
+\MP). Certainly \prog{dvips} can do it:
+\begin{verbatim}
+dvips first
+\end{verbatim}
+will produce \file{first.ps}. The file{.ps} file can be viewed with
+\prog{gsview} or printed, or converted to PDF with some distillation
+program like \prog{ps2pdf}. Also \prog{dvipdfm} (if properly
+configured) can be used convert the \file{.dvi} file to PDF.
+
+\section{\Mfp{} without \MP}
+
+\Mfp{} can produce figures using \MF{} instead of \MP. What it does is
+work with \MF{} to produce a made-to-order font, where each picture is a
+large character in that font.
+
+Since \pdfTeX{} and \pdfLaTeX{} do not work well with the fonts produced
+by \MF, and many PDF viewers don't display them well anyway, I do not
+recommend using \mfp{} to produce PDF without turning on \MP{} support.
+However, all dvi viewers and \prog{dvips} \emph{do} work well with such
+fonts, so it can make sense to use \mfp{} with \MF{} \emph{if} you don't
+need the features that \MP{} enables: color and rotation of labels. One
+advantage of doing this is the smaller number of files produced. If
+there are 100 \mfp{} figures in a document, \MP{} produces 100 files
+(apart from a couple of temporary files and the \file{.log} file), but
+the \MF{} procedure produces only four files no matter how many figures
+are present.
+
+To use \mfp{} without \MP{}, omit the \opt{metapost} option or the
+\verb$\usemetapost$ command. If you want a visible reminder of the fact
+that \MF{} is being used, you can use the \opt{metafont} option or the
+\verb$\usemetafont$ command. Of course, you may not use \opt{mplabels}
+without \MP. You may use the color commands and options, but the only
+colors actually produced will be black and white (and occasionally a
+pattern of pixels that simulate gray). The processing steps are
+different. After
+\begin{ex}
+\texttt{latex first} \quad(or \texttt{tex plfirst})
+\end{ex}
+run \MF:
+\begin{ex}
+ \texttt{mf myfigs}
+\end{ex}
+This should produce three files: \texttt{myfigs.log},
+\texttt{myfigs.tfm}, and \texttt{myfigs.600gf}. The last one (which
+might have a different number on your system) is called a \emph{generic
+font} (GF) file and contains the bitmap descriptions. If the file
+produced is \texttt{myfigs.2602gf}, and the \file{.tfm} is not produced,
+that indicates a configuration problem with your system that we'll get
+to later. If this did work, one needs to convert the GF file to a
+PK font file, the standard format for bitmap fonts in the \TeX{} world.
+This may be done with
+\begin{ex}
+ \texttt{gftopk myfigs.600gf}
+\end{ex}
+Some systems may require you to name the output file on the command
+line:
+\begin{ex}
+ \texttt{gftopk myfigs.600gf myfigs.600pk}
+\end{ex}
+And some systems may require the extension to be simply \file{.pk}:
+\begin{ex}
+ \texttt{gftopk myfigs.600gf myfigs.pk}
+\end{ex}
+Finally, some systems may have a \prog{makepk} or \prog{mktexpk} command
+that can be used in place of the combination of \MF{} and \prog{gftopk}.
+You'll have to check what your system has and what its usage might be,
+and what it might do with the PK file produced.
+
+After the above, one again runs `\texttt{latex first}' (or `\texttt{tex
+plfirst}'), and then the \file{.dvi} can be viewed or processed with dvips.
+The two files \file{myfigs.log} and \file{myfigs.600gf} can be deleted;
+only \file{myfigs.tfm} and \file{myfigs.600pk} are needed. If the viewed
+image shows the pictures at a far different size than you expect, this can
+also indicate a configuration problem.
+
+Some systems permit on-the-fly creation of PK files by various
+\file{.dvi} processing programs. It is not wise to allow this to happen
+when working with \mfp. The problem is that this automatic creation
+process is \emph{not} repeated when a figure is edited unless the old PK
+files are deleted, and it may take some hunting to even locate them. One
+should \emph{always} follow the \MF{} step with the \prog{gftopk} step.
+You might even want to write a batch script or makefile to ensure that
+this happens.
+
+Another problem (more an annoyance) that can occur comes from the
+behavior of most dvi viewers: most will reload a \file{.dvi} file if
+they detect that it has changed (or if asked to), but none that I know
+of will reload any fonts even if they have changed. So if one is going
+through a edit-compile-view cycle involving \mfp{} figures, one usually
+has to close the viewer and open it again before one can see changes
+that were made in the figures after starting the viewer. It is also
+possible that PK fonts are cached and shared by other programs, so you
+may need to close other programs to ensure the cache is cleared and the
+new figures loaded.
+
+\section{\MF{} configuration problems}
+
+To diagnose these problems it important to know something about
+\emph{printer modes}. \CMF{} produces bitmap images of characters. This
+means a description of a block of pixels, telling which ones are black
+and which are white. If the description says that 60 pixels in a row are
+black, that produces a thin black line. How long that line is depends on
+the size of a printer's pixels. For the LaserJet IV, there are 600
+pixels to the inch, so 60 pixels makes 1/10 of an inch. The LaserJet~II,
+however, has 300 pixels to the inch, so 60 pixels is 1/5 of an inch
+long. What \MF{} needs in order to produce an image that is the correct
+size is (at a minimum) the \emph{resolution} of the intended printer.
+This is typically reported in DPI (dots per inch) and \MF{} keeps the
+value in the variable \mfc{pixels_per_inch}.
+
+As part of the configuration of your DVI viewer or of \prog{dvips} you
+may have needed to select a printer from a list, or edit a line in some
+configuration file (e.g., \file{config.ps}). What was going on then was
+the assigning of a default \MF{} printer mode. There is a file on most
+\TeX{} systems named \file{modes.mf} which assigns symbolic names to a
+set of parameters that enable \MF{} to tune its output to a particular
+printer. For example, the LaserJet~IV is given the name
+`\texttt{ljfour}' and that name is associated with the value 600 for
+\mfc{pixels_per_inch}. In order to tell \MF{} to make output for the
+LaserJet~IV, one can put that information on the command line:
+\begin{ex}
+ \texttt{mf \cs{mode}:=ljfour; input myfigs}
+\end{ex}
+Your operating system or \TeX{} distribution may require you to quote
+the backslash in the above command.
+
+There is a system for making the selection of the correct mode
+semi-automatic, not requiring a command line specification. Near the end
+of \file{modes.mf} is a line similar to
+\begin{ex}
+ \mfc{localfont:=ljfour;}
+\end{ex}
+This is intended to equate the symbolic name \mfc{localfont} with the
+user's default printer. If the LaserJet~IV is your default printer, the
+line above would be the correct one. If it is not, then that line should
+be changed. This can be done with an ordinary text editor, or your
+\TeX{} system may have a configuration utility to take care of it.
+
+If you say ``\texttt{mf myfigs}'' on an \mfp{} file \file{myfigs.mf}, \mfp's
+internal code will detect that no mode was defined on the command line.
+It will then check if \mfc{localfont} is defined and if so, use that for
+the printer mode. If that fails, it will try to select \mfc{ljfour}.
+If even that is unknown, \mfp{} will define its own generic 600 DPI mode.
+
+\Mfp{} doesn't need to know all the parameters associated to a printer
+mode, only the value of \mfc{pixels_per_inch}. If you get a GF file that
+indicates an incorrect DPI value for your printer, you should arrange
+for the line in \file{modes.mf} that sets \mfc{localfont} to be
+corrected. At the very least it should equate \mfc{localfont} to a name
+defined in \file{modes.mf} and associated to a printer with the same DPI
+as yours. After changing \file{modes.mf}, you need to run whatever
+programs your \TeX{} system requires to remake the \MF{} format.
+
+\end{document}