From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/pb-diagram/pb-manual.tex | 574 ++++++++++++++++++++++++++ 1 file changed, 574 insertions(+) create mode 100644 macros/latex/contrib/pb-diagram/pb-manual.tex (limited to 'macros/latex/contrib/pb-diagram/pb-manual.tex') diff --git a/macros/latex/contrib/pb-diagram/pb-manual.tex b/macros/latex/contrib/pb-diagram/pb-manual.tex new file mode 100644 index 0000000000..d0a25612cc --- /dev/null +++ b/macros/latex/contrib/pb-diagram/pb-manual.tex @@ -0,0 +1,574 @@ +% pb-manual.tex: user's manual for pb-diagram.sty macros +% Author: Paul Burchard +% Version Number: 5.0 +% Version Date: 20 Oct 1998 +% +% Copyright (c) 1990, 1992, 1995, 1998 by Paul Burchard +% +% This program 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 of the License, or +% (at your option) any later version. +% +% This program 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. +% +\def\tooee{LaTeX2e} +\ifx\fmtname\tooee + \documentclass[12pt]{article}\usepackage{pb-diagram} +\else + \documentstyle[12pt,pb-diagram]{article} +\fi +\def\diagramversion{5.0} +\title{User's Guide to the Diagram Environment, + Version \diagramversion} +\author{Paul Burchard (burchard@pobox.com)} +\def\tfrac#1#2{{\textstyle\frac{#1}{#2}}} +\begin{document} +\maketitle + +\section{Introduction} + +The \verb"diagram" environment allows the +\ifx\fmtname\tooee\LaTeXe\else\LaTeX\fi{} user to easily +create complex commutative diagrams, by placing formula nodes +on a conceptual grid and attaching arrows to them. + +The grid used in these diagrams is not a fixed square grid. +Instead, the environment automatically generates a correctly scaled +and shaped rectangular grid which will compactly hold the formulas, +while leaving room for the arrows between them. Moreover, the +arrows automatically adapt to the spaces between the formulas +being connected. These features are accomplished with a +three-pass algorithm that takes into account the width +and height of every formula. + +The arrows in these diagrams are quite flexible. +Arrows may, in any combination, +\begin{itemize} + \item point in any of a large number of lattice directions; + \item span multiple rows and columns of the grid; + \item cross other arrows; + \item have labels on either or both sides, + with adjustable positioning; + \item have a variety of head, tail, and shaft styles. +\end{itemize} +The fancier arrow styles are made possible by special fonts, +either from Xy-pic or {\sc LamS}-\TeX, but the package can be used +without them if necessary. + +\pagebreak[3] +To get a feel for how the package works, here are some examples of +commands for producing arrows: +\begin{flushright} +% +% Catcode hack to get typewriter `\' `{' `}' inside arg of command +% where \verb is illegal. +\begingroup + \catcode`|=0 \catcode`[=1 \catcode`]=2 + \catcode`\{=12 \catcode`\}=12 \catcode`\\=12 + |gdef|bbb[\]|gdef|lll[{]|gdef|rrr[}]% +|endgroup +\def\ttt{\ifx\fmtname\tooee\fontfamily{cmtt}\selectfont\else\tt\fi}% +% +% tighten it up a bit to fit on page in 12pt +\setlength{\dgARROWLENGTH}{1.5em}% +\noindent +$\begin{diagram} + \node{\makebox[0pt][r]{\ttt\bbb arrow\lll e\rrr \quad}+} + \arrow{e} \node{+} \node{+} \node{+} \node{+} \\ + \node{+} \arrow{s,lr}{\makebox[0pt][r]{\ttt\bbb + arrow\lll s,lr\rrr\lll\bbb alpha\rrr\lll\bbb beta\rrr\quad} + \alpha}{\beta} + \node{+} \node{+} \node{+} \node{+} \\ + \node{+} \node{+} \node{+} \node{+} \node{+} \\ + \node{\makebox[0pt][r]{\ttt\bbb + arrow[2]\lll ene,t,3,..\rrr\lll f\_0\rrr\quad}+} + \arrow[2]{ene,t,3,..}{f_0} \node{+} + \node{+} \node{+} \node{+} +\end{diagram}$ +\end{flushright} +And here is a simple example diagram: +\[ + \begin{diagram} + \node{A} \arrow{e,t}{a} \arrow{s,l}{c} \arrow{ese} + \node{B^*} \arrow{e,t}{b^*} + \node{C} \arrow{s,r}{d} \arrow{wsw} \\ + \node{D} \arrow[2]{e,b}{e} \node[2]{E} + \end{diagram} +\] +\begin{verbatim} + \[ + \begin{diagram} + \node{A} \arrow{e,t}{a} \arrow{s,l}{c} \arrow{ese} + \node{B^*} \arrow{e,t}{b^*} + \node{C} \arrow{s,r}{d} \arrow{wsw} \\ + \node{D} \arrow[2]{e,b}{e} \node[2]{E} + \end{diagram} + \] +\end{verbatim} + +\pagebreak[4] +\section{Loading the Diagram Package} + +To use the \verb"diagram" environment, begin your +\ifx\fmtname\tooee\LaTeXe\else\LaTeX2e\fi{} file with: +\begin{verbatim} + \documentclass{DOCSTYLE}\usepackage{pb-diagram} +\end{verbatim} +where \verb"DOCSTYLE" is your document style (e.g., +\verb"article"). The style file \verb"pb-diagram.sty" needs to +be placed in one of your system's \TeX{} input directories. + +If you are using older versions of \LaTeX{} (2.09 or older), then +you would begin instead with: +\begin{verbatim} + \documentstyle[pb-diagram]{DOCSTYLE} +\end{verbatim} + +If you have {\em METAFONT\/} available on your system, +and would like to make use of the additional features +of the Xy-pic fonts (highly recommended!), then you should +instead begin your +\ifx\fmtname\tooee\LaTeXe\else\LaTeX2e\fi{} file with: +\begin{verbatim} + \documentclass{DOCSTYLE} + \usepackage[cmtip,arrow]{xy} + \usepackage{pb-diagram,pb-xy} +\end{verbatim} +This option requires that you have Xy-pic installed on your +system. Xy-pic is available from your nearest CTAN archive +(e.g. {\tt http://ctan.tug.org/}) in the CTAN directory +{\tt macros/generic/diagrams/xypic/}. + +An alternative set of fonts which enables some of the +fancier features is the {\sc LamS}-\TeX{} font set; to +use it, begin your +\ifx\fmtname\tooee\LaTeXe\else\LaTeX2e\fi{} file with: +\begin{verbatim} + \documentclass{DOCSTYLE} + \usepackage{pb-diagram,lamsarrow,pb-lams} +\end{verbatim} +This option requires the {\em METAFONT\/} source files +\verb"lams1.mf" through \verb"lams5.mf" to be installed. + +Installation of additional fonts is system-dependent, +but will involve moving the \verb".mf" files into the system's +{\em METAFONT\/} input directory, and then running the +{\em METAFONT\/} program. This program will generate the +\verb".tfm" files required for \TeX, and the \verb".pk" or +\verb".gf" files required for printing and previewing. +On {\sc unix} systems, the relevant files are typically +located in \verb"/usr/lib/mf" and \verb"/usr/lib/tex", or +\verb"/usr/local/lib/mf" and \verb"/usr/local/lib/tex". + +If you are having troubling getting \LaTeX{} to properly +process an older paper which uses this package, check the +later section, ``Upgrading Papers from Previous Versions.'' + +\pagebreak[4] +\section{Using the Diagram Environment} +\subsection{Overall Structure of the Environment} + +The \verb"diagram" environment should be used in +{\em math mode only}. Its usage is as follows:\footnote{For +compatibility reasons, the diagram environment accepts and +optional argument. When this argument is supplied, the grid +geometry is calculated in exactly the same way as in version~1.0 +of this package. Therefore, manuscripts written with version~1.0 +require no changes to be processed with version~\diagramversion.} +\begin{verbatim} + \begin{diagram} + NODE ARROW ARROW ... NODE ARROW ARROW ... .... \\ + NODE ARROW ARROW ... NODE ARROW ARROW ... .... \\ + ... + NODE ARROW ARROW ... NODE ARROW ARROW ... .... + \end{diagram} +\end{verbatim} + +Each \verb"NODE" places a centered formula at a new grid point, and +each \verb"ARROW" which follows this \verb"NODE" (but precedes the +next \verb"NODE") will be attached by its tail to the same grid +point. The diagram will be automatically be given a geometry which +accomodates these elements, but you can also fine-tune it afterwards +by hand if it didn't turn out like you imagined +(see the section on ``Fine-Tuning'' below). We now explain +how to specify the \verb"NODE"s and \verb"ARROW"s. + +\subsection{Formula Nodes} + +A \verb"NODE" is specified by the comand: +\begin{verbatim} + \node[NCOLS]{FORMULA} +\end{verbatim} +where the optional argument \verb"NCOLS" tells how many grid columns +to move forward from the previous node (the default is 1). The +\verb"FORMULA" is the math mode material which you want to place at +that node in the grid. + +The \verb"\\" command moves to the next grid row. As is usual in +\LaTeX{} arrays, the final row should not end with a \verb"\\", and +any blank columns at the end of a row need not be entered. More +generally, it is possible to move \verb"NROWS" rows down at once +using the command: +\begin{verbatim} + \\[NROWS] +\end{verbatim} + +\subsection{Arrows and their Embellishments} + +An \verb"ARROW" is specified by the \verb"\arrow" command, which may +also be used anywhere in math mode, independent of the +\verb"diagram" environment. Its usage depends on the number of +labels desired: +\begin{verbatim} + \arrow[SIZE]{DIRECTION,OPTIONS} + \arrow[SIZE]{DIRECTION,ONELABEL,OPTIONS}{LABEL} + \arrow[SIZE]{DIRECTION,TWOLABEL,OPTIONS}{LABEL1}{LABEL2} +\end{verbatim} +The commas should not have any spaces before or after them, and there +should not be any extra spaces or commas at the beginning or end of +the list. The optional integer argument \verb"SIZE" tells how many +times its normal length the arrow should be made. For example, +\verb"\arrow[2]{e}" will span two columns, while \verb"\arrow[2]{s}" +will span two rows. + +The arrow \verb"DIRECTION" may be chosen from the compass point +directions: +\begin{verbatim} + n,e,s,w,ne,nw,se,sw,nne,nnw,sse,ssw,ene,ese,wnw,wsw +\end{verbatim} +If the \verb"pb-lams" style has been loaded, the \verb"DIRECTION" +may also be chosen from this list: +\begin{verbatim} + nee,see,nww,sww, + neee,nnne,nnnw,nwww,swww,sssw,ssse,seee, + nnnee,nnnww,sssww,sssee,nneee,nnwww,sswww,sseee +\end{verbatim} +(For more information about arrow directions, see the sections +on ``Fine Tuning'' and ``Customizing'' below.) + +Any \verb"LABEL"s present are math mode material. The +\verb"ONELABEL" specifier may be chosen from: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt t}\> top\\ + \>{\tt b}\> bottom\\ + \>{\tt l}\> left (only for use with vertical arrows)\\ + \>{\tt r}\> right (only for use with vertical arrows) +\end{tabbing} +The \verb"TWOLABEL" specifier may be chosen from: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt tb}\> top and bottom\\ + \>{\tt lr}\> left and right (only for use with vertical arrows) +\end{tabbing} + +The \verb"OPTION"s describe the style of the arrow shaft, the symbols +to be used at the head and tail of the arrow, and the positions of +the labels. The defaults are: a simple line shaft, a single simple +arrowhead, no special tail symbol, and labels positioned at the +midpoint of the arrow shaft. The \verb"OPTION"s may be selected from +the lists which follow. Most of the options can be combined with +others; however, not all combinations make sense. In addition, +options marked with~(*) are only available with +either \verb"pb-xy" or \verb"pb-lams" loaded; +and options marked with~(**) are only available with \verb"pb-xy" loaded. +Shaft options are: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt ..}\> dotted or dashed arrow shaft\\ + \>{\tt =}\> double line shaft* (``equals sign'')\\ + \>{\tt !}\> invisible arrow shaft +\end{tabbing} +Arrow head options are: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt -}\> no arrow heads\\ + \>{\tt <>}\> arrow heads on both ends\\ + \>{\tt A}\> double arrow head*\\ + \>{\tt '}\> left half of arrow head*\\ + \>{\tt `}\> right half of arrow head* +\end{tabbing} +Arrow tail options are: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt V}\> single arrow tail*\\ + \>{\tt J}\> left fish hook arrow tail*\\ + \>{\tt L}\> right fish hook arrow tail*\\ + \>{\tt S}\> squiggle arrow tail* + \>{\tt T}\> ``mapsto'' arrow tail** +\end{tabbing} +In the default configuration, the label positioning options are: +\begin{tabbing} + {\tt xxx}\={\tt x}\qquad\=\kill + \>{\tt 1}\> 1/4 of way from tail end\\ + \>{\tt 2}\> 2/4 of way from tail end (the default)\\ + \>{\tt 3}\> 3/4 of way from tail end +\end{tabbing} +However, if more flexibility is needed, there is an +\verb"ARROWPARTS" parameter which specifies how many pieces the arrow +will be divided into to determine the meaning of the label +positioning option. (In general, the positioning option may be any +single digit.) For example, to position a label 5/6 of the way from +the tail end of the arrow, you would use commands like these: +\begin{verbatim} + \dgARROWPARTS=6 + \begin{diagram} + ... \arrow{e,t,5}{MYLABEL} ... + \end{diagram} +\end{verbatim} +\verb"ARROWPARTS" should be even, so that ordinary labels can +be properly positioned at the half-way point. + + +\section{Fine Tuning the Diagrams} + +Many of the parameters used by the \verb"diagram" environment are +accessible to you and documented here so that the existing features +can be fine-tuned. + +The most important parameter is \verb"\dgARROWLENGTH", which +specifies the minimum length for all arrows. The \verb"diagram" +environment will independently adjust the horizontal and vertical +scales of its rectangular grid until at least that much room is +available for each arrow. This calculation takes into account +the room that must be set aside for the each of the two formulas +being connected by an arrow. The default minimum arrow length is +\begin{verbatim} + \dgARROWLENGTH=2.5em +\end{verbatim} +The \verb"\arrow" command may also be used outside of the diagram +environment; in that case, its length is instead controlled by +the parameter +\begin{verbatim} + \dgTEXTARROWLENGTH=1.1em +\end{verbatim} + +Some anomalies you may encounter: the collision of formulas is not +checked unless an arrow connects them. Therefore, if two formulas +turn out to overlap you can just connect them with an invisible arrow. + +Another problem may occur when you simulate ``arrow fragments'' +using a finer grid. The arrow-length checker does not know what +is a ``fragment'' and so it will force each fragment to be +\verb"\dgARROWLENGTH" long. The easiest way to fix this is to +locally divide \verb"\dgARROWLENGTH" by the scale factor between +the coarse and fine grids. For example: +{\samepage +\begin{verbatim} + \divide\dgARROWLENGTH by2 + \begin{diagram} + \node[2]{A}\arrow[2]{s}\\ + \node{B}\arrow{e,-} \node{}\arrow{e,t}{\alpha} \node{C}\\ + \node[2]{D} + \end{diagram} +\end{verbatim} +\[ + \divide\dgARROWLENGTH by2 + \begin{diagram} + \node[2]{A}\arrow[2]{s}\\ + \node{B}\arrow{e,-} \node{}\arrow{e,t}{\alpha} \node{C}\\ + \node[2]{D} + \end{diagram} +\] +} + +The space set aside for a formula +further includes padding to keep the arrows from actually touching the +formulas. The padding increases the apparent horizontal size of +each formula by \verb"\dgHORIZPAD" and the apparent vertical size +by \verb"\dgVERTPAD". The default values of these parameters are: +\begin{verbatim} + \dgHORIZPAD=1em + \dgVERTPAD=2ex +\end{verbatim} + +The ratio of the horizontal and vertical scales of the grid, +known as the {\em aspect ratio\/}, cannot be completely +arbitrary because of the slope limitations of font-based arrows. +In order that the full required set of compass-point directions be +available, the optimal calculated aspect ratio will be approximated +so as to be compatible with the available fonts. In plain +\LaTeX{} mode the possibile aspect ratios are half-integers up to~2, +while in {\sc LamS}-\TeX{} mode they are half-integers up to~3. + +\verb"\dgLABELOFFSET" is the (approximate) distance which will +separate labels from their arrows. An arrow is divided into +\verb"\dgARROWPARTS" parts for custom positioning of labels along the +arrow (the only sensible choices for this number are 2,4,6,8,10). By +default, +\begin{verbatim} + \dgLABELOFFSET=.7ex + \dgARROWPARTS=4 +\end{verbatim} + +The following two parameters regulate the appearance of dotted arrows +in plain \LaTeX{} mode: +\begin{verbatim} + \dgDOTSPACING=0.35em + \dgDOTSIZE=1.5\fontdimen8\tenln +\end{verbatim} + +By default, nodes are typeset \verb"\displaystyle", and labels +\verb"\scriptstyle". This is controlled by the commands +\verb"\dgeverynode" (which is executed prior to the formula of each +node) and \verb"\dgeverylabel" (which is executed prior to the +formula of each label). They can be changed with +\verb"\renewcommand", like this: +\begin{verbatim} + \renewcommand{\dgeverynode}{\displaystyle} + \renewcommand{\dgeverylabel}{\scriptstyle} +\end{verbatim} +These commands may alternatively be defined to take one argument, +which will be the content of the node or label. + + +\section{Customizing the Package} + +The \verb"diagram" environment was designed in a modular way to make +it easy to add features. + +To add a new option to the \verb"\arrow" command---say +\verb"**"---you need only define a command named \verb"\dgo@**" which +sets the desired parameters. Let's say you want the \verb"**" option +to make \verb"\arrow" use a custom arrow design of yours. Since +\verb"\dg@VECTOR" is the parameter that governs the arrow-drawing +code, you would say +\begin{verbatim} + \@namedef{dgo@**}{\let\dg@VECTOR=\myamazingvector} +\end{verbatim} +where \verb"\myamazingvector" is your custom arrow code (analogous +to \LaTeX's \verb"\vector" command). Note that if this definition is +not in a style file, it needs to be bracketed with +\verb"\makeatletter...\makeatother". You can then use your custom +arrow style like any other option: +\begin{verbatim} + \arrow{sw,t,**}{\Gamma} +\end{verbatim} + +Adding new arrow direction codes is done by defining commands of the +form \verb"\dgt@DIRCODE". These commands set \verb"\vector"-like +parameters to specify the arrow direction (thinking of the arrow as +laid out on a grid where the basic rectangle is unit wide and one +unit high). For example: +\begin{verbatim} + \@namedef{dgt@sse}{\dg@DX=1 \dg@DY=-2 \dg@SIZE=1 } +\end{verbatim} + +You can also customize the way the grid geometry is computed by +redefining the \verb"\dggeometry" command. It must set +the integer parameters \verb"\dg@XGRID" and \verb"\dg@YGRID" and +the length parameter \verb"\unitlength". Each grid rectangle +will then be 1000\verb"\dg@XGRID" by 1000\verb"\dg@YGRID" +\verb"\unitlength"s in size. The assigned values of +\verb"\dg@XGRID" and \verb"\dg@YGRID" should be smallish numbers +(to avoid arithmetic overflow) with \verb"XGRID":\verb"YGRID" +as the desired aspect ratio. As inputs, +you should use the pre-supplied values of \verb"\dg@XGRID" and +\verb"\dg@YGRID", which are the calculated minimum width and +height that grid rectangles must have, measured in scaled +points (sp). + +In plain \LaTeX{} mode, the aspect ratio must be a half-integer +between~$\tfrac12$ and~2 (or the inverse of such) in order to +support the basic 16 compass directions. In {\sc LamS}-\TeX{} mode, +the aspect ratio need only be a half-integer between~$\tfrac12$ +and~3 in order to support these same basic directions; and when +the aspect ratio is chosen from these values, almost all the +arrow directions $(p,q)$ with $\max(|p|,|q|)\le 3$ are supported. +The exceptions are that arrows of type $(\pm 3,\,\pm 2)$ are +only rendered approximately in some aspect ratios, and that +arrows of type $(\pm 3,\,\pm 1)$ are not supported unless +the aspect ratio is a half-integer between~$\tfrac12$ and~2. +The \verb"\dggeometry" macro for {\sc LamS}-\TeX{} mode +{\em automatically\/} detects when it needs to restrict the +aspect ratio because of a type $(\pm 3,\,\pm 1)$ arrow in +the diagram. + + +\section{Upgrading Papers from Previous Versions} + +Some slightly incompatible changes have been made during +the evolution of this package. + +Beginning with version~3.5, the files and names of the packages +were reorganized to simplify electronic publication. Here is a +dictionary to make the translation: +\begin{center} +\begin{tabular}{|l|l|} \hline + Old Packages & New Packages \\ \hline + \tt diagram & \tt pb-diagram \\ + \tt lamsarrow,diagram & \tt pb-diagram,lamsarrow,pb-lams \\ \hline +\end{tabular} +\end{center} +The order of the packages must be as shown in the table. + +Beginning with version~4.0, a bug which caused occasional diagrams +to come out twice too large was eliminated. If you have an old paper +which was tuned for the earlier geometry calculation, you can get +the previous behavior back by including the command +\verb"\let\dggeometry=\dgoldgeometry" in the document's preamble. + + +\section{Implementation Notes} + +All command names defined in the \verb"pb-diagram.sty" style file +begin with ``\verb"\dg"'', except \verb"\diagram", +\verb"\enddiagram", \verb"\node", \verb"\arrow", +\verb"\\", and the \LaTeX{} enhancements \verb"\newoptcommand", +\verb"\newoptenvironment", \verb"\renewoptcommand", and +\verb"\renewoptenvironment". All private commands contain an `@' in +their names. The commands \verb"\node" and \verb"\\" are only defined +within the \verb"diagram" environment. Spaces following the +\verb"\end{diagram}" are ignored. + +In all the macro files in this package, lines have been limited to +less than~70 characters to avoid problems with electronic mailing. + + +\section{Copyright and Acknowledgments} + +The \verb"pb-diagram" package is +copyright \copyright\ 1990, 1992, 1995, 1998 by Paul Burchard. + +This program 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 of the License, or +(at your option) any later version. + +This program 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. + +The file \verb"pb-xy.sty" is +copyright \copyright\ 1998 by Bill Richter, +and is also distributed under the terms of the GNU General Public License. + +The fonts \verb"lams1.mf" through \verb"lams5.mf", as well as the +macros in \verb"lamsarrow.sty", are copyright \copyright\ 1989, +1990, 1991 by The Texplorators Corporation, 1572 West Gray \#377, +Houston, TX 77019--4948. Beginning with version 4.1 of this package, +the fonts include a patch by Ingo Hadan which makes them compatible +with recent versions of \verb"cmbase.mf", and in particular, eliminating +a division-by-zero error that caused certain glyphs to appear wildly deformed. + +I would like to acknowledge inspiration from a macro package of +Marc-Paul van der Hulst. Bill Richter was of major help to me with +his topological torture-testing of this package, and he provided +some spectacular example diagrams for distribution with this package. +Dan Christensen made many good suggestions which were incorporated +into version 4.0. + +\end{document} -- cgit v1.2.3