% \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} % % \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 \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 = control \def\^^I{\ } % same for % \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 % % \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 %