Standard Document Classes for LATEX version 2e∗
Copyright (C) 1992 by Leslie Lamport
Copyright (C) 1994-2021 by Frank Mittelbach,
Johannes Braams and the LATEX Project Team
2024/02/08
This file is maintained by the LATEX Project team.
Bug reports can be opened (category latex) at
https://latex-project.org/bugs.html.

Contents
1 The docstrip modules

3

2 Initial Code3

3 Declaration of Options
3.1 Setting Paper Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Choosing the type size . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Two-side or one-side printing . . . . . . . . . . . . . . . . . . . . .
3.4 Draft option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 Titlepage option . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 openright option . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7 Two-column printing . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 Equation numbering on the left . . . . . . . . . . . . . . . . . . . .
3.9 Flush left displays . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10 Open bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
4
5
5
5
5
5
5
6
6

4 Executing Options

6

5 Loading Packages

7

6 Document Layout
6.1 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Paragraphing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Page Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Vertical spacing . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.2 The dimension of text . . . . . . . . . . . . . . . . . . . . .
6.3.3 Margins . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7
7
10
11
11
12
14

∗ This file has version number v1.4n, last revised 2024/02/08.

1

6.3.4 Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.5 Float placement parameters . . . . . . . . . . . . . . . . . .
Page Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1 Marking conventions . . . . . . . . . . . . . . . . . . . . . .
6.4.2 Defining the page styles . . . . . . . . . . . . . . . . . . . .

16
17
19
20
20

7 Document Markup
7.1 The title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Chapters and Sections . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Building blocks . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.2 Mark commands . . . . . . . . . . . . . . . . . . . . . . . .
7.2.3 Define Counters . . . . . . . . . . . . . . . . . . . . . . . .
7.2.4 Front Matter, Main Matter, and Back Matter . . . . . . . .
7.2.5 Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.6 Chapters . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.7 Lower level headings . . . . . . . . . . . . . . . . . . . . . .
7.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 General List Parameters . . . . . . . . . . . . . . . . . . . .
7.3.2 Enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.3 Itemize . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.4 Description . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 Defining new environments . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.2 Verse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.3 Quotation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.4 Quote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.5 Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.6 Titlepage . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.7 Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5 Setting parameters for existing environments . . . . . . . . . . . .
7.5.1 Array and tabular . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Tabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.3 Minipage . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.4 Framed boxes . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.5 Equation and eqnarray . . . . . . . . . . . . . . . . . . . . .
7.6 Floating objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.1 Figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.2 Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.3 Captions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7 Font changing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22
22
25
25
26
26
27
28
31
33
34
34
36
36
37
37
37
38
38
38
39
39
40
40
40
41
41
41
41
42
42
43
43
44

8 Cross Referencing
8.1 Table of Contents, etc. . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.1 Table of Contents . . . . . . . . . . . . . . . . . . . . . . .
8.1.2 List of figures . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.3 List of tables . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 The index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45
45
46
49
49
50
51
52

6.4

2

9 Initialization
9.1 Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 Two-column mode . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4 The page style . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5 Single or double sided printing . . . . . . . . . . . . . . . . . . . .

1

53
53
53
53
54
54

The docstrip modules

The following modules are used in the implementation to direct docstrip in
generating the external files:
articlereportsize10size11
size12
book
bk10
bk11
bk12
driver2

produce the documentclass article
produce the documentclass report
produce the class option for 10pt
produce the class option for 11pt
produce the class option for 12pt
produce the documentclass bookproduce the book class option for 10pt
produce the book class option for 11pt
produce the book class option for 12pt
produce a documentation driver file

Initial CodeIn this part we define a few commands that are used later on.
\@ptsize This control sequence is used to store the second digit of the pointsize we aretypesetting in. So, normally, it’s value is one of 0, 1 or 2.
1 ⟨∗article | report | book⟩2 \newcommand\@ptsize{}\if@restonecol When the document has to be printed in two columns, we sometimes have totemporarily switch to one column. This switch is used to remember to switchback.
3 \newif\if@restonecol\if@titlepage A switch to indicate if a titlepage has to be produced. For the article documentclass the default is not to make a separate titlepage.
4 \newif\if@titlepage
5 ⟨article⟩\@titlepagefalse
6 ⟨!article⟩\@titlepagetrue\if@openright A switch to indicate if chapters must start on a right-hand page. The default for

the report class is no; for the book class it’s yes.
7 ⟨!article⟩\newif\if@openright\if@mainmatter The switch \if@mainmatter, only available in the document class book, indicates

whether we are processing the main material in the book.
8 ⟨book⟩\newif\if@mainmatter \@mainmattertrue3

3

Declaration of Options

3.1

Setting Paper Sizes

The variables \paperwidth and \paperheight should reflect the physical paper
size after trimming. For desk printer output this is usually the real paper size
since there is no post-processing. Classes for real book production will probably
add other paper sizes and additionally the production of crop marks for trimming.
In compatibility mode, these (and some of the subsequent) options are disabled,as they were not present in LATEX2.09.
9 \if@compatibility\else
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

\DeclareOption{a4paper}{\setlength\paperheight {297mm}%\setlength\paperwidth {210mm}}\DeclareOption{a5paper}{\setlength\paperheight {210mm}%\setlength\paperwidth {148mm}}\DeclareOption{b5paper}{\setlength\paperheight {250mm}%\setlength\paperwidth {176mm}}\DeclareOption{letterpaper}{\setlength\paperheight {11in}%\setlength\paperwidth {8.5in}}\DeclareOption{legalpaper}{\setlength\paperheight {14in}%\setlength\paperwidth {8.5in}}\DeclareOption{executivepaper}{\setlength\paperheight {10.5in}%\setlength\paperwidth {7.25in}}The option landscape switches the values of \paperheight and \paperwidth,
assuming the dimensions were given for portrait paper.
\DeclareOption{landscape}{\setlength\@tempdima{\paperheight}%
30\setlength\paperheight {\paperwidth}%31\setlength\paperwidth {\@tempdima}}
32 \fi28
29

3.2

Choosing the type size

The type size options are handled by defining \@ptsize to contain the last digitof the size in question and branching on \ifcase statements. This is done forhistorical reasons to stay compatible with other packages that use the \@ptsize
variable to select special actions. It makes the declarations of size options lessthan 10pt difficult, although one can probably use 9 and 8 assuming that a classwont define both 8pt and 18pt options.
33 \if@compatibility
34\renewcommand\@ptsize{0}35 \else
36\DeclareOption{10pt}{\renewcommand\@ptsize{0}}37 \fi38 \DeclareOption{11pt}{\renewcommand\@ptsize{1}}39 \DeclareOption{12pt}{\renewcommand\@ptsize{2}}

4

3.3

Two-side or one-side printing

For two-sided printing we use the switch \if@twoside. In addition we have to set
the \if@mparswitch to get any margin paragraphs into the outside margin.
40 \if@compatibility\else41\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}

42 \fi43 \DeclareOption{twoside}{\@twosidetrue

3.4\@mparswitchtrue}

Draft option

If the user requests draft we show any overfull boxes. We could probably add somemore interesting stuff to this option.
44 \DeclareOption{draft}{\setlength\overfullrule{5pt}}
45 \if@compatibility\else46\DeclareOption{final}{\setlength\overfullrule{0pt}}

47 \fi

3.5

Titlepage option

An article usually has no separate titlepage, but the user can request one.
48 \DeclareOption{titlepage}{\@titlepagetrue}
49 \if@compatibility\else50\DeclareOption{notitlepage}{\@titlepagefalse}

51 \fi

3.6

openright option

This option determines whether or not a chapter must start on a right-hand page
request one.
52 ⟨!article⟩\if@compatibility
53 ⟨book⟩\@openrighttrue
54 ⟨!article⟩\else
55 ⟨!article⟩\DeclareOption{openright}{\@openrighttrue}56 ⟨!article⟩\DeclareOption{openany}{\@openrightfalse}
57 ⟨!article⟩\fi

3.7

Two-column printing

Two-column and one-column printing is again realized via a switch.
58 \if@compatibility\else59\DeclareOption{onecolumn}{\@twocolumnfalse}

60 \fi61 \DeclareOption{twocolumn}{\@twocolumntrue}

3.8

Equation numbering on the left

The option leqno can be used to get the equation numbers on the left side of theequation. It loads code which is generated automatically from the kernel files
when the format is built. If the equation number does get a special formatting

5then instead of using the kernel file the class would need to provide the code
explicitly.
62 \DeclareOption{leqno}{\input{leqno.clo}}

3.9

Flush left displays

The option fleqn redefines the displayed math environments in such a way thatthey come out flush left, with an indentation of \mathindent from the prevailingleft margin. It loads code which is generated automatically from the kernel files
when the format is built.
63 \DeclareOption{fleqn}{\input{fleqn.clo}}

3.10

Open bibliography

The option openbib produces the “open” bibliography style, in which each block
starts on a new line, and succeeding lines in a block are indented by \bibindent.
64 \DeclareOption{openbib}{%

First some hook into the bibliography environment is filled.
65
66
67
68
69
70
71

\AtEndOfPackage{%\renewcommand\@openbib@code{%\advance\leftmargin\bibindent\itemindent -\bibindent\listparindent \itemindent\parsep \z@}%

In addition the definition of \newblock is overwritten.
72\renewcommand\newblock{\par}}%

73 }

4

Executing Options

Here we execute the default options to initialize certain variables. Note that the
document class ‘book’ always uses two sided printing.
74 ⟨∗article⟩
75 \ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final}
76 ⟨/article⟩
77 ⟨∗report⟩
78 \ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany}
79 ⟨/report⟩
80 ⟨∗book⟩81 \ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright}
82 ⟨/book⟩The \ProcessOptions command causes the execution of the code for every
option FOO which is declared and for which the user typed the FOO option in
his \documentclass command. For every option BAR he typed, which is notdeclared, the option is assumed to be a global option. All options will be passed
as document options to any \usepackage command in the document preamble.
83 \ProcessOptions

6

Now that all the options have been executed we can load the chosen class option
file that contains all size dependent code.
84 ⟨!book⟩\input{size1\@ptsize.clo}
85 ⟨book⟩\input{bk1\@ptsize.clo}
86 ⟨/article | report | book⟩5

Loading Packages

The standard class files do not load additional packages.

6

Document Layout

In this section we are finally dealing with the nasty typographical details.

6.1

Fonts

LATEX offers the user commands to change the size of the font, relative to the‘main’ size. Each relative size changing command \size executes the command\@setfontsize\size⟨font-size⟩⟨baselineskip⟩ where:⟨font-size⟩ The absolute size of the font to use from now on.
⟨baselineskip⟩ The normal value of \baselineskip for the size of the font selected. (The actual value will be \baselinestretch * ⟨baselineskip⟩.)
A number of commands, defined in the LATEX kernel, shorten the following
definitions and are used throughout. They are:\@vpt\@viiipt\@xipt
...

5
8
10.95

\@vipt\@ixpt\@xiipt

6912\@viipt\@xpt\@xivpt

710
14.4\normalsize The user level command for the main size is \normalsize. Internally LATEX uses\@normalsize \@normalsize when it refers to the main size. \@normalsize will be defined towork like \normalsize if the latter is redefined from its default definition (thatjust issues an error message). Otherwise \@normalsize simply selects a 10pt/12pt
size.
The \normalsize macro also sets new values for\abovedisplayskip, \abovedisplayshortskip and \belowdisplayshortskip.
87 ⟨∗10pt | 11pt | 12pt⟩
88 \renewcommand\normalsize{%
89 ⟨∗10pt⟩\@setfontsize\normalsize\@xpt\@xiipt\abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@92\abovedisplayshortskip \z@ \@plus3\p@93\belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
94 ⟨/10pt⟩
95 ⟨∗11pt⟩
96\@setfontsize\normalsize\@xipt{13.6}%
97\abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
90
91

7

\abovedisplayshortskip \z@ \@plus3\p@\belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@100 ⟨/11pt⟩
101 ⟨∗12pt⟩
102\@setfontsize\normalsize\@xiipt{14.5}%
103\abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@104\abovedisplayshortskip \z@ \@plus3\p@105\belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@106 ⟨/12pt⟩
98
99

The \belowdisplayskip is always equal to the \abovedisplayskip. The parameters of the first level list are always given by \@listI.
107
108\belowdisplayskip \abovedisplayskip\let\@listi\@listI}

We initially choose the normalsize font.
109 \normalsize

We use \MakeRobust instead of \DeclareRobustCommand above to avoid a log
entry for the redefinition. But if we are running in a rollback situation (prior to2015) we don’t touch it.
110 \ifx\MakeRobust\@undefined \else111\MakeRobust\normalsize

112 \fi\small This is similar to \normalsize.
113 \DeclareRobustCommand\small{%114 ⟨∗10pt⟩\@setfontsize\small\@ixpt{11}%\abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@117\abovedisplayshortskip \z@ \@plus2\p@118\belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@119\def\@listi{\leftmargin\leftmargini
120\topsep 4\p@ \@plus2\p@ \@minus2\p@121\parsep 2\p@ \@plus\p@ \@minus\p@122\itemsep \parsep}%
123 ⟨/10pt⟩
124 ⟨∗11pt⟩
125\@setfontsize\small\@xpt\@xiipt
126\abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@127\abovedisplayshortskip \z@ \@plus3\p@128\belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@129\def\@listi{\leftmargin\leftmargini
130\topsep 6\p@ \@plus2\p@ \@minus2\p@131\parsep 3\p@ \@plus2\p@ \@minus\p@132\itemsep \parsep}%
133 ⟨/11pt⟩
134 ⟨∗12pt⟩
135\@setfontsize\small\@xipt{13.6}%
136\abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@137\abovedisplayshortskip \z@ \@plus3\p@138\belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@139\def\@listi{\leftmargin\leftmargini
140\topsep 9\p@ \@plus3\p@ \@minus5\p@141\parsep 4.5\p@ \@plus2\p@ \@minus\p@
115
116

8

\itemsep \parsep}%142
143 ⟨/12pt⟩
144\belowdisplayskip \abovedisplayskip

145 }\footnotesize This is similar to \normalsize.
146 \DeclareRobustCommand\footnotesize{%
147 ⟨∗10pt⟩\@setfontsize\footnotesize\@viiipt{9.5}%\abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@150\abovedisplayshortskip \z@ \@plus\p@151\belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@152\def\@listi{\leftmargin\leftmargini
153\topsep 3\p@ \@plus\p@ \@minus\p@154\parsep 2\p@ \@plus\p@ \@minus\p@155\itemsep \parsep}%156 ⟨/10pt⟩
157 ⟨∗11pt⟩
158\@setfontsize\footnotesize\@ixpt{11}%159\abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@160\abovedisplayshortskip \z@ \@plus\p@161\belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@162\def\@listi{\leftmargin\leftmargini
163\topsep 4\p@ \@plus2\p@ \@minus2\p@164\parsep 2\p@ \@plus\p@ \@minus\p@165\itemsep \parsep}%
166 ⟨/11pt⟩
167 ⟨∗12pt⟩
168\@setfontsize\footnotesize\@xpt\@xiipt
169\abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@170\abovedisplayshortskip \z@ \@plus3\p@171\belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@172\def\@listi{\leftmargin\leftmargini
173\topsep 6\p@ \@plus2\p@ \@minus2\p@174\parsep 3\p@ \@plus2\p@ \@minus\p@175\itemsep \parsep}%
176 ⟨/12pt⟩
177\belowdisplayskip \abovedisplayskip
178 }179 ⟨/10pt | 11pt | 12pt⟩
148
149\scriptsize These are all much simpler than the previous macros, they just select a new\tiny fontsize, but leave the parameters for displays and lists alone.
\large 180 ⟨∗10pt⟩\Large 181 \DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}\LARGE 182 \DeclareRobustCommand\tiny{\@setfontsize\tiny\@vpt\@vipt}\huge 183 \DeclareRobustCommand\large{\@setfontsize\large\@xiipt{14}}\Huge 184 \DeclareRobustCommand\Large{\@setfontsize\Large\@xivpt{18}}185 \DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}186 \DeclareRobustCommand\huge{\@setfontsize\huge\@xxpt{25}}187 \DeclareRobustCommand\Huge{\@setfontsize\Huge\@xxvpt{30}}188 ⟨/10pt⟩
189 ⟨∗11pt⟩
190 \DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}

9191 \DeclareRobustCommand\tiny{\@setfontsize\tiny\@vipt\@viipt}
192 \DeclareRobustCommand\large{\@setfontsize\large\@xiipt{14}}193 \DeclareRobustCommand\Large{\@setfontsize\Large\@xivpt{18}}194 \DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}195 \DeclareRobustCommand\huge{\@setfontsize\huge\@xxpt{25}}196 \DeclareRobustCommand\Huge{\@setfontsize\Huge\@xxvpt{30}}197 ⟨/11pt⟩
198 ⟨∗12pt⟩
199 \DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}
200 \DeclareRobustCommand\tiny{\@setfontsize\tiny\@vipt\@viipt}
201 \DeclareRobustCommand\large{\@setfontsize\large\@xivpt{18}}202 \DeclareRobustCommand\Large{\@setfontsize\Large\@xviipt{22}}203 \DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xxpt{25}}204 \DeclareRobustCommand\huge{\@setfontsize\huge\@xxvpt{30}}205 \let\Huge=\huge
206 ⟨/12pt⟩

6.2

Paragraphing\lineskip These parameters control TEX’s behaviour when two lines tend to come too close\normallineskip together.
207 ⟨∗article | report | book⟩208 \setlength\lineskip{1\p@}209 \setlength\normallineskip{1\p@}\baselinestretch This is used as a multiplier for \baselineskip. The default is to not stretch

the baselines. Note that if this command doesn’t resolve to “empty” any plus orminus part in the specification of \baselineskip is ignored.
210 \renewcommand\baselinestretch{}\parskip \parskip gives extra vertical space between paragraphs and \parindent is the\parindent width of the paragraph indentation. The value of \parindent depends on whether

we are in two-column mode.
211 \setlength\parskip{0\p@ \@plus \p@}212 ⟨/article | report | book⟩213 ⟨∗10pt | 11pt | 12pt⟩
214 \if@twocolumn
215\setlength\parindent{1em}

216 \else
217 ⟨10pt⟩
218 ⟨11pt⟩
219 ⟨12pt⟩\setlength\parindent{15\p@}\setlength\parindent{17\p@}\setlength\parindent{1.5em}

220 \fi
221 ⟨/10pt | 11pt | 12pt⟩\smallskipamount The values for these three parameters are set in the LATEX kernel. They should\medskipamount perhaps vary, according to the size option specified. But as they have always\bigskipamount had the same value regardless of the size option we do not change them to staycompatible with both LATEX 2.09 and older releases of LATEX 2ε .
222 ⟨∗10pt | 11pt | 12pt⟩
223 \setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@}224 \setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@}225 \setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@}10

226 ⟨/10pt | 11pt | 12pt⟩\@lowpenalty The commands \nopagebreak and \nolinebreak put in penalties to discourage\@medpenalty these breaks at the point they are put in. They use \@lowpenalty, \@medpenalty\@highpenalty or \@highpenalty, dependent on their argument.
227 ⟨∗article | report | book⟩228 \@lowpenalty

51
151
230 \@highpenalty 301
229 \@medpenalty\clubpenalty These penalties are use to discourage club and widow lines. Because we use their\widowpenalty default values we only show them here, commented out.
231 % \clubpenalty

150

232 % \widowpenalty 150\displaywidowpenalty Discourage (but not so much) widows in front of a math display and forbid break\predisplaypenalty ing directly in front of a display. Allow break after a display without a penalty.
\postdisplaypenalty Again the default values are used, therefore we only show them here.
233 % \displaywidowpenalty 50
234 % \predisplaypenalty
235 % \postdisplaypenalty

10000
0

\interlinepenalty Allow the breaking of a page in the middle of a paragraph.
236 % \interlinepenalty 0\brokenpenalty We allow the breaking of a page after a hyphenated line.
237 % \brokenpenalty 100
238 ⟨/article | report | book⟩

6.3

Page Layout

All margin dimensions are measured from a point one inch from the top andlefthand side of the page.
6.3.1

Vertical spacing\headheight The \headheight is the height of the box that will contain the running head. The\headsep \headsep is the distance between the bottom of the running head and the top of\topskip the text. The \topskip is the \baselineskip for the first line on a page; LATEX’s

output routine will not work properly if it has the value 0pt, so do not do that!
239 ⟨∗10pt | 11pt | 12pt⟩
240 \setlength\headheight{12\p@}241 ⟨!bk⟩\setlength\headsep{25\p@}{.25in}243 ⟨11pt & bk⟩\setlength\headsep{.275in}244 ⟨12pt & bk⟩\setlength\headsep{.275in}245 ⟨10pt⟩\setlength\topskip{10\p@}
246 ⟨11pt⟩\setlength\topskip{11\p@}
247 ⟨12pt⟩\setlength\topskip{12\p@}
242 ⟨10pt & bk⟩\setlength\headsep

11

\footskip The distance from the baseline of the box which contains the running footer tothe baseline of last line of text is controlled by the \footskip.
248 ⟨!bk⟩\setlength\footskip{30\p@}249 ⟨10pt & bk⟩\setlength\footskip{.35in}
250 ⟨11pt & bk⟩\setlength\footskip{.38in}
251 ⟨12pt & bk⟩\setlength\footskip{30\p@}\maxdepth The TEX primitive register \maxdepth has a function that is similar to that of\topskip. The register \@maxdepth should always contain a copy of \maxdepth.
This is achieved by setting it internally at \begin{document}. In both plain TEX
and LATEX 2.09 \maxdepth had a fixed value of 4pt; in native LATEX2e mode we
let the value depend on the typesize. We set it so that \maxdepth + \topskip =typesize ×1.5. As it happens, in these classes \topskip is equal to the typesize,
therefore we set \maxdepth to half the value of \topskip.
252 \if@compatibility \setlength\maxdepth{4\p@} \else
253

6.3.2

\setlength\maxdepth{.5\topskip} \fi

The dimension of text

\textwidth When we are in compatibility mode we have to make sure that the dimensions of

the printed area are not different from what the user was used to see.
254 \if@compatibility\if@twocolumn\setlength\textwidth{410\p@}
257
\else
258 ⟨10pt&!bk⟩\setlength\textwidth{345\p@}259 ⟨11pt&!bk⟩\setlength\textwidth{360\p@}260 ⟨12pt&!bk⟩\setlength\textwidth{390\p@}261 ⟨10pt & bk⟩\setlength\textwidth{4.5in}
262 ⟨11pt & bk⟩\setlength\textwidth{5in}263 ⟨12pt & bk⟩\setlength\textwidth{5in}
264
\fi
255
256

When we are not in compatibility mode we can set some of the dimensions differently, taking into account the paper size for instance.
265 \else

First, we calculate the maximum \textwidth, which we will allow on the selected
paper and store it in \@tempdima. Then we store the length of a line with approximately 60–70 characters in \@tempdimb. The values given are more or lesssuitable when Computer Modern fonts are used.
\setlength\@tempdima{\paperwidth}\addtolength\@tempdima{-2in}
268 ⟨10pt⟩ \setlength\@tempdimb{345\p@}269 ⟨11pt⟩ \setlength\@tempdimb{360\p@}270 ⟨12pt⟩ \setlength\@tempdimb{390\p@}266
267

Now we can set the \textwidth, depending on whether we will be setting one
or two columns.
In two-column mode each column shouldn’t be wider than \@tempdimb (which
could happen on a3 paper for instance).
271
272\if@twocolumn\ifdim\@tempdima>2\@tempdimb\relax

12\setlength\textwidth{2\@tempdimb}\else\setlength\textwidth{\@tempdima}
\fi

273
274
275
276

In one-column mode the text should not be wider than the minimum of thepaperwidth (minus 2 inches for the margins) and the maximum length of a line as
defined by the number of characters.
\else\ifdim\@tempdima>\@tempdimb\relax279\setlength\textwidth{\@tempdimb}
280
\else
281
\setlength\textwidth{\@tempdima}
282
\fi
283
\fi
284 \fi277
278

Here we modify the width of the text a little to be a whole number of points.
285 \if@compatibility\else286\@settopoint\textwidth

287 \fi\textheight Now that we have computed the width of the text, we have to take care of theheight. The \textheight is the height of text (including footnotes and figures,
excluding running head and foot).
First make sure that the compatibility mode gets the same dimensions as we
had with LATEX2.09. The number of lines was calculated as the floor of the old\textheight minus \topskip, divided by \baselineskip for \normalsize. The
old value of \textheight was 528pt.
288 \if@compatibility
289 ⟨10pt&!bk⟩\setlength\textheight{43\baselineskip}\setlength\textheight{41\baselineskip}\setlength\textheight{38\baselineskip}\setlength\textheight{36\baselineskip}

290 ⟨10pt & bk⟩
291 ⟨11pt⟩
292 ⟨12pt⟩

Again we compute this, depending on the papersize and depending on thebaselineskip that is used, in order to have a whole number of lines on the page.
293 \else294\setlength\@tempdima{\paperheight}

We leave at least a 1 inch margin on the top and the bottom of the page.
295\addtolength\@tempdima{-2in}

We also have to leave room for the running headers and footers.
296\addtolength\@tempdima{-1.5in}Then we divide the result by the current \baselineskip and store this in the
count register \@tempcnta, which then contains the number of lines that fit on
this page.
297
298\divide\@tempdima\baselineskip\@tempcnta=\@tempdima

From this we can calculate the height of the text.
299\setlength\textheight{\@tempcnta\baselineskip}

300 \fi

13

The first line on the page has a height of \topskip.
301 \addtolength\textheight{\topskip}

6.3.3

Margins

Most of the values of these parameters are now calculated, based on the papersize
in use. In the calculations the \marginparsep needs to be taken into account so
we give it its value first.
\marginparsep The horizontal space between the main text and marginal notes is determined by\marginparpush \marginparsep, the minimum vertical separation between two marginal notes iscontrolled by \marginparpush.
302 \if@twocolumn
303\setlength\marginparsep {10\p@}

304 \else
305 ⟨10pt&!bk⟩\setlength\marginparsep{11\p@}\setlength\marginparsep{10\p@}307 ⟨12pt&!bk⟩ \setlength\marginparsep{10\p@}308 ⟨bk⟩ \setlength\marginparsep{7\p@}309 \fi
310 ⟨10pt | 11pt⟩\setlength\marginparpush{5\p@}311 ⟨12pt⟩\setlength\marginparpush{7\p@}306 ⟨11pt&!bk⟩

Now we can give the values for the other margin parameters. For native
LATEX 2ε , these are calculated.
\oddsidemargin First we give the values for the compatibility mode.
Values for two-sided printing:\evensidemargin\marginparwidth 312 \if@compatibility
313 ⟨∗bk⟩
314 ⟨10pt⟩\setlength\oddsidemargin{.5in}
315 ⟨11pt⟩\setlength\oddsidemargin{.25in}316 ⟨12pt⟩\setlength\oddsidemargin{.25in}317 ⟨10pt⟩\setlength\evensidemargin {1.5in}
318 ⟨11pt⟩\setlength\evensidemargin {1.25in}
319 ⟨12pt⟩\setlength\evensidemargin {1.25in}
320 ⟨10pt⟩\setlength\marginparwidth {.75in}
321 ⟨11pt⟩\setlength\marginparwidth {1in}322 ⟨12pt⟩\setlength\marginparwidth {1in}323 ⟨/bk⟩
324 ⟨∗!bk⟩
325\if@twoside
326 ⟨10pt⟩\setlength\oddsidemargin{44\p@}
327 ⟨11pt⟩\setlength\oddsidemargin{36\p@}
328 ⟨12pt⟩\setlength\oddsidemargin{21\p@}
329 ⟨10pt⟩\setlength\evensidemargin {82\p@}330 ⟨11pt⟩\setlength\evensidemargin {74\p@}331 ⟨12pt⟩\setlength\evensidemargin {59\p@}332 ⟨10pt⟩\setlength\marginparwidth {107\p@}333 ⟨11pt⟩\setlength\marginparwidth {100\p@}334 ⟨12pt⟩\setlength\marginparwidth {85\p@}Values for one-sided printing:
335

\else

14

336 ⟨10pt⟩
337 ⟨11pt⟩
338 ⟨12pt⟩
339 ⟨10pt⟩
340 ⟨11pt⟩
341 ⟨12pt⟩
342 ⟨10pt⟩
343 ⟨11pt⟩
344 ⟨12pt⟩
345\setlength\oddsidemargin\setlength\oddsidemargin\setlength\oddsidemargin\setlength\evensidemargin\setlength\evensidemargin\setlength\evensidemargin\setlength\marginparwidth\setlength\marginparwidth\setlength\marginparwidth{63\p@}{54\p@}{39.5\p@}{63\p@}{54\p@}{39.5\p@}{90\p@}{83\p@}{68\p@}\fi

346 ⟨/!bk⟩

And values for two-column mode:
347
348
349
350
351

\if@twocolumn\setlength\oddsidemargin {30\p@}\setlength\evensidemargin {30\p@}\setlength\marginparwidth {48\p@}\fi

When we are not in compatibility mode we can take the dimensions of theselected paper into account.
The values for \oddsidemargin and \marginparwidth will be set dependingon the status of the \if@twoside.
If @twoside is true (which is always the case for book) we make the inner
margin smaller than the outer one.
352 \else
353
354
355
356
357

\if@twoside\setlength\@tempdima\addtolength\@tempdima\setlength\oddsidemargin\addtolength\oddsidemargin{\paperwidth}{-\textwidth}{.4\@tempdima}{-1in}

The width of the margin for text is set to the remainder of the width except for a‘real margin’ of white space of width 0.4in. A check should perhaps be built in toensure that the (text) margin width does not get too small!
358
359
360

\setlength\marginparwidth{.6\@tempdima}\addtolength\marginparwidth {-\marginparsep}\addtolength\marginparwidth {-0.4in}

For one-sided printing we center the text on the page, by calculating the difference
between \textwidth and \paperwidth. Half of that difference is than used forthe margin (thus \oddsidemargin is 1in less).
361
362
363
364
365
366
367
368
369
370

\else
\setlength\@tempdima{\paperwidth}\addtolength\@tempdima{-\textwidth}\setlength\oddsidemargin{.5\@tempdima}\addtolength\oddsidemargin {-1in}\setlength\marginparwidth{.5\@tempdima}\addtolength\marginparwidth {-\marginparsep}\addtolength\marginparwidth {-0.4in}\addtolength\marginparwidth {-.4in}\fi

With the above algorithm the \marginparwidth can come out quite large which
we may not want.

15

371
372
373

\ifdim \marginparwidth >2in\setlength\marginparwidth{2in}\fiHaving done these calculations we make them pt values.
374
375\@settopoint\oddsidemargin\@settopoint\marginparwidth

The \evensidemargin can now be computed from the values set above.
376
377
378
379

\setlength\evensidemargin {\paperwidth}\addtolength\evensidemargin{-2in}\addtolength\evensidemargin{-\textwidth}\addtolength\evensidemargin{-\oddsidemargin}

Setting \evensidemargin to a full point value may produce a small error. However
it will lie within the error range a doublesided printer of today’s technology canaccurately print.
380\@settopoint\evensidemargin381 \fi\topmargin The \topmargin is the distance between the top of ‘the printable area’—whichis 1 inch below the top of the paper–and the top of the box which contains therunning head.
It can now be computed from the values set above.
382 \if@compatibility
383 ⟨!bk⟩\setlength\topmargin{27pt}\setlength\topmargin{.75in}
385 ⟨11pt & bk⟩ \setlength\topmargin{.73in}
386 ⟨12pt & bk⟩ \setlength\topmargin{.73in}
387 \else388\setlength\topmargin{\paperheight}
389\addtolength\topmargin{-2in}
390\addtolength\topmargin{-\headheight}
391\addtolength\topmargin{-\headsep}
392\addtolength\topmargin{-\textheight}
393\addtolength\topmargin{-\footskip}
384 ⟨10pt & bk⟩% this might be wrong!

By changing the factor in the next line the complete page can be shifted vertically.
\addtolength\topmargin{-.5\topmargin}\@settopoint\topmargin396 \fi
394
395

6.3.4

Footnotes\footnotesep \footnotesep is the height of the strut placed at the beginning of every footnote.

It equals the height of a normal \footnotesize strut in this class, thus no extra
space occurs between footnotes.
397 ⟨10pt⟩\setlength\footnotesep{6.65\p@}398 ⟨11pt⟩\setlength\footnotesep{7.7\p@}399 ⟨12pt⟩\setlength\footnotesep{8.4\p@}\footins \skip\footins is the space between the last line of the main text and the top of

the first footnote.
400 ⟨10pt⟩\setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@}16

401 ⟨11pt⟩\setlength{\skip\footins}{10\p@ \@plus 4\p@ \@minus 2\p@}402 ⟨12pt⟩\setlength{\skip\footins}{10.8\p@ \@plus 4\p@ \@minus 2\p@}403 ⟨/10pt | 11pt | 12pt⟩

6.3.5

Float placement parameters

All float parameters are given default values in the LATEX 2ε kernel. For this reason
parameters that are not counters need to be set with \renewcommand.
Limits for the placement of floating objects\c@topnumber The topnumber counter holds the maximum number of floats that can appear on

the top of a text page.
404 ⟨∗article | report | book⟩405 \setcounter{topnumber}{2}\topfraction This indicates the maximum part of a text page that can be occupied by floats atthe top.
406 \renewcommand\topfraction{.7}\c@bottomnumber The bottomnumber counter holds the maximum number of floats that can appear

on the bottom of a text page.
407 \setcounter{bottomnumber}{1}\bottomfraction This indicates the maximum part of a text page that can be occupied by floats atthe bottom.
408 \renewcommand\bottomfraction{.3}\c@totalnumber This indicates the maximum number of floats that can appear on any text page.
409 \setcounter{totalnumber}{3}\textfraction This indicates the minimum part of a text page that has to be occupied by text.
410 \renewcommand\textfraction{.2}\floatpagefraction This indicates the minimum part of a page that has to be occupied by floating

objects before a ‘float page’ is produced.
411 \renewcommand\floatpagefraction{.5}\c@dbltopnumber The dbltopnumber counter holds the maximum number of two-column floats that

can appear on the top of a two-column text page.
412 \setcounter{dbltopnumber}{2}\dbltopfraction This indicates the maximum part of a two-column text page that can be occupied

by two-column floats at the top.
413 \renewcommand\dbltopfraction{.7}\dblfloatpagefraction This indicates the minimum part of a page that has to be occupied by two-column

wide floating objects before a ‘float page’ is produced.
414 \renewcommand\dblfloatpagefraction{.5}415 ⟨/article | report | book⟩17

Floats on a text page\floatsep When a floating object is placed on a page with text, these parameters control the\textfloatsep separation between the float and the other objects on the page. These parameters\intextsep are used for both one-column mode and single-column floats in two-column mode.

\floatsep is the space between adjacent floats that are moved to the top or
bottom of the text page.
\textfloatsep is the space between the main text and floats at the top or
bottom of the page.
\intextsep is the space between in-text floats and the text.
416 ⟨∗10pt⟩
417 \setlength\floatsep{12\p@ \@plus 2\p@ \@minus 2\p@}418 \setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}419 \setlength\intextsep{12\p@ \@plus 2\p@ \@minus 2\p@}420 ⟨/10pt⟩
421 ⟨∗11pt⟩
422 \setlength\floatsep{12\p@ \@plus 2\p@ \@minus 2\p@}423 \setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}424 \setlength\intextsep{12\p@ \@plus 2\p@ \@minus 2\p@}425 ⟨/11pt⟩
426 ⟨∗12pt⟩
427 \setlength\floatsep{12\p@ \@plus 2\p@ \@minus 4\p@}428 \setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}429 \setlength\intextsep{14\p@ \@plus 4\p@ \@minus 4\p@}430 ⟨/12pt⟩\dblfloatsep When floating objects that span the whole \textwidth are placed on a text page\dbltextfloatsep when we are in two-column mode the separation between the float and the text is

controlled by \dblfloatsep and \dbltextfloatsep.
\dblfloatsep is the space between adjacent floats that are moved to the top
or bottom of the text page.
\dbltextfloatsep is the space between the main text and floats at the top
or bottom of the page.
431 ⟨∗10pt⟩
432 \setlength\dblfloatsep{12\p@ \@plus 2\p@ \@minus 2\p@}433 \setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}434 ⟨/10pt⟩
435 ⟨∗11pt⟩
436 \setlength\dblfloatsep{12\p@ \@plus 2\p@ \@minus 2\p@}437 \setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}438 ⟨/11pt⟩
439 ⟨∗12pt⟩
440 \setlength\dblfloatsep{14\p@ \@plus 2\p@ \@minus 4\p@}441 \setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}442 ⟨/12pt⟩

Floats on their own page or column\@fptop When floating objects are placed on separate pages the layout of such pages is con\@fpsep trolled by these parameters. At the top of the page \@fptop amount of stretchable\@fpbot whitespace is inserted, at the bottom of the page we get an \@fpbot amount of

stretchable whitespace. Between adjacent floats the \@fpsep is inserted.

18

These parameters are used for the placement of floating objects in one-column
mode, or in single-column floats in two-column mode.
Note that at least one of the two parameters \@fptop and \@fpbot should
contain a plus ...fil to allow filling the remaining empty space.
443 ⟨∗10pt⟩
444 \setlength\@fptop{0\p@ \@plus 1fil}
445 \setlength\@fpsep{8\p@ \@plus 2fil}
446 \setlength\@fpbot{0\p@ \@plus 1fil}
447 ⟨/10pt⟩
448 ⟨∗11pt⟩
449 \setlength\@fptop{0\p@ \@plus 1fil}
450 \setlength\@fpsep{8\p@ \@plus 2fil}451 \setlength\@fpbot{0\p@ \@plus 1fil}
452 ⟨/11pt⟩
453 ⟨∗12pt⟩
454 \setlength\@fptop{0\p@ \@plus 1fil}
455 \setlength\@fpsep{10\p@ \@plus 2fil}
456 \setlength\@fpbot{0\p@ \@plus 1fil}
457 ⟨/12pt⟩\@dblfptop Double-column floats in two-column mode are handled with similar parameters.
\@dblfpsep 458 ⟨∗10pt⟩\@dblfpbot 459 \setlength\@dblfptop{0\p@ \@plus 1fil}
460 \setlength\@dblfpsep{8\p@ \@plus 2fil}
461 \setlength\@dblfpbot{0\p@ \@plus 1fil}
462 ⟨/10pt⟩
463 ⟨∗11pt⟩
464 \setlength\@dblfptop{0\p@ \@plus 1fil}
465 \setlength\@dblfpsep{8\p@ \@plus 2fil}
466 \setlength\@dblfpbot{0\p@ \@plus 1fil}
467 ⟨/11pt⟩
468 ⟨∗12pt⟩
469 \setlength\@dblfptop{0\p@ \@plus 1fil}
470 \setlength\@dblfpsep{10\p@ \@plus 2fil}
471 \setlength\@dblfpbot{0\p@ \@plus 1fil}
472 ⟨/12pt⟩
473 ⟨∗article | report | book⟩

6.4

Page Styles

The page style foo is defined by defining the command \ps@foo. This commandshould make only local definitions. There should be no stray spaces in the definition, since they could lead to mysterious extra spaces in the output (well, that’s
something that should be always avoided).
\@evenhead The \ps@... command defines the macros \@oddhead, \@oddfoot, \@evenhead,\@oddhead and \@evenfoot to define the running heads and feet—e.g., \@oddhead is the\@evenfoot macro to produce the contents of the heading box for odd-numbered pages. It is\@oddfoot called inside an \hbox of width \textwidth.

19

6.4.1Marking conventions

To make headings determined by the sectioning commands, the page style defines
the commands \chaptermark, \sectionmark, . . . ,where \chaptermark{⟨TEXT ⟩} is called by \chapter to set a mark, and so on.
The \...mark commands and the \...head macros are defined with the helpof the following macros. (All the \...mark commands should be initialized to
no-ops.)LATEX extends TEX’s \mark facility by producing two kinds of marks, a ‘left’
and a ‘right’ mark, using the following commands:\markboth{⟨LEFT ⟩}{⟨RIGHT ⟩}: Adds both marks.
\markright{⟨RIGHT ⟩}: Adds a ‘right’ mark.
\leftmark: Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
macros, it gets the current ‘left’ mark. \leftmark works like TEX’s \botmark
command.
\rightmark: Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
macros, it gets the current ‘right’ mark. \rightmark works like TEX’s\firstmark command.
The marking commands work reasonably well for right marks ‘numbered
within’ left marks—e.g., the left mark is changed by a \chapter command andthe right mark is changed by a \section command. However, it does produce
somewhat anomalous results if two \markboth’s occur on the same page.
Commands like \tableofcontents that should set the marks in some pagestyles use a \@mkboth command, which is \let by the pagestyle command(\ps@...) to \markboth for setting the heading or to \@gobbletwo to do nothing.
6.4.2

Defining the page styles

The pagestyles empty and plain are defined in the LATEX format.
\ps@headings The definition of the page style headings has to be different for two sided printing

than it is for one sided printing.
474 \if@twoside475\def\ps@headings{%

The running feet are empty in this page style, the running head contains the page
number and one of the marks.
476
477
478

\let\@oddfoot\@empty\let\@evenfoot\@empty\def\@evenhead{\thepage\hfil\slshape\leftmark}%\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%

When using this page style, the contents of the running head is determined by
the chapter and section titles. So we \let \@mkboth to \markboth.
479\let\@mkboth\markboth

For the article document class we define \sectionmark to clear the right markand put the number of the section (when it is numbered) and its title in the left
mark. The rightmark is set by \subsectionmark to contain the subsection titles.
Note the use of ##1 for the parameter of the \sectionmark command, which
will be defined when \ps@headings is executed.
480 ⟨∗article⟩

20\def\sectionmark##1{%\markboth {\MakeUppercase{%483\ifnum \c@secnumdepth >\z@484
\thesection\quad
485
\fi
486
##1}}{}}%
487\def\subsectionmark##1{%
488\markright {%489\ifnum \c@secnumdepth >\@ne490\thesubsection\quad
491
\fi
492
##1}}}
493 ⟨/article⟩

481
482

In the report and book document classes we use the \chaptermark and\sectionmark macros to fill the running heads.
Note the use of ##1 for the parameter of the \chaptermark command, which
will be defined when \ps@headings is executed.
494 ⟨∗report | book⟩\def\chaptermark##1{%\markboth {\MakeUppercase{%
497\ifnum \c@secnumdepth >\m@ne498 ⟨book⟩\if@mainmatter
499\@chapapp\ \thechapter. \ %500 ⟨book⟩
\fi
501
\fi
502
##1}}{}}%
503\def\sectionmark##1{%
504\markright {\MakeUppercase{%505\ifnum \c@secnumdepth >\z@506
\thesection. \ %
507
\fi
508
##1}}}}
509 ⟨/report | book⟩

495
496

The definition of \ps@headings for one sided printing can be much simpler,
because we treat even and odd pages the same. Therefore we don’t need to define\@even....
510 \else
511
512
513
514

\def\ps@headings{%\let\@oddfoot\@empty\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%\let\@mkboth\markboth

We use \markright now instead of \markboth as we did for two sided printing.
515 ⟨∗article⟩\def\sectionmark##1{%\markright {\MakeUppercase{%
518\ifnum \c@secnumdepth >\m@ne519\thesection\quad
520
\fi
521
##1}}}}
522 ⟨/article⟩

516
517

523 ⟨∗report | book⟩21

\def\chaptermark##1{%\markright {\MakeUppercase{%526\ifnum \c@secnumdepth >\m@ne527 ⟨book⟩\if@mainmatter
528\@chapapp\ \thechapter. \ %529 ⟨book⟩
\fi
530
\fi
531
##1}}}}
532 ⟨/report | book⟩533 \fi524
525\ps@myheadings The definition of the page style myheadings is fairly simple because the user de-termines the contents of the running head himself by using the \markboth and\markright commands.
534 \def\ps@myheadings{%
535
536
537

\let\@oddfoot\@empty\let\@evenfoot\@empty\def\@evenhead{\thepage\hfil\slshape\leftmark}%\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%

We have to make sure that the marking commands that are used by the chapter
and section headings are disabled. We do this \letting them to a macro thatgobbles its argument(s).
\let\@mkboth\@gobbletwo\let\chaptermark\@gobble
540\let\sectionmark\@gobble
541 ⟨article⟩\let\subsectionmark\@gobble
542
}
538

539 ⟨!article⟩

7

Document Markup

7.1

The title\title These three macros are provided by the LATEX format to provide information\author about the title, author(s) and date of the document. The information is stored\date away in internal control sequences. It is the task of the \maketitle command touse the information provided. The definitions of these macros are shown here for
information.
543 % \DeclareRobustCommand*{\title}[1]{\gdef\@title{#1}}544 % \DeclareRobustCommand*{\author}[1]{\gdef\@author{#1}}545 % \DeclareRobustCommand*{\date}[1]{\gdef\@date{#1}}

The \date macro gets today’s date by default.
546 % \date{\today}\maketitle The definition of \maketitle depends on whether a separate title page is made.

This is the default for the report and book document classes, but for the article
class it is optional.
When we are making a title page, we locally redefine \footnotesize andfootnoterule to change the appearance of the footnotes that are produced by
the \thanks command; these changes affect all footnotes.
547 \if@titlepage
548\newcommand\maketitle{\begin{titlepage}%

22

549
550
551

\let\footnotesize\small\let\footnoterule\relax\let \footnote \thanks

We center the entire title vertically; the centering is set off a little by adding a\vskip. (In compatibility mode the page number is set to 0 by the titlepage
environment to keep the behaviour of LATEX 2.09 style files.)552
553\null\vfil\vskip 60\p@

Then we set the title, in a \LARGE font; leave a little space and set the author(s)in a \large font. We do this inside a tabular environment to get them in a single
column. Before the date we leave a little whitespace again.
554
555
556
557
558
559
560
561
562
563
564

\begin{center}%{\LARGE \@title \par}%\vskip 3em%{\large\lineskip .75em%\begin{tabular}[t]{c}%\@author\end{tabular}\par}%\vskip 1.5em%{\large \@date \par}%\end{center}\par% Set date in \large size.

Then we call \@thanks to print the information that goes into the footnote andfinish the page.
565
566
567

\@thanks\vfil\null\end{titlepage}%

We reset the footnote counter, disable \thanks and \maketitle and save somestorage space by emptying the internal information macros.
568
569
570
571
572
573
574

\setcounter{footnote}{0}%\global\let\thanks\relax\global\let\maketitle\relax\global\let\@thanks\@empty\global\let\@author\@empty\global\let\@date\@empty\global\let\@title\@empty

After the title is set the declaration commands \title, etc. can vanish. The
definition of \and makes only sense within the argument of \author so this cango as well.
575
576
577
578
579

\global\let\title\relax\global\let\author\relax\global\let\date\relax\global\let\and\relax}

When the title is not on a page of its own, the layout of the title is a little
different. We use symbols to mark the footnotes and we have to deal with twocolumn documents.
Therefore we first start a new group to keep changes local. Then we redefine\thefootnote to use \fnsymbol; and change \@makefnmark so that footnotemarks
have zero width (to make the centering of the author names look better).

23

580 \else
581
582
583
584
585
586
587

\newcommand\maketitle{\par\begingroup\renewcommand\thefootnote{\@fnsymbol\c@footnote}%\def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%\long\def\@makefntext##1{\parindent 1em\noindent\hb@xt@1.8em{%\hss\@textsuperscript{\normalfont\@thefnmark}}##1}%

If this is a two-column document we start a new page in two-column mode, with thetitle set to the full width of the text. The actual printing of the title informationis left to \@maketitle.
\if@twocolumn\ifnum \col@number=\@ne\@maketitle\else\twocolumn[\@maketitle]%
\fi
\else

588
589
590
591
592
593
594

When this is not a two-column document we just start a new page, prevent floating
objects from appearing on the top of this page and print the title information.
\newpage\global\@topnum\z@\@maketitle
\fi

595
596
597
598

% Prevents figures from going at top of page.

This page gets a plain layout. We call \@thanks to produce the footnotes.
\thispagestyle{plain}\@thanks599

Now we can close the group, reset the footnote counter, disable \thanks,\maketitle and \@maketitle and save some storage space by emptying the internal information macros.
\endgroup\setcounter{footnote}{0}%\global\let\thanks\relax\global\let\maketitle\relax\global\let\@maketitle\relax\global\let\@thanks\@empty\global\let\@author\@empty\global\let\@date\@empty\global\let\@title\@empty\global\let\title\relax\global\let\author\relax\global\let\date\relax\global\let\and\relax

600
601
602
603
604
605
606
607
608
609
610
611
612
613

}

\@maketitle This macro takes care of formatting the title information when we have no separate

title page.
We always start a new page, leave some white space and center the information.
The title is set in a \LARGE font, the author names and the date in a \large font.
614 \def\@maketitle{%
615
616\newpage\null

24

\vskip 2em%
\begin{center}%
619\let \footnote \thanks
620{\LARGE \@title \par}%621\vskip 1.5em%
622{\large623\lineskip .5em%
624\begin{tabular}[t]{c}%625\@author626\end{tabular}\par}%627\vskip 1em%
628{\large \@date}%629\end{center}%
630
\par
631
\vskip 1.5em}
632 \fi
617
618

7.2

Chapters and Sections

7.2.1

Building blocks

The definitions in this part of the class file make use of two internal macros,\@startsection and \secdef. To understand what is going on here, we describe
their syntax.
The macro \@startsection has 6 required arguments, optionally followed bya ∗, an optional argument and a required argument:\@startsection⟨name⟩⟨level ⟩⟨indent⟩⟨beforeskip⟩⟨afterskip⟩⟨style⟩ optional *[⟨altheading⟩]⟨heading⟩
It is a generic command to start a section, the arguments have the following
meaning:⟨name⟩ The name of the user level command, e.g., ‘section’.
⟨level ⟩ A number, denoting the depth of the section – e.g., chapter=1, section =2, etc. A section number will be printed if and only if ⟨level ⟩ ≤ the value ofthe secnumdepth counter.
⟨indent⟩ The indentation of the heading from the left margin⟨beforeskip⟩ The absolute value of this argument gives the skip to leave above
the heading. If it is negative, then the paragraph indent of the text following
the heading is suppressed.
⟨afterskip⟩ If positive, this gives the skip to leave below the heading, else it gives
the skip to leave to the right of a run-in heading.
⟨style⟩ Commands to set the style of the heading.
∗ When this is missing the heading is numbered and the corresponding counter isincremented.
⟨altheading ⟩ Gives an alternative heading to use in the table of contents and in
the running heads. This should not be present when the ∗ form is used.
⟨heading ⟩ The heading of the new section.
25

A sectioning command is normally defined to \@startsection and its first six
arguments.
The macro \secdef can be used when a sectioning command is defined without
using \@startsection. It has two arguments:\secdef⟨unstarcmds⟩⟨starcmds⟩⟨unstarcmds⟩ Used for the normal form of the sectioning command.
⟨starcmds⟩ Used for the ∗-form of the sectioning command.
You can use \secdef as follows:\def\chapter { ... \secdef \CMDA \CMDB }\def\CMDA[#1]#2{ ... } % Command to define% \chapter[...]{...}\def\CMDB#1{ ... }% Command to define% \chapter*{...}

7.2.2

Mark commands\chaptermark Default initializations of \...mark commands. These commands are used in the\sectionmark definition of the page styles (see section 6.4.2) Most of them are already defined\subsectionmark by the LATEX format, so they are only shown here.
\subsubsectionmark 633 ⟨!article⟩\newcommand*\chaptermark[1]{}\paragraphmark 634 % \newcommand*\sectionmark[1]{}\subparagraphmark 635 % \newcommand*\subsectionmark[1]{}636 % \newcommand*\subsubsectionmark[1]{}637 % \newcommand*\paragraphmark[1]{}638 % \newcommand*\subparagraphmark[1]{}7.2.3

Define Counters\c@secnumdepth The value of the counter secnumdepth gives the depth of the highest-level sectioning

command that is to produce section numbers.
639 ⟨article⟩\setcounter{secnumdepth}{3}640 ⟨!article⟩\setcounter{secnumdepth}{2}\c@part These counters are used for the section numbers. The macro\c@chapter \newcounter{⟨newctr ⟩}[⟨oldctr ⟩]\c@section defines⟨newctr ⟩ to be a counter, which is reset to zero when counter ⟨oldctr ⟩ is\c@subsection stepped. Counter ⟨oldctr ⟩ must already be defined.
\c@subsubsection 641 \newcounter {part}\c@paragraph 642 ⟨article⟩\newcounter {section}\c@subparagraph 643 ⟨∗report | book⟩644 \newcounter {chapter}645 \newcounter {section}[chapter]
646 ⟨/report | book⟩647 \newcounter {subsection}[section]
648 \newcounter {subsubsection}[subsection]
649 \newcounter {paragraph}[subsubsection]
650 \newcounter {subparagraph}[paragraph]26

\thepart For any counter CTR, \theCTR is a macro that defines the printed version of\thechapter counter CTR. It is defined in terms of the following macros:\thesection\arabic{COUNTER} prints the value of COUNTER as an arabic numeral.
\thesubsection\roman{COUNTER} prints the value of COUNTER as a lowercase roman nu\thesubsubsection meral.
\theparagraph\Roman{COUNTER} prints the value of COUNTER as an uppercase roman\thesubparagraph numeral.
\alph{COUNTER} prints the value of COUNTER as a lowercase letter: 1 = a,2 = b, etc.
\Alph{COUNTER} prints the value of COUNTER as an uppercase letter:
1 = A, 2 = B, etc.
Actually to save space the internal counter representations and the commands
operating on those are used.
651 \renewcommand \thepart {\@Roman\c@part}652 ⟨article⟩\renewcommand \thesection {\@arabic\c@section}
653 ⟨∗report | book⟩654 \renewcommand \thechapter {\@arabic\c@chapter}655 \renewcommand \thesection {\thechapter.\@arabic\c@section}
656 ⟨/report | book⟩657 \renewcommand\thesubsection{\thesection.\@arabic\c@subsection}

658 \renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection}
659 \renewcommand\theparagraph{\thesubsubsection.\@arabic\c@paragraph}

660 \renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}\@chapapp \@chapapp is initially defined to be ‘\chaptername’. The \appendix command

redefines it to be ‘\appendixname’.
661 ⟨report | book⟩\newcommand\@chapapp{\chaptername}

7.2.4

Front Matter, Main Matter, and Back Matter

A book contains these three (logical) sections. The switch \@mainmatter is true iff
we are processing Main Matter. When this switch is false, the \chapter command
does not print chapter numbers.
Here we define the commands that start these sections.
\frontmatter This command starts Roman page numbering and turns off chapter numbering.

Since this restarts the page numbering from 1, it should also ensure that a recto
page is used.
662 ⟨∗book⟩663 \newcommand\frontmatter{%
664 %\if@openright\cleardoublepage
666 %
\else
667 %
\clearpage
668 %
\fi
669
\@mainmatterfalse
670\pagenumbering{roman}}665\mainmatter This command clears the page, starts arabic page numbering and turns on chapter

numbering. Since this restarts the page numbering from 1, it should also ensurethat a recto page is used.
671 \newcommand\mainmatter{%27

672 %\if@openright\cleardoublepage
674 %
\else
675 %
\clearpage
676 %
\fi
677
\@mainmattertrue
678\pagenumbering{arabic}}673\backmatter This clears the page, turns off chapter numbering and leaves page numbering

unchanged.
679 \newcommand\backmatter{%\if@openright\cleardoublepage
682
\else
683
\clearpage
684
\fi
685
\@mainmatterfalse}
686 ⟨/book⟩
680
681

7.2.5

Parts

\part The command to start a new part of our document.

In the article class the definition of \part is rather simple; we start a new paragraph, add a little white space, suppress the indentation of the first paragraph andmake use of \secdef. As in other sectioning commands (cf. \@startsection in
the LATEX 2ε kernel), we need to check the @noskipsec switch and force horizontal
mode if it is set.
687 ⟨∗article⟩
688 \newcommand\part{%\if@noskipsec \leavevmode \fi\par691\addvspace{4ex}%
692\@afterindentfalse693\secdef\@part\@spart}694 ⟨/article⟩
689
690

For the report and book classes we things a bit different.
We start a new (righthand) page and use the plain pagestyle.
695 ⟨∗report | book⟩696 \newcommand\part{%
697
698
699
700
701
702

\if@openright\cleardoublepage\else\clearpage\fi\thispagestyle{plain}%

When we are making a two-column document, this will be a one column page. We
use @tempswa to remember to switch back to two columns.
703
704
705
706
707

\if@twocolumn\onecolumn\@tempswatrue\else\@tempswafalse

28

708

\fi

We need an empty box to prevent the fil glue from disappearing.
709\null\vfilHere we use \secdef to indicate which commands to use to make the actual
heading.
710\secdef\@part\@spart}

711 ⟨/report | book⟩\@part This macro does the actual formatting of the title of the part. Again the macro

is differently defined for the article document class than for the document classes
report and book.
When secnumdepth is larger than −1 for the document class article, we have anumbered part, otherwise it is unnumbered.
712 ⟨∗article⟩
713 \def\@part[#1]#2{%
714
715
716
717
718
719

\ifnum \c@secnumdepth >\m@ne\refstepcounter{part}%\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%\else\addcontentsline{toc}{part}{#1}%\fi

We print the title flush left in the article class. Also we prevent breaking betweenlines and reset the font.
720
721
722

{\parindent \z@ \raggedright\interlinepenalty \@M\normalfont

When this is a numbered part we have to print the number and the title. The\nobreak should prevent a page break here.
723
724
725
726
727

\ifnum \c@secnumdepth >\m@ne\Large\bfseries \partname\nobreakspace\thepart\par\nobreak\fi\huge \bfseries #2%

Now we empty the mark registers, leave some white space and let \@afterheadingtake care of suppressing the indentation.
\markboth{}{}\par}%\nobreak730\vskip 3ex
731\@afterheading}732 ⟨/article⟩
728
729

When secnumdepth is larger than −2 for the document class report and book,
we have a numbered part, otherwise it is unnumbered.
733 ⟨∗report | book⟩734 \def\@part[#1]#2{%
735
736
737
738
739
740

\ifnum \c@secnumdepth >-2\relax\refstepcounter{part}%\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%\else\addcontentsline{toc}{part}{#1}%\fi29We empty the mark registers and center the title on the page in the report andbook document classes. Also we prevent breaking between lines and reset the font.
741
742
743
744

\markboth{}{}%{\centering\interlinepenalty \@M\normalfont

When this is a numbered part we have to print the number.
745
746
747

\ifnum \c@secnumdepth >-2\relax\huge\bfseries \partname\nobreakspace\thepart\parWe leave some space before we print the title and leave the finishing up to\@endpart.
\vskip 20\p@\fi
750\Huge \bfseries #2\par}%751\@endpart}752 ⟨/report | book⟩748
749\@spart This macro does the actual formatting of the title of the part when the star formof the user command was used. In this case we never print a number. Otherwise
the formatting is the same.
The differences between the definition of this macro in the article documentclass and in the report and book document classes are similar as they were for\@part.
753 ⟨∗article⟩
754 \def\@spart#1{%{\parindent \z@ \raggedright\interlinepenalty \@M757\normalfont
758\huge \bfseries #1\par}%759\nobreak760\vskip 3ex
761\@afterheading}762 ⟨/article⟩
763 ⟨∗report | book⟩764 \def\@spart#1{%
765{\centering
766\interlinepenalty \@M
767\normalfont
768\Huge \bfseries #1\par}%769\@endpart}
770 ⟨/report | book⟩755
756\@endpart This macro finishes the part page, for both \@part and \@spart.

First we fill the current page.
771 ⟨∗report | book⟩772 \def\@endpart{\vfil\newpage

Then, when we are in twosided mode and chapters are supposed to be on righthand sides, we produce a completely blank page.
773
774\if@twoside\if@openright30

\null\thispagestyle{empty}%\newpage
\fi
\fi

775
776
777
778
779

When this was a two-column document we have to switch back to two-column
mode.
\if@tempswa\twocolumn
\fi}

780
781
782
783 ⟨/report | book⟩

7.2.6

Chapters\chapter A chapter should always start on a new page therefore we start by calling\clearpage and setting the pagestyle for this page to plain.
784 ⟨∗report | book⟩785 \newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi786\thispagestyle{plain}%

Then we prevent floats from appearing at the top of this page because it looks
weird to see a floating object above a chapter title.
787\global\@topnum\z@Then we suppress the indentation of the first paragraph by setting the switch\@afterindent to false. We use \secdef to specify the macros to use for actuallysetting the chapter title.
788
789\@afterindentfalse\secdef\@chapter\@schapter}\@chapter This macro is called when we have a numbered chapter. When secnumdepth islarger than −1 and, in the book class, \@mainmatter is true, we display thechapter number. We also inform the user that a new chapter is about to be
typeset by writing a message to the terminal.
790 \def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne791 ⟨book⟩
792
793
794
795

\if@mainmatter\refstepcounter{chapter}%\typeout{\@chapapp\space\thechapter.}%\addcontentsline{toc}{chapter}%{\protect\numberline{\thechapter}#1}%796 ⟨∗book⟩
797
798
799

\else
\addcontentsline{toc}{chapter}{#1}%\fi

800 ⟨/book⟩
801
802
803

\else
\addcontentsline{toc}{chapter}{#1}%\fiAfter having written an entry to the table of contents we store the (alternative)
title of this chapter with \chaptermark and add some white space to the lists offigures and tables.
804\chaptermark{#1}%31

\addtocontents{lof}{\protect\addvspace{10\p@}}%\addtocontents{lot}{\protect\addvspace{10\p@}}%

805
806

Then we call upon \@makechapterhead to format the actual chapter title. We
have to do this in a special way when we are in two-column mode in order tohave the chapter title use the entire \textwidth. In one-column mode we call\@afterheading which takes care of suppressing the indentation.
\if@twocolumn\@topnewpage[\@makechapterhead{#2}]%\else\@makechapterhead{#2}%\@afterheading
\fi}

807
808
809
810
811
812

\@makechapterhead The macro above uses \@makechapterhead⟨text⟩ to format the heading of thechapter.
We begin by leaving some white space. Then we open a group in which wehave a paragraph indent of 0pt, and in which we have the text set ragged right.
We also reset the font.
813 \def\@makechapterhead#1{%
814
815\vspace*{50\p@}%{\parindent \z@ \raggedright \normalfont

Then we check whether the number of the chapter has to be printed. If so weleave some whitespace between the chapternumber and its title.
\ifnum \c@secnumdepth >\m@ne\if@mainmatter818\huge\bfseries \@chapapp\space \thechapter819\par\nobreak
820\vskip 20\p@821 ⟨book⟩
\fi
822
\fi
816

817 ⟨book⟩

Now we set the title in a large bold font. We prevent a pagebreak from occurringin the middle of or after the title. Finally we leave some whitespace before thetext begins.
\interlinepenalty\@M\Huge \bfseries #1\par\nobreak\vskip 40\p@

823
824
825
826

}}

\@schapter This macro is called when we have an unnumbered chapter. It is much simpler

than \@chapter because it only needs to typeset the chapter title.
827 \def\@schapter#1{\if@twocolumn
828
829
830
831
832

\@topnewpage[\@makeschapterhead{#1}]%\else\@makeschapterhead{#1}%\@afterheading\fi}\@makeschapterhead The macro above uses \@makeschapterhead⟨text⟩to format the heading of thechapter. It is similar to \@makechapterhead except that it never has to print achapter number.

32

833 \def\@makeschapterhead#1{%\vspace*{50\p@}%{\parindent \z@ \raggedright836\normalfont
837\interlinepenalty\@M838\Huge \bfseries #1\par\nobreak
839\vskip 40\p@840}}
841 ⟨/report | book⟩
834
835

7.2.7

Lower level headings

These commands all make use of \@startsection.
\section This gives a normal heading with white space above and below the heading, thetitle set in \Large\bfseries, and no indentation on the first paragraph.
842 \newcommand\section{\@startsection {section}{1}{\z@}%{-3.5ex \@plus -1ex \@minus -.2ex}%{2.3ex \@plus.2ex}%{\normalfont\Large\bfseries}}

843
844
845

\subsection This gives a normal heading with white space above and below the heading, thetitle set in \large\bfseries, and no indentation on the first paragraph.
846 \newcommand\subsection{\@startsection{subsection}{2}{\z@}%{-3.25ex\@plus -1ex \@minus -.2ex}%{1.5ex \@plus .2ex}%{\normalfont\large\bfseries}}

847
848
849

\subsubsection This gives a normal heading with white space above and below the heading, thetitle set in \normalsize\bfseries, and no indentation on the first paragraph.
850 \newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%{-3.25ex\@plus -1ex \@minus -.2ex}%{1.5ex \@plus .2ex}%{\normalfont\normalsize\bfseries}}

851
852
853

\paragraph This gives a run-in heading with white space above and to the right of the heading,the title set in \normalsize\bfseries.
854 \newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%{3.25ex \@plus1ex \@minus.2ex}%{-1em}%{\normalfont\normalsize\bfseries}}

855
856
857

\subparagraph This gives an indented run-in heading with white space above and to the right of

the heading, the title set in \normalsize\bfseries.
858 \newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%{3.25ex \@plus1ex \@minus .2ex}%{-1em}%{\normalfont\normalsize\bfseries}}

859
860
861

33

7.3

Lists

7.3.1

General List Parameters

The following commands are used to set the default values for the list environment’s parameters. See the LATEX manual for an explanation of the meaningsof the parameters. Defaults for the list environment are set as follows. First,\rightmargin, \listparindent and \itemindent are set to 0pt. Then, for a
Kth level list, the command \@listK is called, where ‘K’ denotes ‘i’, ’‘i’, ... , ‘vi’.
(I.e., \@listiii is called for a third-level list.) By convention, \@listK should
set \leftmargin to \leftmarginK.
\leftmargin When we are in two-column mode some of the margins are set somewhat smaller.
\leftmargini 862 \if@twocolumn\leftmarginii 863 \setlength\leftmargini {2em}\leftmarginiii 864 \else\leftmarginiv 865 \setlength\leftmargini {2.5em}\leftmarginv 866 \fi\leftmarginvi Until the whole of the parameter setting in these files is rationalised, we need to

set the value of \leftmargin at this outer level.
867 \leftmargin\leftmargini

The following three are calculated so that they are larger than the sum of\labelsep and the width of the default labels (which are ‘(m)’, ‘vii.’ and ‘M.’).
868 \setlength\leftmarginii{2.2em}869 \setlength\leftmarginiii {1.87em}
870 \setlength\leftmarginiv{1.7em}871 \if@twocolumn\setlength\leftmarginv {.5em}\setlength\leftmarginvi {.5em}
874 \else875\setlength\leftmarginv {1em}876\setlength\leftmarginvi {1em}877 \fi872
873\labelsep \labelsep is the distance between the label and the text of an item; \labelwidth\labelwidth is the width of the label.
878 \setlength\labelsep {.5em}\labelwidth{\leftmargini}880 \addtolength\labelwidth{-\labelsep}
879 \setlength\partopsep When the user leaves a blank line before the environment an extra vertical spaceof \partopsep is inserted, in addition to \parskip and \topsep.
881 ⟨/article | report | book⟩882 ⟨10pt⟩\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@}883 ⟨11pt⟩\setlength\partopsep{3\p@ \@plus 1\p@ \@minus 1\p@}884 ⟨12pt⟩\setlength\partopsep{3\p@ \@plus 2\p@ \@minus 2\p@}\@beginparpenalty These penalties are inserted before and after a list or paragraph environment.
\@endparpenalty They are set to a bonus value to encourage page breaking at these points.
\@itempenalty This penalty is inserted between list items.
885 ⟨∗article | report | book⟩34

886 \@beginparpenalty -\@lowpenalty
887 \@endparpenalty-\@lowpenalty-\@lowpenalty
889 ⟨/article | report | book⟩888 \@itempenalty\@listi \@listi defines the values of \leftmargin, \parsep, \topsep, \itemsep, etc.
\@listI for the lists that appear on top-level. Its definition is modified by the font-sizecommands (eg within \small the list parameters get “smaller” values).
For this reason listI is defined to hold a saved copy of listi so that \normalsize
can switch all parameters back.
890 ⟨∗10pt | 11pt | 12pt⟩
891 \def\@listi{\leftmargin\leftmargini
892 ⟨∗10pt⟩
893
894
895

\parsep 4\p@ \@plus2\p@ \@minus\p@\topsep 8\p@ \@plus2\p@ \@minus4\p@\itemsep4\p@ \@plus2\p@ \@minus\p@}896 ⟨/10pt⟩
897 ⟨∗11pt⟩
898
899
900

\parsep 4.5\p@ \@plus2\p@ \@minus\p@\topsep 9\p@\@plus3\p@ \@minus5\p@\itemsep4.5\p@ \@plus2\p@ \@minus\p@}901 ⟨/11pt⟩
902 ⟨∗12pt⟩
903
904
905

\parsep 5\p@ \@plus2.5\p@ \@minus\p@\topsep 10\p@ \@plus4\p@\@minus6\p@\itemsep5\p@ \@plus2.5\p@ \@minus\p@}906 ⟨/12pt⟩
907 \let\@listI\@listi

We initialise the parameters although strictly speaking that is not necessary.
908 \@listi\@listii Here are the same macros for the higher level lists. Note that they don’t have\@listiii saved versions and are not modified by the font size commands. In other words\@listiv this class assumes that nested lists only appear in \normalsize, i.e. the main\@listv document size.
\@listvi 909 \def\@listii {\leftmargin\leftmarginii
910\labelwidth\leftmarginii
911\advance\labelwidth-\labelsep
912 ⟨∗10pt⟩
913\topsep
4\p@ \@plus2\p@ \@minus\p@914\parsep2\p@ \@plus\p@ \@minus\p@915 ⟨/10pt⟩
916 ⟨∗11pt⟩
917\topsep
4.5\p@ \@plus2\p@ \@minus\p@918\parsep2\p@\@plus\p@ \@minus\p@919 ⟨/11pt⟩
920 ⟨∗12pt⟩
921\topsep
5\p@\@plus2.5\p@ \@minus\p@922\parsep
2.5\p@ \@plus\p@\@minus\p@923 ⟨/12pt⟩
924\itemsep\parsep}
925 \def\@listiii{\leftmargin\leftmarginiii

35

\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
928 ⟨10pt⟩\topsep2\p@ \@plus\p@\@minus\p@929 ⟨11pt⟩\topsep2\p@ \@plus\p@\@minus\p@930 ⟨12pt⟩\topsep
2.5\p@\@plus\p@\@minus\p@931\parsep\z@932\partopsep \p@ \@plus\z@ \@minus\p@933\itemsep\topsep}
934 \def\@listiv {\leftmargin\leftmarginiv
935\labelwidth\leftmarginiv
936\advance\labelwidth-\labelsep}
937 \def\@listv {\leftmargin\leftmarginv
938\labelwidth\leftmarginv
939\advance\labelwidth-\labelsep}
940 \def\@listvi {\leftmargin\leftmarginvi
941\labelwidth\leftmarginvi
942\advance\labelwidth-\labelsep}
943 ⟨/10pt | 11pt | 12pt⟩
926
927

7.3.2

Enumerate

The enumerate environment uses four counters: enumi, enumii, enumiii and enumiv,
where enumN controls the numbering of the Nth level enumeration.
\theenumi The counters are already defined in the LATEX format, but their representation is\theenumii changed here.
\theenumiii 944 ⟨∗article | report | book⟩\theenumiv 945 \renewcommand\theenumi{\@arabic\c@enumi}
946 \renewcommand\theenumii{\@alph\c@enumii}
947 \renewcommand\theenumiii{\@roman\c@enumiii}
948 \renewcommand\theenumiv{\@Alph\c@enumiv}\labelenumi The label for each item is generated by the commands\labelenumii \labelenumi . . . \labelenumiv.
\labelenumiii 949 \newcommand\labelenumi{\theenumi.}\labelenumiv 950 \newcommand\labelenumii{(\theenumii)}
951 \newcommand\labelenumiii{\theenumiii.}
952 \newcommand\labelenumiv{\theenumiv.}\p@enumii The expansion of \p@enumN\theenumN defines the output of a \ref command\p@enumiii when referencing an item of the Nth level of an enumerated list.
\p@enumiv 953 \renewcommand\p@enumii{\theenumi}
954 \renewcommand\p@enumiii{\theenumi(\theenumii)}
955 \renewcommand\p@enumiv{\p@enumiii\theenumiii}

7.3.3

Itemize\labelitemi Itemization is controlled by four commands: \labelitemi, \labelitemii,\labelitemii \labelitemiii, and \labelitemiv, which define the labels of the various item\labelitemiii ization levels: the symbols used are bullet, bold en-dash, centered asterisk and\labelitemiv centred dot.
956 \newcommand\labelitemi{\labelitemfont \textbullet}

36

957 \newcommand\labelitemii {\labelitemfont \bfseries \textendash}
958 \newcommand\labelitemiii{\labelitemfont \textasteriskcentered}959 \newcommand\labelitemiv {\labelitemfont \textperiodcentered}\labelitemfont The default definition for \labelitemfont is to reset the font to \normalfont sothat always the same symbol is produced regardless of surrounding conditions.
Possible alternatives would be, for example,\renewcommand\labelitemfont{\normalfont\fontfamily{lmss}\selectfont}\renewcommand\labelitemfont{\rmfamily\normalshape}

the first would use symbols from Latin Modern Sans, the second would only allowchanges in the font series so that an itemize in a bold context would produce
bolder symbols.
960 \newcommand\labelitemfont{\normalfont}

7.3.4

Description

description (env.) The description environment is defined here – while the itemize and enumerateenvironments are defined in the LATEX format.
961 \newenvironment{description}{\list{}{\labelwidth\z@ \itemindent-\leftmargin\let\makelabel\descriptionlabel}}{\endlist}

962
963
964

\descriptionlabel To change the formatting of the label, you must redefine \descriptionlabel.
965 \newcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries #1}

966

7.4

Defining new environments

7.4.1

Abstract

abstract (env.) When we are producing a separate titlepage we also put the abstract on a page of

its own. It will be centred vertically on the page.
Note that this environment is not defined for books.
967 % \changes{v1.3m}{1995/10/23}{Added setting of \cs{beginparpenalty} to968 %discourage page break before abstract heading.}

969 ⟨∗article | report⟩
970 \if@titlepage
971
972
973
974
975
976
977
978
979

\newenvironment{abstract}{%\titlepage\null\vfil\@beginparpenalty\@lowpenalty\begin{center}%\bfseries \abstractname\@endparpenalty\@M\end{center}}%{\par\vfil\null\endtitlepage}37

When we are not making a separate titlepage –the default for the article documentclass– we have to check if we are in two-column mode. In that case the abstract
is as a \section*, otherwise the quotation environment is used to typeset theabstract.
980 \else\newenvironment{abstract}{%\if@twocolumn
983\section*{\abstractname}%
984
\else
985
\small986\begin{center}%987{\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}%988\end{center}%989\quotation
990
\fi}
991
{\if@twocolumn\else\endquotation\fi}
992 \fi
993 ⟨/article | report⟩

981
982

7.4.2

Verse

verse (env.) The verse environment is defined by making clever use of the list environment’s

parameters. The user types \\ to end a line. This is implemented by \let’ing \\equal \@centercr.
994 \newenvironment{verse}{\let\\\@centercr\list{}{\itemsep\z@\itemindent-1.5em%\listparindent\itemindent\rightmargin \leftmargin\advance\leftmargin 1.5em}%\item\relax}{\endlist}

995
996
997
998
999
1000
1001
1002

7.4.3

Quotation

quotation (env.) The quotation environment is also defined by making clever use of the list environ-ment’s parameters. The lines in the environment are set smaller than \textwidth.
The first line of a paragraph inside this environment is indented.
1003 \newenvironment{quotation}{\list{}{\listparindent 1.5em%\itemindent\listparindent\rightmargin\leftmargin\parsep\z@ \@plus\p@}%\item\relax}{\endlist}

1004
1005
1006
1007
1008
1009

7.4.4

Quote

quote (env.) The quote environment is like the quotation environment except that paragraphs

are not indented.
1010 \newenvironment{quote}38

{\list{}{\rightmargin\leftmargin}%\item\relax}{\endlist}

1011
1012
1013

7.4.5

TheoremThis document class does not define it’s own theorem environments, the defaults,
supplied by the LATEX format are available.
7.4.6

Titlepage

titlepage (env.) In the normal environments, the titlepage environment does nothing but start andend a page, and inhibit page numbers. When LATEX is in two-column mode, theenvironmont temporarily switches to one-column mode. In the report class, it also
resets the page number to one, and then, in two-column mode, sets it back to one
at the end. For the book class the environment makes sure that the title pageis on a recto page by issueing a \cleardouplepage-command. In compatibility
mode, it sets the page number to zero. This is incorrect since it results in using
the page parameters for a right-hand page but it is the way it was.
First we do give the definition for compatibility mode.
1014 \if@compatibility\newenvironment{titlepage}{%1017 ⟨book⟩\cleardoublepage1018\if@twocolumn
1019\@restonecoltrue\onecolumn
1020
\else
1021
\@restonecolfalse\newpage
1022
\fi
1023
\thispagestyle{empty}%
1024\setcounter{page}\z@
1025
}%
1026
{\if@restonecol\twocolumn \else \newpage \fi
1027
}
1015
1016

And here is the one for native LATEX 2ε .
1028 \else\newenvironment{titlepage}{%1031 ⟨book⟩\cleardoublepage1032\if@twocolumn
1033\@restonecoltrue\onecolumn
1034
\else
1035
\@restonecolfalse\newpage
1036
\fi
1037
\thispagestyle{empty}%
1038\setcounter{page}\@ne
1039
}%
1040
{\if@restonecol\twocolumn \else \newpage \fi
1029
1030

If we are not in two-side mode the first page after the title page should also get
page number 1.
1041
1042

\if@twoside\else\setcounter{page}\@ne

39

\fi
}

1043
1044
1045 \fi7.4.7

Appendix\appendix The \appendix command is not really an environment, it is a macro that makessome changes in the way things are done.
In the article document class the \appendix command must do the following:• reset the section and subsection counters to zero,• redefine \thesection to produce alphabetic appendix numbers. This redefinition is done globally to ensure that it survives even if \appendix is issued
within an environment such as multicols.
1046 ⟨∗article⟩
1047 \newcommand\appendix{\par\setcounter{section}{0}%\setcounter{subsection}{0}%1050\gdef\thesection{\@Alph\c@section}}
1051 ⟨/article⟩
1048
1049

In the report and book document classes the \appendix command must do
the following:• reset the chapter and section counters to zero,• set \@chapapp to \appendixname (for messages),• redefine the chapter counter to produce appendix numbers,• possibly redefine the \chapter command if appendix titles and headings
are to look different from chapter titles and headings. This redefinition isdone globally to ensure that it survives even if \appendix is issued within
an environment such as multicols.
1052 ⟨∗report | book⟩1053 \newcommand\appendix{\par\setcounter{chapter}{0}%\setcounter{section}{0}%1056\gdef\@chapapp{\appendixname}%1057\gdef\thechapter{\@Alph\c@chapter}}
1058 ⟨/report | book⟩
1054
1055

7.5

Setting parameters for existing environments

7.5.1

Array and tabular\arraycolsep The columns in an array environment are separated by 2\arraycolsep.
1059 \setlength\arraycolsep{5\p@}\tabcolsep The columns in an tabular environment are separated by 2\tabcolsep.
1060 \setlength\tabcolsep{6\p@}40

\arrayrulewidth The width of rules in the array and tabular environments is given by\arrayrulewidth.
1061 \setlength\arrayrulewidth{.4\p@}\doublerulesep The space between adjacent rules in the array and tabular environments is givenby \doublerulesep.
1062 \setlength\doublerulesep{2\p@}7.5.2

Tabbing\tabbingsep This controls the space that the \’ command puts in. (See LATEX manual for an

explanation.)
1063 \setlength\tabbingsep{\labelsep}

7.5.3

Minipage\@minipagerestore The macro \@minipagerestore is called upon entry to a minipage environment

to set up things that are to be handled differently inside a minipage environment.
In the current classes, it does nothing.
\@mpfootins Minipages have their own footnotes; \skip\@mpfootins plays same rôle for foot-notes in a minipage as \skip\footins does for ordinary footnotes.
1064 \skip\@mpfootins = \skip\footins

7.5.4

Framed boxes\fboxsep The space left by \fbox and \framebox between the box and the text in it.
\fboxrule The width of the rules in the box made by \fbox and \framebox.
1065 \setlength\fboxsep{3\p@}1066 \setlength\fboxrule{.4\p@}7.5.5

Equation and eqnarray\theequation When within chapters, the equation counter will be reset at the beginning of a

new chapter and the equation number will be prefixed by the chapter number.
This code must follow the \chapter definition or, more exactly, the definitionof the chapter counter.
1067 ⟨article⟩\renewcommand \theequation {\@arabic\c@equation}
1068 ⟨∗report | book⟩1069 \@addtoreset {equation}{chapter}
1070 \renewcommand\theequation
1071{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}

1072 ⟨/report | book⟩\jot \jot is the extra space added between lines of an eqnarray environment. The

default value is used.
1073 % \setlength\jot{3pt}\@eqnnum The macro \@eqnnum defines how equation numbers are to appear in equations.

Again the default is used.
1074 % \def\@eqnnum{(\theequation)}

41

7.6

Floating objects

The LATEX format only defines a number of tools with which floating objects canbe defined. This is done in the document class. It needs to define the following
macros for each floating object of type TYPE (e.g., TYPE = figure).
\fps@TYPE The default placement specifier for floats of type TYPE.
\ftype@TYPE The type number for floats of type TYPE. Each TYPE has associateda unique positive TYPE number, which is a power of two. E.g., figures might
have type number 1, tables type number 2, programs type number 4, etc.
\ext@TYPE The file extension indicating the file on which the contents list for float
type TYPE is stored. For example, \ext@figure = ‘lof’.
\fnum@TYPE A macro to generate the figure number for a caption. For example,\fnum@TYPE == ‘Figure \thefigure’.
\@makecaption⟨num⟩⟨text⟩ A macro to make a caption, with ⟨num⟩ the value
produced by \fnum@... and ⟨text⟩ the text of the caption. It can assume
it’s in a \parbox of the appropriate width. This will be used for all floating
objects.
The actual environment that implements a floating object such as a figure isdefined using the macros \@float and \end@float, which are defined in the LATEX
format.
An environment that implements a single-column floating object is started with\@float{TYPE}[⟨placement⟩] of type TYPE with ⟨placement⟩ as the placement
specifier. The default value of ⟨PLACEMENT ⟩ is defined by \fps@TYPE.
The environment is ended by \end@float. E.g., \figure == \@floatfigure,\endfigure == \end@float.
7.6.1

FigureHere is the implementation of the figure environment.
\c@figure First we have to allocate a counter to number the figures.

In the report and book document classes figures within chapters are numbered
per chapter.
1075 ⟨∗article⟩
1076 \newcounter{figure}1077 \renewcommand \thefigure {\@arabic\c@figure}1078 ⟨/article⟩
1079 ⟨∗report | book⟩1080 \newcounter{figure}[chapter]
1081 \renewcommand \thefigure1082{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure}1083 ⟨/report | book⟩\fps@figure Here are the parameters for the floating objects of type ‘figure’.
\ftype@figure 1084 \def\fps@figure{tbp}\ext@figure 1085 \def\ftype@figure{1}\num@figure 1086 \def\ext@figure{lof}1087 \def\fnum@figure{\figurename\nobreakspace\thefigure}42

figure (env.) And the definition of the actual environment. The form with the * is used for
figure* (env.) double-column figures.
1088 \newenvironment{figure}{\@float{figure}}{\end@float}1091 \newenvironment{figure*}1092{\@dblfloat{figure}}
1093{\end@dblfloat}
1089
1090

7.6.2

Table

Here is the implementation of the table environment. It is very much the same as
the figure environment.
\c@table First we have to allocate a counter to number the tables.

In the report and book document classes tables within chapters are numbered
per chapter.
1094 ⟨∗article⟩
1095 \newcounter{table}
1096 \renewcommand\thetable{\@arabic\c@table}
1097 ⟨/article⟩
1098 ⟨∗report | book⟩1099 \newcounter{table}[chapter]1100 \renewcommand \thetable1101{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table}

1102 ⟨/report | book⟩\fps@table Here are the parameters for the floating objects of type ‘table’.
\ftype@table 1103 \def\fps@table{tbp}\ext@table 1104 \def\ftype@table{2}\num@table 1105 \def\ext@table{lot}1106 \def\fnum@table{\tablename\nobreakspace\thetable}table (env.) And the definition of the actual environment. The form with the * is used fortable* (env.) double-column tables.
1107 \newenvironment{table}{\@float{table}}{\end@float}1110 \newenvironment{table*}1111{\@dblfloat{table}}1112{\end@dblfloat}
1108
1109

7.6.3

Captions\@makecaption The \caption command calls \@makecaption to format the caption of floating

objects. It gets two arguments, ⟨number ⟩, the number of the floating object and⟨text⟩, the text of the caption. Usually ⟨number ⟩ contains a string such as ‘Figure3.2’. The macro can assume it is called inside a \parbox of right width, with\normalsize.
\abovecaptionskip These lengths contain the amount of white space to leave above and below the\belowcaptionskip caption.

43

1113 \newlength\abovecaptionskip
1114 \newlength\belowcaptionskip
1115 \setlength\abovecaptionskip{10\p@}1116 \setlength\belowcaptionskip{0\p@}

The definition of this macro is \long in order to allow more then one paragraphin a caption.
1117 \long\def\@makecaption#1#2{%
1118\vskip\abovecaptionskip

We want to see if the caption fits on one line on the page, therefore we first typeset
it in a temporary box.
1119

\sbox\@tempboxa{#1: #2}%

We can the measure its width. It that is larger than the current \hsize we typeset
the caption as an ordinary paragraph.
1120
1121

\ifdim \wd\@tempboxa >\hsize#1: #2\parIf the caption fits, we center it. Because this uses an \hbox directly in verticalmode, it does not execute the \everypar tokens; the only thing that could beneeded here is resetting the ‘minipage flag’ so we do this explicitly.

1126

\else
\global \@minipagefalse\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%\fi\vskip\belowcaptionskip}

7.7

Font changing

1122
1123
1124
1125

Here we supply the declarative font changing commands that were common in
LATEX version 2.09 and earlier. These commands work in text mode and in
math mode. They are provided for compatibility, but one should start using
the \text... and \math... commands instead. These commands are definedusing \DeclareTextFontCommand, a command with three arguments: the usercommand to be defined; LATEX commands to execute in text mode and LATEX
commands to execute in math mode.
\rm The commands to change the family. When in compatibility mode we select the\tt ‘default’ font first, to get LATEX2.09 behaviour.
\sf 1127 \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
1128 \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
1129 \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}\bf The command to change to the bold series. One should use \mdseries to explicitly

switch back to medium series.
1130 \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}\sl And the commands to change the shape of the font. The slanted and small caps
\it shapes are not available by default as math alphabets, so those changes do nothing\sc in math mode. However, we do warn the user that the selection will not have any

effect.One should use \upshape to explicitly change back to the upright shape.
1131 \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}

44

1132 \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
1133 \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}\cal The commands \cal and \mit should only be used in math mode, outside math\mit mode they have no effect. Currently the New Font Selection Scheme defines thesecommands to generate warning messages. Therefore we have to define them ‘byhand’.
1134 \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
1135 \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}

8

Cross Referencing

8.1

Table of Contents, etc.

A \section command writes a \contentsline{section}{⟨title⟩}{⟨page⟩} command on the .toc file, where ⟨title⟩ contains the contents of the entry and ⟨page⟩is the page number. If sections are being numbered, then ⟨title⟩ will be of theform \numberline{⟨num⟩}{⟨heading⟩} where ⟨num⟩ is the number produced by\thesection. Other sectioning commands work similarly.
A \caption command in a ‘figure’ environment writes\contentsline{figure}{\numberline{⟨num⟩}{⟨caption⟩}}{⟨page⟩} on the.lof file, where ⟨num⟩ is the number produced by \thefigure and ⟨caption⟩is the figure caption. It works similarly for a ‘table’ environment.
The command \contentsline{⟨name⟩} expands to \l@⟨name⟩. So, to specify
the table of contents, we must define \l@chapter, \l@section, \l@subsection,... ; to specify the list of figures, we must define \l@figure; and so on. Most ofthese can be defined with the \@dottedtocline command, which works as follows.
\@dottedtocline{⟨level ⟩}{⟨indent⟩}{⟨numwidth⟩}{⟨title⟩}{⟨page⟩}⟨level ⟩ An entry is produced only if ⟨level ⟩ ≤ value of the tocdepth counter. Note,\chapter is level 0, \section is level 1, etc.
⟨indent⟩ The indentation from the outer left margin of the start of the contents
line.
⟨numwidth⟩ The width of a box in which the section number is to go, if ⟨title⟩
includes a \numberline command.
\@pnumwidth This command uses the following three parameters, which are set with a\@tocrmarg \newcommand (so em’s can be used to make them depend upon the font).
\@dotsep\@pnumwidth The width of a box in which the page number is put.

\@tocrmarg The right margin for multiple line entries. One wants \@tocrmarg ≥\@pnumwidth\@dotsep Separation between dots, in mu units. Should be defined as a number
like 2 or 1.7
1136 \newcommand\@pnumwidth{1.55em}
1137 \newcommand\@tocrmarg{2.55em}
1138 \newcommand\@dotsep{4.5}1139 ⟨article⟩\setcounter{tocdepth}{3}1140 ⟨!article⟩\setcounter{tocdepth}{2}458.1.1

Table of Contents\tableofcontents This macro is used to request that LATEX produces a table of contents. In thereport and book document classes the tables of contents, figures etc. are always
set in single-column mode.
1141 \newcommand\tableofcontents{%
1142 ⟨∗report | book⟩
1143
1144
1145
1146
1147

\if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi

The title is set using the \chapter* command, making sure that the running head
–if one is required– contains the right information.
1148\chapter*{\contentsname

1149 ⟨/report | book⟩1150 ⟨article⟩\section*{\contentsname

The code for \@mkboth is placed inside the heading to avoid any influence onvertical spacing after the heading (in some cases). For other commands, such
as \listoffigures below this has been changed from the LATEX2.09 version as
it will produce a serious bug if used in two-column mode (see, pr/3285). However \tableofcontents is always typeset in one-column mode in these classes,
therefore the somewhat inconsistent setting has been retained for compatibility
reasons.
\@mkboth{%\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%

1151
1152

The actual table of contents is made by calling \@starttoc{toc}. After that we
restore two-column mode if necessary.
1153\@starttoc{toc}%\if@restonecol\twocolumn\fi}1154 ⟨!article⟩
1155\l@part Each sectioning command needs an additional macro to format its entry in thetable of contents, as described above. The macro for the entry for parts is definedin a special way.
First we make sure that if a pagebreak should occur, it occurs before this entry.
Also a little whitespace is added and a group begun to keep changes local.
1156 \newcommand*\l@part[2]{%\ifnum \c@tocdepth >-2\relax\addpenalty\@secpenalty
1159 ⟨!article⟩\addpenalty{-\@highpenalty}%
1160\addvspace{2.25em \@plus\p@}%1157

1158 ⟨article⟩

The macro \numberline requires that the width of the box that holds the partnumber is stored in LATEX’s scratch register \@tempdima. Therefore we initialize it
there even though we do not use \numberline internally—the value used is quite
large so that something like \numberline{VIII} would still work.
1161
1162

\setlength\@tempdima{3em}%\begingroup46

We set \parindent to 0pt and use \rightskip to leave enough room for the page
numbers.1 To prevent overfull box messages the \parfillskip is set to a negativevalue.
1163
1164\parindent \z@ \rightskip \@pnumwidth\parfillskip -\@pnumwidth

Now we can set the entry, in a large bold font. We make sure to leave verticalmode, set the part title and add the page number, set flush right.
1165
1166
1167

{\leavevmode\large \bfseries #1\hfil\hb@xt@\@pnumwidth{\hss #2%\kern-\p@\kern\p@}}\par1168

Prevent a pagebreak immediately after this entry, but use \everypar to reset the\if@nobreak switch. Finally we close the group.
\nobreak\if@compatibility
1171\global\@nobreaktrue
1172\everypar{\global\@nobreakfalse\everypar{}}%1173 ⟨article⟩\fi1174\endgroup
1175
\fi}
1169

1170 ⟨article⟩\l@chapter This macro formats the entries in the table of contents for chapters. It is very

similar to \l@part
First we make sure that if a pagebreak should occur, it occurs before this entry.
Also a little whitespace is added and a group begun to keep changes local.
1176 ⟨∗report | book⟩1177 \newcommand*\l@chapter[2]{%
1178
1179
1180

\ifnum \c@tocdepth >\m@ne\addpenalty{-\@highpenalty}%\vskip 1.0em \@plus\p@

The macro \numberline requires that the width of the box that holds the partnumber is stored in LATEX’s scratch register \@tempdima. Therefore we initialize it
there even though we do not use \numberline internally (the position as well as thevalues seems questionable but can’t be changed without producing compatibility
problems). We begin a group, and change some of the paragraph parameters (seealso the remark at \l@part regarding \rightskip).
1181
1182
1183
1184

\setlength\@tempdima{1.5em}%\begingroup\parindent \z@ \rightskip \@pnumwidth\parfillskip -\@pnumwidth

Then we leave vertical mode and switch to a bold font.
1185\leavevmode \bfseries

Because we do not use \numberline here, we have do some fine tuning ‘by hand’,
before we can set the entry. We discourage but not disallow a pagebreak immediately after a chapter entry.
1 We should really set \rightskip to \@tocrmarg instead of \@pnumwidth (no version of L
AT X
Eever did this), otherwise the \rightskip is too small. Unfortunately this can’t be changed in
LATEX 2ε as we don’t want to create different versions of LATEX 2ε which produce different typeset
output unless this is absolutely necessary; instead we suspend it for LATEX3.

47

1186
1187
1188
1189

\advance\leftskip\@tempdima\hskip -\leftskip#1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss #2%\kern-\p@\kern\p@}\par1190\penalty\@highpenalty
1192\endgroup1193\fi}1194 ⟨/report | book⟩1191\l@section In the article document class the entry in the table of contents for sections looks

much like the chapter entries for the report and book document classes.
First we make sure that if a pagebreak should occur, it occurs before this entry.
Also a little whitespace is added and a group begun to keep changes local.
1195 ⟨∗article⟩
1196 \newcommand*\l@section[2]{%
1197
1198
1199

\ifnum \c@tocdepth >\z@\addpenalty\@secpenalty\addvspace{1.0em \@plus\p@}%The macro \numberline requires that the width of the box that holds thepart number is stored in LATEX’s scratch register \@tempdima. Therefore we putit there. We begin a group, and change some of the paragraph parameters (seealso the remark at \l@part regarding \rightskip).
1200
1201
1202
1203

\setlength\@tempdima{1.5em}%\begingroup\parindent \z@ \rightskip \@pnumwidth\parfillskip -\@pnumwidth

Then we leave vertical mode and switch to a bold font.
1204\leavevmode \bfseries

Because we do not use \numberline here, we have do some fine tuning ‘by hand’,
before we can set the entry. We discourage but not disallow a pagebreak immediately after a chapter entry.
1205
1206
1207
1208

\advance\leftskip\@tempdima\hskip -\leftskip#1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss #2%

1209\kern-\p@\kern\p@}\par\endgroup1211\fi}
1212 ⟨/article⟩
1210

In the report and book document classes the definition for \l@section is much
simpler.
1213 ⟨∗report | book⟩1214 \newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
1215 ⟨/report | book⟩\l@subsection All lower level entries are defined using the macro \@dottedtocline (see above).
\l@subsubsection 1216 ⟨∗article⟩\l@paragraph 1217 \newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}\l@subparagraph 1218 \newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}

48

1219 \newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
1220 \newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
1221 ⟨/article⟩
1222 ⟨∗report | book⟩1223 \newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
1224 \newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
1225 \newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
1226 \newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
1227 ⟨/report | book⟩

8.1.2

List of figures\listoffigures This macro is used to request that LATEX produces a list of figures. It is very

similar to \tableofcontents.
1228 \newcommand\listoffigures{%1229 ⟨∗report | book⟩\if@twocolumn\@restonecoltrue\onecolumn
1232
\else
1233
\@restonecolfalse
1234
\fi
1235
\chapter*{\listfigurename}%
1236 ⟨/report | book⟩1237 ⟨article⟩\section*{\listfigurename}%1238\@mkboth{\MakeUppercase\listfigurename}%
1239{\MakeUppercase\listfigurename}%
1240\@starttoc{lof}%
1241 ⟨report | book⟩\if@restonecol\twocolumn\fi
1242
}
1230
1231

\l@figure This macro produces an entry in the list of figures.
1243 \newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}

8.1.3

List of tables\listoftables This macro is used to request that LATEX produces a list of tables. It is very similar

to \tableofcontents.
1244 \newcommand\listoftables{%1245 ⟨∗report | book⟩\if@twocolumn\@restonecoltrue\onecolumn
1248
\else
1249
\@restonecolfalse
1250
\fi
1251
\chapter*{\listtablename}%
1252 ⟨/report | book⟩1253 ⟨article⟩\section*{\listtablename}%
1254\@mkboth{%1255\MakeUppercase\listtablename}%
1256{\MakeUppercase\listtablename}%
1257\@starttoc{lot}%
1258 ⟨report | book⟩\if@restonecol\twocolumn\fi
1259
}
1246
1247

49

\l@table This macro produces an entry in the list of tables.
1260 \let\l@table\l@figure

8.2

Bibliography\bibindent The “open” bibliography format uses an indentation of \bibindent.
1261 \newdimen\bibindent
1262 \setlength\bibindent{1.5em}

thebibliography (env.) The ‘thebibliography’ environment executes the following commands:\renewcommand{\newblock}{\hskip.11em \@plus.33em \@minus.07em}— Defines the “closed” format, where the blocks (major units of information) of
an entry run together.
\sloppy — Used because it’s rather hard to do line breaks in bibliographies,\sfcode‘\.=1000\relax — Causes a ‘.’ (period) not to produce an end-ofsentence space.
The implementation of this environment is based on the generic list environment. It uses the enumiv counter internally to generate the labels of the list.
When an empty ‘thebibliography’ environment is found, a warning is issued.
1263 \newenvironment{thebibliography}[1]1264 ⟨∗article⟩
1265{\section*{\refname}%The \@mkboth was moved out of the heading argument since at least in report andbook (twocolumn option) there are definitions for \chapter which would swallow
it otherwise.
1266\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%

1267 ⟨/article⟩
1268 ⟨∗!article⟩{\chapter*{\bibname}%\@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
1271 ⟨/!article⟩
1272\list{\@biblabel{\@arabic\c@enumiv}}%
1273{\settowidth\labelwidth{\@biblabel{#1}}%
1274\leftmargin\labelwidth1275\advance\leftmargin\labelsep
1276\@openbib@code
1277\usecounter{enumiv}%
1278\let\p@enumiv\@empty
1279\renewcommand\theenumiv{\@arabic\c@enumiv}}%
1280\sloppy
1269
1270This is setting the normal (non-infinite) value of \clubpenalty for the whole ofthis environment, so we must reset its stored value also. (Why is there a % after
the second 4000 below?)
1281
1282
1283
1284
1285
1286
1287

\clubpenalty4000\@clubpenalty \clubpenalty\widowpenalty4000%\sfcode‘\.\@m}{\def\@noitemerr{\@latex@warning{Empty ‘thebibliography’ environment}}%\endlist}50

\newblock The default definition for \newblock is to produce a small space.
1288 \newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}\@openbib@code The default definition for \@openbib@code is to do nothing. It will be changed by

the openbib option.
1289 \let\@openbib@code\@empty\@biblabel The label for a \bibitem[...] command is produced by this macro. The default

from the LATEX format is used.
1290 % \renewcommand*{\@biblabel}[1]{[#1]\hfill}\@cite The output of the \cite command is produced by this macro. The default fromthe LATEX format is used.
1291 % \renewcommand*{\@cite}[1]{[#1]}

8.3

The index

theindex (env.) The environment ‘theindex’ can be used for indices.

It makes an index withtwo columns, with each entry a separate paragraph. At the user level the commands \item, \subitem and \subsubitem are used to produce index entries ofvarious levels. When a new letter of the alphabet is encountered an amount of\indexspace white space can be added.
1292 \newenvironment{theindex}
1293
1294
1295
1296
1297
1298 ⟨article⟩
1299 ⟨!article⟩
1300
1301
1302

{\if@twocolumn\@restonecolfalse\else\@restonecoltrue\fi\twocolumn[\section*{\indexname}]%\twocolumn[\@makeschapterhead{\indexname}]%\@mkboth{\MakeUppercase\indexname}%{\MakeUppercase\indexname}%\thispagestyle{plain}\parindent\z@Parameter changes to \columnseprule and \columnsep have to be done after\twocolumn has acted. Otherwise they can affect the last page before the index.
1303
1304
1305
1306

\parskip\z@ \@plus .3\p@\relax\columnseprule \z@\columnsep 35\p@\let\item\@idxitem}

When the document continues after the index and it was a one-column document
we have to switch back to one column after the index.
1307{\if@restonecol\onecolumn\else\clearpage\fi}\@idxitem These macros are used to format the entries in the index.
\subitem 1308 \newcommand\@idxitem{\par\hangindent 40\p@}\subsubitem 1309 \newcommand\subitem{\@idxitem \hspace*{20\p@}}1310 \newcommand\subsubitem{\@idxitem \hspace*{30\p@}}\indexspace The amount of white space that is inserted between ‘letter blocks’ in the index.
1311 \newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}

51

8.4

Footnotes\footnoterule Usually, footnotes are separated from the main body of the text by a small rule.

This rule is drawn by the macro \footnoterule. We have to make sure that therule takes no vertical space (see plain.tex) so we compensate for the natural
height of the rule of 0.4pt by adding the right amount of vertical skip.
To prevent the rule from colliding with the footnote we first add a little negative
vertical skip, then we put the rule and make sure we end up at the same point
where we begun this operation.
1312 \renewcommand\footnoterule{%
1313
1314
1315

\kern-3\p@\hrule\@width.4\columnwidth\kern2.6\p@}\c@footnote Footnotes are numbered within chapters in the report and book document classes.
1316 ⟨!article⟩\@addtoreset{footnote}{chapter}\@makefntext The footnote mechanism of LATEX calls the macro \@makefntext to produce theactual footnote. The macro gets the text of the footnote as its argument andshould use \@thefnmark as the mark of the footnote. The macro \@makefntextis
called when effectively inside a \parbox of width \columnwidth (i.e., with \hsize= \columnwidth).
An example of what can be achieved is given by the following piece of TEX
code.
\newcommand\@makefntext[1]{%\@setpar{\@@par\@tempdima = \hsize\advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}%\par\parindent 1em\noindent\hbox to \z@{\hss\@makefnmark}#1}

The effect of this definition is that all lines of the footnote are indented by 10pt,
while the first line of a new paragraph is indented by 1em. To change these
dimensions, just substitute the desired value for ‘10pt’ (in both places) or ‘1em’.
The mark is flushright against the footnote.
In these document classes we use a simpler macro, in which the footnote text
is set like an ordinary text paragraph, with no indentation except on the first lineof a paragraph, and the first line of the footnote. Thus, all the macro must do isset \parindent to the appropriate value for succeeding paragraphs and put theproper indentation before the mark.
1317 \newcommand\@makefntext[1]{%
1318
1319
1320

\parindent 1em%
\noindent\hb@xt@1.8em{\hss\@makefnmark}#1}\@makefnmark The footnote markers that are printed in the text to point to the footnotes should

be produced by the macro \@makefnmark. We use the default definition for it.
1321 %\renewcommand\@makefnmark{\hbox{\@textsuperscript
1322 %{\normalfont\@thefnmark}}}52

9

Initialization

9.1

Words

This document class is for documents prepared in the English language. To preparea version for another language, various English words must be replaced. All the
English words that require replacement are defined below in command names.
These commands may be redefined in any class or package that is customising
LATEX for use with non-English languages.
\contentsname\listfigurename 1323 \newcommand\contentsname{Contents}\listtablename 1324 \newcommand\listfigurename{List of Figures}
1325 \newcommand\listtablename{List of Tables}\refname\bibname 1326 ⟨article⟩\newcommand\refname{References}\indexname 1327 ⟨report | book⟩\newcommand\bibname{Bibliography}1328 \newcommand\indexname{Index}\figurename\tablename 1329 \newcommand\figurename{Figure}1330 \newcommand\tablename{Table}\partname\chaptername 1331 \newcommand\partname{Part}\appendixname 1332 ⟨report | book⟩\newcommand\chaptername{Chapter}\abstractname 1333 \newcommand\appendixname{Appendix}
1334 ⟨!book⟩\newcommand\abstractname{Abstract}

9.2

Date

\today This macro uses the TEX primitives \month, \day and \year to provide the dateof the LATEX-run.
At \begin{document} this definition will be optimised so that the names of
all the ‘wrong’ months are not stored. This optimisation is not done here as thatwould ‘freeze’ \today in any special purpose format made by loading the class file
into the format file.
1335 \def\today{\ifcase\month\or1338

January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi\space\number\day, \number\year}

9.3

Two-column mode

1336
1337

\columnsep This gives the distance between two columns in two-column mode.
1339 \setlength\columnsep{10\p@}\columnseprule This gives the width of the rule between two columns in two-column mode. We

have no visible rule.
1340 \setlength\columnseprule{0\p@}

53

9.4

The page style

We have plain pages in the document classes article and report unless the user
specified otherwise. In the ‘book’ document class we use the page style headings
by default. We use arabic page numbers.
1341 ⟨!book⟩\pagestyle{plain}
1342 ⟨book⟩\pagestyle{headings}
1343 \pagenumbering{arabic}

9.5

Single or double sided printing

When the twoside option wasn’t specified, we don’t try to make each page as longas all the others.
1344 \if@twoside
1345 \else1346\raggedbottom

1347 \fiWhen the twocolumn option was specified we call \twocolumn to activate thismode. We try to make each column as long as the others, but call sloppy to makeour life easier.
1348 \if@twocolumn
1349
1350
1351

\twocolumn\sloppy\flushbottom

Normally we call \onecolumn to initiate typesetting in one column.
1352 \else1353\onecolumn

1354 \fi1355 ⟨/article | report | book⟩

Index
Numbers written in italic refer to the page where the corresponding entry is described; numbers underlined refer to the code line of the definition; numbers inroman refer to the code lines where the entry is used.
Symbols\@Roman . . . . . . . . . . 651\@afterheading . . . .
. 731, 761, 811, 831\@afterindentfalse .
. . . . . . . . 692, 788\@author . . . . . 544,
560, 572, 606, 625\@beginparpenalty .
. . . . . . . . 885, 974\@biblabel . . . . . . .
. . 1272, 1273, 1290\@chapapp . 499, 528,
661, 793, 818, 1056\@chapter . . . . 789, 790\@cite . . . . . . . . . . 1291\@clubpenalty . . . . 1282\@date . . . . . . . 545,
563, 573, 607, 628\@dblfloat . 1092, 1111\@dblfpbot . . . . . . . 458\@dblfpsep . . . . . . . 458\@dblfptop . . . . . . . 458\@dotsep . . . . . . . . 1136\@dottedtocline 1214,
1217,
1218,
1219,
1220,
1223,
1224,

54

1225, 1226, 1243\@endparpenalty 885, 977\@endpart . 751, 769, 771\@eqnnum . . . . . . . . 1074\@evenfoot 474, 476, 535\@evenhead 474, 477, 536\@fnsymbol . . . . . . . 583\@fontswitch 1134, 1135\@fpbot . . . . . . . . . . 443\@fpsep . . . . . . . . . . 443\@fptop . . . . . . . . . . 443\@highpenalty . 227,
1159, 1179, 1191\@idxitem . . 1306, 1308

\@itempenalty . . . . . 885\@latex@warning . . 1286\@listI . . . . . . 108, 890\@listi . . . . . . 108,
119, 129, 139,
152, 162, 172, 890\@listii . . . . . . . . . 909\@listiii . . . . . . . . 909\@listiv . . . . . . . . . 909\@listv . . . . . . . . . . 909\@listvi . . . . . . . . . 909\@lowpenalty . . 227,
886, 887, 888, 974\@mainmatterfalse .
. . . . . . . . 669, 685\@mainmattertrue 8, 677\@makecaption . . . . 1113\@makechapterhead .
. . . . 808, 810, 813\@makefnmark . . . . . .
. . 584, 1320, 1321\@makefntext . 585, 1317\@makeschapterhead .
828, 830, 833, 1299\@maketitle . . . 590,
592, 597, 604, 614\@medpenalty . . . . . . 227\@minipagefalse . . 1123\@minipagerestore 1064\@mparswitchfalse . 41\@mparswitchtrue . . 43\@mpfootins . . . . . . 1064\@nobreakfalse . . . 1172\@nobreaktrue . . . . 1171\@noitemerr . . . . . . 1285\@normalsize . . . . . . 87\@oddfoot . . . . . . . .
. 474, 476, 512, 535\@oddhead . . . . . . . .
. 474, 478, 513, 537\@openbib@code . . . .
. . . 66, 1276, 1289\@openrightfalse . . 56\@openrighttrue . 53, 55\@part . . . . 693, 710, 712\@pnumwidth . . . 1136,
1163,
1164,
1167,
1183,
1184,
1189,
1202, 1203, 1208\@ptsize . . . . 1, 34,
36, 38, 39, 84, 85\@restonecolfalse .
. . . . . . . 1021,

1035,
1146,
1233, 1249, 1294\@restonecoltrue . .
. . . . . . . 1019,
1033,
1144,
1231, 1247, 1296\@roman . . . . . . . . . . 947\@schapter . . . 789, 827\@secpenalty 1158, 1198\@setfontsize . . . . .
90, 96, 102, 115,
125, 135, 148,
158, 168, 181,
182, 183, 184,
185, 186, 187,
190, 191, 192,
193, 194, 195,
196, 199, 200,
201, 202, 203, 204\@settopoint . . 286,
374, 375, 380, 395\@spart . . . 693, 710, 753\@startsection
842,
846, 850, 854, 858\@starttoc . . . . . . .
. . 1153, 1240, 1257\@textsuperscript .
. . . 584, 587, 1321\@thanks . . . . . . . . .
. 565, 571, 599, 605\@thefnmark . . . . . . .
. . . 584, 587, 1322\@title . . . . . . 543,
555, 574, 608, 620\@titlepagefalse . 5, 50\@titlepagetrue . . 6, 48\@tocrmarg . . . . . . 1136\@topnewpage . . 808, 828\@topnum . . . . . 596, 787\@twocolumnfalse . . 59\@twocolumntrue . . . 61\@twosidefalse . . . . 41\@twosidetrue . . . . . 43\@undefined . . . . . . . 110\@width . . . . . . . . . 1314
A\abovecaptionskip .
. . . . . . 1113, 1118
\abovedisplayshortskip. . . . . . 92, 98,
104, 117, 127,
137, 150, 160, 17055\abovedisplayskip .
. . . . . . 91, 97,
103, 107, 116,
126, 136, 144,
149, 159, 169, 177
abstract (env.) . . . . 967\abstractname . . . . .
976, 983, 987, 1331
\addcontentsline . .
. 716, 718, 737,
739, 794, 798, 802\addtocontents 805, 806\and . . . . . . . . . 578, 612\appendix . . . . . . . 1046
\appendixname 1056, 1331
\arraycolsep . . . . . 1059
\arrayrulewidth . . 1061
\AtEndOfPackage . . . 65
\author . . . 543, 576, 610
B\backmatter . . . . . . . 679\baselineskip . . . . .
. . . . 289, 290,
291, 292, 297, 299\baselinestretch . . 210\belowcaptionskip .
. . . . . . 1113, 1126
\belowdisplayshortskip. . . . . . 93, 99,
105, 118, 128,
138, 151, 161, 171\belowdisplayskip .
. . . . 107, 144, 177\bf . . . . . . . . . . . . 1130
\bibindent
67, 68, 1261
\bibname 1269, 1270, 1326
\bigskipamount . . . . 222\bottomfraction . . . 408\brokenpenalty . . . . 237
C\c@bottomnumber . . . 407\c@chapter . . . . . . .
641, 654, 1057,
1071, 1082, 1101
\c@dbltopnumber . . . 412\c@enumi . . . . . . . . . 945\c@enumii . . . . . . . . 946\c@enumiii . . . . . . . 947\c@enumiv 948, 1272, 1279
\c@equation . 1067, 1071
\c@figure . . . . . . . 1075
\c@footnote . . 583, 1316

\c@paragraph . . 641, 659\c@part . . . . . . 641, 651\c@secnumdepth . . . .
. 483, 489, 497,
505, 518, 526,
639, 714, 723,
735, 745, 790, 816\c@section . . . . . . .
641, 652, 655, 1050
\c@subparagraph 641, 660\c@subsection . 641, 657\c@subsubsection . .
. . . . . . . . 641, 658\c@table . . . . . . . . 1094
\c@tocdepth . . . . . . .
. . 1157, 1178, 1197
\c@topnumber . . . . . . 404\c@totalnumber . . . . 409\cal . . . . . . . . . . . . 1134
\centering . . . 742, 765\changes . . . . . . . . . 967\chapter . 784, 1148,
1235, 1251, 1269
\chaptermark . . 495,
524, 539, 633, 804\chaptername . 661, 1331
\cleardoublepage . .
. 665, 673, 681,
698, 785, 1017, 1031
\clearpage 667, 675,
683, 700, 785, 1307
\clubpenalty . . . . . .
. . 231, 1281, 1282
\col@number . . . . . . . 589\columnsep . 1305, 1339
\columnseprule . . . .
. . . . . . 1304, 1340
\columnwidth . . . . . 1314
\contentsname . 1148,
1150, 1152, 1323
\cs . . . . . . . . . . . . . 967
D\date . . . . . 543, 577, 611\dblfloatpagefraction. . . . . . . . . . . 414\dblfloatsep . . . . . . 431\dbltextfloatsep . . 431\dbltopfraction . . . 413\DeclareOldFontCommand. . . 1127, 1128,
1129,
1130,
1131, 1132, 1133

\DeclareRobustCommand. . . . 113, 146,
181, 182, 183,
184, 185, 186,
187, 190, 191,
192, 193, 194,
195, 196, 199,
200, 201, 202,
203, 204, 543,
544, 545, 1134, 1135
description (env.) . . 961\descriptionlabel .
. . . . . . . . 963, 965\displaywidowpenalty. . . . . . . . . . . 233\doublerulesep . . . 1062E
\endquotation . . . . . 991\endtitlepage . . . . . 979
environments:
abstract . . . . . . 967
description . . . . 961
figure . . . . . . . 1088
figure* . . . . . . 1088
quotation . . . . . 1003
quote . . . . . . . . 1010
table . . . . . . . . 1107
table* . . . . . . . 1107
thebibliography 1263
theindex . . . . . 1292
titlepage . . . . . 1014
verse . . . . . . . . . 994\evensidemargin . . . 312\ext@figure . . . . . . 1084
\ext@table . . . . . . 1103
F
\fboxrule . . . . . . . 1065
\fboxsep . . . . . . . . 1065
figure (env.) . . . . . 1088
figure* (env.) . . . . 1088
\figurename . 1087, 1329
\floatpagefraction . 411\floatsep . . . . . . . . 416\flushbottom . . . . . 1351
\fnum@figure . . . . . 1087
\fnum@table . . . . . . 1106
\footins . . . . 400, 1064
\footnote . . . . 551, 619\footnoterule 550, 1312
\footnotesep . . . . . . 397\footnotesize . 146, 549\footskip . . . . 248, 393

56\fps@figure . . . . . . 1084
\fps@table . . . . . . 1103
\frontmatter . . . . . . 662\ftype@figure . . . . 1084
\ftype@table . . . . . 1103
H
\hb@xt@ . . . . . . . . . .
586, 1124, 1167,
1189, 1208, 1320
\headheight . . . 239, 390\headsep . . . . . 239, 391\Huge . . . . . . . . 180,
750, 768, 824, 838\huge . . . . . . . . 180,
727, 746, 758, 818
I\if@compatibility .
. . 9, 33, 40, 45,
49, 52, 58, 252,
254, 285, 288,
312, 382, 1014, 1170
\if@mainmatter . . 8,498, 527, 791, 817\if@noskipsec . . . . . 689\if@openright . . . . .
. . . 7, 664, 672,
680, 697, 774, 785\if@restonecol . . . .
. . . . . 3, 1026,
1040,
1154,
1241, 1258, 1307
\if@titlepage 4, 547, 970\if@twocolumn . 214,
255, 271, 302,
347, 588, 703,
807, 827, 862,
871, 982, 991,
1018,
1032,
1143,
1230,
1246, 1293, 1348
\if@twoside 325, 353,
474, 773, 1041, 1344
\indexname 1298, 1299,
1300, 1301, 1326
\indexspace . . . . . . 1311
\interlinepenalty .
. 236, 721, 743,
756, 766, 823, 837\intextsep . . . . . . . 416\it . . . . . . . . . . . . 1131
\item . . . . . . . . 1001,
1008, 1012, 1306

\itemindent . . 68, 69,962, 997, 998, 1005
\itemsep . . 122, 132,
142, 155, 165,
175, 895, 900,
905, 924, 933, 996\itshape . . . . . . . . 1131
J
\jot . . . . . . . . . . . . 1073
L\l@chapter . . . . . . 1176
\l@figure . . 1243, 1260
\l@paragraph . . . . . 1216
\l@part . . . . . . . . . 1156
\l@section . . . . . . 1195
\l@subparagraph . . 1216
\l@subsection . . . . 1216
\l@subsubsection . 1216
\l@table . . . . . . . . 1260
\labelenumi . . . . . . . 949\labelenumii . . . . . . 949\labelenumiii . . . . . 949\labelenumiv . . . . . . 949\labelitemfont
956,
957, 958, 959, 960\labelitemi . . . . . . . 956\labelitemii . . . . . . 956\labelitemiii . . . . . 956\labelitemiv . . . . . . 956\labelsep . 878, 911,
927, 936, 939,
942, 965, 1063, 1275
\labelwidth . . . 878,
910, 911, 926,
927, 935, 936,
938, 939, 941,
942, 962, 1273, 1274
\LARGE . . . . 180, 555, 620\Large . . . . 180, 724, 845\large 180, 557, 563,
622, 628, 849, 1166
\leftmargin . . . . . . .
. . 67, 119, 129,
139, 152, 162,
172, 862, 891,
909, 925, 934,
937, 940, 962,
999, 1000, 1006,
1011, 1274, 1275
\leftmargini 119, 129,
139, 152, 162,
172, 862, 879, 891\leftmarginii . . . . .
. . . . 862, 909, 910\leftmarginiii . . . .
. . . . 862, 925, 926\leftmarginiv . . . . .
. . . . 862, 934, 935\leftmarginv . . . . . .
. . . . 862, 937, 938\leftmarginvi . . . . .
. . . . 862, 940, 941\leftskip . . . . 1186,
1187, 1205, 1206
\lineskip . 207, 558, 623\listfigurename . . .
. . . 1235, 1237,
1238, 1239, 1323
\listoffigures . . . 1228
\listoftables . . . . 1244
\listparindent . . . .
69, 998, 1004, 1005
\listtablename . . . .
. . . 1251, 1253,
1255, 1256, 1323
M
\mainmatter . . . . . . . 671\makelabel . . . . . . . 963\MakeRobust . . . 110, 111\maketitle . . . . . . . 547\MakeUppercase
482,
496, 504, 517,
525, 1152, 1238,
1239,
1255,
1256,
1266,
1270, 1300, 1301
\marginparpush . . . . 302\marginparsep . . . . .
. . . . 302, 359, 367\marginparwidth . . . 312\mathbf . . . . . . . . . 1130
\mathcal . . . . . . . . 1134
\mathit . . . . . . . . . 1131
\mathnormal . . . . . . 1135
\mathrm . . . . . . . . . 1127
\mathsf . . . . . . . . . 1128
\mathtt . . . . . . . . . 1129
\maxdepth . . . . . . . . 252\medskipamount . . . . 222\mit . . . . . . . . . . . . 1134
N
\newblock . . . . 72, 1288
\newif . . . . . . . 3, 4, 7, 8

57

\nobreakspace . . . . .
724, 746, 1087, 1106
\normalfont . . . 584,
587, 722, 744,
757, 767, 815,
836, 845, 849,
853, 857, 861,
960, 966, 1127,
1128,
1129,
1130,
1131,
1132, 1133, 1322
\normallineskip . . . 207\normalsize . . . . . . .
. 87, 853, 857, 861\num@figure . . . . . . 1084
\num@table . . . . . . 1103
O
\oddsidemargin . . . . 312\onecolumn . . . 704,
1019,
1033,
1144,
1231,
1247, 1307, 1353
\overfullrule . . . 44, 46
P\p@enumii . . . . . . . . 953\p@enumiii . . . . . . . 953\p@enumiv . . . 953, 1278
\pagenumbering . . . .
. . . 670, 678, 1343
\paperheight . . . 11,
14, 17, 20, 23,
26, 29, 30, 294, 388\paperwidth . . . . . . .
. 12, 15, 18, 21,
24, 27, 30, 31,
266, 354, 362, 376\paragraph . . . . . . . 854\paragraphmark . . . . 633\parindent . . . . . . .
. 211, 585, 720,
755, 815, 835,
858, 1163, 1183,
1202, 1302, 1318
\parsep 70, 121, 122,
131, 132, 141,
142, 154, 155,
164, 165, 174,
175, 893, 898,
903, 914, 918,
922, 924, 931, 1007
\parskip . . . . 211, 1303
\part . . . . . . . . . . . . 687

\partname 724, 746, 1331
\partopsep . . . 881, 932\postdisplaypenalty 233\predisplaypenalty . 233\ps@headings . . . . . . 474\ps@myheadings . . . . 534
Q\quad . . . . . 484, 490, 519\quotation . . . . . . . 989
quotation (env.) . . 1003
quote (env.) . . . . . . 1010
R
\refname 1265, 1266, 1326
\rm . . . . . . . . . . . . 1127
S
\sbox . . . . . . . . . . . 1119
\sc . . . . . . . . . . . . 1131
\scriptsize . . . . . . . 180\scshape . . . . . . . . 1133
\section . . . . . 842,
983, 1150, 1237,
1253, 1265, 1298
\sectionmark . . 481,
503, 516, 540, 633\sf . . . . . . . . . . . . 1127
\sffamily . . . . . . . 1128
\sl . . . . . . . . . . . . 1131
\small . . . . 113, 549, 985\smallskipamount . . 222\subitem . . . . . . . . 1308
\subparagraph . . . . . 858\subparagraphmark . 633\subsection . . . . . . . 846\subsectionmark . . .
. . . . 487, 541, 633\subsubitem . . . . . . 1308

\subsubsection . . . . 850\subsubsectionmark . 633
T\tabbingsep . . . . . . 1063
\tabcolsep . . . . . . 1060
table (env.) . . . . . . 1107
table* (env.) . . . . . 1107
\tablename . 1106, 1329
\tableofcontents . 1141
\textasteriskcentered. . . . . . . . . . . 958\textbullet . . . . . . . 956\textendash . . . . . . . 957\textfloatsep . . . . . 416\textfraction . . . . . 410\textheight . . . 288, 392\textperiodcentered 959\textwidth . . . . . . .
. 254, 355, 363, 378\thanks 551, 569, 602, 619
thebibliography(env.) . . . . . 1263
\thechapter . . . 499,
528, 651, 793,
795, 818, 1057,
1071, 1082, 1101
\theenumi . . . . . . . .
. 944, 949, 953, 954\theenumii 944, 950, 954\theenumiii 944, 951, 955\theenumiv 944, 952, 1279
\theequation 1067, 1074
\thefigure . . . . . . .
. . 1077, 1081, 1087
\thefootnote . . . . . . 583
theindex (env.) . . . 1292
\thepage . . . . . 477,
478, 513, 536, 537

58\theparagraph . . . . . 651\thepart . . . . . 651,
716, 724, 737, 746\thesection . . . 484,
506, 519, 651, 1050
\thesubparagraph . . 651\thesubsection 490, 651\thesubsubsection . 651\thetable . . . . . . . .
. . 1096, 1100, 1106
\thispagestyle599,
702, 776, 786,
1023, 1037, 1302
\tiny . . . . . . . . . . . . 180\title . . . . 543, 575, 609\titlepage . . . . . . . 972
titlepage (env.) . . 1014
\today . . . . . . 546, 1335
\topfraction . . . . . . 406\topmargin . . . . . . . 382\topsep 120, 130, 140,
153, 163, 173,894, 899, 904,
913, 917, 921,
928, 929, 930, 933\topskip . . 239, 253, 301\tt . . . . . . . . . . . . 1127
\ttfamily . . . . . . . 1129
\twocolumn . . . . . . .
592, 781, 1026,
1040,
1154,
1241,
1258,
1298, 1299, 1349
Vverse (env.) . . . . . . . 994
W\widowpenalty

231, 1283