plain.tw,v 4.12 1995/07/10 21:32:25 web Exp

PLAIN.TW

Włodek Bzyl matwb@halina.univ.gda.pl

Contents

Introduction ........................................................................................................................ 2 The layout of the format..................................................................................................... 3 Text fonts ............................................................................................................................ 5

Font encoding ................................................................................................................ 6 Math fonts ........................................................................................................................... 8

Mathematical spacing...................................................................................................... 9 Registers allocation................................................................................................................ 13 Parameters ........................................................................................................................... 15 Macros for text ..................................................................................................................... 20 Macros for math ................................................................................................................... 26 Macros for output ................................................................................................................. 36 Hyphenation ......................................................................................................................... 39 Initalization .......................................................................................................................... 39 Programming support ............................................................................................................ 40 Appendices ......................................................................................................................... 41 Efficiency and memory-space considerations.............................................................................. 41 Extensible delimiters .............................................................................................................. 42 Font dimensions.................................................................................................................... 42 Font tables ........................................................................................................................... 44

Introduction

However, we will not include a verbatim description, because some parts of that file are too boring, and because the actual macros have been “optimized” with respect to memory space and running time. D.E. Knuth about plain.tex format.

What follows is devoted to the details of the plain TEX format. This file serves two purposes:

(1) As a documentation of the plain.tex format. Weaving and texing this document should produce a handy reference.

(2) The division of this web source into ‘chunks’ should ease creation of other formats tailored to particular applications. Chunks could be easily modified, removed, added, or replaced.

The change file mechanism is not needed in case of TEX language. Change files are used to incorporate system dependent code into source file, but TEX code is already system independent. TEX code could be only ‘format dependent’ and here change files could be used. Another feature of format file is that it evolves with time, yet some intermediate versions are used for preparation of books, articles etc. All these versions and configurations must be kept well organized, otherwise you are lost. The Revision Control System is the tool that assists with these tasks. With the RCS it is possible, with small overhead, to preserve all revisions which evolved from given text document, merge changes made by others, compare different versions, keep log of changes.

This document consists mainly of excerpts from the TEXBook, but it is organised around the macros as they appear in the plain.tex rather than around the topics as in a user manual. Therefore this document is not a user manual, although many definitions are contained here.

The layout of the format

⟨ * ⟩≡

⟨ Establish standard category code values ⟩

1  \catcode`@ = 11

⟨ Define commonly used constants ⟩ ⟨ Provide programming constructs ⟩ ⟨ Allocate registers ⟩ ⟨ Assign initial values to parameters ⟩ ⟨ Set up text fonts ⟩ ⟨ Set up math fonts ⟩ ⟨ Provide macros for text formatting ⟩ ⟨ Provide macros for math formatting ⟩ ⟨ Prepare page for output ⟩ ⟨ Read hyphenation patterns ⟩ ⟨ Initialize the layout ⟩

2  \catcode`@ = 12

⟨ Identify the format ⟩

There are 256 characters that TEX might encounter at each step, in a file or in a line of text typed directly on your terminal. These 256 characters are classified into 16 categories numbered 0 to 15:

Category  Meaning  Default
0  Escape character  \
1  Beginning of group  {
2  End of group  }
3  Math shift  $
4  Alignment tab  &
5  End of line  ⟨return⟩
6  Parameter  #
7  Superscript  ^
8  Subscript  _
9  Ignored character  ⟨null⟩
10  Space  ␣
11  Letter  A, …, Z and a, …, z
12  Other character  none of the above or below
13  Active character  ~
14  Comment character  %
15  Invalid character  ⟨delete⟩

When INITEX begins, category 12 (other) has been assigned to all 256 possible characters, except that the 52 letters A...Z and a...z are category 11 (letter), and assignments equivalent to the following have been made:

\catcode `\\ = 0
\catcode `\^^M = 5
\catcode `\^^@ = 9
\catcode `\  = 10
\catcode `\% = 14
\catcode `\^^? = 15

Thus ‘\’ is already an escape character, ‘\char"20’ is a space, and ‘%’ is available for comments on the first line of the file; ASCII ⟨null⟩ is ignored, ASCII ⟨return⟩ is an end-of-line character, and ASCII ⟨delete⟩ is invalid.

Furthermore ⟨tab⟩ is given category space, ⟨formfeed⟩ becomes an active character that will detect runaways on files that have been divided into “file pages” by ⟨formfeed⟩ characters. Finally the control sequence \active is defined to yield the constant 13. To re-catcode these special characters—not counting ASCII

⟨null⟩  ^^@
⟨tab⟩  ^^I
⟨linefeed⟩  ^^J
⟨formfeed⟩  ^^L
⟨return⟩  ^^M
⟨delete⟩  ^^?

—use the control sequence \dospecials that lists all the characters whose catcodes should probably be changed to 12 (other) when copying things verbatim. 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.

⟨ Establish standard category code values ⟩≡

 3  \catcode`\{=1
 4  \catcode`\}=2
 5  \catcode`\$=3
 6  \catcode`\&=4
 7  \catcode`\#=6
 8  \catcode`\^=7 \catcode`\^^K=7 % uparrow is for superscripts
 9  \catcode`\_=8 \catcode`\^^A=8 % downarrow are for subscripts
10  \catcode`\^^I=10

11

12  \chardef\active=13 \catcode`\~=\active % tilde is active
13  \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"

14

15  \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
16  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}

To make the plain macros more efficient in time and space, several constant values are declared as control sequences. If they were changed, anything could happen. So be careful!

⟨ Define commonly used constants ⟩≡

17  \chardef\@ne=1
18  \chardef\tw@=2
19  \chardef\thr@@=3
20  \chardef\sixt@@n=16
21  \chardef\@cclv=255
22  \mathchardef\@cclvi=256
23  \mathchardef\@m=1000
24  \mathchardef\@M=10000
25  \mathchardef\@MM=20000

Text fonts

⟨ Set up text fonts ⟩≡

⟨ Provide support for font scaling ⟩

⟨ Define text fonts ⟩

⟨ Encode special characters, and characters not available on the keyboard ⟩

⟨ Provide support for accented characters ⟩ ⟨ Assign uppercase and lowercase code values ⟩ ⟨ Assign space factor codes ⟩

Fonts assigned to \preloaded are not part of the format, 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.

⟨ Define text fonts ⟩≡

26  \font\tenrm=cmr10 % roman text
27  \font\preloaded=cmr9
28  \font\preloaded=cmr8
29  \font\sevenrm=cmr7
30  \font\preloaded=cmr6
31  \font\fiverm=cmr5

32

33  \font\preloaded=cmss10 % sans serif
34  \font\preloaded=cmssq8

35

36  \font\preloaded=cmssi10 % sans serif italic
37  \font\preloaded=cmssqi8

38

39  \font\tenbf=cmbx10 % boldface extended
40  \font\preloaded=cmbx9
41  \font\preloaded=cmbx8
42  \font\sevenbf=cmbx7
43  \font\preloaded=cmbx6
44  \font\fivebf=cmbx5

45

46  \font\tentt=cmtt10 % typewriter
47  \font\preloaded=cmtt9
48  \font\preloaded=cmtt8

49

50  \font\preloaded=cmsltt10 % slanted typewriter

51

52  \font\tensl=cmsl10 % slanted roman
53  \font\preloaded=cmsl9
54  \font\preloaded=cmsl8

55

56  \font\tenit=cmti10 % text italic
57  \font\preloaded=cmti9
58  \font\preloaded=cmti8
59  \font\preloaded=cmti7

60

61  \font\preloaded=cmu10 % unslanted text italic

62

63  \font\preloaded=cmcsc10 % caps and small caps

64

65  \font\preloaded=cmssbx10 % sans serif bold extended

66

67  \font\preloaded=cmdunh10 % Dunhill style

68

69  \font\preloaded=cmr7 scaled \magstep4 % for titles
70  \font\preloaded=cmtt10 scaled \magstep2
71  \font\preloaded=cmssbx10 scaled \magstep2

72

73  \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.)

⟨ Define text fonts ⟩+≡

74  \let\preloaded=\undefined % preloaded fonts must be declared anew later.

⟨ Provide support for font scaling ⟩≡

75  \def\magstephalf{1095 }
76  \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
77  \def\magnification{\afterassignment\m@g\count@}
78  \def\m@g{\mag\count@
79  \hsize6.5truein\vsize8.9truein\dimen\footins8truein}

Font encoding

We usually think of text files as containing characters. It doesn’t cause any problems most of the time when we use plain ASCII characters—letters A–Z, a–z, the numerals 0–9 and some of punctuation characters. This illusion is broken down when we start using characters that do not belong to this limited set, for example, accented characters / mathematical symbols. Then what we see on screen may not match what we key in. What gets printed may not match what we see on screen. Moreover, what gets shown on screen and what gets printed depends on what machine we are on and how the fonts that we are using are set up. In reality text files contain just numeric codes (in range 0–255) stored in 8-bit bytes, and the mapping between ‘character’ and numeric code is quite arbitrary. This is because there are very many more characters than the 256 numeric codes possible with 8-bits. Consequently, there will be a need for more than one possible mapping or ‘font encoding’, or in other words, there would not be a ‘standard’ encoding that suits all purposes.

When a symbol is built up by forming a box, the \leavevmode macro is called first; this starts a new paragraph, if TEX is in vertical mode, but does nothing if TEX is in horizontal mode or math mode. \chardef positions are taken from the fonts cmr10 and cmsy10.

⟨ Encode special characters, and characters not available on the keyboard ⟩≡

80  \chardef\%=`\%
81  \chardef\&=`\&
82  \chardef\#=`\#
83  \chardef\$=`\$
84  \chardef\ss="19
85  \chardef\ae="1A
86  \chardef\oe="1B
87  \chardef\o="1C

 88  \chardef\AE="1D
 89  \chardef\OE="1E
 90  \chardef\O="1F
 91  \chardef\i="10 \chardef\j="11 % dotless letters
 92  \def\aa{\accent23a}
 93  \def\l{\char32l}
 94  \def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}

95

 96  \def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
 97  \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
 98  \def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
 99  \rlap{\raise.67\dimen@\hbox{\char'27}}A}

100

101  \def\mathhexbox#1#2#3{\leavevmode
102  \hbox{$\m@th \mathchar"#1#2#3$}}
103  \def\dag{\mathhexbox279}
104  \def\ddag{\mathhexbox27A}
105  \def\S{\mathhexbox278}
106  \def\P{\mathhexbox27B}

The accent positions are taken from Computer Modern font family. We are about to ‘hard-wire’ CM accent encoding into the format. Different encoding will be necessary if other styles of type are used.

Three alternative control-symbol accents are defined, suitable for keyboards with extended char-

      acter sets: \let\^^_=\v, \let\^^S=\u, \let\^^D=\^.

⟨ Provide support for accented characters ⟩≡

107  \def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
108  \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit\z@ \oalign}
109  \def\ooalign{\lineskiplimit-\maxdimen \oalign} % chars over each other
110  \def\sh@ft#1{\dimen\z@.00#1ex\multiply\dimen\z@\fontdimen1\font
111  \kern-.0156\dimen\z@} % compensate for slant in lowered accents
112  \def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}
113  \def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
114  \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
115  \def\c#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
116  \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
117  \def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}

118

119  \def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi}
120  \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}

121

122  \def\`#1{{\accent18 #1}}
123  \def\'#1{{\accent19 #1}}
124  \def\v#1{{\accent20 #1}} \let\^^_=\v
125  \def\u#1{{\accent21 #1}} \let\^^S=\u
126  \def\=#1{{\accent22 #1}}
127  \def\^#1{{\accent94 #1}} \let\^^D=\^
128  \def\.#1{{\accent95 #1}}
129  \def\H#1{{\accent"7D #1}}
130  \def\~#1{{\accent"7E #1}}
131  \def\"#1{{\accent"7F #1}}
132  \def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}

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.

⟨ Assign uppercase and lowercase code values ⟩≡

133  %%% Thats all for English language.

Space factor code affects setting of interword glue. The space factor is normally 1000, which means that the interword glue should not be modified. If the space factor f is different from 1000, the interword glue is computed as follows: Take the normal space glue for the current font, and add the extra space if f ≥ 2000. Then the stretch component is multiplied by f/1000, while the shrink component is multiplied by 1000/f. (Look up the Appendix for the values of normal space, normal stretch, normal shrink, and extra space for some of CM fonts.)

INITEX sets space factor codes: \sfcode x = 1000 for all x, except that \sfcode ‘X = 999 for uppercase letters.

The characters ‘)’, ‘'’, and ‘]’ does not change space factor.

⟨ Assign space factor codes ⟩≡

134  \sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0

Math fonts

⟨ Set up math fonts ⟩≡

⟨ Define math fonts ⟩ ⟨ Encode math accents ⟩ ⟨ Establish spacing around mathematical objects ⟩ ⟨ Assign math codes ⟩ ⟨ Assign delimiter codes ⟩ ⟨ Define font families ⟩

As was said earlier, the font metric information about preloaded font will be build into the format. But, if another set of macros says \font\fiftyfiverm = cmr9 at 55pt, TEX will have to reload again the font metric information for cmr9.

⟨ Define math fonts ⟩≡

135  \font\teni=cmmi10 % math italic
136  \font\preloaded=cmmi9
137  \font\preloaded=cmmi8
138  \font\seveni=cmmi7
139  \font\preloaded=cmmi6
140  \font\fivei=cmmi5

141

142  \font\tensy=cmsy10 % math symbols
143  \font\preloaded=cmsy9
144  \font\preloaded=cmsy8
145  \font\sevensy=cmsy7
146  \font\preloaded=cmsy6
147  \font\fivesy=cmsy5

148

149  \font\tenex=cmex10 % math extension

150

151  \font\preloaded=cmmib10 % bold math italic
152  \font\preloaded=cmbsy10 % bold math symbols

Mathematical spacing

Spacing around mathematical object is measured in mu—‘math units.’ 1mu is equal to 1/18 th part of \fontdimen 6 of the font in family 2.

\quad spacing does not change with the style of formula, nor does it depend on the math font families that are being used. But thin spaces, medium spaces, and thick spaces do get bigger and smaller as the size of type gets bigger and smaller; this is because they are defined in terms of ⟨muglue⟩.

According to these specifications, thin spaces in plain TEX do not stretch or shrink; medium spaces can stretch a little, and they can shrink to zero; thick spaces can stretch a lot, but they never shrink.

The following table gives the complete definition of muglue between mathematical objects. A formula is converted to a math list, and the math list consists chiefly of “atoms” of eight basic types: Ord (ordinary), Op (large operator), Bin (binary operation), Rel (relation), Open (opening), Close (closing), Punct (punctuation), and Inner (a delimited subformula). Other kinds of atoms, which arise from commands like \overline or \mathaccent or \vcenter, etc., are all treated as type Ord; fractions are treated as type Inner. The following (non-symmetric) table is used to determine the spacing between pairs of adjacent atoms:

Right atom

Ord  Op  Bin  Rel  Open Close Punct Inner

      Ord  0       1      (2)     (3)      0       0       0      (1)
      Op  1       1       *      (3)      0       0       0      (1)
      Bin  (2)     (2)      *       *      (2)      *       *      (2)
Left Rel  (3)     (3)      *       0      (3)      0       0      (3)
atom Open  0       0       *       0       0       0       0       0
      Close  0       1      (2)     (3)      0       0       0      (1)
      Punct  (1)     (1)      *      (1)     (1)     (1)     (1)     (1)
      Inner  (1)      1      (2)     (3)     (1)      0      (1)     (1)

Here 0, 1, 2, and 3 stand for no space, thin space, medium space, and thick space, respectively. Thin space, medium space, and thin space are equal to values of \thinmuskim, \medmuskip, \thickmuskip parameters, respectively. The table entry is parenthesized if the space is to be inserted only in display and text styles, not in script and scriptscript styles. For example, many of the entries in the Rel row and the Rel column are ‘(3)’; this means that thick spaces are normally inserted before and after relational symbols like ‘=’, but not in subscripts. Some of the entries in the table are ‘*’; such cases never arise, because Bin atoms must be preceded and followed by atoms compatible with the nature of binary operations. The conversion of math lists to horizontal lists is done whenever TEX is about to leave math mode, and the inter-atomic spacing is inserted at that time.

⟨ Establish spacing around mathematical objects ⟩≡

153  \thinmuskip=3mu
154  \medmuskip=4mu plus 2mu minus 4mu
155  \thickmuskip=5mu plus 5mu

For the positioning of accents over single character the width of \skewchar is used. For most of fonts the default value of \skewchar is -1; but the math italic (family 1) and math symbol fonts (family 2) have special \skewchar values equal to '177 and '60, respectively. These are characters ‘ ’ and ‘′’.

⟨ Encode math accents ⟩≡

156  \skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
157  \skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60

A math code is relevant only when the corresponding category code is 11 or 12. When processing in math mode characters of categories 11 and 12, \char and \chardef characters are replaced by their math code.

If we denote 15-bit number by "uvwz, then math codes are assigned by

\mathcode ⟨8-bit number⟩ = "uvwz, where

u — the class code (see below for the list)

v — the font family number (see the font tables at the end of this document)

wz — the position of the character in the font

Class Meaning  Example  Class Meaning  Example
0  Ordinary  /  4  Opening  (
1  Large operator \sum  5  Closing  )
2  Binary operation +  6  Punctuation  ,
3  Relation  =  7  Variable family x

A \mathcode can also have the special value ˝ 8000, which causes the character to behave as if it has catcode 13 (active). This feature makes ' apostrophe expand to \prime. The mathcode of ' does not interfere with the use of ' in octal constants. The mathcode of "8000 is also assigned to space and underscore.

INITEX sets up \mathcode x = x for x = 0..255, except that \mathcode x = x + ˝ 7000 for each of the ten digits x = `0 to `9; \mathcode x = x + ˝ 7100 for each of the 52 letters. TEX looks at the mathcode only when it is typesetting a character whose catcode is 11 (letter) or 12 (other), or when it encounters a character that is given explicitly as \char⟨number⟩.

Class 7 is a special case that allows math symbols to change families. It behaves exactly like class 0, except that the specified family is replaced by the current value of an integer parameter called \fam, provided that \fam is a legal family number (i.e., if it lies between 0 and 15). TEX automatically sets \fam=-1 whenever math mode is entered; therefore class 7 and class 0 are equivalent unless \fam has been given a new value. Plain TEX changes \fam to 0 when the user types ‘\rm’; this makes it convenient to get roman letters in formulas, since letters belong to class 7. The control sequence \rm is an abbreviation for ‘\fam=0 \tenrm’; thus, \rm causes \fam to become zero, and it makes \tenrm the “current font.” In horizontal mode, the \fam value is irrelevant and the current font governs the typesetting of letters; but in math mode, the current font is irrelevant and the \fam value governs the letters. The current font affects math mode only if control space (\ ) is used or if dimensions are given in ex or em units; it also has an effect if an \hbox appears inside a formula, since the contents of an hbox are typeset in horizontal mode.

⟨ Assign math codes ⟩≡

158  \mathcode`\^^@="2201 % \cdot
159  \mathcode`\^^A="3223 % \downarrow
160  \mathcode`\^^B="010B % \alpha
161  \mathcode`\^^C="010C % \beta
162  \mathcode`\^^D="225E % \land
163  \mathcode`\^^E="023A % \lnot

164  \mathcode`\^^F="3232 % \in
165  \mathcode`\^^G="0119 % \pi
166  \mathcode`\^^H="0115 % \lambda
167  \mathcode`\^^I="010D % \gamma
168  \mathcode`\^^J="010E % \delta
169  \mathcode`\^^K="3222 % \uparrow
170  \mathcode`\^^L="2206 % \pm
171  \mathcode`\^^M="2208 % \oplus
172  \mathcode`\^^N="0231 % \infty
173  \mathcode`\^^O="0140 % \partial
174  \mathcode`\^^P="321A % \subset
175  \mathcode`\^^Q="321B % \supset
176  \mathcode`\^^R="225C % \cap
177  \mathcode`\^^S="225B % \cup
178  \mathcode`\^^T="0238 % \forall
179  \mathcode`\^^U="0239 % \exists
180  \mathcode`\^^V="220A % \otimes
181  \mathcode`\^^W="3224 % \leftrightarrow
182  \mathcode`\^^X="3220 % \leftarrow
183  \mathcode`\^^Y="3221 % \rightarrow
184  \mathcode`\^^Z="8000 % \ne
185  \mathcode`\^^[="2205 % \diamond
186  \mathcode`\^^\="3214 % \le
187  \mathcode`\^^]="3215 % \ge
188  \mathcode`\^^^="3211 % \equiv
189  \mathcode`\^^_="225F % \lor
190  \mathcode`\ ="8000 % \space
191  \mathcode`\!="5021
192  \mathcode`\'="8000 % ^\prime
193  \mathcode`\(="4028
194  \mathcode`\)="5029
195  \mathcode`\*="2203 % \ast
196  \mathcode`\+="202B
197  \mathcode`\,="613B
198  \mathcode`\-="2200
199  \mathcode`\.="013A
200  \mathcode`\/="013D
201  \mathcode`\:="303A
202  \mathcode`\;="603B
203  \mathcode`\<="313C
204  \mathcode`\=="303D
205  \mathcode`\>="313E
206  \mathcode`\?="503F
207  \mathcode`\[="405B
208  \mathcode`\\="026E % \backslash
209  \mathcode`\]="505D
210  \mathcode`\_="8000 % \_
211  \mathcode`\{="4266
212  \mathcode`\|="026A
213  \mathcode`\}="5267
214  \mathcode`\^^?="1273 % \smallint

215

Delimiter codes are used after \left and \right commands, when TEX is looking for a delimiter. If we denote 24-bit number by "qrstuv, then delimiter codes are assigned by

\delcode ⟨8-bit number⟩ = "qrstuv, where

q — the font family number of rs — the position of the the small variant of the delimiter t — the font family number of uv — the position of the the large variant of the delimiter

INITEX sets all \delcode values to -1, which means that no characters are recognized as delimiters in math formulas, except \delcode ‘. = 0, so that ‘.’ stands for “null delimiter”. { and } should not get delcodes; otherwise parameter grouping fails!

⟨ Assign delimiter codes ⟩≡

216  \delcode`\(="028300
217  \delcode`\)="029301
218  \delcode`\[="05B302
219  \delcode`\]="05D303
220  \delcode`\<="26830A
221  \delcode`\>="26930B
222  \delcode`\/="02F30E
223  \delcode`\|="26A30C
224  \delcode`\\="26E30F

All characters that are typeset in math mode belong to one of sixteen families of fonts, numbered internally from 0 to 15. Each of these families consists of three fonts: one for text size, one for script size, and one for scriptscriptsize. The commands \textfont, \scriptfont, and \scriptscriptfont are used to specify the members of each family. Since there are up to 256 characters per font, and 3 fonts per family, and 16 families, TEX can access up to 12,288 characters in any one formula (4096 in each of the three sizes).

The plain.tex format uses family 1 for math italic letters, family 2 for ordinary math symbols, and family 3 for large symbols. Text italic is put in family 4, slanted roman in family 5, bold roman in family 6, and typewriter type in family 7. A macro \newfam will assign symbolic names to families that aren’t already used.

INITEX initializes the mathcodes of all letters A to Z and a to z so that they are symbols of class 7 and family 1; that’s why it is natural to use family 1 for math italics. Similarly, the digits 0 to 9 are class 7 and family 0. None of the other families is treated in any special way by TEX.

TEX doesn’t check to see if the families are sensibly organized. The only constraint is that the fonts in families 2 and 3 have special \fontdimen parameters, which govern mathematical spacing (see Appendix). In Computer Modern only cmsy and cmex have these parameters, so their assignment to families 2 and 3 is almost mandatory.

During the time that a math formula is being read, TEX remembers each symbol as being “character position so-and-so in family number such-and-such,” but it does not take note of what fonts are actually in the families until reaching the end of the formula.

⟨ Define font families ⟩≡

225  \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
226  \def\rm{\fam\z@\tenrm}
227  \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
228  \def\mit{\fam\@ne} \def\oldstyle{\fam\@ne\teni}
229  \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
230  \def\cal{\fam\tw@}
231  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex

232  \newfam\itfam \def\it{\fam\itfam\tenit} % \it is family 4
233  \textfont\itfam=\tenit
234  \newfam\slfam \def\sl{\fam\slfam\tensl} % \sl is family 5
235  \textfont\slfam=\tensl
236  \newfam\bffam \def\bf{\fam\bffam\tenbf} % \bf is family 6
237  \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
238  \scriptscriptfont\bffam=\fivebf
239  \newfam\ttfam \def\tt{\fam\ttfam\tentt} % \tt is family 7
240  \textfont\ttfam=\tentt

Registers allocation

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.

The main use of these macros is for registers that are defined by one macro and used by others, possibly at different nesting levels.

The following counters are reserved:

0–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. \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.

⟨ Allocate registers ⟩≡

241  \count10=22 % allocates \count registers 23, 24, ...
242  \count11=9 % allocates \dimen registers 10, 11, ...
243  \count12=9 % allocates \skip registers 10, 11, ...
244  \count13=9 % allocates \muskip registers 10, 11, ...
245  \count14=9 % allocates \box registers 10, 11, ...

246  \count15=9 % allocates \toks registers 10, 11, ...
247  \count16=-1 % allocates input streams 0, 1, ...
248  \count17=-1 % allocates output streams 0, 1, ...
249  \count18=3 % allocates math families 4, 5, ...
250  \count19=0 % allocates \language codes 1, 2, ...
251  \count20=255 % allocates insertions 254, 253, ...
252  \countdef\insc@unt=20 % the insertion counter
253  \countdef\allocationnumber=21 % the most recent allocation
254  \countdef\m@ne=22 \m@ne=-1 % a handy constant
255  \def\wlog{\immediate\write\m@ne} % write on log file (only)

⟨ Allocate scratch registers ⟩

⟨ Provide user-level register allocation macros ⟩

⟨ Define implementation-level register allocation macros ⟩

⟨ Initialize register constants ⟩

Here are abbreviations for the names of scratch registers that don’t need to be allocated.

⟨ Allocate scratch registers ⟩≡

256  \countdef\count@=255
257  \dimendef\dimen@=0
258  \dimendef\dimen@i=1 % global only
259  \dimendef\dimen@ii=2
260  \skipdef\skip@=0
261  \toksdef\toks@=0

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.

⟨ Provide user-level register allocation macros ⟩≡

262  \outer\def\newcount{\alloc@0\count\countdef\insc@unt}
263  \outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
264  \outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}
265  \outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
266  \outer\def\newbox{\alloc@4\box\chardef\insc@unt}
267  \let\newtoks=\relax % we do this to allow plain.tex to be read in twice
268  \outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
269  \outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
270  \outer\def\newread{\alloc@6\read\chardef\sixt@@n}
271  \outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}
272  \outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}
273  \outer\def\newlanguage{\alloc@9\language\chardef\@cclvi}

⟨ Define implementation-level register allocation macros ⟩≡

274  \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
275  \ch@ck#1#4#2% make sure there's still room
276  \allocationnumber=\count1#1%
277  \global#3#5=\allocationnumber
278  \wlog{\string#5=\string#2\the\allocationnumber}}
279  \outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
280  \ch@ck0\insc@unt\count

281  \ch@ck1\insc@unt\dimen
282  \ch@ck2\insc@unt\skip
283  \ch@ck4\insc@unt\box
284  \allocationnumber=\insc@unt
285  \global\chardef#1=\allocationnumber
286  \wlog{\string#1=\string\insert\the\allocationnumber}}
287  \def\ch@ck#1#2#3{\ifnum\count1#1<#2%
288  \else\errmessage{No room for a new #3}\fi}

We finish with the initalization of some constants.

⟨ Initialize register constants ⟩≡

289  \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
290  \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
291  \newskip\centering \centering=0pt plus 1000pt minus 1000pt
292  \newdimen\p@ \p@=1pt % this saves macro space and time
293  \newdimen\z@ \z@=0pt % can be used both for 0pt and 0
294  \newskip\z@skip \z@skip=0pt plus0pt minus0pt
295  \newbox\voidb@x % permanently void box register

Parameters

Let’s turn now to TEX’s parameters, which the previous chapters have introduced one at a time; it will be convenient to assemble them all together.

An ⟨integer parameter⟩ is one of the following tokens: \pretolerance badness tolerance before hyphenation \tolerance badness tolerance after hyphenation \hbadness badness above which bad hboxes will be shown \vbadness badness above which bad vboxes will be shown \linepenalty amount added to badness of every line in a paragraph \hyphenpenalty penalty for line break after discretionary hyphen \exhyphenpenalty penalty for line break after explicit hyphen \binoppenalty penalty for line break after binary operation \relpenalty penalty for line break after math relation \clubpenalty penalty for creating a club line at bottom of page \widowpenalty penalty for creating a widow line at top of page

\displaywidowpenalty  ditto, before a display

\brokenpenalty penalty for page break after a hyphenated line \predisplaypenalty penalty for page break just before a display \postdisplaypenalty penalty for page break just after a display \interlinepenalty additional penalty for page break between lines \floatingpenalty penalty for insertions that are split \outputpenalty penalty at the current page break \doublehyphendemerits demerits for consecutive broken lines \finalhyphendemerits demerits for a penultimate broken line \adjdemerits demerits for adjacent incompatible lines \looseness change to the number of lines in a paragraph \pausing positive if pausing after each line is read from a file \holdinginserts positive if insertions remain dormant in output box \tracingonline positive if showing diagnostic info on the terminal \tracingmacros positive if showing macros as they are expanded \tracingstats positive if showing statistics about memory usage \tracingparagraphs positive if showing line-break calculations \tracingpages positive if showing page-break calculations \tracingoutput positive if showing boxes that are shipped out \tracinglostchars positive if showing characters not in the font \tracingcommands positive if showing commands before they are executed \tracingrestores positive if showing deassignments when groups end \language the current set of hyphenation rules \uchyph positive if hyphenating words beginning with capital letters \lefthyphenmin smallest fragment at beginning of hyphenated word \righthyphenmin smallest fragment at end of hyphenated word \globaldefs nonzero if overriding \global specifications

\defaulthyphenchar    \hyphenchar value when a font is loaded
\defaultskewchar    \skewchar value when a font is loaded

\escapechar escape character in the output of control sequence tokens \endlinechar character placed at the right end of an input line \newlinechar character that starts a new output line

\maxdeadcycles  upper bound on \deadcycles

\hangafter hanging indentation changes after this many lines \fam the current family number \mag magnification ratio, times 1000 \delimiterfactor ratio for variable delimiters, times 1000 \time current time of day in minutes since midnight \day current day of the month \month current month of the year \year current year of our Lord \showboxbreadth maximum items per level when boxes are shown \showboxdepth maximum level when boxes are shown \errorcontextlines maximum extra context shown when errors occur

The first few of these parameters have values in units of “badness” and “penalties” that affect line breaking and page breaking. Then come demerit-oriented parameters; demerits are essentially given in units of “badness squared,” so those parameters tend to have larger values. By contrast, the next few parameters (\looseness, \pausing, etc.) generally have quite small values (either −1 or 0 or 1 or 2). Miscellaneous parameters complete the set.

A ⟨dimen parameter⟩ is one of the following:

\hfuzz maximum overrun before overfull hbox messages occur \vfuzz maximum overrun before overfull vbox messages occur \overfullrule width of rules appended to overfull boxes \emergencystretch reduces badnesses on final pass of line-breaking \hsize line width in horizontal mode \vsize page height in vertical mode \maxdepth maximum depth of boxes on main pages \splitmaxdepth maximum depth of boxes on split pages \boxmaxdepth maximum depth of boxes on explicit pages

\lineskiplimit  threshold where \baselineskip changes to \lineskip

\delimitershortfall maximum space not covered by a delimiter \nulldelimiterspace width of a null delimiter \scriptspace extra space after subscript or superscript \mathsurround kerning before and after math in text \predisplaysize length of text preceding a display \displaywidth length of line for displayed equation \displayindent indentation of line for displayed equation

\parindent  width of \indent

\hangindent amount of hanging indentation \hoffset horizontal offset in \shipout

\voffset  vertical offset in \shipout

Before typesetting a delimiter TEX determines the size f of the formula to be covered as twice the maximum of the height and the depth of the formula. The size d of the delimiter should be

          min \{f − \delimitershortfall, \delimiterfactor · \frac{f}{1000}\} ≤ d

And the possibilities for ⟨glue parameter⟩ are:

\baselineskip desired glue between baselines \lineskip interline glue if \baselineskip isn’t feasible \parskip extra glue just above paragraphs \abovedisplayskip extra glue just above displays \abovedisplayshortskip ditto, following short lines \belowdisplayskip extra glue just below displays \belowdisplayshortskip ditto, following short lines \leftskip glue at left of justified lines \rightskip glue at right of justified lines \topskip glue at top of main pages \splittopskip glue at top of split pages \tabskip glue between aligned entries \spaceskip glue between words, if nonzero \xspaceskip glue between sentences, if nonzero \parfillskip additional \rightskip at end of paragraphs

To above parameters (except \parfillskip) are assigned values appropriate for CM family typeset at 12 pt baseline.

Finally, there are three permissible ⟨muglue parameter⟩ tokens:

\thinmuskip thin space in math formulas \medmuskip medium space in math formulas \thickmuskip thick space in math formulas

TEX also has parameters that are token lists. Such parameters do not enter into the definitions of ⟨number⟩ and such things. A ⟨token parameter⟩ is any of:

\output the user’s output routine \everypar tokens to insert when a paragraph begins \everymath tokens to insert when math in text begins \everydisplay tokens to insert when display math begins \everyhbox tokens to insert when an hbox begins \everyvbox tokens to insert when a vbox begins \everyjob tokens to insert when the job begins \everycr tokens to insert after every \cr or nonredundant \crcr \errhelp tokens that supplement an \errmessage

All of numeric parameters are listed below, but the code is commented out if no special value needs to be set. INITEX makes all parameters zero except where noted.

⟨ Assign initial values to parameters ⟩≡

⟨ Assign values to integer parameters ⟩ ⟨ Assign values to dimen parameters ⟩ ⟨ Assign values to glue parameters ⟩ ⟨ Assign values to special registers ⟩

⟨ Assign values to integer parameters ⟩≡

296  \pretolerance=100
297  \tolerance=200 % INITEX sets this to 10000
298  \hbadness=1000
299  \vbadness=1000
300  \linepenalty=10
301  \hyphenpenalty=50
302  \exhyphenpenalty=50
303  \binoppenalty=700
304  \relpenalty=500
305  \clubpenalty=150
306  \widowpenalty=150
307  \displaywidowpenalty=50
308  \brokenpenalty=100
309  \predisplaypenalty=10000
310  % \postdisplaypenalty=0
311  % \interlinepenalty=0
312  % \floatingpenalty=0, set during \insert
313  % \outputpenalty=0, set before TeX enters \output
314  \doublehyphendemerits=10000
315  \finalhyphendemerits=5000
316  \adjdemerits=10000
317  % \looseness=0, cleared by TeX after each paragraph
318  % \pausing=0
319  % \holdinginserts=0
320  % \tracingonline=0
321  % \tracingmacros=0
322  % \tracingstats=0
323  % \tracingparagraphs=0
324  % \tracingpages=0
325  % \tracingoutput=0
326  \tracinglostchars=1
327  % \tracingcommands=0
328  % \tracingrestores=0
329  % \language=0
330  \uchyph=1
331  % \lefthyphenmin=2 \righthyphenmin=3 set below
332  % \globaldefs=0
333  % \maxdeadcycles=25 % INITEX does this
334  % \hangafter=1 % INITEX does this, also TeX after each paragraph
335  % \fam=0
336  % \mag=1000 % INITEX does this
337  % \escapechar=`\\ % INITEX does this
338  \defaulthyphenchar=`\-
339  \defaultskewchar=-1
340  % \endlinechar=`\^^M % INITEX does this

341  \newlinechar=-1
342  \delimiterfactor=901
343  % \time=now % TeX does this at beginning of job
344  % \day=now % TeX does this at beginning of job
345  % \month=now % TeX does this at beginning of job
346  % \year=now % TeX does this at beginning of job
347  \showboxbreadth=5
348  \showboxdepth=3
349  \errorcontextlines=5

⟨ Assign values to dimen parameters ⟩≡

350  \hfuzz=0.1pt
351  \vfuzz=0.1pt
352  \overfullrule=5pt
353  \hsize=6.5in
354  \vsize=8.9in
355  \maxdepth=4pt
356  \splitmaxdepth=\maxdimen
357  \boxmaxdepth=\maxdimen
358  % \lineskiplimit=0pt, changed by \normalbaselines
359  \delimitershortfall=5pt
360  \nulldelimiterspace=1.2pt
361  \scriptspace=0.5pt
362  % \mathsurround=0pt
363  % \predisplaysize=0pt, set before TeX enters $$
364  % \displaywidth=0pt, set before TeX enters $$
365  % \displayindent=0pt, set before TeX enters $$
366  \parindent=20pt
367  % \hangindent=0pt, zeroed by TeX after each paragraph
368  % \hoffset=0pt
369  % \voffset=0pt

⟨ Assign values to glue parameters ⟩≡

370  % \baselineskip=0pt, changed by \normalbaselines
371  % \lineskip=0pt, changed by \normalbaselines
372  \parskip=0pt plus 1pt
373  \abovedisplayskip=12pt plus 3pt minus 9pt
374  \abovedisplayshortskip=0pt plus 3pt
375  \belowdisplayskip=12pt plus 3pt minus 9pt
376  \belowdisplayshortskip=7pt plus 3pt minus 4pt
377  % \leftskip=0pt
378  % \rightskip=0pt
379  \topskip=10pt
380  \splittopskip=10pt
381  % \tabskip=0pt
382  % \spaceskip=0pt
383  % \xspaceskip=0pt
384  \parfillskip=0pt plus 1fil

We also define special registers that function like parameters:

⟨ Assign values to special registers ⟩≡

385  \newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
386  \newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
387  \newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
388  \newskip\normalbaselineskip \normalbaselineskip=12pt
389  \newskip\normallineskip \normallineskip=1pt
390  \newdimen\normallineskiplimit \normallineskiplimit=0pt
391  \newdimen\jot \jot=3pt
392  \newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
393  \newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
394  \def\normalbaselines{\lineskip\normallineskip
395  \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}

Macros for text

Here we introduce macros that are used for basic formatting unrelated to mathematics.

⟨ Provide macros for text formatting ⟩≡

⟨ Supply basic macros for text formatting ⟩ ⟨ Define space macros ⟩ ⟨ Supply various paragraph shapes ⟩ ⟨ Define sectioning macros ⟩ ⟨ Supply ragged setting ⟩ ⟨ Supply ‘boxing’ macros ⟩ ⟨ Supply strut ⟩ ⟨ Provide alignment macros ⟩ ⟨ Establish spacing after punctuation characters ⟩ ⟨ Supply various ways to fill space ⟩

⟨ Define \showhyphens macro ⟩

⟨ Completing the job ⟩

\⟨tab⟩ and \⟨return⟩ are defined so that they expand to \⟨space⟩; this helps to prevent confusion, since all three cases look identical when displayed on most computer terminals.

⟨ Supply basic macros for text formatting ⟩≡

396  \def\^^M{\ } % control <return> = control <space>
397  \def\^^I{\ } % same for <tab>

The control sequences \endgraf and \endline are made equivalent to TEX’s primitive \par and \cr operations, since it is often useful to redefine the meanings of \par and \cr themselves. Then come the definitions of \space (a blank space), \empty (a list of no tokens), and \null (an empty hbox).

\bgroup and \egroup are made to provide “implicit” grouping characters that turn out to be especially useful in macro definitions.

⟨ Supply basic macros for text formatting ⟩+≡

398  \let\endgraf=\par \let\endline=\cr

399

400  \def\space{ }

401  \def\empty{}
402  \def\null{\hbox{}}

403

404  \let\bgroup={ \let\egroup=}

The \obeylines macro says ‘\let^^M=\par’ instead of ‘\def^^M{\par}’ because the \let technique allows constructions such as ‘\let\par=\cr \obeylines \halign{...}’ in which \cr’s need not be given within the alignment.

⟨ Supply basic macros for text formatting ⟩+≡

405  {\catcode`\^^M=\active % these lines must end with %
406  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
407  \global\let^^M\par} % this is in case ^^M appears in a \write
408  \def\obeyspaces{\catcode`\ \active}
409  {\obeyspaces\global\let =\space}

The macros \lq, \rq, \lbrack, and \rbrack are defined, for people who have difficulty typing quotation marks and/or brackets.

⟨ Supply basic macros for text formatting ⟩+≡

410  \def\lq{`} \def\rq{'}
411  \def\lbrack{[} \def\rbrack{]}

The macros \enskip, \quad, and \qquad provide spaces that are legitimate breakpoints within a paragraph; \enspace, \thinspace, and \negthinspace produce space that cannot cause a break (although the space will disappear if it occurs just next to certain kinds of breaks). All six of these spaces are relative to the current font.

You can get horizontal space that never disappears by saying ‘\hglue⟨glue⟩’; this space is able to stretch or shrink. Similarly, there’s a vertical analog, ‘\vglue⟨glue⟩’.

The \nointerlineskip macro suppresses interline glue that would ordinarily be inserted before the next box in vertical mode; this is a “one shot” macro, but \offinterlineskip is more drastic— it sets things up so that future interline glue will be present, but zero. There also are macros for potentially breakable vertical spaces: \smallskip, \medskip, and \bigskip.

⟨ Define space macros ⟩≡

412  \def\thinspace{\kern .16667em }
413  \def\negthinspace{\kern-.16667em }
414  \def\enspace{\kern.5em }

415

416  \def\enskip{\hskip.5em\relax}
417  \def\quad{\hskip1em\relax}
418  \def\qquad{\hskip2em\relax}

419

420  \def\smallskip{\vskip\smallskipamount}
421  \def\medskip{\vskip\medskipamount}
422  \def\bigskip{\vskip\bigskipamount}

423

424  \def\nointerlineskip{\prevdepth-1000\p@}
425  \def\offinterlineskip{\baselineskip-1000\p@
426  \lineskip\z@ \lineskiplimit\maxdimen}

427

428  \def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page
429  \def\vglue{\afterassignment\vgl@\skip@=}

430  \def\vgl@{\par \dimen@\prevdepth \hrule height\z@
431  \nobreak\vskip\skip@ \prevdepth\dimen@}
432  \def\hglue{\afterassignment\hgl@\skip@=}
433  \def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
434  \nobreak\hskip\skip@ \spacefactor\count@}

The following macros introduce penalty markers that make breaking less, or more, desirable. The \break, \nobreak, and \allowbreak macros are intended for use in any mode; the ~ (tie) and \slash (hyphen-like ‘/’) macros are intended for horizontal mode. The others are intended only for vertical mode, i.e., between paragraphs, so they begin with \par.

⟨ Define space macros ⟩+≡

435  \def~{\penalty\@M \ } % tie
436  \def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'

437

438  \def\break{\penalty-\@M}
439  \def\nobreak{\penalty \@M}
440  \def\allowbreak{\penalty \z@}

441

442  \def\filbreak{\par\vfil\penalty-200\vfilneg}
443  \def\goodbreak{\par\penalty-500 }
444  \def\eject{\par\break}
445  \def\supereject{\par\penalty-\@MM}

446

447  \def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
448  \def\smallbreak{\par\ifdim\lastskip<\smallskipamount
449  \removelastskip\penalty-50\smallskip\fi}
450  \def\medbreak{\par\ifdim\lastskip<\medskipamount
451  \removelastskip\penalty-100\medskip\fi}
452  \def\bigbreak{\par\ifdim\lastskip<\bigskipamount
453  \removelastskip\penalty-200\bigskip\fi}

\line, \leftline, \rightline, and \centerline produce boxes of the full line width, while \llap and \rlap make boxes whose effective width is zero. The \underbar macro puts its argument into an hbox with a straight line at a fixed distance under it.

\underbar uses math mode to do its job, although the operation is essentially non-mathematical in nature. A few of the other macros below use math mode in similar ways; thus, TEX’s mathematical abilities prove to be useful even when no mathematical typesetting is actually being done. A special control sequence \m@th is used to “turn off” \mathsurround when such constructions are being performed.)

⟨ Supply ‘boxing’ macros ⟩≡

454  \def\line{\hbox to\hsize}
455  \def\leftline#1{\line{#1\hss}}
456  \def\rightline#1{\line{\hss#1}}
457  \def\centerline#1{\line{\hss#1\hss}}

458

459  \def\rlap#1{\hbox to\z@{#1\hss}}
460  \def\llap#1{\hbox to\z@{\hss#1}}

461

462  \def\m@th{\mathsurround\z@}
463  \def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
464  \m@th \underline{\box\z@}$}

A \strut is implemented here as a rule of width zero. The ‘\relax’ in this macro and in others below is necessary in case \strut appears first in an alignment entry, because TEX is in a somewhat unpredictable mode at such times.

⟨ Supply strut ⟩≡

465  \newbox\strutbox
466  \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
467  \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}

The \ialign macro provides for alignments when it is necessary to be sure that \tabskip is initially zero. The \hidewidth macro can be used essentially as \hfill in alignment entries that are permitted to “stick out” of their column. There’s also \multispan, which permits alignment entries to span one or more columns.

⟨ Provide alignment macros ⟩≡

468  \def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
469  \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
470  \newcount\mscount
471  \def\multispan#1{\omit \mscount#1\relax
472  \loop\ifnum\mscount>\@ne \sp@n\repeat}
473  \def\sp@n{\span\omit\advance\mscount\m@ne}

Now we get to the “tabbing” macros. They keep track of the tab positions by maintaining boxes full of empty boxes having the specified widths.

The macro \+ has been declared ‘\outer’ here, so that TEX will be better able to detect runaway arguments and definitions. A non-\outer version, called \tabalign, has also been provided in case it is necessary to use \+ in some “inner” place. You can use \tabalign just like \+, except after

      \settabs.

⟨ Provide alignment macros ⟩+≡

474  \newif\ifus@ \newif\if@cr
475  \newbox\tabs \newbox\tabsyet \newbox\tabsdone

476

477  \def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
478  \def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
479  \let\+=\relax % in case this file is being read in twice
480  \def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}%
481  \else\let\nxt\s@tcols\fi \let\next\relax \nxt}
482  \def\s@tt@b{\let\nxt\relax \us@false\m@ketabbox}
483  \def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
484  \outer\def\+{\tabalign}
485  \def\s@tcols#1\columns{\count@#1\dimen@\hsize
486  \loop\ifnum\count@>\z@ \@nother \repeat}
487  \def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
488  \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
489  \advance\dimen@-\dimen@ii \advance\count@\m@ne}

490

491  \def\m@ketabbox{\begingroup
492  \global\setbox\tabsyet\copy\tabs
493  \global\setbox\tabsdone\null
494  \def\cr{\@crtrue\crcr\egroup\egroup
495  \ifus@\unvbox\z@\lastbox\fi\endgroup
496  \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%

497  \setbox\z@\vbox\bgroup\@crfalse
498  \ialign\bgroup&\t@bbox##\t@bb@x\crcr}

499

500  \def\t@bbox{\setbox\z@\hbox\bgroup}
501  \def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
502  \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
503  \global\setbox\@ne\lastbox}% now \box\@ne holds its size
504  \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
505  \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
506  \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
507  \box\z@}

Paragraph shapes of a limited but important kind are provided by \item, \itemitem, and \narrower. A macro \hang causes hanging indentation by the normal amount of \parindent, after the first line; thus, the entire paragraph will be indented by the same amount (unless it began with \noindent). \textindent{stuff} is like \indent, but it puts the ‘stuff’ into the indentation, flush right except for an en space; it also removes spaces that might follow the right brace in ‘{stuff}’.

⟨ Supply various paragraph shapes ⟩≡

508  \def\hang{\hangindent\parindent}
509  \def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
510  \def\item{\par\hang\textindent}
511  \def\itemitem{\par\indent \hangindent2\parindent \textindent}
512  \def\narrower{\advance\leftskip\parindent
513  \advance\rightskip\parindent}

The \beginsection macro is intended to mark the beginning of a new major subdivision in a document; to use it, you say ‘\beginsection⟨section title⟩’ followed by a blank line (or \par). The macro first emits glue and penalties, designed to start a new page if the present page is nearly full; then it makes a \bigskip and puts the section title flush left on a line by itself, in boldface type. The section title is also displayed on the terminal. After a \smallskip, with page break prohibited, a \noindent command is given; this suppresses indentation in the next paragraph, i.e., in the first paragraph of the new section. (However, the next “paragraph” will be empty if vertical mode material immediately follows the \beginsection command.)

Special statements in a mathematical paper are often called theorems, lemmas, definitions, axioms, postulates, remarks, corollaries, algorithms, facts, conjectures, or some such things, and they generally are given special typographic treatment. The \proclaim macro puts the title of the proclamation in boldface, then sets the rest of the paragraph in slanted type. The paragraph is followed by something similar to \medbreak, except that the amount of penalty is different so that page breaks are discouraged:

⟨ Define sectioning macros ⟩≡

514  \outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250
515  \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip
516  \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}
517  \outer\def\proclaim #1. #2\par{\medbreak
518  \noindent{\bf#1.\enspace}{\sl#2\par}%
519  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

Ragged-right setting is initiated by restricting the spaces between words to have a fixed width, and by putting variable space at the right of each line. You should not call \raggedright until your text font has already been specified.

It is assumed that the ragged-right material will not be in a variety of different sizes. If this assumption is not valid, a different approach should be used: \fontdimen parameters 3 and 4 of the fonts you will be using should be set to zero, by saying, e.g., ‘\fontdimen3\tenrm=0pt’. These parameters specify the stretchability and shrinkability of interword spaces. A special macro \ttraggedright should be used for ragged-right setting in typewriter type, since the spaces between words are generally bigger in that style. (Spaces are already unstretchable and unshrinkable in font cmtt.)

⟨ Supply ragged setting ⟩≡

520  \def\raggedright
521  {\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
522  \def\ttraggedright
523  {\tt\rightskip\z@ plus2em\relax} % for use with \tt only

The \nonfrenchspacing macro is be used to change the default sfcodes (set by INITEX) of punctuation marks. This macro, when called, affects spacing after punctuation marks.

⟨ Establish spacing after punctuation characters ⟩≡

524  \def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
525  \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
526  \def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
527  \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }

\rightarrowfill and \leftarrowfill macros use \cleaders with a repeatable box consisting of the middle 10 units of a minus sign, where one unit is \frac{1}{18} em. The leaders are preceded and followed by − and →; there’s enough backspacing to compensate for up to 5 units of extra space, fore and aft, that \cleaders might leave blank. In this way a macro is obtained such that \hbox to

100pt{\rightarrowfill} yields ‘⟶’.

The \overbrace and \underbrace macros of plain TEX are constructed by combining characters with rules. Font cmex10 contains four symbols , each of which has depth zero and height equal to the thickness of a rule that joins them properly. Therefore it’s easy to define \upbracefill and \downbracefill macros so that you can obtain, e.g.,

\underbrace{}

by saying ‘\hbox to 100pt{\downbracefill}\hbox to 50pt{\upbracefill}’ in vertical mode.

⟨ Supply various ways to fill space ⟩≡

528  \def\hrulefill{\leaders\hrule\hfill}
529  \def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
530  \def\rightarrowfill{$\m@th\smash-\mkern-6mu%
531  \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
532  \mkern-6mu\mathord\rightarrow$}
533  \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
534  \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
535  \mkern-6mu\smash-$}
536  \mathchardef\braceld="37A \mathchardef\bracerd="37B
537  \mathchardef\bracelu="37C \mathchardef\braceru="37D
538  \def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
539  \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru

540  \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$}
541  \def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
542  \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd
543  \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$}

If you want to see all of the hyphens that plain TEX will find in some random text, you can say ‘\showhyphens{⟨random text⟩}’ and the results will appear on your terminal (and in the log file). The \showhyphens macro creates an hbox that is intentionally underfull.

⟨ Define \showhyphens macro ⟩≡

544  \def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
545  \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}

At the end of a TEX manuscript it’s usually best to finish everything off by typing ‘\bye’. The ‘\vfill\supereject’ gets TEX to flush out all remaining insertions, with blank space filling the bottom of incomplete pages, and ‘\end’ sends the computer into its endgame routine.

⟨ Completing the job ⟩≡

546  \outer\def\bye{\par\vfill\supereject\end}

Macros for math

Most of this section consists of long listings of special symbols together with their font locations.

⟨ Provide macros for math formatting ⟩≡

⟨ Define math space macros ⟩ ⟨ Define Greek letters ⟩ ⟨ Define math symbols ⟩ ⟨ Encode large operators ⟩ ⟨ Encode binary operations ⟩ ⟨ Encode relations ⟩ ⟨ Supply vertical and diagonal dots ⟩ ⟨ Supply variable-width math accents ⟩ ⟨ Supply extensible delimiters ⟩ ⟨ Provide access to delimiters of various sizes ⟩ ⟨ Supply common math functions ⟩ ⟨ Provide \cases and \matrix macros ⟩ ⟨ Provide support to typeset displayed equations ⟩

TEX does automatic spacing of math formulas so that they look right, and this is almost true. But occasionally you must give TEX some help. The number of possible math formulas is vast, and TEX’s spacing rules are rather simple, so it is natural that exceptions should arise. The basic elements of space that TEX puts into formulas are called: thin spaces, medium spaces, thick spaces. The normal space between words of a paragraph is approximately equal to two thin spaces.

You can add your own spacing whenever you want to, by using the control sequences

\, thin space (normally 1/6 of a quad);
\> medium space (normally 2/9 of a quad);
\; thick space (normally 5/18 of a quad);
\! negative thin space (normally −1/6 of a quad).

⟨ Define math space macros ⟩≡

547  \def\,{\mskip\thinmuskip}
548  \def\>{\mskip\medmuskip}
549  \def\;{\mskip\thickmuskip}
550  \def\!{\mskip-\thinmuskip}

The next job is to define Greek letters and other symbols of type Ord. Uppercase Greek letters are assigned hexadecimal codes of the form ˝ 7xxx, so that they will change families when \fam changes.

\mathchardef defines a control sequence to be a synonym for a math character (check \mathchar for the meaning of hex number).

⟨ Define Greek letters ⟩≡

551  \mathchardef\alpha="010B
552  \mathchardef\beta="010C
553  \mathchardef\gamma="010D
554  \mathchardef\delta="010E
555  \mathchardef\epsilon="010F
556  \mathchardef\zeta="0110
557  \mathchardef\eta="0111
558  \mathchardef\theta="0112
559  \mathchardef\iota="0113
560  \mathchardef\kappa="0114
561  \mathchardef\lambda="0115
562  \mathchardef\mu="0116
563  \mathchardef\nu="0117
564  \mathchardef\xi="0118
565  \mathchardef\pi="0119
566  \mathchardef\rho="011A
567  \mathchardef\sigma="011B
568  \mathchardef\tau="011C
569  \mathchardef\upsilon="011D
570  \mathchardef\phi="011E
571  \mathchardef\chi="011F
572  \mathchardef\psi="0120
573  \mathchardef\omega="0121
574  \mathchardef\varepsilon="0122
575  \mathchardef\vartheta="0123
576  \mathchardef\varpi="0124
577  \mathchardef\varrho="0125
578  \mathchardef\varsigma="0126
579  \mathchardef\varphi="0127
580  \mathchardef\Gamma="7000
581  \mathchardef\Delta="7001
582  \mathchardef\Theta="7002
583  \mathchardef\Lambda="7003
584  \mathchardef\Xi="7004
585  \mathchardef\Pi="7005
586  \mathchardef\Sigma="7006
587  \mathchardef\Upsilon="7007
588  \mathchardef\Phi="7008
589  \mathchardef\Psi="7009
590  \mathchardef\Omega="700A

⟨ Define math symbols ⟩≡

591  \mathchardef\aleph="0240
592  \def\hbar{{\mathchar'26\mkern-9muh}}
593  \mathchardef\imath="017B
594  \mathchardef\jmath="017C
595  \mathchardef\ell="0160
596  \mathchardef\wp="017D
597  \mathchardef\Re="023C
598  \mathchardef\Im="023D
599  \mathchardef\partial="0140
600  \mathchardef\infty="0231
601  \mathchardef\prime="0230
602  \mathchardef\emptyset="023B
603  \mathchardef\nabla="0272
604  \def\surd{{\mathchar"1270}}
605  \mathchardef\top="023E
606  \mathchardef\bot="023F
607  \def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
608  \not\mathrel{\mkern14mu}\crcr
609  \noalign{\nointerlineskip}
610  \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
611  \mathchardef\triangle="0234
612  \mathchardef\forall="0238
613  \mathchardef\exists="0239
614  \mathchardef\neg="023A \let\lnot=\neg
615  \mathchardef\flat="015B
616  \mathchardef\natural="015C
617  \mathchardef\sharp="015D
618  \mathchardef\clubsuit="027C
619  \mathchardef\diamondsuit="027D
620  \mathchardef\heartsuit="027E
621  \mathchardef\spadesuit="027F

Integral signs get special treatment so that their limits won’t be set above and below.

⟨ Encode large operators ⟩≡

622  \mathchardef\coprod="1360
623  \mathchardef\bigvee="1357
624  \mathchardef\bigwedge="1356
625  \mathchardef\biguplus="1355
626  \mathchardef\bigcap="1354
627  \mathchardef\bigcup="1353
628  \mathchardef\intop="1352 \def\int{\intop\nolimits}
629  \mathchardef\prod="1351
630  \mathchardef\sum="1350
631  \mathchardef\bigotimes="134E
632  \mathchardef\bigoplus="134C
633  \mathchardef\bigodot="134A
634  \mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
635  \mathchardef\bigsqcup="1346
636  \mathchardef\smallint="1273

⟨ Encode binary operations ⟩≡

637  \mathchardef\triangleleft="212F
638  \mathchardef\triangleright="212E
639  \mathchardef\bigtriangleup="2234
640  \mathchardef\bigtriangledown="2235
641  \mathchardef\wedge="225E \let\land=\wedge
642  \mathchardef\vee="225F \let\lor=\vee
643  \mathchardef\cap="225C
644  \mathchardef\cup="225B
645  \mathchardef\ddagger="227A
646  \mathchardef\dagger="2279
647  \mathchardef\sqcap="2275
648  \mathchardef\sqcup="2274
649  \mathchardef\uplus="225D
650  \mathchardef\amalg="2271
651  \mathchardef\diamond="2205
652  \mathchardef\bullet="220F
653  \mathchardef\wr="226F
654  \mathchardef\div="2204
655  \mathchardef\odot="220C
656  \mathchardef\oslash="220B
657  \mathchardef\otimes="220A
658  \mathchardef\ominus="2209
659  \mathchardef\oplus="2208
660  \mathchardef\mp="2207
661  \mathchardef\pm="2206
662  \mathchardef\circ="220E
663  \mathchardef\bigcirc="220D
664  \mathchardef\setminus="226E % for set difference A\setminus B
665  \mathchardef\cdot="2201
666  \mathchardef\ast="2203
667  \mathchardef\times="2202
668  \mathchardef\star="213F

Relations are also fairly straightforward, except for the ones that are constructed from other characters. The \mapstochar is a character ‘ ’ of width zero that is quite useless by itself, but it combines with right arrows to make \mapsto ‘↦’ and \longmapsto ‘⟼’. Similarly, \not is a relation character of width zero that puts a slash over the character that follows. When two relations are adjacent in a math formula, TEX puts no space between them.

⟨ Encode relations ⟩≡

669  \mathchardef\propto="322F
670  \mathchardef\sqsubseteq="3276
671  \mathchardef\sqsupseteq="3277
672  \mathchardef\parallel="326B
673  \mathchardef\mid="326A
674  \mathchardef\dashv="3261
675  \mathchardef\vdash="3260
676  \mathchardef\nearrow="3225
677  \mathchardef\searrow="3226
678  \mathchardef\nwarrow="322D
679  \mathchardef\swarrow="322E
680  \mathchardef\Leftrightarrow="322C

681  \mathchardef\Leftarrow="3228
682  \mathchardef\Rightarrow="3229
683  \def\neq{\not=} \let\ne=\neq
684  \mathchardef\leq="3214 \let\le=\leq
685  \mathchardef\geq="3215 \let\ge=\geq
686  \mathchardef\succ="321F
687  \mathchardef\prec="321E
688  \mathchardef\approx="3219
689  \mathchardef\succeq="3217
690  \mathchardef\preceq="3216
691  \mathchardef\supset="321B
692  \mathchardef\subset="321A
693  \mathchardef\supseteq="3213
694  \mathchardef\subseteq="3212
695  \mathchardef\in="3232
696  \mathchardef\ni="3233 \let\owns=\ni
697  \mathchardef\gg="321D
698  \mathchardef\ll="321C
699  \mathchardef\not="3236
700  \mathchardef\leftrightarrow="3224
701  \mathchardef\leftarrow="3220 \let\gets=\leftarrow
702  \mathchardef\rightarrow="3221 \let\to=\rightarrow
703  \mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
704  \mathchardef\sim="3218
705  \mathchardef\simeq="3227
706  \mathchardef\perp="323F
707  \mathchardef\equiv="3211
708  \mathchardef\asymp="3210
709  \mathchardef\smile="315E
710  \mathchardef\frown="315F
711  \mathchardef\leftharpoonup="3128
712  \mathchardef\leftharpoondown="3129
713  \mathchardef\rightharpoonup="312A
714  \mathchardef\rightharpoondown="312B

715

716  \def\joinrel{\mathrel{\mkern-3mu}}
717  \def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
718  \def\Relbar{\mathrel=}
719  \mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
720  \mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
721  \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
722  \def\models{\mathrel|\joinrel=}
723  \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
724  \def\longrightarrow{\relbar\joinrel\rightarrow}
725  \def\longleftarrow{\leftarrow\joinrel\relbar}
726  \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
727  \def\longmapsto{\mapstochar\longrightarrow}
728  \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
729  \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
730  \def\iff{\;\Longleftrightarrow\;}

After defining characters \ldotp and \cdotp that act as math punctuation, \ldots and \cdots macros are defined that give the proper spacing in most circumstances. Vertical and diagonal dots (\vdots and \ddots) are also provided here:

⟨ Supply vertical and diagonal dots ⟩≡

731  \mathchardef\ldotp="613A % ldot as a punctuation mark
732  \mathchardef\cdotp="6201 % cdot as a punctuation mark
733  \mathchardef\colon="603A % colon as a punctuation mark
734  \def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
735  \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
736  \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
737  \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
738  \def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
739  \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}

Most of the math accents are handled entirely by the \mathaccent primitive, but a few of the variable-width ones are constructed the hard way.

⟨ Supply variable-width math accents ⟩≡

740  \def\acute{\mathaccent"7013 }
741  \def\grave{\mathaccent"7012 }
742  \def\ddot{\mathaccent"707F }
743  \def\tilde{\mathaccent"707E }
744  \def\bar{\mathaccent"7016 }
745  \def\breve{\mathaccent"7015 }
746  \def\check{\mathaccent"7014 }
747  \def\hat{\mathaccent"705E }
748  \def\vec{\mathaccent"017E }
749  \def\dot{\mathaccent"705F }
750  \def\widetilde{\mathaccent"0365 }
751  \def\widehat{\mathaccent"0362 }
752  \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
753  \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
754  $\hfil\displaystyle{#1}\hfil$\crcr}}}
755  \def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
756  \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
757  $\hfil\displaystyle{#1}\hfil$\crcr}}}
758  \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}
759  \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
760  $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
761  \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
762  $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
763  \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
764  \def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@
765  #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}}

Now we come to 24 delimiters that can change their size. These are denoted explicitly by a ⟨27-bit number⟩.

If we denote 27-bit number by "cqrstuv, then delimiter codes are assigned by

          \delimiter "cqrstuv, where

c — the class

q — the font family number of rs — the position of the the small variant of the delimiter t — the font family number of uv — the position of the the large variant of the delimiter

After \left and \right commands the class digit is ignored. When TEX is not looking for a delimiter the righmost three digits tuv are ignored, and the remaining four cqrs are treated as a

      \mathchar.

⟨ Supply extensible delimiters ⟩≡

766  \def\lmoustache{\delimiter"437A340 } % top from (, bottom from )
767  \def\rmoustache{\delimiter"537B341 } % top from ), bottom from (
768  \def\lgroup{\delimiter"462833A } % extensible ( with sharper tips
769  \def\rgroup{\delimiter"562933B } % extensible ) with sharper tips
770  \def\arrowvert{\delimiter"26A33C } % arrow without arrowheads
771  \def\Arrowvert{\delimiter"26B33D } % double arrow without arrowheads
772  \def\bracevert{\delimiter"77C33E } % the vertical bar that extends braces
773  \def\Vert{\delimiter"26B30D } \let\|=\Vert
774  \def\vert{\delimiter"26A30C }
775  \def\uparrow{\delimiter"3222378 }
776  \def\downarrow{\delimiter"3223379 }
777  \def\updownarrow{\delimiter"326C33F }
778  \def\Uparrow{\delimiter"322A37E }
779  \def\Downarrow{\delimiter"322B37F }
780  \def\Updownarrow{\delimiter"326D377 }
781  \def\backslash{\delimiter"26E30F } % for double coset G\backslash H
782  \def\rangle{\delimiter"526930B }
783  \def\langle{\delimiter"426830A }
784  \def\rbrace{\delimiter"5267309 } \let\}=\rbrace
785  \def\lbrace{\delimiter"4266308 } \let\{=\lbrace
786  \def\rceil{\delimiter"5265307 }
787  \def\lceil{\delimiter"4264306 }
788  \def\rfloor{\delimiter"5263305 }
789  \def\lfloor{\delimiter"4262304 }

In the plain.tex format and in the Computer Modern math fonts there is only one radical—the square root. The meaning of \radical is analogous to the \delimiter commands. Only the class number is dropped. Joining the radical character and the horizontal rule is done by leeting the radical character have a large depth, and the height which is equal to the rule thickness. The rule is placed on the baseline and the radical character is placed below. Then the whole is centered around math axis.

⟨ Supply extensible delimiters ⟩+≡

790  \def\choose{\atopwithdelims()}
791  \def\brack{\atopwithdelims[]}
792  \def\brace{\atopwithdelims\{\}}

793

794  \def\sqrt{\radical"270370 }

These macros depend on actual sizes of delimiters.

⟨ Provide access to delimiters of various sizes ⟩≡

795  \def\bigl{\mathopen\big}
796  \def\bigm{\mathrel\big}
797  \def\bigr{\mathclose\big}
798  \def\Bigl{\mathopen\Big}
799  \def\Bigm{\mathrel\Big}
800  \def\Bigr{\mathclose\Big}
801  \def\biggl{\mathopen\bigg}
802  \def\biggm{\mathrel\bigg}
803  \def\biggr{\mathclose\bigg}
804  \def\Biggl{\mathopen\Bigg}
805  \def\Biggm{\mathrel\Bigg}
806  \def\Biggr{\mathclose\Bigg}
807  \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
808  \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
809  \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
810  \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
811  \def\n@space{\nulldelimiterspace\z@ \m@th}

The \mathpalette operation constructs a formula in all four styles; it is applied here in the implementation of \phantom, \smash, \root, and other operations. (Actually \phantom and \smash are not perfect: They assume that the current style is uncramped.)

These definitions illustrate how other built-up symbol combinations could be defined to work in all four styles.

The control sequences \sp and \sb are provided for people who can’t easily type ^and _; a “discretionary times sign” \* is defined.

⟨ Provide macros for math formatting ⟩+≡

812  \def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
813  {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
814  \newbox\rootbox
815  \def\root#1\of{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}
816  \mathpalette\r@@t}
817  \def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
818  \dimen@\ht\z@ \advance\dimen@-\dp\z@
819  \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu \box\z@}
820  \newif\ifv@ \newif\ifh@
821  \def\vphantom{\v@true\h@false\ph@nt}
822  \def\hphantom{\v@false\h@true\ph@nt}
823  \def\phantom{\v@true\h@true\ph@nt}
824  \def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
825  \else\let\next\makeph@nt\fi\next}
826  \def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
827  \def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
828  \def\finph@nt{\setbox\tw@\null
829  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
830  \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
831  \def\mathstrut{\vphantom(}
832  \def\smash{\relax % \relax, in case this comes first in \halign
833  \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
834  \fi\next}
835  \def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
836  \def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}

837  \def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}

838

839  \def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
840  \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@
841  \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
842  \def\notin{\mathrel{\mathpalette\c@ncel\in}}
843  \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
844  \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
845  \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
846  \hbox{$#1\rightharpoonup$}\crcr
847  $#1\leftharpoondown$}}}}
848  \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
849  \def\doteq{\buildrel\textstyle.\over=}

850

851  \let\sp=^\let\sb=_
852  \def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}

The 32 common functions whose names generally appear in roman letters.

⟨ Supply common math functions ⟩≡

853  \def\log{\mathop{\rm log}\nolimits}
854  \def\lg{\mathop{\rm lg}\nolimits}
855  \def\ln{\mathop{\rm ln}\nolimits}
856  \def\lim{\mathop{\rm lim}}
857  \def\limsup{\mathop{\rm lim\,sup}}
858  \def\liminf{\mathop{\rm lim\,inf}}
859  \def\sin{\mathop{\rm sin}\nolimits}
860  \def\arcsin{\mathop{\rm arcsin}\nolimits}
861  \def\sinh{\mathop{\rm sinh}\nolimits}
862  \def\cos{\mathop{\rm cos}\nolimits}
863  \def\arccos{\mathop{\rm arccos}\nolimits}
864  \def\cosh{\mathop{\rm cosh}\nolimits}
865  \def\tan{\mathop{\rm tan}\nolimits}
866  \def\arctan{\mathop{\rm arctan}\nolimits}
867  \def\tanh{\mathop{\rm tanh}\nolimits}
868  \def\cot{\mathop{\rm cot}\nolimits}
869  \def\coth{\mathop{\rm coth}\nolimits}
870  \def\sec{\mathop{\rm sec}\nolimits}
871  \def\csc{\mathop{\rm csc}\nolimits}
872  \def\max{\mathop{\rm max}}
873  \def\min{\mathop{\rm min}}
874  \def\sup{\mathop{\rm sup}}
875  \def\inf{\mathop{\rm inf}}
876  \def\arg{\mathop{\rm arg}\nolimits}
877  \def\ker{\mathop{\rm ker}\nolimits}
878  \def\dim{\mathop{\rm dim}\nolimits}
879  \def\hom{\mathop{\rm hom}\nolimits}
880  \def\det{\mathop{\rm det}}
881  \def\exp{\mathop{\rm exp}\nolimits}
882  \def\Pr{\mathop{\rm Pr}}
883  \def\gcd{\mathop{\rm gcd}}
884  \def\deg{\mathop{\rm deg}\nolimits}

885

886  \def\bmod{\nonscript\mskip-\medmuskip\mkern5mu
887  \mathbin{\rm mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip}
888  \def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)}

The definition of \matrix goes to some pains to ensure that two n-rowed matrices will have the same height and the same depth, unless at least one of their rows is unusually big. The definition of \bordermatrix is even more complicated, but it seems to work reasonably well; it uses a constant \p@renwd that represents the width of a big extensible left parenthesis.

⟨ Provide \cases and \matrix macros ⟩≡

889  \def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
890  \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
891  \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
892  \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
893  \mathstrut\crcr\noalign{\kern-\baselineskip}
894  #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
895  \def\pmatrix#1{\left(\matrix{#1}\right)}
896  \newdimen\p@renwd
897  \setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
898  \def\bordermatrix#1{\begingroup \m@th
899  \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
900  \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
901  &&\quad\hfil$##$\hfil\crcr
902  \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
903  #1\crcr\omit\strut\cr}}%
904  \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
905  \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
906  \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
907  \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
908  \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
909  \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}

The value of \lineskiplimit is assumed to be \normallineskiplimit plus the accumulated amount of “opening up.” Thus, the \vskip instructions in \displ@y will compensate for the fact that the first baseline of an alignment is separated by an opened-up baselineskip from the last line preceding the display.

⟨ Provide support to typeset displayed equations ⟩≡

910  \def\openup{\afterassignment\@penup\dimen@=}
911  \def\@penup{\advance\lineskip\dimen@
912  \advance\baselineskip\dimen@
913  \advance\lineskiplimit\dimen@}
914  \def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
915  \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
916  \crcr#1\crcr}}\,}
917  \newif\ifdt@p
918  \def\displ@y{\global\dt@ptrue\openup\jot\m@th
919  \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@
920  \vskip-\lineskiplimit \vskip\normallineskiplimit \fi
921  \else \penalty\interdisplaylinepenalty \fi}}}
922  \def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
923  \def\displaylines#1{\displ@y \tabskip\z@skip
924  \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr

925  #1\crcr}}
926  \def\eqalignno#1{\displ@y \tabskip\centering
927  \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
928  &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
929  &\llap{$\@lign##$}\tabskip\z@skip\crcr
930  #1\crcr}}
931  \def\leqalignno#1{\displ@y \tabskip\centering
932  \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
933  &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
934  &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
935  #1\crcr}}

Below we have an interesting set of macros that convert f''' into f^{\prime\prime\prime}.

⟨ Supply common math functions ⟩+≡

936  {\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
937  \def\prim@s{\prime\futurelet\next\pr@m@s}
938  \def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
939  \else\let\nxt\egroup\fi\fi \nxt}
940  \def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
941  {\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
942  {\catcode`\_=\active \global\let_=\_} % _in math is either subscript or \_

Macros for output

⟨ Prepare page for output ⟩≡

⟨ Supply headers and footers ⟩

⟨ Supply footnotes ⟩

⟨ Supply floating insertions ⟩ ⟨ Supply raggedbottom setting ⟩ ⟨ Set up the output routine ⟩

The \makeheadline macro constructs a vbox of height and depth zero. The magic constant −22.5 pt is equal to

                           \topskip − ⟨height of strut⟩ − 2 \baselineskip

i.e., 10 pt − 8.5 pt − 24 pt (assuming default values of \topskip and the height of the strut); this places the reference point of the headline exactly 24 pt above the reference point of the top line on the page, unless the headline or the top line are excessively large.

The \advancepageno macro normally advances \pageno by +1; but if \pageno is negative (for roman numerals), the advance is by −1. The new value of \pageno will be appropriate for the next time the output routine is called into action.

⟨ Supply headers and footers ⟩≡

943  \countdef\pageno=0 \pageno=1 % first page is number 1
944  \newtoks\headline \headline={\hfil} % headline is normally blank
945  \newtoks\footline \footline={\hss\tenrm\folio\hss}
946  % footline is normally a centered page number in font \tenrm

947 %

948  \def\makeheadline{\vbox to\z@{\vskip-22.5\p@
949  \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}

950  \def\makefootline{\baselineskip24\p@\line{\the\footline}}

951 %

952  \def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
953  \def\nopagenumbers{\footline{\hfil}} % blank out the footline
954  \def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
955  \else\global\advance\pageno\@ne \fi} % increase |pageno|

Ragged-bottom setting is achieved by inserting infinite glue, which overpowers the stretchability of \topskip. This macros assume that \topskip = 10pt

⟨ Supply raggedbottom setting ⟩≡

956  \newif\ifr@ggedbottom
957  \def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
958  \def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom

There are 255 classes of insertions, \insert0 to \insert254, and they are tied to other registers of the same number. For example, \insert100 is connected with \count100, \dimen100, \skip100,

      and \box100.

For our purposes let’s consider a particular class of insertions called class n; we will then be dealing with TEX’s primitive command

\insert n{⟨vertical mode material⟩}

which puts an insertion item into a horizontal or vertical list. For this class of insertions

\box n is where the material appears when a page is output;

\count n is the magnification factor for page breaking; \dimen n is the maximum insertion size per page; \skip n is the extra space to allocate on a page.

For example, material inserted with \insert100 will eventually appear in \box100.

\footnote macro depends on the value of \bigskipamount, and \parindent. Because the value of \vsize (8.9 in) is greater than \dimen\footins (8 in), footnotes never fill up the whole page.

⟨ Supply footnotes ⟩≡

959  \newinsert\footins
960  \def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
961  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
962  #1\@sf\vfootnote{#1}}
963  \def\vfootnote#1{\insert\footins\bgroup
964  \interlinepenalty\interfootnotelinepenalty
965  \splittopskip\ht\strutbox % top baseline for broken footnotes
966  \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
967  \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
968  \textindent{#1}\footstrut\futurelet\next\fo@t}
969  \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
970  \else\let\next\f@t\fi \next}
971  \def\f@@t{\bgroup\aftergroup\@foot\let\next}
972  \def\f@t#1{#1\@foot}
973  \def\@foot{\strut\egroup}
974  \def\footstrut{\vbox to\splittopskip{}}

975

976  \skip\footins=\bigskipamount % space added when footnote is present

977  \count\footins=1000 % footnote magnification factor (1 to 1)
978  \dimen\footins=8in % maximum footnotes per page

979

980  \def\footnoterule{\kern-3\p@
981  \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high

Here the constant 12\p@ = 12pt is hard coded into the format.

⟨ Supply floating insertions ⟩≡

982  \newinsert\topins
983  \newif\ifp@ge \newif\if@mid
984  \def\topinsert{\@midfalse\p@gefalse\@ins}
985  \def\midinsert{\@midtrue\@ins}
986  \def\pageinsert{\@midfalse\p@getrue\@ins}
987  \skip\topins=\z@skip % no space added when a topinsert is present
988  \count\topins=1000 % magnification factor (1 to 1)
989  \dimen\topins=\maxdimen % no limit per page
990  \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
991  \def\endinsert{\egroup % finish the \vbox
992  \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
993  \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
994  \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
995  \if@mid \bigskip\box\z@\bigbreak
996  \else\insert\topins{\penalty100 % floating insertion
997  \splittopskip\z@skip
998  \splitmaxdepth\maxdimen \floatingpenalty\z@
999  \ifp@ge \dimen@\dp\z@
1000  \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
1001  \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}

The value of \boxmaxdepth is set to \maxdepth so that the vbox will be constructed under the assumptions that TEX’s page builder has used to set up \box255.

The \pagecontents macro produces a vertical list for everything that belongs on the main body of the page, namely the contents of \box255 together with illustrations (inserted at the top) and footnotes (inserted at the bottom). \topins and \footins are the insertion class numbers for the two kinds of insertions used in plain TEX; if more classes of insertions are added, \pagecontents should be changed accordingly. Notice that the boxes are unboxed so that the glue coming from insertions can help out the glue on the main page. The \footnoterule macro places a dividing line between the page and its footnotes; it makes a net contribution of 0 pt to the height of the vertical list.

The \dosupereject macro is designed to clear out any insertions that have been held over, whether they are illustrations or footnotes or both. The negative \kern here cancels out the natural space of the \topskip glue that goes above the empty \line; that empty line box prevents the \vfill from disappearing into a page break. The vertical list that results from \dosupereject is placed on TEX’s list of things to put out next, just after the straggling insertions have been reconsidered. Hence another super-eject will occur, and the process will continue until no insertions remain.

⟨ Set up the output routine ⟩≡

1002  \output{\plainoutput}
1003  \def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
1004  \advancepageno
1005  \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}

1006

1007  \def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}

1008

1009  \def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
1010  \line{}\kern-\topskip\nobreak\vfill\supereject\fi}

1011

1012  \def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
1013  \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
1014  \ifvoid\footins\else % footnote info is present
1015  \vskip\skip\footins
1016  \footnoterule
1017  \unvbox\footins\fi
1018  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}

Hyphenation

A discretionary break consists of three sequences of characters called the pre-break, post-break, and no-break texts. The idea is that if a line break occurs here, the pre-break text will appear at the end of the current line and the post-break text will occur at the beginning of the next line; but if no break occurs, the no-break text will appear in the current line. The discretionary are specified by writing

\discretionary{⟨pre-break text⟩}{⟨post-break text⟩}{⟨no-break text⟩}

where the three texts consist entirely of characters, boxes, and kerns. If a word contains discretionary breaks TEX will not hyphenate it.

Hyphenation exceptions are specified with the statements like

           \hyphenation{gal-axy iso-peri-met-ric}

which gives to TEX locations where these words may be hyphenated.

The default values of \hyphenchar is `-.

Sometimes the typewriter fonts are given \hyphenchar⟨font name⟩=-1 which value inhibits hyphenation.

⟨ Read hyphenation patterns ⟩≡

1019  \lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
1020  \input hyphen

Initalization

⟨ Initialize the layout ⟩≡

1021  \normalbaselines\rm % select roman font
1022  \nonfrenchspacing % punctuation affects the spacing

Programming support

⟨ Provide programming constructs ⟩≡

⟨ Supply loops and conditionals ⟩ ⟨ Define \tracingall macro ⟩

The \loop...\repeat macro provides for iterative operations. In this macro and several others, the control sequence ‘\next’ is given a temporary value that is not going to be needed later; thus, \next acts like a “scratch control sequence.”

The macro \newif to be used for definitions of new conditionals. For example, \newif\iffoo

       creates \footrue, \foofalse to go with \iffoo.

⟨ Supply loops and conditionals ⟩≡

1023  \def\loop#1\repeat{\def\body{#1}\iterate}
1024  \def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
1025  \let\repeat=\fi % this makes \loop...\if...\repeat skippable

1026

1027  \outer\def\newif#1{\count@\escapechar \escapechar\m@ne
1028  \expandafter\expandafter\expandafter
1029  \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
1030  \expandafter\expandafter\expandafter
1031  \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
1032  \@if#1{false}\escapechar\count@} % the condition starts out false
1033  \def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
1034  {\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required

⟨ Define \tracingall macro ⟩≡

1035  \def\tracingall{\tracingonline\@ne\tracingcommands\tw@\tracingstats\tw@
1036  \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
1037  \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
1038  \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}

The format name and version number are recorded in control sequences, in order to help the people who might have to explain why something doesn’t work.

⟨ Identify the format ⟩≡

1039  \def\fmtname{plain+W}\def\fmtversion{3.14159+W}

Appendices

Efficiency and memory-space considerations

One difficulty with large sets of macros is that they take up space. It would be nice to preload every macro that every TEX user has ever dreamed up; but there might not be enough room, because TEX’s memory capacity is finite. You might find it necessary to hold back and to load only the macros that are really needed.

How much memory space does a macro require?

There are four kinds of memory involved: token memory, name memory, string memory, and character memory. (If any of these becomes too full, it will be necessary to increase what TEX calls the macro memory size, the hash size, the number of strings, and/or the pool size, respectively. The token memory is most important; a macro takes one cell of token memory for each token in its definition, including the ‘{’ and the ‘}’. For example, the comparatively short definition

\def\example#1\two{\four}

takes five tokens: #1, \two, {_{1}, \four, and }_{2}. Each control sequence also takes up one cell of name memory, one cell of string memory, and as many cells of character memory as there are characters in the name (seven in the case of \example). Character memory is comparatively cheap; four characters, or in some cases five, will fit in the same number of bits as a single cell of token memory, inside the machine. Therefore you don’t save much by choosing short macro names.

TEX will tell you how close you come to exceeding its current memory capacity if you say \tracingstats=1. TEX governs fourteen kinds of memory:

number of strings (names of control sequences and files) pool size (the characters in such names) main memory size (boxes, glue, breakpoints, token lists, characters, etc.) hash size (control sequence names) font memory (font metric data) exception dictionary (hyphenation exceptions) input stack size (simultaneous input sources) semantic nest size (unfinished lists being constructed)

parameter stack size  (macro parameters)

buffer size (characters in lines being read from files) save size (values to restore at group ends) text input levels (\input files and error insertions) grouping levels (unfinished groups) pattern memory (hyphenation pattern data)

The current amount of memory available will also be shown.

One obvious way to keep from loading too many macros is to keep the macro files short and to \input only the ones that you need.

Extensible delimiters

TEX builds large delimiters by using “extensible” characters, which are specified by giving top, midle, bottom, and repeatable characters in an extensible command. For example, the extensible left parentheses in cmex10 are defined by (see Figure 4)

    extensible oct"060": oct"060", 0, oct"100", oct"102";

this says that character code oct"060" specifies an extensible delimiter constructed from itself as the top piece, from character number oct"100" as the bottom piece, and from character number oct"102" as the piece which should be repeated as often as necessary to reach a desired size. In this particular example there is no middle piece, but characters like curly braces have a middle piece as well. A zero value in the top, middle, or bottom position means that no character should be used in that part of the construction; but a zero value in the final position means that character number zero is the repeater. The width of an extensible character is taken to be the width of the repeater.

Also several characters of various sizes can be linked together in a series by means of a charlist command. For example (see Figure 4),

    charlist oct"000": oct"020": oct"022": oct"040";

is used in the font cmex10 to specify the left parentheses that TEX uses in displayed math formulas. TEX follows charlist to make variable-size delimiters and variable-size accents, as well to link

\textstyle and the \displaystyle operators.

Font dimensions

The main information about font consists of the dimensions of the characters. These numbers TEX finds in the font metric files. Except character dimensions, font metric files contain: values for \fontdimen parameters, italic correction of characters, ligature and kerning programs for characters. We change the fontdimen parameters with the (global) assignment:

\fontdimen⟨number⟩⟨font⟩⟨equals⟩⟨dimen⟩,

for example, the assignment \fontdimen8\tenex = 0.6pt changes width of the fraction bar from default 0.4 pt to 0.6 pt.

The first seven fontdimen parameters have the following meaning:

1. the slant per point

2. the interword space; that is used unless \spaceskip is specified

3. interword stretch

4. interword shrink

5. the x-height

6. the quad width (for the font in family 2, 1/18 th quad width is equal to 1 mu)

7. the extra space; that value is added to the interword space used whenever \spacefactor ≥ 2000, unless \xspaceskip is specified.

For the font in family 2 attributes 8–19 specify positioning of fractions, subscripts, superscripts.

fraction numerator attributes: minimum shift up, from the main baseline, of the baseline of the numerator of a generalized fraction

8. num1: for display style

9. num2: for text style or smaller if a fraction bar is present

10. num3: for text style or smaller if no a fraction bar is present

fraction denominator attributes: minimum shift down, from the main baseline, of the baseline of the denominator of a generalized fraction 11. denom1: for display style

12. denom2: for text style or smaller

superscript attributes: minimum shift up, from the main baseline, of the baseline of the superscript

13. sup1: for display style

14. sup2: for text style or smaller, non-cramped

15. sup3: for text style or smaller, cramped

subscript attributes: minimum shift down, from the main baseline, of the baseline of a subscript

16. sub1: when no superscript is present

17. sub2: when superscript is present

script adjustment attributes: for use only with non-glyph, that is, composite objects

18. sup drop: maximum distance of superscript baseline below top of nucleus

19. sub drop: minimum distance of subscript baseline below bottom of nucleus

Delimiter span attributes: height plus depth of delimiter enclosing a generalized fraction.

20. delim1: in display style

21. delim2: in text style or smaller

The last parameter, the height of the math axis, specifies the height above the baseline of the fraction bar, and the centre of large delimiters and most operators and relations. This position is used in vertical centering.

22. axis height.

For the font in family 3 attributes 9–12 determine extra space added when limits are attached to operators. The attribute 8 specifies thickness of the rule used for overlines, underlines, radical extenders, and fraction bars. From that dimension are derived ‘clearances’ around fraction bar. The attribute 13 specifies extra space added above and below attached limits.

8. default rule thickness

9. big op spacing1

10. big op spacing2

11. big op spacing3

12. big op spacing4

13. big op spacing5

We have: big op spacing1(2) ≤ space between upper (lower) limit and top (bottom) of large operator ≤ big op spacing3(4)

fontdimen cmsy10      cmex10      cmtt10      cmr10       cmti10      cmbx10
     1.  0.25pt      0.0pt       0.0pt       0.0pt       0.25pt      0.0pt
     2.  0.0pt       0.0pt       5.24995pt   3.33333pt   3.57774pt   3.83331pt
     3.  0.0pt       0.0pt       0.0pt       1.66666pt   1.53333pt   1.91666pt
     4.  0.0pt       0.0pt       0.0pt       1.11111pt   1.0222pt    1.27777pt
     5.  4.30554pt   4.30554pt   4.30554pt   4.30554pt   4.30554pt   4.44444pt
     6.  10.00002pt  10.00002pt  10.4999pt   10.00002pt  10.22217pt  11.49994pt
     7.  0.0pt       0.0pt       5.24995pt   1.11111pt   1.0222pt    1.27777pt
     8.  6.76508pt   0.39998pt
     9.  3.93732pt   1.11111pt
    10.  4.4373pt    1.66666pt
    11.  6.85951pt   1.99998pt
    12.  3.44841pt   6.0pt

plain.tw  Version 4.12  44

 13.  4.12892pt   1.0pt
 14.  3.62892pt
 15.  2.88889pt
 16.  1.49998pt
 17.  2.47217pt
 18.  3.86108pt
 19.  0.5pt
 20.  23.9pt
 21.  10.09999pt
 22.  2.5pt

Font tables

Figure 1. cmr10—family 0

´ 0  ´ 1  ´ 2  ´ 3  ´ 4  ´ 5  ´ 6  ´ 7
´ 00x  Γ  Δ  Θ  Λ  Ξ  Π  Σ  Υ

                                                                          ˝ 0x

´ 01x  Φ  Ψ  Ω  ff  fi  fl  ffi  ffl
´ 02x  ı  ȷ  `  ´  ˇ  ˘  ¯  ˚

                                                                          ˝ 1x

´ 03x  ¸  ß  æ  œ  ø  Æ  Œ  Ø
´ 04x  !  ”  #  $  %  &  ’

                                                                          ˝ 2x

´ 05x  (  )  *  +  ,  -  .  /
´ 06x  0  1  2  3  4  5  6  7

                                                                          ˝ 3x

´ 07x  8  9  :  ;  ¡  =  ¿  ?
´ 10x  @  A  B  C  D  E  F  G

                                                                          ˝ 4x

´ 11x  H  I  J  K  L  M  N  O
´ 12x  P  Q  R  S  T  U  V  W

                                                                          ˝ 5x

´ 13x  X  Y  Z  [  “  ]  ˆ  ˙
´ 14x  ‘  a  b  c  d  e  f  g

                                                                          ˝ 6x

´ 15x  h  i  j  k  l  m  n  o
´ 16x  p  q  r  s  t  u  v  w

                                                                          ˝ 7x

´ 17x  x  y  z  –  —  ˝  ˜  ¨

          ˝ 8      ˝ 9      ˝ A      ˝ B      ˝ C      ˝ D      ˝ E      ˝ F

Figure 2. cmmi10—family 1

´ 0  ´ 1  ´ 2  ´ 3  ´ 4  ´ 5  ´ 6  ´ 7
´ 00x  Γ  Δ  Θ  Λ  Ξ  Π  Σ  Υ ˝ 0x ´ 01x  Φ  Ψ  Ω  α  β  γ  δ  ϵ
´ 02x  ζ  η  θ  ι  κ  λ  μ  ν ˝ 1x ´ 03x  ξ  π  ρ  σ  τ  υ  ϕ  χ
´ 04x  ψ  ω  ε  ϑ  ϖ  ϱ  ς  φ ˝ 2x ´ 05x  ↼  ↽  ⇀  ⇁  ▷  ◁
´ 06x  0  1  2  3  4  5  6  7 ˝ 3x ´ 07x  8  9  .  ,  <  /  >  ⋆
´ 10x  ∂  A  B  C  D  E  F  G ˝ 4x ´ 11x  H  I  J  K  L  M  N  O
´ 12x  P  Q  R  S  T  U  V  W ˝ 5x ´ 13x  X  Y  Z  ♭  ♮  ♯  ⌣  ⌢
´ 14x  ℓ  a  b  c  d  e  f  g ˝ 6x ´ 15x  h  i  j  k  l  m  n  o
´ 16x  p  q  r  s  t  u  v  w ˝ 7x ´ 17x  x  y  z  ı  ȷ  ℘

             ˝ 8      ˝ 9      ˝ A      ˝ B      ˝ C      ˝ D      ˝ E      ˝ F

Figure 3. cmsy10—family 2

´ 0  ´ 1  ´ 2  ´ 3  ´ 4  ´ 5  ´ 6  ´ 7
´ 00x  −  ·  ×  ∗  ÷  ⋄  ±  ∓ ˝ 0x ´ 01x  ⊕  ⊖  ⊗  ⊘  ⊙  ◯  ∘  •
´ 02x  ≍  ≡  ⊆  ⊇  ≤  ≥  ⪯  ⪰ ˝ 1x ´ 03x  ∼  ≈  ⊂  ⊃  ≪  ≫  ≺  ≻
´ 04x  ←  →  ↑  ↓  ↔  ↗  ↘  ≃ ˝ 2x ´ 05x  ⇐  ⇒  ⇑  ⇓  ⇔  ↖  ↙  ∝
´ 06x  ′  ∞  ∈  ∋  △  ▽ ˝ 3x ´ 07x  ∀  ∃  ¬  ∅  ℜ  ℑ  ⊤  ⊥
´ 10x  ℵ  A  B  C  D  E  F  G ˝ 4x ´ 11x  H  I  J  K  L  M  N  O
´ 12x  P  Q  R  S  T  U  V  W ˝ 5x ´ 13x  X  Y  Z  ∪  ∩  ⊎  ∧  ∨
´ 14x  ⊢  ⊣  ⌊  ⌋  ⌈  ⌉  {  } ˝ 6x ´ 15x  ⟨  ⟩  |  ∥  ↕  ⇕  \  ≀
´ 16x  √  ⨿  ∇  ∫  ⊔  ⊓  ⊑  ⊒ ˝ 7x ´ 17x  §  †  ‡  ¶  ♣  ♢  ♡  ♠

             ˝ 8      ˝ 9      ˝ A      ˝ B      ˝ C      ˝ D      ˝ E      ˝ F

Figure 4. cmex10—family 3

´ 0  ´ 1  ´ 2  ´ 3  ´ 4  ´ 5  ´ 6  ´ 7
´ 00x  (  )  [  ]  ⌊  ⌋  ⌈  ⌉ ˝ 0x ´ 01x  {  }  ⟨  ⟩  |  ∥  /  \
´ 02x  (  )  (  )  [  ]  ⌊  ⌋

                                                                          ˝ 1x

´ 03x  ⌈  ⌉  {  }  ⟨  ⟩  /  \

´ 04x  (  )  [  ]  ⌊  ⌋  ⌈  ⌉

                                                                          ˝ 2x

´ 05x  {  }  ⟨  ⟩  /  \  /  \
´ 06x

                                                                          ˝ 3x

´ 07x
´ 10x  ⟨  ⟩  ⨆  ⨆

                                                                          ˝ 4x

´ 11x  ∮  ∮  ⨀  ⨀  ⨁  ⨁  ⨂  ⨂
´ 12x  ∑  ∏  ∫  ⋃  ⋂  ⨄  ⋀  ⋁ ˝ 5x
´ 13x  ∑  ∏  ∫  ⋃  ⋂  ⨄  ⋀  ⋁
´ 14x  ∐  ∐

                                                                          ˝ 6x

´ 15x  [  ]  ⌊  ⌋  ⌈  ⌉  {  }
´ 16x  √  √  √  √  √

                                                                          ˝ 7x

´ 17x

          ˝ 8      ˝ 9      ˝ A      ˝ B      ˝ C      ˝ D      ˝ E      ˝ F

plain.tw  Version 4.12  48

User-level definitions

\@M 4_{24}
\@MM 4_{25}
\@cclv 4_{21}

\@cclvi 4_{22}, 14_{265}, 14_{269},

14_{273}

\@foot 37_{973}

\@if 40_{1029}, 40_{1031}, 40_{1033}

\@ins 38_{990}
\@lign 35_{922}
\@m 4_{23}
\@ne 4_{17}
\@nother 23_{487}
\@penup 35_{911}

\@sf 37_{961}

\@vereq 34_{840}
\AA 7_{98}
\aa 7_{92}
\active 4_{12}
\acute 31_{740}
\advancepageno 37_{954}
\AE 7_{88}
\ae 6_{85}
\aleph 28_{591}
\alloc@ 14_{274}
\allocationnumber 14_{253}, 15_{285}
\allowbreak 22_{440}
\alpha 27_{551}
\amalg 29_{650}
\angle 28_{607}
\approx 30_{688}
\arccos 34_{863}
\arcsin 34_{860}
\arctan 34_{866}

\arg 34_{876}

\Arrowvert 32_{771}
\arrowvert 32_{770}

\ast 29_{666}

\asymp 30_{708}

\b 7_{113}

\backslash 32_{781}

\bar 31_{744}

\beginsection 24_{514}
\beta 27_{552}

\bf 13_{236} \Big 33_{808} \big 33_{807}

\bigbreak 22_{452}
\bigcap 28_{626}
\bigcirc 29_{663}
\bigcup 28_{627}
\Bigg 33_{810}
\bigg 33_{809}
\Biggl 33_{804}
\biggl 33_{801}
\Biggm 33_{805}
\biggm 33_{802}

\Biggr 33_{806}
\biggr 33_{803}
\Bigl 33_{798}
\bigl 33_{795}
\Bigm 33_{799}
\bigm 33_{796}
\bigodot 28_{633}
\bigoplus 28_{632}
\bigotimes 28_{631}
\Bigr 33_{800}
\bigr 33_{797}
\bigskip 21_{422}
\bigskipamount 20_{387}
\bigsqcup 28_{635}
\bigtriangledown 29_{640}
\bigtriangleup 29_{639}
\biguplus 28_{625}
\bigvee 28_{623}
\bigwedge 28_{624}
\bmod 35_{886}

\body 40_{1023}

\bordermatrix 35_{898}

\bot 28_{606}

\bowtie 30_{721}
\brace 32_{792}
\braceld 25_{536}
\bracelu 25_{537}
\bracerd 25_{536}
\braceru 25_{537}
\bracevert 32_{772}
\brack 32_{791}
\break 22_{438}
\breve 31_{745}
\buildrel 34_{848}
\bullet 29_{652}

\bye 26_{546} \c 7_{115}

\c@ncel 34_{843}

\cal 12_{230} \cap 29_{643}

\cases 35_{889}
\cdot 29_{665}
\cdotp 31_{732}
\cdots 31_{735}
\centering 15_{291}
\centerline 22_{457}
\ch@ck 15_{287}
\check 31_{746}

\chi 27_{571}

\choose 32_{790}
\circ 29_{662}
\cleartabs 23_{477}
\clubsuit 28_{618}
\colon 31_{733}
\cong 34_{839}
\coprod 28_{622}

                                 \copyright 7_{117}

\cos 34_{862}

                                 \cosh 34_{864}

\cot 34_{868}

                                 \coth 34_{869}
                                 \count@ 14_{256}

\cr 23_{494}, 35_{899}

\csc 34_{871} \cup 29_{644} \d 7_{112}

                                 \dag 7_{103}
                                 \dagger 29_{646}
                                 \dashv 29_{674}
                                 \ddag 7_{104}
                                 \ddagger 29_{645}
                                 \ddot 31_{742}
                                 \ddots 31_{738}

\deg 34_{884}

                                 \Delta 27_{581}
                                 \delta 27_{554}

\det 34_{880}

                                 \diamond 29_{651}
                                 \diamondsuit 28_{619}

\dim 34_{878}

                                 \dimen@ 14_{257}
                                 \dimen@i 14_{258}
                                 \dimen@ii 14_{259}
                                 \displ@y 35_{918}
                                 \displaylines 35_{923}

\div 29_{654}

                                 \dospecials 4_{15}
                                 \dosupereject 39_{1009}

\dot 31_{749}

                                 \doteq 34_{849}
                                 \dotfill 25_{529}
                                 \dots 7_{119}
                                 \Downarrow 32_{779}
                                 \downarrow 32_{776}
                                 \downbracefill 25_{538}
                                 \eject 22_{444}

\ell 28_{595}

                                 \empty 21_{401}
                                 \emptyset 28_{602}
                                 \endinsert 38_{991}
                                 \enskip 21_{416}
                                 \enspace 21_{414}
                                 \epsilon 27_{555}
                                 \eqalign 35_{914}
                                 \eqalignno 36_{926}
                                 \equiv 30_{707}

\eta 27_{557}

                                 \exists 28_{613}

\exp 34_{881}

                                 \expandafter 14_{268}
                                 \f@@t 37_{971}

\f@t 37_{972}

\filbreak 22_{442}
\finph@nt 33_{828}
\finsm@sh 34_{837}
\flat 28_{615}
\fmtname 40_{1039}
\fmtversion 40_{1039}
\fo@t 37_{969}
\folio 37_{952}
\footline 36_{945}
\footnote 37_{960}
\footnoterule 38_{980}
\footstrut 37_{974}
\forall 28_{612}
\frenchspacing 25_{524}
\frown 30_{710}
\Gamma 27_{580}
\gamma 27_{553}

\gcd 34_{883} \geq 30_{685} \gg 30_{697}

\goodbreak 22_{443}
\grave 31_{741}

\H 7_{129}

\hang 24_{508}

\hat 31_{747}

\hbar 28_{592}
\headline 36_{944}
\heartsuit 28_{620}
\hgl@ 22_{433}
\hglue 22_{432}
\hideskip 15_{290}
\hidewidth 23_{468}

\hom 34_{879}

\hookleftarrow 30_{720}
\hookrightarrow 30_{719}
\hphantom 33_{822}
\hrulefill 25_{528}

\i 7_{91}

\ialign 23_{469}
\if@cr 23_{474}
\if@mid 38_{983}
\ifdt@p 35_{917}

\iff 30_{730}

\ifh@ 33_{820}
\ifp@ge 38_{983}
\ifr@ggedbottom 37_{956}
\ifus@ 23_{474}
\ifv@ 33_{820}

\Im 28_{598}

\imath 28_{593}

\in 30_{695} \inf 34_{875}

\infty 28_{600}

\insc@unt 14_{252}, 14_{262}, 14_{263},

14_{264}, 14_{266} \int 28_{628}

\interdisplaylinepenalty 20_{392}
\interfootnotelinepenalty 20_{393}
\intop 28_{628}

\iota 27_{559}

\it 13_{232}

\item 24_{510}
\itemitem 24_{511}
\iterate 40_{1024}

\j 7_{91}

\jmath 28_{594}
\joinrel 30_{716}

\jot 20_{391}

\kappa 27_{560}

\ker 34_{877} \L 7_{94} \l 7_{93}

\Lambda 27_{583}
\lambda 27_{561}
\langle 32_{783}
\lbrace 32_{785}
\lbrack 21_{411}
\lceil 32_{787}
\ldotp 31_{731}
\ldots 31_{734}
\leavevmode 7_{96}
\Leftarrow 30_{681}
\leftarrow 30_{701}
\leftarrowfill 25_{533}
\leftharpoondown 30_{712}
\leftharpoonup 30_{711}
\leftline 22_{455}
\Leftrightarrow 29_{680}
\leftrightarrow 30_{700}

\leq 30_{684}

\leqalignno 36_{931}
\lfloor 32_{789}

\lg 34_{854}

\lgroup 32_{768}
\lhook 30_{719}

\lim 34_{856}

\liminf 34_{858}
\limsup 34_{857}
\line 22_{454}

\ll 30_{698}

\llap 22_{460}
\lmoustache 32_{766}

\ln 34_{855} \log 34_{853}

\Longleftarrow 30_{726}
\longleftarrow 30_{725}
\Longleftrightarrow 30_{729}
\longleftrightarrow 30_{728}
\longmapsto 30_{727}
\Longrightarrow 30_{723}
\longrightarrow 30_{724}

\loop 40_{1023} \lq 21_{410}

\m@g 6_{78}
\m@ketabbox 23_{491}
\m@ne 14_{254}
\m@th 22_{462}
\magnification 6_{77}

                                 \magstep 6_{76}
                                 \magstephalf 6_{75}
                                 \makefootline 37_{950}
                                 \makeheadline 36_{948}
                                 \makeph@nt 33_{826}
                                 \makesm@sh 33_{835}
                                 \mapsto 30_{703}
                                 \mapstochar 30_{703}
                                 \mathhexbox 7_{101}
                                 \mathpalette 33_{812}
                                 \mathph@nt 33_{827}
                                 \mathsm@sh 33_{836}
                                 \mathstrut 33_{831}
                                 \matrix 35_{891}

\max 34_{872}

                                 \maxdimen 15_{289}
                                 \medbreak 22_{450}
                                 \medskip 21_{421}
                                 \medskipamount 20_{386}

\mid 29_{673}

                                 \midinsert 38_{985}

\min 34_{873} \mit 12_{228}

                                 \models 30_{722}

\mp 29_{660}

                                 \mscount 23_{470}

\mu 27_{562}

                                 \multispan 23_{471}
                                 \n@space 33_{811}
                                 \nabla 28_{603}
                                 \narrower 24_{512}
                                 \natural 28_{616}
                                 \nearrow 29_{676}

\neg 28_{614}

                                 \negthinspace 21_{413}

\neq 30_{683}

                                 \newbox 14_{266}
                                 \newcount 14_{262}
                                 \newdimen 14_{263}
                                 \newfam 14_{272}
                                 \newhelp 14_{268}
                                 \newif 40_{1027}
                                 \newinsert 14_{279}
                                 \newlanguage 14_{273}
                                 \newmuskip 14_{265}
                                 \newread 14_{270}
                                 \newskip 14_{264}
                                 \newtoks 14_{269}
                                 \newwrite 14_{271}

\next 7_{132}, 33_{824}, 33_{833} \ni 30_{696}

                                 \nobreak 22_{439}
                                 \nointerlineskip 21_{424}
                                 \nonfrenchspacing 25_{526}
                                 \nopagenumbers 37_{953}
                                 \normalbaselines 20_{394}
                                 \normalbaselineskip 20_{388}
                                 \normalbottom 37_{958}
                                 \normallineskip 20_{389}

\normallineskiplimit 20_{390}

\not 30_{699}

\notin 34_{842}

\nu 27_{563}

\null 21_{402}
\nwarrow 29_{678}

\nxt 23_{480} \O 7_{90} \o 6_{87}

\o@lign 7_{108}
\oalign 7_{107}
\obeyspaces 21_{408}
\odot 29_{655}
\OE 7_{89}
\oe 6_{86}
\offinterlineskip 21_{425}
\oint 28_{634}
\ointop 28_{634}
\oldstyle 12_{228}
\Omega 27_{590}
\omega 27_{573}
\ominus 29_{658}
\ooalign 7_{109}
\openup 35_{910}
\oplus 29_{659}
\oslash 29_{656}
\otimes 29_{657}
\overbrace 31_{758}
\overleftarrow 31_{755}
\overrightarrow 31_{752}

\P 7_{106} \p@ 15_{292}

\p@renwd 35_{896}
\pagebody 39_{1007}
\pagecontents 39_{1012}
\pageinsert 38_{986}
\pageno 36_{943}
\par 4_{13}
\parallel 29_{672}
\partial 28_{599}
\penalty 22_{435}
\perp 30_{706}
\ph@nt 33_{824}
\phantom 33_{823}

\Phi 27_{588} \phi 27_{570} \Pi 27_{585} \pi 27_{565}

\plainoutput 38_{1003}

\pm 29_{661}

\pmatrix 35_{895}
\pmod 35_{888}

\Pr 34_{882}

\pr@@@s 36_{940}
\pr@@@t 36_{940}
\pr@m@s 36_{938}
\prec 30_{687}
\preceq 30_{690}
\prim@s 36_{937}

                                 \prime 28_{601}
                                 \proclaim 24_{517}
                                 \prod 28_{629}
                                 \propto 29_{669}

\Psi 27_{589} \psi 27_{572}

                                 \qquad 21_{418}
                                 \quad 21_{417}
                                 \r@@t 33_{817}
                                 \raggedbottom 37_{957}
                                 \raggedright 25_{520}
                                 \rangle 32_{782}
                                 \rbrace 32_{784}
                                 \rbrack 21_{411}
                                 \rceil 32_{786}

\Re 28_{597}

                                 \relax 14_{267}
                                 \Relbar 30_{718}
                                 \relbar 30_{717}
                                 \removelastskip 22_{447}
                                 \rfloor 32_{788}
                                 \rgroup 32_{769}

\rho 27_{566}

                                 \rhook 30_{720}
                                 \Rightarrow 30_{682}
                                 \rightarrow 30_{702}
                                 \rightarrowfill 25_{530}
                                 \rightharpoondown 30_{714}
                                 \rightharpoonup 30_{713}
                                 \rightleftharpoons 34_{844}
                                 \rightline 22_{456}
                                 \rlap 22_{459}
                                 \rlh@ 34_{845}

\rm 12_{226}

                                 \rmoustache 32_{767}
                                 \root 33_{815}
                                 \rootbox 33_{814}

\rq 21_{410} \S 7_{105}

                                 \s@tcols 23_{485}
                                 \s@tt@b 23_{482}
                                 \searrow 29_{677}

\sec 34_{870}

                                 \setminus 29_{664}
                                 \sett@b 23_{480}
                                 \settabs 23_{478}
                                 \sh@ft 7_{110}
                                 \sharp 28_{617}
                                 \showhyphens 26_{544}
                                 \Sigma 27_{586}
                                 \sigma 27_{567}

\sim 30_{704}

                                 \simeq 30_{705}

\sin 34_{859}

                                 \sinh 34_{861}

\sixt@@n 4_{20}, 14_{270}, 14_{271},

14_{272}

                                 \skew 31_{764}
                                 \skip@ 14_{260}

\sl 13_{234}

                                                                  \slash 22_{436}
                                                                  \smallbreak 22_{448}
                                                                  \smallint 28_{636}
                                                                  \smallskip 21_{420}
                                                                  \smallskipamount 20_{385}
                                                                  \smash 33_{832}
                                                                  \smile 30_{709}
                                                                  \sp@n 23_{473}
                                                                  \space 20_{400}
                                                                  \spadesuit 28_{621}
                                                                  \sqcap 29_{647}
                                                                  \sqcup 29_{648}
                                                                  \sqrt 32_{794}
                                                                  \sqsubseteq 29_{670}
                                                                  \sqsupseteq 29_{671}
                                                                  \ss 6_{84}
                                                                  \star 29_{668}
                                                                  \strut 23_{467}
                                                                  \strutbox 23_{465}
                                                                  \subset 30_{692}
                                                                  \subseteq 30_{694}
                                                                  \succ 30_{686}
                                                                  \succeq 30_{689}

\sum 28_{630} \sup 34_{874}

                                                                  \supereject 22_{445}
                                                                  \supset 30_{691}
                                                                  \supseteq 30_{693}
                                                                  \surd 28_{604}
                                                                  \swarrow 29_{679}

\t 7_{132}

                                                                  \t@bb@x 24_{501}
                                                                  \t@bbox 24_{500}
                                                                  \tabalign 23_{483}
                                                                  \tabs 23_{475}
                                                                  \tabsdone 23_{475}
                                                                  \tabsyet 23_{475}

\tan 34_{865}

                                                                  \tanh 34_{867}

\tau 27_{568}

                                                                  \TeX 7_{120}
                                                                  \textindent 24_{509}
                                                                  \Theta 27_{582}
                                                                  \theta 27_{558}
                                                                  \thinspace 21_{412}
                                                                  \thr@@ 4_{19}
                                                                  \tilde 31_{743}
                                                                  \times 29_{667}
                                                                  \toks@ 14_{261}

\top 28_{605}

                                                                  \topglue 21_{428}
                                                                  \topinsert 38_{984}
                                                                  \tracingall 40_{1035}
                                                                  \triangle 28_{611}
                                                                  \triangleleft 29_{637}
                                                                  \triangleright 29_{638}

\tt 13_{239}

                                                                  \ttraggedright 25_{522}

\tw@ 4_{18}

\u 7_{125}

\underbar 22_{463}
\underbrace 31_{761}
\Uparrow 32_{778}
\uparrow 32_{775}
\upbracefill 26_{541}
\Updownarrow 32_{780}
\updownarrow 32_{777}
\uplus 29_{649}
\Upsilon 27_{587}
\upsilon 27_{569}

\v 7_{124}

\varepsilon 27_{574}

                                 \varphi 27_{579}
                                 \varpi 27_{576}
                                 \varrho 27_{577}
                                 \varsigma 27_{578}
                                 \vartheta 27_{575}
                                 \vdash 29_{675}
                                 \vdots 31_{736}

\vec 31_{748}
\vee 29_{642}

                                 \Vert 32_{773}
                                 \vert 32_{774}
                                 \vfootnote 37_{963}
                                 \vgl@ 22_{430}
                                 \vglue 21_{429}

                                                                  \voidb@x 15_{295}
                                                                  \vphantom 33_{821}
                                                                  \wedge 29_{641}
                                                                  \widehat 31_{751}
                                                                  \widetilde 31_{750}
                                                                  \wlog 14_{255}

\wp 28_{596}
\wr 29_{653}
\Xi 27_{584}
\xi 27_{564}
\z@ 15_{293}

                                                                  \z@skip 15_{294}
                                                                  \zeta 27_{556}

Definitions

\@M 22_{435}, 22_{438}, 22_{439} \@MM 22_{445}, 37_{966}, 38_{1005}

\@cclv 39_{1013}
\@crfalse 24_{497}
\@crtrue 23_{494}

\@foot 37_{971}, 37_{972} \@if 40_{1032} \@ins 38_{984}, 38_{985}, 38_{986} \@lign 35_{924}, 36_{927}, 36_{928},

36_{929}, 36_{932}, 36_{933}, 36_{934} \@m 6_{76}, 25_{524}, 25_{525} \@midfalse 38_{984}, 38_{986}, 38_{994}

\@midtrue 38_{985}

\@ne 12_{228}, 14_{274}, 23_{472}, 24_{503}, 24_{504}, 24_{505}, 24_{506}, 35_{904}, 35_{905}, 35_{906}, 35_{907}, 35_{908}, 35_{909}, 37_{955}, 40_{1035}, 40_{1036},

40_{1037}

\@nother 23_{486}
\@penup 35_{910}

\@sf 37_{960}, 37_{962}

\@vereq 34_{839}
\abovedisplayshortskip 19_{374}
\abovedisplayskip 19_{373}

\accent 7_{115}, 7_{122}, 7_{123}, 7_{124}, 7_{125}, 7_{126}, 7_{127}, 7_{128},

7_{129}, 7_{130}, 7_{131}, 7_{132},
7_{92}

\active 4_{12}, 4_{13}, 21_{405}, 21_{406},

21_{408}, 36_{936}, 36_{941}, 36_{942}

\adjdemerits 18_{316}

\advance 7_{98}, 14_{274}, 14_{279}, 23_{473}, 23_{489}, 24_{512}, 24_{513}, 33_{818}, 35_{911}, 35_{912}, 35_{913}, 37_{954}, 37_{955}, 38_{992}, 38_{993}

\advancepageno 38_{1004}
\afterassignment 6_{77}, 21_{429},

22_{432}, 23_{480}, 35_{910}

\aftergroup 37_{971}

\alloc@ 14_{262}, 14_{263}, 14_{264}, 14_{265}, 14_{266}, 14_{269}, 14_{270},

14_{271}, 14_{272}, 14_{273}

\allocationnumber 14_{276}, 14_{277},

14_{278}, 15_{284}, 15_{286}

\allowbreak 35_{888}
\atopwithdelims 32_{790}, 32_{791},

32_{792}

\baselineskip 7_{107}, 20_{395},

21_{425}, 31_{736}, 35_{893}, 35_{894}, 35_{902}, 35_{908}, 35_{912}, 37_{950}

\begingroup 23_{491}, 35_{898}, 38_{990}

\belowdisplayshortskip 19_{376}
\belowdisplayskip 19_{375}

\bf 24_{516}, 24_{518} \bffam 13_{236}, 13_{237}, 13_{238} \bgroup 21_{404}, 24_{497}, 24_{498},

24_{500}, 36_{936}, 37_{963}, 37_{969},
37_{971}, 38_{990}

\Big 33_{798}, 33_{799}, 33_{800} \big 33_{795}, 33_{796}, 33_{797}

                                 \bigbreak 38_{995}

\Bigg 33_{804}, 33_{805}, 33_{806} \bigg 33_{801}, 33_{802}, 33_{803} \bigskip 22_{453}, 24_{515}, 38_{1001},

38_{995}

                                 \bigskipamount 20_{387}, 21_{422},

22_{452}, 37_{976}

                                 \binoppenalty 18_{303}

\body 40_{1024}

\box 14_{266}, 15_{283}, 22_{464}, 24_{506}, 24_{507}, 33_{819}, 33_{830}, 34_{837}, 35_{907}, 35_{909}, 38_{1001}, 38_{995}

                                 \boxmaxdepth 19_{357}, 39_{1007}

\braceld 25_{538}, 25_{539}, 26_{541},

26_{543}

\bracelu 26_{540}, 26_{542} \bracerd 26_{540}, 26_{542} \braceru 25_{539}, 26_{543}

                                 \break 22_{444}
                                 \brokenpenalty 18_{308}
                                 \buildrel 34_{849}
                                 \c@ncel 34_{842}
                                 \catcode 3_{1}, 3_{2}, 4_{10}, 4_{12},

4_{13}, 4_{3}, 4_{4}, 4_{5}, 4_{6}, 4_{7},
4_{8}, 4_{9}, 21_{405}, 21_{406}, 21_{408},
36_{936}, 36_{941}, 36_{942}

                                 \cdotp 31_{735}

\centering 15_{291}, 36_{926}, 36_{928},

36_{931}, 36_{933}

\ch@ck 14_{275}, 14_{280}, 15_{281},

15_{282}, 15_{283}

\char 7_{114}, 7_{116}, 7_{93}, 7_{94},

7_{99}, 34_{852}

\cleaders 25_{529}, 25_{531}, 25_{534}

                                 \clubpenalty 18_{305}
                                 \columns 23_{485}

\copy 23_{467}, 23_{492}, 33_{819} \count 13_{241}, 13_{242}, 13_{243},

13_{244}, 13_{245}, 14_{246}, 14_{247},
14_{248}, 14_{249}, 14_{250}, 14_{251},
14_{262}, 14_{274}, 14_{276}, 14_{280},
15_{287}, 38_{977}, 38_{988}

\count@ 6_{77}, 6_{78}, 22_{433}, 22_{434},

23_{485}, 23_{486}, 23_{487}, 23_{489},
40_{1027}, 40_{1032}

\cr 20_{398}, 35_{899}, 35_{903}

\crcr 7_{108}, 7_{112}, 7_{113}, 7_{116},

7_{117}, 23_{494}, 24_{498}, 28_{607},
28_{608}, 28_{610}, 31_{752}, 31_{753},
31_{754}, 31_{755}, 31_{756}, 31_{757},
31_{758}, 31_{759}, 31_{760}, 31_{761},
31_{762}, 31_{763}, 34_{841}, 34_{843},

34_{846}, 35_{890}, 35_{892}, 35_{893},
35_{894}, 35_{899}, 35_{901}, 35_{902},
35_{903}, 35_{916}, 35_{924}, 36_{925},
36_{929}, 36_{930}, 36_{934}, 36_{935}

\csname 14_{268}, 40_{1033}

                                                                  \defaulthyphenchar 18_{338}
                                                                  \defaultskewchar 18_{339}

\delcode 12_{216}, 12_{217}, 12_{218}, 12_{219}, 12_{220}, 12_{221}, 12_{222},

12_{223}, 12_{224}

\delimiter 32_{766}, 32_{767}, 32_{768}, 32_{769}, 32_{770}, 32_{771}, 32_{772}, 32_{773}, 32_{774}, 32_{775}, 32_{776}, 32_{777}, 32_{778}, 32_{779}, 32_{780}, 32_{781}, 32_{782}, 32_{783}, 32_{784}, 32_{785}, 32_{786}, 32_{787}, 32_{788},

32_{789}

                                                                  \delimiterfactor 19_{342}
                                                                  \delimitershortfall 19_{359}

\dimen 6_{79}, 7_{110}, 7_{111}, 14_{263},

15_{281}, 38_{978}, 38_{989}

\dimen@ 7_{98}, 7_{99}, 22_{430}, 22_{431}, 23_{485}, 23_{487}, 23_{489}, 33_{818}, 33_{819}, 35_{910}, 35_{911}, 35_{912}, 35_{913}, 38_{1000}, 38_{992}, 38_{993}, 38_{994}, 38_{999}, 39_{1013}, 39_{1018}

\dimen@ii 23_{487}, 23_{488}, 23_{489}

                                                                  \discretionary 34_{852}

\displ@y 35_{923}, 36_{926}, 36_{931}

                                                                  \displaystyle 31_{754}, 31_{757},

31_{760}, 31_{762}, 33_{812}, 35_{915}, 35_{924}, 36_{927}, 36_{928}, 36_{932},

36_{933}

                                                                  \displaywidowpenalty 18_{307}
                                                                  \displaywidth 35_{924}, 36_{927},

36_{932}, 36_{934}

\divide 23_{487}, 31_{764}

\do 4_{15}, 4_{16}

                                                                  \dosupereject 38_{1005}
                                                                  \doublehyphendemerits 18_{314}
                                                                  \downbracefill 31_{759}

\dp 22_{463}, 33_{818}, 33_{829}, 34_{837}, 37_{966}, 38_{992}, 38_{999}, 39_{1013}

                                                                  \dt@pfalse 35_{919}
                                                                  \dt@ptrue 35_{918}

\egroup 21_{404}, 23_{494}, 24_{501}, 24_{502}, 36_{939}, 36_{940}, 37_{973},

38_{991}

\else 7_{116}, 7_{119}, 15_{288}, 22_{447}, 23_{467}, 23_{481}, 24_{502}, 24_{505}, 33_{825}, 33_{833}, 35_{921}, 36_{938}, 36_{939}, 37_{952}, 37_{955}, 37_{970}, 38_{1001}, 38_{1005}, 38_{996}, 39_{1012},

39_{1014}, 40_{1024}

                                                                  \empty 37_{960}

\end 26_{546}

\endcsname 14_{268}, 40_{1033}
\endgraf 20_{398}

\endgroup 23_{495}, 35_{909}, 38_{1001} \endline 20_{398}, 35_{899} \enspace 24_{509}, 24_{518}

\errmessage 15_{288}
\errorcontextlines 19_{349}
\errorstopmode 40_{1038}
\escapechar 40_{1027}, 40_{1032}

\everycr 23_{469}, 35_{919}, 35_{922}

\exhyphenpenalty 18_{302}, 22_{436}
\expandafter 40_{1028}, 40_{1030},

40_{1033}

\f@@t 37_{969}

\f@t 37_{970} \fam 12_{226}, 12_{228}, 12_{230}, 13_{232},

13_{234}, 13_{236}, 13_{239}, 14_{272} \fi 6_{76}, 7_{116}, 7_{119}, 15_{288},

22_{447}, 22_{449}, 22_{451}, 22_{453}, 23_{467}, 23_{481}, 23_{495}, 24_{505}, 24_{506}, 24_{519}, 33_{825}, 33_{829}, 33_{830}, 33_{834}, 35_{920}, 35_{921}, 36_{939}, 37_{952}, 37_{955}, 37_{961}, 37_{970}, 38_{1001}, 38_{1005}, 38_{994}, 39_{1010}, 39_{1012}, 39_{1017}, 39_{1018}, 40_{1024}, 40_{1025}

\finalhyphendemerits 18_{315}
\finph@nt 33_{826}, 33_{827}
\finsm@sh 33_{835}, 33_{836}
\fivebf 5_{44}, 13_{238}

\fivei 8_{140}, 10_{156}, 12_{227}

\fiverm 5_{31}, 12_{225}

\fivesy 8_{147}, 10_{157}, 12_{229}

\floatingpenalty 37_{966}, 38_{998}
\fo@t 37_{968}
\folio 36_{945}

\font 5_{26}, 5_{27}, 5_{28}, 5_{29}, 5_{30}, 5_{31}, 5_{33}, 5_{34}, 5_{36}, 5_{37}, 5_{39}, 5_{40}, 5_{41}, 5_{42}, 5_{43}, 5_{44}, 5_{46}, 5_{47}, 5_{48}, 5_{50}, 5_{52}, 5_{53}, 5_{54}, 5_{56}, 5_{57}, 5_{58}, 5_{59}, 5_{61}, 6_{63}, 6_{65}, 6_{67}, 6_{69}, 6_{70}, 6_{71}, 6_{73}, 7_{110}, 7_{132}, 8_{135}, 8_{136}, 8_{137}, 8_{138}, 8_{139}, 8_{140}, 8_{142}, 8_{143}, 8_{144}, 8_{145}, 8_{146}, 8_{147}, 8_{149}, 9_{151}, 9_{152}

\fontdimen 7_{110}

\footins 6_{79}, 37_{959}, 37_{963}, 37_{976}, 38_{977}, 38_{978}, 39_{1014}, 39_{1015}, 39_{1017}

\footline 36_{945}, 37_{950}, 37_{953}

\footnoterule 39_{1016}
\footstrut 37_{968}

\futurelet 23_{478}, 36_{937}, 37_{968} \gdef 21_{406}, 36_{936}, 36_{941},

40_{1034} \ge 30_{685} \geq 30_{685}

\gets 30_{701}

\global 14_{274}, 14_{277}, 14_{279}, 15_{285}, 21_{407}, 21_{409}, 23_{477}, 23_{492}, 23_{493}, 24_{502}, 24_{503}, 24_{504}, 24_{506}, 35_{899}, 35_{904}, 35_{905}, 35_{907}, 35_{918}, 35_{919}, 36_{942}, 37_{954}, 37_{955}

\h@false 33_{821}

\h@true 33_{822}, 33_{823} \halign 23_{469}, 35_{924}, 36_{927},

36_{932}

\hang 24_{510}
\hangindent 24_{508}, 24_{511}
\hbadness 18_{298}, 26_{545}

\hbox 7_{102}, 7_{114}, 7_{115}, 7_{117}, 7_{120}, 7_{94}, 7_{98}, 7_{99}, 21_{402}, 22_{454}, 22_{459}, 22_{460}, 22_{463}, 23_{466}, 23_{488}, 23_{496}, 24_{500}, 24_{502}, 24_{504}, 24_{505}, 24_{506}, 25_{529}, 25_{531}, 25_{534}, 25_{538}, 26_{541}, 31_{737}, 31_{738}, 31_{739}, 33_{807}, 33_{808}, 33_{809}, 33_{810}, 33_{815}, 33_{817}, 33_{826}, 33_{827}, 33_{835}, 33_{836}, 34_{845}, 34_{846}, 35_{897}, 35_{905}, 35_{906}, 35_{924}

\headline 36_{944}, 36_{949}

\hfil 7_{117}, 31_{754}, 31_{757}, 31_{760}, 31_{762}, 34_{841}, 34_{843}, 35_{890}, 35_{892}, 35_{900}, 35_{901}, 35_{902}, 35_{915}, 35_{924}, 36_{927}, 36_{928}, 36_{932}, 36_{933}, 36_{944}, 37_{953}

\hfill 25_{528}, 25_{529}, 25_{531}, 25_{534}, 25_{539}, 26_{540}, 26_{542}, 26_{543}, 28_{610}

\hfuzz 19_{350}
\hgl@ 22_{432}
\hideskip 15_{290}, 23_{468}
\hidewidth 7_{112}, 7_{113}, 7_{114},

7_{116} \hrule 7_{97}, 22_{430}, 25_{528}, 28_{610},

38_{981} \hsize 6_{79}, 19_{353}, 22_{454}, 23_{485},

26_{544} \hskip 21_{416}, 21_{417}, 21_{418},

22_{434}, 23_{468} \hss 7_{94}, 22_{455}, 22_{456}, 22_{457},

22_{459}, 22_{460}, 24_{502}, 36_{945} \ht 7_{115}, 7_{98}, 25_{539}, 26_{540},

26_{542}, 26_{543}, 33_{818}, 33_{829}, 34_{837}, 35_{908}, 35_{909}, 37_{965}, 38_{992}

\hyphenpenalty 18_{301}

\ialign 7_{108}, 24_{498}, 28_{607}, 31_{752}, 31_{755}, 31_{758}, 31_{761}, 34_{841}, 35_{890}, 35_{892}, 35_{900}, 35_{915}

\if@ 40_{1033}, 40_{1034}

\if@cr 24_{501}

\if@mid 38_{992}, 38_{995}

\ifcase 6_{76}
\ifcat 37_{969}

\ifdim 7_{115}, 22_{447}, 22_{448}, 22_{450}, 22_{452}, 24_{519}, 35_{919},

38_{994}

\ifdt@p 35_{919}
\iffalse 40_{1031}
\ifh@ 33_{830}
\ifhmode 37_{961}

\ifmmode 7_{119}, 23_{467}, 33_{824},

33_{833} \ifnum 15_{287}, 23_{472}, 23_{486},

37_{952}, 37_{954}, 38_{1005}, 39_{1009}

\ifp@ge 38_{999}
\ifr@ggedbottom 39_{1018}
\iftrue 40_{1029}
\ifus@ 23_{495}
\ifv@ 33_{829}

\ifvoid 24_{504}, 39_{1012}, 39_{1014} \ifx 23_{480}, 36_{938}

\ignorespaces 24_{509}
\immediate 14_{255}

\in 34_{842} \indent 24_{509}, 24_{511}

\input 39_{1020}

\insc@unt 14_{279}, 14_{280}, 15_{281},

15_{282}, 15_{283}, 15_{284} \insert 15_{286}, 37_{963}, 38_{996}

\insertpenalties 39_{1009}
\interdisplaylinepenalty 20_{392},

35_{921}

\interfootnotelinepenalty 20_{393},

37_{964}

\interlinepenalty 37_{964}
\intop 28_{628}

\iterate 40_{1023}, 40_{1024} \itfam 13_{232}, 13_{233} \joinrel 30_{719}, 30_{720}, 30_{721},

30_{722}, 30_{723}, 30_{724}, 30_{725},

30_{726}, 30_{728}, 30_{729}

\jot 20_{391}, 35_{914}, 35_{918} \kern 7_{111}, 7_{120}, 7_{97}, 21_{412},

21_{413}, 21_{414}, 31_{737}, 31_{738}, 31_{753}, 31_{756}, 31_{758}, 31_{759}, 31_{762}, 31_{763}, 34_{848}, 35_{893}, 35_{894}, 35_{899}, 35_{900}, 35_{902}, 35_{906}, 35_{907}, 35_{908}, 35_{909}, 36_{934}, 38_{1000}, 38_{980}, 38_{981},

39_{1010}, 39_{1018}

\land 29_{641}
\language 14_{273}

\lastbox 23_{495}, 24_{503}, 35_{904},

35_{905} \lastskip 22_{447}, 22_{448}, 22_{450},

22_{452}, 24_{519}

\lbrace 32_{785}
\ldotp 31_{734}
\ldots 7_{119}

\le 30_{684} \leaders 25_{528}, 25_{539}, 26_{540},

26_{542}, 26_{543}, 28_{610}

\leavevmode 7_{101}, 7_{107}, 7_{94},

7_{97}, 7_{98}, 22_{433} \left 33_{807}, 33_{808}, 33_{809},

33_{810}, 35_{889}, 35_{895}, 35_{906}

\Leftarrow 30_{726}, 30_{729}

\leftarrow 25_{533}, 30_{701}, 30_{720},

30_{725}, 30_{728}

\leftarrowfill 31_{756}
\leftharpoondown 34_{847}
\lefthyphenmin 39_{1019}
\leftline 24_{516}
\leftskip 24_{512}, 37_{967}

\leq 30_{684} \let 6_{74}, 7_{124}, 7_{125}, 7_{127},

14_{267}, 20_{398}, 21_{404}, 21_{406}, 21_{407}, 21_{409}, 23_{479}, 23_{480}, 23_{481}, 23_{482}, 28_{614}, 29_{641}, 29_{642}, 30_{683}, 30_{684}, 30_{685}, 30_{696}, 30_{701}, 30_{702}, 32_{773}, 32_{784}, 32_{785}, 33_{825}, 33_{833}, 34_{851}, 35_{899}, 36_{938}, 36_{939}, 36_{942}, 37_{960}, 37_{969}, 37_{970}, 37_{971}, 40_{1024}, 40_{1025}, 40_{1029}, 40_{1031}

\lhook 30_{719}

\limits 31_{760}, 31_{763}, 34_{848} \line 22_{455}, 22_{456}, 22_{457},

36_{949}, 37_{950}, 39_{1010}

\linepenalty 18_{300}

\lineskip 7_{107}, 20_{394}, 21_{426},

34_{840}, 35_{911}

\lineskiplimit 7_{108}, 7_{109},

20_{395}, 21_{426}, 31_{736}, 34_{840}, 35_{913}, 35_{920}

\llap 24_{509}, 36_{929}

\lnot 28_{614}
\Longleftrightarrow 30_{730}
\longrightarrow 30_{727}

\loop 23_{472}, 23_{486} \lor 29_{642} \lower 7_{120}, 34_{840}

\m@g 6_{77}
\m@ketabbox 23_{482}, 23_{483}

\m@ne 14_{254}, 14_{255}, 14_{279}, 23_{473}, 23_{489}, 26_{545}, 37_{954}, 40_{1027}

\m@th 7_{102}, 7_{119}, 22_{464}, 25_{529}, 25_{530}, 25_{533}, 25_{538}, 26_{541}, 28_{607}, 31_{752}, 31_{755}, 31_{758}, 31_{761}, 33_{811}, 33_{815}, 33_{817}, 33_{827}, 33_{836}, 34_{841}, 34_{843}, 34_{845}, 35_{889}, 35_{891}, 35_{898}, 35_{914}, 35_{918}

\mag 6_{78}
\magstep 6_{69}, 6_{70}, 6_{71}
\makefootline 38_{1003}

\makeheadline 38_{1003}
\makeph@nt 33_{825}
\makesm@sh 33_{833}
\mapstochar 30_{703}, 30_{727}

\mathaccent 31_{740}, 31_{741}, 31_{742}, 31_{743}, 31_{744}, 31_{745}, 31_{746}, 31_{747}, 31_{748}, 31_{749}, 31_{750}, 31_{751}

\mathbin 35_{887}

\mathchar 7_{102}, 28_{592}, 28_{604}

\mathchoice 33_{812}

\mathclose 33_{797}, 33_{800}, 33_{803},

33_{806} \mathcode 10_{158}, 10_{159}, 10_{160},

10_{161}, 10_{162}, 10_{163}, 11_{164}, 11_{165}, 11_{166}, 11_{167}, 11_{168}, 11_{169}, 11_{170}, 11_{171}, 11_{172}, 11_{173}, 11_{174}, 11_{175}, 11_{176}, 11_{177}, 11_{178}, 11_{179}, 11_{180}, 11_{181}, 11_{182}, 11_{183}, 11_{184}, 11_{185}, 11_{186}, 11_{187}, 11_{188}, 11_{189}, 11_{190}, 11_{191}, 11_{192}, 11_{193}, 11_{194}, 11_{195}, 11_{196}, 11_{197}, 11_{198}, 11_{199}, 11_{200}, 11_{201}, 11_{202}, 11_{203}, 11_{204}, 11_{205}, 11_{206}, 11_{207}, 11_{208}, 11_{209}, 11_{210}, 11_{211}, 11_{212}, 11_{213}, 11_{214}

\mathhexbox 7_{103}, 7_{104}, 7_{105},

7_{106}, 7_{117} \mathinner 31_{734}, 31_{735}, 31_{738} \mathop 31_{758}, 31_{761}, 34_{848},

34_{853}, 34_{854}, 34_{855}, 34_{856}, 34_{857}, 34_{858}, 34_{859}, 34_{860}, 34_{861}, 34_{862}, 34_{863}, 34_{864}, 34_{865}, 34_{866}, 34_{867}, 34_{868}, 34_{869}, 34_{870}, 34_{871}, 34_{872}, 34_{873}, 34_{874}, 34_{875}, 34_{876}, 34_{877}, 34_{878}, 34_{879}, 34_{880}, 34_{881}, 34_{882}, 34_{883}, 34_{884}

\mathopen 33_{795}, 33_{798}, 33_{801},

33_{804} \mathord 25_{532}, 25_{533}

\mathpalette 33_{816}, 33_{824},

33_{833}, 34_{839}, 34_{842}, 34_{844}

\mathph@nt 33_{824}

\mathrel 28_{608}, 30_{716}, 30_{717}, 30_{718}, 30_{721}, 30_{722}, 33_{796}, 33_{799}, 33_{802}, 33_{805}, 34_{839}, 34_{842}, 34_{844}, 34_{848}

\mathsm@sh 33_{833}
\mathstrut 35_{893}, 35_{894}
\mathsurround 22_{462}
\matrix 35_{895}

\maxdepth 19_{355}, 39_{1007} \maxdimen 7_{109}, 15_{289}, 19_{356},

19_{357}, 21_{426}, 26_{544}, 34_{840}, 38_{989}, 38_{998}, 40_{1038}

\medbreak 24_{517}

\medmuskip 9_{154}, 27_{548}, 35_{886},

35_{887}

\medskip 22_{451}, 24_{519}

                             \medskipamount 20_{386}, 21_{421},

22_{450}, 24_{519}

                             \message 24_{516}

\mkern 25_{529}, 25_{530}, 25_{531},

25_{532}, 25_{533}, 25_{534}, 25_{535},
28_{592}, 28_{608}, 28_{610}, 30_{716},
31_{738}, 31_{739}, 31_{764}, 31_{765},
33_{819}, 34_{843}, 35_{886}, 35_{887},
35_{888}

\mscount 23_{471}, 23_{472}, 23_{473} \mskip 27_{547}, 27_{548}, 27_{549},

27_{550}, 35_{886}, 35_{887}

                             \multiply 7_{110}

\muskip 14_{265}, 31_{764}, 31_{765} \n@space 33_{807}, 33_{808}, 33_{809},

33_{810}

\ne 30_{683} \neg 28_{614} \neq 30_{683} \newfam 13_{232}, 13_{234}, 13_{236},

13_{239}

                             \newinsert 37_{959}, 38_{982}
                             \newlinechar 19_{341}

\next 7_{132}, 23_{478}, 23_{480}, 23_{481},

33_{825}, 33_{833}, 33_{834}, 36_{937},
36_{938}, 37_{968}, 37_{969}, 37_{970},
37_{971}, 40_{1024}

\ni 30_{696}

\noalign 28_{609}, 31_{753}, 31_{756},

31_{758}, 31_{759}, 31_{762}, 31_{763},
35_{893}, 35_{894}, 35_{899}, 35_{902},
35_{919}

\nobreak 22_{431}, 22_{434}, 24_{516},

38_{1001}, 39_{1010}

\noexpand 37_{969}, 40_{1029}, 40_{1031}

                             \noindent 24_{516}, 24_{518}
                             \nointerlineskip 21_{428}, 28_{609},

31_{753}, 31_{756}, 31_{759}, 31_{762},
36_{949}

\nolimits 28_{628}, 28_{634}, 34_{853},

34_{854}, 34_{855}, 34_{859}, 34_{860},
34_{861}, 34_{862}, 34_{863}, 34_{864},
34_{865}, 34_{866}, 34_{867}, 34_{868},
34_{869}, 34_{870}, 34_{871}, 34_{876},
34_{877}, 34_{878}, 34_{879}, 34_{881},
34_{884}

                             \nonfrenchspacing 39_{1022}
                             \nonscript 35_{886}, 35_{887}
                             \normalbaselines 35_{889}, 35_{891},

39_{1021}

                             \normalbaselineskip 20_{388},

20_{395}

                             \normallineskip 20_{389}, 20_{394}
                             \normallineskiplimit 20_{390},

20_{395}, 35_{920} \not 28_{608}, 30_{683}, 36_{941} \null 23_{477}, 23_{478}, 23_{493},

33_{828}, 35_{891}, 35_{909}, 35_{914}

\nulldelimiterspace 19_{360},

33_{811}

\number 37_{952}

\nxt 23_{480}, 23_{481}, 23_{482}, 36_{938},

36_{939}

\o@lign 7_{112}, 7_{113}
\oalign 7_{108}, 7_{109}
\obeylines 21_{406}
\obeyspaces 21_{409}

\of 33_{815}

\ointop 28_{634}

\omit 23_{471}, 23_{473}, 35_{902},

35_{903} \ooalign 7_{116}, 7_{117}, 34_{843},

34_{845} \openup 35_{914}, 35_{918}

\or 6_{76}

\outer 4_{13}, 14_{262}, 14_{263}, 14_{264}, 14_{265}, 14_{266}, 14_{268}, 14_{269}, 14_{270}, 14_{271}, 14_{272}, 14_{273}, 14_{279}, 23_{484}, 24_{514}, 24_{517}, 26_{546}, 40_{1027}

\output 38_{1002}
\outputpenalty 38_{1005}

\over 34_{848}, 34_{849}

\overfullrule 19_{352}
\owns 30_{696}

\p@ 15_{292}, 21_{424}, 21_{425}, 31_{736}, 31_{737}, 31_{738}, 31_{739}, 31_{753}, 31_{756}, 31_{758}, 31_{759}, 31_{762}, 31_{763}, 33_{807}, 33_{808}, 33_{809}, 33_{810}, 34_{840}, 35_{899}, 35_{900}, 35_{907}, 35_{919}, 36_{948}, 36_{949}, 37_{950}, 37_{957}, 37_{958}, 38_{980}, 38_{981}, 38_{992}

\p@gefalse 38_{984}, 38_{994}
\p@getrue 38_{986}

\p@renwd 35_{897}, 35_{900}, 35_{906}

\pagebody 38_{1003}
\pagecontents 39_{1007}
\pagegoal 38_{994}

\pageno 36_{943}, 37_{952}, 37_{954},

37_{955}

\pageshrink 38_{993}
\pagetotal 38_{993}

\par 20_{398}, 21_{406}, 21_{407}, 22_{430}, 22_{442}, 22_{443}, 22_{444}, 22_{445}, 22_{448}, 22_{450}, 22_{452}, 24_{510}, 24_{511}, 24_{514}, 24_{517}, 24_{518}, 26_{546}, 38_{990}

\parfillskip 19_{384}, 26_{544}

\parindent 19_{366}, 24_{508}, 24_{511},

24_{512}, 24_{513} \parskip 19_{372}, 24_{515} \penalty 22_{436}, 22_{438}, 22_{439},

22_{440}, 22_{442}, 22_{443}, 22_{445}, 22_{449}, 22_{451}, 22_{453}, 24_{514},

24_{519}, 35_{887}, 35_{921}, 38_{996} \ph@nt 33_{821}, 33_{822}, 33_{823}

\plainoutput 38_{1002}
\pr@@@s 36_{938}
\pr@@@t 36_{938}
\pr@m@s 36_{937}
\predisplaypenalty 18_{309}
\preloaded 5_{27}, 5_{28}, 5_{30}, 5_{33},

5_{34}, 5_{36}, 5_{37}, 5_{40}, 5_{41}, 5_{43}, 5_{47}, 5_{48}, 5_{50}, 5_{53}, 5_{54}, 5_{57}, 5_{58}, 5_{59}, 5_{61}, 6_{63}, 6_{65}, 6_{67}, 6_{69}, 6_{70}, 6_{71}, 6_{73}, 6_{74}, 8_{136}, 8_{137}, 8_{139}, 8_{143}, 8_{144}, 8_{146}, 9_{151}, 9_{152}

\pretolerance 18_{296}, 26_{545}

\prevdepth 21_{424}, 22_{430}, 22_{431},

35_{919} \prim@s 36_{936}, 36_{940}

\prime 36_{937}

\quad 35_{890}, 35_{892}, 35_{901}

\r@@t 33_{816}
\r@ggedbottomfalse 37_{958}
\r@ggedbottomtrue 37_{957}
\radical 32_{794}

\raise 7_{117}, 7_{99}, 31_{738}, 31_{739},

33_{819}, 34_{845}

\rbrace 32_{784}
\read 14_{270}

\relax 6_{76}, 7_{112}, 7_{113}, 7_{119}, 21_{416}, 21_{417}, 21_{418}, 23_{467}, 23_{471}, 23_{479}, 23_{481}, 23_{482}, 25_{521}, 25_{523}, 33_{832}, 40_{1024}

\Relbar 30_{723}, 30_{726} \relbar 30_{724}, 30_{725}

\relpenalty 18_{304}
\removelastskip 22_{449}, 22_{451},

22_{453}, 24_{519} \repeat 23_{472}, 23_{486}, 40_{1023},

40_{1025}

\rhook 30_{720}

\right 33_{807}, 33_{808}, 33_{809},

33_{810}, 35_{890}, 35_{895}, 35_{908}

\Rightarrow 30_{723}, 30_{729}

\rightarrow 25_{532}, 30_{702}, 30_{703},

30_{719}, 30_{724}, 30_{728}

\rightarrowfill 31_{753}
\rightharpoonup 34_{846}
\righthyphenmin 39_{1019}

\rightskip 24_{513}, 25_{521}, 25_{523},

37_{967} \rlap 7_{99}, 36_{934}

\rlh@ 34_{844}

\rm 34_{853}, 34_{854}, 34_{855}, 34_{856}, 34_{857}, 34_{858}, 34_{859}, 34_{860}, 34_{861}, 34_{862}, 34_{863}, 34_{864}, 34_{865}, 34_{866}, 34_{867}, 34_{868}, 34_{869}, 34_{870}, 34_{871}, 34_{872}, 34_{873}, 34_{874}, 34_{875}, 34_{876},

34_{877}, 34_{878}, 34_{879}, 34_{880},
34_{881}, 34_{882}, 34_{883}, 34_{884},
35_{887}, 35_{888}, 39_{1021}

\romannumeral 37_{952}

\rootbox 33_{815}, 33_{819}

\s@tcols 23_{481}
\s@tt@b 23_{480}

\sb 34_{851} \scriptfont 12_{225}, 12_{227}, 12_{229},

12_{231}, 13_{237}

\scriptscriptfont 12_{225}, 12_{227},

12_{229}, 12_{231}, 13_{238}

\scriptscriptstyle 33_{813},

33_{815}

\scriptspace 19_{361}
\scriptstyle 28_{607}, 33_{813}

\setbox 7_{115}, 7_{94}, 7_{98}, 22_{463}, 23_{466}, 23_{477}, 23_{478}, 23_{488}, 23_{492}, 23_{493}, 23_{496}, 24_{497}, 24_{500}, 24_{502}, 24_{503}, 24_{504}, 24_{505}, 24_{506}, 25_{538}, 26_{541}, 26_{544}, 33_{815}, 33_{817}, 33_{826}, 33_{827}, 33_{828}, 33_{835}, 33_{836}, 35_{897}, 35_{899}, 35_{904}, 35_{905},

35_{906}, 35_{907}, 38_{990}

\sett@b 23_{478}
\sevenbf 5_{42}, 13_{237}

\seveni 8_{138}, 10_{156}, 12_{227}

\sevenrm 5_{29}, 12_{225}

\sevensy 8_{145}, 10_{157}, 12_{229} \sfcode 8_{134}, 25_{524}, 25_{525},

25_{526}, 25_{527} \sh@ft 7_{112}, 7_{113}

\shipout 38_{1003}
\showboxbreadth 19_{347}, 40_{1038}
\showboxdepth 19_{348}, 26_{545},

40_{1038} \sim 34_{839}

\skewchar 10_{156}, 10_{157}

\skip 14_{264}, 15_{282}, 37_{976},

38_{987}, 39_{1015} \skip@ 21_{429}, 22_{431}, 22_{432},

22_{434} \sl 24_{518} \slfam 13_{234}, 13_{235}

\smallskip 22_{449}, 24_{516}
\smallskipamount 20_{385}, 21_{420},

22_{448} \smash 25_{530}, 25_{531}, 25_{534},

25_{535}, 30_{717} \sp 34_{851}

\sp@n 23_{472}
\space 21_{409}
\spacefactor 22_{433}, 22_{434},

37_{961}

\spaceskip 25_{521}, 37_{967}
\span 23_{473}
\splitmaxdepth 19_{356}, 37_{966},

38_{998}

\splittopskip 19_{380}, 37_{965},

37_{974}, 38_{997}

\sqrt 33_{817}

\string 14_{278}, 15_{286}, 40_{1033} \strut 35_{902}, 35_{903}, 35_{915},

37_{973} \strutbox 23_{466}, 23_{467}, 37_{965},

37_{966}

\supereject 26_{546}, 39_{1010}
\t@bb@x 24_{498}
\t@bbox 24_{498}
\tabalign 23_{484}

\tabs 23_{477}, 23_{478}, 23_{488},

23_{492}, 23_{496} \tabsdone 23_{493}, 23_{496}, 24_{506} \tabskip 23_{469}, 35_{922}, 35_{923},

36_{926}, 36_{927}, 36_{928}, 36_{929}, 36_{931}, 36_{932}, 36_{933}, 36_{934}

\tabsyet 23_{477}, 23_{492}, 23_{496},

24_{502} \tenbf 5_{39}, 13_{236}, 13_{237} \tenex 8_{149}, 12_{231}, 35_{897} \teni 8_{135}, 10_{156}, 12_{227}, 12_{228} \tenit 5_{56}, 13_{232}, 13_{233} \tenrm 5_{26}, 12_{225}, 12_{226}, 26_{544},

36_{945} \tensl 5_{52}, 13_{234}, 13_{235} \tensy 8_{142}, 10_{157}, 12_{229} \tentt 5_{46}, 13_{239}, 13_{240} \textfont 7_{132}, 12_{225}, 12_{227},

12_{229}, 12_{231}, 13_{233}, 13_{235}, 13_{237}, 13_{240}, 34_{852}

\textindent 24_{510}, 24_{511}, 37_{968}

\textstyle 33_{813}, 34_{849}

\the 7_{132}, 14_{278}, 15_{286}, 34_{852},

36_{949}, 37_{950}, 37_{961}

\thickmuskip 9_{155}, 27_{549}

\thinmuskip 9_{153}, 27_{547}, 27_{550}

\thinspace 34_{852}, 35_{900}

\to 30_{702}

\toks 14_{269}
\tolerance 18_{297}, 26_{545}

\topins 38_{982}, 38_{987}, 38_{988},

38_{989}, 38_{996}, 39_{1012} \topskip 19_{379}, 21_{428}, 37_{957},

37_{958}, 39_{1010}

\tracingcommands 40_{1035}
\tracinglostchars 18_{326}, 40_{1036}
\tracingmacros 40_{1037}
\tracingonline 40_{1035}
\tracingoutput 40_{1036}
\tracingpages 40_{1036}
\tracingparagraphs 40_{1037}
\tracingrestores 40_{1037}
\tracingstats 40_{1035}
\triangleleft 30_{721}
\triangleright 30_{721}

\tt 25_{523} \ttfam 13_{239}, 13_{240} \tw@ 12_{230}, 31_{764}, 33_{828}, 33_{829},

33_{830}, 35_{904}, 35_{905}, 35_{906},

35_{909}, 40_{1035}, 40_{1037}

\u 7_{125}

\uccode 40_{1034}
\uchyph 18_{330}
\undefined 6_{74}
\underline 22_{464}

\unhbox 7_{116}, 7_{96}, 23_{488}, 23_{496},

24_{502}, 24_{505}, 24_{506}, 35_{905}

\unhcopy 23_{467}
\unskip 35_{905}

\unvbox 23_{495}, 35_{908}, 38_{1000},

39_{1012}, 39_{1013}, 39_{1017}

\unvcopy 35_{904}
\upbracefill 31_{763}
\uppercase 40_{1034}
\us@false 23_{482}
\us@true 23_{483}

\v 7_{124}

\v@false 33_{822}

\v@true 33_{821}, 33_{823}

\vbadness 18_{299}

\vbox 7_{114}, 7_{97}, 24_{497}, 26_{544}, 28_{607}, 31_{736}, 31_{738}, 31_{752}, 31_{755}, 31_{758}, 33_{807}, 33_{808}, 33_{809}, 33_{810}, 34_{840}, 35_{899}, 35_{904}, 35_{907}, 35_{909}, 36_{948}, 36_{949}, 37_{974}, 38_{1000}, 38_{1003},

38_{990}, 39_{1007}

\vcenter 34_{845}, 35_{889}, 35_{891},

35_{908}, 35_{914} \vee 29_{642}

                                 \Vert 32_{773}

\vfil 22_{442}, 39_{1018} \vfill 26_{546}, 39_{1010}

                                 \vfilneg 22_{442}
                                 \vfootnote 37_{962}
                                 \vfuzz 19_{351}
                                 \vgl@ 21_{429}
                                 \vglue 21_{428}
                                 \voidb@x 7_{96}
                                 \vphantom 33_{831}

\vrule 22_{433}, 23_{466}, 25_{539},

26_{540}, 26_{542}, 26_{543}

\vsize 6_{79}, 19_{354}, 24_{514}, 24_{515},

38_{1000}, 39_{1007}

\vskip 21_{420}, 21_{421}, 21_{422},

22_{431}, 22_{447}, 24_{514}, 24_{515},
35_{920}, 36_{948}, 39_{1015}

\vss 7_{114}, 36_{949} \vtop 7_{107}, 31_{761} \wd 7_{94}, 24_{504}, 24_{505}, 33_{830},

35_{897}, 35_{906}

                                 \wedge 29_{641}
                                 \widowpenalty 18_{306}

\wlog 14_{278}, 15_{286} \write 14_{255}, 14_{271}

                                 \xspaceskip 25_{521}, 37_{967}

\z@ 7_{108}, 7_{110}, 7_{111}, 7_{115}, 7_{116}, 12_{226}, 15_{293}, 21_{426}, 22_{430}, 22_{433}, 22_{440}, 22_{447}, 22_{459}, 22_{460}, 22_{462}, 22_{463}, 22_{464}, 23_{466}, 23_{486}, 23_{495}, 24_{497}, 24_{500}, 24_{504}, 24_{505}, 24_{507}, 24_{514}, 24_{515}, 25_{521}, 25_{523}, 25_{538}, 25_{539}, 26_{540}, 26_{541}, 26_{542}, 26_{543}, 31_{736}, 31_{764}, 31_{765}, 33_{811}, 33_{817}, 33_{818}, 33_{819}, 33_{826}, 33_{827}, 33_{829}, 33_{830}, 33_{835}, 33_{836}, 34_{837}, 34_{848}, 35_{899}, 35_{904}, 35_{908}, 36_{948}, 37_{952}, 37_{954}, 38_{1000}, 38_{1001}, 38_{990}, 38_{992}, 38_{995}, 38_{998}, 38_{999}, 39_{1009}

\z@skip 7_{107}, 15_{294}, 23_{469}, 26_{544}, 35_{922}, 35_{923}, 36_{927}, 36_{929}, 36_{932}, 37_{967}, 38_{987},

38_{997}

Chunks

⟨ * ⟩ 3

⟨ Allocate registers ⟩ 3, 13 ⟨ Allocate scratch registers ⟩ 14 ⟨ Assign delimiter codes ⟩ 8, 12 ⟨ Assign initial values to parameters ⟩ 3, 18 ⟨ Assign math codes ⟩ 8, 10 ⟨ Assign space factor codes ⟩ 5, 8 ⟨ Assign uppercase and lowercase code values ⟩ 5, 8 ⟨ Assign values to dimen parameters ⟩ 18, 19 ⟨ Assign values to glue parameters ⟩ 18, 19 ⟨ Assign values to integer parameters ⟩ 18 ⟨ Assign values to special registers ⟩ 18, 20 ⟨ Completing the job ⟩ 20, 26 ⟨ Define Greek letters ⟩ 26, 27

⟨ Define \showhyphens macro ⟩ 20, 26 ⟨ Define \tracingall macro ⟩ 40

⟨ Define commonly used constants ⟩ 3, 4 ⟨ Define font families ⟩ 8, 12 ⟨ Define implementation-level register allocation macros ⟩ 14 ⟨ Define math fonts ⟩ 8 ⟨ Define math space macros ⟩ 26, 27 ⟨ Define math symbols ⟩ 26, 28 ⟨ Define sectioning macros ⟩ 20, 24 ⟨ Define space macros ⟩ 20–22 ⟨ Define text fonts ⟩ 5, 6 ⟨ Encode binary operations ⟩ 26, 29 ⟨ Encode large operators ⟩ 26, 28 ⟨ Encode math accents ⟩ 8, 10 ⟨ Encode relations ⟩ 26, 29 ⟨ Encode special characters, and characters not available on the keyboard ⟩ 5, 6 ⟨ Establish spacing after punctuation characters ⟩ 20, 25 ⟨ Establish spacing around mathematical objects ⟩ 8, 9 ⟨ Establish standard category code values ⟩ 3, 4 ⟨ Identify the format ⟩ 3, 40 ⟨ Initialize register constants ⟩ 14, 15 ⟨ Initialize the layout ⟩ 3, 39 ⟨ Prepare page for output ⟩ 3, 36

⟨ Provide \cases and \matrix macros ⟩ 26, 35

⟨ Provide access to delimiters of various sizes ⟩ 26, 33 ⟨ Provide alignment macros ⟩ 20, 23 ⟨ Provide macros for math formatting ⟩ 3, 26, 33 ⟨ Provide macros for text formatting ⟩ 3, 20 ⟨ Provide programming constructs ⟩ 3, 40 ⟨ Provide support for accented characters ⟩ 5, 7 ⟨ Provide support for font scaling ⟩ 5, 6 ⟨ Provide support to typeset displayed equations ⟩ 26, 35 ⟨ Provide user-level register allocation macros ⟩ 14 ⟨ Read hyphenation patterns ⟩ 3, 39 ⟨ Set up math fonts ⟩ 3, 8 ⟨ Set up text fonts ⟩ 3, 5 ⟨ Set up the output routine ⟩ 36, 38 ⟨ Supply ‘boxing’ macros ⟩ 20, 22 ⟨ Supply basic macros for text formatting ⟩ 20, 21 ⟨ Supply common math functions ⟩ 26, 34, 36 ⟨ Supply extensible delimiters ⟩ 26, 32 ⟨ Supply floating insertions ⟩ 36, 38 ⟨ Supply footnotes ⟩ 36, 37 ⟨ Supply headers and footers ⟩ 36 ⟨ Supply loops and conditionals ⟩ 40 ⟨ Supply ragged setting ⟩ 20, 25 ⟨ Supply raggedbottom setting ⟩ 36, 37 ⟨ Supply strut ⟩ 20, 23 ⟨ Supply variable-width math accents ⟩ 26, 31 ⟨ Supply various paragraph shapes ⟩ 20, 24 ⟨ Supply various ways to fill space ⟩ 20, 25 ⟨ Supply vertical and diagonal dots ⟩ 26, 31