summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-02 23:48:15 +0000
committerKarl Berry <karl@freefriends.org>2007-04-02 23:48:15 +0000
commite0f182fd8b27038d7b911a1e9a6cdb180ebced8e (patch)
tree3b8d28ca765c26640d1d18a7b073e32e66f3dc41 /Master
parent840c92f5af1df8211bed142e425912394a23ba7a (diff)
separate tugboat-plain package a la ctan
git-svn-id: svn://tug.org/texlive/trunk@4101 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/plain/tugboat-plain/README4
-rw-r--r--Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdfbin0 -> 117297 bytes
-rw-r--r--Master/texmf-dist/doc/plain/tugboat-plain/tubguide.tex869
-rw-r--r--Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn1104
-rw-r--r--Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty2245
-rw-r--r--Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty366
-rw-r--r--Master/texmf-dist/tpm/tugboat-plain.tpm29
-rw-r--r--Master/texmf/lists/tugboat-plain10
-rw-r--r--Master/texmf/tpm/collection-publishers.tpm1
9 files changed, 4628 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/tugboat-plain/README b/Master/texmf-dist/doc/plain/tugboat-plain/README
new file mode 100644
index 00000000000..996049fd4fe
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/tugboat-plain/README
@@ -0,0 +1,4 @@
+(This file in the public domain.)
+
+The plain style files for TUGboat, the journal of the TeX Users Group.
+See http://tug.org/TUGboat for back issues, author information, and more.
diff --git a/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdf b/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdf
new file mode 100644
index 00000000000..5e00b9eea76
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.tex b/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.tex
new file mode 100644
index 00000000000..56a18c8602b
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.tex
@@ -0,0 +1,869 @@
+%% @texfile{
+%% filename = "tubguide.tex",
+%% version = "1.03",
+%% date = "2006/05/24",
+%% time = "09:48:56 EDT",
+%% checksum = "12752 869 4993 34296",
+%% filetype = "TUGboat Authors' Guide",
+%% copyright = "Copyright 1989, 1992, 2006 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% author = "TeX Users Group",
+%% address = "TeX Users Group,
+%% P.O.Box 2311,
+%% Portland, OR 97208-2311,
+%% USA",
+%% telephone = "+1 503 223-9994",
+%% FAX = "+1 206 203-3960",
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, authors' guide",
+%% supported = "yes",
+%% abstract = "This file is an updated version of the file
+%% that produced the original Authors' Guide in
+%% TUGboat 10, no. 3, November 1989.",
+%% docstring = "The checksum field above contains a CRC-16
+%% checksum as the first value, followed by the
+%% equivalent of the standard UNIX wc (word
+%% count) utility output of lines, words, and
+%% characters. This is produced by Robert
+%% Solovay's checksum utility.",
+%% }
+%% *********************************************************
+%%
+%% TeXing this file requires the following files:
+%% TUGBOAT.STY (version 1.09+)
+%% TUGBOAT.CMN (version 1.08+) (loaded by TUGBOAT.STY)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tugboat.sty
+
+\enablemetacode
+\everyverbatim{\enablemetacode}
+\def\halfline{\vskip 0.5\baselineskip \ignoreendline}
+
+% ****************************************************************
+
+\pageno=1
+\def\rtitlex{\def\tubfont{\tenpoint\rm}\TUB{} Authors' Guide, May 2006}
+\def\midrtitle{}
+
+\title *\TUB\/ Authors' Guide*
+
+\author * Ron Whitney *
+\address * \TUG\\
+ \POBox 9506\\
+ Providence, RI 02940-9506 *
+%\netaddress * TUGboat@Math.AMS.com *
+
+\author * Barbara Beeton *
+\address * American Mathematical Society\\
+ 201 Charles Street\\
+ Providence, RI 02904-2294 *
+\netaddress * TUGboat@tug.org *
+
+
+\vfootnote{}{Revised March 1992, May 2006; the original appeared in
+\tubissue 10(3), November 1989.}
+
+\article
+
+With this article we hope to fill a lacuna (some might say ``void'')
+whose existence we have been attributing to the usual factors: tight
+schedules, alternative priorities and warty \TeX\ code. We now feel
+the macros in use for \TUB\/ have stabilized to the extent that
+documentation and suggestions for authors will remain fairly constant,
+and we hope this article can serve as a reasonable guide to
+preparation of manuscripts for \TUB. Authors who have used the \TUB\/
+macros before will note several changes (including more modern names
+for the style files). Suggestions and comments are quite welcome at
+the addresses listed below.
+
+\TUB\/ was originally typeset with a package based only on \plain.
+Later, as demand for style files follows wherever
+\LaTeX-devotees wander, a \TUB\/ variant of the \LaTeX\ {\tt article}
+style was also created. The two macro sets yield
+much the same output, differing in certain ways for input. Below we
+make comment on various aspects of the \TUB\/ package, first for the
+\plain-based macros, then for \LaTeX. The macro sets share
+the file |tugboat.cmn|,\footnote{$^1$}{This file used to be named
+{\tt tugboat.com}, but that notation was in conflict with conventions
+of \acro{MS-DOS} and other operating systems; no conflicts are known to
+exist for the new name.} and users of either style should read the
+section entitled ``Common Abbreviations and Utilities''. We conclude
+with some general suggestions to help make the lives of those on the
+receiving end of (any kind of) electronic copy a little easier.
+
+
+\head * The \plain-based macros: {\tt tugboat.sty} *
+
+The macros are contained in two files, |tugboat.sty| and |tugboat.cmn|.$^1$
+
+\subhead * General description of tags *
+We attempt wherever possible to tag the various elements of \TUB\/
+articles in a ``generic'' way, modified in some respects by
+convenience. Authors and editors, of course, need tools to shape
+their articles to the form they desire, but we also wish to encourage
+a tagging style which is appropriate for electronic interchange. It
+seems unfair to expect much thought from authors concerning the
+markup of their information if we only provide a bag of widgets and
+do-hickies to hack and pound an article together. The tags whose use
+we encourage are the higher-level tags that mark the logical
+document structure. Below these are formatting macros that we
+recognize may be essential for certain applications. Both sorts of
+tags are described in the following article.
+
+Generally, to ``mark up'' the data <foo>, a tag |\xxx| will precede
+<foo> and |\endxxx| will follow (thus: |\xxx <foo>\endxxx|). We use
+the |{...}| form to delimit arguments of lower-level formatting
+macros. Optional commands follow tags and are enclosed in
+|[\lastoption][...]|, \`a la \LaTeX. Several options may be enclosed
+within one set of square brackets, or each
+option may be enclosed in its own set of brackets. These ``options''
+are actually just \TeX{} commands, and it is always possible to
+insert raw \TeX{} code as an option. Such practice violates truly
+generic markup, but it is {\it helpful\/} and at least confines
+The Raw and Dirty to a smaller area.
+\subtext
+Perhaps a little more detail is of use to some readers here.
+Upon encountering a tag, the general operational scheme of the
+macros is as follows:
+\verbatim[\makecomment\%]%
+[\def\lquote{`}\def\rquote{'}\makeescape\|\makebgroup\`\makeegroup\']%
+[\displaystyle{\everypar{\hangindent2\parindent}\advance\baselineskip by 1pt}]
+<read tag>
+\begingroup
+<set defaults>
+\the\every...
+<read options>
+<branch to appropriate action,|hfil|break|ignoreendline
+using `|rm|lquote|lquote'argument|/`|rm|rquote|rquote' as necessary>
+<cleanup>
+\endgroup
+\endverbatim
+The scheme shows that code inserted as an option is localized and that
+it may be used to override certain defaults and to guide branching.
+Things are not always simple, however. Sometimes parameters are set
+after a branch is taken (e.g.\ the macros might only call |\raggedright|
+after determining whether the mode is ``|\inline|'' or
+``|\display|''), and, despite localization, parameter setting might
+affect the current paragraph if a branch has yet to be taken.
+This is {\it not\/} to say the macros don't work, but rather that
+those authors who venture beyond the documented regions of the
+macros should do so with their eyes open.
+\endtext
+
+For convenience, we also allow the |*| as a delimiter for the
+higher-level tags; thus we could use either
+||\title \TUB\/ Authors' Guide \endtitle||
+or
+||\title * \TUB\/ Authors' Guide *||
+to indicate the title of this paper. To typeset a \ast{} within text
+delimited by |*|, the \plain\ control sequence |\ast| has been extended
+to give
+\ast{} in text and the usual $\ast$ in math.
+\subtext
+This markup scheme may suffer at the hands of \TeX's parsing mechanism
+when tagged data is nested. In these cases, one may group (|{...}|)
+embedded data so that \TeX{} knows to proceed to the next |\end...|
+or |*|.
+\endtext
+
+In the cases where we show extra spaces and carriage returns around
+arguments in this article, those (discretionary) spaces are
+accommodated in the macros. Thus, for example, when the argument to
+|\title| above is typeset, |\ignorespaces| and |\unskip| surround it
+and the extra spaces have no untoward effect. Spaces are also
+gobbled between options.
+
+
+\subhead * Outer form *
+At the outermost level, a source file will have the form (using the
+|*...*| delimiters):
+\verbatim[\makeescape\|]
+\input tugboat.sty
+|halfline
+<perhaps additional macros for article>
+|halfline
+\title * <title> *
+\author * <author> *
+\address * <address> *
+\netaddress * <network address> *
+|halfline
+\article
+|vellipsis
+<body of article>
+|vellipsis
+\makesignature
+\endarticle
+\endverbatim
+
+Data preceding |\article| is saved and typeset when |\article|
+is encountered. Each author should have his/her own
+||
+\author ...
+\address ...
+\netaddress ...
+||
+block, and the macros will do their best to combine the information
+properly in the appropriate places. Explicit linebreaks can be
+achieved within any of these items via |\\|. Title and authors are,
+of course, set at the beginning of an article; the address
+information is listed separately in a ``signature'' near the end of
+an article, and is present for the convenience of those who might
+photocopy excerpts from an issue of \TUB. |\makesignature| does the
+typesetting work. Generally authors are listed separately in the
+signature. In cases where authors and addresses are to be combined,
+one may use |\signature{...}| and |\signaturemark| with some or all
+of
+||
+\theauthor {<author number>}
+\theaddress {<author number>}
+\thenetaddress {<author number>}
+||
+to get the desired result. For example, for an article with%
+\footnote{$^2$}{\xEdNote The \TUB{} address shown in examples
+was current when this article first appeared, but is now obsolete;
+it has been left intact to avoid other problems. The correct address
+is now {\tt TUGboat@tug.org}.}
+\verbatim[\outputtofile{ray.vbm}]
+\author * Ray Goucher *
+\address * \TUG *
+\netaddress *TUG@Math.AMS.com*
+
+\author * Karen Butler *
+\address * \TUG *
+\netaddress *TUG@Math.AMS.com*
+\endverbatim
+we could say
+\verbatim[\outputtofile{sig.vbm}]
+\signature {
+ \signaturemark
+ \theauthor1 and \theauthor2\\
+ \theaddress1\\
+ \thenetaddress1}
+\endverbatim
+to obtain the signature
+\begingroup
+\authornumber=0
+\input ray.vbm
+\input sig.vbm
+\makesignature
+\medskip
+\endgroup
+
+\noindent
+Use of at least |\thenetaddress| is recommended for this just so that
+the network address gets formatted properly. The optional command
+|[\lastoption][\network{...}]| will introduce the network address
+with a network name, so
+||[\outputtofile{code.vbm}]
+\netaddress[\network{Internet}]
+ * TUGboat@Math.AMS.com *
+||
+produces
+{\authornumber=1
+ \input code.vbm
+ \figure[\mid\nofloat] \leftline{\kern\parindent\thenetaddress1} \endfigure
+}
+
+\leavevmode|\endarticle| marks the end of input and is defined as
+|\vfil\end| for most uses. We redefine it as |\endinput| to
+assemble streams of articles in \TUB.
+
+
+\subhead * Section Heads *
+Heads of sections, subsections, etc.\ are introduced with |\head|,
+|\subhead|, etc., respectively. The underlying macros all use
+|\head|, so |\endhead| is the long-form ending for all these tags.
+For example, the first two heads of this article could have been
+keyed as
+||
+\head The \plain-based macros:
+ {\tt tugboat.sty} \endhead
+||
+and
+||
+\subhead General description of
+ tags \endhead
+||
+
+In \TUB\/ style, the paragraph following a first-level head is not
+indented. This is achieved by a look-ahead mechanism which gobbles
+|\par|s and calls |\noindent|. Actually all of the |\...head| tags
+gobble pars and spaces after their occurrence. This allows one to
+enter a blank line in the source file between head and text, such
+practice being a visual aid to your friendly \TUB\/ editors (if not to
+you). Be careful of that |\noindent| after a first-level head:
+you will be in horizontal mode after the |\head *...*|, so spaces
+which {\it appear\/} innocuous, may not be so.
+
+
+\subhead * Lists *
+Lists are everywhere, of course, and a simple list hierarchy can
+transform a one-dimensional typesetting problem into something
+nasty. All of which is to say, we are certainly not done with
+this area of tagging, but here are the available macros.
+
+Not surprisingly, |\list| marks the beginning of a list. A list
+can be itemized, wherein each item is tagged with |\item|, or
+unitemized wherein items are delimited by |^^M| (the end of your
+input line). The itemized
+style is the default and |[\lastoption][\unitemized]| will get
+the other. Tags for the items default to the |\bullet|
+($=\bullet$), but can be changed by feeding an argument to
+|\tag{...}|. The |[\lastoption][\tag{...}]| option
+used with |\list| assigns the tag for each item of the entire
+list, while |[\lastoption][\tag{...}]| used with |\item| changes
+only the tag for that item. The obvious dynamical tags are available
+with options
+\verbatim[\makeescape\|\makebgroup\`\makeegroup\']
+\numbered
+\romannumeraled
+\lettered `|rm(lowercase)'
+\Lettered `|rm(uppercase)'
+\endverbatim
+
+Lists can be set in several columns by setting |\cols=...|. The
+columns are aligned on their top baselines and the user must
+break the columns with |\colsep|. Thus,
+\verbatim[\outputtofile{code.vbm}]
+\list[\unitemized\numbered][\cols=2]
+Fourscore
+and seven
+years ago
+our fathers
+\colsep
+brought forth
+on this
+continent
+\endlist
+\endverbatim
+yields
+\input code.vbm
+
+|\everylist| is a token register which is scanned at the beginning
+of each list
+after the default parameters are set and before
+options are read. If you want all your lists numbered, for example,
+you might insert ||\everylist{\numbered}|| at the top of your file
+rather than giving an option to each list.
+
+Implementation of sublists is under construction.
+
+\subhead * Verbatim Modes *
+
+There are several variations on this theme. In each case, text is
+printed in a typewriter font and (almost) all input characters
+produce the glyph in the font position of their character-code (i.e.\
+you get what you type, no escaping it). In addition to the long form
+||\verbatim...\endverbatim|| the \verbinline|\endverbatim\ character
+can be used to enter and leave verbatim mode, acting as a toggle much
+as the |$| does with math. \verbinline|...|\endverbatim\space
+produces inline verbatim text, while \verbinline||...||\endverbatim
+displays its output. |\verbatim| itself defaults to display form,
+but |\verbatim[\inline]| and its contraction |\verbinline| (both
+terminated by |\endverbatim|) produce the inline form. |^^M| yields
+a space inline, and a new paragraph in display. Generally, for
+snippets of text we use the \verbinline|...|\endverbatim form, and
+for longer items the
+||[\makeescape\!]
+\verbatim
+!vellipsis
+\endverbatim
+||
+form (although \verbinline||...||\endverbatim is a good way to
+display a single line of code).
+
+In addition to formatting text between |\verbatim| and
+|\endverbatim|, |\verbatim| may read and write data from and to
+files. We find this variant useful in ({\it almost\/}) guaranteeing
+consonance between macros in use and their published listings.
+||[\makeescape\!]
+\verbatim[\inputfromfile{foo.inp}]
+!vellipsis
+\endverbatim
+||
+will incorporate the contents of file |foo.inp| in the listing before
+the text between |\verbatim| and |\endverbatim|. The shortened form
+||\verbfile{foo.inp}\endverbatim|| accomplishes the above in the case
+that the text is empty. While the code around the data, |foo.inp|,
+above looks excessively long, do remember the implementation
+uses the basic |\verbatim| macro, so options can also be read after
+the filename. For example,
+||
+\verbfile{foo.inp}[\numbered]
+\endverbatim
+||
+would number the lines of the listing.
+
+We often rearrange code supplied to us so
+that it fits in the narrow measure of \TUB's two-column format, and
+we sometimes make corrections to macro sets (you thought you were
+perfect!). Since errors can (and do\Dash we aren't perfect either)
+creep in with these modifications, we use the above technique to
+maintain consistency between the listing published in \TUB\/ and the
+underlying macros used for examples.
+
+To write out information, use
+||[\makeescape\!]
+\verbatim[\outputtofile{foo.out}]
+!vellipsis
+\endverbatim
+||
+An added bonus here is that characters which get internalized as
+moribund ``letters'' or ``others'' in the process of listing them,
+can return revitalized for perhaps their real use when written out to
+another file and read in again. The example above involving Ray
+and Karen was coded as
+||[\makeescape\/][\makeactive\!][\def!{\VertChar}]
+... to get the desired result. For
+example, for an article with
+\verbatim[\outputtofile{ray.vbm}]
+\author * Ray Goucher *
+/vellipsis
+\endverbatim
+we could say
+\verbatim[\outputtofile{sig.vbm}]
+\signature {
+ \signaturemark
+ \theauthor1 and \theauthor2\\
+ \theaddress1\\
+ \thenetaddress1}
+\endverbatim
+to obtain the signature
+\begingroup
+\authornumber=0
+\input ray.vbm
+\input sig.vbm
+\makesignature
+\endgroup
+||
+This is perhaps not the most edifying example, but you get the gist.
+(We localize the process of storing and retrieving these
+authors and addresses so as not to clobber our own.)
+We would encourage our authors to use these mechanisms for connecting
+verbatim text to external files for the sake of maintaining
+consistency between active code and its documentation.
+
+\leavevmode|\verbatim| scans to |\endverbatim| (a 12-token sequence
+since the |\| is of type `other' after |\verbatim| gets going). Only
+this sequence of characters will interrupt the scan. On the other
+hand, \verbinline|\endverbatim and \verbinline||\endverbatim scan to
+the next \verbinline|\endverbatim and \verbinline||\endverbatim,
+respectively. Needless to say, one should use forms of |\verbatim|
+to set text which contains \verbinline|\endverbatim (and
+\verbinline|\endverbatim or \verbinline||\endverbatim to set text
+containing |\endverbatim| if you are writing an article like this
+one). Both the \verbinline|\endverbatim and |\verbatim| tags scan
+ahead for the usual |[\lastoption][| to check for options. In those
+rare cases when the |[\lastoption][| is really supposed to be the
+first character of the verbatim text, use the option
+|[\lastoption][\lastoption]| to stop option parsing. For example, to
+show ||[\lastoption][\lastoption]|| we keyed
+\verbatim
+|[\lastoption][\lastoption]|
+\endverbatim
+
+There are situations where one wants to typeset most things verbatim,
+but ``escape'' to format something exceptional. For example, the
+insertions of metacode given in the listings above require some
+access to the italic font. By giving the option
+|[\lastoption][\makeescape\!]| to |\verbatim|, the |!| is made an
+escape character in that block. Thus,
+||[\makeescape\/]
+\verbatim[\makeescape\!]
+/vellipsis
+...!it...
+/vellipsis
+\endverbatim
+||
+really calls the italic font in the middle of the listing (one might
+also want to use |\makebgroup| and |\makeegroup| in the options to define
+characters to localize this call; see p.~7). Situations
+will dictate preferences for what character may be used as an escape
+(we use the \verbinline|\endverbatim, |!|, and |/| in this article).
+There is also a means of changing the setup of every occurrence of
+verbatim mode. The contents of token register |\everyverbatim|
+is scanned after the defaults of verbatim mode
+have been set. In this article, for example, we have made
+|[\makeother\<]<| active and defined it in such a way that
+|[\makeother\<]<...>| typesets as metacode. Since |\verbatim|
+ordinarily changes |[\makeother\<]<| to type `other' on startup, we key
+||\everyverbatim{\enablemetacode}|| at the beginning of the file
+to have the proper adjustment made whenever verbatim is started.
+
+When ``escaping'' within a verbatim block, one should be aware that
+spaces and carriages returns are {\it active\/} and hence not gobbled
+as usual. Using the |!| as the active character, one might key
+||[\makeescape\/]
+\verbatim[\makeescape\!]
+/vellipsis
+!vskip .5!baselineskip
+/vellipsis
+\endverbatim
+||
+to get an extra half line of space in the middle of the listing. The
+space and carriage return on this line, however, cause problems. The
+space expands to |\ifvmode\indent\fi\space| and \TeX\ will not like
+the |\indent| after |\vskip|. The |^^M| expands to
+|\leavevmode\endgraf|, and therefore puts an extra line into the
+listing. The solutions, in this case, are to drop the space and to
+use |!ignoreendline| (which just gobbles the |^^M|), but one should
+be aware, generally, that some thought may be required in these situations.
+
+The option |[\lastoption][\numbered]| causes the lines of a
+verbatim listing to be numbered, while |[\lastoption][\ruled]|
+places rules around the whole thing:
+\verbatim[\numbered\ruled]
+<code>
+<more code>
+<yet more code>
+...
+\endverbatim
+The option |[\lastoption][\continuenumbers]| picks up the numbering
+where it last left off.
+\verbatim[\continuenumbers]
+<more>
+<and more>
+...
+\endverbatim
+
+The code underlying |\verbatim| in display style implements each line
+as a paragraph and places math-display-size whitespace above and
+below the verbatim section. Page and column breaks {\it are\/}
+permitted within these listings. To prohibit breaks at specific
+points or globally, one must insert penalties or redefine |^^M| to
+insert |\nobreak| in the vertical list at the end of each
+``paragraph'' (i.e.\ line). We should also note that the bottom of
+such a verbatim listing is implemented so that ensuing
+text may or may not start a new paragraph depending on whether an
+intervening blank line (or |\par|) is or is not present.
+
+
+\subhead * Figures and Page Layout *
+Figures are keyed as
+\verbatim[\makeescape\|]
+\figure
+|halfline
+<vertical mode material>
+|halfline
+\endfigure
+\endverbatim
+These are generally implemented as single-column floating
+top-insertions, but the options |[\lastoption][\mid]| and
+|[\lastoption][\bot]| can change specific items to be mid- or
+bottom-insertions, respectively. Here we recommend that the
+long-form terminator be used ({\it not\/} the |*...*| form). One can
+think of the information ``passed'' as being ``long'' in the sense of
+possibly containing paragraphs, this being a mnemonic device only.
+The primary reason for the recommendation is that one is (in some
+sense, maybe) more likely to encounter a rogue |*| in longer text
+than in shorter text and hence more likely to encounter a surprising
+result due to a macro stopping short at the wrong |*|.
+
+\subtext
+Perhaps here is a natural place to mention also that these macros
+sometimes read their arguments and then act, and sometimes act on the
+fly, not actually storing an argument as a string of tokens at all.
+|\title|, for example, is in the former category, while |\figure| is
+in the latter. Reasons may vary for the choice in
+methods. Storing a string of tokens as an argument does not allow
+re-interpretation of the category codes of the underlying
+character string. Thus, storing
+the ``argument'' of |\figure| all at once might misinterpret some
+characters which should appear as verbatim text. For this reason we
+set figures as we go and just close off the box with |\endfigure|. On
+the other hand, using information in multiple situations (e.g.\
+titles and running heads) requires storing the information as a token
+string, not as a typeset list.
+
+When text delimited by |*...*| is read as an argument, the |*|s are
+dropped by the parsing process. When the text is handled on the fly,
+the first |*| is gobbled and the second is made active to perform
+whatever action is necessary at the close of the macro. When
+possible, we prefer to operate on the fly since nested tags are
+handled properly in that case and no memory is consumed to store
+arguments. Examination of |tugboat.sty| will show which case applies
+in a given situation, but this general knowledge may help when trying
+to debug those situations in which an unexpected |*| has disrupted
+things.
+\endtext
+
+
+A primitive |\caption{...}| option is available to |\ulap|
+(i.e.\ lap upward) its argument into the figure space, but
+formatting of the caption is left to the user. For example,
+the code:
+\verbatim[\outputtofile{code.vbm}]
+\figure[\top]
+ [\caption{\centerline{Odd Fig.~1}}]
+\vbox to 5pc{}
+\endfigure
+\endverbatim
+produces the figure at the top of this column or the next.
+
+\input code.vbm
+
+Figures spanning columns at the top and bottom of a page are currently
+supported only on the first page of an article, but we expect they
+will soon be allowed on any page (a general rewrite of the output
+routine is in progress). |\twocolfigure| (terminated by |\endfigure|)
+starts up such a figure and currently {\it must\/} occur before any
+material has been typeset on the first page (i.e.\ {\it before\/}
+|\article|).
+
+
+Macros |\onecol|, |\twocol|, and |\threecol| provide one-, two-, and
+three-column layouts, but these cannot currently be intermixed on a
+page. We hope to provide automatic column-balancing and convenient
+switching between one- and two-column format within a year.
+|\newpage| in each format is defined to fill and eject enough columns
+to get to the next page. |\newcol| is just |\par\vfill\eject|.
+
+\subhead * Command List Summary *
+Tags are listed in the order discussed. Options are
+listed under tags.
+||
+\title
+\author
+\address
+\netaddress
+ \network
+\signature
+\article
+\makesignature
+\endarticle
+\head
+\subhead
+\subsubhead
+\list
+ \numbered
+ \romannumeraled
+ \lettered
+ \Lettered
+ \ruled
+ \tag{...}
+\item
+ \tag{...}
+\everylist
+\verbatim
+ \numbered
+ \ruled
+ \inputfromfile{...}
+ \outputtofile{...}
+\verbinline
+\verbfile
+\figure
+ \mid
+ \bot
+ \caption{...}
+\twocolfigure
+||
+and, of course, \verbinline|\endverbatim and \verbinline||\endverbatim.
+
+\head * The \LaTeX\ macros: {\tt ltugboat.sty}%
+\footnote{$^3$}{This discussion of {\tt ltugboat.sty} is now of
+historical interest only; it has been superseded by a \LaTeXe{}
+documentclass, {\tt ltugboat.cls}, available from \CTAN.} *
+
+|ltugboat.sty| is the primary macro file, and is based on the \LaTeX{}
+|article.sty|. |tugboat.cmn|, a collection of items common to both
+\LaTeX\ and \plain\ input, is also required. Articles will have
+the form:\footnote{$^4$}{{\tt ltugboat} used to be a substyle; it now
+stands on its own, by automatically inputting {\tt article.sty}.}
+\verbatim[\makeescape\|]
+\documentstyle{ltugboat}
+|halfline
+<perhaps additional macros for article>
+|halfline
+\title {<title>}
+\author{<author>}
+\address{<address>}
+\netaddress{<netaddress>}
+
+\begin{document}
+\maketitle
+|vellipsis
+<body of article>
+|vellipsis
+\makesignature
+\end{document}
+\endverbatim
+This is the usual form for \LaTeX\ documents, of course, except
+that now each author will have his/her own
+\verbatim
+\author{...}
+\address{...}
+\netaddress{...}
+\endverbatim
+block. As with the \plain{} style, the author and address
+macros will store their information for later display.
+See the discussion of |\address|, |\netaddress| and |\makesignature|
+on the second page of this article to understand more. Linebreaks
+within |\title|, |\author|, and |\...address| are specified with |\\|.
+
+We refer the user to the \LaTeX\ manual for description of section
+heads, verbatim mode, insertions, and movement between one- and
+two-column format. The style of printed output has, of course, been
+somewhat modified to fit \TUB\/ style. |ltugboat.sty| might be of some
+use to others wishing to modify the |article| option in this
+direction.
+
+
+
+\head * Common Abbreviations and Utilities *
+
+Definitions of a number of commonly used abbreviations such as |\MF|
+and |\BibTeX| are contained in |tugboat.cmn|. Please use these whenever
+possible rather than creating your own. We will add to the list as
+necessary.
+
+A nicety for the sake of appearance is the command |\acro|, which
+sets an acronym in caps one size smaller than the surrounding text.
+Compare CTAN (full size), \CTAN{} (|\acro{CTAN}|) and {\smc ctan}
+(small caps). Acronyms in |tugboat.cmn| use |\acro| consistently.
+
+Several other constructions that we have found useful for both
+\plain- and \LaTeX-style input have been incorporated in
+|tugboat.cmn|. Various |\*lap|\,s (|\ulap|, |\dlap|, |\xlap|,
+|\ylap|, |\zlap|) and |\*smash|\,es provide means of setting type
+which ``laps'' into neighboring regions. |\dash| and |\Dash| are en-
+and em-dashes that break properly. |\slash| is a breakable slash.
+The macro
+\verbatim
+\makestrut [<ascender dimen>;
+ <descender dimen>]
+\endverbatim
+allows {\it ad hoc\/} construction of
+struts.
+
+|\makeatletter| |\catcode|s the |@| for internal control-sequences.
+There are also more general functions
+\verbatim
+\makeescape
+\makebgroup
+\makeegroup
+\makeletter
+\makeother
+\makeactive
+\endverbatim
+that change the category of a given character into the type mentioned
+at the end of the macro name. For example, |\makeactive\!| changes the
+category of the |!| to 13. We have given many other examples of these in
+this article. Readers may look at the end of |tugboat.cmn| after the
+|\endinput| statement to see further documentation on the contents of the file.
+
+
+\subhead * Issue Makeup *
+Constructing an entire issue of \TUB\/ requires use of a few features
+that authors may notice when articles are returned for proofing.
+|\xrefto| allows for symbolic cross-referencing, but is enabled only
+late in the production process. The distribution version of
+|tugboat.cmn| defines |\xrefto| so that ``???'' is typeset whenever it
+is called. Not to worry.
+
+We also put notes into the file since there are many things to
+remember, and these appear as |\TBremark{...}|. Authors can look for
+such things, if they are interested.
+
+
+\head * General Coding Suggestions *
+
+Probably 90\% of the code we receive is easily handled, and for this
+we are most appreciative. We do have suggestions of a general nature
+that authors should keep in mind as they create articles for
+transmission here or anywhere else.
+
+Those who create code find it much easier to read and understand their
+own code than do others who read the ``finished'' product. In fact,
+some people seem to forget that the electronic file will be viewed (in
+fact, studied) in addition to the printed copy. Documentation and
+uniform habits of presentation always help. Blank lines are easier to
+digest by eye than |\par|s. Tables and display math can often be
+keyed in such a way that rows and columns are clear in the source file
+on a display screen as well as in print. Explanations or warnings of
+tricky code can be {\it very} helpful. Authors should place font and
+macro definitions in one location at the beginning of an article
+whenever possible.
+
+Authors should anticipate that articles will undergo some
+transformation, and that positioning of some elements may change
+simply because articles are {\it run together\/} in \TUB. Decisions
+on linebreaks, pagebreaks, figure and table placement are generally
+made after the text is deemed correct. We avoid inserting ``hard''
+line- and page-breaks whenever possible, and will not do so, in any
+case, until the last minute. We also use floating insertions for
+figure and table placement when we first receive an article. It is
+easier for us to work with a clean file containing some bad breaks,
+overfull boxes or other unsightliness, than it is to handle a document
+containing {\it ad hoc\/} code dedicated to a beauteous (albeit
+narrowly specific) result.
+
+
+When authors proof their articles in formats other than that of \TUB\/
+(for example), they should expect that \TUB's changes in pagewidth and
+pagedepth may drastically alter text layout. Paragraphs are rebroken
+automatically when |\hsize| and |\vsize| change, but |\centerline|
+does not break, and we often see tables and math displays which are
+rigidly laid out. When possible, authors might use paragraphing
+techniques instead of calls to, say, |\centerline| (Beeton will be
+writing up her lectures on paragraphing techniques for a future issue
+of \TUB\/), and they should try to code tables in such a way that
+widths of columns can be changed easily. Generally, authors should
+attempt to anticipate the work that might be necessary if requests for
+other reasonable formats of their texts are made. In the case of
+\TUB, we make a strong effort to stuff macro listings and tables into
+the two-column format. Since these types of items are not generally
+susceptible to automatic line-breaking, we give thanks to stuffings
+made by authors ahead of time. In this context, we recommend the use
+of |\verbfile{...}| (see the section {\bf Verbatim Modes}) to maintain
+consistency between documentation and reality.
+
+Specifically in the domain of \TeX\ macros, we find that many authors
+throw in unnecessary |%| characters to end code lines. Except in
+cases where the |^^M| means something other than end-of-line,
+linebreaks can reliably be placed after control-words and numerical
+assignments. We have seen \TeX's buffer size exceeded when |%|
+was placed after {\it every\/} line.
+
+A wider perspective in the matter of naming macros can prevent
+problems that occur when definitions are overwritten as articles are
+run together. The names of control sequences used in \plain, \LaTeX,
+and \AmSTeX\ are documented and authors should avoid using them for
+other purposes. It is also wise to avoid commonly used names such as
+|\temp|, |\result|, |\1|, and |\mac| in presenting code that might be
+cribbed by other users. The frequently used technique of temporarily
+|\catcode|ing a character to be a letter (e.g.\ the |@|) provides a
+good method of hiding control sequences so that they will not be
+clobbered later. Readers are in need of small macros to do little
+tricks, and they often try suggestions brought forth in \TUB. A
+little extra effort in making these macros consistent with the macros
+in wide distribution and in making them robust will be much
+appreciated.
+
+\TBremark{Anything about formatting macros?}
+
+
+\head * Electronic Documentation and Submission Procedure *
+
+In addition to |tugboat.sty|, |ltugboat.sty|, and |tugboat.cmn|,
+a copy of this article, |tubguide.tex|, will be available at
+most \TeX{} archives, in particular \CTAN.
+
+Please address all electronic correspondence to the \TUB{} maildrop:
+||TUGboat@tug.org||
+Mail to personal addresses is liable to go unseen if
+vacation or illness intervenes. We also request that you supply
+an abstract of any expository article. This will be used as the
+basis for translation of abstracts to languages other than that
+in which the article is published.
+
+
+\makesignature
+
+\endarticle
diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn
new file mode 100644
index 00000000000..854ff5e7146
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn
@@ -0,0 +1,1104 @@
+%% @texfile{
+%% filename = "tugboat.cmn",
+%% version = "1.18",
+%% date = "2006/06/07",
+%% time = "13:41:59 EDT",
+%% checksum = "29788 1064 3117 35978",
+%% filetype = "common macros for TUGboat",
+%% copyright = "Copyright 1993-1996, 2006 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% author = "TeX Users Group",
+%% address = "TeX Users Group,
+%% P.O.Box 2311,
+%% Portland, OR 97208-2311,
+%% USA",
+%% telephone = "+1 503 223-9994",
+%% FAX = "+1 206 203-3960",
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, common macros",
+%% supported = "yes",
+%% abstract = "This file contains macros common to both
+%% the PLAIN and LaTeX style files for TUGboat,
+%% the Communications of the TeX Users Group.
+%% Among other things, it contains supplementary
+%% definitions for abbreviations and logos that
+%% appear in TUGboat.",
+%% docstring = "The checksum field above contains a CRC-16
+%% checksum as the first value, followed by the
+%% equivalent of the standard UNIX wc (word
+%% count) utility output of lines, words, and
+%% characters. This is produced by Robert
+%% Solovay's checksum utility.",
+%% }
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fileversion{v1.18}
+\def\filedate{2006/06/07}
+
+\message{File `TUGBOAT.CMN' \fileversion \space\space <\filedate>}
+
+%
+% ***** TUGBOAT.CMN *****
+%
+% See the bottom of the file (after \endinput) for a list of
+% items defined.
+%
+
+% *************************************************************************
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** helpful shorthand *****
+%
+
+% The following allow for easier changes of category. These require that
+% the character be addressed as a control-sequence: e.g. \makeescape\/ will
+% make the / an escape character.
+
+\def\makeescape#1{\catcode`#1=0 }
+\def\makebgroup#1{\catcode`#1=1 }
+\def\makeegroup#1{\catcode`#1=2 }
+\def\makemath#1{\catcode`#1=3 }
+\def\makealign#1{\catcode`#1=4 }
+\def\makeeol#1{\catcode`#1=5 }
+\def\makeparm#1{\catcode`#1=6 }
+\def\makesup#1{\catcode`#1=7 }
+\def\makesub#1{\catcode`#1=8 }
+\def\makeignore#1{\catcode`#1=9 }
+\def\makespace#1{\catcode`#1=10 }
+\def\makeletter#1{\catcode`#1=11 }
+\def\makeother#1{\catcode`#1=12 }
+\def\makeactive#1{\catcode`#1=13 }
+\def\makecomment#1{\catcode`#1=14 }
+
+\def\makeatletter{\catcode`\@=11 } % included for historical reasons
+\chardef\other=12
+\def\makeatother{\catcode`\@=\other}
+
+ % alternative to localization
+\def\savecat#1{%
+ \expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}}
+\def\restorecat#1{\catcode`#1=\csname\string#1savedcat\endcsname}
+
+
+\savecat\@
+\makeletter\@ % used, as in PLAIN, in protected control sequences
+
+ % for restoring meanings of global control sequences
+\def\SaveCS#1{%
+ \def\scratch{\expandafter\let\csname saved@@#1\endcsname}%
+ \expandafter\scratch\csname#1\endcsname}
+\def\RestoreCS#1{%
+ \def\scratch{\expandafter\let\csname#1\endcsname}%
+ \expandafter\scratch\csname saved@@#1\endcsname}
+
+
+% To distinguish between macro files loaded
+
+\def\plaintubstyle{plain}
+\def\latextubstyle{latex}
+\ifx\tugstyloaded@\undefined\let\tugstyloaded@\plaintubstyle\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** abbreviations and logos *****
+%
+
+\def\acro#1{{\SMC #1}\spacefactor1000 }
+
+\def\AllTeX{(\La)\TeX}
+\def\AMS{American Mathematical Society}
+\def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}}
+\def\AmSLaTeX{\AmS-\LaTeX}
+\def\AmSTeX{\AmS-\TeX}
+\def\ANSI{\acro{ANSI}}
+\def\ASCII{\acro{ASCII}}
+\def\aw{A\kern.1em-W}
+\def\AW{Addison\kern.1em-\penalty\z@\hskip\z@skip Wesley}
+\def\BibTeX{{\rm B\kern-.05em{\smc i\kern-.025emb}\kern-.08em\TeX}}
+\def\CandT{{\sl Computers \& Typesetting}}
+\def\ConTeXt{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
+\def\Cplusplus{C\raise.7ex\hbox{$_{++}$}}
+\def\CSS{\acro{CSS}}
+\def\CTAN{\acro{CTAN}}
+\def\DTD{\acro{DTD}}
+\def\DVD{\acro{DVD}}
+\def\DVI{\acro{DVI}}
+\def\DVIPDFMx{\acro{DVIPDFM}$x$}
+\def\DVItoVDU{DVIto\kern-.12em VDU}
+\def\eTeX{$\varepsilon$-\kern-.125em\TeX}
+\def\FAQ{\acro{FAQ}}
+\def\FTP{\acro{FTP}}
+\def\GNU{\acro{GNU}}
+\def\GUI{\acro{GUI}}
+\def\Hawaii{Hawai`i}
+\def\HTML{\acro{HTML}}
+\def\HTTP{\acro{HTTP}}
+\def\ISBN{\acro{ISBN}}
+\def\ISO{\acro{ISO}}
+\def\ISSN{\acro{ISSN}}
+\def\JPEG{\acro{JPEG}}
+% Japanese TeX
+\def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}}
+\def\JoT{{\sl The Joy of \TeX\/}}
+\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont2 M}\kern-.125em
+ {\the\textfont2 S}-\TeX}
+% note -- \LaTeX definition is from LATEX.TEX 2.09 of 7 Jan 86,
+% adapted for additional flexibility in TUGboat
+%\def\LaTeX{\TestCount=\the\fam \leavevmode L\raise.42ex
+% \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+% note -- broken in two parts, to permit separate use of La,
+% as in (La)TeX
+\def\La{\TestCount=\the\fam \leavevmode L%
+ \setbox\TestBox=\hbox{$\fam\TestCount\scriptstyle A$}%
+ \kern-.5\wd\TestBox\raise.42ex\box\TestBox}
+\def\LaTeX{\La\kern-.15em\TeX}
+\def\LaTeXe{\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$}
+\def\MacOSX{Mac\,\acro{OS\,X}}
+\def\MathML{Math\acro{ML}}
+% for Robert McGaffey
+\def\Mc{\setbox\TestBox=\hbox{M}M\vbox to\ht\TestBox{\hbox{c}\vfil}}
+% Additional sizes of the manual font may be needed.
+\font\manual=logo10 % font used for the METAFONT logo, etc.
+\def\MF{{\manual META}\-{\manual FONT}\spacefactor1000 }
+\def\MP{{\manual META}\-{\manual POST}\spacefactor1000 }
+\def\mf{{\smc Metafont}}
+\def\MFB{{\sl The \slMF book}}
+% multilingual (INRS) TeX
+\def\mtex{T\kern-.1667em\lower.5ex\hbox{\^E}\kern-.125emX\spacefactor1000 }
+\def\NTStext{N\mkern-4mu \lower.5ex\hbox{$\cal T$}\mkern-2mu S}
+\def\NTS{{\ifmmode \cal\NTStext \else $\cal\NTStext $\fi}}
+\def\OMEGA{$\Omega$}
+\def\OCP{\OMEGA\acro{CP}}
+\def\OTP{\OMEGA\acro{TP}}
+\def\Pas{Pascal}
+\def\pcMF{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}MF\spacefactor1000 }
+\def\PCTeX{PC\thinspace\TeX}
+\def\pcTeX{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}\TeX}
+\def\PDF{\acro{PDF}}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\spacefactor1000 }
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\plain{{\tt plain}}
+\def\PNG{\acro{PNG}}
+\def\POBox{P.\thinspace O.~Box }
+%\def\POBoxTUG{\POBox\unskip~9506, Providence, RI~02940}
+\def\PS{{Post\-Script}}
+\def\RTF{\acro{RTF}}
+\def\SC{Steering Committee}
+\def\SGML{\acro{SGML}}
+\def\SliTeX{{\rm S\kern-.06em{\smc l\kern-.035emi}\kern-.06em\TeX}}
+% for \def\slMF{{\manualsl META}\-{\manualsl FONT}\spacefactor1000 }
+% Use \font\manualsl=logosl10 instead, if it's available,
+\def\slMF{\MF}
+% Atari ST (Klaus Guntermann)
+\def\stTeX{{\smc st\rm\kern-0.13em\TeX}}
+\def\SVG{\acro{SVG}}
+\def\TANGLE{{\tt TANGLE}\spacefactor1000 }
+\def\TB{{\sl The \TeX book\/}}
+\def\TP{{\sl \TeX\/}: {\sl The Program\/}}
+\def\TeX{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX\spacefactor1000 }
+\def\TeXhax{\TeX hax}
+% Don Hosek
+\def\TeXMaG{\TeX M\kern-.1667em\lower.5ex\hbox{A}\kern-.2267emG%
+ \spacefactor1000 }
+%\def\TeXtures{\TestCount=\the\fam
+% \TeX\-\hbox{$\fam\TestCount\scriptstyle TURES$}}
+\def\TeXtures{{\it Textures}}
+\let\Textures=\TeXtures
+\def\TeXXeT{\TeX-{}-\XeT}
+\def\TFM{\acro{TFM}}
+\def\Thanh{H\`an~Th\^e\llap{\raise.5ex\hbox{\'{}}}~Th\`anh}
+\def\TIFF{\acro{TIFF}}
+\def\ttn{{\sl TTN}\spacefactor1000 }
+\def\TTN{{\sl \TeX{} and TUG NEWS}\spacefactor1000 }
+\def\tubfont{\sl} % redefined in other situations
+\def\TUB{{\tubfont TUGboat\/}}
+\def\TUG{\TeX\ \UG}
+\def\tug{\acro{TUG}}
+\def\UG{Users Group}
+\def\UNIX{\acro{UNIX}}
+\def\UTF{\acro{UTF}}
+\def\VAX{V\kern-.12em A\kern-.1em X\spacefactor1000 }
+\def\VorTeX{V\kern-2.7pt\lower.5ex\hbox{O\kern-1.4pt R}\kern-2.6pt\TeX}
+\def\XeT{X\kern-.125em\lower.424ex\hbox{E}\kern-.1667emT\spacefactor1000 }
+\def\XML{\acro{XML}}
+\def\WEB{{\tt WEB}\spacefactor1000 }
+\def\WEAVE{{\tt WEAVE}\spacefactor1000 }
+% the Xe\TeX logo requires Eplain, which is not assumed here, so
+% the definition is omitted.
+\def\XHTML{\acro{XHTML}}
+\def\XSLT{\acro{XSLT}}
+
+%********************************************************************
+
+\newlinechar=`\^^J
+\normallineskiplimit=1pt
+
+\clubpenalty=10000
+\widowpenalty=10000
+
+\def\NoParIndent{\parindent=\z@}
+\newdimen\normalparindent \normalparindent=20pt % plain = 20pt
+\def\NormalParIndent{\global\parindent=\normalparindent}
+\NormalParIndent
+
+\def\BlackBoxes{\overfullrule=5pt }
+\def\NoBlackBoxes{\overfullrule=\z@ }
+\def\newline{\hskip\z@ plus \pagewd \break}
+\def\nohyphens{\hyphenpenalty\@M\exhyphenpenalty\@M}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** utility registers and definitions *****
+%
+
+% test registers for transient use; paired - internal/external
+\newbox\T@stBox \newbox\TestBox
+\newcount\T@stCount \newcount\TestCount
+\newdimen\T@stDimen \newdimen\TestDimen
+\newif\ifT@stIf \newif\ifTestIf
+
+
+% \cs existence test, stolen from TeXbook exercise 7.7
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax }
+
+% LaTeX conventions which are also useful here.
+\ifx\tugstyloaded@\plaintubstyle
+ \let\@@input\input
+ \def\iinput#1{\@@input#1 }
+ \def\tub@inputcheck{\if\@nextchar\bgroup
+ \expandafter\iinput\else\expandafter\@@input\fi}
+ \def\input{\futurelet\@nextchar\tub@inputcheck}
+\fi
+
+% Smashes repeated from AMS-TeX; PLAIN implements only full \smash .
+\newif\iftop@ \newif\ifbot@
+\def\topsmash{\top@true\bot@false\smash@}
+\def\botsmash{\top@false\bot@true\smash@}
+\def\smash{\top@true\bot@true\smash@}
+\def\smash@{\relax\ifmmode\def\next{\mathpalette\mathsm@sh}%
+ \else\let\next\makesm@sh\fi \next }
+\def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@}
+
+
+% Vertical `laps'; cf. \llap and \rlap
+\long\def\ulap#1{\vbox to \z@{\vss#1}}
+\long\def\dlap#1{\vbox to \z@{#1\vss}}
+
+% And centered horizontal and vertical `laps'
+\def\xlap#1{\hbox to \z@{\hss#1\hss}}
+\long\def\ylap#1{\vbox to \z@{\vss#1\vss}}
+\long\def\zlap#1{\ylap{\xlap{#1}}}
+
+
+% Avoid unwanted vertical glue when making up pages.
+\def\basezero{\baselineskip\z@skip \lineskip\z@skip}
+
+
+% Empty rules for special occasions
+\def\nullhrule{\hrule height\z@ depth\z@ width\z@ }
+\def\nullvrule{\vrule height\z@ depth\z@ width\z@ }
+
+% Support ad-hoc strut construction.
+\def\makestrut[#1;#2]{\vrule height#1 depth#2 width\z@ }
+
+% Construct box for figure pasteup, etc.
+% height = #1, width = #2, rule thickness = #3
+\def\drawoutlinebox[#1;#2;#3]{\T@stDimen=#3
+ \vbox to#1{\hrule height\T@stDimen depth\z@
+ \vss\hbox to#2{\vrule width\T@stDimen
+ \hfil\makestrut[#1;\z@]%
+ \vrule width\T@stDimen}\vss
+ \hrule height\T@stDimen depth\z@}}
+
+
+% Today's date, to be printed on drafts. Based on TeXbook, p.406.
+
+\def\today{\number\day\space \ifcase\month\or
+ Jan \or Feb \or Mar \or Apr \or May \or Jun \or
+ Jul \or Aug \or Sep \or Oct \or Nov \or Dec \fi
+ \number\year}
+
+% Current time; this may be system dependent!
+\newcount\hours
+\newcount\minutes
+\def\SetTime{\hours=\time
+ \global\divide\hours by 60
+ \minutes=\hours
+ \multiply\minutes by 60
+ \advance\minutes by-\time
+ \global\multiply\minutes by-1 }
+\SetTime
+\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes}
+
+\def\Now{\today\ \now}
+
+\newif\ifPrelimDraft \PrelimDraftfalse
+
+\def\midrtitle{\ifPrelimDraft {{\tensl preliminary draft, \Now}}\fi}
+
+% Section heads. The following set of macros is used to set the large
+% TUGboat section heads (e.g. "General Delivery", "Fonts", etc.)
+
+\newdimen\PreTitleDrop \PreTitleDrop=\z@
+
+\newskip\AboveTitleSkip \AboveTitleSkip=12pt
+\newskip\BelowTitleSkip \BelowTitleSkip=8pt
+
+\newdimen\strulethickness \strulethickness=.6pt
+\def\sthrule{\hrule height\strulethickness depth \z@ }
+\def\stvrule{\vrule width\strulethickness }
+
+\newdimen\stbaselineskip \stbaselineskip=18pt
+
+\def\@sectitle #1{%
+ \par \SecTitletrue
+ \penalty-1000
+ \secsep
+ \vbox{
+ \sthrule
+ \hbox{%
+ \stvrule
+ \vbox{
+ \advance\hsize by -2\strulethickness
+ \raggedcenter
+ \def\\{\unskip\break}%
+ \sectitlefont
+ \makestrut[2\stfontheight;\z@]
+ #1\unskip
+ \makestrut[\z@;\stfontheight]\endgraf
+ }%
+ \stvrule }
+ \sthrule }
+ \nobreak
+ \vskip\baselineskip }
+
+% distance between articles which are run together
+\def\secsep{\vskip 5\baselineskip}
+
+\newif\ifSecTitle
+\SecTitlefalse
+
+
+
+% Registration marks; permit them to be invisible
+
+\newdimen\RegRuleThickness \RegRuleThickness=0.2pt
+
+\def\HorzR@gisterRule{\vrule height\RegRuleThickness depth \z@ width 0.5in }
+\def\DownShortR@gisterRule{%
+ \vrule height 0.2pt depth 1pc width\RegRuleThickness }
+\def\UpShortR@gisterRule{\vrule height 1pc depth \z@ width\RegRuleThickness }
+
+
+% ``T'' marks centered on top and bottom edges of paper
+
+\def\ttopregister{\dlap{%
+ \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}%
+ \hbox to \trimwd{\hfil \DownShortR@gisterRule \hfil}}}
+\def\tbotregister{\ulap{%
+ \hbox to \trimwd{\hfil \UpShortR@gisterRule \hfil}%
+ \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}}}
+
+\def\topregister{\ttopregister}
+\def\botregister{\tbotregister}
+
+
+
+% PLAIN's definition of \raggedright doesn't permit any stretch, and
+% results in too many overfull boxes. We also turn off hyphenation.
+\newdimen\raggedskip \raggedskip=\z@
+\newdimen\raggedstretch \raggedstretch=5em % ems of font set now (10pt)
+\newskip\raggedparfill \raggedparfill=\z@ plus 1fil
+
+\def\raggedspaces{\spaceskip=.3333em \relax \xspaceskip=.5em \relax }
+% Some applications may have to add stretch, in order to avoid
+% all overfull boxes.
+
+\def\raggedright{%
+ \nohyphens
+ \rightskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\raggedparfill }
+\def\raggedleft{%
+ \nohyphens
+ \leftskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\z@skip }
+\def\raggedcenter{%
+ \nohyphens
+ \leftskip=\raggedskip plus\raggedstretch
+ \rightskip=\leftskip \raggedspaces
+ \parindent=\z@ \parfillskip=\z@skip }
+
+\def\normalspaces{\spaceskip\z@skip \xspaceskip\z@skip }
+
+
+% Miscellaneous useful stuff
+
+\def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+
+%\def~{\penalty\@M \ } % tie -- this is PLAIN value; it is reset in AMS-TeX
+\def~{\unskip\nobreak\ \ignorespaces} % AMS-TeX value
+
+\def\newbox{\alloc@4\box\chardef\insc@unt} % remove \outer
+\def\boxcs#1{\box\csname#1\endcsname}
+\def\setboxcs#1{\setbox\csname#1\endcsname}
+\def\newboxcs#1{\expandafter\newbox\csname#1\endcsname}
+
+\def\gobble#1{}
+
+\def\vellipsis{%
+ \leavevmode\kern0.5em
+ \raise1pt\vbox{\baselineskip6pt\vskip7pt\hbox{.}\hbox{.}\hbox{.}}
+ }
+
+\def\bull{\vrule height 1ex width .8ex depth -.2ex } % square bullet
+\def\cents{{\rm\raise.2ex\rlap{\kern.05em$\scriptstyle/$}c}}
+\def\Dag{\raise .6ex\hbox{$\scriptstyle\dagger$}}
+
+\def\careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}} \ignorespaces}
+\def\sfrac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont\z@ #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont\z@ #2}}
+
+\def\thinskip{\hskip 0.16667em\relax}
+\def\endash{--}
+\def\emdash{\endash-}
+\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
+\def\dash{\d@sh\nobreak\endash}
+\def\Dash{\d@sh\nobreak\emdash}
+\def\ldash{\d@sh\empty{\hbox{\endash}\nobreak}}
+\def\rdash{\d@sh\nobreak\endash}
+\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}}
+\def\Rdash{\d@sh\nobreak\emdash}
+
+% Hack to permit automatic hyphenation after an actual hyphen.
+
+\def\hyph{-\penalty\z@\hskip\z@skip }
+
+\def\slash{/\penalty\z@\hskip\z@skip } % "breakable" slash
+
+% Adapted from c.t.t posting by Donald Arseneau, 26 May 93.
+\def\nth#1{\TestCount=#1\relax
+ \ifnum\TestCount <0 \multiply\TestCount by\m@ne \fi % subdue negatives
+ \T@stCount=\TestCount
+ \divide\T@stCount by 100 \multiply\T@stCount by 100
+ \advance\TestCount by-\T@stCount % n mod 100
+ \ifnum\TestCount >20 \T@stCount=\TestCount
+ \divide\T@stCount by 10 \multiply\T@stCount by 10
+ \advance\TestCount by-\T@stCount % n mod 10
+ \fi
+ \T@stCount=\the\fam\relax
+ $\fam\T@stCount#1^{\fam\T@stCount
+ \ifcase\TestCount th% 0th
+ \or st% 1st
+ \or nd% 2nd
+ \or rd% 3rd
+ \else th% nth
+ \fi
+ }$}
+
+
+% Format information on reviewed items for book review articles.
+
+\def\Review:#1{\ifx[#1\@Rev[%
+ \else Book review:\enspace\sl #1%
+ \fi
+ }
+\def\@Rev[#1]{\ignorespaces#1\unskip:\enspace\ignorespaces\sl}
+\def\reviewitem{%
+ \def\revauth##1{\def\therevauth{##1, }\ignorespaces}%
+ \def\revtitle##1{\def\therevtitle{{\sl##1}. }\ignorespaces}%
+ \def\revpubinfo##1{\def\therevpubinfo{##1.}\ignorespaces}%
+ }
+\def\endreviewitem{{\noindent\interlinepenalty=10000
+ \therevauth\therevtitle\therevpubinfo\endgraf}%
+ \vskip\medskipamount
+ \ifx\tugstyloaded@\plaintubstyle
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}%
+ \fi
+ }
+
+\def\booktitle#1{{\sl #1\/}}
+
+
+% Dates and other items which identify the volume and issue
+
+% To use: \vol 5, 2.
+% \issdate October 1984.
+% \issueseqno=10
+% For production, these are set in a separate file, TUGBOT.DATES,
+% which is issue-specific.
+
+\newcount\issueseqno \issueseqno=-1
+
+\def\v@lx{\gdef\volx{Volume~\volno~(\volyr), No.~\issno}}
+\def\volyr{}
+\def\volno{}
+\def\vol #1,#2.{\gdef\volno{#1\unskip}%
+ \gdef\issno{\ignorespaces#2\unskip}%
+ \setbox\TestBox=\hbox{\volyr}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+
+% Original issue date included month and year.
+\def\issdate #1#2 #3.{\gdef\issdt{#1#2 #3}\gdef\volyr{#3}%
+ \gdef\bigissdt{#1{\smc\uppercase{#2}} #3}%
+ \setbox\TestBox=\hbox{\volno}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+% Beginning in 2002, only year
+\def\issyear #1.{\gdef\issdt{#1}\gdef\volyr{#1}%
+ \gdef\bigissdt{#1}%
+ \setbox\TestBox=\hbox{\volno}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+
+\vol 0, 0. % volume, issue.
+\issdate Thermidor, 2001. % month, year of publication
+
+
+\ifx\tugstyloaded@\plaintubstyle
+ \def\tubissue#1(#2){\TUB~#1, no.~#2}
+\else
+ \def\tubissue#1#2{\TUB~#1, no.~#2}
+\fi
+
+\def\xEdNote{{\tenuit Editor's note:\enspace }}
+
+
+% TUGboat conventions include the issue number in the file name.
+% Permit this to be incorporated into file names automatically.
+% If issue number = 11, \Input filnam will read tb11filnam.tex.
+
+
+\def\infil@{\jobname}
+\def\Input #1 {\ifnum\issueseqno<0 \def\infil@{#1}%
+ \else \def\infil@{tb\number\issueseqno#1}\fi
+ \edef\jobname{\infil@}\@readFLN
+ \@@input \infil@\relax
+ \ifRMKopen\immediate\closeout\TBremarkfile\RMKopenfalse\fi}
+
+\newif\ifRMKopen \RMKopenfalse
+\newwrite\TBremarkfile
+\def\TBremarkON#1{%
+ \ifRMKopen\else\RMKopentrue\immediate\openout\TBremarkfile=\infil@.rmk \fi
+ \toks@={#1}%
+ \immediate\write\TBremarkfile{^^J\the\toks@}%
+ \immediate\write16{^^JTBremark:: \the\toks@^^J}}
+\def\TBremarkOFF#1{}
+\let\TBremark=\TBremarkOFF
+
+% for marking locations in articles that pertain to remarks
+% in another file of editorial comments
+\def\TUBedit#1{}
+
+% for using different filenames in Providence than those supplied
+% by authors
+
+\def\TUBfilename#1#2{\expandafter\def\csname file@@#1\endcsname{#2}}
+\newread\@altfilenames
+\def\@readFLN{\immediate\openin\@altfilenames=\jobname.fln
+ \ifeof\@altfilenames\let\@result\relax\else
+ \def\@result{\@@input\jobname.fln }\fi
+ \immediate\closein\@altfilenames
+ \@result}
+\@readFLN
+\everyjob=\expandafter{\the\everyjob\@readFLN}
+
+% Following needs to work entirely in TeX's mouth
+\def\@tubfilename#1{\expandafter\ifx\csname file@@#1\endcsname\relax
+ #1\else\csname file@@#1\endcsname\fi}
+
+\def\fileinput#1{\@@input\@tubfilename{#1} }
+
+% Write out (both to a file and to the log) the starting page number
+% of an article, to be used for cross references and in contents.
+% \pagexref is used for articles fully processed in the TUGboat run.
+% \PageXref is used for "extra" pages, where an item is submitted
+% as camera copy, and only running heads (at most) are run.
+
+\ifx\tugstyloaded@\plaintubstyle
+\def\pagexrefON#1{%
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ \write\ppoutfile{%
+ \def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ }
+\def\PageXrefON#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}%
+ \immediate\write\ppoutfile{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}}
+\else
+\def\pagexrefON#1{%
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ \write\ppoutfile{%
+ \def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ }
+\def\PageXrefON#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}%
+ \immediate\write\ppoutfile{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}}
+\fi
+
+\def\pagexrefOFF#1{}
+\let\pagexref=\pagexrefOFF
+\def\PageXrefOFF#1{}
+\let\PageXref=\PageXrefOFF
+
+\def\xreftoON#1{%
+ \ifundefined{#1}%
+ ???\TBremark{Need cross reference for #1.}%
+ \else\csname#1\endcsname\fi}
+\def\xreftoOFF#1{???}
+\let\xrefto=\xreftoOFF
+
+\def\TBdriver#1{}
+
+
+% Authors, addresses, signatures
+
+\def\theauthor#1{\csname theauthor#1\endcsname}
+\def\theaddress#1{\csname theaddress#1\endcsname}
+\def\thenetaddress#1{\csname thenetaddress#1\endcsname}
+
+\newcount\count@@
+\def\@defaultauthorlist{% % standard way of listing authors
+ \count@=\authornumber
+ \advance\count@ by -2
+ \count@@=0
+ \loop
+ \ifnum\count@>0
+ \advance\count@@ by 1
+ \ignorespaces\csname theauthor\number\count@@\endcsname\unskip,
+ \advance\count@ by -1
+ \repeat
+ \count@=\authornumber
+ \advance\count@ by -\count@@
+ \ifnum\authornumber>0
+ \ifnum\count@>1
+ \count@=\authornumber
+ \advance\count@ by -1
+ \ignorespaces\csname theauthor\number\count@\endcsname\unskip\ and
+ \fi
+ \ignorespaces\csname theauthor\number\authornumber\endcsname\unskip
+ \fi
+ }
+
+\def\signature#1{\def\@signature{#1}}
+\def\@signature{\@defaultsignature}
+
+\def\@defaultsignature{%
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \medskip
+ \advance\count@ by \@ne
+ \signaturemark
+ \theauthor{\number\count@}\\
+ \leavevmode\theaddress{\number\count@}\\
+ \leavevmode\thenetaddress{\number\count@}\\
+ \repeat
+ }
+
+\newdimen\signaturewidth \signaturewidth=12pc
+\def\makesignature{%
+ \par
+ \penalty9000
+ \vskip\medskipamount
+ \rightline{%
+ \vbox{\hsize\signaturewidth \ninepoint \raggedright
+ \parindent \z@ \everypar={\hangindent 1pc }
+ \parskip \z@skip
+ \netaddrat
+ \netaddrpercent
+ \def\|{\unskip\hfil\break}%
+ \def\\{\endgraf}%
+ \def\net{\tt}%
+ \def\phone{\rm Phone: } \rm
+ \@signature}}
+ }
+
+{\makeactive\@
+ \gdef\signatureat{\makeactive\@\def@{\char"40\discretionary{}{}{}}}
+ \makeactive\%
+ \gdef\signaturepercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}}
+}
+
+\def\signaturemark{\leavevmode\llap{$\diamond$\enspace}}
+
+
+% some hyphenation exceptions:
+\hyphenation{Del-a-ware Dijk-stra Duane Eijk-hout
+ Flor-i-da Free-BSD Ghost-script Ghost-view
+ Hara-lam-bous Jac-kow-ski Karls-ruhe
+ Mac-OS Math-Sci-Net
+ Net-BSD Open-BSD Open-Office
+ Pfa-Edit Post-Script Rich-ard Skoup South-all
+ VM-ware Win-Edt
+ acro-nym ap-pen-dix asyn-chro-nous
+ bit-map bit-mapped bit-maps buf-fer buf-fers bool-ean
+ col-umns cus-tom-iz-able
+ data-base data-bases
+ de-riv-a-tive de-riv-a-tives de-riv-a-ble der-i-va-tion
+ fall-ing
+ half-way
+ key-note
+ long-est
+ ma-gyar man-u-script man-u-scripts
+ off-line over-view
+ pal-ettes par-a-digm par-a-dig-mat-ic par-a-digms
+ pipe-line pipe-lines
+ plug-in plug-ins pro-gram-mable
+ se-vere-ly spell-ing spell-ings stand-alone strong-est
+ sub-ex-pres-sion syn-chro-ni-city syn-chro-nous
+ time-stamp time-stamped
+ vis-ual vis-ual-ly
+ which-ever white-space white-spaces wide-spread wrap-around
+}
+
+
+\restorecat\@
+
+\endinput
+
+
+% *************************************************************************
+
+Contents and Notes
+------------------
+
+\makeescape, ..., \makecomment allow users to change category
+codes a little more easily.
+
+\savecat#1 and \restorecat#1 will save and restore the category
+of a given character. These are useful in cases where one doesn't
+wish to localize the settings and therefore be required to globally
+define or set things.
+
+\SaveCS#1 and \RestoreCS#1 save and restore `meanings' of control
+sequences. Again this is useful in cases where one doesn't want to
+localize or where global definitions clobber a control sequence which
+is needed later with its `old' definition.
+
+Abbreviations. Just a listing with indications of expansion where
+that may not be obvious. For full definitions, see real code above.
+
+\AllTeX (\La)\TeX
+\AMS American Mathematical Society
+\AmSLaTeX
+\AmSTeX
+\ANSI
+\ASCII
+\aw A-W (abbreviation for Addison-Wesley)
+\AW Addison-Wesley
+\BibTeX
+\CandT Computers \& Typesetting
+\ConTeXt
+\Cplusplus C++
+\CSS
+\CTAN
+\DTD
+\DVD
+\DVI
+\DVIPDFMx
+\DVItoVDU
+\eTeX
+\FAQ
+\FTP
+\GNU
+\GUI
+\Hawaii Hawai`i
+\HTML HTML
+\HTTP
+\ISBN ISBN
+\ISO
+\ISSN
+\JPEG
+\JTeX
+\JoT The Joy of \TeX
+\LAMSTeX
+\LaTeX
+\LaTeXe
+\MacOSX Mac OS X
+\MathML
+\Mc M ``w/ raised c''
+\MF METAFONT
+\mf Metafont (using small caps)
+\MFB The Metafont book
+\MP METAPOST
+\mtex multilingual TeX
+\NTS
+\OMEGA
+\OCP \Omega CP
+\OTP \Omega TP
+\Pas Pascal
+\pcMF pcMF
+\PCTeX
+\pcTeX
+\PDF PDF
+\PiCTeX
+\plain plain (in typewriter font)
+\PNG
+\POBox P. O. Box
+\POBoxTUG TUG PO Box
+\PS PostScript
+\RTF
+\SC Steering Committee
+\SGML SGML
+\SliTeX
+\slMF Metafont (slanted)
+\stTeX TeX for the Atari ST
+\SVG
+\TANGLE
+\TB The \TeX book
+\TP \TeX the Program
+\TeX
+\TeXhax
+\TeXMaG
+\TeXtures
+\Textures
+\TeXXeT
+\TFM
+\Thanh Han The Thanh
+\TIFF
+\ttn TTN
+\TTN \TeX and TUG News
+\TUB TUGboat
+\TUG TeX Users Group
+\tug
+\UG Users Group
+\UNIX
+\UTF
+\VAX
+\VorTeX
+\XeT
+\XML
+\WEB
+\WEAVE
+\XHTML
+\XSLT
+
+\NoBlackBoxes turns off marginal rules marking overfull boxes
+\BlackBoxes turns them back on
+\newline horizontal glue plus a break
+
+\ifundefined#1 checks argument with \csname against \relax
+
+\topsmash smashes above baseline (from AMSTeX)
+\botsmash smashes below baseline (from AMSTeX)
+\smash smashes both (from plain)
+
+\ulap lap upwards
+\dlap lap downwards
+\xlap reference point at center horizontally; 0 width
+\ylap reference point at center vertically; 0 height, depth
+\zlap combination \xlap and \ylap
+
+\basezero to avoid insertion of baselineskip and lineskip glue
+
+\nullhrule empty \hrule
+\nullvrule empty \vrule
+
+\makestrut[#1;#2] ad hoc struts; #1=height, #2=depth
+
+\today today's date
+\SetTime converts \time to hours, minutes
+\now displays time in hours and minutes
+\Now shows current date and time
+
+\ifPrelimDraft flag to indicate status as preliminary draft
+
+\rtitlex TUGboat volume and number info for running head
+\midrtitle information for center of running head
+
+\HorzR@gisterRule pieces of registration marks ("trimmarks")
+\DownShortR@gisterRule
+\UpShortR@gisterRule
+
+\ttopregister top registration line with `T' in center
+\tbotregister bottom registration line with inverted `T' in center
+\topregister register actually used
+\botregister
+
+
+\raggedskip parameters used for ragged settings
+\raggedstretch
+\raggedparfill
+\raggedspaces
+
+\raggedright
+\raggedleft
+\raggedcenter
+\normalspaces
+\raggedbottom
+
+\bull square bullet
+\cents ``cents'' sign
+\Dag superscripted dagger
+\careof c/o
+\sfrac slashed fraction
+
+\dash en-dash surrounded by thinspaces; only breakable AFTER
+\Dash em-dash, as above
+
+\hyph permit automatic hyphenation after an actual hyphen
+
+\slash "breakable" slash
+\nth for obtaining "1^{st}", "2^{nd}", 3^{rd}, etc.
+
+\tubissue gets \TUB followed by volume and issue numbers
+
+\xEdNote Editor's Note:
+
+\Review: Review: (for title of book review article)
+\reviewitem begin data for item being reviewed
+ \revauth with one argument, author(s) of item being reviewed
+ \revtitle with one argument, title of ...
+ \revpubinfo with one argument, other info pertaining to ...
+\endreviewitem end data for item being reviewed
+\booktitle with one argument, format book title in text
+
+\Input \input with some other bookkeeping for
+ case where multiple articles are put together
+
+\TBremark reminder to TUGboat editorial staff
+\TBremarkON
+\TBremarkOFF
+
+\pagexref used to write out page numbers to screen and
+\pagexrefON external files
+\pagexrefOFF
+\PageXref
+\PageXrefON
+\PageXrefOFF
+
+\xrefto used for symbolic cross-reference to other pages
+\xreftoON in TUGboat
+\xreftoOFF
+
+\TBdriver marks code which only takes effect when articles
+ are run together in a driver file
+
+\signatureat items for signatures
+\signaturepercent
+\signaturemark
+\signaturewidth
+
+
+% *************************************************************************
+
+% Change history
+
+Version Date Changes
+------- --------- ---------------------------------------------------
+1.18 7 Jun 06 another fix to repair a stupid mistake
+
+1.16-1.17 24 May 06 fixes to repair stupid mistakes in 1.15
+
+1.15 30 Apr 06 additions to match ltugboat.cls v2.0, 2006/04/25:
+ name macros and hyphenation exceptions
+
+1.14 21 Jun 04 added numerous name macros and hyphenation exceptions
+
+1.13l 15 Nov 03 updated header address to Portland, OR
+
+1.13k 28 Jun 03 added \RegRuleThickness to allow easy modification
+
+1.13j 16 Feb 03 added \issyear to handle removal of month
+
+1.13i 14 Oct 96 updated header and installed CRC-16 checksum
+
+1.13h 10 Nov 95 added \acro and converted all \SMC entries to use it
+ added acronyms \HTML and \PDF
+
+1.13g 4 Nov 95 added \MP for METAPOST
+
+1.13f 15 Apr 94 added \@Rev[...] to permit variable text for reviews
+
+1.13e 14 Mar 94 revised definition of \La to use actual width of A
+ added \LaTeXe definition
+
+1.13d 5 Jan 94 added {} to \TeX-{}-\Xet
+
+1.13c 11 Nov 93 removed extraneous " from header
+ added \AmSLaTeX, \CTAN, \ISSN
+
+1.13b 4 Nov 93 added \hyphenation{Eijk-hout}
+
+1.13a 18 Aug 93 corrected \nth to produce ordinal in current font
+
+1.13 27 May 93 upgraded \nth based on algorithm by Donald Arseneau
+ in comp.text.tex, 26 May 93
+
+1.12 19 Feb 93 added \spacefactor1000 to all replacement text that ends
+ with a capital letter, so that if these items end a
+ sentence, there will be a normal end-of-sentence space
+ removed \hbox from definitions of \TeX, etc.; no longer
+ needed
+ changed definition of \TeXXeT to use \XeT rather than
+ unique dimensions
+ installed new TUG address and phone number in header
+ reformatted change history, similar to tugboat.sty
+
+1.11c 29 Nov 92 added macros to format book review and related items for
+ review articles
+ added \SGML
+ changed def of \UNIX to use \SMC rather than \smc
+
+1.11b 20 Oct 92 added font code for \ISBN font ("big small caps")
+ added \Textures as the current form
+
+1.11a 6 Jun 92 added \drawoutlinebox
+
+1.11 15 Mar 92 added \ttn and \TTN
+
+1.10 8 Mar 92 added \AllTeX
+ changed file name from .COM to .CMN to avoid objection
+ that .COM files have a special significance on DOS
+ and other operating systems
+ added standard headers, prepared for archive installation
+
+1.09 5 May 91 inserted large penalty at top of \makesignature to
+ inhibit break between article and signature
+
+1.08 24 Oct 90 modified signature slightly (took \medskip out of box)
+ fixed bug in previous rendition of \@readFLN
+
+1.07 16 Oct 90 added \TUBedit to facilitate editorial marking
+ added \iinput variant from LaTeX; \input redefined now
+ as with LaTeX
+ added mechanism for local file names in Providence
+ (\TUBfilename, \fileinput, etc.)
+ \tugstyload@ defaults to plain if it's not defined
+
+1.06 3 Aug 90 added \leavevmode to \@defaultsignature so that
+ \everypar is not executed inside a group
+ dash routines modified and corrected (to suppress
+ insertion of discretionary node after -- and ---;
+ and to allow hyphenation of ensuing word)
+ changed \lDash to \Ldash and \rDash to \Rdash
+
+1.05 29 Mar 90 added \lDash and \rDash for `parenthetical' dashing
+ added \TP for TeX: The Program
+ added \relax after file input of \Input
+ added \relax before \ifmmode of \,
+
+1.04 28 Feb 90 modified pagexref macros to work in both plain and
+ latex styles (this should NOT affect authors)
+
+1.03 26 Feb 90 removed <tab>s and adjusted definition of \slMF
+
+1.02 25 Feb 90 added definitions of \plaintubissue, \latextubissue
+ added definition of \tubissue
+
+1.01 19 Feb 90 added \signaturewidth to allow for modification
+ added \nth to obtain 1^{st}, etc.
diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty
new file mode 100644
index 00000000000..3910979c48b
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty
@@ -0,0 +1,2245 @@
+%% @texfile{
+%% filename = "tugboat.sty",
+%% version = "1.17",
+%% date = "2006/06/03",
+%% time = "16:34:03 EDT",
+%% checksum = "28581 2245 6313 69379",
+%% filetype = "Plain TeX macros for TUGboat",
+%% copyright = "Copyright 1993, 1999, 2003, 2006 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% author = "TeX Users Group",
+%% address = "TeX Users Group,
+%% P.O.Box 2311,
+%% Portland, OR 97208-2311,
+%% USA",
+%% telephone = "+1 503 223-9994",
+%% FAX = "+1 206 203-3960",
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, plain tex",
+%% supported = "yes",
+%% abstract = "This file contains the plain-based macros
+%% for preparation of TUGboat, the Communications
+%% of the TeX Users Group.",
+%% docstring = "The checksum field above contains a CRC-16
+%% checksum as the first value, followed by the
+%% equivalent of the standard UNIX wc (word
+%% count) utility output of lines, words, and
+%% characters. This is produced by Robert
+%% Solovay's checksum utility.",
+%% }
+%% *********************************************************
+%%
+%% TeXing with this file also requires the following files:
+%% TUGBOAT.CMN (version 1.08+)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TUGBOAT.STY
+
+\def\thistubstyle{plain}
+\def\fileversion{v1.17}
+\def\filedate{2006/06/03}
+
+% general items
+
+\def\makeatletter{\catcode`\@=11 }
+\makeatletter % used, as in PLAIN, in protected control sequences
+
+% stop reading this file if it's been loaded already
+\ifx\tugstyloaded@\thistubstyle\makeatother\initializearticle
+ \endinput\else\let\tugstyloaded@\thistubstyle\fi
+
+\message{File `TUGBOAT.STY' \fileversion \space\space <\filedate>}
+
+\input tugboat.cmn % macros common to tugboat.sty and
+ % ltugboat.sty (latex style file)
+
+
+% some things with the same names as in, or reiterated from, AMS-TeX
+
+\def\document{} % override an AMS-TeX convention
+
+\output{\output@}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Directory.
+%
+% ** fonts
+% ** page dimensions
+% ** headers/footers
+% ** page adjustment
+% ** output
+% ** general mechanism for tags
+% ** titles, authors, addresses
+% ** heads
+% ** text and subtext
+% ** lists
+% ** verbatim
+% ** figures
+% ** utilities
+% ** initialization
+
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** fonts *****
+%
+
+
+% Struts give ascenders and descenders to assist in baseline alignment
+% (e.g. of adjoining vertical boxes); useful only with text fonts.
+%
+% \strut is defined in PLAIN . The structure of \strutt is equivalent.
+
+\newbox\struttbox
+\def\strutt{\relax\ifmmode\copy\struttbox\else\unhcopy\struttbox\fi}
+
+% Struts are given the following dimensions for use in TUGboat:
+%
+% \strut = height/depth of parenthesis in current font
+% (not the same as PLAIN)
+% \strutt height + depth = \normalbaselineskip,
+% height = same as \strut
+% (equivalent to PLAIN \strut )
+
+
+% The fonts below are sufficient for most ordinary TUGboat production.
+% Additional titling fonts are defined elsewhere, and occasionally an
+% extra font will be needed for a particular item (e.g. the device
+% charts) and defined in that file.
+
+% All PLAIN CM fonts.
+
+\font\tenrm=cmr10
+\font\ninerm=cmr9
+\font\eightrm=cmr8
+\font\sevenrm=cmr7
+\font\sixrm=cmr6
+\font\fiverm=cmr5
+
+\font\teni=cmmi10 \skewchar\teni='177
+\font\ninei=cmmi9 \skewchar\ninei='177
+\font\eighti=cmmi8 \skewchar\eighti='177
+\font\seveni=cmmi7 \skewchar\seveni='177
+\font\sixi=cmmi6 \skewchar\sixi='177
+\font\fivei=cmmi5 \skewchar\fivei='177
+
+\font\tensy=cmsy10 \skewchar\tensy='60
+\font\ninesy=cmsy9 \skewchar\ninesy='60
+\font\eightsy=cmsy8 \skewchar\eightsy='60
+\font\sevensy=cmsy7 \skewchar\sevensy='60
+\font\sixsy=cmsy6 \skewchar\sixsy='60
+\font\fivesy=cmsy5 \skewchar\fivesy='60
+
+\font\tenex=cmex10
+
+\font\tenbf=cmbx10
+\font\ninebf=cmbx9
+\font\eightbf=cmbx8
+\font\sevenbf=cmbx7
+\font\sixbf=cmbx6
+\font\fivebf=cmbx5
+
+\font\tentt=cmtt10
+\font\ninett=cmtt9
+\font\eighttt=cmtt8
+
+\font\tensl=cmsl10
+\font\ninesl=cmsl9
+\font\eightsl=cmsl8
+\font\sevensl=cmti7 % Would use cmsl7 if it were standard.
+ % Currently needed only for \def of \LaTeX
+
+\font\tenit=cmti10
+\font\nineit=cmti9
+\font\eightit=cmti8
+\font\sevenit=cmti7
+
+\font\tenuit=cmu10
+\font\tenbfsl=cmbxsl10
+
+\font\tensmc=cmcsc10
+\font\ninesmc=cmcsc10 % redefine if cmcsc9 and/or cmcsc8 exist
+\font\eightsmc=cmcsc10
+
+\font\tentex=cmtex10 % for ASCII character set
+
+\def\mit{\fam\@ne} % from plain
+\def\cal{\fam\tw@} % from plain
+\def\sy{\cal}
+
+% cmss fonts are not needed all the time. Permit as-needed access.
+\def\LoadSansFonts{%
+ \global\font\twelvess=cmss10 scaled \magstep1
+ \global\font\tenss=cmss10
+ \global\font\niness=cmss9
+ \global\font\eightss=cmss8
+ \addto\tenpoint{\def\ssf{\tenss}}
+ \addto\ninepoint{\def\ssf{\niness}}
+ \addto\eightpoint{\def\ssf{\eightss}}
+ \gdef\LoadSansFonts{}}
+
+% TUGboat section heads
+\font \seventeenssb=cmssbx10 scaled \magstep3
+\font \twelvessb=cmssbx10 scaled \magstep1
+
+\newfam\sectitlefam
+\textfont\sectitlefam=\seventeenssb \scriptfont\sectitlefam=\twelvessb
+
+% \stbaselineskip set in tugboat.com
+\def\sectitlefont{%
+ \fam\sectitlefam \seventeenssb \baselineskip=\stbaselineskip }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** Definitions of \tenpoint, \ninepoint, etc. *****
+%
+
+% Following is a facility for adding commands to \tenpoint, \ninepoint
+% and \eightpoint. \LoadSansFonts uses this technique above.
+% Also used to add math families, as with:
+% \addto\tenpoint{\textfont\frakfam...}
+% to add a Fraktur family.
+%
+\def\addto#1#2{%
+ \csname @addsto\string#1\endcsname=
+ \expandafter{\the\csname @addsto\string#1\endcsname#2}}
+\def\@additionsto#1{\expandafter\the\csname @addsto\string#1\endcsname}
+\expandafter\newtoks\csname @addsto\string\tenpoint\endcsname
+\expandafter\newtoks\csname @addsto\string\ninepoint\endcsname
+\expandafter\newtoks\csname @addsto\string\eightpoint\endcsname
+
+
+\newskip\ttglue
+\def\setttglue{%
+ \edef\@thefont{\the\font}% to restore this font after the setting
+ \tt \ttglue=.5em plus .25em minus .15em
+ \@thefont}
+
+% We assume that \scriptscriptfonts remain the same throughout
+\scriptscriptfont\z@=\fiverm
+\scriptscriptfont\@ne=\fivei
+\scriptscriptfont\tw@=\fivesy
+\scriptscriptfont\thr@@=\tenex
+\scriptscriptfont\bffam=\sixbf
+
+\newdimen\normaltenpointstretch \normaltenpointstretch=1.6667pt
+\def\NormalTenPointSpacing{\AdjustNormalSpacing\tenpoint{}}
+\def\StretchyTenPointSpacing{\AdjustNormalSpacing\tenpoint{2.4}}
+
+\def\tenpoint{%
+ \normalbaselineskip=12pt
+ \abovedisplayskip=3pt plus 3pt minus 1pt
+ \belowdisplayskip=3pt plus 3pt minus 1pt
+ \abovedisplayshortskip=0pt plus 3pt
+ \belowdisplayshortskip=1pt plus 3pt minus 1pt
+ \def\rm{\fam\z@\tenrm}%
+ \textfont\z@=\tenrm \scriptfont\z@=\sevenrm
+ \def\oldstyle{\fam\@ne\teni}%
+ \textfont\@ne=\teni \scriptfont\@ne=\seveni
+ \textfont\tw@=\tensy \scriptfont\tw@=\sevensy
+ \textfont\thr@@=\tenex \scriptfont\thr@@=\tenex
+ \def\it{\fam\itfam\tenit}%
+ \textfont\itfam=\tenit \scriptfont\itfam=\sevenit
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\slfam=\tensl \scriptfont\slfam=\sevensl
+ \def\bf{\def\sl{\tenbfsl}\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\eightbf
+ \def\smc{\tensmc}%
+ \def\SMC{\ninerm}%
+ \def\tt{\tentt}%
+ \setttglue
+ \def\upright{\tenuit}%
+ \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\tenpoint}
+
+\tenpoint % initialize -- default font
+
+
+\newdimen\normalninepointstretch \normalninepointstretch=1.5pt
+\def\NormalNinePointSpacing{\AdjustNormalSpacing\ninepoint{}}
+\def\StretchyNinePointSpacing{\AdjustNormalSpacing\ninepoint{2.4}}
+
+\def\ninepoint{\normalbaselineskip=11pt
+ \abovedisplayskip=2.5pt plus 2.5pt minus 1pt
+ \belowdisplayskip=2.5pt plus 2.5pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2.5pt
+ \belowdisplayshortskip=1pt plus 2.5pt minus 1pt
+ \def\rm{\fam\z@\ninerm}%
+ \textfont\z@=\ninerm \scriptfont\z@=\sevenrm
+ \def\oldstyle{\fam\@ne\ninei}%
+ \textfont\@ne=\ninei \scriptfont\@ne=\seveni
+ \textfont\tw@=\ninesy \scriptfont\tw@=\sevensy
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf
+ \def\smc{\ninesmc}%
+ \def\SMC{\eightrm}%
+ \def\tt{\ninett}%
+ \setttglue
+ \setbox\strutbox=\hbox{\vrule height 6.75pt depth 2.25pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7.75pt depth 3.25pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\ninepoint }
+
+% The following setting can be used when baselineskip = 10pt
+% \setbox\struttbox=\hbox{\vrule height 7.25pt depth 2.75pt width\z@}%
+
+
+\newdimen\normaleightpointstretch \normaleightpointstretch=1.333pt
+\def\NormalEightPointSpacing{\AdjustNormalSpacing\eightpoint{}}
+\def\StretchyEightPointSpacing{\AdjustNormalSpacing\eightpoint{2.25}}
+
+\def\eightpoint{\normalbaselineskip=10pt
+ \abovedisplayskip=2pt plus 2pt minus 1pt
+ \belowdisplayskip=2pt plus 2pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2pt
+ \belowdisplayshortskip=1pt plus 2pt minus 1pt
+ \def\rm{\fam\z@\eightrm}%
+ \textfont\z@=\eightrm \scriptfont\z@=\sixrm
+ \def\oldstyle{\fam\@ne\eighti}%
+ \textfont\@ne=\eighti \scriptfont\@ne=\sixi
+ \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy
+% \textfont\thr@@=\eightex \scriptfont\thr@@=\eightex
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \def\smc{\eightsmc}%
+ \def\tt{\eighttt}%
+ \setttglue
+ \setbox\strutbox=\hbox{\vrule height 6pt depth 2pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7pt depth 3pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\eightpoint }
+
+% The 8pt cap/small cap font is not loaded. See a corresponding remark
+% above for the 9pt csc font.
+
+% this is equivalent to baselineskip = 9pt
+% \setbox\struttbox=\hbox{\vrule height 6.5pt depth 2.5pt width\z@}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Following will allow text to be a bit stretchier than the built-in
+% setting; TeXbook, page 433, 355
+
+\def\@setstretch{\fontdimen3\the\font=}
+\def\AdjustNormalSpacing#1#2{% #1=pointsize, #2=adjustment factor
+ {\T@stDimen=#2\csname normal\expandafter\gobble\string#1stretch\endcsname
+ #1%
+ \rm\@setstretch\T@stDimen
+ \it\@setstretch\T@stDimen
+ \bf\@setstretch\T@stDimen
+ }}
+
+
+
+% Anticipated changes to this font handling scheme:
+%
+% Dynamic loading of fonts, probably in groups according to size
+% Removal of \rm, \bf, etc., from \*point expansions, replacement
+% by generic \rm, \bf, etc. definitions
+% Mechanism for switching neatly between serif and sans-serif
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** page dimensions *****
+%
+
+
+% vertical dimensions
+
+\newdimen\trimlgt \trimlgt=11in % 10.5in (vols 7-9)
+\newdimen\headmargin \headmargin=3.5pc % 2.5pc (vols 7-9)
+\newdimen\pagelgt
+\newdimen\rheadlgt \rheadlgt=2.5pc % + headmargin = 6pc = 1in
+\newdimen\toplgt \toplgt=\z@
+\newdimen\normalcollgt \normalcollgt=54pc % 52pc for 5#2
+\newdimen\collgt \collgt=\normalcollgt
+\newdimen\Collgt
+\maxdepth=2pt
+\newdimen\botlgt \botlgt=\z@
+\newdimen\rfootlgt \rfootlgt=2pc
+
+\newif\ifThisIsFirstPage \ThisIsFirstPagefalse
+
+\def\resetpagelgt{%
+ \pagelgt=\collgt \Collgt=\collgt
+ \advance\pagelgt by \rheadlgt
+ \ifThisIsFirstPage \advance\Collgt by-\toplgt
+ \advance\Collgt by-\botlgt \fi
+ \advance\pagelgt by \maxdepth
+ \global\advance\pagelgt by \rfootlgt
+ \global\vsize=\Collgt }
+
+\def\resetfpagelgt{%
+ \global\ThisIsFirstPagetrue
+ \resetpagelgt } % exclude special first page material
+
+\resetpagelgt
+\raggedbottom
+
+% horizontal dimensions
+
+\newdimen\colwd
+\newdimen\intercolwd \intercolwd=\z@
+\newdimen\pagewd \pagewd=39pc
+\newdimen\trimwd \trimwd=\pagewd
+\newdimen\oddleftindent \oddleftindent\z@
+\newdimen\evenleftindent \evenleftindent\z@
+
+\def\onecol{\colwd=\pagewd \OneCol }
+
+\newdimen\onenarrowcolwd \onenarrowcolwd=30pc
+\def\onenarrow{\colwd=\onenarrowcolwd \OneCol }
+
+% before 5#2, `narrow' was 34pc
+\newdimen\onemediumcolwd \onemediumcolwd=34pc
+\def\onemedium{\colwd=\onemediumcolwd \OneCol }
+
+\newdimen\twocolcolwd \twocolcolwd=18.75pc
+\def\twocol{\colwd=\twocolcolwd \intercolwd=1.5pc \TwoCol }
+
+\newdimen\threecolcolwd \threecolcolwd=12pc
+\def\threecol{\colwd=\threecolcolwd \intercolwd=1.5pc \ThreeCol }
+
+\def\CenterOneCol{%
+ \oddleftindent\pagewd
+ \advance\oddleftindent -\colwd
+ \divide\oddleftindent\tw@
+ \evenleftindent\oddleftindent
+ \coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi
+ }
+
+\def\OneCol{\hsize=\colwd \CenterOneCol \numcols=1 \resetmaxcols}
+\def\ZeroLeftIndents{\oddleftindent\z@ \evenleftindent\z@ \coloffset\z@ }
+\def\TwoCol{\hsize=\colwd \numcols=2 \resetmaxcols \ZeroLeftIndents}
+\def\ThreeCol{\hsize=\colwd \numcols=3 \resetmaxcols \ZeroLeftIndents}
+
+\def\resetmaxcols{%
+ \ifnum\numcols>\maxcols
+ \ifOverlaysinTeX \maxcols=\numcols
+ \else \immediate\write\sixt@@n{%
+ The new setting of \string\numcols is greater than \string\maxcols.^^J
+ Either allow overlays in TeX or increase \string\maxcols.}\fi
+ \fi}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** headers/footers *****
+%
+
+
+\def\pagenoprefix{}
+
+\def\rtitlex{\def\tubfont{\tenpoint\rm}\TUB, \volx }
+\def\rtitle{%
+ \hbox to \pagewd{%
+ \tenrm
+ \makestrut[10pt;\z@]%
+ \ifodd\pageno \rtitlex\qquad\midrtitle\hfil\pagenoprefix\number\pageno
+ \else \pagenoprefix\number\pageno\hfil\midrtitle\qquad\rtitlex \fi
+ }%
+ }
+
+\def\runhead{\vbox to \rheadlgt{\rtitle \vfil }}
+
+\def\rfoot{%
+ \hbox to \pagewd{%
+ \tenrm
+ \makestrut[\z@;0.5pc]%
+ \midrtitle\hfil\midrtitle
+ }%
+ }
+
+\def\runfoot{\vbox to \rfootlgt{\vfil \rfoot }}
+
+% Macros to produce extra running heads for stripping onto pages
+% received as camera copy. Format must be preset to \OneCol, and
+% start on a new page.
+
+% Generate 5 (4 + normal running head) per page.
+
+\def\DrawT@pLines{%
+ \vskip\topskip
+ \ulap{%
+ \line{%
+ \raise 1ex\rlap{\leaders\hrule\hskip\pagewd}%
+ \leaders\hrule\hfill
+ }}
+ \medskip}
+
+\def\r@nhead{%
+ \vbox to .23\vsize{%
+ \basezero \hsize=\pagewd \vfil
+ \topregister \vskip\headmargin \runhead \DrawT@pLines }
+ \medskip
+ \advancepageno }
+
+\def\nextrunner{%
+ \ifnum\T@stCount>0
+ \ifnum\T@stCount>5 \TestCount=5 \else\TestCount=\T@stCount \fi
+ \advance\T@stCount by-\TestCount
+ \DrawT@pLines % always one at top of page
+ \loop\ifnum\TestCount>1 \r@nhead \advance\TestCount by\m@ne \repeat
+ \newpage
+ \def\@next{\nextrunner}%
+ \else \def\@next{}%
+ \fi
+ \@next }
+
+% Use \ExtraRunheads to generate running heads for stripping (e.g. for
+% author-supplied camera-ready copy). E.g., ``\ExtraRunheads 12, {}.'' will
+% generate 12 TUGboat running heads, up to 5 per page, starting with
+% the current page number.
+
+\def\ExtraRunheads #1, #2.{%
+ \T@stCount=#1
+ \gdef\pageprefix{#2}% % as in A-10 for appendices; not used just now
+ \nextrunner }
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** insertions *****
+%
+
+
+\newif\if@floatable \@floatabletrue % sometimes we don't want
+\def\nofloat{\@floatablefalse} % midinsertions to float
+
+% redefine \@ins to avoid the \par of PLAIN
+\def\@ins{\begingroup\setbox\z@\vbox\bgroup}
+
+\newinsert\botins
+\newif\ifp@ge \newif\if@mid \newif\if@bot
+\def\topinsert{\@midfalse\p@gefalse\@botfalse\@ins}
+\def\botinsert{\@midfalse\p@gefalse\@bottrue\@ins}
+\def\midinsert{\@midtrue\@botfalse\@ins}
+\def\pageinsert{\@midfalse\@botfalse\p@getrue\@ins}
+\skip\botins=\z@skip
+\count\botins=1000
+\dimen\botins=\maxdimen
+\def\endinsert{\egroup % finish the \vbox
+ \gdef\@next{}%
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
+ \advance\dimen@12\p@ \advance\dimen@\pagetotal
+ \if@floatable
+ \ifdim\dimen@>\pagegoal\@midfalse\@botfalse\p@gefalse\fi\fi
+ \fi
+ \if@mid
+ \vskip\abovedisplayskip
+ \box\z@
+ \vskip\belowdisplayskip
+ \gdef\@next{\@asifbelowdisplay}%
+ \else\insert\if@bot\botins\else\topins\fi
+ {\penalty100 % floating insertion
+ \if@bot\medskip\nobreak\fi
+ \splittopskip\z@skip
+ \splitmaxdepth\maxdimen \floatingpenalty\z@
+ \ifp@ge \dimen@\dp\z@
+ \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
+ \else \box\z@\fi
+ \if@bot\else\medskip\fi
+ }%
+ \fi\endgroup\@next}
+
+% Footnotes are mainly supported by PLAIN format, with these
+% exceptions.
+
+\skip\footins=10pt
+\def\footnoterule{\kern-5pt
+ \hrule width 5pc \kern 4.6pt } % the \hrule is .4pt high
+
+\newif\ifDelayFirstPar \DelayFirstParfalse
+\def\vfootnote#1{\ifFirstPar \DelayFirstPartrue \fi
+ \insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \rm \parindent=\normalparindent % always indent footnotes; added for TUGboat
+ \textindent{#1}\makestrut[10pt;\z@]\futurelet\next\fo@t}
+\def\@foot{\strut\egroup
+ \ifDelayFirstPar \SetupFirstPar \global\DelayFirstParfalse \fi }
+\newif\ifFirstPar \FirstParfalse
+\def\SetupFirstPar{\global\parindent=\z@ \global\FirstPartrue }
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** output *****
+%
+
+
+% Reorganize \pagecontents from PLAIN to put footnotes at very
+% bottom of page, even if \raggedbottom. Also add bottom insertions.
+
+\def\pagecontents{%
+ \ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifvoid\botins\else
+ \vskip\skip\botins
+ \unvbox\botins\fi }
+
+
+% Trim (registration) marks may or may not be placed around the pages;
+% Overlaying may or may not be done within TeX (as opposed
+% to the device driver).
+
+\newif\ifTrimmarks \Trimmarksfalse
+\newif\ifOverlaysinTeX \OverlaysinTeXtrue
+
+
+% All columns containing data are formatted by \midpage. Trim marks
+% are put on all columns, but running heads only on the last column
+% (i.e. column number = \numcols)
+
+\def\midpage#1{%
+ \vbox{
+ \basezero
+ \hrule height\z@ depth\z@ width\p@
+ \ifTrimmarks
+ \vskip-1in % default offset for laser printers
+ % this puts top trim at edge of paper
+ \vbox to \trimlgt \bgroup
+ \topregister
+ \vskip \headmargin
+ \else
+ \vskip-\rheadlgt % this puts runhead above default offset
+ \fi
+ \vbox to \pagelgt{
+ \ifnum\xcol=\numcols \runhead \else \vbox to \rheadlgt{}\fi
+ \ifThisIsFirstPage \firsthead \fi
+ \hbox to \pagewd{#1} % \vsize applied in \pagebody
+ \ifThisIsFirstPage \firstfoot \fi
+ \vfil % if no depth, avoid underfull box
+ \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi
+ }
+ \ifTrimmarks \vfill \botregister \egroup \fi
+ }}
+
+% The production version includes trim marks, which are required
+% on photographic paper, but are unsuitable for laser printer output
+% (because they land at the edges of the page). For multiple
+% column output, allowance is made for column overlays either
+% within TeX or by the driver. The default is to have all
+% overlays done within TeX, but large pages or matters of efficiency
+% may dictate that driver-overlay is more appropriate.
+
+% When the overlaying is done within TeX, the .dvi contains just
+% one page for each page to be printed. However, in the case
+% that a driver is to do the overlaying we must anticipate that
+% it will not be smart enough to properly overlay different numbers
+% of .dvi pages for different printed pages (e.g. in the case that
+% one job has both single- and double-column layout). Thus, for
+% each printed page, TeX constructs a constant number (=\maxcols)
+% of .dvi pages. Columns 1 through and including \numcols will
+% be usual .dvi pages containing information for the typeset columns.
+% Upon reaching column number \numcols, TeX will `fill out' the
+% printed page with empty columns to \maxcols.
+
+
+% set up auxiliary `page numbers'
+% \pageno = \count0 as used in PLAIN
+
+% \xcol is the column number within a page; ranges from 1 to \maxcols
+\countdef\xcol=1 \xcol=1
+
+% \spoolno is the ordinal number of `.dvi' pages (i.e. the number
+% of \shipouts performed)
+\countdef\spoolno=2 \spoolno=0
+
+\def\newcol{\endgraf\vfill\eject}
+
+\def\newpage{%
+ \vfill\eject
+ \loop
+ \ifnum\xcol>1
+ {\leavevmode\endgraf\vfill\eject} % \xcol is advanced in the output routine
+ \repeat
+ }
+
+\newcount\numcols % `real' number of columns
+
+\newcount\@maxcolsofar % internal counter for box allocation
+\@maxcolsofar=0
+
+\newcount\maxcols % job-wide maximum number of columns
+\maxcols=2
+
+
+ % save the column or ship it out
+\def\@saveorship{%
+ \ifOverlaysinTeX
+ \ifnum\xcol>\@maxcolsofar % if we need another column box allocated
+ \global\advance\@maxcolsofar\@ne
+ \newboxcs{column\number\xcol}%
+ \fi
+ \global\setboxcs{column\number\xcol}%
+ \else
+ \global\advance\spoolno\@ne
+ \shipout
+ \fi
+ }
+
+% horizontal offset of column from left edge of page
+\newdimen\coloffset \coloffset\z@
+\def\incrcoloffset{%
+ \global\advance\coloffset\colwd
+ \global\advance\coloffset\intercolwd
+ }
+
+\def\output@{%
+ \@saveorship\midpage{\kern\coloffset\pagebody\hfil}
+ \incrcoloffset
+ \ifnum\xcol=\numcols % if at `real' last column, fill out page with
+ \loop % empty columns
+ \ifnum\xcol<\maxcols
+ \global\advance\xcol\@ne
+ \@saveorship\midpage{\vbox to \collgt{}\hfil}
+ \repeat
+ \fi
+ \ifnum\xcol=\maxcols % put page together if TeX is overlaying
+ \ifOverlaysinTeX
+ \global\advance\spoolno\@ne
+ \shipout\hbox{%
+ \xcol=1
+ \loop \rlap{\boxcs{column\number\xcol}}%
+ \ifnum\xcol<\maxcols
+ \global\advance\xcol\@ne
+ \repeat
+ \hbox to \pagewd{}%
+ }%
+ \fi
+ \D@EndPage % possible shortening of next page
+ \global\coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi
+ \global\xcol=1
+ \else
+ \global\advance\xcol\@ne
+ \fi
+ \ExecuteNextDC % possible `Delayed Command'
+ }
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** page adjustment *****
+%
+
+
+% In the absence of automatic column-balancing, provide a mechanism
+% for manually shortening a specified page.
+
+\newif\ifSh@rtPage \Sh@rtPagefalse
+\newif\ifSh@rtPagePending \Sh@rtPagePendingfalse
+\newcount\Sh@rtPageNo
+\newdimen\Sh@rtPageLgt
+
+\def\@to{to} \def\@by{by}
+% #1 = to/by; #2 = \dimen; #3 = <dimen>; #4 = * of Shorten*Page
+\def\@toby#1#2#3#4{%
+ \def\@tb{#1}%
+ \ifx \@tb\@to \global #2=#3
+ \else \ifx \@tb\@by \T@stDimen=#3 % accommodate negative #3
+ #2=\normalcollgt \global\advance #2 by -\T@stDimen
+ \else \errmessage{#1 is invalid syntax; \string\Shorten#4Page
+ requires "to" or "by"}\fi
+ \fi }
+
+\def\@plusno#1#2;{%
+ \if +#1\T@stCount=\pageno \advance\T@stCount by #2
+ \else \T@stCount=#1#2 \fi }
+
+\def\ShortenPage #1 #2 #3. {%
+ \global\Sh@rtPagePendingtrue
+ \@plusno#1;\global\Sh@rtPageNo=\T@stCount
+ \@toby{#2}{\Sh@rtPageLgt}{#3}{}}
+\def\ShortenThisPage #1 #2. {%
+ \global\Sh@rtPagetrue
+ \@toby{#1}{\vsize}{#2}{This}}
+
+% Two cases: 0 = last page was nonstandard; reset \vsize
+% 1 = do not reset \vsize: okay or length already reset
+\def\D@EndPage{%
+ \global\advancepageno
+ \T@stCount=1
+ \ifThisIsFirstPage \T@stCount=0 \global\ThisIsFirstPagefalse
+ \resetfirsthead \resetfirstfoot
+ \global\collgt=\normalcollgt \fi
+ \ifSh@rtPage \T@stCount=0 \global\Sh@rtPagefalse \fi
+ \ifSh@rtPagePending
+ \ifnum\pageno = \Sh@rtPageNo \T@stCount=1
+ \global\vsize=\Sh@rtPageLgt
+ \global\Sh@rtPagePendingfalse
+ \global\Sh@rtPagetrue \fi
+ \fi
+ \ifcase \T@stCount \resetpagelgt \fi }
+
+% Add more powerful means of adjusting pages by keeping a list of
+% commands to be executed prior to making up the next page. This
+% technique will be expanded in the next version of the output
+% routine.
+
+% "\DelayedCommand <page number> <column number> <command>\endCommand"
+% places the token list <command> at the end of a list of "things to do".
+% At the end of every column, the output routine checks this list to
+% see whether the head of the list should be "executed" prior to
+% building the next column. If so, the execution is performed.
+% Right now, items must be placed in the execution list in order,
+% and all items for a given column must be combined into a single
+% token list.
+
+% Natural applications are double column figures and column size
+% adjustments. E.g.
+% \DelayedCommand +5 1 \global\advance\vsize by 2\baselineskip\endCommand
+% will increase the \vsize of the first column of the page 5 pages from
+% "now" by 2 baselines. To pull the \vsize back to normal would require
+% another use of \DelayedCommand. Double column figures can be achieved
+% with insertions called by \DelayedCommand.
+
+% Right now the technique is messy, but it can be used by those who know
+% how it's implemented and know its limitations.
+
+\newtoks\@DelayedCommandList
+
+\def\DelayedCommand #1 #2 #3\endCommand{%
+ \@plusno#1;%
+ \edef\@temp{\the\@DelayedCommandList<\number\T@stCount>}%
+ \global\@DelayedCommandList=\expandafter{\@temp<#2>#3\endCommand}%
+ }
+
+\def\@FindNextDCPoint <#1><#2>#3\endList{%
+ \def\DCpage{#1}\def\DCcolumn{#2}}
+
+\def\FindNextDCPoint{%
+ \edef\@temp{\the\@DelayedCommandList}%
+ \ifx\@temp\empty \def\DCpage{\@M}\def\DCcolumn{0}%
+ \else
+ \edef\@form{%
+ \noexpand\@FindNextDCPoint\the\@DelayedCommandList\noexpand\endList}%
+ \@form
+ \fi}
+
+\def\@ExecuteNextDC <#1><#2>#3\endCommand#4\endList{%
+ \global\@DelayedCommandList={#4}%
+ #3}
+
+\def\ExecuteNextDC{%
+ \FindNextDCPoint
+ \ifnum \pageno=\DCpage \ifnum\xcol=\DCcolumn
+ \edef\@form{%
+ \noexpand\@ExecuteNextDC\the\@DelayedCommandList\noexpand\endList}%
+ \@form
+ \fi \fi}
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** general mechanism for tags *****
+%
+
+% Upon sensing an opening tag (call it `\foo' here), the following process
+% is set in motion:
+% 1. \begingroup (so definitions and settings are localized);
+% 2. the default situation for \foo is set up;
+% 3. if appropriate, an \everyfoo list is read (this allows one
+% to override the TUGboat.sty factory defaults);
+% 4. optional commands are read. This involves looking ahead for
+% a `[' and `normalizing' the optional environment so that
+% backslashes and braces are interpreted as their standard selves.
+% After the options are read, the `\',`{', and `}' are restored
+% to their status appropriate to \foo;
+% 5. the \@beginfoo macro is executed. This
+% may involve branching dependent upon flags set by options. It may
+% also be a place where spaces and carriage-returns are activated.
+% 6. the `argument' to \foo is read and stored or processed on
+% the fly (the method employed is generally fixed for each tag).
+% The argument may be delimited by *...* (called the `short-form'
+% here), or up to ...\endfoo (called the `long-form').
+% 7. a cleanup macro is executed which also ends the current group.
+% This may do all the work if an argument has been read and stored.
+
+% Checking ahead.
+% Often we check ahead to determine the next course of action.
+% \@checknexttoken is used to check for optional commands, to check for the
+% short-form argument-delimiter, and to ignore characters in certain
+% situations. The macro is just a check; applications must do whatever
+% is appropriate with the ensuing token.
+
+% \@checknexttoken checks the next token against argument #1. If the
+% two are the same, #2 is executed, otherwise #3. The comparison is
+% done with \ifx. Since we check ahead with \futurelet, the first
+% argument is stored with \let as well. To include the case
+% where #1 may be a space, we have to go through a small contortion
+% to \let\@basetoken= that space.
+
+% At times, the \@nexttoken will be \outer and this will prevent its
+% being incorporated in the definition of \@next below. For this reason,
+% we store `\ifx\@basetoken\@nexttoken' away in a definition at a time
+% when \@nexttoken is undefined and won't cause a problem.
+
+\def\if@baseis@next{\ifx\@basetoken\@nexttoken}
+
+\long\def\@checknexttoken #1#2#3{%
+ \futurelet\@basetoken\iffalse#1\fi
+ \long\def\@next{%
+% \ifx \@basetoken\@nexttoken
+ \if@baseis@next
+ \long\def\@@next{#2}%
+ \else\long\def\@@next{#3}\fi
+ \@@next}%
+ \futurelet\@nexttoken\@next}
+
+% Eliminating characters from input.
+% The following macros check ahead to see whether the next token is a
+% token to be parsed from the input stream. \@ignoreall keeps
+% checking to eliminate all such characters, whereas \@ignoreone drops
+% at most one. Argument #2 is executed after characters are eliminated.
+
+% The token is removed by defining a control sequence whose
+% contextual form includes the token.
+
+ % execute #2 after ignoring (possibly) one occurrence of #1
+\long\def\@ignoreone#1#2{%
+ \def\@ignoreform#1{#2}%
+ \@checknexttoken{#1}{\@ignoreform}{#2}%
+ }
+
+ % execute #2 after ignoring all occurrences of #1
+\long\def\@ignoreall#1#2{%
+ \def\@ignoreform#1{\@ignoretest}%
+ \def\@ignoretest{\@checknexttoken{#1}{\@ignoreform}{#2}}%
+ \@ignoretest
+ }
+
+% Particularly useful ignorances.
+
+ % execute #1 after ignoring spaces
+\def\DeleteOptionalSpaces#1{%
+ \@ignoreall{ }{#1}%
+ }
+ % execute #1 after ignoring spaces and \pars
+\def\DeleteOptionalSpacesandPars#1{%
+ \@ignoreall{ }{\@ignoreall{\par}{#1}}%
+ }
+
+
+% Checking and reading options.
+% To check for the next optional argument, the macros must look
+% ahead to the next character. If the next character is a `[',
+% the option-reading mechanism is invoked. This check may be suppressed if
+% the user has executed the \lastoption option. If \@lastoption is
+% "true" or if the [ is NOT next, the macro goes on to reading any
+% arguments and executing appropriately.
+
+\def\@checkoptions{%
+ \if@lastoption
+ \def\@next{\@executetoend}%
+ \else
+ \def\@next{\@checknexttoken {[}{\@readoptions}{\@executetoend}}%
+ \fi
+ \@next
+ }
+
+% Default "options" on start-up. Unless over-ridden, the situation
+% will be:
+% 1. there may be another option to check (i.e. \@lastoptionfalse);
+% 2. it will be necessary to read the input file to determine the
+% method of marking arguments (i.e. \@longformfalse);
+% 3. arguments will be handled on the fly (i.e. \@savingargumentfalse);
+% 4. the long-form ending delimiter will be \end... (where ... is
+% the tag with which we're currently operating.
+
+\newif\if@lastoption \@lastoptionfalse
+\def\lastoption{\@lastoptiontrue}
+
+\newif\if@longform \@longformfalse
+\def\longform{\@longformtrue}
+
+\newif\if@savingargument \@savingargumentfalse
+
+\newtoks\enddelim
+
+\def\@defaultoptions{%
+ \@lastoptionfalse
+ \@longformfalse
+ \@savingargumentfalse
+ \enddelim=\expandafter{\csname end\CurrentTag\endcsname}%
+ \let\@long\empty
+ }
+
+% To read an optional command, \catcodes of \ { } are restored to their plain
+% values, and the [...] form is parsed out by \@@readoptions. The argument
+% to \@@readoptions is then executed, the 3 specials are restored and
+% the we check again for [ after deleting spaces. One might, alternatively,
+% parse out the initial `[' and activate the `]' to end options, but
+% this would make it awkward to place options within other macros (since
+% the `]' would have to be \catcoded properly for the definition).
+
+\def\@readoptions{%
+ \savecat\\\makeescape\\%
+ \savecat\{\makebgroup\{%
+ \savecat\}\makeegroup\}%
+ \@@readoptions}
+
+\def\@@readoptions[#1]{%
+ #1%
+ \restorecat\\\restorecat\{\restorecat\}%
+ \DeleteOptionalSpaces{\@checkoptions}%
+ }
+
+
+% Short Form Tagging.
+% We specify a character (*) to be used as a begin/end delimiter
+% for the argument to most tags. This code could be copied and
+% altered a bit to use another character.
+
+% The character will be encountered as either type `other' or as
+% an `active' character.
+
+\newtoks\@otherSFD
+\@otherSFD={*}
+\let\@SFD=* % used in \@checknexttoken
+
+\newtoks\@activeSFD
+{\makeactive\*
+ \global\@activeSFD={*}%
+}
+
+\let\@plainast=\ast
+\def\ast{\ifmmode\@plainast\else *\fi}
+
+
+% Reading to the end-tag.
+% Macros may just do their business after options have been
+% read. In this case, there is no end-tag to worry about.
+% Otherwise, the macros either read to the "long-form" of end-tag
+% (e.g. \endtitle or \endauthor) or to the short-form (assumed to
+% be * here). Unless an option has specified
+% that the long-form is to be used, the macros look ahead to
+% see whether the short-form delimiter occurs next. If so,
+% it is assumed that the short-form is being used. In any case,
+% the appropriate \@begin... macro is executed before the argument is
+% handled.
+
+\newcount\@numarguments \@numarguments=1
+
+\def\@executetoend{%
+ \ifnum\@numarguments>0
+ \if@longform \def\@afterbegintag{\@longparse}%
+ \else
+ \def\@afterbegintag{\@checknexttoken
+ {\@SFD}{\@shortparse}{\@longparse}}%
+ \fi
+ \else
+ \def\@afterbegintag{}%
+ \fi
+ \csname @begin\CurrentTag\endcsname
+ \@afterbegintag
+ }
+
+% If the short-form is being used and an argument is to be saved,
+% we must define a "form" which TeX may follow to pull out the
+% tag's argument. The argument is stored away in the token register
+% \@argument, and the appropriate end-operation is performed.
+% Otherwise (the `argument' is processed on-the-fly), we parse out
+% the initial short-form delimiter and activate the ending one.
+
+\newtoks\@argument
+
+\def\@shortparse{%
+ \if@savingargument
+ \edef\@form{%
+ \def\noexpand\@@shortparse\the\@otherSFD####1\the\@otherSFD}%
+ \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}%
+ \else
+ \expandafter\makeactive\csname\the\@otherSFD\endcsname
+ \expandafter\def\the\@activeSFD
+ {\csname end\CurrentTag\endcsname
+ \expandafter\makeother\csname\the\@otherSFD\endcsname}%
+ \def\@@shortparse{%
+ \expandafter\@ignoreone\expandafter{\the\@otherSFD}%
+ {}%
+ }%
+ \fi
+ \@@shortparse}
+
+% On the other hand, if the long form is used, TeX must parse to
+% the long-form ending tag. Ordinarily we know the ending-tag
+% because it is just the \end... which corresponds to the tag
+% which initiated the process. We do allow for the possibility,
+% however, that we may want to switch this for some reason. E.g.
+% the different \verbatim styles allow for \verbatim...\endverbatim
+% and ||...||. The easiest way to implement the || style is
+% to have the first || call \verbatim and have \verbatim know
+% to look for || as the end-tag instead of \endverbatim. This may
+% be accomplished by allowing for the possibility of different
+% end-tags as below.
+
+\def\@longparse{%
+ \if@savingargument
+ \edef\@form{\def\noexpand\@@longparse####1\the\enddelim}%
+ \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}%
+ \else \def\@@longparse{}\fi
+ \@@longparse
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros generally available to tags.
+
+\def\longargument{\def\@long{\long}}
+
+\def\@authorstyle{\@@@a}
+\def\@inlinestyle{\@@@i}
+\def\@displaystyle{\@@@d}
+\def\@altinlinestyle{}
+\def\@altdisplaystyle{}
+
+\newif\if@removeprewhite \@removeprewhitefalse
+\newif\if@removepostwhite \@removepostwhitefalse
+\def\removeprewhite{\@removeprewhitetrue}
+\def\removepostwhite{\@removepostwhitetrue}
+
+% Allow for line numbers on a listing as well as rules above and below.
+\newif\if@ruled \@ruledfalse
+\newif\if@numbered \@numberedfalse
+\newcount\linenumber
+\newcount\globallinenumber \globallinenumber = 0
+\newif\if@continuingnumbers \@continuingnumbersfalse
+\def\continuenumbers{\numbered\@continuingnumberstrue}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** title, section title, authors, addresses *****
+%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% title
+
+\def\title{%
+ \begingroup
+ \def\CurrentTag{title}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endtitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\thetitle{\ignorespaces\the\toks@\unskip}%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% section titles
+
+% Material mostly in tugboat.com now
+
+\setbox\T@stBox=\hbox{\sectitlefont O}
+\newdimen\stfontheight \stfontheight=\ht\T@stBox
+
+\def\sectitle{%
+ \begingroup
+ \def\CurrentTag{sectitle}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \global\SecTitletrue
+ \@checkoptions}
+
+\def\endsectitle{%
+ \@sectitle{\the\@argument}%
+ \endgroup
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% authors
+
+\newcount\authornumber
+
+\def\author{%
+ \begingroup
+ \def\CurrentTag{author}%
+ \global\advance\authornumber by 1
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endauthor{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \expandafter\edef\csname theauthor\number\authornumber\endcsname
+ {\ignorespaces\the\toks@\unskip}%
+ \expandafter\let\csname theaddress\number\authornumber\endcsname\relax
+ \expandafter\let\csname thenetaddress\number\authornumber\endcsname\relax
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% addresses
+
+\newif\if@address \@addressfalse
+\def\address{%
+ \@addresstrue
+ \begingroup
+ \def\CurrentTag{address}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \let\@addressstyle=\@authorstyle
+ \def\inline{\let\@addressstyle=\@inlinestyle}%
+ \def\display{\let\@addressstyle=\@displaystyle}%
+ \@checkoptions}
+
+\def\endaddress{%
+ \ifx\@addressstyle\@inlinestyle
+ \def\\{, }\the\@argument
+ \endgroup
+ \def\@next{}%
+ \else\ifx\@addressstyle\@displaystyle
+ \endgraf\raggedright
+ \everypar={\hangindent 1.5\parindent}%
+ \def\\{\endgraf}%
+ \def\|{\unskip\hfil\break}%
+ \vskip\abovedisplayskip
+ \the\@argument\endgraf
+ \vskip\belowdisplayskip
+ \@asifbelowdisplay
+ \endgroup
+ \def\@next{\ignorespaces}%
+ \else
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \expandafter\edef\csname theaddress\number\authornumber\endcsname
+ {\ignorespaces\the\toks@\unskip}%
+ \def\@next{}%
+ \fi \fi
+ \@next
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% network addresses
+
+\def\netaddress{%
+ \begingroup
+ \def\CurrentTag{netaddress}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \let\@network\relax
+ \def\network##1{\def\@network{##1: }}%
+ \@SpecialsGetOther
+ \makeescape\\%
+ \netaddrat
+ \netaddrpercent
+ \@checkoptions}
+
+{\makeactive\@
+ \gdef\netaddrat{\makeactive\@\def@{\char"40\discretionary{}{}{}}}
+ \makeactive\%
+ \gdef\netaddrpercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}}
+}
+
+% We want the definition of \thenetaddress... to land at the right
+% nesting level, so we have to first pull it to the top, then
+% drop back to where we are.
+
+\def\endnetaddress{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \ifx\@network\relax
+ \gdef\@@network{}%
+ \else
+ \xdef\@@network{\@network}%
+ \fi
+ \endgroup
+ \expandafter\edef\csname thenetaddress\number\authornumber\endcsname
+ {{\noexpand\rm\@@network}%
+ {\noexpand\netaddrat\noexpand\netaddrpercent\noexpand\net
+ \ignorespaces\the\toks@\unskip}}%
+ }
+
+\def\net{\tt}
+
+% Overrides to default author and signature formats
+
+\def\authorlist#1{\def\@authorlist{#1}}
+
+% Except for the first article in a section, beginnings of articles
+% are announced by a horizontal rule the width of the column.
+% In the case that this rule happens to fall at the top of a column,
+% we have to make sure that it appears at the VERY top of the column
+% and not just on the first baseline. To accomplish this, we insert
+% an empty rule first and then jump back over it to place the rule that
+% readers will see.
+
+\def\article{%
+ \@allowspanningfigsfalse
+ \ifSecTitle \global\SecTitlefalse
+ \else \vskip\AboveTitleSkip
+ \kern\topskip
+ \nullhrule
+ \kern-\topskip
+ \kern-\strulethickness
+ \hrule height\strulethickness depth\z@
+ \nobreak
+ \kern\medskipamount
+ \fi
+ \ifx\thetitle\relax
+ \else
+ \nobreak
+ {\parskip\z@\interlinepenalty\@M
+ \noindent\def\\{\unskip\break}\raggedstretch=.3\colwd\raggedright\bf
+ \ignorespaces\thetitle\unskip\endgraf}%
+ \fi
+ \ifnum\authornumber>0
+ \nobreak
+ \vskip4pt
+ {\parskip\z@\interlinepenalty\@M
+ \def\\{\unskip\hfil\break}\hangindent\parindent\raggedright
+ \@authorlist\endgraf}
+ \fi
+ \nobreak
+ \vskip \BelowTitleSkip
+ \vskip -\parskip
+ \tenpoint
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}%
+ }
+
+
+\def\endarticle{\vfil\end} % redefined in drivers
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** heads *****
+%
+
+% Heads are set by first saving the text of the head in \@argument
+% and then operating appropriately depending upon the \headlevel.
+% Selection among the different heads is made by an \ifcase.
+
+% To remove extra \par tokens between heads and ensuing text in the
+% input file, we call \DeleteOptionalSpacesandPars. To do this outside
+% the `head' group and just before TeX returns to the normal input stream
+% following a call to \head, we must define (globally) a control sequence
+% (\@next) and call it at the very end.
+
+\newcount\headlevel \headlevel=1
+
+\def\head{%
+ \begingroup
+ \def\CurrentTag{head}%
+ \@allowindentfalse
+ \@defaultoptions
+ \@savingargumenttrue
+ \def\\{\break}%
+ \@checkoptions}
+
+\def\endhead{%
+ \endgraf
+ \ifcase\headlevel\or\@domainhead\or\@dosubhead\or\@dosubsubhead\fi
+ \endgroup
+ \@next
+ }
+
+\def\@domainhead{%
+ \if@removeprewhite\else\vskip\baselineskip\fi
+ \noindent{\raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}%
+ \if@removepostwhite % usually we want the white space
+ \else\kern0.5\baselineskip\fi
+ \nobreak
+ \gdef\@next{%
+ \if@allowindent\def\@next{}% usually we don't want to indent here
+ \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi
+ \@next
+ }%
+ }
+
+\def\@dosubhead{%
+ \if@removeprewhite\else\medskip\fi
+ \noindent{\frenchspacing\bf\ignorespaces\the\@argument
+ \unskip\if@headpunctuation.\fi}%
+ \hskip 0.5em plus \fontdimen3\the\font
+ \gdef\@next{\DeleteOptionalSpacesandPars{}}%
+ }
+
+\def\@dosubsubhead{%
+ {\frenchspacing\bf\ignorespaces\the\@argument\unskip}%
+ \hskip 0.5em plus \fontdimen3\the\font
+ \gdef\@next{\DeleteOptionalSpacesandPars{}}%
+ }
+
+\def\subhead{\head[\headlevel=2]}
+\def\subsubhead{\head[\headlevel=3]}
+
+\newif\if@headpunctuation \@headpunctuationtrue
+\def\nopunctuation{\@headpunctuationfalse}
+
+\newif\if@allowindent
+\def\allowindent{\global\@allowindenttrue}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** text and subtext *****
+%
+
+% The code here exists primarily to implement \subtext. The treatment
+% is similar to that for \head in that an \ifcase statement is called
+% to choose between the various text levels. Here, however, we handle
+% the `text' on the fly instead of saving it as an argument.
+
+\newcount\textlevel \textlevel=1
+
+\def\text{%
+ \begingroup
+ \def\CurrentTag{text}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \@checkoptions}
+
+\def\@begintext{%
+ \endgraf
+ \ifcase\textlevel\or\or\@setupsubtext\fi
+ }
+
+\def\@setupsubtext{%
+ \vskip\abovedisplayskip
+ \advance\leftskip by 0.5\parindent
+ \advance\rightskip by 0.5\parindent
+ \ninepoint\rm
+ }
+
+\def\endtext{%
+ \gdef\@next{}%
+ \ifcase\textlevel\or\or\@dosubtext\fi
+ \endgroup
+ \@next
+ }
+
+\def\@dosubtext{%
+ \endgraf
+ \vskip\belowdisplayskip
+ \gdef\@next{\@asifbelowdisplay}%
+ }
+
+\def\subtext{\text[\textlevel=2]}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** lists *****
+%
+
+\newcount\listlevel \listlevel=1
+\newif\if@itemized
+\newcount\itemnumber
+\newtoks\@itemtag
+\newcount\@cols % number of columns in list
+\newdimen\colsepwidth
+\newdimen\@listindent
+\newdimen\@listhangindent
+\newif\if@firstitem % when first item is handled differently
+\newtoks\everylist
+
+\def\list{%
+ \begingroup
+ \def\CurrentTag{list}%
+ \let\@liststyle=\@displaystyle
+ \def\inline{\let\@liststyle=\@inlinestyle}%
+ \def\display{\let\@liststyle=\@displaystyle}%
+ \def\displaystyle##1{\def\@altdisplaystyle{##1}}%
+ \def\inlinestyle##1{\def\@altinlinestyle{##1}}%
+ \def\item{%
+ \begingroup
+ \def\CurrentTag{item}%
+ \@numarguments=0
+ \@checkoptions}%
+ \@itemtag={$\bullet$}%
+ \def\tag##1{\@itemtag{##1}}%
+ \def\tagform##1{\llap{##1\strutt\enspace}}%
+ \@itemizedtrue
+ \def\unitemized{\@itemizedfalse}%
+ \itemnumber=0
+ \def\numbered{\@itemtag={\number\itemnumber.}}%
+ \def\romannumeraled{\@itemtag={\romannumeral\itemnumber.}}%
+ \def\Romannumeraled{\@itemtag=
+ {\uppercase\expandafter{\romannumeral\itemnumber.}}}%
+ \def\lettered{\itemnumber="60 \@itemtag={\char\itemnumber.}}%
+ \def\Lettered{\itemnumber="40 \@itemtag={\char\itemnumber.}}%
+ \def\ruled{\@ruledtrue}%
+ \@ruledfalse
+ \@cols=1
+ \def\cols{\@cols}%
+ \@firstitemtrue
+ \def\@itemseparator{, }%
+ \def\itemseparator##1{\def\@itemseparator{##1}}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \the\everylist
+ \@checkoptions}
+
+\def\@beginlist{%
+ \ifx\@liststyle\@displaystyle
+ \endgraf
+ \ifnum\listlevel=1
+ \if@ruled \if@removeprewhite\else\medskip\fi \hrule\kern5pt \nobreak
+ \else \if@removeprewhite\else\vskip\abovedisplayskip \fi\fi
+ \fi
+ \advance\leftskip\parindent
+ \@listindent=\parindent
+ \@listhangindent=\@listindent
+ \parindent\@listindent
+ \lineskip\z@
+ \if@itemized
+ \else
+ \parskip\z@skip
+ \parindent\z@
+ \raggedright
+ \everypar={\advance\itemnumber\@ne
+ \tagform{\the\@itemtag}}%
+ \makeCtrlMendgraf
+ \fi
+ \def\colsep{%
+ \global\count@\itemnumber
+ \egroup\kern\colsepwidth
+ \vtop\bgroup
+ \@altdisplaystyle
+ \itemnumber=\count@\ignoreendline}%
+ \ifnum\@cols>1
+ \dimen@\colsepwidth
+ \multiply\dimen@\@cols
+ \advance\dimen@-\colsepwidth
+ \advance\hsize-\dimen@
+ \divide\hsize by\@cols
+ \hbox\bgroup\vtop\bgroup
+ \fi
+ \@altdisplaystyle
+ \else
+ \def\tagform##1{##1\strutt\ }%
+ \if@itemized
+ \else
+ \makeCtrlMseparator
+ \advance\itemnumber by \@ne
+ \tagform{\the\@itemtag}%
+ \fi
+ \def\colsep{}%
+ \@altinlinestyle
+ \fi
+ }
+
+
+\def\endlist{%
+ \ifx\@liststyle\@displaystyle
+ \if@itemized\endgraf\fi
+ \ifnum\@cols>1
+ \egroup % vtop
+ \egroup % hbox
+ \fi
+ \ifnum\listlevel=1
+ \if@ruled \kern5pt\hrule\nobreak\vskip2\medskipamount
+ \else %\nobreak
+ \if@removepostwhite\else\vskip\belowdisplayskip\fi
+ \fi
+ \gdef\@next{\@asifbelowdisplay}%
+ \fi
+ \else \gdef\@next{}%
+ \fi
+ \endgroup % list
+ \@next
+ }
+
+\def\sublist{\list[\listlevel=2]}
+
+
+\newtoks\everyitem \everyitem{}
+
+
+\def\@beginitem{%
+ \ifx\@liststyle\@displaystyle
+ \endgraf
+ \if@firstitem\@firstitemfalse\else\vskip\smallskipamount\fi
+ \advance\itemnumber by \@ne
+ \noindent\leavevmode
+ \the\everyitem
+ \tagform{\the\@itemtag}%
+ \else
+ \def\item{\if@firstitem\@firstitemfalse\else\unskip\@itemseparator\fi
+ \advance\itemnumber by \@ne\the\@itemtag\enspace}%
+ \fi
+ \global\count@\itemnumber
+ \global\dimen@\hangindent
+ \endgroup
+ \itemnumber\count@
+ \hangindent\dimen@
+ }
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** verbatim *****
+%
+
+% Operation here is very similar to that for the other tags.
+% The opening tag sets up the situation and looks for optional
+% commands and the short-form delimiters. Since initial setup
+% involves changing the special characters to characters of
+% type other, some juggling must be done when optional commands
+% are read. In addition, to allow for implementation of the
+% |...| style using the more verbose \verbatim...\endverbatim,
+% we parameterize the ending-delimiter.
+
+ % sets default to display style
+\def\verbatim{\@verbatim[\display]}
+
+\def\@verbatim{%
+ \begingroup
+ \setupverbatim
+ \@checkoptions
+ }
+
+\def\setupverbatim{%
+ \def\CurrentTag{verbatim}%
+ \@defaultoptions
+ \def\inline{\let\@verbstyle\@inlinestyle}%
+ \def\display{\let\@verbstyle\@displaystyle}%
+ \def\displaystyle##1{\def\@altdisplaystyle{##1}}%
+ \def\inlinestyle##1{\def\@altinlinestyle{##1}}%
+ \def\numbered{\@numberedtrue}%
+ \def\ruled{\@ruledtrue}%
+ \def\smallcode{\ninepoint\tt\baselineskip=10pt}%
+ \let\@verbinputvar\relax
+ \let\@verbinputfile\relax
+ \@SpecialsGetOther
+ \enddelim=\expandafter{\endverbdelimiter}%
+ \normalspaces\frenchspacing
+ \obeylines
+ \@savingargumenttrue
+ \the\everyverbatim
+ }
+
+\def\@SpecialsGetOther{%
+ \catcode`\\=\other
+ \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other
+ \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other
+ \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other
+ \the\@AdditionsToSpecialsGetOther}
+
+% The \@Additions... register above should be used whenever another
+% character is declared to be special for some purpose. E.g.,
+% we will use the | for the short-form |...| verbatim notation.
+% Since the | is generally active for this purpose, it's category
+% won't get changed to \other for use in \verbatim...\endverbatim
+% unless we add it via this mechanism.
+
+\newtoks\@AdditionsToSpecialsGetOther
+
+\def\AddToSpecialsGetOther#1{%
+ \@AdditionsToSpecialsGetOther=
+ \expandafter{\the\@AdditionsToSpecialsGetOther#1}}
+
+% Altering the verbatim setup.
+% Users can alter the setup to their purpose by
+% putting tokens in the register \everyverbatim.
+
+\newtoks\everyverbatim
+
+% Ordinarily the end-tag would be the single token `\endverbatim'.
+% The following allows us to `see' the tag when `\' is of type `other'.
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|endverbdelimiter{\endverbatim}}
+
+% Input from an external variable or file
+
+\def\inputfromvar#1{\def\@verbinputvar{#1}}%
+\def\inputfromfile#1{\def\@verbinputfile{#1}}%
+\let\@verbinputvar\relax
+\let\@verbinputfile\relax
+
+% Outputs
+
+\newif\if@outputtotype \@outputtotypetrue
+\def\notype{\@outputtotypefalse}
+\def\outputtovar#1{\def\@verboutputvar{#1}}
+\def\outputtofile#1{\def\@verboutputfile{#1}}
+\let\@verboutputvar\relax
+\let\@verboutputfile\relax
+\newwrite\verboutfile
+
+\def\@beginverbatim{\obeyspaces}%\obeylines}
+
+\def\endverbatim{%
+ \ifx\@verboutputvar\relax\else % output to `variable'
+ \expandafter\xdef\csname\@verboutputvar\endcsname{\the\@argument}%
+ \fi
+ \ifx\@verboutputfile\relax\else % output to file
+ \immediate\openout\verboutfile=\@verboutputfile
+ \makeCtrlMnewlinechar
+ \iffalse{\fi\expandafter\@setupverbwrite\the\@argument}% use \@setupwrite to
+ \immediate\closeout\verboutfile % get rid of initial ^^M
+ \fi
+ \gdef\@next{}% % in case following clause is false
+ \if@outputtotype % output typeset on page
+ \tt
+ \ifx\@verbstyle\@inlinestyle
+ \@beforeverbinline
+ \@altinlinestyle
+ \else
+ \@beforeverbdisplay
+ \@altdisplaystyle
+ \fi
+ \ifx\@verbinputvar\relax\else % input from `variable'
+ \csname\@verbinputvar\endcsname
+ \fi
+ \ifx\@verbinputfile\relax\else % input from file
+ \fileinput{\@verbinputfile}%
+ \@endverbatim
+ \fi
+ \expandafter\@ignoreCtrlMverbendline\the\@argument\@endverbatim
+ \ifx\@verbstyle\@inlinestyle
+ \@afterverbinline
+ \else
+ \@afterverbdisplay\gdef\@next{\@asifbelowdisplay}%
+ \fi
+ \fi
+ \endgroup
+ \@next
+ }
+
+
+\def\@beforeverbinline{%
+ \makeCtrlMverbspace
+ \let\@endverbatim=\empty
+ }
+
+\def\@beforeverbdisplay{%
+ \def\@endverbatim{\verbendline}%
+ \if@ruled \medskip \hrule\kern5pt \nobreak
+ \else \vskip\abovedisplayskip
+ \fi
+ \makespaceverbspace
+ \makeCtrlMverbendline
+ \parskip=\z@skip
+ \if@numbered \parindent=\z@
+ \if@continuingnumbers
+ \else \global\globallinenumber = \z@ \fi
+ \linenumber=\z@ \fi
+ \everypar={\global\advance\globallinenumber by\@ne
+ \advance\linenumber by\@ne
+ \ifnum\linenumber<3 \vadjust{\nobreak}\fi
+ \if@numbered \leavevmode
+ \hbox to\normalparindent{\hss\sevenrm\the\globallinenumber.\ }%
+ \fi}%
+ \frenchspacing\rightskip=-\ttrightskip \hyphenpenalty\@M
+ }
+
+% \ttrightskip is the permissible overhang beyond right margin;
+% in MANMAC, this is 5pc, which is fine for the TeXbook, but too much here.
+
+\newdimen\ttrightskip \ttrightskip=1pc
+
+\def\@afterverbinline{}
+
+\def\@afterverbdisplay{%
+ \if@ruled \kern5pt\hrule\fi
+ \ifnum\linenumber<3 \penalty\z@ \fi
+ \if@removepostwhite\else
+ \if@ruled \vskip2\medskipamount \else \vskip\belowdisplayskip\fi
+ \fi
+ }
+
+\def\@asifbelowdisplay{%
+ \toks@=\expandafter{\the\everypar}%
+ \noindent
+ \everypar=\expandafter{\the\toks@}%
+ \ignorespaces}
+
+
+% Definitions of spaces and ^^M
+% \@ignoreCtrlMverbendline is used to lop off an initial ^^M in
+% verbatim text and to remove an \@endverbatim (the latter in case the
+% verbatim text is actually empty)
+
+\def\@ignoreendverbatim{\@ignoreone{\@endverbatim}{}}
+\def\verbendline{\leavevmode\null\endgraf}
+\def\makeCtrlMactive{\catcode`\^^M=\active}
+{\makeCtrlMactive
+\gdef\makeCtrlMverbendline{\makeCtrlMactive%
+ \def^^M{\@ignoreone{\@endverbatim}{\verbendline}}}%
+\makeCtrlMverbendline%
+\gdef\@ignoreCtrlMverbendline{\@ignoreone{
+}{\@ignoreendverbatim}}%
+\gdef\@setupverbwrite{\@ignoreone{
+}{\immediate\write\verboutfile\bgroup}}%
+\gdef\makeCtrlMverbspace{\makeCtrlMactive\def^^M{\verbatimspace}}%
+\gdef\makeCtrlMnewlinechar{\newlinechar=`\^^M}%
+\gdef\makeCtrlMendgraf{\makeCtrlMactive\def^^M{\strutt\endgraf}}%
+\gdef\makeCtrlMseparator{\makeCtrlMactive%
+ \def^^M{%
+ \@checknexttoken {\endlist}{}{%
+ \@itemseparator\advance\itemnumber by \@ne \tagform{\the\@itemtag}%
+ \ignorespaces}}}%
+}
+
+% to read a variable or file name properly, we must interpret
+% spaces and ^^M as nothing or as spaces
+
+{\makeCtrlMactive\obeyspaces%
+\gdef\makeCtrlMempty{\def^^M{}}%
+\gdef\makespaceempty{\def {}}%
+}
+{\makeCtrlMactive\obeyspaces%
+\gdef\makeCtrlMspace{\def^^M{\space}}%
+\gdef\makespacespace{\def {\space}}%
+}
+
+{\makeCtrlMactive%
+\gdef\@ignoreCtrlM#1{\@ignoreone{^^M}{#1}}%
+\gdef\ignoreendline{\@ignoreCtrlM{}}%
+}
+
+% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces.
+\def\verbatimspace{\ifvmode\indent\fi\space}
+{\obeyspaces\gdef\makespaceverbspace{\def {\verbatimspace}}}
+
+
+
+% Options and variants.
+
+\def\verbinline{\verbatim[\inline]}
+\def\verbdisplay{\verbatim[\display]}
+\def\verbfile#1{\verbatim[\inputfromfile{#1}]}
+
+
+% Verbatim with the other characters (e.g. |...|).
+% Procedures are parameterized so that it is easy to allow
+% different characters to perform this function. Any character
+% that's chosen could cause problems if it occurs unexpectedly
+% in the middle of what is supposed to be verbatim text. We call
+% the current special character for this purpose the "verbchar"
+% and store it in active form in the token register \@verbchar.
+
+\newtoks\@verbchar
+
+% On hitting a "verbchar" in the middle of text, TeX must look ahead
+% to see whether the verbchar occurs again. Since this
+% look-ahead fixes the category of the token examined, we must change
+% the categories of all characters appropriately before looking
+% (and we read \everyverbatim in case it contains a category change).
+% We must also "gobble" the second verbchar if we hit one.
+% Depending upon whether 1 or 2 verbchars are found, we call
+% \verbatim with the appropriate style command. We also use an
+% optional command to change the delimiter which ends this \verbatim
+% block. We naturally localize the changes to category codes made on
+% startup. It's easier to end this group here at the beginning and to
+% restart everything in a standard \verbatim than it is to add an extra
+% \endgroup after the verbatim text.
+
+\def\@firstverbchar{%
+ \begingroup
+ \setupverbatim
+% \@SpecialsGetOther
+ \makeverbcharactive
+ \expandafter\@checknexttoken\expandafter{\the\@verbchar}%
+ {\expandafter\@ignoreone\expandafter{\the\@verbchar}%
+ {\endgroup\verbatim[\longform\maketwoendverb]}}%
+ {\endgroup\verbatim[\inline\longform\makeoneendverb]}%
+ }
+
+\def\setupverbchar{%
+ \def\makeoneendverb{\catcode\expandafter`\csname\expandafter
+ \string\the\@verbchar\endcsname=
+ \active\edef\endverbdelimiter{\the\@verbchar}%
+ \enddelim=\expandafter{\endverbdelimiter}}%
+ \def\maketwoendverb{\catcode\expandafter`\csname\expandafter
+ \string\the\@verbchar\endcsname=
+ \active\edef\endverbdelimiter{\the\@verbchar\the\@verbchar}%
+ \enddelim=\expandafter{\endverbdelimiter}}%
+ \expandafter\let\the\@verbchar\@firstverbchar
+ \makeverbcharactive
+ \AddToSpecialsGetOther{%
+ \catcode\expandafter`\csname
+ \expandafter\string\the\@verbchar\endcsname=\other}%
+ }
+
+\def\makeverbcharactive{%
+ \catcode\expandafter`\csname
+ \expandafter\string\the\@verbchar\endcsname=\active}
+
+{\makeother\| \gdef\VertChar{|}}
+{\makeactive\|
+\gdef\makevertverbchar{%
+ \@verbchar={|}%
+ \setupverbchar
+ }
+}
+
+{\makeother\! \gdef\WowChar{!}}
+{\makeactive\!
+\gdef\makewowverbchar{%
+ \@verbchar={!}%
+ \setupverbchar
+ }
+}
+
+
+\def\MTH{$}
+\def\sb{_}
+\def\sp{^}
+\def\SP{{\tt\char"20 }} % "visible" space
+\chardef\bs=`\\
+\def\vrt{{\tt\char`\|}}
+\def\brokenvert{\hbox to 5.24998pt{\hfill
+ \lower 1.5pt\vbox to 8.5pt{\hrule width .9pt height 3.25pt
+ \vfill\hrule width .9pt height 3.25pt}\hfill}}
+
+
+
+\def\@lt{$<$}
+\def\@gt{$>$}
+{\makeactive\<
+\gdef\enablemetacode{%
+ \AddToSpecialsGetOther{\catcode`\<=\other}%
+ \makeactive\<%
+ \def<##1>{$\langle${\it\makeCtrlMspace\makespacespace##1\/}$\rangle$}%
+ }
+}
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** figures *****
+%
+
+
+\newif\if@@mid \@@midfalse
+\newif\if@@bot \@@botfalse
+\def\@caption{}
+\newif\if@fixed \@fixedfalse
+
+ % items for top and bottom ``banners'' on first page
+\def\resetfirsthead{\global\toplgt=\z@ \gdef\firsthead{}}
+\resetfirsthead
+\newbox\firsth@@d \newbox\firsth@ad
+
+\def\resetfirstfoot{\global\botlgt=\z@ \gdef\firstfoot{}}
+\resetfirstfoot
+\newbox\firstf@@t \newbox\firstf@ot
+
+\newif\if@allowspanningfigs
+
+\newcount\@figurepage
+\newcount\@figurescol
+\newcount\@figureecol
+
+
+\def\figure{%
+ \begingroup
+ \def\CurrentTag{figure}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \def\top{}%
+ \def\bot{\@@bottrue}%
+ \def\mid{\@@midtrue}%
+ \def\caption##1{\def\@caption{\ulap{\bigskip##1\smallskip}}}%
+ \def\fixed{\@fixedtrue}%
+ \def\scol{\@figurescol}%
+ \def\ecol{\@figureecol}%
+ \@figurepage=\pageno
+ \@figurescol=1
+ \@figureecol=\numcols
+ \def\page{%
+ \@ignoreall{\space}%
+ {\@ignoreone{=}%
+ {\@ignoreall{\space}%
+ {\@checknexttoken{+}{\@ignoreone{+}{\advance\@figurepage by}}%
+ {\@figurepage=}%
+ }%
+ }%
+ }%
+ }%
+ \@checkoptions}
+
+\def\@beginfigure{%
+ \if@fixed
+ \global\ThisIsFirstPagetrue
+ \setbox\T@stBox=\vbox\bgroup \hsize\pagewd
+ \else
+ \if@@mid\midinsert\else\if@@bot\botinsert\else\topinsert\fi\fi
+ \fi
+ }
+
+\def\endfigure{%
+ \@caption
+ \if@fixed
+ \egroup
+ \if@allowspanningfigs
+ \ifnum\@figurepage>\pageno
+ \immediate\write\sixt@@n{^^J
+ Setting multiple column figures currently not allowed on pages^^J
+ other than the first of each article. Check your source file.^^J}%
+ \else
+ \if@@bot
+ \ifdim \botlgt=\z@ \global\botlgt=\ht\T@stBox \resetpagelgt \fi
+ \global\setbox\firstf@ot=\vbox to \botlgt{\box\T@stBox \vfil}%
+ \global\setbox\firstf@@t=\vbox to \botlgt{\vfil}%
+ \gdef\firstfoot{\ifnum \xcol=2 \copy\firstf@ot
+ \else \copy\firstf@@t \fi }%
+ \else
+ \ifdim \toplgt=\z@ \global\toplgt=\ht\T@stBox \resetpagelgt \fi
+% assume that \firsth@ad ends with glue, hence no \dp
+ \global\setbox\firsth@ad=\vbox to \toplgt{\box\T@stBox \vfil}%
+ \global\setbox\firsth@@d=\vbox to \toplgt{\vfil}%
+ \gdef\firsthead{\ifnum \xcol=2 \box\firsth@ad
+ \else \copy\firsth@@d \fi }%
+ \fi
+ \fi
+ \else
+ \immediate\write\sixt@@n{^^J
+ Setting multiple column figures currently not allowed after^^J
+ article has begun.^^J}%
+ \fi
+ \else \endinsert
+ \fi
+ \endgroup
+ }
+
+\def\twocolfigure{%
+ \figure[\fixed]}
+
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** utilities *****
+%
+
+
+
+\def\linebreak{\unskip\break} % conflicts with LaTeX definition
+
+% Define a structure that will permit a list (using \obeylines)
+% to be made into 2 columns, split by \vsplit, indented the
+% normal \parindent
+
+\def\NormalizeBlockHeight{%
+ \TestCount=1 % \@ne
+ \TestDimen=\dimen0 \advance\TestDimen by-\topskip
+ \CutOneLine }
+\def\CutOneLine{%
+ \advance\TestCount by 1 \advance\TestDimen by-\baselineskip
+ \ifdim\TestDimen < \baselineskip % \@ne
+ \def\result{%
+ \TestDimen=\baselineskip
+ \multiply\TestDimen by \TestCount
+ \advance\TestDimen by \topskip
+ \global\dimen0=\TestDimen }%
+ \else \def\result{\CutOneLine }\fi
+ \result }
+
+\def\twosplit{%
+ {\topskip=\baselineskip \splittopskip=\topskip
+ \setbox0=\copy\TestBox
+ \dimen0=\ht\TestBox
+ \NormalizeBlockHeight
+ \divide\dimen0 by 2
+ \setbox\LeftHalf=\vsplit\TestBox to \dimen0
+ \ifdim\ht\TestBox > \ht\LeftHalf
+ \advance\dimen0 by \baselineskip
+ \setbox\TestBox=\copy0
+ \setbox\LeftHalf=\vsplit\TestBox to \dimen0
+ \fi
+ \line{\kern\parindent\valign{##\vfil\cr
+ \unvbox\LeftHalf\cr\noalign{\hfil}\unvbox\TestBox\cr}}%
+ }%
+ \global\setbox0=\null}
+
+\newbox\LeftHalf
+\newdimen\HalfWd
+\HalfWd=\twocolcolwd
+\advance\HalfWd by-\normalparindent
+\divide\HalfWd by 2
+
+{\obeylines
+\gdef\twouplist #1{%
+ \topskip=\baselineskip \splittopskip=\topskip
+ \begingroup \parindent=\z@ \obeylines
+% next line ends with intentional <cr>
+ \def\endtwouplist{
+ \egroup % % end of \vbox
+ \endgroup % % end of \obeylines group
+ \twosplit }%
+ \global\setbox\TestBox=\vbox\bgroup\hsize=\HalfWd %
+ \indent\vrule height\topskip width \z@ #1}%
+}
+
+% Tags for special formatting of editor's notes (See also TUGBOAT.COM)
+
+\def\Editor{\noindent To the Editor:\par}
+\def\EdNote #1{%
+ \if #1[%
+ \ifvmode \smallskip\noindent \else \unskip\hskip1em \fi
+ [\thinspace\xEdNote\ignorespaces
+ \else \ifFirstPar \else \medskip\noindent \fi
+ \xEdNote #1\fi }
+
+
+
+% Draw a box around a whole page, e.g. announcements page;
+% format must be \onenarrow or \onemedium, and start on a new page.
+
+\def\bigbox{\hrule \hbox\bgroup \vrule\kern 1pc
+ \vbox\bgroup \vskip 1pc }
+\def\endbox{\endgraf \vskip 1pc \egroup \kern 1pc\vrule \egroup \hrule }
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** initialization *****
+%
+
+
+\def\initializearticle{%
+ \let\thetitle=\relax
+ \authornumber=0
+ \def\@signature{\@defaultsignature}%
+ \def\@authorlist{\@defaultauthorlist}%
+ \@allowspanningfigstrue
+ }
+
+
+\makeother\@
+
+% @ is prohibited in AMS-TeX, but should not be in TUGboat
+
+
+\twocol
+\maxcols=2
+\OverlaysinTeXtrue
+\Trimmarksfalse
+\PrelimDrafttrue
+\initializearticle
+\pageno=1001 % number of title page
+
+\StretchyTenPointSpacing
+\StretchyNinePointSpacing
+\StretchyEightPointSpacing
+
+\makevertverbchar
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% History of changes
+
+Version Date Changes
+------- --------- ---------------------------------------------------
+1.16 2 Jan 06 updated TUG address and phone in header
+
+1.15 15 Aug 05 added switch \if@address to avoid skip in signature
+
+1.14c 14 Oct 96 lowered footnoterule by 3pt
+
+1.14b 14 Apr 94 added \interlinepenalty=10000 to avoid page breaks
+ in very long titles and author lists
+
+1.14a 8 Nov 93 removed extraneous " from header
+
+1.14 19 Feb 93 installed new TUG address and phone number in header
+
+1.13 13 Oct 92 Added \SMC in \ninepoint
+
+1.12 4 Jun 92 Added stretchability to \rightskip in ragged title
+
+1.11 8 Mar 92 Changed name of tugboat.com to tugboat.cmn to avoid
+ conflict with special meaning of .com with some
+ operating systems
+ Within verbatim, added \smallcode (from tugproc)
+ Added standard headers, prepared for archive installation
+
+1.10 21 Oct 91 Corrected font for \SMC in \tenpoint to \ninerm
+ (\ninesmc was used, but set to cmcsc10)
+ Changed \EdNote to detect \ifvmode when tag followed
+ by [ and to \smallskip and \noindent in that case
+ rather than performing \hskip1em
+
+1.09 11 Mar 91 Made \ an escape character in network addresses.
+ Added mechanism for saving \long arguments of
+ TUGboat macros (see uses of \@long).
+
+1.08 18 Oct 90 Incorporated redefinition of \sl within \bf
+ Changed an \input within \verbatim to \fileinput.
+ Added means of turning off punctuation after subheads.
+ Removed \nobreak after lists
+1.07 8 Jun 90 Corrected definition of \newpage
+
+1.06 13 May 90 Added \@setupverbwrite to eliminate initial ^^M
+ as \verbatim writes to a file.
+
+ Made strut on first line of footnote slightly taller
+ so as to separate footnotes.
+
+ Reset \@verbinputfile and \@verbinputvar to \relax
+ to allow nesting
+
+ Removed some \global assignments to \@argument and
+ 2 verbatim flags to allow nesting.
+
+1.05 23 Apr 90 Added "\setupverbatim" to \@firstverbchar so
+ that category switches are accomodated properly.
+
+1.04 7 Mar 90 Added \colsepwidth to allow for separation between
+ columns of lists
+
+1.03 1 Mar 90 Modified \@dosubhead and \@dosubsubhead to allow
+ stretchable space afterward
+
+1.02 25 Feb 90 Added \resetmaxcols to allow for automatic adjustment
+ of \maxcols; if overlays are done by the driver,
+ \maxcols needs to be set to an overall job maximum
+ at the start of the job.
+
+ Added setting of \SecTitletrue to definition
+ of \sectitle.
+
+ Added indicator of style file loaded (\tubstyle).
+
+1.01 17 Jan 90 Modified \@executetoend so that \@next would not
+ be clobbered by \csname @begin\CurrentTag\endcsname;
+ \@next changed to \@afterbegintag
+
+ Added `\the' before \@otherSFD within definition of
+ \@shortparse
+
+ added \@altdisplaystyle to definition of \colsep
diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty b/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty
new file mode 100644
index 00000000000..56361b54664
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty
@@ -0,0 +1,366 @@
+%% @texfile{
+%% filename="tugproc.sty",
+%% version="1.11",
+%% date="26-Jan-1994",
+%% filetype="TeX macros for TUG Proceedings",
+%% copyright="Copyright (C) TeX Users Group.
+%% Copying of this file is authorized only if either:
+%% (1) you make absolutely no changes to your copy, OR
+%% (2) if you do make changes, you first rename it to some
+%% other name.",
+%% author="TeX Users Group",
+%% address="TeX Users Group",
+%% P. O. Box 869,
+%% Santa Barbara, CA 93102-0869,
+%% USA",
+%% telephone="805-963-8358",
+%% email="Internet: tug@tug.org or TUGboat@Math.AMS.org",
+%% codetable="ISO/ASCII",
+%% checksumtype="line count",
+%% checksum="366",
+%% keywords="tex users group, tugboat, proceedings, plain tex",
+%% abstract="This file contains the plain-based macros
+%% for Proceedings issues of TUGboat, the
+%% Communications of the TeX Users Group."
+%% }
+%% *********************************************************
+%%
+%% Use of this file also requires the following files:
+%% TUGBOAT.STY (version 1.09+)
+%% TUGBOAT.CMN (version 1.08+) (loaded by TUGBOAT.STY)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fileversion{v1.11}
+\def\filedate{26 Jan 94}
+
+\message{File `TUGPROC.STY' \fileversion \space\space <\filedate>}
+
+% initialize year/issue-specific elements for standalone use
+\def\mtgyear{1994}
+\def\volyr{1994}
+\def\volno{15}
+\def\issno{3}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tugboat.sty
+
+\savecat\@ \makeletter\@
+\ifx\tugprocloaded@\undefined \let\tugprocloaded@\end
+\else \restorecat\@ \xdef\startingpage{\number\pageno}\endinput \fi
+
+\newdimen\tubpagelgt
+\tubpagelgt=\pagelgt \advance\tubpagelgt 1pc % for running feet
+
+% fonts
+
+\font\twelverm=cmr10 scaled 1200
+\font\twelvebf=cmbx10 scaled 1200
+\font\fourteenrm=cmr10 scaled 1440
+\font\fourteenit=cmti10 scaled 1440
+\font\fourteensl=cmsl10 scaled 1440
+
+\def\twelvepoint{%
+ \normalbaselineskip=14pt
+ \def\rm{\fam\z@\twelverm}%
+ \textfont\z@=\twelverm
+ \def\bf{\fam\bffam\twelvebf}%
+ \textfont\bffam=\twelvebf
+ \normalbaselines \rm}
+
+\def\fourteenpoint{%
+ \normalbaselineskip=18pt
+ \def\rm{\fam\z@\fourteenrm}%
+ \textfont\z@=\fourteenrm
+ \def\it{\fam\itfam\fourteenit}%
+ \textfont\itfam=\fourteenit
+ \def\sl{\fam\slfam\fourteensl}%
+ \textfont\slfam=\fourteensl
+ \normalbaselines \rm}
+
+\def\AUTHORfont{\twelvepoint\rm}
+\def\HEADfont{\twelvepoint\bf}
+\def\TITLEfont{\fourteenpoint\rm}
+\def\addressfont{\ninepoint\rm}
+\def\netaddrfont{\ninepoint\tt}
+
+\def\br{\unskip\hfil\break} % version for titles
+\def\degrade{\def\br{\unskip\space\ignorespaces}%
+ \let\\\br} % in running heads.
+
+% running heads & feet
+%\newcount\startingpage % Number of first page of article
+\newif\ifpreprint \preprinttrue
+\def\preprint{\preprinttrue
+ \ifExtrAbs\breaklines\fi} % (*)
+\newif\ifproof \prooffalse \let\filename\relax
+\def\Proof{\prooftrue\immediate\write16{File name?}
+ \immediate\read16 to\filename}
+\def\stamp{\ifproof{\tt \filename}\quad\Now\else\space\fi}
+\let\midrtitle=\null
+\def\rtitlex{%
+ \ifodd\pageno\degrade\rhtitle\else\rhauthor\fi}
+\def\rtitle{%
+ \hbox to \pagewd{%
+ \tenpoint
+ \makestrut[10pt;\z@]%
+ \ifnum\the\pageno=\startingpage\hfill\stamp\else
+ \ifodd\pageno
+ \stamp\hfill\rtitlex
+ \else
+ \rtitlex\hfill\stamp
+ \fi\fi
+ }%
+ }
+
+\ifx\startingpage\undefined \def\startingpage{1001}\fi
+\pageno=\startingpage
+\def\rfoot{%
+ \hbox to \pagewd{%
+ \tenpoint
+ \makestrut[\z@;0.5pc]%
+ \ifpreprint
+ \ifodd\pageno
+ \pfoottext\hfil\Now\hfil$^.$\number\pageno
+ \else
+ \number\pageno$^.$\hfil\Now\hfil\pfoottext
+ \fi
+ \else
+ \ifodd\pageno
+ \rfoottext\hfil\number\pageno
+ \else
+ \number\pageno\hfil\rfoottext
+ \fi
+ \fi
+ }%
+ }
+
+\v@lx % normalize publication info for footer
+\def\pfoottext{{\smc Preprint}: \mtgyear{} \TUG{} Annual Meeting}
+\def\rfoottext{\tenrm\TUB, \volx\Dash
+ {Proceedings of the \volyr{} Annual Meeting}}
+
+% midpage redone to align running feet.
+\def\midpage#1{%
+ \vbox{
+ \basezero
+ \hrule height\z@ depth\z@ width\p@
+ \ifTrimmarks
+ \vskip-1in % default offset for laser printers
+ % this puts top trim at edge of paper
+ \vbox to \trimlgt \bgroup
+ \topregister
+ \vskip \headmargin
+ \else
+ \vskip-\rheadlgt % this puts runhead above default offset
+ \fi
+ \dlap{\vbox to\tubpagelgt{\vfil
+ \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi}}
+ \vbox to \pagelgt{
+ \ifnum\xcol=\numcols \runhead \else \vbox to \rheadlgt{}\fi
+ \ifThisIsFirstPage \firsthead \fi
+ \hbox to \pagewd{#1} % \vsize applied in \pagebody
+ \ifThisIsFirstPage \firstfoot \fi
+ \vfil % if no depth, avoid underfull box
+% \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi
+ }
+ \ifTrimmarks \vfill \botregister \egroup \fi
+ }}
+
+% ***************************************************
+% Bibliography
+\def\Hang{1em}
+\def\entry #1{\noindent\frenchspacing\hangindent\Hang #1}
+
+% Appendix
+\def\appendix #1\endappendix{\newpage\onecol\centerline{\HEADfont #1}}
+
+% Box for deadlines:
+\newbox\textbox % \twocolcolwd=18.75pc [cf. tugboat.sty]
+\long\def\boxit #1{\vbox{\hrule\hbox{\vrule\kern3pt
+ \vbox{\kern3pt\vskip 4pt#1\vskip 4pt\kern3pt}\kern3pt\vrule}\hrule}}
+\long\def\boxedlist #1{$$\boxit{\setbox\textbox=\vbox{\hsize 18pc
+ \strut{#1}\strut}\box\textbox}$$} % TeXbook, 94 & 223 (exer 21.3)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% top matter
+\def\endtitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\thetitle{\ignorespaces\the\toks@\unskip}%
+ \let\rhtitle\thetitle
+ }
+ % If your title is too long for the running head,
+ % use this to construct a shorter version:
+\def\shorttitle{%
+ \begingroup
+ \def\CurrentTag{shorttitle}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endshorttitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\rhtitle{\ignorespaces\the\toks@\unskip}%
+ }
+
+\def\rhauthor{\@defaultauthorlist}
+ % Use the following for running heads if more than
+ % one author or author's name is too long to fit:
+\def\shortauthor{%
+ \begingroup
+ \def\CurrentTag{shortauthor}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endshortauthor{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\rhauthor{\ignorespaces\the\toks@\unskip}%
+ }
+
+%\long\def\Abstract #1\endAbstract{\long\def\@abstract{#1}}
+\def\abstract{\@abstract[\longargument]}
+\def\@abstract{%
+ \begingroup
+ \def\CurrentTag{abstract}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endabstract{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\theabstract{\ignorespaces\the\toks@\unskip}%
+ }
+
+\newif\ifExtrAbs \ExtrAbsfalse % Extract abstract from paper
+\def\breaklines{\begingroup\catcode`\^^M=\active\newlinechar=`\^^M}
+\def\endbreaklines{\endgroup}
+
+\def\prefnote{\@prefnote[\longargument]}
+\def\@prefnote{%
+ \begingroup
+ \def\CurrentTag{prefnote}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endprefnote{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\theprefnote{\ignorespaces\the\toks@\unskip}%
+ }
+
+\let\theprefnote\relax
+
+\def\@defaultsignature{%
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \vskip20pt
+ \advance\count@ by \@ne
+ \noindent{\AUTHORfont\theauthor{\number\count@}}\endgraf
+ \noindent{\addressfont\theaddress{\number\count@}}\endgraf
+ \noindent{\netaddrfont\thenetaddress{\number\count@}}\endgraf
+ \repeat
+ }
+
+\newbox\startbox % \newdimen\startheight
+\def\article{% \ifExtrAbs\endbreaklines\fi % (*)
+ \setbox\startbox=\hbox to\colwd
+ {\hbox to\pagewd{\vbox{
+ \hsize\pagewd\raggedright\advance\rightskip0pt plus 1fil\tenpoint\rm
+ \let\\\break
+ \noindent{\TITLEfont\thetitle\endgraf}%
+ \@defaultsignature
+ \ifx\theprefnote\relax\else
+ \vskip 20pt
+ \hbox to \pagewd{\hfil\vbox{\hsize 0.6\pagewd
+ \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip
+ \noindent{\bf Author's Note: }\ignorespaces\theprefnote\par}\hfil}
+ \fi
+ \vskip 20pt
+ \hbox to \pagewd{\hfil\vbox{\hsize 0.75\pagewd
+ \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip
+ \centerline{\bf Abstract}\vskip 5pt
+ \noindent\theabstract\par}\hfil}
+ \vskip 1pc}}\hss}
+ \twocolfigure\box\startbox\endfigure
+ \ifExtrAbs % (*)
+ \immediate\write\titleabs{\string\TITLE\string\bf\space
+ \rhauthor:\ \string\rm \rhtitle;;}
+ \immediate\write\titleabs{\space}
+ \immediate\write\titleabs{\string\ABS\string\bf\space
+ Abstract.\ \theabstract;;}
+ \immediate\write\titleabs{\space}
+ \immediate\write\titleabs{\string\endinput}
+ \immediate\closeout\titleabs \endbreaklines
+ \fi % (*)
+}
+
+% \head (This writes over a definition in tugboat.sty)
+\def\@domainhead{%
+ \if@removeprewhite\else\vskip\baselineskip\fi
+ \noindent{\HEADfont\baselineskip15pt % larger type than usual
+ \raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}%
+ \if@removepostwhite % usually we want the white space
+ \else\kern0.5\baselineskip\fi
+ \nobreak
+ \gdef\@next{%
+ \if@allowindent\def\@next{}% usually we don't want to indent here
+ \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi
+ \@next
+ }%
+ }
+
+\restorecat\@
+
+% \Trimmarkstrue % for final copy
+% \overfullrule=0pt
+
+\endinput
+
+%% *********************************************************
+
+Change History
+--------------
+1.11 changed TUG address in header to Santa Barbara
+ parameterized dates, etc., in running footers
+ initialized them at top of file instead of in footer text
+
+1.10 changed \tenrm to \tenpoint in definitions of \rtitle and \rfoot
+ so that \sl will be properly defined if used in that context
+
+1.09 removed \smallcode definition; it is now in tugboat.sty
+ increased width of abstract from 60-75% of text width
+ added standard headers, prepared for archive installation
+
+1.08 changed \start to \startingpage
+ added definition of \startingpage at top of file so running heads
+ will be empty on first page of article
+
+1.07 removed \Pageno
+ added check for previous input
+ altered \\ in running heads
+
+Previous:
+
+%%% TUGPROC.sty 11-mar-90 (*) 15-mar-90 30-mar-90 10-apr-90
+%%% 26-jun-90 [changed running feet, page numbers, \start]
+%%% 28-jun-90 [added \stamp, \ifproof] 29-jun-90 [\Proof]
+%%% TUGPROC.sty 03-feb-90 (renamed 13-feb-90) 20-feb-90
+%%%
+%%% Supplementary header file for TUG Proceedings volume
+%%% for use with plain.tex (under revision still)
+%%%
+%%% (*) This version writes the title and abstract into
+%%% a file, for use in preparing the Title-Abstract-Bio
+%%% section in the program. Author-Title and Abstract are
+%%% written into a file as one-liners; if these lines are
+%%% too long, they should be reformatted manually before
+%%% the file is \input.
diff --git a/Master/texmf-dist/tpm/tugboat-plain.tpm b/Master/texmf-dist/tpm/tugboat-plain.tpm
new file mode 100644
index 00000000000..659ef067968
--- /dev/null
+++ b/Master/texmf-dist/tpm/tugboat-plain.tpm
@@ -0,0 +1,29 @@
+<!DOCTYPE rdf:RDF SYSTEM "../../support/tpm.dtd">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:TPM="http://texlive.dante.de/">
+ <rdf:Description about="http://texlive.dante.de/texlive/Package/tugboat-plain.zip">
+ <TPM:Name>tugboat-plain</TPM:Name>
+ <TPM:Type>Package</TPM:Type>
+ <TPM:Date>2006/06/04 12:47:00</TPM:Date>
+ <TPM:Version></TPM:Version>
+ <TPM:Creator>karl</TPM:Creator>
+ <TPM:Title>The tugboat-plain package.</TPM:Title>
+ <TPM:Description></TPM:Description>
+ <TPM:Author></TPM:Author>
+ <TPM:Size>268951</TPM:Size>
+ <TPM:License></TPM:License>
+ <TPM:Build/>
+ <TPM:RunFiles size="118277">
+texmf-dist/tex/plain/tugboat-plain/tugboat.cmn
+texmf-dist/tex/plain/tugboat-plain/tugboat.sty
+texmf-dist/tex/plain/tugboat-plain/tugproc.sty
+texmf-dist/tpm/tugboat-plain.tpm
+ </TPM:RunFiles>
+ <TPM:DocFiles size="151773">
+texmf-dist/doc/plain/tugboat-plain/README
+texmf-dist/doc/plain/tugboat-plain/tubguide.pdf
+texmf-dist/doc/plain/tugboat-plain/tubguide.tex
+ </TPM:DocFiles>
+ <TPM:Provides>Package/tugboat-plain</TPM:Provides>
+ </rdf:Description>
+</rdf:RDF>
+
diff --git a/Master/texmf/lists/tugboat-plain b/Master/texmf/lists/tugboat-plain
new file mode 100644
index 00000000000..09723ca7e99
--- /dev/null
+++ b/Master/texmf/lists/tugboat-plain
@@ -0,0 +1,10 @@
+texmf-dist/doc/plain/tugboat-plain/README
+texmf-dist/doc/plain/tugboat-plain/tubguide.pdf
+texmf-dist/doc/plain/tugboat-plain/tubguide.tex
+
+texmf-dist/tex/plain/tugboat-plain/tugboat.cmn
+texmf-dist/tex/plain/tugboat-plain/tugboat.sty
+texmf-dist/tex/plain/tugboat-plain/tugproc.sty
+texmf-dist/tpm/tugboat-plain.tpm
+
+texmf/lists/tugboat-plain
diff --git a/Master/texmf/tpm/collection-publishers.tpm b/Master/texmf/tpm/collection-publishers.tpm
index 77697d361a0..fc1ab41c486 100644
--- a/Master/texmf/tpm/collection-publishers.tpm
+++ b/Master/texmf/tpm/collection-publishers.tpm
@@ -57,6 +57,7 @@
<TPM:Package name="sugconf"/>
<TPM:Package name="thesis-titlepage-fhac"/>
<TPM:Package name="tugboat"/>
+ <TPM:Package name="tugboat-plain"/>
<TPM:Package name="uaclasses"/>
<TPM:Package name="ucthesis"/>
<TPM:Package name="uiucthesis"/>