diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/plain/tugboat-plain/README | 4 | ||||
-rw-r--r-- | Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdf | bin | 0 -> 117297 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/plain/tugboat-plain/tubguide.tex | 869 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn | 1104 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty | 2245 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty | 366 | ||||
-rw-r--r-- | Master/texmf-dist/tpm/tugboat-plain.tpm | 29 | ||||
-rw-r--r-- | Master/texmf/lists/tugboat-plain | 10 | ||||
-rw-r--r-- | Master/texmf/tpm/collection-publishers.tpm | 1 |
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 Binary files differnew file mode 100644 index 00000000000..5e00b9eea76 --- /dev/null +++ b/Master/texmf-dist/doc/plain/tugboat-plain/tubguide.pdf 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"/> |