Files
oldlinux-files/Linux-0.98/Yggdrasil-0.98.3/usr/TeX/lib/tex/macros/eplain.tex
2024-02-19 00:21:16 -05:00

1192 lines
34 KiB
TeX

%% @texfile{
%% author = "Karl Berry et al.",
%% version = "1.9",
%% date = "26 April 1991",
%% filename = "eplain.tex",
%% email = "karl@cs.umb.edu",
%% address = "135 Center Hill Rd. // Plymouth, MA 02360"
%% checksum = "1191 2708 35297",
%% codetable = "ISO/ASCII",
%% supported = "yes",
%% docstring = "This file defines macros that expand on plain TeX.",
%% }
\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
\chardef\letter = 11
\chardef\other = 12
\catcode`@ = \letter
\def\uncatcodespecials{%
\def\do##1{\catcode`##1 = \other}%
\dospecials
}%
{%
\makeactive\^^M
\long\gdef\letreturn#1{\let^^M = #1}%
}%
\def\gobble#1{}%
\def\gobbletwo#1#2{}%
\def\gobblethree#1#2#3{}%
\def\@gobblemeaning#1:->{}%
\def\sanitize{\expandafter\@gobblemeaning\meaning}%
\def\futurenonspacelet#1{\def\cs{#1}%
\afterassignment\@stepone\let\nexttoken=
}%
\def\\{\let\@stoken= }%
\\ % now \@stoken is a space token (\\ is a control symbol, so that
\def\@stepone{\expandafter\futurelet\cs\@steptwo}%
\def\@steptwo{\expandafter\ifx\cs\@stoken\let\@@next=\@stepthree
\else\let\@@next=\nexttoken\fi \@@next}%
\def\@stepthree{\afterassignment\@stepone\let\@@next= }%
\let\@plainwlog = \wlog
\let\wlog = \gobble
\newlinechar = `^^J
\def\loggingall{\tracingcommands\tw@\tracingstats\tw@
\tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
\tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
\showboxbreadth\maxdimen\showboxdepth\maxdimen
}%
\def\tracingboxes{\showboxbreadth = \maxdimen \showboxdepth = \maxdimen}%
\newdimen\hruledefaultheight \hruledefaultheight = 0.4pt
\newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt
\newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt
\def\ehrule{\hrule height\hruledefaultheight depth\hruledefaultdepth}%
\def\evrule{\vrule width\vruledefaultwidth}%
\begingroup
\catcode`\{ = 12 \catcode`\} = 12
\catcode`\[ = 1 \catcode`\] = 2
\gdef\lbracechar[{]%
\gdef\rbracechar[}]%
\catcode`\% = \other
\gdef\percentchar[%]\endgroup
\def^^L{\par}%
\let\@ifempty = \iffalse
\ifx\@undefinedmessage\@undefined
\def\@undefinedmessage
{No .aux file; I won't warn you about undefined labels.}%
\fi
%% @texfile{
%% author = "Karl Berry and Oren Patashnik",
%% version = "0.99h",
%% date = "24 Apr 1991",
%% filename = "btxmac.tex",
%% address = "Please use electronic mail",
%% checksum = "812 4053 30557",
%% email = "opbibtex@neon.stanford.edu",
%% codetable = "ISO/ASCII",
%% supported = "yes",
%% docstring = "Defines macros that make BibTeX work with plain TeX",
%% }
\edef\cite{\the\catcode`@}%
\catcode`@ = 11
\let\@oldatcatcode = \cite
\chardef\@letter = 11
\chardef\@other = 12
\def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}%
\@innerdef\@innernewcount{newcount}%
\@innerdef\@innernewdimen{newdimen}%
\@innerdef\@innernewif{newif}%
\@innerdef\@innernewwrite{newwrite}%
\def\@gobble#1{}%
\ifx\inputlineno\@undefined
\let\@linenumber = \empty % Pre-3.0.
\else
\def\@linenumber{\the\inputlineno:\space}%
\fi
\def\@getoptionalarg#1{\let\temp = #1\futurelet\next\@bracketcheck}%
\def\@bracketcheck{\begingroup
\if [\next
\aftergroup\@@getoptionalarg
\else
\global\let\@optionalarg = \empty
\aftergroup\temp
\fi
\endgroup}%
\def\@@getoptionalarg[#1]{%
\def\@optionalarg{#1}%
\temp
}%
\def\@tokstostring#1{\@ttsA#1 \@ttsmarkA}%
\def\@ttsA#1 #2\@ttsmarkA{%
\@ifempty{#1}\else
\@ttsB #1\@ttsmarkB
\@ifempty{#2}\else
\@spacesub\@ttsA#2\@ttsmarkA
\fi
\fi
}%
\def\@ttsB#1{%
\ifx #1\@ttsmarkB\else
\string #1%
\expandafter\@ttsB
\fi
}%
\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
\def\@spacesub{+}%
\def\@ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
\def\@emptymarkA{\@emptymarkA}% Again, so \ifx won't complain.
\def\@nnil{\@nil}%
\def\@fornoop#1\@@#2#3{}%
\def\@for#1:=#2\do#3{%
\edef\@fortmp{#2}%
\ifx\@fortmp\empty \else
\expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}%
\fi
}%
\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
#5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi
}%
\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
\let\@nextwhile=\@fornoop \else
#4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}%
}%
\@innernewif\if@fileexists
\def\@testfileexistence{\@getoptionalarg\@finishtestfileexistence}%
\def\@finishtestfileexistence#1{%
\begingroup
\def\extension{#1}%
\immediate\openin0 =
\ifx\@optionalarg\empty\jobname\else\@optionalarg\fi
\ifx\extension\empty \else .#1\fi
\space
\ifeof 0
\global\@fileexistsfalse
\else
\global\@fileexiststrue
\fi
\immediate\closein0
\endgroup
}%
\toks0 = {%
\def\bibliographystyle#1{%
\@readauxfile
\@writeaux{\string\bibstyle{#1}}%
}%
\let\bibstyle = \@gobble
\def\bibliography#1{%
\@readauxfile
\@writeaux{\string\bibdata{#1}}%
\@testfileexistence{bbl}%
\if@fileexists
\@readbblfile
\fi
}%
\let\bibdata = \@gobble
\def\nocite#1{%
\@readauxfile
\@writeaux{\string\citation{#1}}%
}%
\@innernewif\if@notfirstcitation
\def\cite{\begingroup\catcode`_ = \@letter \@getoptionalarg\@cite}%
\def\@cite#1{%
\nocite{#1}%
\printcitestart
\@notfirstcitationfalse
\@for \@citation :=#1\do
{%
\expandafter\@onecitation\@citation\@@
}%
\ifx\empty\@optionalarg\else
\printcitenote{\@optionalarg}%
\fi
\printcitefinish
\endgroup
}%
\def\@onecitation#1\@@{%
\if@notfirstcitation
\printbetweencitations
\fi
\expandafter \ifx \csname\@citelabel{#1}\endcsname \relax
\if@citewarning
\message{\@linenumber Undefined citation `#1'.}%
\fi
\expandafter\gdef\csname\@citelabel{#1}\endcsname{%
{\tt \nobreak\hskip0pt#1\nobreak\hskip0pt}}%
\fi
\csname\@citelabel{#1}\endcsname
\@notfirstcitationtrue
}%
\def\@citelabel#1{\@tokstostring{b@#1}}%
\def\@citedef#1{%
\begingroup
\@resetnumerals
\@finishcitedef{#1}%
}%
\def\@finishcitedef#1#2{%
\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}%
\endgroup
}%
\def\@resetnumerals{%
\catcode`0 = \@other \catcode`1 = \@other \catcode`2 = \@other
\catcode`3 = \@other \catcode`4 = \@other \catcode`5 = \@other
\catcode`6 = \@other \catcode`7 = \@other \catcode`8 = \@other
\catcode`9 = \@other \catcode`" = \@other \catcode`' = \@other
\catcode`` = \@other \catcode`, = \@other \catcode`. = \@other
}%
\def\@readbblfile{%
\@innernewcount\@itemnum
\begingroup
\def\begin##1##2{%
\setbox0 = \hbox{\biblabelcontents{##2}}%
\biblabelwidth = \wd0
}%
\def\end##1{}% ##1 is `thebibliography' again.
\@itemnum = 0
\def\bibitem{\futurelet\next\@bibitem}%
\def\@bibitem{%
\begingroup \if [\next
\aftergroup\@alphabibitem
\else
\aftergroup\@numberedbibitem
\fi \endgroup
}%
\def\@alphabibitem[##1]##2{%
\expandafter \xdef\csname\@citelabel{##2}\endcsname {##1}%
\@finishbibitem{##2}%
}%
\def\@numberedbibitem##1{%
\advance\@itemnum by 1
\expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}%
\@finishbibitem{##1}%
}%
\def\@finishbibitem##1{%
\biblabelprint{\csname\@citelabel{##1}\endcsname}%
\@writeaux{\string\@citedef{##1}{\csname\@citelabel{##1}\endcsname}}%
\ignorespaces
}%
\let\em = \bblem
\let\newblock = \bblnewblock
\let\sc = \bblsc
\frenchspacing
\clubpenalty = 4000 \widowpenalty = 4000
\tolerance = 10000 \hfuzz = .5pt
\everypar = {\hangindent = \biblabelwidth
\advance\hangindent by \biblabelextrahang}%
\bblrm
\parskip = 1.5ex plus .5ex minus .5ex
\biblabelextrahang = .5em
\bblhook
\input \jobname.bbl
\endgroup
}%
\@innernewdimen\biblabelwidth
\@innernewdimen\biblabelextrahang
\def\biblabelprint#1{%
\noindent\hbox to \biblabelwidth{\biblabelcontents{#1}\hss}\enspace}%
\def\biblabelcontents#1{\bblrm [#1]}%
\def\bblrm{\rm}%
\def\bblem{\it}%
\def\bblsc{\ifx\@scfont\@undefined
\font\@scfont = cmcsc10
\fi
\@scfont
}%
\def\bblnewblock{\hskip .11em plus .33em minus .07em}%
\let\bblhook = \empty
\def\printcitestart{[}% left bracket
\def\printcitefinish{]}% right bracket
\def\printbetweencitations{, }% comma, space
\def\printcitenote#1{, #1}% comma, space, note (if it exists)
\let\citation = \@gobble
\@innernewcount\@numparams
\def\newcommand#1{%
\def\@commandname{#1}%
\futurelet\@next\@continuenewcommand
}%
\def\@continuenewcommand{\begingroup
\if [\@next
\aftergroup\@newcommandwithargs
\else
\global\@numparams = 0
\aftergroup\@newcommand
\fi
\endgroup}%
\def\@newcommandwithargs[#1]{%
\global\@numparams = #1
\@newcommand
}%
\def\@newcommand#1{%
\def\@startdef{\expandafter\edef\@commandname}%
\ifnum\@numparams=0
\let\@paramdef = \empty
\else
\ifnum\@numparams>9
\errmessage{\the\@numparams\space is too many parameters}%
\else
\ifnum\@numparams<0
\errmessage{\the\@numparams\space is too few parameters}%
\else
\edef\@paramdef{%
\ifcase\@numparams
\empty No arguments.
\or ####1%
\or ####1####2%
\or ####1####2####3%
\or ####1####2####3####4%
\or ####1####2####3####4####5%
\or ####1####2####3####4####5####6%
\or ####1####2####3####4####5####6####7%
\or ####1####2####3####4####5####6####7####8%
\or ####1####2####3####4####5####6####7####8####9%
\fi
}%
\fi
\fi
\fi
\expandafter\@startdef\@paramdef{#1}%
}%
}%
\ifx\nobibtex\@undefined \the\toks0 \fi
\def\@readauxfile{%
\if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined
\global\@auxfiledonetrue
\@testfileexistence{aux}%
\if@fileexists
\begingroup
\endlinechar = -1
\@setletters
\input \jobname.aux
\endgroup
\else
\message{\@undefinedmessage}%
\global\@citewarningfalse
\fi
\immediate\openout\@auxfile = \jobname.aux
\fi
}%
\newif\if@auxfiledone
\ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi
\def\@setletters{%
\count255 = 0
\edef\temp{\ifx\inputlineno\@undefined 128\else 256\fi}%
\loop
\ifnum\catcode\count255 = \@other
\catcode\count255 = \@letter
\fi
\advance\count255 by 1
\ifnum\count255<\temp
\repeat
\catcode`\_ = \@letter
}%
\@innernewwrite\@auxfile
\def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}%
\ifx\@undefinedmessage\@undefined
\def\@undefinedmessage{No .aux file; I won't give you warnings about
undefined citations.}%
\fi
\@innernewif\if@citewarning
\ifx\noauxfile\@undefined \@citewarningtrue\fi
\catcode`@ = \@oldatcatcode
\let\auxfile = \@auxfile
\let\for = \@for
\let\getoptionalarg = \@getoptionalarg
\let\ifempty = \@ifempty
\def\iffileexists{\if@fileexists}%
\let\innerdef = \@innerdef
\let\innernewcount = \@innernewcount
\let\innernewdimen = \@innernewdimen
\let\innernewif = \@innernewif
\let\innernewwrite = \@innernewwrite
\let\linenumber = \@linenumber
\let\readauxfile = \@readauxfile
\let\spacesub = \@spacesub
\let\testfileexistence = \@testfileexistence
\let\tokstostring = \@tokstostring
\let\writeaux = \@writeaux
\def\innerinnerdef#1{\expandafter\innerdef\csname inner#1\endcsname{#1}}%
\innerinnerdef{newbox}%
\innerinnerdef{newfam}%
\innerinnerdef{newhelp}%
\innerinnerdef{newinsert}%
\innerinnerdef{newlanguage}%
\innerinnerdef{newmuskip}%
\innerinnerdef{newread}%
\innerinnerdef{newskip}%
\innerinnerdef{newtoks}%
\def\immediatewriteaux#1{%
\ifx\noauxfile\@undefined
\immediate\write\@auxfile{#1}%
\fi
}%
\begingroup
\makeactive\^^M \makeactive\ % No spaces or ^^M's from here on.
\gdef\obeywhitespace{%
\makeactive\^^M\def^^M{\par\futurelet\next\@finishobeyedreturn}%
\makeactive\ \def {\ }%
\aftergroup\@removebox%
\futurelet\next\@finishobeywhitespace%
}%
\gdef\@finishobeywhitespace{{%
\ifx\next %
\aftergroup\@obeywhitespaceloop%
\else\ifx\next^^M%
\aftergroup\gobble%
\fi\fi}}%
\gdef\@finishobeyedreturn{%
\ifx\next^^M\vskip\blanklineskipamount\fi%
\indent%
}%
\endgroup
\def\@obeywhitespaceloop#1{\futurelet\next\@finishobeywhitespace}%
\def\@removebox{%
\setbox0 = \lastbox
\ifdim\wd0=\parindent
\setbox2 = \hbox{\unhbox0}%
\ifdim\wd2=0pt
\ignorespaces
\else
\box2 % Put it back: it wasn't empty.
\fi
\else
\box0 % Put it back: it wasn't the right width.
\fi
}%
\newskip\blanklineskipamount
\blanklineskipamount = 0pt
\def\frac#1/#2{\leavevmode
\kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
\kern-.1em $/$%
\kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}%
}%
\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\null}%
\def\LaTeX{L\kern -.26em \raise .6ex \hbox{\sevenrm A}\kern -.15em \TeX}%
\def\AMSTeX{$\cal A\kern -.1667em
\lower .5ex\hbox{$\cal M$}%
\kern -.125em S$-\TeX
}%
\def\BibTeX{{\rm B\kern-.05em{\sevenrm I\kern-.025em B}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}%
\font\mflogo = cmss10
\def\MF{{\mflogo META}{\tenrm \-}{\mflogo FONT}}%
\def\blackbox{\vrule height .8ex width .6ex depth -.2ex }% square bullet
\def\makeblankbox#1#2{%
\ifvoid0
\errmessage{Box 0 is void}%
\errhelp = \@makeblankboxhelp
\fi
\hbox{\lower\dp0
\vbox{\hidehrule{#1}{#2}%
\kern -#1% overlap rules
\hbox to \wd0{\hidevrule{#1}{#2}%
\raise\ht0\vbox to #1{}% vrule height
\lower\dp0\vtop to #1{}% vrule depth
\hfil\hidevrule{#2}{#1}%
}%
\kern-#1\hidehrule{#2}{#1}%
}%
}%
}%
\newhelp\@makeblankboxhelp{Assigning to the dimensions of a void^^J%
box has no effect. Do `\string\setbox0=\string\null' before you^^J%
define its dimensions.}%
\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2}%
\def\hidevrule#1#2{%
\kern-#1%
\dimen0=#1\advance\dimen0 by #2%
\vrule width\dimen0
\kern-#2%
}%
\newdimen\boxitspace \boxitspace = 3pt
\def\boxit#1{%
\vbox{%
\hrule
\hbox{%
\vrule
\kern\boxitspace
\vbox{\kern\boxitspace \parindent = 0pt #1\kern\boxitspace}%
\kern\boxitspace
\vrule
}%
\hrule
}%
}%
\def\numbername#1{\ifcase#1%
zero%
\or one%
\or two%
\or three%
\or four%
\or five%
\or six%
\or seven%
\or eight%
\or nine%
\or ten%
\or #1%
\fi
}%
\def\environment#1{%
\ifx\@groupname\@undefined\else
\errhelp = \@unnamedendgrouphelp
\errmessage{`\@groupname' was not closed by \string\endenvironment}%
\fi
\def\@groupname{#1}%
\begingroup
\let\@groupname = \@undefined
}%
\def\endenvironment#1{%
\endgroup
\def\@thearg{#1}%
\ifx\@groupname\@thearg
\else
\ifx\@groupname\@undefined
\errhelp = \@isolatedendenvironmenthelp
\errmessage{Isolated \string\endenvironment\space for `#1'}%
\else
\errhelp = \@mismatchedenvironmenthelp
\errmessage{Environment `#1' ended, but `\@groupname' started}%
\endgroup % Probably a typo in the names.
\fi
\fi
\let\@groupname = \@undefined
}%
\newhelp\@unnamedendgrouphelp{Most likely, you just forgot an^^J%
\string\endenvironment. Maybe you should try inserting another^^J%
\string\endgroup to recover.}%
\newhelp\@isolatedendenvironmenthelp{You ended an environment X, but^^J%
no \string\environment\space to start it is anywhere in sight.^^J%
You might also be at an \string\endenvironment\space that would match^^J%
a \string\begingroup, i.e., you forgot an \string\endgroup.}%
\newhelp\@mismatchedenvironmenthelp{You started an environment X, but^^J%
you ended it with Y. Maybe you made a typo in one or the other^^J%
of the names.}%
\newif\ifenvironment
\def\checkenv{\ifenvironment \errhelp = \@interwovenenvhelp
\errmessage{Interwoven environments}%
\endgroup \fi
}%
\newhelp\@interwovenenvhelp{Perhaps you forgot to end the previous^^J%
environment? I'm finishing off the current group,^^J%
hoping that will fix it.}%
\newif\ifeqno
\newif\ifleqno
\def\eq{\the\@eqtoks}%
\def\eqn{\the\@eqnotoks}%
\newtoks\@eqtoks
\newtoks\@eqnotoks
\long\def\displaysetup#1$${%
\@ddisplaytest#1\eqdef\eqdef\@ddisplaytest
\expandafter\@displaytest\the\toks0\eqno\eqno\@displaytest
}%
\def\@removetrailingspaces#1 #2 \endmark{#1}%
\long\def\@ddisplaytest#1\eqdef#2\eqdef#3\@ddisplaytest{%
\if !\noexpand#3!%
\toks0 = {#1}%
\else
\toks2 = {#1}%
\begingroup
\def\temp{\@removetrailingspaces #2}%
\def\\{ }%
\xdef\temp{{\expandafter\temp\\ \endmark}}%
\endgroup
\toks4 = \expandafter\expandafter\expandafter{\expandafter\eqdef\temp}%
\edef\@setupeq{\toks0 = {\the\toks2 \the\toks4}}%
\@setupeq
\fi
}%
\long\def\@displaytest#1\eqno#2\eqno#3\@displaytest{%
\if !\noexpand#3!%
\@ldisplaytest#1\leqno\leqno\@ldisplaytest
\else
\eqnotrue
\leqnofalse
\@eqnotoks = {#2}%
\@eqtoks = {#1}%
\fi
\generaldisplay$$%
}%
\long\def\@ldisplaytest#1\leqno#2\leqno#3\@ldisplaytest{%
\@eqtoks = {#1}%
\if !\noexpand#3!%
\eqnofalse
\else
\eqnotrue
\leqnotrue
\@eqnotoks = {#2}%
\fi
}%
\newdimen\leftdisplayindent
\newtoks\previouseverydisplay
\newtoks\displayhook
\def\leftdisplays{%
\previouseverydisplay = \everydisplay
\everydisplay = {\the\previouseverydisplay \the\displayhook \displaysetup}%
\def\generaldisplay{%
\leftline{%
\strut
\indent \hskip\leftskip \hskip\leftdisplayindent
\dimen0 = \parindent \advance\dimen0 by \leftskip
\advance\dimen0 by \leftdisplayindent
\advance\displaywidth by -\dimen0
\@redefinealignmentdisplays
\ifeqno\ifleqno
\kern-\dimen0\rlap{$\displaystyle\eqn$}\kern\dimen0
\fi\fi
$\displaystyle\eq$%
\ifeqno\ifleqno\else
\hfill $\displaystyle\eqn$%
\fi\fi
}%
}%
}%
\def\@redefinealignmentdisplays{%
\def\displaylines##1{\displ@y
\vcenter{%
\let\oldeqprint = \eqprint
\def\eqprint{\hfill\oldeqprint}%
\halign{\hbox to\displaywidth{$\@lign\displaystyle####\hfil$}\crcr
##1\crcr}}}%
\def\eqalignno##1{\displ@y
\vcenter{%
\halign to\displaywidth{%
$\@lign\displaystyle{####}$\tabskip\z@skip
&$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
&\llap{$\@lign####$}\tabskip\z@skip\crcr
##1\crcr}}}%
\def\leqalignno##1{\displ@y
\vcenter{%
\halign to\displaywidth{%
$\@lign\displaystyle{####}$\tabskip\z@skip
&$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
&\kern-\displaywidth
\rlap{\kern-\parindent\kern-\leftskip$\@lign####$}%
\tabskip\displaywidth\crcr
##1\crcr}}}%
}%
\def\centereddisplays{\let\displaysetup = \relax}%
\def\monthname{%
\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
}%
\def\fullmonthname{%
\ifcase\month
\or January\or February\or March\or April\or May\or June%
\or July\or August\or September\or October\or November\or December%
\fi
}%
\def\timestring{\begingroup
\count0 = \time
\divide\count0 by 60
\count2 = \count0 % The hour, from zero to 23.
\count4 = \time
\multiply\count0 by 60
\advance\count4 by -\count0 % The minute, from zero to 59.
\ifnum\count4<10
\toks1 = {0}%
\else
\toks1 = {}%
\fi
\ifnum\count2<12
\toks0 = {a.m.}%
\else
\toks0 = {p.m.}%
\advance\count2 by -12
\fi
\ifnum\count2=0
\count2 = 12
\fi
\number\count2:\the\toks1 \number\count4 \thinspace \the\toks0
\endgroup}%
\def\timestamp{\number\day\space\monthname\space\number\year\quad\timestring}%
\newskip\abovelistskip \abovelistskip = .5\baselineskip
\newskip\interitemskip \interitemskip = 0pt
\newskip\belowlistskip \belowlistskip = .5\baselineskip
\newdimen\listleftindent \listleftindent = 0pt
\newdimen\listrightindent \listrightindent = 0pt
\def\listcompact{\interitemskip = 0pt \relax}%
\newdimen\@listindent
\def\beginlist{%
\@listindent = \parindent
\advance\@listindent by \listleftindent
\everydisplay = \expandafter{\the\everydisplay
\advance\displayindent by \@listindent
\advance\displaywidth by -\@listindent
\advance\displaywidth by -\listrightindent}%
\nobreak\vskip\abovelistskip
\advance\leftskip by \@listindent
\advance\rightskip by \listrightindent
}%
\def\printitem{%
\par
\vskip-\parskip
\noindent
\llap{\marker \enspace}%
}%
\def\endlist{\vskip\belowlistskip}%
\newcount\numberedlistdepth
\newcount\itemnumber
\newcount\itemletter
\def\numberedmarker{%
\ifcase\numberedlistdepth
(impossible)%
\or \itemnumberout)%
\or \itemletterout)%
\else *%
\fi
}%
\def\numberedlist{\environment{@numbered-list}%
\advance\numberedlistdepth by 1
\itemnumber = 1
\itemletter = `a
\beginlist
\let\marker = \numberedmarker
\def\li{%
\ifnum\itemnumber=1\else
\vskip\interitemskip
\fi
\printitem
\advance\itemnumber by 1
\advance\itemletter by 1
}%
}%
\def\itemnumberout{\number\itemnumber}%
\def\itemletterout{\char\itemletter}%
\def\endnumberedlist{%
\par
\endenvironment{@numbered-list}%
\endlist
}%
\newcount\unorderedlistdepth
\def\unorderedmarker{%
\ifcase\unorderedlistdepth
(impossible)%
\or \blackbox
\or ---%
\else *%
\fi
}%
\def\unorderedlist{\environment{@unordered-list}%
\advance\unorderedlistdepth by 1
\beginlist
\itemnumber = 1
\let\marker = \unorderedmarker
\def\li{%
\ifnum\itemnumber=1\else
\vskip\interitemskip
\fi
\printitem
\advance\itemnumber by 1
}%
}%
\def\endunorderedlist{%
\par
\endenvironment{@unordered-list}%
\endlist
}%
\def\listing#1{%
\par \begingroup
\@setuplisting
\setuplistinghook
\input #1
\endgroup
}%
\let\setuplistinghook = \empty
\def\@setuplisting{%
\uncatcodespecials
\obeywhitespace
\makeactive\`
\makeactive\^^I
\def^^L{\vfill\eject}%
\tt
}%
{%
\makeactive\`
\gdef`{\relax\lq}% Defeat ligatures.
}%
{%
\makeactive\^^I
\tt
\gdef^^I{\hskip8\fontdimen2\font \relax}%
}%
\newif\if@tocfileopened
\newwrite\tocfile
\def\opentocfile{%
\if@tocfileopened\else
\global\@tocfileopenedtrue
\immediate\openout\tocfile = \jobname.toc
\fi
}%
\def\writetocentry#1#2{\writenumberedtocentry{#1}{#2}\empty}%
\def\writenumberedtocentry#1#2#3{%
\ifrewritetocfile
\opentocfile
\toks0 = {\expandafter\noexpand \csname toc#1entry\endcsname}%
\def\temp{#2}%
\def\cs{#3}%
\edef\@wr{%
\write\tocfile{%
\the\toks0
{\sanitize\temp}%
\ifx \empty\cs\else{#3}\fi
{\noexpand\folio}%
}%
}%
\@wr
\fi
\ignorespaces
}%
\newif\ifrewritetocfile \rewritetocfiletrue
\def\readtocfile{%
\testfileexistence{toc}%
\if@fileexists
\input \jobname.toc
\ifrewritetocfile
\opentocfile
\fi
\fi
}%
\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}%
\def\tocsectionentry#1#2{\line{\quad\sl #1 \dotfill\ \rm #2}}%
\def\tocsubsectionentry#1#2{\line{\qquad\rm #1 \dotfill\ #2}}%
\def\xrdef#1{%
\@readauxfile
\begingroup
\xrlabel{#1}%
\edef\@wr{\@writexrdef{\the\xrlabeltoks}}%
\@wr
\endgroup
\ignorespaces
}%
\def\@writexrdef#1{%
\@writeaux{%
\string\gdef\expandafter\string\csname#1\endcsname {\noexpand\folio}%
}%
}%
\newtoks\xrlabeltoks
\def\xrlabel#1{%
\begingroup
\escapechar = `\_
\edef\tts{\tokstostring{#1_}}%
\global\xrlabeltoks = \expandafter{\tts}%
\endgroup
}%
\let\ifxrefwarning = \iftrue
\def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}%
\def\xrefwarningfalse{\@citewarningfalse let\ifxrefwarning = \iffalse}%
\def\xrefn#1{%
\@readauxfile
\xrlabel{#1}% \xrlabeltoks now has the control sequence name.
\toks0 = \expandafter{\csname\the\xrlabeltoks\endcsname}%
\expandafter \ifx\the\toks0\relax
\if@citewarning
\message{\linenumber Undefined label `\tokstostring{#1}'.}%
\fi
\begingroup
\let\spacesub = \space
\expandafter\xdef\the\toks0{`{\tt \tokstostring{#1}}'}%
\endgroup
\fi
\the\toks0 % Always produce something.
}%
\def\xref#1{p.\thinspace\xrefn{#1}}%
\newcount\eqnumber
\def\eqdefn#1{%
\@readauxfile
\global\advance\eqnumber by 1
\begingroup
\xrlabel{#1}% \xrlabeltoks now has the control sequence name.
\edef\@wr{\@writeeqdef{\the\xrlabeltoks}{\the\eqnumber}}%
\@wr
\endgroup
\expandafter\xdef\csname\the\xrlabeltoks\endcsname{\the\eqnumber}%
\ignorespaces
}%
\def\@writeeqdef#1#2{%
\immediatewriteaux{%
\string\gdef\expandafter\string\csname#1\endcsname{#2}%
}%
}%
\def\eqdef#1{%
\@maybedisableeqno
\eqno \eqdefn{#1}\eqprint{\the\eqnumber}%
\@mayberestoreeqno
\ignorespaces
}%
\let\@mayberestoreeqno = \empty
\def\@maybedisableeqno{%
\ifinner
\global\let\eqno = \relax
\global\let\@mayberestoreeqno = \@restoreeqno
\fi
}%
\let\@primitiveeqno = \eqno
\def\@restoreeqno{%
\global\let\eqno = \@primitiveeqno
\global\let\@mayberestoreeqno = \empty
}%
\def\eqref#1{%
\@readauxfile
\xrlabel{#1}% \xrlabeltoks now has the control sequence name.
\toks0 = \expandafter{\csname\the\xrlabeltoks\endcsname}%
\expandafter \ifx\the\toks0\relax
\if@citewarning
\message{\linenumber Undefined equation label `\tokstostring{#1}'.}%
\fi
\begingroup
\let\spacesub = \space
\expandafter\xdef\the\toks0{`{\tt \tokstostring{#1}}'}%
\endgroup
\fi
\eqprint{\the\toks0}%
}%
\def\eqprint#1{(#1)}%
\begingroup
\catcode `\^^M = \active %
\globaldefs = 1 %
\def\flushleft{\beforejustify %
\aftergroup\@endflushleft %
\def^^M{\null\hfil\break}%
\def\@eateol^^M{}%
\@eateol %
}%
\def\flushright{\beforejustify %
\aftergroup\@endflushright %
\def^^M{\break\null\hfil}%
\def\@eateol^^M{\hfil\null}%
\@eateol %
}%
\def\center {\beforejustify %
\aftergroup\@endcenter %
\def^^M{\hfil\break\null\hfil}%
\def\@eateol^^M{\hfil\null}%
\@eateol %
}%
\endgroup
\def\@endflushleft{\unpenalty{\parfillskip = 0pt plus 1 fil\par}\ignorespaces}%
\def\@endflushright{% Remove the \hfil\null\break we just put on.
\unskip \setbox0=\lastbox \unpenalty
{\parfillskip = 0pt \par}\ignorespaces
}%
\def\@endcenter{% Remove the \hfil\null\break we just put on.
\unskip \setbox0=\lastbox \unpenalty
{\parfillskip = 0pt plus 1fil \par}\ignorespaces
}%
\def\beforejustify{%
\par\noindent
\catcode`\^^M = \active
\checkenv \environmenttrue
}%
\newcount\abovecolumnspenalty \abovecolumnspenalty = 10000
\newcount\@linestogo % Lines remaining to process.
\newcount\@linestogoincolumn % Lines remaining in column.
\newcount\@columndepth % Number of lines in a column.
\newdimen\@columnwidth % Width of each column.
\newtoks\crtok \crtok = {\cr}%
\newcount\currentcolumn
\def\makecolumns#1/#2: {\par \begingroup
\@columndepth = #1
\advance\@columndepth by #2
\advance\@columndepth by -1
\divide \@columndepth by #2
\@linestogoincolumn = \@columndepth
\@linestogo = #1
\currentcolumn = 1
\def\@endcolumnactions{%
\ifnum \@linestogo<2
\the\crtok \egroup \endgroup \par % End \valign and \makecolumns.
\else
\global\advance\@linestogo by -1
\ifnum\@linestogoincolumn<2
\global\advance\currentcolumn by 1
\global\@linestogoincolumn = \@columndepth
\the\crtok
\else
&\global\advance\@linestogoincolumn by -1
\fi
\fi
}%
\makeactive\^^M
\letreturn \@endcolumnactions
\@columnwidth = \hsize
\advance\@columnwidth by -\parindent
\divide\@columnwidth by #2
\penalty\abovecolumnspenalty
\noindent % It's not a paragraph (usually).
\valign\bgroup
&\hbox to \@columnwidth{\strut \hsize = \@columnwidth ##\hfil}\cr
}%
\newcount\footnotenumber
\newdimen\footnotemarkseparation \footnotemarkseparation = .5em
\newskip\interfootnoteskip \interfootnoteskip = 0pt
\newtoks\everyfootnote
\newdimen\footnoterulewidth \footnoterulewidth = 2true in
\newdimen\footnoteruleheight \footnoteruleheight = 0.4pt
\newdimen\belowfootnoterulespace \belowfootnoterulespace = 2.6pt
\let\@plainfootnote = \footnote
\let\@plainvfootnote = \vfootnote
\def\vfootnote#1{\insert\footins\bgroup
\interlinepenalty\interfootnotelinepenalty
\splittopskip\ht\strutbox % top baseline for broken footnotes
\advance\splittopskip by \interfootnoteskip
\splitmaxdepth\dp\strutbox
\floatingpenalty\@MM
\leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
\everypar = {}%
\the\everyfootnote
\vskip\interfootnoteskip
\indent\llap{#1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t
}%
\def\footnoterule{\dimen0 = \footnoteruleheight
\advance\dimen0 by \belowfootnoterulespace
\kern-\dimen0
\hrule width\footnoterulewidth height\footnoteruleheight depth0pt
\kern\belowfootnoterulespace
\vskip-\interfootnoteskip
}%
\def\numberedfootnote{%
\global\advance\footnotenumber by 1
\@plainfootnote{$^{\number\footnotenumber}$}%
}%
\newdimen\paperheight \paperheight = 11in
\def\topmargin{\afterassignment\@finishtopmargin \dimen0}%
\def\@finishtopmargin{%
\dimen2 = \voffset % Remember the old \voffset.
\voffset = \dimen0 \advance\voffset by -1in
\advance\dimen2 by -\voffset % Compute the change in \voffset.
\advance\vsize by \dimen2 % Change type area accordingly.
}%
\def\advancetopmargin{%
\dimen0 = 0pt \afterassignment\@finishadvancetopmargin \advance\dimen0
}%
\def\@finishadvancetopmargin{%
\advance\voffset by \dimen0
\advance\vsize by -\dimen0
}%
\def\bottommargin{\afterassignment\@finishbottommargin \dimen0}%
\def\@finishbottommargin{%
\@computebottommargin % Result in \dimen2.
\advance\dimen2 by -\dimen0 % Compute the change in the bottom margin.
\advance\vsize by \dimen2 % Change the type area.
}%
\def\advancebottommargin{%
\dimen0 = 0pt \afterassignment\@finishadvancebottommargin \advance\dimen0
}%
\def\@finishadvancebottommargin{%
\advance\vsize by -\dimen0
}%
\def\@computebottommargin{%
\dimen2 = \paperheight % The total paper size.
\advance\dimen2 by -\vsize % Less the text size.
\advance\dimen2 by -\voffset % Less the offset at the top.
\advance\dimen2 by -1in % Less the default offset.
}%
\newdimen\paperwidth \paperwidth = 8.5in
\def\leftmargin{\afterassignment\@finishleftmargin \dimen0}%
\def\@finishleftmargin{%
\dimen2 = \hoffset % Remember the old \hoffset.
\hoffset = \dimen0 \advance\hoffset by -1in
\advance\dimen2 by -\hoffset % Compute the change in \hoffset.
\advance\hsize by \dimen2 % Change type area accordingly.
}%
\def\advanceleftmargin{%
\dimen0 = 0pt \afterassignment\@finishadvanceleftmargin \advance\dimen0
}%
\def\@finishadvanceleftmargin{%
\advance\hoffset by \dimen0
\advance\hsize by -\dimen0
}%
\def\rightmargin{\afterassignment\@finishrightmargin \dimen0}%
\def\@finishrightmargin{%
\@computerightmargin % Result in \dimen2.
\advance\dimen2 by -\dimen0 % Compute the change in the right margin.
\advance\hsize by \dimen2 % Change the type area.
}%
\def\advancerightmargin{%
\dimen0 = 0pt \afterassignment\@finishadvancerightmargin \advance\dimen0
}%
\def\@finishadvancerightmargin{%
\advance\hsize by -\dimen0
}%
\def\@computerightmargin{%
\dimen2 = \paperwidth % The total paper size.
\advance\dimen2 by -\hsize % Less the text size.
\advance\dimen2 by -\hoffset % Less the offset at the left.
\advance\dimen2 by -1in % Less the default offset.
}%
\newskip\abovedoublecolumnskip \abovedoublecolumnskip = \bigskipamount
\newskip\belowdoublecolumnskip \belowdoublecolumnskip = \bigskipamount
\newdimen\gutter \gutter = 2pc
\newdimen\doublecolumnhsize
\newbox\@partialpage \newdimen\singlecolumnhsize \newdimen\singlecolumnvsize
\newtoks\previousoutput
\def\doublecolumns{%
\doublecolumnhsize = \hsize % If \hsize changed, get the new value.
\par % Shouldn't start in horizontal mode.
\previousoutput = \expandafter{\the\output}%
\advance\doublecolumnhsize by -\gutter
\divide\doublecolumnhsize by 2
\output = {%
\global\setbox\@partialpage =
\vbox{\unvbox255\vskip\abovedoublecolumnskip}%
}%
\pagegoal = \pagetotal
\break % Now expand the \output just above.
\output = {\doublecolumnoutput}%
\singlecolumnhsize = \hsize
\singlecolumnvsize = \vsize
\hsize = \doublecolumnhsize
\vsize = 2\vsize
}%
\def\@doublecolumnsplit{%
\splittopskip = \topskip
\splitmaxdepth = \maxdepth
\dimen0 = \singlecolumnvsize
\advance\dimen0 by -\ht\@partialpage
\advance\dimen0 by -\ht\footins
\ifvoid\footins\else \advance\dimen0 by -\skip\footins \fi
\advance\dimen0 by -\ht\topins
\ifvoid\topins\else \advance\dimen0 by -\skip\topins \fi
\begingroup
\vbadness = 10000
\global\setbox1 = \vsplit255 to \dimen0
\wd1 = \hsize
\global\setbox3 = \vsplit255 to \dimen0
\wd3 = \hsize
\endgroup
\global\setbox4 = \vbox{\unvbox255 \penalty\outputpenalty}%
\global\setbox255
= \vbox{%
\unvbox\@partialpage
\hbox to \singlecolumnhsize{\box1\hfil\box3}%
}%
}%
\def\doublecolumnoutput{%
\@doublecolumnsplit
\hsize = \singlecolumnhsize % Local to the \output group.
\vsize = \singlecolumnvsize
\the\previousoutput
\unvbox4
}%
\def\singlecolumn{%
\par % Shouldn't start in horizontal mode.
\output = {\global\setbox1 = \box255}%
\pagegoal = \pagetotal
\break % Exercise the page builder, i.e., \output.
\setbox255 = \box1 % Retrieve what the fake \output set.
\begingroup
\singlecolumnvsize = \ht\@partialpage
\advance\singlecolumnvsize by \ht\footins
\ifvoid\footins\else \advance\singlecolumnvsize by \skip\footins\fi
\advance\singlecolumnvsize by \ht\topins
\ifvoid\topins\else \advance\singlecolumnvsize by \skip\topins\fi
\dimen0 = \ht255 \divide\dimen0 by 2
\advance\singlecolumnvsize by \dimen0
\advance\singlecolumnvsize by .5\baselineskip
\@doublecolumnsplit
\endgroup
\hsize = \singlecolumnhsize
\vsize = \singlecolumnvsize
\output = \expandafter{\the\previousoutput}%
\unvbox255
\vskip\belowdoublecolumnskip
\nointerlineskip
}%
\let\wlog = \@plainwlog
\catcode`@ = \other
\def\fmtname{eplain}%
\def\eplain{t}%
{\edef\plainversion{\fmtversion}%
\xdef\fmtversion{1.9: 26 April 1991 (and plain \plainversion)}%
}%