beta-0.89.2
[luatex.git] / source / texk / web2c / tests / basic.tex
blobf38b59a622ec5935333cbed5d23f4f6792b346f5
1 % This is similar to the plain TeX format, with neither fonts nor hyphens.
3 % This is the plain TeX format that's described in The TeXbook.
4 % N.B.: A version number is defined at the very end of this file;
5 % please change that number whenever the file is modified!
6 % And don't modify the file unless you change its name:
7 % Everybody's "plain.tex" file should be the same, worldwide.
9 % Unlimited copying and redistribution of this file are permitted as long
10 % as this file is not modified. Modifications are permitted, but only if
11 % the resulting file is not named plain.tex.
13 \catcode`\{=1 % left brace is begin-group character
14 \catcode`\}=2 % right brace is end-group character
15 \catcode`\$=3 % dollar sign is math shift
16 \catcode`\&=4 % ampersand is alignment tab
17 \catcode`\#=6 % hash mark is macro parameter character
18 \catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
19 \catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
20 \catcode`\^^I=10 % ascii tab is a blank space
21 \chardef\active=13 \catcode`\~=\active % tilde is active
22 \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"
24 \message{Preloading the plain format: codes,}
26 % We had to define the \catcodes right away, before the message line,
27 % since \message uses the { and } characters.
28 % When INITEX (the TeX initializer) starts up,
29 % it has defined the following \catcode values:
30 % \catcode`\^^@=9 % ascii null is ignored
31 % \catcode`\^^M=5 % ascii return is end-line
32 % \catcode`\\=0 % backslash is TeX escape character
33 % \catcode`\%=14 % percent sign is comment character
34 % \catcode`\ =10 % ascii space is blank space
35 % \catcode`\^^?=15 % ascii delete is invalid
36 % \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
37 % \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
38 % all others are type 12 (other)
40 % Here is a list of the characters that have been specially catcoded:
41 \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
42 \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
43 % (not counting ascii null, tab, linefeed, formfeed, return, delete)
44 % Each symbol in the list is preceded by \do, which can be defined
45 % if you want to do something to every item in the list.
47 % We make @ signs act like letters, temporarily, to avoid conflict
48 % between user names and internal control sequences of plain format.
49 \catcode`@=11
51 % INITEX sets up \mathcode x=x, for x=0..255, except that
52 % \mathcode x=x+"7100, for x = `A to `Z and `a to `z;
53 % \mathcode x=x+"7000, for x = `0 to `9.
54 % The following changes define internal codes as recommended
55 % in Appendix C of The TeXbook:
56 \mathcode`\^^@="2201 % \cdot
57 \mathcode`\^^A="3223 % \downarrow
58 \mathcode`\^^B="010B % \alpha
59 \mathcode`\^^C="010C % \beta
60 \mathcode`\^^D="225E % \land
61 \mathcode`\^^E="023A % \lnot
62 \mathcode`\^^F="3232 % \in
63 \mathcode`\^^G="0119 % \pi
64 \mathcode`\^^H="0115 % \lambda
65 \mathcode`\^^I="010D % \gamma
66 \mathcode`\^^J="010E % \delta
67 \mathcode`\^^K="3222 % \uparrow
68 \mathcode`\^^L="2206 % \pm
69 \mathcode`\^^M="2208 % \oplus
70 \mathcode`\^^N="0231 % \infty
71 \mathcode`\^^O="0140 % \partial
72 \mathcode`\^^P="321A % \subset
73 \mathcode`\^^Q="321B % \supset
74 \mathcode`\^^R="225C % \cap
75 \mathcode`\^^S="225B % \cup
76 \mathcode`\^^T="0238 % \forall
77 \mathcode`\^^U="0239 % \exists
78 \mathcode`\^^V="220A % \otimes
79 \mathcode`\^^W="3224 % \leftrightarrow
80 \mathcode`\^^X="3220 % \leftarrow
81 \mathcode`\^^Y="3221 % \rightarrow
82 \mathcode`\^^Z="8000 % \ne
83 \mathcode`\^^[="2205 % \diamond
84 \mathcode`\^^\="3214 % \le
85 \mathcode`\^^]="3215 % \ge
86 \mathcode`\^^^="3211 % \equiv
87 \mathcode`\^^_="225F % \lor
88 \mathcode`\ ="8000 % \space
89 \mathcode`\!="5021
90 \mathcode`\'="8000 % ^\prime
91 \mathcode`\(="4028
92 \mathcode`\)="5029
93 \mathcode`\*="2203 % \ast
94 \mathcode`\+="202B
95 \mathcode`\,="613B
96 \mathcode`\-="2200
97 \mathcode`\.="013A
98 \mathcode`\/="013D
99 \mathcode`\:="303A
100 \mathcode`\;="603B
101 \mathcode`\<="313C
102 \mathcode`\=="303D
103 \mathcode`\>="313E
104 \mathcode`\?="503F
105 \mathcode`\[="405B
106 \mathcode`\\="026E % \backslash
107 \mathcode`\]="505D
108 \mathcode`\_="8000 % \_
109 \mathcode`\{="4266
110 \mathcode`\|="026A
111 \mathcode`\}="5267
112 \mathcode`\^^?="1273 % \smallint
114 % INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
115 % and \lccode`x=`x, \lccode`X=`x; all other values are zero.
116 % No changes to those tables are needed in plain TeX format.
118 % INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
119 % for uppercase letters. The following changes are needed:
120 \sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
121 % The \nonfrenchspacing macro will make further changes to \sfcode values.
123 % Finally, INITEX sets all \delcode values to -1, except \delcode`.=0
124 \delcode`\(="028300
125 \delcode`\)="029301
126 \delcode`\[="05B302
127 \delcode`\]="05D303
128 \delcode`\<="26830A
129 \delcode`\>="26930B
130 \delcode`\/="02F30E
131 \delcode`\|="26A30C
132 \delcode`\\="26E30F
133 % N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!
135 % To make the plain macros more efficient in time and space,
136 % several constant values are declared here as control sequences.
137 % If they were changed, anything could happen; so they are private symbols.
138 \chardef\@ne=1
139 \chardef\tw@=2
140 \chardef\thr@@=3
141 \chardef\sixt@@n=16
142 \chardef\@cclv=255
143 \mathchardef\@cclvi=256
144 \mathchardef\@m=1000
145 \mathchardef\@M=10000
146 \mathchardef\@MM=20000
148 % Allocation of registers
150 % Here are macros for the automatic allocation of \count, \box, \dimen,
151 % \skip, \muskip, and \toks registers, as well as \read and \write
152 % stream numbers, \fam codes, \language codes, and \insert numbers.
154 \message{registers,}
156 % When a register is used only temporarily, it need not be allocated;
157 % grouping can be used, making the value previously in the register return
158 % after the close of the group. The main use of these macros is for
159 % registers that are defined by one macro and used by others, possibly at
160 % different nesting levels. All such registers should be defined through
161 % these macros; otherwise conflicts may occur, especially when two or more
162 % macro packages are being used at once.
164 % The following counters are reserved:
165 % 0 to 9 page numbering
166 % 10 count allocation
167 % 11 dimen allocation
168 % 12 skip allocation
169 % 13 muskip allocation
170 % 14 box allocation
171 % 15 toks allocation
172 % 16 read file allocation
173 % 17 write file allocation
174 % 18 math family allocation
175 % 19 language allocation
176 % 20 insert allocation
177 % 21 the most recently allocated number
178 % 22 constant -1
179 % New counters are allocated starting with 23, 24, etc. Other registers are
180 % allocated starting with 10. This leaves 0 through 9 for the user to play
181 % with safely, except that counts 0 to 9 are considered to be the page and
182 % subpage numbers (since they are displayed during output). In this scheme,
183 % \count 10 always contains the number of the highest-numbered counter that
184 % has been allocated, \count 14 the highest-numbered box, etc.
185 % Inserts are given numbers 254, 253, etc., since they require a \count,
186 % \dimen, \skip, and \box all with the same number; \count 20 contains the
187 % lowest-numbered insert that has been allocated. Of course, \box255 is
188 % reserved for \output; \count255, \dimen255, and \skip255 can be used freely.
190 % It is recommended that macro designers always use
191 % \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and
192 % always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.
193 % This will prevent ``save stack buildup'' that might otherwise occur.
195 \count10=22 % allocates \count registers 23, 24, ...
196 \count11=9 % allocates \dimen registers 10, 11, ...
197 \count12=9 % allocates \skip registers 10, 11, ...
198 \count13=9 % allocates \muskip registers 10, 11, ...
199 \count14=9 % allocates \box registers 10, 11, ...
200 \count15=9 % allocates \toks registers 10, 11, ...
201 \count16=-1 % allocates input streams 0, 1, ...
202 \count17=-1 % allocates output streams 0, 1, ...
203 \count18=3 % allocates math families 4, 5, ...
204 \count19=0 % allocates \language codes 1, 2, ...
205 \count20=255 % allocates insertions 254, 253, ...
206 \countdef\insc@unt=20 % the insertion counter
207 \countdef\allocationnumber=21 % the most recent allocation
208 \countdef\m@ne=22 \m@ne=-1 % a handy constant
209 \def\wlog{\immediate\write\m@ne} % write on log file (only)
211 % Here are abbreviations for the names of scratch registers
212 % that don't need to be allocated.
214 \countdef\count@=255
215 \dimendef\dimen@=0
216 \dimendef\dimen@i=1 % global only
217 \dimendef\dimen@ii=2
218 \skipdef\skip@=0
219 \toksdef\toks@=0
221 % Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
222 % and \foo will be defined (with \countdef) to be the next counter.
223 % To find out which counter \foo is, you can look at \allocationnumber.
224 % Since there's no \boxdef command, \chardef is used to define a \newbox,
225 % \newinsert, \newfam, and so on.
227 \outer\def\newcount{\alloc@0\count\countdef\insc@unt}
228 \outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
229 \outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}
230 \outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
231 \outer\def\newbox{\alloc@4\box\chardef\insc@unt}
232 \let\newtoks=\relax % we do this to allow plain.tex to be read in twice
233 \outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
234 \outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
235 \outer\def\newread{\alloc@6\read\chardef\sixt@@n}
236 \outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}
237 \outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}
238 \outer\def\newlanguage{\alloc@9\language\chardef\@cclvi}
239 \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
240 \ch@ck#1#4#2% make sure there's still room
241 \allocationnumber=\count1#1%
242 \global#3#5=\allocationnumber
243 \wlog{\string#5=\string#2\the\allocationnumber}}
244 \outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
245 \ch@ck0\insc@unt\count
246 \ch@ck1\insc@unt\dimen
247 \ch@ck2\insc@unt\skip
248 \ch@ck4\insc@unt\box
249 \allocationnumber=\insc@unt
250 \global\chardef#1=\allocationnumber
251 \wlog{\string#1=\string\insert\the\allocationnumber}}
252 \def\ch@ck#1#2#3{\ifnum\count1#1<#2%
253 \else\errmessage{No room for a new #3}\fi}
255 % Here are some examples of allocation.
256 \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
257 \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
258 \newskip\centering \centering=0pt plus 1000pt minus 1000pt
259 \newdimen\p@ \p@=1pt % this saves macro space and time
260 \newdimen\z@ \z@=0pt % can be used both for 0pt and 0
261 \newskip\z@skip \z@skip=0pt plus0pt minus0pt
262 \newbox\voidb@x % permanently void box register
264 % And here's a different sort of allocation:
265 % For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
266 \outer\def\newif#1{\count@\escapechar \escapechar\m@ne
267 \expandafter\expandafter\expandafter
268 \def\@if#1{true}{\let#1=\iftrue}%
269 \expandafter\expandafter\expandafter
270 \def\@if#1{false}{\let#1=\iffalse}%
271 \@if#1{false}\escapechar\count@} % the condition starts out false
272 \def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
273 {\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
275 % Assign initial values to TeX's parameters
277 \message{parameters,}
279 % All of TeX's numeric parameters are listed here,
280 % but the code is commented out if no special value needs to be set.
281 % INITEX makes all parameters zero except where noted.
283 \pretolerance=100
284 \tolerance=200 % INITEX sets this to 10000
285 \hbadness=1000
286 \vbadness=1000
287 \linepenalty=10
288 \hyphenpenalty=50
289 \exhyphenpenalty=50
290 \binoppenalty=700
291 \relpenalty=500
292 \clubpenalty=150
293 \widowpenalty=150
294 \displaywidowpenalty=50
295 \brokenpenalty=100
296 \predisplaypenalty=10000
297 % \postdisplaypenalty=0
298 % \interlinepenalty=0
299 % \floatingpenalty=0, set during \insert
300 % \outputpenalty=0, set before TeX enters \output
301 \doublehyphendemerits=10000
302 \finalhyphendemerits=5000
303 \adjdemerits=10000
304 % \looseness=0, cleared by TeX after each paragraph
305 % \pausing=0
306 % \holdinginserts=0
307 % \tracingonline=0
308 % \tracingmacros=0
309 % \tracingstats=0
310 % \tracingparagraphs=0
311 % \tracingpages=0
312 % \tracingoutput=0
313 \tracinglostchars=1
314 % \tracingcommands=0
315 % \tracingrestores=0
316 % \language=0
317 \uchyph=1
318 % \lefthyphenmin=2 \righthyphenmin=3 set below
319 % \globaldefs=0
320 % \maxdeadcycles=25 % INITEX does this
321 % \hangafter=1 % INITEX does this, also TeX after each paragraph
322 % \fam=0
323 % \mag=1000 % INITEX does this
324 % \escapechar=`\\ % INITEX does this
325 \defaulthyphenchar=`\-
326 \defaultskewchar=-1
327 % \endlinechar=`\^^M % INITEX does this
328 \newlinechar=-1
329 \delimiterfactor=901
330 % \time=now % TeX does this at beginning of job
331 % \day=now % TeX does this at beginning of job
332 % \month=now % TeX does this at beginning of job
333 % \year=now % TeX does this at beginning of job
334 \showboxbreadth=5
335 \showboxdepth=3
336 \errorcontextlines=5
338 \hfuzz=0.1pt
339 \vfuzz=0.1pt
340 \overfullrule=5pt
341 \hsize=6.5in
342 \vsize=8.9in
343 \maxdepth=4pt
344 \splitmaxdepth=\maxdimen
345 \boxmaxdepth=\maxdimen
346 % \lineskiplimit=0pt, changed by \normalbaselines
347 \delimitershortfall=5pt
348 \nulldelimiterspace=1.2pt
349 \scriptspace=0.5pt
350 % \mathsurround=0pt
351 % \predisplaysize=0pt, set before TeX enters $$
352 % \displaywidth=0pt, set before TeX enters $$
353 % \displayindent=0pt, set before TeX enters $$
354 \parindent=20pt
355 % \hangindent=0pt, zeroed by TeX after each paragraph
356 % \hoffset=0pt
357 % \voffset=0pt
359 % \baselineskip=0pt, changed by \normalbaselines
360 % \lineskip=0pt, changed by \normalbaselines
361 \parskip=0pt plus 1pt
362 \abovedisplayskip=12pt plus 3pt minus 9pt
363 \abovedisplayshortskip=0pt plus 3pt
364 \belowdisplayskip=12pt plus 3pt minus 9pt
365 \belowdisplayshortskip=7pt plus 3pt minus 4pt
366 % \leftskip=0pt
367 % \rightskip=0pt
368 \topskip=10pt
369 \splittopskip=10pt
370 % \tabskip=0pt
371 % \spaceskip=0pt
372 % \xspaceskip=0pt
373 \parfillskip=0pt plus 1fil
375 \thinmuskip=3mu
376 \medmuskip=4mu plus 2mu minus 4mu
377 \thickmuskip=5mu plus 5mu
379 % We also define special registers that function like parameters:
380 \newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
381 \newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
382 \newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
383 \newskip\normalbaselineskip \normalbaselineskip=12pt
384 \newskip\normallineskip \normallineskip=1pt
385 \newdimen\normallineskiplimit \normallineskiplimit=0pt
386 \newdimen\jot \jot=3pt
387 \newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
388 \newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
390 % Definitions for preloaded fonts
392 \def\magstephalf{1095 }
393 \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
395 % Fonts assigned to \preloaded are not part of "plain TeX",
396 % but they are preloaded so that other format packages can use them.
397 % For example, if another set of macros says "\font\ninerm=cmr9",
398 % TeX will not have to reload the font metric information for cmr9.
400 % Macros for setting ordinary text
401 \message{macros,}
403 \def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
404 \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
405 \def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
406 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
408 \def\normalbaselines{\lineskip\normallineskip
409 \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
411 \def\^^M{\ } % control <return> = control <space>
412 \def\^^I{\ } % same for <tab>
414 \def\lq{`} \def\rq{'}
415 \def\lbrack{[} \def\rbrack{]}
417 \let\endgraf=\par \let\endline=\cr
419 \def\space{ }
420 \def\empty{}
421 \def\null{\hbox{}}
423 \let\bgroup={ \let\egroup=}
425 % In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
426 % since this allows, for example, `\let\par=\cr \obeylines \halign{...'
427 {\catcode`\^^M=\active % these lines must end with %
428 \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
429 \global\let^^M\par} % this is in case ^^M appears in a \write
430 \def\obeyspaces{\catcode`\ \active}
431 {\obeyspaces\global\let =\space}
433 \def\loop#1\repeat{\def\body{#1}\iterate}
434 \def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
435 \let\repeat=\fi % this makes \loop...\if...\repeat skippable
437 \def\thinspace{\kern .16667em }
438 \def\negthinspace{\kern-.16667em }
439 \def\enspace{\kern.5em }
441 \def\enskip{\hskip.5em\relax}
442 \def\quad{\hskip1em\relax}
443 \def\qquad{\hskip2em\relax}
445 \def\smallskip{\vskip\smallskipamount}
446 \def\medskip{\vskip\medskipamount}
447 \def\bigskip{\vskip\bigskipamount}
449 \def\nointerlineskip{\prevdepth-1000\p@}
450 \def\offinterlineskip{\baselineskip-1000\p@
451 \lineskip\z@ \lineskiplimit\maxdimen}
453 \def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page
454 \def\vglue{\afterassignment\vgl@\skip@=}
455 \def\vgl@{\par \dimen@\prevdepth \hrule height\z@
456 \nobreak\vskip\skip@ \prevdepth\dimen@}
457 \def\hglue{\afterassignment\hgl@\skip@=}
458 \def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
459 \nobreak\hskip\skip@ \spacefactor\count@}
461 \def~{\penalty\@M \ } % tie
462 \def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
464 \def\break{\penalty-\@M}
465 \def\nobreak{\penalty \@M}
466 \def\allowbreak{\penalty \z@}
468 \def\filbreak{\par\vfil\penalty-200\vfilneg}
469 \def\goodbreak{\par\penalty-500 }
470 \def\eject{\par\break}
471 \def\supereject{\par\penalty-\@MM}
473 \def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
474 \def\smallbreak{\par\ifdim\lastskip<\smallskipamount
475 \removelastskip\penalty-50\smallskip\fi}
476 \def\medbreak{\par\ifdim\lastskip<\medskipamount
477 \removelastskip\penalty-100\medskip\fi}
478 \def\bigbreak{\par\ifdim\lastskip<\bigskipamount
479 \removelastskip\penalty-200\bigskip\fi}
481 \def\line{\hbox to\hsize}
482 \def\leftline#1{\line{#1\hss}}
483 \def\rightline#1{\line{\hss#1}}
484 \def\centerline#1{\line{\hss#1\hss}}
486 \def\rlap#1{\hbox to\z@{#1\hss}}
487 \def\llap#1{\hbox to\z@{\hss#1}}
489 \def\m@th{\mathsurround\z@}
490 \def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
491 \m@th \underline{\box\z@}$}
493 \newbox\strutbox
494 \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
495 \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
497 \def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
498 \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
499 \newcount\mscount
500 \def\multispan#1{\omit \mscount#1\relax
501 \loop\ifnum\mscount>\@ne \sp@n\repeat}
502 \def\sp@n{\span\omit\advance\mscount\m@ne}
504 \newif\ifus@ \newif\if@cr
505 \newbox\tabs \newbox\tabsyet \newbox\tabsdone
507 \def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
508 \def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
509 \let\+=\relax % in case this file is being read in twice
510 \def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}%
511 \else\let\nxt\s@tcols\fi \let\next\relax \nxt}
512 \def\s@tt@b{\let\nxt\relax \us@false\m@ketabbox}
513 \def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
514 \outer\def\+{\tabalign}
515 \def\s@tcols#1\columns{\count@#1\dimen@\hsize
516 \loop\ifnum\count@>\z@ \@nother \repeat}
517 \def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
518 \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
519 \advance\dimen@-\dimen@ii \advance\count@\m@ne}
521 \def\m@ketabbox{\begingroup
522 \global\setbox\tabsyet\copy\tabs
523 \global\setbox\tabsdone\null
524 \def\cr{\@crtrue\crcr\egroup\egroup
525 \ifus@\unvbox\z@\lastbox\fi\endgroup
526 \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
527 \setbox\z@\vbox\bgroup\@crfalse
528 \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
530 \def\t@bbox{\setbox\z@\hbox\bgroup}
531 \def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
532 \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
533 \global\setbox\@ne\lastbox}% now \box\@ne holds its size
534 \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
535 \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
536 \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
537 \box\z@}
539 \def\hang{\hangindent\parindent}
540 \def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
541 \def\item{\par\hang\textindent}
542 \def\itemitem{\par\indent \hangindent2\parindent \textindent}
543 \def\narrower{\advance\leftskip\parindent
544 \advance\rightskip\parindent}
546 \outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250
547 \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip
548 \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}
549 \outer\def\proclaim #1. #2\par{\medbreak
550 \noindent{\bf#1.\enspace}{\sl#2\par}%
551 \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
553 \def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
554 \def\ttraggedright{\tt\rightskip\z@ plus2em\relax} % for use with \tt only
556 \chardef\%=`\%
557 \chardef\&=`\&
558 \chardef\#=`\#
559 \chardef\$=`\$
560 \chardef\ss="19
561 \chardef\ae="1A
562 \chardef\oe="1B
563 \chardef\o="1C
564 \chardef\AE="1D
565 \chardef\OE="1E
566 \chardef\O="1F
567 \chardef\i="10 \chardef\j="11 % dotless letters
568 \def\aa{\accent23a}
569 \def\l{\char32l}
570 \def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}
572 \def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
573 \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
574 \def\AA{\leavevmode\setbox0\hbox{!}\dimen@\ht0\advance\dimen@-1ex%
575 \rlap{\raise.67\dimen@\hbox{\char'27}}A}
577 \def\mathhexbox#1#2#3{\leavevmode
578 \hbox{$\m@th \mathchar"#1#2#3$}}
579 \def\dag{\mathhexbox279}
580 \def\ddag{\mathhexbox27A}
581 \def\S{\mathhexbox278}
582 \def\P{\mathhexbox27B}
583 \def\Orb{\mathhexbox20D}
585 \def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
586 \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit\z@ \oalign}
587 \def\ooalign{\lineskiplimit-\maxdimen \oalign} % chars over each other
588 {\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\
589 \def\sh@ft#1{\dimen@#1\kern\expandafter\getf@ctor\the\fontdimen1\font
590 \dimen@} % kern by #1 times the current slant
591 \def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}}
592 \def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%
593 \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
594 \def\c#1{{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
595 \else\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}\fi}}
596 \def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}}
598 \def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi}
599 \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
601 \def\`#1{{\accent18 #1}}
602 \def\'#1{{\accent19 #1}}
603 \def\v#1{{\accent20 #1}} \let\^^_=\v
604 \def\u#1{{\accent21 #1}} \let\^^S=\u
605 \def\=#1{{\accent22 #1}}
606 \def\^#1{{\accent94 #1}} \let\^^D=\^
607 \def\.#1{{\accent95 #1}}
608 \def\H#1{{\accent"7D #1}}
609 \def\~#1{{\accent"7E #1}}
610 \def\"#1{{\accent"7F #1}}
611 \def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}
613 \def\hrulefill{\leaders\hrule\hfill}
614 \def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
615 \def\rightarrowfill{$\m@th\smash-\mkern-7mu%
616 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
617 \mkern-7mu\mathord\rightarrow$}
618 \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu%
619 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
620 \mkern-7mu\smash-$}
621 \mathchardef\braceld="37A \mathchardef\bracerd="37B
622 \mathchardef\bracelu="37C \mathchardef\braceru="37D
623 \def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
624 \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru
625 \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$}
626 \def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
627 \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd
628 \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$}
630 \outer\def\bye{\par\vfill\supereject\end}
632 % Macros for math setting
633 \message{math definitions,}
635 \let\sp=^ \let\sb=_
636 \def\,{\mskip\thinmuskip}
637 \def\>{\mskip\medmuskip}
638 \def\;{\mskip\thickmuskip}
639 \def\!{\mskip-\thinmuskip}
640 \def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
641 {\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
642 \def\prim@s{\prime\futurelet\next\pr@m@s}
643 \def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
644 \else\let\nxt\egroup\fi\fi \nxt}
645 \def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
646 {\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
648 {\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_
650 \mathchardef\alpha="010B
651 \mathchardef\beta="010C
652 \mathchardef\gamma="010D
653 \mathchardef\delta="010E
654 \mathchardef\epsilon="010F
655 \mathchardef\zeta="0110
656 \mathchardef\eta="0111
657 \mathchardef\theta="0112
658 \mathchardef\iota="0113
659 \mathchardef\kappa="0114
660 \mathchardef\lambda="0115
661 \mathchardef\mu="0116
662 \mathchardef\nu="0117
663 \mathchardef\xi="0118
664 \mathchardef\pi="0119
665 \mathchardef\rho="011A
666 \mathchardef\sigma="011B
667 \mathchardef\tau="011C
668 \mathchardef\upsilon="011D
669 \mathchardef\phi="011E
670 \mathchardef\chi="011F
671 \mathchardef\psi="0120
672 \mathchardef\omega="0121
673 \mathchardef\varepsilon="0122
674 \mathchardef\vartheta="0123
675 \mathchardef\varpi="0124
676 \mathchardef\varrho="0125
677 \mathchardef\varsigma="0126
678 \mathchardef\varphi="0127
679 \mathchardef\Gamma="7000
680 \mathchardef\Delta="7001
681 \mathchardef\Theta="7002
682 \mathchardef\Lambda="7003
683 \mathchardef\Xi="7004
684 \mathchardef\Pi="7005
685 \mathchardef\Sigma="7006
686 \mathchardef\Upsilon="7007
687 \mathchardef\Phi="7008
688 \mathchardef\Psi="7009
689 \mathchardef\Omega="700A
691 \mathchardef\aleph="0240
692 \def\hbar{{\mathchar'26\mkern-9muh}}
693 \mathchardef\imath="017B
694 \mathchardef\jmath="017C
695 \mathchardef\ell="0160
696 \mathchardef\wp="017D
697 \mathchardef\Re="023C
698 \mathchardef\Im="023D
699 \mathchardef\partial="0140
700 \mathchardef\infty="0231
701 \mathchardef\prime="0230
702 \mathchardef\emptyset="023B
703 \mathchardef\nabla="0272
704 \def\surd{{\mathchar"1270}}
705 \mathchardef\top="023E
706 \mathchardef\bot="023F
707 \def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
708 \not\mathrel{\mkern14mu}\crcr
709 \noalign{\nointerlineskip}
710 \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
711 \mathchardef\triangle="0234
712 \mathchardef\forall="0238
713 \mathchardef\exists="0239
714 \mathchardef\neg="023A \let\lnot=\neg
715 \mathchardef\flat="015B
716 \mathchardef\natural="015C
717 \mathchardef\sharp="015D
718 \mathchardef\clubsuit="027C
719 \mathchardef\diamondsuit="027D
720 \mathchardef\heartsuit="027E
721 \mathchardef\spadesuit="027F
723 \mathchardef\coprod="1360
724 \mathchardef\bigvee="1357
725 \mathchardef\bigwedge="1356
726 \mathchardef\biguplus="1355
727 \mathchardef\bigcap="1354
728 \mathchardef\bigcup="1353
729 \mathchardef\intop="1352 \def\int{\intop\nolimits}
730 \mathchardef\prod="1351
731 \mathchardef\sum="1350
732 \mathchardef\bigotimes="134E
733 \mathchardef\bigoplus="134C
734 \mathchardef\bigodot="134A
735 \mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
736 \mathchardef\bigsqcup="1346
737 \mathchardef\smallint="1273
739 \mathchardef\triangleleft="212F
740 \mathchardef\triangleright="212E
741 \mathchardef\bigtriangleup="2234
742 \mathchardef\bigtriangledown="2235
743 \mathchardef\wedge="225E \let\land=\wedge
744 \mathchardef\vee="225F \let\lor=\vee
745 \mathchardef\cap="225C
746 \mathchardef\cup="225B
747 \mathchardef\ddagger="227A
748 \mathchardef\dagger="2279
749 \mathchardef\sqcap="2275
750 \mathchardef\sqcup="2274
751 \mathchardef\uplus="225D
752 \mathchardef\amalg="2271
753 \mathchardef\diamond="2205
754 \mathchardef\bullet="220F
755 \mathchardef\wr="226F
756 \mathchardef\div="2204
757 \mathchardef\odot="220C
758 \mathchardef\oslash="220B
759 \mathchardef\otimes="220A
760 \mathchardef\ominus="2209
761 \mathchardef\oplus="2208
762 \mathchardef\mp="2207
763 \mathchardef\pm="2206
764 \mathchardef\circ="220E
765 \mathchardef\bigcirc="220D
766 \mathchardef\setminus="226E % for set difference A\setminus B
767 \mathchardef\cdot="2201
768 \mathchardef\ast="2203
769 \mathchardef\times="2202
770 \mathchardef\star="213F
772 \mathchardef\propto="322F
773 \mathchardef\sqsubseteq="3276
774 \mathchardef\sqsupseteq="3277
775 \mathchardef\parallel="326B
776 \mathchardef\mid="326A
777 \mathchardef\dashv="3261
778 \mathchardef\vdash="3260
779 \mathchardef\nearrow="3225
780 \mathchardef\searrow="3226
781 \mathchardef\nwarrow="322D
782 \mathchardef\swarrow="322E
783 \mathchardef\Leftrightarrow="322C
784 \mathchardef\Leftarrow="3228
785 \mathchardef\Rightarrow="3229
786 \def\neq{\not=} \let\ne=\neq
787 \mathchardef\leq="3214 \let\le=\leq
788 \mathchardef\geq="3215 \let\ge=\geq
789 \mathchardef\succ="321F
790 \mathchardef\prec="321E
791 \mathchardef\approx="3219
792 \mathchardef\succeq="3217
793 \mathchardef\preceq="3216
794 \mathchardef\supset="321B
795 \mathchardef\subset="321A
796 \mathchardef\supseteq="3213
797 \mathchardef\subseteq="3212
798 \mathchardef\in="3232
799 \mathchardef\ni="3233 \let\owns=\ni
800 \mathchardef\gg="321D
801 \mathchardef\ll="321C
802 \mathchardef\not="3236
803 \mathchardef\leftrightarrow="3224
804 \mathchardef\leftarrow="3220 \let\gets=\leftarrow
805 \mathchardef\rightarrow="3221 \let\to=\rightarrow
806 \mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
807 \mathchardef\sim="3218
808 \mathchardef\simeq="3227
809 \mathchardef\perp="323F
810 \mathchardef\equiv="3211
811 \mathchardef\asymp="3210
812 \mathchardef\smile="315E
813 \mathchardef\frown="315F
814 \mathchardef\leftharpoonup="3128
815 \mathchardef\leftharpoondown="3129
816 \mathchardef\rightharpoonup="312A
817 \mathchardef\rightharpoondown="312B
819 \def\joinrel{\mathrel{\mkern-3mu}}
820 \def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
821 \def\Relbar{\mathrel=}
822 \mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
823 \mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
824 \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
825 \def\models{\mathrel|\joinrel=}
826 \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
827 \def\longrightarrow{\relbar\joinrel\rightarrow}
828 \def\longleftarrow{\leftarrow\joinrel\relbar}
829 \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
830 \def\longmapsto{\mapstochar\longrightarrow}
831 \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
832 \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
833 \def\iff{\;\Longleftrightarrow\;}
835 \mathchardef\ldotp="613A % ldot as a punctuation mark
836 \mathchardef\cdotp="6201 % cdot as a punctuation mark
837 \mathchardef\colon="603A % colon as a punctuation mark
838 \def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
839 \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
840 \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
841 \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
842 \def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
843 \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
845 \def\acute{\mathaccent"7013 }
846 \def\grave{\mathaccent"7012 }
847 \def\ddot{\mathaccent"707F }
848 \def\tilde{\mathaccent"707E }
849 \def\bar{\mathaccent"7016 }
850 \def\breve{\mathaccent"7015 }
851 \def\check{\mathaccent"7014 }
852 \def\hat{\mathaccent"705E }
853 \def\vec{\mathaccent"017E }
854 \def\dot{\mathaccent"705F }
855 \def\widetilde{\mathaccent"0365 }
856 \def\widehat{\mathaccent"0362 }
857 \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
858 \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
859 $\hfil\displaystyle{#1}\hfil$\crcr}}}
860 \def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
861 \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
862 $\hfil\displaystyle{#1}\hfil$\crcr}}}
863 \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}
864 \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
865 $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
866 \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
867 $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
868 \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
869 \def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@
870 #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}}
872 \def\lmoustache{\delimiter"437A340 } % top from (, bottom from )
873 \def\rmoustache{\delimiter"537B341 } % top from ), bottom from (
874 \def\lgroup{\delimiter"462833A } % extensible ( with sharper tips
875 \def\rgroup{\delimiter"562933B } % extensible ) with sharper tips
876 \def\arrowvert{\delimiter"26A33C } % arrow without arrowheads
877 \def\Arrowvert{\delimiter"26B33D } % double arrow without arrowheads
878 \def\bracevert{\delimiter"77C33E } % the vertical bar that extends braces
879 \def\Vert{\delimiter"26B30D } \let\|=\Vert
880 \def\vert{\delimiter"26A30C }
881 \def\uparrow{\delimiter"3222378 }
882 \def\downarrow{\delimiter"3223379 }
883 \def\updownarrow{\delimiter"326C33F }
884 \def\Uparrow{\delimiter"322A37E }
885 \def\Downarrow{\delimiter"322B37F }
886 \def\Updownarrow{\delimiter"326D377 }
887 \def\backslash{\delimiter"26E30F } % for double coset G\backslash H
888 \def\rangle{\delimiter"526930B }
889 \def\langle{\delimiter"426830A }
890 \def\rbrace{\delimiter"5267309 } \let\}=\rbrace
891 \def\lbrace{\delimiter"4266308 } \let\{=\lbrace
892 \def\rceil{\delimiter"5265307 }
893 \def\lceil{\delimiter"4264306 }
894 \def\rfloor{\delimiter"5263305 }
895 \def\lfloor{\delimiter"4262304 }
897 \def\bigl{\mathopen\big}
898 \def\bigm{\mathrel\big}
899 \def\bigr{\mathclose\big}
900 \def\Bigl{\mathopen\Big}
901 \def\Bigm{\mathrel\Big}
902 \def\Bigr{\mathclose\Big}
903 \def\biggl{\mathopen\bigg}
904 \def\biggm{\mathrel\bigg}
905 \def\biggr{\mathclose\bigg}
906 \def\Biggl{\mathopen\Bigg}
907 \def\Biggm{\mathrel\Bigg}
908 \def\Biggr{\mathclose\Bigg}
909 \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
910 \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
911 \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
912 \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
913 \def\n@space{\nulldelimiterspace\z@ \m@th}
915 \def\choose{\atopwithdelims()}
916 \def\brack{\atopwithdelims[]}
917 \def\brace{\atopwithdelims\{\}}
919 \def\sqrt{\radical"270370 }
921 \def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
922 {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
923 \newbox\rootbox
924 \def\root#1\of{\setbox\rootbox
925 \hbox{$\m@th\scriptscriptstyle{#1}$}\mathpalette\r@@t}
926 \def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}\dimen@\ht\z@
927 \advance\dimen@-\dp\z@
928 \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu\box\z@}
929 \newif\ifv@ \newif\ifh@
930 \def\vphantom{\v@true\h@false\ph@nt}
931 \def\hphantom{\v@false\h@true\ph@nt}
932 \def\phantom{\v@true\h@true\ph@nt}
933 \def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
934 \else\let\next\makeph@nt\fi\next}
935 \def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
936 \def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
937 \def\finph@nt{\setbox\tw@\null
938 \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
939 \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
940 \def\mathstrut{\vphantom(}
941 \def\smash{\relax % \relax, in case this comes first in \halign
942 \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
943 \fi\next}
944 \def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
945 \def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
946 \def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
948 \def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
949 \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@
950 \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
951 \def\notin{\mathrel{\mathpalette\c@ncel\in}}
952 \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
953 \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
954 \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
955 \hbox{$#1\rightharpoonup$}\crcr
956 $#1\leftharpoondown$}}}}
957 \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
958 \def\doteq{\buildrel\textstyle.\over=}
960 \def\log{\mathop{\rm log}\nolimits}
961 \def\lg{\mathop{\rm lg}\nolimits}
962 \def\ln{\mathop{\rm ln}\nolimits}
963 \def\lim{\mathop{\rm lim}}
964 \def\limsup{\mathop{\rm lim\,sup}}
965 \def\liminf{\mathop{\rm lim\,inf}}
966 \def\sin{\mathop{\rm sin}\nolimits}
967 \def\arcsin{\mathop{\rm arcsin}\nolimits}
968 \def\sinh{\mathop{\rm sinh}\nolimits}
969 \def\cos{\mathop{\rm cos}\nolimits}
970 \def\arccos{\mathop{\rm arccos}\nolimits}
971 \def\cosh{\mathop{\rm cosh}\nolimits}
972 \def\tan{\mathop{\rm tan}\nolimits}
973 \def\arctan{\mathop{\rm arctan}\nolimits}
974 \def\tanh{\mathop{\rm tanh}\nolimits}
975 \def\cot{\mathop{\rm cot}\nolimits}
976 \def\coth{\mathop{\rm coth}\nolimits}
977 \def\sec{\mathop{\rm sec}\nolimits}
978 \def\csc{\mathop{\rm csc}\nolimits}
979 \def\max{\mathop{\rm max}}
980 \def\min{\mathop{\rm min}}
981 \def\sup{\mathop{\rm sup}}
982 \def\inf{\mathop{\rm inf}}
983 \def\arg{\mathop{\rm arg}\nolimits}
984 \def\ker{\mathop{\rm ker}\nolimits}
985 \def\dim{\mathop{\rm dim}\nolimits}
986 \def\hom{\mathop{\rm hom}\nolimits}
987 \def\det{\mathop{\rm det}}
988 \def\exp{\mathop{\rm exp}\nolimits}
989 \def\Pr{\mathop{\rm Pr}}
990 \def\gcd{\mathop{\rm gcd}}
991 \def\deg{\mathop{\rm deg}\nolimits}
993 \def\bmod{\nonscript\mskip-\medmuskip\mkern5mu
994 \mathbin{\rm mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip}
995 \def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)}
997 \def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
998 \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
999 \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
1000 \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
1001 \mathstrut\crcr\noalign{\kern-\baselineskip}
1002 #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
1003 \def\pmatrix#1{\left(\matrix{#1}\right)}
1004 \newdimen\p@renwd
1005 % \setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
1006 \p@renwd=5pt % width of the big left (
1007 \def\bordermatrix#1{\begingroup \m@th
1008 \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
1009 \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
1010 &&\quad\hfil$##$\hfil\crcr
1011 \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
1012 #1\crcr\omit\strut\cr}}%
1013 \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
1014 \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
1015 \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
1016 \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
1017 \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
1018 \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
1020 \def\openup{\afterassignment\@penup\dimen@=}
1021 \def\@penup{\advance\lineskip\dimen@
1022 \advance\baselineskip\dimen@
1023 \advance\lineskiplimit\dimen@}
1024 \def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
1025 \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
1026 \crcr#1\crcr}}\,}
1027 \newif\ifdt@p
1028 \def\displ@y{\global\dt@ptrue\openup\jot\m@th
1029 \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@
1030 \vskip-\lineskiplimit \vskip\normallineskiplimit \fi
1031 \else \penalty\interdisplaylinepenalty \fi}}}
1032 \def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
1033 \def\displaylines#1{\displ@y \tabskip\z@skip
1034 \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
1035 #1\crcr}}
1036 \def\eqalignno#1{\displ@y \tabskip\centering
1037 \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
1038 &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
1039 &\llap{$\@lign##$}\tabskip\z@skip\crcr
1040 #1\crcr}}
1041 \def\leqalignno#1{\displ@y \tabskip\centering
1042 \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
1043 &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
1044 &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
1045 #1\crcr}}
1047 % Definitions related to output
1049 \message{output routines,}
1051 \countdef\pageno=0 \pageno=1 % first page is number 1
1052 \newtoks\headline \headline={\hfil} % headline is normally blank
1053 \newtoks\footline \footline={\hfil} % footline is blank
1054 \newif\ifr@ggedbottom
1055 \def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
1056 \def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom
1057 \def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
1058 \def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
1059 \else\global\advance\pageno\@ne \fi} % increase |pageno|
1061 \newinsert\footins
1062 \def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
1063 \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
1064 #1\@sf\vfootnote{#1}}
1065 \def\vfootnote#1{\insert\footins\bgroup
1066 \interlinepenalty\interfootnotelinepenalty
1067 \splittopskip\ht\strutbox % top baseline for broken footnotes
1068 \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
1069 \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
1070 \textindent{#1}\footstrut\futurelet\next\fo@t}
1071 \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
1072 \else\let\next\f@t\fi \next}
1073 \def\f@@t{\bgroup\aftergroup\@foot\let\next}
1074 \def\f@t#1{#1\@foot}
1075 \def\@foot{\strut\egroup}
1076 \def\footstrut{\vbox to\splittopskip{}}
1077 \skip\footins=\bigskipamount % space added when footnote is present
1078 \count\footins=1000 % footnote magnification factor (1 to 1)
1079 \dimen\footins=8in % maximum footnotes per page
1081 \newinsert\topins
1082 \newif\ifp@ge \newif\if@mid
1083 \def\topinsert{\@midfalse\p@gefalse\@ins}
1084 \def\midinsert{\@midtrue\@ins}
1085 \def\pageinsert{\@midfalse\p@getrue\@ins}
1086 \skip\topins=\z@skip % no space added when a topinsert is present
1087 \count\topins=1000 % magnification factor (1 to 1)
1088 \dimen\topins=\maxdimen % no limit per page
1089 \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
1090 \def\endinsert{\egroup % finish the \vbox
1091 \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
1092 \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
1093 \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
1094 \if@mid \bigskip\box\z@\bigbreak
1095 \else\insert\topins{\penalty100 % floating insertion
1096 \splittopskip\z@skip
1097 \splitmaxdepth\maxdimen \floatingpenalty\z@
1098 \ifp@ge \dimen@\dp\z@
1099 \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
1100 \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
1102 \output{\plainoutput}
1103 \def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
1104 \advancepageno
1105 \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
1106 \def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
1107 \def\makeheadline{\vbox to\z@{\vskip-22.5\p@
1108 \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
1109 \def\makefootline{\baselineskip24\p@\lineskiplimit\z@\line{\the\footline}}
1110 \def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
1111 \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
1113 \def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
1114 \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
1115 \ifvoid\footins\else % footnote info is present
1116 \vskip\skip\footins
1117 \footnoterule
1118 \unvbox\footins\fi
1119 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
1120 \def\footnoterule{\kern-3\p@
1121 \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high
1123 % Miscellaneous macros, and initial values for standard layout
1124 \message{hyphenation}
1126 \lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
1127 % \input hyphen
1129 \def\magnification{\afterassignment\m@g\count@}
1130 \def\m@g{\mag\count@
1131 \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
1133 \def\loggingall{\tracingcommands\tw@\tracingstats\tw@
1134 \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
1135 \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
1136 \showboxbreadth\maxdimen\showboxdepth\maxdimen}
1137 \def\tracingall{\tracingonline\@ne\loggingall}
1139 \def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
1140 \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
1142 \normalbaselines % \rm % select roman font
1143 \nonfrenchspacing % punctuation affects the spacing
1144 \catcode`@=12 % at signs are no longer letters
1146 % \def\fmtname{plain}\def\fmtversion{3.141592653} % identifies the current format