summaryrefslogtreecommitdiff
path: root/info/impatient/cn/eplain.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/impatient/cn/eplain.tex
Initial commit
Diffstat (limited to 'info/impatient/cn/eplain.tex')
-rw-r--r--info/impatient/cn/eplain.tex1198
1 files changed, 1198 insertions, 0 deletions
diff --git a/info/impatient/cn/eplain.tex b/info/impatient/cn/eplain.tex
new file mode 100644
index 0000000000..5d4f98e3c0
--- /dev/null
+++ b/info/impatient/cn/eplain.tex
@@ -0,0 +1,1198 @@
+%% @texfile{
+%% author = "Karl Berry et al.",
+%% version = "1.9a",
+%% date = "28jul03",
+%% filename = "eplain.tex",
+%% email = "karl@cs.umb.edu",
+%% codetable = "ISO/ASCII",
+%% supported = "yes",
+%% docstring = "This file defines macros that expand on plain TeX, and
+%% is used in the production of the book TeX for the Impatient. It was
+%% originally version 1.9 from 11mar91, and differs only in this header
+%% material. Sadly, newer versions of eplain have more
+%% incompatibilities with the features we used to produce TFTI. Of
+%% course new documents should use the latest eplain, available from
+%% http://tug.org/eplain and from http://www.ctan.org/macros/eplain.
+%% ",
+%% }
+\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 = logo10
+\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}% fixed %
+ \toks2 = \expandafter{#3}%
+ \edef\cs{\the\toks2}%
+ \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)}%
+}%