home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-10-12 | 75.6 KB | 2,302 lines |
- %% @texfile{
- %% author = "Karl Berry",
- %% version = "2.6",
- %% date = "Mon May 2 07:48:18 EDT 1994",
- %% filename = "eplain.tex",
- %% email = "karl@cs.umb.edu",
- %% address = "135 Center Hill Rd. // Plymouth, MA 02360"
- %% checksum = "2301 5656 77376",
- %% codetable = "ISO/ASCII",
- %% supported = "yes",
- %% docstring = "This file defines macros that extend and expand on
- %% plain TeX. eplain.tex is eplain.tex and the other
- %% source files with comments stripped; see the original
- %% files for author credits, etc. And please base diffs
- %% or other contributions on eplain.tex, not the
- %% stripped-down eplain.tex.",
- %% }
- \def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
- \chardef\letter = 11
- \chardef\other = 12
- \edef\leftdisplays{\the\catcode`@}%
- \catcode`@ = \letter
- \let\@eplainoldatcode = \leftdisplays
- \toksdef\toks@ii = 2
- \def\uncatcodespecials{%
- \def\do##1{\catcode`##1 = \other}%
- \dospecials
- }%
- {%
- \makeactive\^^M %
- \long\gdef\letreturn#1{\let^^M = #1}%
- }%
- \let\@eattoken = \relax % Define this, so \eattoken can be used in \edef.
- \def\eattoken{\let\@eattoken = }%
- \def\gobble#1{}%
- \def\gobbletwo#1#2{}%
- \def\gobblethree#1#2#3{}%
- \def\identity#1{#1}%
- \def\ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
- \def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
- \def\@gobblemeaning#1:->{}%
- \def\sanitize{\expandafter\@gobblemeaning\meaning}%
- \def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}%
- \def\csn#1{\csname#1\endcsname}%
- \def\ece#1#2{\expandafter#1\csname#2\endcsname}%
- \def\expandonce{\expandafter\noexpand}%
- \let\@plainwlog = \wlog
- \let\wlog = \gobble
- \newlinechar = `^^J
- \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
- \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}%
- \def\gtracingoff{\begingroup \globaldefs = 1 \tracingoff \endgroup}%
- \def\tracingoff{\tracingonline\z@\tracingcommands\z@\tracingstats\z@
- \tracingpages\z@\tracingoutput\z@\tracinglostchars\z@
- \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
- \showboxbreadth5 \showboxdepth3
- }%
- \begingroup
- \catcode`\{ = 12 \catcode`\} = 12
- \catcode`\[ = 1 \catcode`\] = 2
- \gdef\lbracechar[{]%
- \gdef\rbracechar[}]%
- \catcode`\% = \other
- \gdef\percentchar[%]\endgroup
- \def^^L{\par}%
- \def\vpenalty{\ifhmode\par\fi \penalty}%
- \def\hpenalty{\ifvmode\leavevmode\fi \penalty}%
- \def\iterate{%
- \let\next\relax
- \body
- \let\next\iterate
- \fi
- \next
- }%
- \def\edefappend#1#2{%
- \toks@ = \expandafter{#1}%
- \edef#1{\the\toks@ #2}%
- }%
- \long\def\hookprepend{\@hookassign{\the\toks@ii \the\toks@}}%
- \long\def\hookappend{\@hookassign{\the\toks@ \the\toks@ii}}%
- \let\hookaction = \hookappend % either one should be ok
- \long\def\@hookassign#1#2#3{%
- \expandafter\ifx\csname @#2hook\endcsname \relax
- \toks@ = {}%
- \else
- \expandafter\let\expandafter\temp \csname @#2hook\endcsname
- \toks@ = \expandafter{\temp}%
- \fi
- \toks2 = {#3}% Don't expand the argument all the way.
- \ece\edef{@#2hook}{#1}%
- }%
- \long\def\hookactiononce#1#2{%
- \edefappend#2{\global\let\noexpand#2\relax}
- \hookaction{#1}#2%
- }%
- \def\hookrun#1{%
- \expandafter\ifx\csname @#1hook\endcsname \relax \else
- \def\temp{\csname @#1hook\endcsname}%
- \expandafter\temp
- \fi
- }%
- \def\setproperty#1#2#3{\ece\edef{#1@p#2}{#3}}%
- \def\getproperty#1#2{%
- \expandafter\ifx\csname#1@p#2\endcsname\relax
- \else \csname#1@p#2\endcsname
- \fi
- }%
- \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.99j",
- %% date = "14 Mar 1992",
- %% filename = "btxmac.tex",
- %% address = "Please use electronic mail",
- %% checksum = "834 4503 33061",
- %% email = "opbibtex@cs.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\@futurenonspacelet#1{\def\cs{#1}%
- \afterassignment\@stepone\let\@nexttoken=
- }%
- \begingroup % The grouping here avoids stepping on an outside use of `\\'.
- \def\\{\global\let\@stoken= }%
- \\ % now \@stoken is a space token (\\ is a control symbol, so that
- \endgroup
- \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= }%
- \def\@getoptionalarg#1{%
- \let\@optionaltemp = #1%
- \let\@optionalnext = \relax
- \@futurenonspacelet\@optionalnext\@bracketcheck
- }%
- \def\@bracketcheck{%
- \ifx [\@optionalnext
- \expandafter\@@getoptionalarg
- \else
- \let\@optionalarg = \empty
- \expandafter\@optionaltemp
- \fi
- }%
- \def\@@getoptionalarg[#1]{%
- \def\@optionalarg{#1}%
- \@optionaltemp
- }%
- \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
- \let\bblfilebasename = \jobname
- \def\bibliography#1{%
- \@readauxfile
- \@writeaux{\string\bibdata{#1}}%
- \@testfileexistence[\bblfilebasename]{bbl}%
- \if@fileexists
- \nobreak
- \@readbblfile
- \fi
- }%
- \let\bibdata = \@gobble
- \def\nocite#1{%
- \@readauxfile
- \@writeaux{\string\citation{#1}}%
- }%
- \@innernewif\if@notfirstcitation
- \def\cite{\@getoptionalarg\@cite}%
- \def\@cite#1{%
- \let\@citenotetext = \@optionalarg
- \printcitestart
- \nocite{#1}%
- \@notfirstcitationfalse
- \@for \@citation :=#1\do
- {%
- \expandafter\@onecitation\@citation\@@
- }%
- \ifx\empty\@citenotetext\else
- \printcitenote{\@citenotetext}%
- \fi
- \printcitefinish
- }%
- \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
- \escapechar = -1
- \nobreak\hskip0pt
- \expandafter\string\csname#1\endcsname
- \nobreak\hskip0pt
- }%
- }%
- \fi
- \@printcitelabel{#1}%
- \@notfirstcitationtrue
- }%
- \def\@printcitelabel#1{%
- \csname\@citelabel{#1}\endcsname
- }%
- \def\@citelabel#1{b@#1}%
- \def\@citedef#1#2{\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}}%
- \def\@readbblfile{%
- \ifx\@itemnum\@undefined
- \@innernewcount\@itemnum
- \fi
- \begingroup
- \ifx\begin\undefined
- \def\begin##1##2{%
- \setbox0 = \hbox{\biblabelcontents{##2}}%
- \biblabelwidth = \wd0
- }%
- \let\end = \@gobble % The arg is `thebibliography' again.
- \fi
- \@itemnum = 0
- \def\bibitem{\@getoptionalarg\@bibitem}%
- \def\@bibitem{%
- \ifx\@optionalarg\empty
- \expandafter\@numberedbibitem
- \else
- \expandafter\@alphabibitem
- \fi
- }%
- \def\@alphabibitem##1{%
- \expandafter \xdef\csname\@citelabel{##1}\endcsname {\@optionalarg}%
- \ifx\biblabelprecontents\@undefined
- \let\biblabelprecontents = \relax
- \fi
- \ifx\biblabelpostcontents\@undefined
- \let\biblabelpostcontents = \hss
- \fi
- \@finishbibitem{##1}%
- }%
- \def\@numberedbibitem##1{%
- \advance\@itemnum by 1
- \expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}%
- \ifx\biblabelprecontents\@undefined
- \let\biblabelprecontents = \hss
- \fi
- \ifx\biblabelpostcontents\@undefined
- \let\biblabelpostcontents = \relax
- \fi
- \@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 \biblabelextraspace}%
- \bblrm
- \parskip = 1.5ex plus .5ex minus .5ex
- \biblabelextraspace = .5em
- \bblhook
- \input \bblfilebasename.bbl
- \endgroup
- }%
- \@innernewdimen\biblabelwidth
- \@innernewdimen\biblabelextraspace
- \def\biblabelprint#1{%
- \noindent
- \hbox to \biblabelwidth{%
- \biblabelprecontents
- \biblabelcontents{#1}%
- \biblabelpostcontents
- }%
- \kern\biblabelextraspace
- }%
- \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}%
- \@getoptionalarg\@continuenewcommand
- }%
- \def\@continuenewcommand{%
- \@numparams = \ifx\@optionalarg\empty 0\else\@optionalarg \fi \relax
- \@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
- \catcode`@ = 11
- \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
- \@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\futurenonspacelet = \@futurenonspacelet
- \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\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\ \let =\ %
- \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{%
- \ifhmode
- \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
- \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}%
- }%
- \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}%
- %%% ====================================================================
- %%% @TeX-style-file{
- %%% author = "Nelson H. F. Beebe",
- %%% version = "1.09",
- %%% date = "16 March 1993",
- %%% time = "10:08:05 MST",
- %%% filename = "texnames.sty",
- %%% address = "Center for Scientific Computing
- %%% Department of Mathematics
- %%% South Physics Building
- %%% University of Utah
- %%% Salt Lake City, UT 84112
- %%% USA
- %%% Tel: (801) 581-5254
- %%% FAX: (801) 581-4148",
- %%% checksum = "15888 291 1374 12268",
- %%% email = "beebe@magna.math.utah.edu (Internet)",
- %%% codetable = "ISO/ASCII",
- %%% keywords = "TeX names",
- %%% supported = "yes",
- %%% docstring = "This style file for AmSTeX, LaTeX, and TeX
- %%% defines macros for the names of TeX
- %%% and METAFONT programs, in several
- %%% letter-case variants:
- %%%
- %%% \AMSTEX, \AMSTeX, \AmSTeX
- %%% \BIBTEX, \BIBTeX, \BibTeX
- %%% \LAMSTeX, \LAmSTeX
- %%% \LaTeX, \LATEX
- %%% \METAFONT, \MF
- %%% \SLITEX, \SLITeX, \SLiTeX, \SliTeX
- %%%
- %%% It will NOT redefine any macro that
- %%% already exists, so it can be included
- %%% harmlessly after other style files.
- %%%
- %%% In AmSTeX or Plain TeX, just do
- %%%
- %%% \input texnames.sty
- %%%
- %%% In LaTeX, do
- %%%
- %%% \documentstyle[...,texnames]{...}
- %%%
- %%% This file grew out of original work by
- %%%
- %%% Richard Furuta
- %%% Department of Computer Science
- %%% University of Maryland
- %%% College Park, MD 20742
- %%%
- %%% furuta@mimsy.umd.edu
- %%% seismo!umcp-cs!furuta
- %%%
- %%% 22 October 1986, first release (1.00)
- %%%
- %%% 1 April 1987 (1.01): Modified by William
- %%% LeFebvre, Rice University to include
- %%% definitions for BibTeX and SLiTeX, as they
- %%% appear in the LaTeX Local User's Guide
- %%% template (the file latex/local.tex in
- %%% standard distributions)
- %%%
- %%% 26 October 1991 (1.02): Modified by
- %%% Nelson H. F. Beebe <beebe@math.utah.edu> to
- %%% add several new macro names, and adapt for
- %%% use with Plain TeX and AmSTeX.
- %%%
- %%% 26 October 1991 (1.03): Add \LaTeX and
- %%% \LATEX
- %%%
- %%% 25 November 1991 (1.04): Add \LamSTeX
- %%% and \LAMSTeX
- %%%
- %%% 27 January 1991 (1.05 and 1.06): Add slanted
- %%% font support for \MF. Make several comment
- %%% changes. Add a couple of missing % at end
- %%% of line, and replace blank lines by empty
- %%% comments.
- %%%
- %%% 30 December 1992 (1.07): Use \TeX in
- %%% definitions of \BibTeX and \LaTeX. Remove
- %%% occurrences of \rm. Change \sc to use
- %%% \scriptfont instead of hardwiring cmcsc10.
- %%% Use \cal for \LAMSTeX.
- %%%
- %%% 1 March 1993 (1.08): Consolidate \ifx's onto
- %%% single lines for brevity. Add
- %%% \spacefactor1000 to definitions for \TeX and \MF.
- %%%
- %%% 16 March 1993 (1.09): Add \AmS, \AMS, \AmSLaTeX,
- %%% and \AMSLaTeX.
- %%%
- %%% 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.",
- %%%
- %%% }
- %%% ====================================================================
- \ifx\sc\undefined
- \def\sc{%
- \expandafter\ifx\the\scriptfont\fam\nullfont
- \font\temp = cmr7 \temp
- \else
- \the\scriptfont\fam
- \fi
- \def\uppercasesc{\char\uccode`}%
- }%
- \fi
- \ifx\uppercasesc\undefined
- \let\uppercasesc = \relax
- \fi
- \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\spacefactor1000 }%
- \ifx\AmS\undefined
- \def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
- {\the\textfont2 M}\kern-.125em{\the\textfont2 S}}
- \fi
- \ifx\AMS\undefined \let\AMS=\AmS \fi
- \ifx\AmSLaTeX\undefined
- \def\AmSLaTeX{\AmS-\LaTeX}
- \fi
- \ifx\AMSLaTeX\undefined \let\AMSLaTeX=\AmSLaTeX \fi
- \ifx\AmSTeX\undefined
- \def\AmSTeX{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}%
- \kern-.125em$\cal S$-\TeX}%
- \fi
- \ifx\AMSTEX\undefined \let\AMSTEX=\AmSTeX \fi
- \ifx\AMSTeX\undefined \let\AMSTeX=\AmSTeX \fi
- \ifx\BibTeX\undefined
- \def\BibTeX{B{\sc \uppercasesc i\kern-.025em \uppercasesc b}\kern-.08em
- \TeX}%
- \fi
- \ifx\BIBTeX\undefined \let\BIBTeX=\BibTeX \fi
- \ifx\BIBTEX\undefined \let\BIBTEX=\BibTeX \fi
- \ifx\LAMSTeX\undefined
- \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}%
- \fi
- \ifx\LamSTeX\undefined \let\LamSTeX=\LAMSTeX \fi
- \ifx\LAmSTeX\undefined \let\LAmSTeX=\LAMSTeX \fi
- \ifx\LaTeX\undefined
- \def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc \uppercasesc a}\kern-.15em\TeX}%
- \fi
- \ifx\LATEX\undefined \let\LATEX=\LaTeX \fi
- \ifx\MF\undefined
- \ifx\manfnt\undefined
- \font\manfnt=logo10
- \fi
- \ifx\manfntsl\undefined
- \font\manfntsl=logosl10
- \fi
- \def\MF{{\ifdim\fontdimen1\font>0pt \let\manfnt = \manfntsl \fi
- {\manfnt META}\-{\manfnt FONT}}\spacefactor1000 }%
- \fi
- \ifx\METAFONT\undefined \let\METAFONT=\MF \fi
- \ifx\SLITEX\undefined
- \def\SLITEX{S\kern-.065em L\kern-.18em\raise.32ex\hbox{i}\kern-.03em\TeX}%
- \fi
- \ifx\SLiTeX\undefined \let\SLiTeX=\SLITEX \fi
- \ifx\SliTeX\undefined \let\SliTeX=\SLITEX \fi
- \ifx\SLITeX\undefined \let\SLITeX=\SLITEX \fi
- %%% @texfile{
- %%% author = "Philip Taylor",
- %%% version = "3.04",
- %%% date = "25 July 1992",
- %%% time = "17:07 EDT",
- %%% filename = "path.sty",
- %%% address = "The Computer Centre
- %%% RHBNC, University of London
- %%% Egham Hill
- %%% Egham, Surrey TW20 0EX, ENGLAND",
- %%% telephone = "Tel: +44 784 443172",
- %%% FAX = "Fax: +44 784 434348",
- %%% checksum = "41143 321 1758 13526",
- %%% email = "P.Taylor@Vax.Rhbnc.Ac.Uk (Internet)",
- %%% codetable = "ISO/ASCII",
- %%% keywords = "file name, filename, path name, pathname,
- %%% discretionary, discretionaries",
- %%% supported = "yes",
- %%% docstring = {Computer filenames, host names, and e-mail
- %%% addresses tend to be long strings that
- %%% cause line breaking problems for TeX.
- %%% Sometimes rather long strings are
- %%% encountered; here are two examples:
- %%%
- %%% Friesland%rz.informatik.uni-hamburg.dbp.de%germany.csnet@relay.cs.net
- %%%
- %%% mighty-mouse-gw.scrc.symbolics.com
- %%%
- %%% This file defines a macro, \path|...|,
- %%% similar to LaTeX's \verb|...| macro, that
- %%% sets the text in the typewriter font,
- %%% allowing hyphen-less line breaks at
- %%% punctuation characters.
- %%%
- %%% The default set of punctuation characters is
- %%% defined as
- %%%
- %%% \discretionaries |~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/|
- %%%
- %%% However, you can change it as needed, for example:
- %%%
- %%% \discretionaries +@%!.+
- %%%
- %%% would assign to it the set @ % ! . which
- %%% commonly occur in electronic mail addresses.
- %%%
- %%% The delimiter characters surrounding the
- %%% arguments to \discretionaries and \path
- %%% will normally be a punctuation character not
- %%% found in the argument, and not otherwise
- %%% significant to TeX. In particular, backslash
- %%% cannot be used as a delimiter. In the rare
- %%% event that this is required, set
- %%%
- %%% \specialpathdelimiterstrue
- %%%
- %%% This practice is not recommended, because TeX
- %%% then runs about four times slower while it is
- %%% typesetting \path\...\ requests.
- %%% \specialpathdelimitersfalse is the normal
- %%% setting.
- %%%
- %%% This file may be used in Plain TeX or AmSTeX by
- %%%
- %%% \input path.sty
- %%%
- %%% and in LaTeX by
- %%%
- %%% \documentstyle[...,path,...]{...}
- %%%
- %%% 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.}
- %%% }
- \edef\path{\the\catcode`@}%
- \catcode`@ = 11
- \let\@oldatcatcode = \path
- \newcount \c@tcode
- \newcount \c@unter
- \newif \ifspecialpathdelimiters
- \begingroup
- \catcode `\ = 10
- \gdef \passivesp@ce { }%
- \catcode `\ = 13\relax%
- \gdef\activesp@ce{ }%
- \endgroup
- \def \discretionaries % <delim> <chars> <delim>
- {\begingroup
- \c@tcodes = 13
- \discr@tionaries
- }%
- \def \discr@tionaries #1% <delim>
- {\def \discr@ti@naries ##1#1% <chars> <delim>
- {\endgroup
- \def \discr@ti@n@ries ####1% <char> or <delim>
- {\if \noexpand ####1\noexpand #1%
- \let \n@xt = \relax
- \else
- \catcode `####1 = 13
- \def ####1{\discretionary
- {\char `####1}{}{\char `####1}}%
- \let \n@xt = \discr@ti@n@ries
- \fi
- \n@xt
- }%
- \def \discr@ti@n@ri@s {\discr@ti@n@ries ##1#1}%
- }%
- \discr@ti@naries
- }%
- \let\pathafterhook = \relax
- \def \path
- {\ifspecialpathdelimiters
- \begingroup
- \c@tcodes = 12
- \def \endp@th {\endgroup \endgroup \pathafterhook}%
- \else
- \def \endp@th {\endgroup \pathafterhook}%
- \fi
- \p@th
- }%
- \def \p@th #1% <delim>
- {\begingroup
- \tt
- \c@tcode = \catcode `#1
- \discr@ti@n@ri@s
- \catcode `\ = \active
- \expandafter \edef \activesp@ce {\passivesp@ce \hbox {}}%
- \catcode `#1 = \c@tcode
- \def \p@@th ##1#1% <chars> <delim>
- {\leavevmode \hbox {}##1%
- \endp@th
- }%
- \p@@th
- }%
- \def \c@tcodes {\afterassignment \c@tc@des \c@tcode}%
- \def \c@tc@des
- {\c@unter = 0
- \loop
- \ifnum \catcode \c@unter = \c@tcode
- \else
- \catcode \c@unter = \c@tcode
- \fi
- \ifnum \c@unter < 255
- \advance \c@unter by 1
- \repeat
- \catcode `\ = 10
- }%
- \catcode `\@ = \@oldatcatcode
- \discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|%
- \def\blackbox{\vrule height .8ex width .6ex depth -.2ex \relax}% square bullet
- \def\makeblankbox#1#2{%
- \ifvoid0
- \errhelp = \@makeblankboxhelp
- \errmessage{Box 0 is void}%
- \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%
- \dimen@=#1\advance\dimen@ by #2%
- \vrule width\dimen@
- \kern-#2%
- }%
- \newdimen\boxitspace \boxitspace = 3pt
- \long\def\boxit#1{%
- \vbox{%
- \ehrule
- \hbox{%
- \evrule
- \kern\boxitspace
- \vbox{\kern\boxitspace \parindent = 0pt #1\kern\boxitspace}%
- \kern\boxitspace
- \evrule
- }%
- \ehrule
- }%
- }%
- \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
- }%
- \let\@plainnewif = \newif
- \let\@plainnewdimen = \newdimen
- \let\newif = \innernewif
- \let\newdimen = \innernewdimen
- \edef\@eplainoldandcode{\the\catcode`& }%
- \catcode`& = 11
- \toks0 = {%
- \edef\thinlines{\the\catcode`@ }%
- \catcode`@ = 11
- \let\@oldatcatcode = \thinlines
- \edef\@oldandcatcode{\the\catcode`& }%
- \catcode`& = 11
- \def\&whilenoop#1{}%
- \def\&whiledim#1\do #2{\ifdim #1\relax#2\&iwhiledim{#1\relax#2}\fi}%
- \def\&iwhiledim#1{\ifdim #1\let\&nextwhile=\&iwhiledim
- \else\let\&nextwhile=\&whilenoop\fi\&nextwhile{#1}}%
- \newif\if&negarg
- \newdimen\&wholewidth
- \newdimen\&halfwidth
- \font\tenln=line10
- \def\thinlines{\let\&linefnt\tenln \let\&circlefnt\tencirc
- \&wholewidth\fontdimen8\tenln \&halfwidth .5\&wholewidth}%
- \def\thicklines{\let\&linefnt\tenlnw \let\&circlefnt\tencircw
- \&wholewidth\fontdimen8\tenlnw \&halfwidth .5\&wholewidth}%
- \def\drawline(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax \&linelen=#3\relax
- \ifnum\&xarg =0 \&vline \else \ifnum\&yarg =0 \&hline \else \&sline\fi\fi}%
- \def\&sline{\leavevmode
- \ifnum\&xarg< 0 \&negargtrue \&xarg -\&xarg \&yyarg -\&yarg
- \else \&negargfalse \&yyarg \&yarg \fi
- \ifnum \&yyarg >0 \&tempcnta\&yyarg \else \&tempcnta -\&yyarg \fi
- \ifnum\&tempcnta>6 \&badlinearg \&yyarg0 \fi
- \ifnum\&xarg>6 \&badlinearg \&xarg1 \fi
- \setbox\&linechar\hbox{\&linefnt\&getlinechar(\&xarg,\&yyarg)}%
- \ifnum \&yyarg >0 \let\&upordown\raise \&clnht\z@
- \else\let\&upordown\lower \&clnht \ht\&linechar\fi
- \&clnwd=\wd\&linechar
- \&whiledim \&clnwd <\&linelen \do {%
- \&upordown\&clnht\copy\&linechar
- \advance\&clnht \ht\&linechar
- \advance\&clnwd \wd\&linechar
- }%
- \advance\&clnht -\ht\&linechar
- \advance\&clnwd -\wd\&linechar
- \&tempdima\&linelen\advance\&tempdima -\&clnwd
- \&tempdimb\&tempdima\advance\&tempdimb -\wd\&linechar
- \hskip\&tempdimb \multiply\&tempdima \@m
- \&tempcnta \&tempdima \&tempdima \wd\&linechar \divide\&tempcnta \&tempdima
- \&tempdima \ht\&linechar \multiply\&tempdima \&tempcnta
- \divide\&tempdima \@m
- \advance\&clnht \&tempdima
- \ifdim \&linelen <\wd\&linechar \hskip \wd\&linechar
- \else\&upordown\&clnht\copy\&linechar\fi}%
- \def\&hline{\vrule height \&halfwidth depth \&halfwidth width \&linelen}%
- \def\&getlinechar(#1,#2){\&tempcnta#1\relax\multiply\&tempcnta 8
- \advance\&tempcnta -9 \ifnum #2>0 \advance\&tempcnta #2\relax\else
- \advance\&tempcnta -#2\relax\advance\&tempcnta 64 \fi
- \char\&tempcnta}%
- \def\drawvector(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax
- \&tempcnta \ifnum\&xarg<0 -\&xarg\else\&xarg\fi
- \ifnum\&tempcnta<5\relax \&linelen=#3\relax
- \ifnum\&xarg =0 \&vvector \else \ifnum\&yarg =0 \&hvector
- \else \&svector\fi\fi\else\&badlinearg\fi}%
- \def\&hvector{\ifnum\&xarg<0 \rlap{\&linefnt\&getlarrow(1,0)}\fi \&hline
- \ifnum\&xarg>0 \llap{\&linefnt\&getrarrow(1,0)}\fi}%
- \def\&vvector{\ifnum \&yarg <0 \&downvector \else \&upvector \fi}%
- \def\&svector{\&sline
- \&tempcnta\&yarg \ifnum\&tempcnta <0 \&tempcnta=-\&tempcnta\fi
- \ifnum\&tempcnta <5
- \if&negarg\ifnum\&yarg>0 % 3d quadrant; dp > 0
- \llap{\lower\ht\&linechar\hbox to\&linelen{\&linefnt
- \&getlarrow(\&xarg,\&yyarg)\hss}}\else % 4th quadrant; ht > 0
- \llap{\hbox to\&linelen{\&linefnt\&getlarrow(\&xarg,\&yyarg)\hss}}\fi
- \else\ifnum\&yarg>0 % 1st quadrant; ht > 0
- \&tempdima\&linelen \multiply\&tempdima\&yarg
- \divide\&tempdima\&xarg \advance\&tempdima-\ht\&linechar
- \raise\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\else
- \&tempdima\&linelen \multiply\&tempdima-\&yarg % 2d quadrant; dp > 0
- \divide\&tempdima\&xarg
- \lower\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\fi\fi
- \else\&badlinearg\fi}%
- \def\&getlarrow(#1,#2){\ifnum #2 =\z@ \&tempcnta='33\else
- \&tempcnta=#1\relax\multiply\&tempcnta \sixt@@n \advance\&tempcnta
- -9 \&tempcntb=#2\relax\multiply\&tempcntb \tw@
- \ifnum \&tempcntb >0 \advance\&tempcnta \&tempcntb\relax
- \else\advance\&tempcnta -\&tempcntb\advance\&tempcnta 64
- \fi\fi\char\&tempcnta}%
- \def\&getrarrow(#1,#2){\&tempcntb=#2\relax
- \ifnum\&tempcntb < 0 \&tempcntb=-\&tempcntb\relax\fi
- \ifcase \&tempcntb\relax \&tempcnta='55 \or
- \ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta
- 24 \advance\&tempcnta -6 \else \ifnum #1=3 \&tempcnta=49
- \else\&tempcnta=58 \fi\fi\or
- \ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta
- 24 \advance\&tempcnta -3 \else \&tempcnta=51\fi\or
- \&tempcnta=#1\relax\multiply\&tempcnta
- \sixt@@n \advance\&tempcnta -\tw@ \else
- \&tempcnta=#1\relax\multiply\&tempcnta
- \sixt@@n \advance\&tempcnta 7 \fi\ifnum #2<0 \advance\&tempcnta 64 \fi
- \char\&tempcnta}%
- \def\&vline{\ifnum \&yarg <0 \&downline \else \&upline\fi}%
- \def\&upline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth
- height \&linelen depth \z@\hss}}%
- \def\&downline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth
- height \z@ depth \&linelen \hss}}%
- \def\&upvector{\&upline\setbox\&tempboxa\hbox{\&linefnt\char'66}\raise
- \&linelen \hbox to\z@{\lower \ht\&tempboxa\box\&tempboxa\hss}}%
- \def\&downvector{\&downline\lower \&linelen
- \hbox to \z@{\&linefnt\char'77\hss}}%
- \def\&badlinearg{\errmessage{Bad \string\arrow\space argument.}}%
- \thinlines
- \countdef\&xarg 0
- \countdef\&yarg 2
- \countdef\&yyarg 4
- \countdef\&tempcnta 6
- \countdef\&tempcntb 8
- \dimendef\&linelen 0
- \dimendef\&clnwd 2
- \dimendef\&clnht 4
- \dimendef\&tempdima 6
- \dimendef\&tempdimb 8
- \chardef\@arrbox 0
- \chardef\&linechar 2
- \chardef\&tempboxa 2 % \&linechar and \&tempboxa don't interfere.
- \let\lft^%
- \let\rt_% distinguish between \rt and \lft
- \newif\if@pslope % test for positive slope
- \def\@findslope(#1,#2){\ifnum#1>0
- \ifnum#2>0 \@pslopetrue \else\@pslopefalse\fi \else
- \ifnum#2>0 \@pslopefalse \else\@pslopetrue\fi\fi}%
- \def\generalsmap(#1,#2){\getm@rphposn(#1,#2)\plnmorph\futurelet\next\addm@rph}%
- \def\sline(#1,#2){\setbox\@arrbox=\hbox{\drawline(#1,#2){\sarrowlength}}%
- \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}%
- \def\arrow(#1,#2){\setbox\@arrbox=\hbox{\drawvector(#1,#2){\sarrowlength}}%
- \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}%
- \newif\ifd@@blearr
- \def\bisline(#1,#2){\@findslope(#1,#2)%
- \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
- \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
- \rlap{\drawline(#1,#2){\sarrowlength}}%
- \hskip\@hchannel\hbox{\drawline(#1,#2){\sarrowlength}}}%
- \d@@blearrtrue\generalsmap(#1,#2)}%
- \def\biarrow(#1,#2){\@findslope(#1,#2)%
- \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
- \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
- \rlap{\drawvector(#1,#2){\sarrowlength}}%
- \hskip\@hchannel\hbox{\drawvector(#1,#2){\sarrowlength}}}%
- \d@@blearrtrue\generalsmap(#1,#2)}%
- \def\adjarrow(#1,#2){\@findslope(#1,#2)%
- \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
- \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
- \rlap{\drawvector(#1,#2){\sarrowlength}}%
- \hskip\@hchannel\hbox{\drawvector(-#1,-#2){\sarrowlength}}}%
- \d@@blearrtrue\generalsmap(#1,#2)}%
- \newif\ifrtm@rph
- \def\@shiftmorph#1{\hbox{\setbox0=\hbox{$\scriptstyle#1$}%
- \setbox1=\hbox{\hskip\@hm@rphshift\raise\@vm@rphshift\copy0}%
- \wd1=\wd0 \ht1=\ht0 \dp1=\dp0 \box1}}%
- \def\@hm@rphshift{\ifrtm@rph
- \ifdim\hmorphposnrt=\z@\hmorphposn\else\hmorphposnrt\fi \else
- \ifdim\hmorphposnlft=\z@\hmorphposn\else\hmorphposnlft\fi \fi}%
- \def\@vm@rphshift{\ifrtm@rph
- \ifdim\vmorphposnrt=\z@\vmorphposn\else\vmorphposnrt\fi \else
- \ifdim\vmorphposnlft=\z@\vmorphposn\else\vmorphposnlft\fi \fi}%
- \def\addm@rph{\ifx\next\lft\let\temp=\lftmorph\else
- \ifx\next\rt\let\temp=\rtmorph\else\let\temp\relax\fi\fi \temp}%
- \def\plnmorph{\dimen1\wd\@arrbox \ifdim\dimen1<\z@ \dimen1-\dimen1\fi
- \vcenter{\box\@arrbox}}%
- \def\lftmorph\lft#1{\rtm@rphfalse \setbox0=\@shiftmorph{#1}%
- \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
- \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss % \dimen1=\wd\@arrbox
- \llap{\box0}\hss}\hskip\@hmorphdflt}\futurelet\next\addm@rph}%
- \def\rtmorph\rt#1{\rtm@rphtrue \setbox0=\@shiftmorph{#1}%
- \if@pslope \let\@upordown\lower \else \let\@upordown\raise\fi
- \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss
- \rlap{\box0}\hss}\hskip-\@hmorphdflt}\futurelet\next\addm@rph}%
- \def\getm@rphposn(#1,#2){\ifd@@blearr \dimen@\morphdist \advance\dimen@ by
- .5\channelwidth \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\dimen@}\else
- \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\morphdist}\fi}%
- \def\getch@nnel(#1,#2){\ifdim\hchannel=\z@ \ifdim\vchannel=\z@
- \@getshift(#1,#2){\@hchannel}{\@vchannel}{\channelwidth}%
- \else \@hchannel\hchannel \@vchannel\vchannel \fi
- \else \@hchannel\hchannel \@vchannel\vchannel \fi}%
- \def\@getshift(#1,#2)#3#4#5{\dimen@ #5\relax
- \&xarg #1\relax \&yarg #2\relax
- \ifnum\&xarg<0 \&xarg -\&xarg \fi
- \ifnum\&yarg<0 \&yarg -\&yarg \fi
- \ifnum\&xarg<\&yarg \&negargtrue \&yyarg\&xarg \&xarg\&yarg \&yarg\&yyarg\fi
- \ifcase\&xarg \or % There is no case 0
- \ifcase\&yarg % case 1
- \dimen@i \z@ \dimen@ii \dimen@ \or % case (1,0)
- \dimen@i .7071\dimen@ \dimen@ii .7071\dimen@ \fi \or
- \ifcase\&yarg % case 2
- \or % case 0,2 wrong
- \dimen@i .4472\dimen@ \dimen@ii .8944\dimen@ \fi \or
- \ifcase\&yarg % case 3
- \or % case 0,3 wrong
- \dimen@i .3162\dimen@ \dimen@ii .9486\dimen@ \or
- \dimen@i .5547\dimen@ \dimen@ii .8321\dimen@ \fi \or
- \ifcase\&yarg % case 4
- \or % case 0,2,4 wrong
- \dimen@i .2425\dimen@ \dimen@ii .9701\dimen@ \or\or
- \dimen@i .6\dimen@ \dimen@ii .8\dimen@ \fi \or
- \ifcase\&yarg % case 5
- \or % case 0,5 wrong
- \dimen@i .1961\dimen@ \dimen@ii .9801\dimen@ \or
- \dimen@i .3714\dimen@ \dimen@ii .9284\dimen@ \or
- \dimen@i .5144\dimen@ \dimen@ii .8575\dimen@ \or
- \dimen@i .6247\dimen@ \dimen@ii .7801\dimen@ \fi \or
- \ifcase\&yarg % case 6
- \or % case 0,2,3,4,6 wrong
- \dimen@i .1645\dimen@ \dimen@ii .9864\dimen@ \or\or\or\or
- \dimen@i .6402\dimen@ \dimen@ii .7682\dimen@ \fi \fi
- \if&negarg \&tempdima\dimen@i \dimen@i\dimen@ii \dimen@ii\&tempdima\fi
- #3\dimen@i\relax #4\dimen@ii\relax }%
- \catcode`\&=4 % Back to alignment tab
- }%
- \catcode`& = 4
- \toks2 = {%
- \catcode`\&=4 % Back to alignment tab
- \def\generalhmap{\futurelet\next\@generalhmap}%
- \def\@generalhmap{\ifx\next^ \let\temp\generalhm@rph\else
- \ifx\next_ \let\temp\generalhm@rph\else \let\temp\m@kehmap\fi\fi \temp}%
- \def\generalhm@rph#1#2{\ifx#1^
- \toks@=\expandafter{\the\toks@#1{\rtm@rphtrue\@shiftmorph{#2}}}\else
- \toks@=\expandafter{\the\toks@#1{\rtm@rphfalse\@shiftmorph{#2}}}\fi
- \generalhmap}%
- \def\m@kehmap{\mathrel{\smash{\the\toks@}}}%
- \def\mapright{\toks@={\mathop{\vcenter{\smash{\drawrightarrow}}}\limits}%
- \generalhmap}%
- \def\mapleft{\toks@={\mathop{\vcenter{\smash{\drawleftarrow}}}\limits}%
- \generalhmap}%
- \def\bimapright{\toks@={\mathop{\vcenter{\smash{\drawbirightarrow}}}\limits}%
- \generalhmap}%
- \def\bimapleft{\toks@={\mathop{\vcenter{\smash{\drawbileftarrow}}}\limits}%
- \generalhmap}%
- \def\adjmapright{\toks@={\mathop{\vcenter{\smash{\drawadjrightarrow}}}\limits}%
- \generalhmap}%
- \def\adjmapleft{\toks@={\mathop{\vcenter{\smash{\drawadjleftarrow}}}\limits}%
- \generalhmap}%
- \def\hline{\toks@={\mathop{\vcenter{\smash{\drawhline}}}\limits}%
- \generalhmap}%
- \def\bihline{\toks@={\mathop{\vcenter{\smash{\drawbihline}}}\limits}%
- \generalhmap}%
- \def\drawrightarrow{\hbox{\drawvector(1,0){\harrowlength}}}%
- \def\drawleftarrow{\hbox{\drawvector(-1,0){\harrowlength}}}%
- \def\drawbirightarrow{\hbox{\raise.5\channelwidth
- \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth
- \llap{\drawvector(1,0){\harrowlength}}}}%
- \def\drawbileftarrow{\hbox{\raise.5\channelwidth
- \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth
- \llap{\drawvector(-1,0){\harrowlength}}}}%
- \def\drawadjrightarrow{\hbox{\raise.5\channelwidth
- \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth
- \llap{\drawvector(1,0){\harrowlength}}}}%
- \def\drawadjleftarrow{\hbox{\raise.5\channelwidth
- \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth
- \llap{\drawvector(-1,0){\harrowlength}}}}%
- \def\drawhline{\hbox{\drawline(1,0){\harrowlength}}}%
- \def\drawbihline{\hbox{\raise.5\channelwidth
- \hbox{\drawline(1,0){\harrowlength}}\lower.5\channelwidth
- \llap{\drawline(1,0){\harrowlength}}}}%
- \def\generalvmap{\futurelet\next\@generalvmap}%
- \def\@generalvmap{\ifx\next\lft \let\temp\generalvm@rph\else
- \ifx\next\rt \let\temp\generalvm@rph\else \let\temp\m@kevmap\fi\fi \temp}%
- \toksdef\toks@@=1
- \def\generalvm@rph#1#2{\ifx#1\rt % append
- \toks@=\expandafter{\the\toks@
- \rlap{$\vcenter{\rtm@rphtrue\@shiftmorph{#2}}$}}\else % prepend
- \toks@@={\llap{$\vcenter{\rtm@rphfalse\@shiftmorph{#2}}$}}%
- \toks@=\expandafter\expandafter\expandafter{\expandafter\the\expandafter
- \toks@@ \the\toks@}\fi \generalvmap}%
- \def\m@kevmap{\the\toks@}%
- \def\mapdown{\toks@={\vcenter{\drawdownarrow}}\generalvmap}%
- \def\mapup{\toks@={\vcenter{\drawuparrow}}\generalvmap}%
- \def\bimapdown{\toks@={\vcenter{\drawbidownarrow}}\generalvmap}%
- \def\bimapup{\toks@={\vcenter{\drawbiuparrow}}\generalvmap}%
- \def\adjmapdown{\toks@={\vcenter{\drawadjdownarrow}}\generalvmap}%
- \def\adjmapup{\toks@={\vcenter{\drawadjuparrow}}\generalvmap}%
- \def\vline{\toks@={\vcenter{\drawvline}}\generalvmap}%
- \def\bivline{\toks@={\vcenter{\drawbivline}}\generalvmap}%
- \def\drawdownarrow{\hbox to5pt{\hss\drawvector(0,-1){\varrowlength}\hss}}%
- \def\drawuparrow{\hbox to5pt{\hss\drawvector(0,1){\varrowlength}\hss}}%
- \def\drawbidownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}%
- \hskip\channelwidth\hbox{\drawvector(0,-1){\varrowlength}}\hss}}%
- \def\drawbiuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}%
- \hskip\channelwidth\hbox{\drawvector(0,1){\varrowlength}}\hss}}%
- \def\drawadjdownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}%
- \hskip\channelwidth\lower\varrowlength
- \hbox{\drawvector(0,1){\varrowlength}}\hss}}%
- \def\drawadjuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}%
- \hskip\channelwidth\raise\varrowlength
- \hbox{\drawvector(0,-1){\varrowlength}}\hss}}%
- \def\drawvline{\hbox to5pt{\hss\drawline(0,1){\varrowlength}\hss}}%
- \def\drawbivline{\hbox to5pt{\hss\hbox{\drawline(0,1){\varrowlength}}%
- \hskip\channelwidth\hbox{\drawline(0,1){\varrowlength}}\hss}}%
- \def\commdiag#1{\null\,
- \vcenter{\commdiagbaselines
- \m@th\ialign{\hfil$##$\hfil&&\hfil$\mkern4mu ##$\hfil\crcr
- \mathstrut\crcr\noalign{\kern-\baselineskip}
- #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}%
- \def\commdiagbaselines{\baselineskip15pt \lineskip3pt \lineskiplimit3pt }%
- \def\gridcommdiag#1{\null\,
- \vcenter{\offinterlineskip
- \m@th\ialign{&\vbox to\vgrid{\vss
- \hbox to\hgrid{\hss\smash{$##$}\hss}}\crcr
- \mathstrut\crcr\noalign{\kern-\vgrid}
- #1\crcr\mathstrut\crcr\noalign{\kern-.5\vgrid}}}\,}%
- \newdimen\harrowlength \harrowlength=60pt
- \newdimen\varrowlength \varrowlength=.618\harrowlength
- \newdimen\sarrowlength \sarrowlength=\harrowlength
- \newdimen\hmorphposn \hmorphposn=\z@
- \newdimen\vmorphposn \vmorphposn=\z@
- \newdimen\morphdist \morphdist=4pt
- \dimendef\@hmorphdflt 0 % These two dimensions are
- \dimendef\@vmorphdflt 2 % defined by \getm@rphposn
- \newdimen\hmorphposnrt \hmorphposnrt=\z@
- \newdimen\hmorphposnlft \hmorphposnlft=\z@
- \newdimen\vmorphposnrt \vmorphposnrt=\z@
- \newdimen\vmorphposnlft \vmorphposnlft=\z@
- \let\hmorphposnup=\hmorphposnrt
- \let\hmorphposndn=\hmorphposnlft
- \let\vmorphposnup=\vmorphposnrt
- \let\vmorphposndn=\vmorphposnlft
- \newdimen\hgrid \hgrid=15pt
- \newdimen\vgrid \vgrid=15pt
- \newdimen\hchannel \hchannel=0pt
- \newdimen\vchannel \vchannel=0pt
- \newdimen\channelwidth \channelwidth=3pt
- \dimendef\@hchannel 0 % Defined via the
- \dimendef\@vchannel 2 % macro \getch@nnel
- \catcode`& = \@oldandcatcode
- \catcode`@ = \@oldatcatcode
- }%
- \let\newif = \@plainnewif
- \let\newdimen = \@plainnewdimen
- \ifx\noarrow\@undefined \the\toks0 \the\toks2 \fi
- \catcode`& = \@eplainoldandcode
- \def\environment#1{%
- \ifx\@groupname\@undefined\else
- \errhelp = \@unnamedendgrouphelp
- \errmessage{`\@groupname' was not closed by \string\endenvironment}%
- \fi
- \edef\@groupname{#1}%
- \begingroup
- \let\@groupname = \@undefined
- }%
- \def\endenvironment#1{%
- \endgroup
- \edef\@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{X} 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 named X, but^^J%
- you ended one named Y. Maybe you made a typo in one^^J%
- or the other of the names?}%
- \newif\ifenvironment
- \def\checkenv{\ifenvironment \errhelp = \@interwovenenvhelp
- \errmessage{Interwoven environments}%
- \egroup \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.}%
- \newtoks\previouseverydisplay
- \newdimen\leftdisplayindent
- \newif\if@leftdisplays
- \def\leftdisplays{%
- \if@leftdisplays\else
- \previouseverydisplay = \everydisplay
- \everydisplay = {\the\previouseverydisplay \leftdisplaysetup}%
- \let\@save@maybedisableeqno = \@maybedisableeqno
- \let\@saveeqno = \eqno
- \let\@saveleqno = \leqno
- \let\@saveeqalignno = \eqalignno
- \let\@saveleqalignno = \leqalignno
- \let\@maybedisableeqno = \relax
- \def\eqno{\hfill\textstyle\enspace}%
- \def\leqno{%
- \hfill
- \hbox to0pt\bgroup
- \kern-\displaywidth
- \kern-\displayindent
- $\aftergroup\@leftleqnoend
- }%
- \@redefinealignmentdisplays
- \@leftdisplaystrue
- \fi
- }%
- \def\centereddisplays{%
- \if@leftdisplays
- \everydisplay = \previouseverydisplay
- \let\@maybedisableeqno = \@save@maybedisableeqno
- \let\eqno = \@saveeqno
- \let\leqno = \@saveleqno
- \let\eqalignno = \@saveeqalignno
- \let\leqalignno = \@saveleqalignno
- \@leftdisplaysfalse
- \fi
- }%
- \def\leftdisplaysetup{%
- \hbox to\displaywidth\bgroup
- \strut
- \dimen@ = \parindent
- \advance\dimen@ by \leftdisplayindent
- \advance\dimen@ by \leftskip
- \hskip\dimen@
- \advance\displayindent by \dimen@
- \advance\displaywidth by -\parindent
- \advance\displaywidth by -\leftdisplayindent
- \advance\displaywidth by -\leftskip
- $%
- \advance\hsize by -\displayindent
- \aftergroup\@lefteqend
- \displaystyle
- }%
- \def\@lefteqend{\hfil\egroup$}% gets inserted between the ending $$
- \def\@leftleqnoend{\hss \egroup$}%
- \def\@redefinealignmentdisplays{%
- \def\displaylines##1{\displ@y
- \vcenter{%
- \halign{\hbox to\displaywidth{$\@lign\displaystyle####\hfil$\hfil}\crcr
- ##1\crcr}}}%
- \def\eqalignno##1{\displ@y
- \let\noalign = \@lefteqalignonoalign
- \vcenter{%
- \halign to\displaywidth{%
- \hfil $\@lign\displaystyle{####}$\tabskip\z@skip
- &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
- &\llap{$\@lign####$}\tabskip\z@skip\crcr
- ##1\crcr}}}%
- \def\leqalignno##1{\displ@y
- \let\eqno = \relax
- \vcenter{%
- \halign to\displaywidth{%
- \hfil$\@lign\displaystyle{####}$\tabskip\z@skip
- &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
- &\kern-\displaywidth
- \rlap{\kern-\displayindent $\@lign####$}%
- \tabskip\displaywidth\crcr
- ##1\crcr}}}%
- }%
- \let\@primitivenoalign = \noalign
- \newtoks\@everynoalign
- \def\@lefteqalignonoalign#1{%
- \@primitivenoalign{%
- \advance\leftskip by -\parindent
- \advance\leftskip by -\leftdisplayindent
- \parskip = 0pt
- \parindent = 0pt
- \the\@everynoalign
- #1%
- }%
- }%
- \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}%
- \def\today{\the\day\ \fullmonthname\ \the\year}%
- \newskip\abovelistskipamount \abovelistskipamount = .5\baselineskip
- \newcount\abovelistpenalty \abovelistpenalty = 10000
- \def\abovelistskip{\vpenalty\abovelistpenalty \vskip\abovelistskipamount}%
- \newskip\interitemskipamount \interitemskipamount = 0pt
- \newcount\belowlistpenalty \belowlistpenalty = -50
- \def\belowlistskip{\vpenalty\belowlistpenalty \vskip\belowlistskipamount}%
- \newskip\belowlistskipamount \belowlistskipamount = .5\baselineskip
- \newcount\interitempenalty \interitempenalty = 0
- \def\interitemskip{\vpenalty\interitempenalty \vskip\interitemskipamount}%
- \newdimen\listleftindent \listleftindent = 0pt
- \newdimen\listrightindent \listrightindent = 0pt
- \let\listmarkerspace = \enspace
- \newtoks\everylist
- \def\listcompact{\interitemskipamount = 0pt \relax}%
- \newdimen\@listindent
- \def\beginlist{%
- \abovelistskip
- \@listindent = \parindent
- \advance\@listindent by \listleftindent
- \advance\leftskip by \@listindent
- \advance\rightskip by \listrightindent
- \itemnumber = 1
- \the\everylist
- }%
- \def\li{\@getoptionalarg\@finli}%
- \def\@finli{%
- \ifx\@optionalarg\empty \else
- \expandafter\writeitemxref\expandafter{\@optionalarg}%
- \fi
- \ifnum\itemnumber=1 \else \interitemskip \fi
- \printitem
- \advance\itemnumber by 1
- \advance\itemletter by 1
- \advance\itemromannumeral by 1
- \ignorespaces
- }%
- \def\writeitemxref#1{\definexref{#1}\marker{item}}%
- \def\printitem{%
- \par
- \vskip-\parskip
- \noindent
- \printmarker\marker
- }%
- \def\printmarker#1{\llap{\marker \enspace}}%
- \def\endlist{\belowlistskip}%
- \newcount\numberedlistdepth
- \newcount\itemnumber
- \newcount\itemletter
- \newcount\itemromannumeral
- \def\numberedmarker{%
- \ifcase\numberedlistdepth
- (impossible)%
- \or \printitemnumber
- \or \printitemletter
- \or \printitemromannumeral
- \else *%
- \fi
- }%
- \def\printitemnumber{\number\itemnumber}%
- \def\printitemletter{\char\the\itemletter}%
- \def\printitemromannumeral{\romannumeral\itemromannumeral}%
- \def\numberedprintmarker#1{\llap{#1) \listmarkerspace}}%
- \def\numberedlist{\environment{@numbered-list}%
- \advance\numberedlistdepth by 1
- \itemletter = `a
- \itemromannumeral = 1
- \beginlist
- \let\marker = \numberedmarker
- \let\printmarker = \numberedprintmarker
- }%
- \def\endnumberedlist{%
- \par
- \endenvironment{@numbered-list}%
- \endlist
- }%
- \let\orderedlist = \numberedlist
- \let\endorderedlist = \endnumberedlist
- \newcount\unorderedlistdepth
- \def\unorderedmarker{%
- \ifcase\unorderedlistdepth
- (impossible)%
- \or \blackbox
- \or ---%
- \else *%
- \fi
- }%
- \def\unorderedprintmarker#1{\llap{#1\listmarkerspace}}%
- \def\unorderedlist{\environment{@unordered-list}%
- \advance\unorderedlistdepth by 1
- \beginlist
- \let\marker = \unorderedmarker
- \let\printmarker = \unorderedprintmarker
- }%
- \def\endunorderedlist{%
- \par
- \endenvironment{@unordered-list}%
- \endlist
- }%
- \def\listing#1{%
- \par \begingroup
- \@setuplisting
- \setuplistinghook
- \input #1
- \endgroup
- }%
- \let\setuplistinghook = \relax
- \def\linenumberedlisting{%
- \ifx\lineno\undefined \innernewcount\lineno \fi
- \lineno = 0
- \everypar = {\advance\lineno by 1 \printlistinglineno}%
- }%
- \def\printlistinglineno{\llap{[\the\lineno]\quad}}%
- \def\listingfont{\tt}%
- \def\@setuplisting{%
- \uncatcodespecials
- \obeywhitespace
- \makeactive\`
- \makeactive\^^I
- \def^^L{\vfill\eject}%
- \parskip = 0pt
- \listingfont
- }%
- {%
- \makeactive\`
- \gdef`{\relax\lq}% Defeat ligatures.
- }%
- {%
- \makeactive\^^I
- \gdef^^I{\hskip8\fontdimen2\font \relax}%
- }%
- \def\verbatimescapechar#1{%
- \gdef\@makeverbatimescapechar{%
- \@makeverbatimdoubleescape #1%
- \catcode`#1 = 0
- }%
- }%
- \def\@makeverbatimdoubleescape#1{%
- \catcode`#1 = \other
- \begingroup
- \lccode`\* = `#1%
- \lowercase{\endgroup \ece\def*{*}}%
- }%
- \verbatimescapechar\| % initially escapechar is |
- \def\verbatim{\begingroup
- \uncatcodespecials
- \obeywhitespace
- \makeactive\` % make space character a single space, not stretchable
- \@makeverbatimescapechar
- \tt}
- \let\endverbatim = \endgroup
- \def\definecontentsfile#1{%
- \ece\innernewwrite{#1file}%
- \ece\innernewif{if@#1fileopened}%
- \ece\let{#1filebasename} = \jobname
- \ece\def{open#1file}{\opencontentsfile{#1}}%
- \ece\def{write#1entry}{\writecontentsentry{#1}}%
- \ece\def{writenumbered#1entry}{\writenumberedcontentsentry{#1}}%
- \ece\innernewif{ifrewrite#1file} \csname rewrite#1filetrue\endcsname
- \ece\def{read#1file}{\readcontentsfile{#1}}%
- }%
- \definecontentsfile{toc}%
- \def\opencontentsfile#1{%
- \csname if@#1fileopened\endcsname \else
- \ece{\immediate\openout}{#1file} = \csname #1filebasename\endcsname.#1
- \ece\global{@#1fileopenedtrue}%
- \fi
- }%
- \def\writecontentsentry#1#2#3{\writenumberedcontentsentry{#1}{#2}{#3}{}}%
- \def\writenumberedcontentsentry#1#2#3#4{%
- \csname ifrewrite#1file\endcsname
- \csname open#1file\endcsname
- \toks0 = {\expandafter\noexpand \csname #1#2entry\endcsname}%
- \def\temp{#3}%
- \toks2 = \expandafter{#4}%
- \edef\cs{\the\toks2}%
- \edef\@wr{%
- \write\csname #1file\endcsname{%
- \the\toks0 % the \toc...entry control sequence
- {\sanitize\temp}% the text
- \ifx\empty\cs\else {\sanitize\cs}\fi % A secondary number, or nothing:
- {\noexpand\folio}% the page number
- }%
- }%
- \@wr
- \fi
- \ignorespaces
- }%
- \def\readcontentsfile#1{%
- \edef\temp{%
- \noexpand\testfileexistence[\csname #1filebasename\endcsname]{toc}%
- }\temp
- \if@fileexists
- \input \csname #1filebasename\endcsname.#1\relax
- \csname ifrewrite#1file\endcsname \csname open#1file\endcsname \endif
- \fi
- }%
- \def\endif{\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}}%
- \let\ifxrefwarning = \iftrue
- \def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}%
- \def\xrefwarningfalse{\@citewarningfalse \let\ifxrefwarning = \iffalse}%
- \begingroup
- \catcode`\_ = 8
- \gdef\xrlabel#1{#1_x}%
- \endgroup
- \def\xrdef#1{\definexref{#1}{\noexpand\folio}{page}}%
- \def\definexref#1#2#3{%
- \edef\temp{#1}%
- \readauxfile
- \edef\@wr{\noexpand\writeaux{\string\@definelabel{\temp}{#2}{#3}}}%
- \@wr
- \ignorespaces
- }%
- \def\@definelabel#1#2#3{%
- \expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}%
- \global\setproperty{\xrlabel{#1}}{class}{#3}%
- }%
- \def\xrefn#1{%
- \readauxfile
- \expandafter \ifx\csname\xrlabel{#1}\endcsname\relax
- \if@citewarning
- \message{\linenumber Undefined label `#1'.}%
- \fi
- \expandafter\def\csname\xrlabel{#1}\endcsname{%
- `{\tt
- \escapechar = -1
- \expandafter\string\csname#1\endcsname
- }'%
- }%
- \fi
- \csname\xrlabel{#1}\endcsname % Always produce something.
- }%
- \let\refn = \xrefn
- \def\xref{p.\thinspace\xrefn}%
- \def\@maybewarnref{%
- \ifundefined{amsppt.sty}%
- \else
- \message{Warning: amsppt.sty and Eplain both define \string\ref. See
- the Eplain manual.}%
- \let\amsref = \ref
- \fi
- \let\ref = \eplainref
- \ref
- }
- \let\ref = \@maybewarnref
- \def\eplainref{\@generalref{}}%
- \def\refs{\@generalref s}%
- \def\@generalref#1#2{%
- \readauxfile
- \edef\temp{\getproperty{\xrlabel{#2}}{class}}%
- \expandafter\ifx\csname \temp word\endcsname\relax \else
- \csname \temp word\endcsname
- #1\penalty\@M \
- \fi
- \refn{#2}%
- }%
- \newcount\eqnumber
- \newcount\subeqnumber
- \def\eqdefn{\@getoptionalarg\@fineqdefn}%
- \def\@fineqdefn#1{%
- \ifx\@optionalarg\empty
- \global\advance\eqnumber by 1
- \def\temp{\eqconstruct{\number\eqnumber}}%
- \else
- \def\temp{\noexpand\@optionalarg}%
- \fi
- \global\subeqnumber = 0
- \gdef\@currenteqlabel{#1}%
- \toks0 = \expandafter{\@currenteqlabel}%
- \begingroup
- \def\eqrefn{\noexpand\eqrefn}%
- \edef\temp{\noexpand\@eqdefn{\the\toks0}{\temp}}%
- \temp
- \endgroup
- }%
- \def\eqsubdefn#1{%
- \global\advance\subeqnumber by 1
- \toks0 = {#1}%
- \toks2 = \expandafter{\@currenteqlabel}%
- \begingroup
- \def\eqrefn{\noexpand\eqrefn}%
- \def\eqsubreftext{\noexpand\eqsubreftext}%
- \edef\temp{%
- \noexpand\@eqdefn
- {\the\toks0}%
- {\eqsubreftext{\eqrefn{\the\toks2}}{\the\subeqnumber}}%
- }%
- \temp
- \endgroup
- }%
- \def\@eqdefn#1#2{%
- \definexref{#1}{#2}{eq}%
- \@definelabel{#1}{#2}{eq}%
- }%
- \def\eqdef{\@getoptionalarg\@fineqdef}%
- \def\@fineqdef{%
- \toks0 = \expandafter{\@optionalarg}%
- \edef\temp{\noexpand\@eqdef{\noexpand\eqdefn[\the\toks0]}}%
- \temp
- }%
- \def\eqsubdef{\@eqdef\eqsubdefn}%
- \def\@eqdef#1#2{%
- #1{#2}% Define the label.
- \@maybedisableeqno
- \eqno \eqref{#2}% Print the text.
- \@mayberestoreeqno
- \ignorespaces
- }%
- \let\@mayberestoreeqno = \relax
- \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
- }%
- \let\eqrefn = \xrefn
- \def\eqref#1{\eqprint{\eqrefn{#1}}}%
- \let\eqconstruct = \identity
- \def\eqprint#1{(#1)}%
- \def\eqsubreftext#1#2{#1.#2}%
- \let\extraidxcmdsuffixes = \empty
- \outer\def\defineindex#1{%
- \def\@idxprefix{#1}%
- \for\@idxcmd:=,marked,submarked,name%
- \extraidxcmdsuffixes\do
- {%
- \@defineindexcmd\@idxcmd
- }%
- \ece\innernewwrite{@#1indexfile}%
- \ece\innernewif{if@#1indexfileopened}%
- }%
- \newif\ifsilentindexentry
- \def\@defineindexcmd#1{%
- \@defineoneindexcmd{s}{#1}\silentindexentrytrue
- \@defineoneindexcmd{}{#1}\silentindexentryfalse
- }%
- \def\@defineoneindexcmd#1#2#3{%
- \toks@ = {#3}%
- \edef\temp{%
- \def
- \expandonce\csname#1\@idxprefix dx#2\endcsname % e.g., \idx or \sidxname.
- {\def\noexpand\@idxprefix{\@idxprefix}% define \@idxprefix
- \expandonce\csname @@#1idx#2\endcsname
- }%
- \def
- \expandonce\csname @@#1idx#2\endcsname{% e.g., \@@idx
- \the\toks@
- \noexpand\@idxgetrange\expandonce\csname @#1idx#2\endcsname
- }%
- }%
- \temp
- }%
- \let\indexfilebasename = \jobname
- \def\@idxwrite#1#2{%
- \csname if@\@idxprefix indexfileopened\endcsname \else
- \expandafter\immediate\openout\csname @\@idxprefix indexfile\endcsname =
- \indexfilebasename.\@idxprefix dx
- \expandafter\global\csname @\@idxprefix indexfileopenedtrue\endcsname
- \fi
- \def\temp{#1}%
- \edef\@wr{%
- \expandafter\write\csname @\@idxprefix indexfile\endcsname{%
- \string\indexentry
- {\sanitize\temp}%
- {\noexpand#2}%
- }%
- }%
- \@wr
- \ifindexproofing \insert\@indexproof{\indexproofterm{#1}}\fi
- \hookrun{afterindexterm}%
- \ifsilentindexentry \expandafter\ignorespaces\fi
- }%
- \newif\ifindexproofing
- \newinsert\@indexproof
- \dimen\@indexproof = \maxdimen % No limit on number of terms.
- \count\@indexproof = 0 \skip\@indexproof = 0pt % They take up no space.
- \font\indexprooffont = cmtt8
- \def\indexproofterm#1{\hbox{\strut \indexprooffont #1}}%
- \let\@plainmakeheadline = \makeheadline
- \def\makeheadline{%
- \indexproofunbox
- \@plainmakeheadline
- }%
- \def\indexsetmargins{%
- \ifx\undefined\outsidemargin
- \dimen@ = 1in
- \advance\dimen@ by \hoffset
- \edef\outsidemargin{\the\dimen@}%
- \let\insidemargin = \outsidemargin
- \fi
- }%
- \def\indexproofunbox{%
- \ifvoid\@indexproof\else
- \indexsetmargins
- \rlap{%
- \kern\hsize
- \ifodd\pageno \kern\outsidemargin \else \kern\insidemargin \fi
- \vbox to 0pt{\unvbox\@indexproof\vss}%
- }%
- \fi
- }%
- \def\idxrangebeginword{begin}%
- \def\idxbeginrangemark{(}% the corresponding magic char to go in the idx file
- \def\idxrangeendword{end}%
- \def\idxendrangemark{)}%
- \def\idxseecmdword{see}%
- \def\idxseealsocmdword{seealso}%
- \newif\if@idxsee
- \let\@idxseenterm = \relax
- \def\idxpagemarkupcmdword{pagemarkup}%
- \let\@idxpagemarkup = \relax
- \def\@idxgetrange#1{%
- \let\@idxrangestr = \empty
- \let\@afteridxgetrange = #1%
- \@getoptionalarg\@finidxgetopt
- }%
- \def\@finidxgetopt{%
- \for\@idxarg:=\@optionalarg\do{%
- \expandafter\@idxcheckpagemarkup\@idxarg=,%
- \ifx\@idxarg\idxrangebeginword
- \def\@idxrangestr{\idxencapoperator\idxbeginrangemark}%
- \else
- \ifx\@idxarg\idxrangeendword
- \def\@idxrangestr{\idxencapoperator\idxendrangemark}%
- \else
- \ifx\@idxarg\idxseecmdword
- \def\@idxpagemarkup{indexsee}%
- \@idxseetrue
- \else
- \ifx\@idxarg\idxseealsocmdword
- \def\@idxpagemarkup{indexseealso}%
- \@idxseetrue
- \else
- \ifx\@idxpagemarkup\relax
- \errmessage{Unrecognized index option `\@idxarg'}%
- \fi
- \fi
- \fi
- \fi
- \fi
- }%
- \@afteridxgetrange
- }%
- \def\@idxcheckpagemarkup#1=#2,{%
- \def\temp{#1}%
- \ifx\temp\idxpagemarkupcmdword
- \if ,#2, % If #2 is empty, complain.
- \errmessage{Missing markup command to `pagemarkup'}%
- \else
- \def\temp##1={##1}%
- \edef\@idxpagemarkup{\temp\string#2}%
- \fi
- \fi
- }%
- \def\idxsubentryseparator{!}%
- \def\idxencapoperator{|}%
- \def\idxmaxpagenum{99999}%
- \newtoks\@idxmaintoks
- \newtoks\@idxsubtoks
- \def\@idxtokscollect{%
- \edef\temp{\the\@idxsubtoks}%
- \edef\@indexentry{%
- \the\@idxmaintoks
- \ifx\temp\empty\else \idxsubentryseparator\the\@idxsubtoks \fi
- \@idxrangestr
- }%
- \if@idxsee
- \@idxseefalse % Reset so the next term won't be a `see'.
- \edef\temp{\noexpand\@finidxtokscollect{\idxmaxpagenum}}%
- \else
- \def\temp{\@finfinidxtokscollect\folio}%
- \fi
- \temp
- }%
- \def\@finidxtokscollect#1#2{%
- \def\@idxseenterm{#2}%
- \@finfinidxtokscollect{#1}%
- }%
- \def\@finfinidxtokscollect#1{%
- \ifx\@idxpagemarkup\relax \else
- \toks@ = \expandafter{\@indexentry}%
- \edef\@indexentry{\the\toks@ \idxencapoperator \@idxpagemarkup}%
- \let\@idxpagemarkup = \relax
- \fi
- \ifx\@idxseenterm\relax \else
- \toks@ = \expandafter{\@indexentry}%
- \edef\@indexentry{\the\toks@{\sanitize\@idxseenterm}}%
- \let\@idxseenterm = \relax
- \fi
- \expandafter\@idxwrite\expandafter{\@indexentry}{#1}%
- }%
- \def\@idxcollect#1#2{%
- \@idxmaintoks = {#1}%
- \@idxsubtoks = {#2}%
- \@idxtokscollect
- }%
- \def\@idx#1{%
- #1% Produce TERM as output.
- \@idxcollect{#1}{}%
- }%
- \def\@sidx#1{\@idxmaintoks = {#1}\@getoptionalarg\@finsidx}%
- \def\@finsidx{%
- \@idxsubtoks = \expandafter{\@optionalarg}%
- \@idxtokscollect
- }%
- \def\idxsortkeysep{@}% This `@' is catcode 11, but it doesn't matter.
- \def\@idxconstructmarked#1#2#3{%
- \toks@ = {#2}% The control sequence.
- \toks2 = {#3}% The term.
- \edef\temp{\the\toks2 \idxsortkeysep \the\toks@{\the\toks2}}%
- #1 = \expandafter{\temp}%
- }%
- \def\@idxmarked#1#2{%
- #1{#2}% Produce \CS{TERM} as output.
- \@idxconstructmarked\@idxmaintoks{#1}{#2}%
- \@idxsubtoks = {}%
- \@idxtokscollect
- }%
- \def\@sidxmarked#1#2{%
- \@idxconstructmarked\toks@{#1}{#2}%
- \edef\temp{{\the\toks@}}%
- \expandafter\@sidx\temp
- }%
- \def\@idxsubmarked#1#2#3{%
- #1 #2{#3}% produce `TERM \CS{SUBTERM} as output.
- \@sidxsubmarked{#1}{#2}{#3}%
- }%
- \def\@sidxsubmarked#1#2#3{%
- \@idxmaintoks = {#1}%
- \@idxconstructmarked\@idxsubtoks{#2}{#3}%
- \@idxtokscollect
- }%
- \def\idxnameseparator{, }% as in `Tachikawa, Elizabeth'
- \def\@idxcollectname#1#2{%
- \def\temp{#1}%
- \ifx\temp\empty
- \toks@ = {}%
- \else
- \toks@ = {\idxnameseparator #1}%
- \fi
- \toks2 = {#2}%
- \edef\temp{\the\toks2 \the\toks@}%
- }%
- \def\@idxname#1#2{%
- #1 #2% Separate the names by a space in the output.
- \@idxcollectname{#1}{#2}%
- \expandafter\@idxcollect\expandafter{\temp}{}%
- }%
- \def\@sidxname#1#2{%
- \@idxcollectname{#1}{#2}%
- \expandafter\@sidx\expandafter{\temp}%
- }%
- \let\indexfonts = \relax
- \def\readindexfile#1{%
- \edef\@idxprefix{#1}%
- \testfileexistence[\indexfilebasename]{\@idxprefix nd}%
- \iffileexists \begingroup
- \ifx\begin\undefined
- \def\begin##1{\@beginindex}%
- \let\end = \@gobble
- \fi
- \input \indexfilebasename.\@idxprefix nd
- \singlecolumn
- \endgroup
- \else
- \message{No index file \indexfilebasename.\@idxprefix nd.}%
- \fi
- }%
- \def\@beginindex{%
- \let\item = \@indexitem
- \let\subitem = \@indexsubitem
- \let\subsubitem = \@indexsubsubitem
- \indexfonts
- \doublecolumns
- \parindent = 0pt
- \hookrun{beginindex}%
- }%
- \let\indexspace = \bigbreak
- \let\afterindexterm = \quad
- \newskip\aboveindexitemskipamount \aboveindexitemskipamount = 0pt plus2pt
- \def\aboveindexitemskip{\vskip\aboveindexitemskipamount}%
- \def\@indexitem{\begingroup
- \@indexitemsetup
- \leftskip = 0pt
- \aboveindexitemskip
- \penalty-100 % Encourage page breaks before items.
- \def\par{\endgraf\endgroup\nobreak}%
- }%
- \def\@indexsubitem{%
- \@indexitemsetup
- \leftskip = 1em
- }%
- \def\@indexsubsubitem{%
- \@indexitemsetup
- \leftskip = 2em
- }%
- \def\@indexitemsetup{%
- \par
- \hangindent = 1em
- \raggedright
- \hyphenpenalty = 10000
- \hookrun{indexitem}%
- }%
- \def\seevariant{\it}%
- \def\indexseeword{See}%
- \def\indexsee#1#2{{\seevariant \indexseeword\ }#1}%
- \def\indexseealsowords{see also}%
- \def\indexseealso#1#2{{\seevariant \indexseealsowords\ }#1}%
- \defineindex{i}%
- \begingroup
- \catcode `\^^M = \active %
- \gdef\flushleft{%
- \def\@endjustifycmd{\@endflushleft}%
- \def\@eoljustifyaction{\null\hfil\break}%
- \let\@firstlinejustifyaction = \relax
- \@startjustify %
- }%
- \gdef\flushright{%
- \def\@endjustifycmd{\@endflushright}%
- \def\@eoljustifyaction{\break\null\hfil}%
- \def\@firstlinejustifyaction{\hfil\null}%
- \@startjustify %
- }%
- \gdef\center{%
- \def\@endjustifycmd{\@endcenter}%
- \def\@eoljustifyaction{\hfil\break\null\hfil}%
- \def\@firstlinejustifyaction{\hfil\null}%
- \@startjustify %
- }%
- \gdef\@startjustify{%
- \parskip = 0pt
- \catcode`\^^M = \active %
- \def^^M{\futurelet\next\@finjustifyreturn}%
- \def\@eateol##1^^M{%
- \def\temp{##1}%
- \@firstlinejustifyaction %
- \ifx\temp\empty\else \temp^^M\fi %
- }%
- \expandafter\aftergroup\@endjustifycmd %
- \checkenv \environmenttrue %
- \par\noindent %
- \@eateol %
- }%
- \gdef\@finjustifyreturn{%
- \@eoljustifyaction %
- \ifx\next^^M%
- \def\par{\endgraf\vskip\blanklineskipamount \global\let\par = \endgraf}%
- \@endjustifycmd %
- \noindent %
- \@firstlinejustifyaction %
- \fi %
- }%
- \endgroup
- \def\@endflushleft{\unpenalty{\parfillskip = 0pt plus1fil\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 plus1fil \par}\ignorespaces
- }%
- \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 = 2in
- \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 = {}%
- \parskip = 0pt % because of the vskip
- \ifnum\@numcolumns > 1 \hsize = \@normalhsize \fi
- \the\everyfootnote
- \vskip\interfootnoteskip
- \indent\llap{#1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t
- }%
- \def\footnoterule{\dimen@ = \footnoteruleheight
- \advance\dimen@ by \belowfootnoterulespace
- \kern-\dimen@
- \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 \dimen@}%
- \def\@finishtopmargin{%
- \dimen2 = \voffset % Remember the old \voffset.
- \voffset = \dimen@ \advance\voffset by -1in
- \advance\dimen2 by -\voffset % Compute the change in \voffset.
- \advance\vsize by \dimen2 % Change type area accordingly.
- }%
- \def\advancetopmargin{%
- \dimen@ = 0pt \afterassignment\@finishadvancetopmargin \advance\dimen@
- }%
- \def\@finishadvancetopmargin{%
- \advance\voffset by \dimen@
- \advance\vsize by -\dimen@
- }%
- \def\bottommargin{\afterassignment\@finishbottommargin \dimen@}%
- \def\@finishbottommargin{%
- \@computebottommargin % Result in \dimen2.
- \advance\dimen2 by -\dimen@ % Compute the change in the bottom margin.
- \advance\vsize by \dimen2 % Change the type area.
- }%
- \def\advancebottommargin{%
- \dimen@ = 0pt \afterassignment\@finishadvancebottommargin \advance\dimen@
- }%
- \def\@finishadvancebottommargin{%
- \advance\vsize by -\dimen@
- }%
- \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 \dimen@}%
- \def\@finishleftmargin{%
- \dimen2 = \hoffset % Remember the old \hoffset.
- \hoffset = \dimen@ \advance\hoffset by -1in
- \advance\dimen2 by -\hoffset % Compute the change in \hoffset.
- \advance\hsize by \dimen2 % Change type area accordingly.
- }%
- \def\advanceleftmargin{%
- \dimen@ = 0pt \afterassignment\@finishadvanceleftmargin \advance\dimen@
- }%
- \def\@finishadvanceleftmargin{%
- \advance\hoffset by \dimen@
- \advance\hsize by -\dimen@
- }%
- \def\rightmargin{\afterassignment\@finishrightmargin \dimen@}%
- \def\@finishrightmargin{%
- \@computerightmargin % Result in \dimen2.
- \advance\dimen2 by -\dimen@ % Compute the change in the right margin.
- \advance\hsize by \dimen2 % Change the type area.
- }%
- \def\advancerightmargin{%
- \dimen@ = 0pt \afterassignment\@finishadvancerightmargin \advance\dimen@
- }%
- \def\@finishadvancerightmargin{%
- \advance\hsize by -\dimen@
- }%
- \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\abovecolumnskip \abovecolumnskip = \bigskipamount
- \newskip\belowcolumnskip \belowcolumnskip = \bigskipamount
- \newdimen\gutter \gutter = 2pc
- \newbox\@partialpage
- \newdimen\@columnhsize
- \newdimen\@normalhsize
- \newdimen\@normalvsize
- \newtoks\previousoutput
- \def\quadcolumns{\@columns4}%
- \def\triplecolumns{\@columns3}%
- \def\doublecolumns{\@columns2}%
- \def\begincolumns#1{\ifcase#1\relax \or \singlecolumn \or \@columns2 \or
- \@columns3 \or \@columns4 \else \relax \fi}%
- \let\endcolumns = \singlecolumn
- \let\@ndcolumns = \relax
- \chardef\@numcolumns = 1
- \def\@columns#1{%
- \@ndcolumns
- \let\@ndcolumns = \@endcolumns
- \chardef\@numcolumns = #1
- \par % Shouldn't start in horizontal mode.
- \previousoutput = \expandafter{\the\output}%
- \@columnhsize = \hsize
- \count@ = \@numcolumns
- \advance\count@ by -1
- \advance\@columnhsize by -\count@\gutter
- \divide\@columnhsize by \@numcolumns
- \output = {\global\setbox\@partialpage =
- \vbox{\unvbox255\vskip\abovecolumnskip}%
- }%
- \pagegoal = \pagetotal
- \eject
- \output = {\@columnoutput}%
- \@normalhsize = \hsize
- \@normalvsize = \vsize
- \hsize = \@columnhsize
- \advance\vsize by -\ht\@partialpage
- \advance\vsize by -\ht\footins
- \ifvoid\footins\else \advance\vsize by -\skip\footins \fi
- \multiply\count\footins by \@numcolumns
- \advance\vsize by -\ht\topins
- \ifvoid\topins\else \advance\vsize by -\skip\topins \fi
- \multiply\count\topins by \@numcolumns
- \global\vsize = \@numcolumns\vsize
- }%
- \def\@columnsplit{%
- \splittopskip = \topskip
- \splitmaxdepth = \baselineskip
- \dimen@ = \ht255
- \divide\dimen@ by \@numcolumns
- \begingroup
- \vbadness = 10000
- \global\setbox1 = \vsplit255 to \dimen@ \global\wd1 = \hsize
- \global\setbox3 = \vsplit255 to \dimen@ \global\wd3 = \hsize
- \ifnum\@numcolumns > 2
- \global\setbox5 = \vsplit255 to \dimen@ \global\wd5 = \hsize
- \fi
- \ifnum\@numcolumns > 3
- \global\setbox7 = \vsplit255 to \dimen@ \global\wd7 = \hsize
- \fi
- \endgroup
- \setbox0 = \box255
- \global\setbox255 = \vbox{%
- \unvbox\@partialpage
- \ifcase\@numcolumns \relax\or\relax
- \or \hbox to \@normalhsize{\box1\hfil\box3}%
- \or \hbox to \@normalhsize{\box1\hfil\box3\hfil\box5}%
- \or \hbox to \@normalhsize{\box1\hfil\box3\hfil\box5\hfil\box7}%
- \fi
- }%
- \setbox\@partialpage = \box0
- }%
- \def\@columnoutput{%
- \@columnsplit
- \hsize = \@normalhsize % Local to \output's group.
- \vsize = \@normalvsize
- \the\previousoutput
- \unvbox\@partialpage
- \penalty\outputpenalty
- \global\vsize = \@numcolumns\@normalvsize
- }%
- \def\singlecolumn{%
- \@ndcolumns
- \chardef\@numcolumns = 1
- \vskip\belowcolumnskip
- \nointerlineskip
- }%
- \def\@endcolumns{%
- \global\let\@ndcolumns = \relax
- \par % Shouldn't start in horizontal mode.
- \global\output = {\global\setbox1 = \box255}%
- \pagegoal = \pagetotal
- \eject % Exercise the page builder, i.e., \output.
- \global\setbox255 = \box1 % Retrieve what the fake \output set.
- \@columnsplit
- \global\vsize = \@normalvsize
- \global\hsize = \@normalhsize
- \global\output = \expandafter{\the\previousoutput}%
- \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi
- \unvbox255
- }%
- \def\columnfill{%
- \dimen@ = \@normalvsize
- \advance\dimen@ by -\pagetotal
- \kern\dimen@
- }
- \let\wlog = \@plainwlog
- \catcode`@ = \@eplainoldatcode
- \def\fmtname{eplain}%
- \def\eplain{t}%
- {\edef\plainversion{\fmtversion}%
- \xdef\fmtversion{2.6: 2 May 1994 (and plain \plainversion)}%
- }%
-