% \iffalse meta-comment
%
% Copyright 1994 the LaTeX3 project and the individual authors.
% All rights reserved. For further copyright information see the file
% legal.txt, and any other copyright indicated in this file.
% 
% This file is part of the LaTeX2e system.
% ----------------------------------------
% 
%  This system is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% 
% 
% IMPORTANT NOTICE:
% 
% For error reports in case of UNCHANGED versions see bugs.txt.
% 
% Please do not request updates from us directly.  Distribution is
% done through Mail-Servers and TeX organizations.
% 
% You are not allowed to change this file.
% 
% You are allowed to distribute this file under the condition that
% it is distributed together with all files mentioned in manifest.txt.
% 
% If you receive only some of these files from someone, complain!
% 
% You are NOT ALLOWED to distribute this file alone.  You are NOT
% ALLOWED to take money for the distribution or use of either this
% file or a changed version, except for a nominal charge for copying
% etc.
% \fi
% \iffalse
%%% File: ltplain
%
%<*driver>
% \fi
\ProvidesFile{ltplain.dtx}
             [1994/05/17 v1.0i LaTeX Kernel (Plain TeX)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltplain.dtx}
\begin{document}
\title{\filename\\(The file plain.tex, modified for \LaTeX)}
\author{Donald~E.~Knuth\\
 Modified by 
 Leslie Lamport, Frank Mittelbach, Rainer Sch\"opf}
\date{\filedate}
\maketitle
 \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \CheckSum{2661}
%
% \section{Plain \TeX}
%
% \LaTeX\ includes almost all of the functionality of Knuth's original
% `Basic Macros' That is, the plain \TeX\ format described in Appendix~B
% of the \TeX{}Book. This file is a modified version of the source file
% for plain \TeX, |plain.tex|.
%
% \StopEventually{}
%
% \changes{v1.0a}{1994/03/08}
%         {Remove need for a driver file.}
% \changes{v1.0b}{1994/03/12}
%         {Name changed from lplain. The end of an era}
% \changes{v1.0e}{1994/03/12}{Replaced remaining width, height, depth
%       by \LaTeX{} macro names to save tokens}
%
% \begin{oldcomments}
% File LPLAIN - Created 29 October 1985 from plain version 1.5CM
%             - Last modified 20 October 1988 to take into account
%               changes to PLAIN.TEX reported by Arthur Ogawa
%             - Modified February 8, 1990 by Dominik Wujastyk to
%               match the PLAIN.TEX meant for TeX 3.0 (\fmtname{plain},
%               \fmtversion{3.0}).
%             - Modified March 15, 1990 by Frank Mittelbach to
%               allow the use of this file both in TeX 2 and 3
%             - Modified June 21, 1991 by RmS to clear the
%               contents of \box0.
%             - Modified July 1, 1991, by RmS to correct \multispan bug.
%             - Modified August 14, 1991, By RmS to make \cases work
%               with NFSS.
%             - Modified October 30, 1991, by RmS to remove \catcode and
%               \mathcode assignments for control characters.
%             - Modified November 1, 1991, by RmS to remove ^^A and ^^K
%               control characters.
%             - Modified November 4, 1991, by RmS to add missing \m@th
%               assignments and to introduce the file lhyphen.tex.
%             - Modified November 7, 1991, by RmS to make it work with
%               MLTeX version 2.
%             - Modified March 17, 1992, by RmS to match changes in
%               plain.tex of March 16, 1992.
%             - Modified August 5, 1993, by RmS to make \dotfill and
%               \hrulefill behave in vertical mode.
%             - Modified September 17, 1993, by RmS to match changes in
%               plain.tex of June 26, 1993.
%             - Modified September 19, 1993, by RmS to remove remaining
%               definitions for control characters ^^D, ^^S, ^^Z, ^^_.
%
% This is the LaTeX version of the plain TeX format that's described in
% The TeXbook.  All modifications can be found by searching for
% the word 'LaTeX'.
% N.B.: A version number is defined at the very end of this file;
%       please change that number whenever the file is modified!
% And don't modify the file under any circumstances.
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
%
%    \begin{macrocode}
%<*2ekernel>
\catcode`\{=1 % left brace is begin-group character
\catcode`\}=2 % right brace is end-group character
\catcode`\$=3 % dollar sign is math shift
\catcode`\&=4 % ampersand is alignment tab
\catcode`\#=6 % hash mark is macro parameter character
\catcode`\^=7 % circumflex and uparrow are for superscripts
\catcode`\_=8 % underline and downarrow are for subscripts
\catcode`\^^I=10 % ascii tab is a blank space
\chardef\active=13 \catcode`\~=\active % tilde is active
\catcode`\^^L=\active \outer\def^^L{\par}% ascii form-feed is \outer\par
%    \end{macrocode}
%
%    \begin{macrocode}
\message{Preloading the plain format: codes,}
%    \end{macrocode}
%
% We had to define the \catcodes right away, before the message line,
% since \message uses the { and } characters.
% When INITEX (the TeX initializer) starts up,
% it has defined the following \catcode values:
% \catcode`\^^@=9 % ascii null is ignored
% \catcode`\^^M=5 % ascii return is end-line
% \catcode`\\=0 % backslash is TeX escape character
% \catcode`\%=14 % percent sign is comment character
% \catcode`\ =10 % ascii space is blank space
% \catcode`\^^?=15 % ascii delete is invalid
% \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
% \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
% all others are type 12 (other)
%
% Here is a list of the characters that have been specially catcoded:
%    \begin{macrocode}
\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
  \do\#\do\^\do\_\do\%\do\~}
%    \end{macrocode}
% (not counting ascii null, tab, linefeed, formfeed, return, delete)
% Each symbol in the list is preceded by \do, which can be defined
% if you want to do something to every item in the list.
%
% We make @ signs act like letters, temporarily, to avoid conflict
% between user names and internal control sequences of plain format.
%    \begin{macrocode}
\catcode`@=11
%    \end{macrocode}
%
% INITEX sets up \mathcode x=x, for x=0..255, except that
% \mathcode x=x+"7100, for x = `A to `Z and `a to `z;
% \mathcode x=x+"7000, for x = `0 to `9.
% The following changes define internal codes as recommended
% in Appendix C of The TeXbook:
%    \begin{macrocode}
\mathcode`\ ="8000 % \space
\mathcode`\!="5021
\mathcode`\'="8000 % ^\prime
\mathcode`\(="4028
\mathcode`\)="5029
\mathcode`\*="2203 % \ast
\mathcode`\+="202B
\mathcode`\,="613B
\mathcode`\-="2200
\mathcode`\.="013A
\mathcode`\/="013D
\mathcode`\:="303A
\mathcode`\;="603B
\mathcode`\<="313C
\mathcode`\=="303D
\mathcode`\>="313E
\mathcode`\?="503F
\mathcode`\[="405B
\mathcode`\\="026E % \backslash
\mathcode`\]="505D
\mathcode`\_="8000 % \_
\mathcode`\{="4266
\mathcode`\|="026A
\mathcode`\}="5267
%    \end{macrocode}
%
% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
% and \lccode`x=`x, \lccode`X=`x; all other values are zero.
% No changes to those tables are needed in plain TeX format.
%
% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
% for uppercase letters. The following changes are needed:
%    \begin{macrocode}
\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
%    \end{macrocode}
% The \nonfrenchspacing macro will make further changes to 
% \sfcode values.
%
% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0
%    \begin{macrocode}
\delcode`\(="028300
\delcode`\)="029301
\delcode`\[="05B302
\delcode`\]="05D303
\delcode`\<="26830A
\delcode`\>="26930B
\delcode`\/="02F30E
\delcode`\|="26A30C
\delcode`\\="26E30F
%    \end{macrocode}
% N.B. { and } should NOT get delcodes;
% otherwise parameter grouping fails!
%
% To make the plain macros more efficient in time and space,
% several constant values are declared here as control sequences.
% If they were changed, anything could happen;
% so they are private symbols.
%    \begin{macrocode}
\chardef\@ne=1
\chardef\tw@=2
\chardef\thr@@=3
\chardef\sixt@@n=16
\chardef\@cclv=255
\mathchardef\@cclvi=256
\mathchardef\@m=1000
\mathchardef\@M=10000
\mathchardef\@MM=20000
%    \end{macrocode}
%
% Allocation of registers
%
% Here are macros for the automatic allocation of \count, \box, \dimen,
% \skip, \muskip, and \toks registers, as well as \read and \write
% stream numbers, \fam codes, \language codes, and \insert numbers.
%
%    \begin{macrocode}
\message{registers,}
%    \end{macrocode}
%
% When a register is used only temporarily, it need not be allocated;
% grouping can be used, making the value previously in the register
% return after the close of the group.  The main use of these macros is
% for registers that are defined by one macro and used by others,
% possibly at ifferent nesting levels.  All such registers should be
% defined through these macros; otherwise conflicts may occur,
% especially when two or more more macro packages are being used at
% once.
%
% The following counters are reserved:
%   0 to 9  page numbering
%       10  count allocation
%       11  dimen allocation
%       12  skip allocation
%       13  muskip allocation
%       14  box allocation
%       15  toks allocation
%       16  read file allocation
%       17  write file allocation
%       18  math family allocation
%       19  language allocation
%       20  insert allocation
%       21  the most recently allocated number
%       22  constant -1
% New counters are allocated starting with 23, 24, etc.  Other registers
% are allocated starting with 10.  This leaves 0 through 9 for the user
% to play with safely, except that counts 0 to 9 are considered to be
% the page and subpage numbers (since they are displayed during
% output). In this scheme, \count 10 always contains the number of the
% highest-numbered counter that has been allocated, \count 14 the
% highest-numbered box, etc. Inserts are given numbers 254, 253, etc.,
% since they require a \count, \dimen, \skip, and \box all with the same
% number; \count 20 contains the lowest-numbered insert that has been
% allocated. Of course, \box255 is reserved for \output; \count255,
% \dimen255, and \skip255 can be used freely.
%
% It is recommended that macro designers always use
% \global assignments with respect to registers numbered
% 1, 3, 5, 7, 9, and
% always non-\global assignments with respect to registers
% 0, 2, 4, 6, 8, 255.
% This will prevent ``save stack buildup'' that might otherwise occur.
%
%    \begin{macrocode}
\count10=22 % allocates \count registers 23, 24, ...
\count11=9 % allocates \dimen registers 10, 11, ...
\count12=9 % allocates \skip registers 10, 11, ...
\count13=9 % allocates \muskip registers 10, 11, ...
\count14=9 % allocates \box registers 10, 11, ...
\count15=9 % allocates \toks registers 10, 11, ...
\count16=-1 % allocates input streams 0, 1, ...
\count17=-1 % allocates output streams 0, 1, ...
\count18=3 % allocates math families 4, 5, ...
\count19=0 % allocates \language codes 1, 2, ...
\count20=255 % allocates insertions 254, 253, ...
\countdef\insc@unt=20 % the insertion counter
\countdef\allocationnumber=21 % the most recent allocation
\countdef\m@ne=22 \m@ne=-1 % a handy constant
\def\wlog{\immediate\write\m@ne} % write on log file (only)
%    \end{macrocode}
%
% Here are abbreviations for the names of scratch registers
% that don't need to be allocated.
%
%    \begin{macrocode}
\countdef\count@=255
\dimendef\dimen@=0
\dimendef\dimen@i=1 % global only
\dimendef\dimen@ii=2
\skipdef\skip@=0
\toksdef\toks@=0
%    \end{macrocode}
%
% Now, we define \newcount, \newbox, etc. so that you can say 
% \newcount\foo and \foo will be defined (with \countdef) to be the next
% counter.
% To find out which counter \foo is, you can look at \allocationnumber.
% Since there's no \boxdef command, \chardef is used to define a
%  \newbox, \newinsert, \newfam, and so on.
% LaTeX change: remove \outer from \newcount and \newdimen (FMi)
%               This is necessary to use \newcount inside \if...
%               later on. Also remove from \newskip, \newbox
%               \newwrite and \newfam (DPC) to save later redefinition.
%
% \end{oldcomments}
% \changes{v1.0c}{1994/03/28}
%         {Remove some \cs{outer} declarations.}
% \begin{oldcomments}
%    \begin{macrocode}
\def\newcount{\alloc@0\count\countdef\insc@unt}
\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
\def\newskip{\alloc@2\skip\skipdef\insc@unt}
\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
\def\newbox{\alloc@4\box\chardef\insc@unt}
\let\newtoks=\relax % we do this to allow plain.tex to be read in twice
\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
\outer\def\newread{\alloc@6\read\chardef\sixt@@n}
\def\newwrite{\alloc@7\write\chardef\sixt@@n}
\def\newfam{\alloc@8\fam\chardef\sixt@@n}
\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi}
\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
  \ch@ck#1#4#2% make sure there's still room
  \allocationnumber=\count1#1%
  \global#3#5=\allocationnumber
  \wlog{\string#5=\string#2\the\allocationnumber}}
\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
  \ch@ck0\insc@unt\count
  \ch@ck1\insc@unt\dimen
  \ch@ck2\insc@unt\skip
  \ch@ck4\insc@unt\box
  \allocationnumber=\insc@unt
  \global\chardef#1=\allocationnumber
  \wlog{\string#1=\string\insert\the\allocationnumber}}
\def\ch@ck#1#2#3{\ifnum\count1#1<#2%
  \else\errmessage{No room for a new #3}\fi}
%    \end{macrocode}
%
% Here are some examples of allocation.
%    \begin{macrocode}
\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
%    \end{macrocode}
%
% LaTeX change: the PLAIN \centering dimension conflicts with
% LaTeX's \centering command, so it is redefined to \@centering.
% This dimension is used by LaTeX.
%
%    \begin{macrocode}
\newskip\@centering \@centering=0pt plus 1000pt minus 1000pt
%    \end{macrocode}
%
%    \begin{macrocode}
\newdimen\p@ \p@=1pt % this saves macro space and time
\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
\newskip\z@skip \z@skip=0pt plus0pt minus0pt
\newbox\voidb@x % permanently void box register
%    \end{macrocode}
%
% And here's a different sort of allocation:
% For example, 
% \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
%    \begin{macrocode}
\outer\def\newif#1{\count@\escapechar \escapechar\m@ne
  \expandafter\expandafter\expandafter
   \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
  \expandafter\expandafter\expandafter
   \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
  \@if#1{false}\escapechar\count@} % the condition starts out false
\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
%    \end{macrocode}
%
%    \begin{macrocode}
\message{compatibility for TeX 2, }
%    \end{macrocode}
%
% If this file is used in an old TeX we define the new features
% of TeX 3.0 as simple macros or counters so that files that uses
% these features can be processed in such an environment
% (They will however produce some other results).
%
%    \begin{macrocode}
\ifx\undefined\inputlineno
  \newcount\inputlineno
  \inputlineno-1               % this could be used to detect that
                               % an old TeX is in force
  \ifx\undefined\language      % extra test for MLTeX 2, RmS 91/11/07
    \newcount\language
  \fi
  \newcount\lefthyphenmin
  \newcount\righthyphenmin
  \newcount\errorcontextlines
  \newcount\holdinginserts
  \newdimen\emergencystretch
  \newcount\badness
  \let\noboundary\relax
  \newcount\setlanguage
\fi
%    \end{macrocode}
%
% Assign initial values to TeX's parameters
%
%    \begin{macrocode}
\message{parameters,}
%    \end{macrocode}
%
% All of TeX's numeric parameters are listed here,
% but the code is commented out if no special value needs to be set.
% INITEX makes all parameters zero except where noted.
%
%    \begin{macrocode}
\pretolerance=100
\tolerance=200 % INITEX sets this to 10000
\hbadness=1000
\vbadness=1000
\linepenalty=10
\hyphenpenalty=50
\exhyphenpenalty=50
\binoppenalty=700
\relpenalty=500
\clubpenalty=150
\widowpenalty=150
\displaywidowpenalty=50
\brokenpenalty=100
\predisplaypenalty=10000
%    \end{macrocode}
% \postdisplaypenalty=0
% \interlinepenalty=0
% \floatingpenalty=0, set during \insert
% \outputpenalty=0, set before TeX enters \output
%    \begin{macrocode}
\doublehyphendemerits=10000
\finalhyphendemerits=5000
\adjdemerits=10000
%    \end{macrocode}
% \looseness=0, cleared by TeX after each paragraph
% \pausing=0
% \holdinginserts=0
% \tracingonline=0
% \tracingmacros=0
% \tracingstats=0
% \tracingparagraphs=0
% \tracingpages=0
% \tracingoutput=0
%    \begin{macrocode}
\tracinglostchars=1
%    \end{macrocode}
% \tracingcommands=0
% \tracingrestores=0
% \language=0
%    \begin{macrocode}
\uchyph=1
%    \end{macrocode}
% \lefthyphenmin=2 \righthyphenmin=3 set below
% \globaldefs=0
% \maxdeadcycles=25 % INITEX does this
% \hangafter=1 % INITEX does this, also TeX after each paragraph
% \fam=0
% \mag=1000 % INITEX does this
% \escapechar=`\\ % INITEX does this
%    \begin{macrocode}
\defaulthyphenchar=`\-
\defaultskewchar=-1
%    \end{macrocode}
% \endlinechar=`\^^M % INITEX does this
%    \begin{macrocode}
\newlinechar=-1
\delimiterfactor=901
%    \end{macrocode}
% \time=now % TeX does this at beginning of job
% \day=now % TeX does this at beginning of job
% \month=now % TeX does this at beginning of job
% \year=now % TeX does this at beginning of job
%
% \end{oldcomments}
%    In \LaTeX{} we don't want box information in the transcript
%    unless we do a full tracing.
%  \changes{v1.0g}{1994/04/28}{Turn off overfull box tracing in log}
% \begin{oldcomments}
%    \begin{macrocode}
\showboxbreadth=-1
\showboxdepth=-1
\errorcontextlines=-1
%    \end{macrocode}
%
%    \begin{macrocode}
\hfuzz=0.1pt
\vfuzz=0.1pt
\overfullrule=5pt
\hsize=6.5in
\vsize=8.9in
\maxdepth=4pt
\splitmaxdepth=\maxdimen
\boxmaxdepth=\maxdimen
%    \end{macrocode}
% \lineskiplimit=0pt, changed by \normalbaselines
%    \begin{macrocode}
\delimitershortfall=5pt
\nulldelimiterspace=1.2pt
\scriptspace=0.5pt
%    \end{macrocode}
% \mathsurround=0pt
% \predisplaysize=0pt, set before TeX enters $$
% \displaywidth=0pt, set before TeX enters $$
% \displayindent=0pt, set before TeX enters $$
%    \begin{macrocode}
\parindent=20pt
%    \end{macrocode}
% \hangindent=0pt, zeroed by TeX after each paragraph
% \hoffset=0pt
% \voffset=0pt
%
% \baselineskip=0pt, changed by \normalbaselines
% \lineskip=0pt, changed by \normalbaselines
%    \begin{macrocode}
\parskip=0pt plus 1pt
\abovedisplayskip=12pt plus 3pt minus 9pt
\abovedisplayshortskip=0pt plus 3pt
\belowdisplayskip=12pt plus 3pt minus 9pt
\belowdisplayshortskip=7pt plus 3pt minus 4pt
%    \end{macrocode}
% \leftskip=0pt
% \rightskip=0pt
%    \begin{macrocode}
\topskip=10pt
\splittopskip=10pt
%    \end{macrocode}
% \tabskip=0pt
% \spaceskip=0pt
% \xspaceskip=0pt
%    \begin{macrocode}
\parfillskip=0pt plus 1fil
%    \end{macrocode}
%
%    \begin{macrocode}
\thinmuskip=3mu
\medmuskip=4mu plus 2mu minus 4mu
\thickmuskip=5mu plus 5mu
%    \end{macrocode}
%
% We also define special registers that function like parameters:
%    \begin{macrocode}
\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
\newskip\normalbaselineskip \normalbaselineskip=12pt
\newskip\normallineskip \normallineskip=1pt
\newdimen\normallineskiplimit \normallineskiplimit=0pt
\newdimen\jot \jot=3pt
\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
%    \end{macrocode}
%
% Definitions for preloaded fonts
%
%    \begin{macrocode}
\def\magstephalf{1095 }
\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 
               2074\or 2488\fi\relax}
%    \end{macrocode}
%
% Fonts assigned to \preloaded are not part of "plain TeX",
% but they are preloaded so that other format packages can use them.
% For example, if another set of macros says "\font\ninerm=cmr9",
% TeX will not have to reload the font metric information for cmr9.
%
% LaTeX font definitions are done using NFSS2 (file ltfss.dtx)
% so all of PLAIN's font definitions are commented out.
%
%\message{fonts,}
%
%\font\tenrm=cmr10 % roman text
%\font\preloaded=cmr9
%\font\preloaded=cmr8
%\font\sevenrm=cmr7
%\font\preloaded=cmr6
%\font\fiverm=cmr5
%
%\font\teni=cmmi10 % math italic
%\font\preloaded=cmmi9
%\font\preloaded=cmmi8
%\font\seveni=cmmi7
%\font\preloaded=cmmi6
%\font\fivei=cmmi5
%
%\font\tensy=cmsy10 % math symbols
%\font\preloaded=cmsy9
%\font\preloaded=cmsy8
%\font\sevensy=cmsy7
%\font\preloaded=cmsy6
%\font\fivesy=cmsy5
%
%\font\tenex=cmex10 % math extension
%
%\font\preloaded=cmss10 % sans serif
%\font\preloaded=cmssq8
%
%\font\preloaded=cmssi10 % sans serif italic
%\font\preloaded=cmssqi8
%
%\font\tenbf=cmbx10 % boldface extended
%\font\preloaded=cmbx9
%\font\preloaded=cmbx8
%\font\sevenbf=cmbx7
%\font\preloaded=cmbx6
%\font\fivebf=cmbx5
%
%\font\tentt=cmtt10 % typewriter
%\font\preloaded=cmtt9
%\font\preloaded=cmtt8
%
%\font\preloaded=cmsltt10 % slanted typewriter
%
%\font\tensl=cmsl10 % slanted roman
%\font\preloaded=cmsl9
%\font\preloaded=cmsl8
%
%\font\tenit=cmti10 % text italic
%\font\preloaded=cmti9
%\font\preloaded=cmti8
%\font\preloaded=cmti7
%
%\message{more fonts,}
%\font\preloaded=cmu10 % unslanted text italic
%
%\font\preloaded=cmmib10 % bold math italic
%\font\preloaded=cmbsy10 % bold math symbols
%
%\font\preloaded=cmcsc10 % caps and small caps
%
%\font\preloaded=cmssbx10 % sans serif bold extended
%
%\font\preloaded=cmdunh10 % Dunhill style
%
%\font\preloaded=cmr7 scaled \magstep4 % for titles
%\font\preloaded=cmtt10 scaled \magstep2
%\font\preloaded=cmssbx10 scaled \magstep2
%
%\font\preloaded=manfnt % METAFONT logo and dragon curve and 
%                       % special symbols
%
%% Additional \preloaded fonts can be specified here.
%% (And those that were \preloaded above can be eliminated.)
%
%\let\preloaded=\undefined% preloaded fonts must be declared anew later.
%
%\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
%\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60
%
%\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
%\def\rm{\fam\z@\tenrm}
%\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
%\def\mit{\fam\@ne} \def\oldstyle{\fam\@ne\teni}
%\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
%\def\cal{\fam\tw@}
%\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
%\newfam\itfam \def\it{\fam\itfam\tenit} % \it is family 4
%\textfont\itfam=\tenit
%\newfam\slfam \def\sl{\fam\slfam\tensl} % \sl is family 5
%\textfont\slfam=\tensl
%\newfam\bffam \def\bf{\fam\bffam\tenbf} % \bf is family 6
%\textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
%\scriptscriptfont\bffam=\fivebf
%\newfam\ttfam \def\tt{\fam\ttfam\tentt} % \tt is family 7
%\textfont\ttfam=\tentt
%
% Macros for setting ordinary text
%    \begin{macrocode}
\message{macros,}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
  \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
  \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
%    \end{macrocode}
%
%    \begin{macrocode}
\def\normalbaselines{\lineskip\normallineskip
  \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\^^M{\ } % control <return> = control <space>
\def\^^I{\ } % same for <tab>
%    \end{macrocode}
%
%    \begin{macrocode}
\def\lq{`} \def\rq{'}
\def\lbrack{[} \def\rbrack{]}
%    \end{macrocode}
%
%    \begin{macrocode}
\let\endgraf=\par \let\endline=\cr
%    \end{macrocode}
%
%    \begin{macrocode}
\def\space{ }
\def\empty{}
\def\null{\hbox{}}
%    \end{macrocode}
%
%    \begin{macrocode}
\let\bgroup={ \let\egroup=}
%    \end{macrocode}
%
% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
%    \begin{macrocode}
{\catcode`\^^M=\active % these lines must end with %
  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
  \global\let^^M\par} % this is in case ^^M appears in a \write
\def\obeyspaces{\catcode`\ \active}
{\obeyspaces\global\let =\space}
%    \end{macrocode}
% \end{oldcomments}
%
%  \begin{macro}{\loop}
% \changes{v1.0h}{1994/05/16}{Use Kabelschacht method} 
%  \begin{macro}{\iterate}
%  \begin{macro}{\repeat}
%    We use Kabelschacht's method of doing loops, see TUB 8\#2 (1987).
%    (unless that breaks something :-)
%    \begin{macrocode}
%\def\loop#1\repeat{\def\body{#1}\iterate}
%\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
\let\repeat=\fi % this makes \loop...\if...\repeat skippable
\def\loop#1\repeat{\def\iterate{#1\expandafter\iterate\fi}%
  \iterate \let\iterate\relax}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \begin{oldcomments}
%    \begin{macrocode}
\def\thinspace{\kern .16667em }
\def\negthinspace{\kern-.16667em }
\def\enspace{\kern.5em }
%    \end{macrocode}
%
%    \begin{macrocode}
\def\enskip{\hskip.5em\relax}
\def\quad{\hskip1em\relax}
\def\qquad{\hskip2em\relax}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\smallskip{\vskip\smallskipamount}
\def\medskip{\vskip\medskipamount}
\def\bigskip{\vskip\bigskipamount}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\nointerlineskip{\prevdepth-1000\p@}
\def\offinterlineskip{\baselineskip-1000\p@
  \lineskip\z@ \lineskiplimit\maxdimen}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\vglue{\afterassignment\vgl@\skip@=}
\def\vgl@{\par \dimen@\prevdepth \hrule \@height\z@
  \nobreak\vskip\skip@ \prevdepth\dimen@}
\def\hglue{\afterassignment\hgl@\skip@=}
\def\hgl@{\leavevmode \count@\spacefactor \vrule \@width\z@
  \nobreak\hskip\skip@ \spacefactor\count@}
%    \end{macrocode}
%
%    \begin{macrocode}
\def~{\penalty\@M \ } % tie
\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
%    \end{macrocode}
%
%    \begin{macrocode}
\def\break{\penalty-\@M}
\def\nobreak{\penalty \@M}
\def\allowbreak{\penalty \z@}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\filbreak{\par\vfil\penalty-200\vfilneg}
\def\goodbreak{\par\penalty-500 }
\def\eject{\par\break}
\def\supereject{\par\penalty-\@MM}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
\def\smallbreak{\par\ifdim\lastskip<\smallskipamount
  \removelastskip\penalty-50\smallskip\fi}
\def\medbreak{\par\ifdim\lastskip<\medskipamount
  \removelastskip\penalty-100\medskip\fi}
\def\bigbreak{\par\ifdim\lastskip<\bigskipamount
  \removelastskip\penalty-200\bigskip\fi}
%    \end{macrocode}
%
% \line changed to \@@line because LaTeX redefines \line
%    \begin{macrocode}
\def\@@line{\hbox to\hsize}
\def\leftline#1{\@@line{#1\hss}}
\def\rightline#1{\@@line{\hss#1}}
\def\centerline#1{\@@line{\hss#1\hss}}
%    \end{macrocode}
% end of LaTeX \line -> \@@line change
%
%    \begin{macrocode}
\def\rlap#1{\hbox to\z@{#1\hss}}
\def\llap#1{\hbox to\z@{\hss#1}}
%    \end{macrocode}
%
% \changes{v1.0h}{1994/05/16}{Remove unnecssary space} 
%    \begin{macrocode}
\def\m@th{\mathsurround\z@}
\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
  \m@th \underline{\box\z@}$}
%    \end{macrocode}
%
%    \begin{macrocode}
\newbox\strutbox
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hidewidth{\hskip\hideskip} % for alignment entries that 
                                % can stick out
\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
\newcount\mscount
\def\multispan#1{\omit \mscount#1\relax
  \loop\ifnum\mscount>\@ne \sp@n\repeat}
\def\sp@n{\span\omit\advance\mscount\m@ne}
%    \end{macrocode}
%
% LaTeX has its own tabbing environment, so PLAIN's is disabled.
%
%\newif\ifus@ \newif\if@cr
%\newbox\tabs \newbox\tabsyet \newbox\tabsdone
%
%\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
%\def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
%\let\+=\relax % in case this file is being read in twice
%\def\sett@b{\ifx\next\+\let\next\relax
%    \def\next{\afterassignment\s@tt@b\let\next}%
%  \else\let\next\s@tcols\fi\next}
%\def\s@tt@b{\let\next\relax\us@false\m@ketabbox}
%\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
%\outer\def\+{\tabalign}
%\def\s@tcols#1\columns{\count@#1 \dimen@\hsize
%  \loop\ifnum\count@>\z@ \@nother \repeat}
%\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
%  \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
%  \advance\dimen@-\dimen@ii \advance\count@\m@ne}
%
%\def\m@ketabbox{\begingroup
%  \global\setbox\tabsyet\copy\tabs
%  \global\setbox\tabsdone\null
%  \def\cr{\@crtrue\crcr\egroup\egroup
%    \ifus@\unvbox\z@\lastbox\fi\endgroup
%    \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
%  \setbox\z@\vbox\bgroup\@crfalse
%    \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
%
%\def\t@bbox{\setbox\z@\hbox\bgroup}
%\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
%  \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
%      \global\setbox\@ne\lastbox}% now \box\@ne holds its size
%    \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
%    \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
%    \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
%  \box\z@}
%
% \changes{v1.0h}{1994/05/16}{Remove unnecessary def for \cmd\item} 
%    \begin{macrocode}
\def\hang{\hangindent\parindent}
\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
%\def\item{\par\hang\textindent}
%    \end{macrocode}
% RmS 1991/11/04: Removed \itemitem since never needed/useful on LaTeX.
%\def\itemitem{\par\indent \hangindent2\parindent \textindent}
%    \begin{macrocode}
\def\narrower{\advance\leftskip\parindent
  \advance\rightskip\parindent}
%    \end{macrocode}
%
% LaTeX has its own sectioning macros
%\outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250
%  \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip
%  \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}
%
% \end{oldcomments}
% \begin{macro}{\proclaim}
% \changes{v1.0d}{1994/04/12}
%         {Use NFSS  font commands.}
% LaTeX Change: Use NFSS font commands.
%    \begin{macrocode}
\outer\def\proclaim #1. #2\par{\medbreak
  \noindent{\bfseries#1.\enspace}{\slshape#2\par}%
  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
%    \end{macrocode}
% \end{macro}
%
% LaTeX Change: \LaTeX\ has its own version of |\raggedright|.
%\begin{verbatim}
%\def\raggedright{%
%  \rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
%\end{verbatim}
%
% \begin{macro}{\ttraggedright}
% \changes{v1.0d}{1994/04/12}
%         {Use NFSS  font commands. Comment out \cmd\raggedright.}
% LaTeX Change: Use NFSS font commands.
%    \begin{macrocode}
\def\ttraggedright{\reset@font\ttfamily\rightskip\z@ plus2em\relax}
%    \end{macrocode}
% \end{macro}
%
% \begin{oldcomments}
%    \begin{macrocode}
\chardef\%=`\%
\chardef\&=`\&
\chardef\#=`\#
\chardef\$=`\$
\chardef\ss="19
\chardef\ae="1A
\chardef\oe="1B
\chardef\o="1C
\chardef\AE="1D
\chardef\OE="1E
\chardef\O="1F
\chardef\i="10 \chardef\j="11 % dotless letters
\def\aa{\accent23a}
\def\l{\char32l}
\def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}
%    \end{macrocode}
%
%    Most text commands are actually encoding specific and 
%    therefore defined later, so commented out.
% \changes{v1.0h}{1994/05/16}{Comment out encoding specific commands} 
%    \begin{macrocode}
\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
%\def\_{\leavevmode \kern.06em \vbox{\hrule \@width.3em}}
%\def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
%  \rlap{\raise.67\dimen@\hbox{\char'27}}A}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\mathhexbox#1#2#3{\leavevmode
  \hbox{$\m@th \mathchar"#1#2#3$}}
\def\dag{\mathhexbox279}
\def\ddag{\mathhexbox27A}
\def\S{\mathhexbox278}
\def\P{\mathhexbox27B}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
  \ialign{##\crcr#1\crcr}}} % put characters over each other
\def\ooalign{\lineskiplimit-\maxdimen \oalign}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\sh@ft#1{\dimen\z@.00#1ex\multiply\dimen\z@\fontdimen1\font
  \kern-.0156\dimen\z@} % compensate for slant in lowered accents
%    \end{macrocode}
%
% LaTeX change: \d, \b, \c redefined to work in a moving argument.
%    \begin{macrocode}
%\def\pd#1{\oalign{#1\crcr\hidewidth\sh@ft{08}.\hidewidth}}
%\def\d{\protect\pd}
%    \end{macrocode}
%
%    \begin{macrocode}
%\def\pb#1{\oalign{#1\crcr\hidewidth\sh@ft{29}%
%    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
%\def\b{\protect\pb}
%    \end{macrocode}
%
%    \begin{macrocode}
%\def\pc#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
%  \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
%\def\c{\protect\pc}
%    \end{macrocode}
% end of LaTeX change to \d, \b, \c
%
%    \begin{macrocode}
\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}%
                \hfil\crcr\mathhexbox20D}}}
%    \end{macrocode}
%
% LaTeX change: \ldots is redefined to do essentially 
% what Plain's \dots does,
% so ...
%    \begin{macrocode}
\def\dots{\ldots}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
%    \end{macrocode}
% \end{oldcomments}
%
% \changes{LaTeX2e}
%     {1993/11/29}{All accents in decimals; suggested by Paul Taylor}
% \changes{v1.0d}{1994/04/12}
%         {Define \cmd{\@acci}}
% \changes{v1.0h}{1994/05/16}{Remove \cmd\@acci and friends again} 
%    \begin{macrocode}
%\def\@accii#1{{\accent18 #1}} \def\`{\@accii}
%\def\@acci#1{{\accent19 #1}}   \def\'{\@acci}
%\def\v#1{{\accent20 #1}}
%\def\u#1{{\accent21 #1}}
%\def\@acciii#1{{\accent22 #1}} \def\={\@acciii}
%\def\^#1{{\accent94 #1}}
%\def\.#1{{\accent95 #1}}
%\def\H#1{{\accent125 #1}}
%\def\~#1{{\accent126 #1}}
%\def\"#1{{\accent127 #1}}
%    \end{macrocode}
%
% \LaTeX{} change: Make |\t| work in a moving argument.
%    \begin{macrocode}
\def\pt#1{{\edef\next{\the\font}\the\textfont1\accent127\next#1}}
\def\t{\protect\pt}
%    \end{macrocode}
%
% \begin{oldcomments}
% LaTeX change: \kern\z@ added to end of \hrulefill and \dotfill
% to make them work in `tabular' and `array' environments.
% (Change made 24 July 1987).
% LaTeX change: \leavevmode added at begin of \dotfill and \hrulefill
% so that they work as expected in vertical mode.
%    \begin{macrocode}
\def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@}
\def\dotfill{\leavevmode\cleaders
     \hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill\kern\z@}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\rightarrowfill{$\m@th\mathord-\mkern-6mu%
  \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
  \mkern-6mu\mathord\rightarrow$}
\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
  \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
  \mkern-6mu\mathord-$}
\mathchardef\braceld="37A \mathchardef\bracerd="37B
\mathchardef\bracelu="37C \mathchardef\braceru="37D
\def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
  \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru
  \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd$}
\def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
  \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd
  \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$}
%    \end{macrocode}
%
% LaTeX change: \bye is eliminated.
%\outer\def\bye{\par\vfill\supereject\end}
%
% Macros for math setting
%    \begin{macrocode}
\message{math definitions,}
%    \end{macrocode}
%
%    \begin{macrocode}
\let\sp=^ \let\sb=_
\def\,{\mskip\thinmuskip}
\def\>{\mskip\medmuskip}
\def\;{\mskip\thickmuskip}
\def\!{\mskip-\thinmuskip}
\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
{\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
\def\prim@s{\prime\futurelet\next\pr@m@s}
\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
  \else\let\nxt\egroup\fi\fi \nxt}
\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
%    \end{macrocode}
%{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
%
% \changes{v1.0i}{1994/05/17}{Replaced \cs{let} by \cs{gdef}, for
%            indirect definition.
%    \begin{macrocode}
{\catcode`\_=\active \gdef_{\_}} % _ in math is 
                                 % either subscript or \_
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\alpha="010B
\mathchardef\beta="010C
\mathchardef\gamma="010D
\mathchardef\delta="010E
\mathchardef\epsilon="010F
\mathchardef\zeta="0110
\mathchardef\eta="0111
\mathchardef\theta="0112
\mathchardef\iota="0113
\mathchardef\kappa="0114
\mathchardef\lambda="0115
\mathchardef\mu="0116
\mathchardef\nu="0117
\mathchardef\xi="0118
\mathchardef\pi="0119
\mathchardef\rho="011A
\mathchardef\sigma="011B
\mathchardef\tau="011C
\mathchardef\upsilon="011D
\mathchardef\phi="011E
\mathchardef\chi="011F
\mathchardef\psi="0120
\mathchardef\omega="0121
\mathchardef\varepsilon="0122
\mathchardef\vartheta="0123
\mathchardef\varpi="0124
\mathchardef\varrho="0125
\mathchardef\varsigma="0126
\mathchardef\varphi="0127
\mathchardef\Gamma="7000
\mathchardef\Delta="7001
\mathchardef\Theta="7002
\mathchardef\Lambda="7003
\mathchardef\Xi="7004
\mathchardef\Pi="7005
\mathchardef\Sigma="7006
\mathchardef\Upsilon="7007
\mathchardef\Phi="7008
\mathchardef\Psi="7009
\mathchardef\Omega="700A
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\aleph="0240
\def\hbar{{\mathchar'26\mkern-9muh}}
\mathchardef\imath="017B
\mathchardef\jmath="017C
\mathchardef\ell="0160
\mathchardef\wp="017D
\mathchardef\Re="023C
\mathchardef\Im="023D
\mathchardef\partial="0140
\mathchardef\infty="0231
\mathchardef\prime="0230
\mathchardef\emptyset="023B
\mathchardef\nabla="0272
\def\surd{{\mathchar"1270}}
\mathchardef\top="023E
\mathchardef\bot="023F
\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
      \not\mathrel{\mkern14mu}\crcr
      \noalign{\nointerlineskip}
      \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr}}}}
\mathchardef\triangle="0234
\mathchardef\forall="0238
\mathchardef\exists="0239
\mathchardef\neg="023A \let\lnot=\neg
\mathchardef\flat="015B
\mathchardef\natural="015C
\mathchardef\sharp="015D
\mathchardef\clubsuit="027C
\mathchardef\diamondsuit="027D
\mathchardef\heartsuit="027E
\mathchardef\spadesuit="027F
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\coprod="1360
\mathchardef\bigvee="1357
\mathchardef\bigwedge="1356
\mathchardef\biguplus="1355
\mathchardef\bigcap="1354
\mathchardef\bigcup="1353
\mathchardef\intop="1352 \def\int{\intop\nolimits}
\mathchardef\prod="1351
\mathchardef\sum="1350
\mathchardef\bigotimes="134E
\mathchardef\bigoplus="134C
\mathchardef\bigodot="134A
\mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
\mathchardef\bigsqcup="1346
\mathchardef\smallint="1273
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\triangleleft="212F
\mathchardef\triangleright="212E
\mathchardef\bigtriangleup="2234
\mathchardef\bigtriangledown="2235
\mathchardef\wedge="225E \let\land=\wedge
\mathchardef\vee="225F \let\lor=\vee
\mathchardef\cap="225C
\mathchardef\cup="225B
\mathchardef\ddagger="227A
\mathchardef\dagger="2279
\mathchardef\sqcap="2275
\mathchardef\sqcup="2274
\mathchardef\uplus="225D
\mathchardef\amalg="2271
\mathchardef\diamond="2205
\mathchardef\bullet="220F
\mathchardef\wr="226F
\mathchardef\div="2204
\mathchardef\odot="220C
\mathchardef\oslash="220B
\mathchardef\otimes="220A
\mathchardef\ominus="2209
\mathchardef\oplus="2208
\mathchardef\mp="2207
\mathchardef\pm="2206
\mathchardef\circ="220E
\mathchardef\bigcirc="220D
\mathchardef\setminus="226E % for set difference A\setminus B
\mathchardef\cdot="2201
\mathchardef\ast="2203
\mathchardef\times="2202
\mathchardef\star="213F
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\propto="322F
\mathchardef\sqsubseteq="3276
\mathchardef\sqsupseteq="3277
\mathchardef\parallel="326B
\mathchardef\mid="326A
\mathchardef\dashv="3261
\mathchardef\vdash="3260
\mathchardef\nearrow="3225
\mathchardef\searrow="3226
\mathchardef\nwarrow="322D
\mathchardef\swarrow="322E
\mathchardef\Leftrightarrow="322C
\mathchardef\Leftarrow="3228
\mathchardef\Rightarrow="3229
\def\neq{\not=} \let\ne=\neq
\mathchardef\leq="3214 \let\le=\leq
\mathchardef\geq="3215 \let\ge=\geq
\mathchardef\succ="321F
\mathchardef\prec="321E
\mathchardef\approx="3219
\mathchardef\succeq="3217
\mathchardef\preceq="3216
\mathchardef\supset="321B
\mathchardef\subset="321A
\mathchardef\supseteq="3213
\mathchardef\subseteq="3212
\mathchardef\in="3232
\mathchardef\ni="3233 \let\owns=\ni
\mathchardef\gg="321D
\mathchardef\ll="321C
\mathchardef\not="3236
\mathchardef\leftrightarrow="3224
\mathchardef\leftarrow="3220 \let\gets=\leftarrow
\mathchardef\rightarrow="3221 \let\to=\rightarrow
\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
\mathchardef\sim="3218
\mathchardef\simeq="3227
\mathchardef\perp="323F
\mathchardef\equiv="3211
\mathchardef\asymp="3210
\mathchardef\smile="315E
\mathchardef\frown="315F
\mathchardef\leftharpoonup="3128
\mathchardef\leftharpoondown="3129
\mathchardef\rightharpoonup="312A
\mathchardef\rightharpoondown="312B
%    \end{macrocode}
%
%    \begin{macrocode}
\def\joinrel{\mathrel{\mkern-3mu}}
\def\relbar{\mathrel{\smash-}} % \smash, because - 
                               % has the same height as +
\def\Relbar{\mathrel=}
\mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
\mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
\def\models{\mathrel|\joinrel=}
\def\Longrightarrow{\Relbar\joinrel\Rightarrow}
%    \end{macrocode}
%
% LaTeX Change: \longrightarrow and \longleftarrow redefined to make
%   then robust.
%    \begin{macrocode}
\def\longrightarrow{\protect\@lra}
  \def\@lra{\relbar\joinrel\rightarrow}
\def\longleftarrow{\protect\@lla}
   \def\@lla{\leftarrow\joinrel\relbar}
%    \end{macrocode}
% End of LaTeX change to \longrightarrow and \longleftarrow
%
%    \begin{macrocode}
\def\Longleftarrow{\Leftarrow\joinrel\Relbar}
\def\longmapsto{\mapstochar\longrightarrow}
\def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
\def\iff{\;\Longleftrightarrow\;}
%    \end{macrocode}
%
%    \begin{macrocode}
\mathchardef\ldotp="613A % ldot as a punctuation mark
\mathchardef\cdotp="6201 % cdot as a punctuation mark
\mathchardef\colon="603A % colon as a punctuation mark
%    \end{macrocode}
%
% LaTeX change: make \ldots work outside math mode too.
%    \begin{macrocode}
\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}}
\def\ldots{\protect\pldots}
\def\pldots{\relax\ifmmode\@ldots\else\mbox{$\m@th\@ldots\,$}\fi}
%    \end{macrocode}
% End of LaTeX change to \ldots
%
%    \begin{macrocode}
\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
    \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
\def\ddots{\mathinner{\mkern1mu\raise7\p@
    \vbox{\kern7\p@\hbox{.}}\mkern2mu
    \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\acute{\mathaccent"7013 }
\def\grave{\mathaccent"7012 }
\def\ddot{\mathaccent"707F }
\def\tilde{\mathaccent"707E }
\def\bar{\mathaccent"7016 }
\def\breve{\mathaccent"7015 }
\def\check{\mathaccent"7014 }
\def\hat{\mathaccent"705E }
\def\vec{\mathaccent"017E }
\def\dot{\mathaccent"705F }
\def\widetilde{\mathaccent"0365 }
\def\widehat{\mathaccent"0362 }
\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
      \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
      $\hfil\displaystyle{#1}\hfil$\crcr}}}
\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
      \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
      $\hfil\displaystyle{#1}\hfil$\crcr}}}
\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}
      \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
      $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
   $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
   \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
\def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\lmoustache{\delimiter"437A340 } % top from (, bottom from )
\def\rmoustache{\delimiter"537B341 } % top from ), bottom from (
\def\lgroup{\delimiter"462833A } % extensible ( with sharper tips
\def\rgroup{\delimiter"562933B } % extensible ) with sharper tips
\def\arrowvert{\delimiter"26A33C } % arrow without arrowheads
\def\Arrowvert{\delimiter"26B33D }% double arrow without arrowheads
\def\bracevert{\delimiter"77C33E }% the vertical bar that extends braces
\def\Vert{\delimiter"26B30D } \let\|=\Vert
\def\vert{\delimiter"26A30C }
\def\uparrow{\delimiter"3222378 }
\def\downarrow{\delimiter"3223379 }
\def\updownarrow{\delimiter"326C33F }
\def\Uparrow{\delimiter"322A37E }
\def\Downarrow{\delimiter"322B37F }
\def\Updownarrow{\delimiter"326D377 }
\def\backslash{\delimiter"26E30F } % for double coset G\backslash H
\def\rangle{\delimiter"526930B }
\def\langle{\delimiter"426830A }
\def\rbrace{\delimiter"5267309 } \let\}=\rbrace
\def\lbrace{\delimiter"4266308 } \let\{=\lbrace
\def\rceil{\delimiter"5265307 }
\def\lceil{\delimiter"4264306 }
\def\rfloor{\delimiter"5263305 }
\def\lfloor{\delimiter"4262304 }
%    \end{macrocode}
%
%    \begin{macrocode}
\def\bigl{\mathopen\big}
\def\bigm{\mathrel\big}
\def\bigr{\mathclose\big}
\def\Bigl{\mathopen\Big}
\def\Bigm{\mathrel\Big}
\def\Bigr{\mathclose\Big}
\def\biggl{\mathopen\bigg}
\def\biggm{\mathrel\bigg}
\def\biggr{\mathclose\bigg}
\def\Biggl{\mathopen\Bigg}
\def\Biggm{\mathrel\Bigg}
\def\Biggr{\mathclose\Bigg}
\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
\def\n@space{\nulldelimiterspace\z@ \m@th}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\choose{\atopwithdelims()}
\def\brack{\atopwithdelims[]}
\def\brace{\atopwithdelims\{\}}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\sqrt{\radical"270370 }
%    \end{macrocode}
%
%    \begin{macrocode}
\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
  {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
\newbox\rootbox
\def\root#1\of{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}
  \mathpalette\r@@t}
\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
  \dimen@\ht\z@ \advance\dimen@-\dp\z@
  \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu \box\z@}
\newif\ifv@ \newif\ifh@
\def\vphantom{\v@true\h@false\ph@nt}
\def\hphantom{\v@false\h@true\ph@nt}
\def\phantom{\v@true\h@true\ph@nt}
\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
  \else\let\next\makeph@nt\fi\next}
\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
\def\finph@nt{\setbox\tw@\null
  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
  \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
\def\mathstrut{\vphantom(}
\def\smash{\relax % \relax, in case this comes first in \halign
  \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
  \fi\next}
\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
\def\@vereq#1#2{\lower.5\p@\vbox{\baselineskip\z@skip\lineskip-.5\p@
    \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
\def\notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
          \hbox{$#1\rightharpoonup$}\crcr
        $#1\leftharpoondown$}}}}
\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
\def\doteq{\buildrel\textstyle.\over=}
%    \end{macrocode}
%
% LaTeX change: the following math operators commented out, as they are
% redefined later.
% \end{oldcomments}
%
% \changes{v1.0c}{1994/03/28}
%         {Remove `log like' operators.}
%\begin{verbatim}
%\def\log{\mathop{\rm log}\nolimits}
%\def\lg{\mathop{\rm lg}\nolimits}
%\def\ln{\mathop{\rm ln}\nolimits}
%\def\lim{\mathop{\rm lim}}
%\def\limsup{\mathop{\rm lim\,sup}}
%\def\liminf{\mathop{\rm lim\,inf}}
%\def\sin{\mathop{\rm sin}\nolimits}
%\def\arcsin{\mathop{\rm arcsin}\nolimits}
%\def\sinh{\mathop{\rm sinh}\nolimits}
%\def\cos{\mathop{\rm cos}\nolimits}
%\def\arccos{\mathop{\rm arccos}\nolimits}
%\def\cosh{\mathop{\rm cosh}\nolimits}
%\def\tan{\mathop{\rm tan}\nolimits}
%\def\arctan{\mathop{\rm arctan}\nolimits}
%\def\tanh{\mathop{\rm tanh}\nolimits}
%\def\cot{\mathop{\rm cot}\nolimits}
%\def\coth{\mathop{\rm coth}\nolimits}
%\def\sec{\mathop{\rm sec}\nolimits}
%\def\csc{\mathop{\rm csc}\nolimits}
%\def\max{\mathop{\rm max}}
%\def\min{\mathop{\rm min}}
%\def\sup{\mathop{\rm sup}}
%\def\inf{\mathop{\rm inf}}
%\def\arg{\mathop{\rm arg}\nolimits}
%\def\ker{\mathop{\rm ker}\nolimits}
%\def\dim{\mathop{\rm dim}\nolimits}
%\def\hom{\mathop{\rm hom}\nolimits}
%\def\det{\mathop{\rm det}}
%\def\exp{\mathop{\rm exp}\nolimits}
%\def\Pr{\mathop{\rm Pr}}
%\def\gcd{\mathop{\rm gcd}}
%\def\deg{\mathop{\rm deg}\nolimits}
%\end{verbatim}
%
%\begin{verbatim}
\def\bmod{\mskip-\medmuskip\mkern5mu
  \mathbin{\rm mod}\penalty900\mkern5mu\mskip-\medmuskip}
\def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)}
%\end{verbatim}
%
%
% \begin{macro}{\cases}
% \changes{LaTeX2.09}{1991/08/14}
%         {(RmS) inserted extra braces around entry for NFSS}
%    \begin{macrocode}
\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
    \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
      \mathstrut\crcr\noalign{\kern-\baselineskip}
      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
\def\pmatrix#1{\left(\matrix{#1}\right)}
%    \end{macrocode}
%
%
% \begin{macro}{\bordermatrix}
% \changes{LaTeX2e}{1994/01/25}{Removed \cmd{\p@renwd}.}
%    \begin{macrocode}
\def\bordermatrix#1{\begingroup \m@th
  \@tempdima 8.75\p@
  \setbox\z@\vbox{%
    \def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
    \ialign{$##$\hfil\kern2\p@\kern\@tempdima&\thinspace\hfil$##$\hfil
      &&\quad\hfil$##$\hfil\crcr
      \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
      #1\crcr\omit\strut\cr}}%
  \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
  \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
  \setbox\tw@\hbox{$\kern\wd\@ne\kern-\@tempdima\left(\kern-\wd\@ne
    \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
    \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
  \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
%    \end{macrocode}
% \end{macro}
%
% \begin{oldcomments}
%
%    \begin{macrocode}
\def\openup{\afterassignment\@penup\dimen@=}
\def\@penup{\advance\lineskip\dimen@
  \advance\baselineskip\dimen@
  \advance\lineskiplimit\dimen@}
%    \end{macrocode}
%
% LaTeX change: \eqalign eliminated, since it is replaced by the
% eqnarray environment.
%
%\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
%  \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
%      \crcr#1\crcr}}\,}
%
%    \begin{macrocode}
\newif\ifdt@p
\def\displ@y{\global\dt@ptrue\openup\jot\m@th
  \everycr{\noalign{\ifdt@p \global\dt@pfalse
      \vskip-\lineskiplimit \vskip\normallineskiplimit
      \else \penalty\interdisplaylinepenalty \fi}}}
\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
\def\displaylines#1{\displ@y
  \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
    #1\crcr}}
%    \end{macrocode}
%
% LaTeX: The following \eqalign type macros are eliminated, since
% they are replaced by the eqnarray environment.
%
%\def\eqalignno#1{\displ@y \tabskip\centering
%  \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 \tabskip\centering
%  \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
%    &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
%    &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
%    #1\crcr}}
%
% Definitions related to output
%
% LaTeX uses its own output routine
%
%\message{output routines,}
%
%\countdef\pageno=0 \pageno=1 % first page is number 1
%\newtoks\headline \headline={\hfil} % headline is normally blank
%\newtoks\footline \footline={\hss\tenrm\folio\hss}
%  % footline is normally a centered page number in font \tenrm
%\newif\ifr@ggedbottom
%\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
%\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse}
%                                       % undoes \raggedbottom
%\def\folio{%
%  \ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
%\def\nopagenumbers{\footline{\hfil}} % blank out the footline
%\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
%  \else\global\advance\pageno\@ne \fi} % increase |pageno|
%
% LaTeX does use the same insert for footnotes as PLAIN
%    \begin{macrocode}
\newinsert\footins
%    \end{macrocode}
%
%\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
%  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
%  #1\@sf\vfootnote{#1}}
%\def\vfootnote#1{\insert\footins\bgroup
%  \interlinepenalty\interfootnotelinepenalty
%  \splittopskip\ht\strutbox % top baseline for broken footnotes
%  \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
%  \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip
%  \xspaceskip\z@skip
%  \textindent{#1}\footstrut\futurelet\next\fo@t}
%\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
%  \else\let\next\f@t\fi \next}
%\def\f@@t{\bgroup\aftergroup\@foot\let\next}
%\def\f@t#1{#1\@foot}
%\def\@foot{\strut\egroup}
%\def\footstrut{\vbox to\splittopskip{}}
%
% LaTeX leaves these initializations for the \footins insert.
%
%    \begin{macrocode}
\skip\footins=\bigskipamount % space added when footnote is present
\count\footins=1000 % footnote magnification factor (1 to 1)
\dimen\footins=8in % maximum footnotes per page
%    \end{macrocode}
%
%\newinsert\topins
%\newif\ifp@ge \newif\if@mid
%\def\topinsert{\@midfalse\p@gefalse\@ins}
%\def\midinsert{\@midtrue\@ins}
%\def\pageinsert{\@midfalse\p@getrue\@ins}
%\skip\topins=\z@skip % no space added when a topinsert is present
%\count\topins=1000 % magnification factor (1 to 1)
%\dimen\topins=\maxdimen % no limit per page
%\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
%\def\endinsert{\egroup % finish the \vbox
%  \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
%    \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
%    \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
%  \if@mid \bigskip\box\z@\bigbreak
%  \else\insert\topins{\penalty100 % floating insertion
%    \splittopskip\z@skip
%    \splitmaxdepth\maxdimen \floatingpenalty\z@
%    \ifp@ge \dimen@\dp\z@
%    \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
%    \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
%
%\output{\plainoutput}
%\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
%  \advancepageno
%  \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
%\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
%\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
%  \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
%\def\makefootline{\baselineskip24\p@\line{\the\footline}}
%\def\dosupereject{\ifnum\insertpenalties>\z@
%                 % something is being held over
%  \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
%
%\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
%  \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
%  \ifvoid\footins\else % footnote info is present
%    \vskip\skip\footins
%    \footnoterule
%    \unvbox\footins\fi
%  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
%
% LaTeX keeps PLAIN TeX's \footnoterule as the default
%
%    \begin{macrocode}
\def\footnoterule{\kern-3\p@
  \hrule \@width 2in \kern 2.6\p@} % the \hrule is .4pt high
%    \end{macrocode}
%
% \magnification doesn't work in LaTeX
%
%\def\magnification{\afterassignment\m@g\count@}
%\def\m@g{\mag\count@
%  \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
%
% FMi & RmS 91/08/26: added \errorcontextlines=\maxdimen,
%  suggested by J. Schrod
%
%    \begin{macrocode}
\def\tracingall{\tracingcommands\tw@\tracingstats\tw@
  \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
  \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
  \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode
  \errorcontextlines\maxdimen\tracingonline\@ne}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen
  \tenrm
  \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
%    \end{macrocode}
%
% \end{oldcomments}
% input LaTeX fonts and commands
%
%\begin{verbatim}
%\input lfonts                  %% moved to latex.dtx
%\input latex
%\end{verbatim}
%
% LaTeX change: moved from above.
%\begin{verbatim}
% \setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
%\end{verbatim}
%
% LaTeX: default values
%\begin{verbatim}
% \normalbaselines
%\end{verbatim}
% LaTeX: select 10pt font size and \rm style
%\begin{verbatim}
%\xpt
%\end{verbatim}
%
%    \begin{macrocode}
\nonfrenchspacing % punctuation affects the spacing
%</2ekernel>
%    \end{macrocode}
%
%\begin{verbatim}
%\catcode`@=12 % at signs are no longer letters
%\end{verbatim}
%
% LaTeX: File called LPLAIN
% Identify the current format
%\begin{verbatim}
% \def\fmtname{lplain}\def\fmtversion{2.09-September 19, 1993}
%\end{verbatim}
%
% \Finale
%
