The L^{A}TEX 2ε Sources

Johannes Braams David Carlisle Alan Jeffrey Leslie Lamport Frank Mittelbach Chris Rowley Rainer Schöpf

1997/12/01 Patch level 1

Contents

a ltdirchk.dtx 1

1 L^{A}TEX System Dependent Initialisations 1

2 Initialisation 2 2.1 INITEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Some bits of 2e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 texsys.cfg 4 3.1 texsys.cfg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 UNIX (web2c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3 UNIX (other) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4 MSDOS (emtex) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.5 MSDOS (other) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.6 VMS (DECUS TEX, PD VMS 3.6) . . . . . . . . . . . . . . . . . . 7 3.7 VMS (???) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.8 MACINTOSH (OzTeX 1.6) . . . . . . . . . . . . . . . . . . . . . . 7 3.9 MACINTOSH (other) . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.10 FAKE EXAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4 Setting \@currdir  8
5 Setting \input@path  10

6 Filename Parsing 10 7 TEX Versions 12

8 ltxcheck.tex 13

b ltplain.dtx 14

9 Plain TEX 14

c ltvers.dtx 26

10 Version Identifictation 26

d ltdefns.dtx 28

11 Definitions 28 11.1 Initex initialisations . . . . . . . . . . . . . . . . . . . . . . . . . . 28 11.2 Saved versions of TEX primitives . . . . . . . . . . . . . . . . . . . 28 11.3 Command definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 29 11.4 Robust commands and protect . . . . . . . . . . . . . . . . . . . . 37 11.5 Internal defining commands . . . . . . . . . . . . . . . . . . . . . . 40 11.6 Commands for Autoloading . . . . . . . . . . . . . . . . . . . . . . 41

e ltalloc.dtx 43

12 Counters 43

f ltcntrl.dtx 45

13 Program control structure 45

g lterror.dtx 49

14 Error handling 49 14.1 General commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 14.2 Specific errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

h ltpar.dtx 59

15 Paragraphs 59 15.1 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

i ltspace.dtx 61

16 Spacing 61 16.1 User Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 16.2 Chris’ comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 16.3 Some immediate actions . . . . . . . . . . . . . . . . . . . . . . . . 64 16.4 The code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 16.5 Vertical spacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 16.6 Horizontal space . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

j ltlogos.dtx 74

17 Logos 74

k ltfiles.dtx 75

18 File Handling 75 18.1 Safe Input Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 18.2 Listing files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

l ltoutenc.dtx 85

19 Font encodings 85 19.1 Docstrip modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 19.2 Definitions for the kernel . . . . . . . . . . . . . . . . . . . . . . . . 88

19.2.1 Declaration commands . . . . . . . . . . . . . . . . . . . . . 88 19.2.2 Hyphenation . . . . . . . . . . . . . . . . . . . . . . . . . . 93 19.2.3 Miscellania . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 19.2.4 Default encodings . . . . . . . . . . . . . . . . . . . . . . . 94 19.2.5 Math material . . . . . . . . . . . . . . . . . . . . . . . . . 96

19.3 The fontenc package . . . . . . . . . . . . . . . . . . . . . . . . . . 97 19.4 Definitions for the OT1 encoding . . . . . . . . . . . . . . . . . . . 97 19.5 Definitions for the T1 encoding . . . . . . . . . . . . . . . . . . . . 99 19.6 Definitions for the OMS encoding . . . . . . . . . . . . . . . . . . . 104 19.7 Definitions for the OML encoding . . . . . . . . . . . . . . . . . . . 104 19.8 Definitions for the OT4 encoding . . . . . . . . . . . . . . . . . . . 105

20 Package files 111

m ltcounts.dtx 115

21 Counters and Lengths 115 21.1 Environment Counter Macros . . . . . . . . . . . . . . . . . . . . . 115

n ltlength.dtx 119

22 Lengths 119

o ltfssbas.dtx 120

23 Autoloading parts of NFSS 120 24 Preliminary macros 120 25 Macros for setting up the tables 121 26 Selecting a new font 126

26.1 Macros for the user . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 26.2 Macros for loading fonts . . . . . . . . . . . . . . . . . . . . . . . . 130

27 Assigning math fonts to versions 136

p ltfsstrc.dtx 141

28 Introduction 141 29 A driver for this document 141 30 The Implementation 142 31 Handling Options 142 32 Macros common to fam.tex and tracefnt.sty 144

32.1 General font loading . . . . . . . . . . . . . . . . . . . . . . . . . . 144 32.2 Math fonts setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

32.2.1 Outline of algorithm for math font sizes . . . . . . . . . . . 149 32.2.2 Code for math font size setting . . . . . . . . . . . . . . . . 150 32.2.3 Other code for math . . . . . . . . . . . . . . . . . . . . . . 151

33 Scaled font extraction 153 33.1 Sizefunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

q ltfsscmp.dtx 166

34 Compatibility code for NFSS release 1 166

r ltfssdcl.dtx 171

35 Interface Commands 171

s ltfssini.dtx 194

36 NFSS Initialisation 194 36.1 Providing math versions . . . . . . . . . . . . . . . . . . . . . . . . 194 36.2 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

t fontdef.dtx 200

37 Introduction 200

38 Customization 200

39 The docstrip modules 201

40 A driver for this document 201

41 The fonttext.ltx file  202

41.1 Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 41.2 Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

42 The fontmath.ltx file  204

42.1 The font encodings used . . . . . . . . . . . . . . . . . . . . . . . . 205

42.1.1 Symbolfont and Alphabet declarations . . . . . . . . . . . . 205 42.2 Math font sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 42.3 The math symbol assignments . . . . . . . . . . . . . . . . . . . . . 206

42.3.1 The letters . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 42.3.2 The digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 42.3.3 Punctuation, brace, etc. keys . . . . . . . . . . . . . . . . . 208 42.3.4 Delimitercodes for characters . . . . . . . . . . . . . . . . . 208

42.4 Symbols accessed via control sequences . . . . . . . . . . . . . . . . 209 42.4.1 Greek letters . . . . . . . . . . . . . . . . . . . . . . . . . . 209 42.4.2 Ordinary symbols . . . . . . . . . . . . . . . . . . . . . . . 209 42.4.3 Large Operators . . . . . . . . . . . . . . . . . . . . . . . . 210 42.4.4 Binary symbols . . . . . . . . . . . . . . . . . . . . . . . . . 211 42.4.5 Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 42.4.6 Arrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 42.4.7 Punctuation symbols . . . . . . . . . . . . . . . . . . . . . . 213 42.4.8 Math accents . . . . . . . . . . . . . . . . . . . . . . . . . . 213 42.4.9 Radicals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 42.4.10 Over and under something, etc . . . . . . . . . . . . . . . . 214 42.4.11 Delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

42.5 Math versions of text commands . . . . . . . . . . . . . . . . . . . 216 42.6 Other special functions and parameters . . . . . . . . . . . . . . . 216 42.6.1 Biggggg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 42.6.2 The log-like functions . . . . . . . . . . . . . . . . . . . . . 216 42.6.3 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

u preload.dtx 217

43 Overview 217 44 Customization 217 45 Module switches for the docstrip program 218 46 A driver for this document 218 47 The code 218

v ltfntcmd.dtx 221

48 Introduction 221 49 The implementation 223 50 Initialization 228

w ltpageno.dtx 229

51 Page Numbering 229

x ltxref.dtx 230

52 Cross Referencing 230 52.1 Cross Referencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

y ltmiscen.dtx 233

53 Miscellaneous Environments 233 53.1 Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 53.2 Center, Flushright, Flushleft . . . . . . . . . . . . . . . . . . . . . . 237 53.3 Verbatim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

z ltmath.dtx 242

54 Math setup 242

54.1 Math commands based on plain TEX . . . . . . . . . . . . . . . . . 242 54.1.1 The log-like functions . . . . . . . . . . . . . . . . . . . . . 242 54.1.2 Biggggg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 54.1.3 The UNSORTED Rest . . . . . . . . . . . . . . . . . . . . . 243

54.2 Math Environments . . . . . . . . . . . . . . . . . . . . . . . . . . 247 54.3 External options to the standard document classes . . . . . . . . . 250

54.3.1 Left equation numbering . . . . . . . . . . . . . . . . . . . . 250 54.3.2 Flush left equations . . . . . . . . . . . . . . . . . . . . . . 250

A ltlists.dtx 253

55 List, and related environments 253 55.1 List and Trivlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 55.2 Vertical Spacing (skips) . . . . . . . . . . . . . . . . . . . . . . . . 255 55.3 Penalties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 55.4 Horizontal Spacing (dimens) . . . . . . . . . . . . . . . . . . . . . . 255 55.5 Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 55.6 Itemize and Enumerate . . . . . . . . . . . . . . . . . . . . . . . . 266

B ltboxes.dtx 269

56 L^{A}TEX Box commands 269 56.1 Some low-level constructs . . . . . . . . . . . . . . . . . . . . . . . 279

C lttab.dtx 281

57 Tabbing, Tabular and Array Environments 281 57.1 tabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 57.2 array and tabular environments . . . . . . . . . . . . . . . . . . . . 290

D ltpictur.dtx 305

58 Picture Mode 305 58.1 Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

E ltthm.dtx 328

59 Theorem Environments 328

F ltsect.dtx 332

60 Sectioning Commands 332 60.1 The Title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 60.2 Sectioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

60.2.1 Initializations . . . . . . . . . . . . . . . . . . . . . . . . . . 339 60.3 Table of Contents etc. . . . . . . . . . . . . . . . . . . . . . . . . . 340

60.3.1 Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 60.3.2 Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

G ltfloat.dtx 343

61 Floats 343 61.1 Floating Environments . . . . . . . . . . . . . . . . . . . . . . . . . 343 61.2 Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

H ltidxglo.dtx 361

62 Index and Glossary Generation 361

I ltbibl.dtx 364

63 Bibliography Generation 364 63.1 Default definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

J ltpage.dtx 368

64 Page styles and related commands 368 64.1 Page Style Commands . . . . . . . . . . . . . . . . . . . . . . . . . 368 64.2 How a page style makes running heads and feet . . . . . . . . . . . 368 64.3 marking conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 368

K ltoutput.dtx 371

65 Output Routine 371

65.1 Floats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 65.1.1 Kludgeins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 65.1.2 Float control . . . . . . . . . . . . . . . . . . . . . . . . . . 416 65.1.3 Float placement parameters . . . . . . . . . . . . . . . . . . 427

L ltclass.dtx 430

66 Introduction 430 67 User interface 430

67.1 Option processing . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

68 Class and Package interface 432 68.1 Class name and version . . . . . . . . . . . . . . . . . . . . . . . . 432 68.2 Package name and version . . . . . . . . . . . . . . . . . . . . . . . 432 68.3 Requiring other packages . . . . . . . . . . . . . . . . . . . . . . . 432 68.4 Declaring new options . . . . . . . . . . . . . . . . . . . . . . . . . 433 68.5 Safe Input Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

69 Implementation 434 69.1 Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 69.2 Providing shipment . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

70 After Preamble 449

M lthyphen.dtx 450

N ltfinal.dtx 452

71 Final settings 452 71.1 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 71.2 Typesetting parameters . . . . . . . . . . . . . . . . . . . . . . . . 452 71.3 Hyphenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 71.4 Font loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 71.5 Input encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 71.6 Applying Patch files . . . . . . . . . . . . . . . . . . . . . . . . . . 456 71.7 Freeing Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 71.8 Initialise file list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 71.9 Dumping the format . . . . . . . . . . . . . . . . . . . . . . . . . . 458

O ltpatch 459

Change History 460

Index 510

File a

ltdirchk.dtx

1 L^{A}TEX System Dependent Initialisations

This file implements the semi-automatic determination of various system dependent parts of the initialisation. The actual definitions may be placed in a file texsys.cfg. Thus for operating systems for which the tests here do not result in acceptable settings, a ‘hand written’ texsys.cfg may be produced.

The macros that must be defined are:

\@currdir \@currdir⟨filename⟩⟨space⟩ should expand to a form of the filename that uniquely refers to the ‘current directory’ if this is possible. (The expansion should also end with a space.) on UNIX, this is \def\@currdir{./}. For more exotic operating systems you may want to make \@currdir a macro with arguments delimited by . and/or ⟨space⟩. If the operating system has no concept of directory structure, this macro should be defined to be empty.

\input@path If the primitive \openin searches the same directories as the primitive \input, then it is possible to tell (using \ifeof) whether a file exists before trying to input it. For systems like this, \input@path should be left undefined.

If \openin does not ‘follow’ \input then \input@path must be defined to be a list of directories to search for input files. The format for each directory is as for \@currdir, normally just a prefix is required, but it may be a macro with space-delimited argument. That is, if ⟨dir⟩ is an entry in the input path, TEX will try to load the expansion of ⟨dir⟩⟨filename⟩⟨space⟩

So either ⟨dir⟩ should be defined as a macro with argument delimited by space, or it should just expand to a directory name, including the final directory separator, so that it may be concatenated with the ⟨filename⟩. This means that for UNIX-like syntax, each ⟨dir⟩ should end with a slash, /.

\input@path should expand to a list of such directories, each in a {} group.

\filename@parse After a call of the form: \filename@parse{⟨filename⟩}, the three macros

\filename@area,\filename@base,\filename@ext should be defined to be the

‘area’ (or directory), basename and extension respectively. If there was no extension specified in ⟨filename⟩, \filename@ext should be \let to \relax (so this case may be tested with \@ifundefined{filename@ext} and, perhaps a default extension substituted).

Normally one would not need to define this macro in texsys.cfg as the automatic tests can supply parsers that work with UNIX and VMS and Macintosh syntax, as well as a basic parser that will cover many other cases. However some operating systems may need a ‘hand produced’ parser in which case it should be defined in this file.

The UNIX parser also works for most MSDOS TEX versions. Currently if the UNIX, VMS or Macintosh parser is not used, \filename@parse is defined to always return an empty area, and to split the argument into basename and extension at the first ‘.’ that occurs in the name. Parsers for other formats may be defined in texsys.cfg, in which case they will be used in preference to the default definitions.

\@TeXversion \@TeXversion is now set automatically by the initialisation tests in this file. You should not need to set it in texsys.cfg, however the following documentation is left for information. L^{A}TEX does not set this variable exactly, the automatic tests set it to: 2 for any version, v, v < 3.0 3 for any version, v, 3.0 ≤ v ≤ 3.14 ⟨undefined⟩ otherwise. However these values are accurate enough for L^{A}TEX to take appropriate action for these old TEXs.

If your TEX is older than version 3.141, then you should define \@TeXversion (using \def) to be the version number. If you do not do this^{1} , L^{A}TEX will not work around a bug in old TEX versions, and so error messages will appear in a very strange format, with ^^J appearing instead of line breaks:

! LaTeX Error: \rubbish undefined.^^J^^JSee the LaTeX manual or LaTeX Companion
 for explanation.^^JType  H <return>  for immediate help.
 ...
l.3 \renewcommand{\rubbish}
                           {}
?

However if you put \def\@TeXversion{3.14} in texsys.cfg the following format will be used:

! LaTeX Error: \rubbish undefined.
See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
! .
 ...
l.3 \renewcommand{\rubbish}
                           {}
?

Note that this has an extra line ! . which does not appear in error messages that use the default settings with a current version of TEX, but this should not cause any confusion we hope.

2 Initialisation

As this file is read at a very early stage, some definitions that are normally considered to be part of the format must be made here.

1Actually if your TEX is really old, version 2, L^{A}TEX can detect this, and sets \@TeXversion to 2 if it is not set in the cfg file.

2.1 INITEX

1 ⟨∗dircheck⟩ 2 ⟨∗initex⟩

 3 ⟨initex⟩\ifnum\catcode`\{=1
 4 ⟨initex⟩ \errmessage
 5 ⟨initex⟩ {LaTeX must be made using an initex with no format preloaded}

6 ⟨initex⟩\fi

 7 \catcode`\{=1
 8 \catcode`\}=2
 9 \catcode`\#=6
10 \catcode`\^=7
11 \chardef\active=13
12 \catcode`\@=11
13 \countdef\count@=255
14 \let\bgroup={ \let\egroup=}
15 \ifx\@@input\@undefined\let\@@input\input\fi
16 \ifx\@@end\@undefined\let\@@end\end\fi
17 \chardef\@inputcheck0
18 \chardef\sixt@@n=16
19 \newlinechar`\^^J
20 \def\typeout{\immediate\write17}
21 \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
22 \do\#\do\^\do\_\do\%\do\~}
23 \def\@makeother#1{\catcode`#1=12\relax}
24 \def\space{ }
25 \def\@tempswafalse{\let\if@tempswa\iffalse}
26 \def\@tempswatrue{\let\if@tempswa\iftrue}
27 \let\if@tempswa\iffalse
28 \def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
29 \iterate \let\iterate\relax}
30 \let\repeat\fi

31 ⟨/initex⟩

2.2 Some bits of 2e

32 ⟨∗2ekernel⟩

33 \def\two@digits#1{\ifnum#1<10 0\fi\number#1}
34 \long\def\@firstoftwo#1#2{#1}
35 \long\def\@secondoftwo#1#2{#2}

This is a special version of \ProvidesFile for initex use.

36 \def\ProvidesFile#1{%
37 \begingroup
38  \catcode`\ 10 %
39  \@makeother\/%
40  \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
41 \def\@providesfile#1[#2]{%
42  \wlog{File: #1 #2}%
43  \@addtofilelist{ #2}%
44  \endgroup}

45 \long\def\@addtofilelist#1{}
46 \def\@empty{}
47 \catcode`\%=12
48 \def\@percentchar{%}
49 \catcode`\%=14
50 \let\@currdir\@undefined
51 \let\input@path\@undefined
52 \let\filename@parse\@undefined
\strip@prefix
53 \def\strip@prefix#1>{}

54 ⟨/2ekernel⟩

3 texsys.cfg

As mentioned above, any site specific definitions required to describe the filename handling must be entered into a file texsys.cfg. If texsys.cfg can not be located by \openin, we write a default version out. The default version only contains comments, so we do not actually input the file in that case. The automatic tests later will, hopefully, correctly define the required macros.

The tricky code below checks to see if texsys.cfg exists. If it does not, all the text in this file between START and END is copied verbatim to a new file texsys,cfg. If texsys.cfg is found, then it is simply input. This is only done when this file is being used unstripped.

55 ⟨∗docstrip⟩

56 \openin15=texsys.cfg
57 \ifeof15
58 \typeout{** Writing a default texsys.cfg}
59 \immediate\openout15=texsys.cfg
60 \begingroup
61 \catcode`\^^M\active%
62 \let^^M\par%
63 \def\reserved@a#1^^M{%
64 \def\reserved@b{#1}%
65 \ifx\reserved@b\reserved@c\endgroup\else%
66  \immediate\write15{#1}%
67  \expandafter\reserved@a\fi}%
68 \def\reserved@d#1START^^M{\let\do\@makeother\dospecials\reserved@a}%
69 \catcode`\%=12
70 \def\reserved@c{%END}
71 \reserved@d

START

3.1 texsys.cfg

This file contains the site specific definitions of the four macros

\@currdir, \input@path, \filename@parse and \@TeXversion.

As distributed it only contains comments, however this ‘empty’ file will work on many systems because of the automatic tests built into ltdirchk.dtx. You are allowed to edit this file to add definitions of these macros appropriate to your system.

The macros that must be defined are:

\@currdir \@currdir⟨filename⟩⟨space⟩ should expand to a form of the filename that uniquely refers to the ‘current directory’ if this is possible. (The expansion should also end with a space.) on UNIX, this is \def\@currdir{./}. For more exotic operating systems you may want to make \@currdir a macro with arguments delimited by . and/or ⟨space⟩. If the operating system has no concept of directory structure, this macro should be defined to be empty.

\input@path If the primitive \openin searches the same directories as the primitive \input, then it is possible to tell (using \ifeof) whether a file exists before trying to input it. For systems like this, \input@path should be left undefined.

If \openin does not ‘follow’ \input then \input@path must be defined to be a list of directories to search for input files. The format for each directory is as for \@currdir, normally just a prefix is required, but it may be a macro with space-delimited argument. That is, if ⟨dir⟩ is an entry in the input path, TEXwill try to load the expansion of

⟨dir⟩⟨filename⟩⟨space⟩

So either ⟨dir⟩ should be defined as a macro with argument delimited by space, or it should just expand to a directory name, including the final directory separator, so that it may be concatenated with the ⟨filename⟩. This means that for UNIX-like syntax, each ⟨dir⟩ should end with a slash, /. One exception to this rule is that the input path should always contain the empty directory {} as this will allow ‘full pathnames’ to be used, and the ‘current directory’ to be searched.

\input@path should expand to a list of such directories, each in a {} group.

\filename@parse After a call of the form: \filename@parse{⟨filename⟩}, the three macros

\filename@area,\filename@base,\filename@ext should be defined to be the

‘area’ (or directory), basename and extension respectively. If there was no extension specified in ⟨filename⟩, \filename@ext should be \let to \relax (so this case may be tested with \@ifundefined{filename@ext} and, perhaps a default extension substituted).

Normally one would not need to define this macro in texsys.cfg as the automatic tests can supply parsers that work with UNIX and VMS syntax, as well as a basic parser that willcover many other cases. However some operating systems may need a ‘hand produced’ parser in which case it should be defined in this file.

The UNIX parser also works for most MSDOS TEX versions. Currently if the UNIX or VMS parser is not used, \filename@parse is defined to always return an empty area, and to split the argument into basename and extension at the first ‘.’ that occurs in the name. Parsers for other formats may be defined in texsys.cfg, in which case they will be used in preference to the default definitions.

\@TeXversion You should not need to set this macro in texsys.cfg. L^{A}TEX tests to set this

automatically. See the comments in the opening section of ltdirchk.dtx.

The following sections give examples of definitions which might work on various systems. These are currently mainly untested as I only have access to a few systems, all of which do not need this file as the automatic tests work. All the code is commented out.

3.2 UNIX (web2c)

This implementation does make \openin and \input look in the same places. Acceptable settings are made by ltdirchk.dtx, and so this file may be empty. The definitions below are therefore just for information.

72 %\def\@currdir{./}
73 %\let\input@path\@undefined

3.3 UNIX (other)

Apparently some commercial UNIX implementations have different paths for \openin and \input. For these one could use definitions like the following (with whatever directories are used at your site): note that the directory names should end with /.

74 % \def\@currdir{./}
75 % \def\input@path{%
76 %   {/usr/local/lib/tex/inputs/distrib/}%
77 %   {/usr/local/lib/tex/inputs/contrib/}%
78 %   {/usr/local/lib/tex/inputs/local/}%
79 % }

3.4 MSDOS (emtex)

This implementation does make \openin and \input look in the same places. Acceptable settings are made by ltdirchk.dtx, and so this file may be empty. The definitions below are therefore just for information.

80 % \def\@currdir{./}
81 % \let\input@path\@undefined

3.5 MSDOS (other)

Some PC implementations have different paths for \openin and \input. For these one could use definitions like the following (with whatever directories are used at your site): note that the directory names should end with /. This assumes the implementation uses UNIX style / as the directory separator.

82 % \def\@currdir{./}
83 % \def\input@path{%
84 %   {c:/tex/inputs/distrib/}%
85 %   {c:/tex/inputs/contrib/}%
86 %   {c:/tex/inputs/local/}%
87 % }

3.6 VMS (DECUS TEX, PD VMS 3.6)

This implementation does make \openin and \input look in the same places. Acceptable settings are made by ltdirchk.dtx, and so this file may be empty. The definitions below are therefore just for information.

88 % \def\@currdir{[]}
89 % \let\input@path\@undefined

3.7 VMS (???)

Some VMS implementations have different paths for \openin and \input. For these one could use definitions like the following:

90 % \def\@currdir{[]}
91 % \def\input@path{%
92 %   {tex_inputs:}%
93 %   {SOMEDISK:[SOME.TEX.DIRECTORY]}%
94 % }

3.8 MACINTOSH (OzTeX 1.6)

This implementation does make \openin and \input look in the same places. Acceptable settings are made by ltdirchk.dtx, and so this file may be empty. The definitions below are therefore just for information.

95 % \def\@currdir{:}
96 % \let\input@path\@undefined

3.9 MACINTOSH (other)

Some Macintosh implementations have different paths for \openin and \input. For these one could use definitions like the following (with whatever folders are used on your machine): note that the directory names should end with :, and they should contain no spaces.

97 % \def\@currdir{:}
98 % \def\input@path{%
99 %   {Hard-Disk:Applications:TeX:TeX-inputs:}%
100 %   {Hard-Disk:Applications:TeX:My-inputs:}%

101 % }

3.10 FAKE EXAMPLE

This example is for an operating system that has filenames of the form <area>name For maximum compatability with macro sets, you want name.ext to be mapped

to <ext>name. and <area>name.ext to be mapped to <area.ext>name. \input

does this mapping automatically, but \openin does not, and does not look in the same places as \input. <>name is the desired ‘current directory’ syntax.

the following code would possibly work:

102 % \def\@dir#1#2 {%

103 %   \@d@r{#1}#2..\@nil}
104 % \def\@d@r#1#2.#3.#4\@nil{%
105 %   <\ifx\@dir#1\@dir\else#1\ifx\@dir#3\@dir\else.\fi\fi#3>#2 }

106 %

107 % \def\@currdir{\@dir{}}
108 % \def\input@path{%
109 %   {\@dir{area.one}}%
110 %   {\@dir{area.two}}%

111 % }

END

112 \immediate\closeout15

If texsys.cfg did exist, then input it.

113 \else
114 \typeout{** Using the existing texsys.cfg}
115 \closein15
116 \input texsys.cfg
117 \fi

118 ⟨/docstrip⟩

If the stripped version of this file is being used (in latex2e.ltx) then texsys.cfg should be there, so just input it.

119 ⟨dircheck⟩\input texsys.cfg

 4 Setting \@currdir
\@currdir \IfFileExists This is a local definition of \IfFileExists. It tries to relocate texsxys.aux. If

it succeeds, then the \@currdir syntax has been determined. If all the tests fail then \@currdir will be set to \@empty, and ltxcheck will warn of this when it checks the format.

120 \begingroup
121 \count@\time
122 \divide\count@ 60
123 \count2=-\count@
124 \multiply\count2 60
125 \advance\count2 \time

\today The current date and time stamp.

126 \edef\today{%
127 \the\year/\two@digits{\the\month}/\two@digits{\the\day}:%
128  \two@digits{\the\count@}:\two@digits{\the\count2}}

Create a file texsys.aux (hopefully in the current directory), then try to locate it again.

129 \immediate\openout15=texsys.aux
130 \immediate\write15{\today^^J}
131 \immediate\closeout15 %

#1 is the file to try, #2 is what to do on success, #3 on failure.

132 \def\IfFileExists#1#2#3{%
133 \openin\@inputcheck#1 %
134 \ifeof\@inputcheck
135  #3\relax
136 \else
137  \read\@inputcheck to \reserved@a
138  \ifx\reserved@a\today
139  \typeout{#1 found}#2\relax
140  \else
141  \typeout{BAD: old file \reserved@a (should be \today)}%
142  #3\relax
143  \fi
144 \fi
145 \closein\@inputcheck}
146 \endlinechar=-1

If \@currdir has not been pre-defined in texsys.cfg then test for UNIX, VMS and Oz-TEX-Mac. syntax.

147 \ifx\@currdir\@undefined
148 \IfFileExists{./texsys.aux}{\gdef\@currdir{./}}%
149  {\IfFileExists{[]texsys.aux}{\gdef\@currdir{[]}}%
150  {\IfFileExists{:texsys.aux}{\gdef\@currdir{:}}{}}}

If it is still undefined at this point, all the above tests failed. Earlier versions interactively prompted for a definition at this point, but it seems impossible to reliably obtain information from users at this point in the installation. This version of the file produces a format with no user-interaction. Later if the format is not suitable for the system, texsys.cfg may be edited and the format re-made.

151 \ifx\@currdir\@undefined
152  \global\let\@currdir\@empty
153  \typeout{^^J^^J%
154  !! No syntax for the current directory could be found^^J%

155 }%

156 \fi

Otherwise \@currdir was defined in texsys.cfg. In this case check that the syntax specified works on this system. (In case a complete L^{A}TEX system has been copied from one system to another.) If the test fails, give up. The installer should remove or correct the offending texsys.cfg and try again.

157 \else
158 \IfFileExists{\@currdir texsys.aux}{}{%
159  \edef\reserved@a{\errhelp{%
160  texsys.cfg specifies the current directory syntax to be^^J%
161  \meaning\@currdir^^J%
162  but this does not work on this system.^^J%
163  Remove texsys.cfg and restart.}}\reserved@a
164  \errmessage{Bad texsys.cfg file: \noexpand\@currdir}\@@end}

The version of \@currdir in texsys.cfg looks OK.

165 \fi
166 \immediate\closeout15 %
167 \endgroup
168 \typeout{^^J^^J%
169  \noexpand\@currdir set to:
170  \expandafter\strip@prefix\meaning\@currdir.^^J%

171 }

Stop here if the file is being used unstripped.

172 ⟨∗docstrip⟩

173 \relax\endinput

174 ⟨/docstrip⟩

5 Setting \input@path

Earlier versions of this file attempted to automatically test whether \input@path was required, and interactively prompt for a path if necessary. This was not found to be very reliable The first-time installer of L^{A}TEX 2ε can not be expected to have enough information to supply the correct information to the prompts. Now the interaction is omitted. After the format is made the installer can attempt to run the test document ltxcheck.tex through L^{A}TEX 2ε. This will check, amongst other things, whether texsys.cfg will need to be edited and the format remade.

\input@path Now set up the \input@path.

\input@path should either be undefined, or a list of directories as described in the introduction.

175 \typeout{^^J%
176  Assuming \noexpand\openin and \noexpand\input^^J%
177  \ifx\input@path\@undefined

\input@path has not been pre-defined.

178  have the same search path.^^J%
179  \else
\input@path has been defined in texsys.cfg.
180  have different  search paths.^^J%
181  LaTeX will use the path specified by \noexpand\input@path:^^J%
182  \fi

183 }

6 Filename Parsing

\filename@parse Split a filename into its components.

184 \ifx\filename@parse\@undefined
185 \def\reserved@a{./}\ifx\@currdir\reserved@a

 \filename@parse was not specified in texsys.cfg, but \@currdir looks like

UNIX…

186  \typeout{^^JDefining UNIX/DOS style filename parser.^^J}
187  \def\filename@parse#1{%
188  \let\filename@area\@empty
189  \expandafter\filename@path#1/\\}

Search for the last /.

190  \def\filename@path#1/#2\\{%
191  \ifx\\#2\\%
192  \def\reserved@a{\filename@simple#1.\\}%
193  \else
194  \edef\filename@area{\filename@area#1/}%
195  \def\reserved@a{\filename@path#2\\}%
196  \fi
197  \reserved@a}
198 \else\def\reserved@a{[]}\ifx\@currdir\reserved@a
 \filename@parse was not specified in texsys.cfg, but \@currdir looks like

VMS…

199  \typeout{^^JDefining VMS style filename parser.^^J}
200  \def\filename@parse#1{%
201  \let\filename@area\@empty
202  \expandafter\filename@path#1]\\}

Search for the last ].

203  \def\filename@path#1]#2\\{%
204  \ifx\\#2\\%
205  \def\reserved@a{\filename@simple#1.\\}%
206  \else
207  \edef\filename@area{\filename@area#1]}%
208  \def\reserved@a{\filename@path#2\\}%
209  \fi
210  \reserved@a}
211 \else\def\reserved@a{:}\ifx\@currdir\reserved@a
 \filename@parse was not specified in texsys.cfg, but \@currdir looks like Mac-

intosh…

212  \typeout{^^JDefining Mac style filename parser.^^J}
213  \def\filename@parse#1{%
214  \let\filename@area\@empty
215  \expandafter\filename@path#1:\\}

Search for the last :.

216  \def\filename@path#1:#2\\{%
217  \ifx\\#2\\%
218  \def\reserved@a{\filename@simple#1.\\}%
219  \else
220  \edef\filename@area{\filename@area#1:}%
221  \def\reserved@a{\filename@path#2\\}%

222  \fi
223  \reserved@a}
224 \else

\filename@parse was not specified in texsys.cfg. So just make a simple parser that always sets \filename@area to empty.

225  \typeout{^^JDefining generic filename parser.^^J}
226  \def\filename@parse#1{%
227  \let\filename@area\@empty
228  \expandafter\filename@simple#1.\\}
229 \fi\fi\fi

\filename@simple is used by all three versions. Finally we can split off the extension.

230 \def\filename@simple#1.#2\\{%
231  \ifx\\#2\\%
232  \let\filename@ext\relax
233  \else
234  \edef\filename@ext{\filename@dot#2\\}%
235  \fi
236  \edef\filename@base{#1}}

Remove a final dot, added earlier.

237 \def\filename@dot#1.\\{#1}
238 \else
 Otherwise, \filename@parse was specified in texsys.cfg.
239 \typeout{^^J^^J%
240  \noexpand\filename@parse was defined in texsys.cfg:^^J%
241  \expandafter\strip@prefix\meaning\filename@parse.^^J%

242 }

243 \fi

7 TEX Versions

\@TeXversion TEX versions older than than 3.141 require \@TeXversion to be set. This can be determined automatically due to a trick suggested by Bernd Raichle. (Actually this will not always get the correct version number, eg TEX3.14 would be detected as TEX3, but L^{A}TEX only needs to take account of TEX’s older than 3, or between 3 and 3.14.

244 \ifx\@TeXversion\@undefined
245 \ifx\@undefined\inputlineno
246  \def\@TeXversion{2}
247 \else
248 {\catcode`\^^J=\active
249  \def\reserved@a#1#2\@@{\if#1\string^3\fi}
250  \edef\reserved@a{\expandafter\reserved@a\string^^J\@@}
251  \ifx\reserved@a\@empty\else\gdef\@TeXversion{3}\fi}

252 \fi
253 \fi

254 ⟨/dircheck⟩

8 ltxcheck.tex

After the format has been made, and article.cls moved with the other files to the ‘standard input directory’ as specified in install.txt, the format may be checked by running the file ltxcheck.tex.

File b

ltplain.dtx

9 Plain TEX

L^{A}TEX includes almost all of the functionality of Knuth’s original ‘Basic Macros’ That is, the plain TEX format described in Appendix B of the TEXBook. However, some of the user commands are not much use so, in order to save memory, we may remove them from the kernel into a package. Here is a list of the commands that may be removed (PROBABLY NOT COMPLETE).

    \magstep    \magstephalf
    \mathhexbox
    \vglue      \vgl@
    \hglue      \hgl@

This file is by now very small as most of it has been moved to more appropriate kernel files: it may disappear completely one day.

L^{A}TEX font definitions are done using NFSS2 so none of PLAIN’s font definitions are in L^{A}TEX.

L^{A}TEX has its own tabbing environment, so PLAIN’s is disabled.

L^{A}TEX uses its own output routine, so most of the plain one was removed.

1 ⟨∗2ekernel | autoload⟩

 2 \catcode`\{=1 % left brace is begin-group character
 3 \catcode`\}=2 % right brace is end-group character
 4 \catcode`\$=3 % dollar sign is math shift
 5 \catcode`\&=4 % ampersand is alignment tab
 6 \catcode`\#=6 % hash mark is macro parameter character
 7 \catcode`\^=7 % circumflex and uparrow are for superscripts
 8 \catcode`\_=8 % underline and downarrow are for subscripts
 9 \catcode`\^^I=10 % ascii tab is a blank space
10 \chardef\active=13 \catcode`\~=\active % tilde is active
11 \catcode`\^^L=\active \outer\def^^L{\par}% ascii form-feed is \outer\par
12 \message{catcodes,}

We had to define the \catcodes right away, before the message line, since \message uses the { and } characters. When INITEX (the TEX initializer) starts up, it has defined the following \catcode values: \catcode`\^^@=9 % ascii null is ignored \catcode`\^^M=5 % ascii return is end-line \catcode`\\=0 % backslash is TeX escape character \catcode`\%=14 % percent sign is comment character \catcode`\ =10 % ascii space is blank space \catcode`\^^?=15 % ascii delete is invalid

\catcode`\A=11 ... \catcode`\Z=11 % uppercase letters

\catcode`\a=11 ... \catcode`\z=11 % lowercase letters

all others are type 12 (other)

Here is a list of the characters that have been specially catcoded:

13 \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
14 \do\#\do\^\do\_\do\%\do\~}

(not counting ascii null, tab, linefeed, formfeed, return, delete) Each symbol in the list is preceded by , which can be defined if you want to do something to every item in the list.

We make @ signs act like letters, temporarily, to avoid conflict between user names and internal control sequences of plain format.

15 \catcode`@=11

To make the plain macros more efficient in time and space, several constant values are declared here as control sequences. If they were changed, anything could happen; so they are private symbols.

\@ne \tw@ \thr@@ \sixt@@n \@cclv Small constants are defined using \chardef.
16 \chardef\@ne=1
17 \chardef\tw@=2
18 \chardef\thr@@=3
19 \chardef\sixt@@n=16
20 \chardef\@cclv=255
\@cclvi \@m \@M \@MM Constants above 255 defined using \mathchardef.
21 \mathchardef\@cclvi=256
22 \mathchardef\@m=1000
23 \mathchardef\@M=10000
24 \mathchardef\@MM=20000

Allocation of registers

Here are macros for the automatic allocation of \count, \box, \dimen, \skip, \muskip, and \toks registers, as well as \read and \write stream numbers, \fam codes, \language codes, and \insert numbers.

25 \message{registers,}

When a register is used only temporarily, it need not be allocated; grouping can be used, making the value previously in the register return after the close of the group. The main use of these macros is for registers that are defined by one macro and used by others, possibly at ifferent nesting levels. All such registers should be defined through these macros; otherwise conflicts may occur, especially when two or more more macro packages are being used at once. The following counters are reserved:

0 to 9 page numbering 10 count allocation 11 dimen allocation 12 skip allocation 13 muskip allocation 14 box allocation 15 toks allocation 16 read file allocation 17 write file allocation 18 math family allocation 19 language allocation 20 insert allocation 21 the most recently allocated number 22 constant -1

New counters are allocated starting with 23, 24, etc. Other registers are allocated starting with 10. This leaves 0 through 9 for the user to play with safely, except that counts 0 to 9 are considered to be the page and subpage numbers (since they are displayed during output). In this scheme, \count 10 always contains the number of the highest-numbered counter that has been allocated, \count 14 the highest-numbered box, etc. Inserts are given numbers 254, 253, etc., since they require a \count, \dimen, \skip, and \box all with the same number; \count 20 contains the lowest-numbered insert that has been allocated. Of course, \box255 is reserved for \output; \count255, \dimen255, and \skip255 can be used freely.

It is recommended that macro designers always use \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255. This will prevent “save stack buildup” that might otherwise occur.

26 \count10=22 % allocates \count registers 23, 24, ...
27 \count11=9 % allocates \dimen registers 10, 11, ...
28 \count12=9 % allocates \skip registers 10, 11, ...
29 \count13=9 % allocates \muskip registers 10, 11, ...
30 \count14=9 % allocates \box registers 10, 11, ...
31 \count15=9 % allocates \toks registers 10, 11, ...
32 \count16=-1 % allocates input streams 0, 1, ...
33 \count17=-1 % allocates output streams 0, 1, ...
34 \count18=3 % allocates math families 4, 5, ...
35 \count19=0 % allocates \language codes 1, 2, ...
36 \count20=255 % allocates insertions 254, 253, ...

\insc@unt \allocationnumber The insertion counter and most recent allocation.

37 \countdef\insc@unt=20
38 \countdef\allocationnumber=21

\m@ne The constant −1.

39 \countdef\m@ne=22 \m@ne=-1

\wlog Write on log file (only)

40 \def\wlog{\immediate\write\m@ne}

\count@ \dimen@ \dimen@i \dimen@ii \skip@ \toks@ Here are abbreviations for the names of scratch registers that don’t need to be allocated.

41 \countdef\count@=255
42 \dimendef\dimen@=0
43 \dimendef\dimen@i=1 % global only
44 \dimendef\dimen@ii=2
45 \skipdef\skip@=0
46 \toksdef\toks@=0
\newcount \newdimen \newskip \newmuskip \newbox \newhelp \newtoks Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo and

\foo will be defined (with \countdef) to be the next counter.

To find out which counter \foo is, you can look at \allocationnumber.

Since there’s no \boxdef command, \chardef is used to define a \newbox,

\newinsert, \newfam, and so on.

L^{A}TEX change: remove \outer from \newcount and \newdimen (FMi) This is necessary to use \newcount inside \if... later on. Also remove from \newskip, \newbox \newwrite and \newfam (DPC) to save later redefinition.

47 \def\newcount{\alloc@0\count\countdef\insc@unt}
48 \def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
49 \def\newskip{\alloc@2\skip\skipdef\insc@unt}
50 \def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
51 \def\newbox{\alloc@4\box\chardef\insc@unt}
52 \def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
53 \def\newtoks{\alloc@5\toks\toksdef\@cclvi}
\newread \newwrite
54 \def\newread{\alloc@6\read\chardef\sixt@@n}
55 \def\newwrite{\alloc@7\write\chardef\sixt@@n}
   L^{A}TEX defines \newfam in ltfss.dtx.
\def\newfam{\alloc@8\fam\chardef\sixt@@n}
\newlanguage
56 \def\newlanguage{\alloc@9\language\chardef\@cclvi}
\alloc@
57 \def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
58 \ch@ck#1#4#2% make sure there's still room
59 \allocationnumber\count1#1%
60 \global#3#5\allocationnumber
61 \wlog{\string#5=\string#2\the\allocationnumber}}
\newinsert
62 \def\newinsert#1{\global\advance\insc@unt \m@ne
63 \ch@ck0\insc@unt\count
64 \ch@ck1\insc@unt\dimen
65 \ch@ck2\insc@unt\skip
66 \ch@ck4\insc@unt\box
67 \allocationnumber\insc@unt
68 \global\chardef#1\allocationnumber
69 \wlog{\string#1=\string\insert\the\allocationnumber}}

\ch@ck

70 ⟨/2ekernel | autoload⟩ 71 ⟨∗2ekernel | autoload | autoerr⟩

72 \gdef\ch@ck#1#2#3{%
73 \ifnum\count1#1<#2\else
74 ⟨!autoload⟩ \errmessage{No room for a new #3}%
75 ⟨autoload⟩  \@autoerr\ch@ck#1#2#3%
76 \fi}

77 ⟨/2ekernel | autoload | autoerr⟩ 78 ⟨∗2ekernel | autoload⟩

\maxdimen \hideskip Here are some examples of allocation.

79 \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
80 \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
\p@ \z@ \z@skip \voidb@x
81 \newdimen\p@ \p@=1pt % this saves macro space and time
82 \newdimen\z@ \z@=0pt % can be used both for 0pt and 0
83 \newskip\z@skip \z@skip=0pt plus0pt minus0pt
84 \newbox\voidb@x % permanently void box register
85 \message{compatibility for TeX 2, }

If this file is used in an old TEX we define the new features of TEX 3.0 as simple macros or counters so that files that uses these features can be processed in such an environment (They will however produce some other results).

86 \ifx\@undefined\inputlineno
87 \newcount\inputlineno

This could be used to detect that an old TEX is in force

88 \inputlineno-1

Extra test for MLTeX 2, RmS 91/11/07.

89 \ifx\@undefined\language
90  \newcount\language
91 \fi
92 \newcount\lefthyphenmin
93 \newcount\righthyphenmin
94 \newcount\errorcontextlines
95 \newcount\holdinginserts
96 \newdimen\emergencystretch
97 \newcount\badness
98 \let\noboundary\relax
99 \newcount\setlanguage
100 \fi

Assign initial values to TEX’s parameters

101 \message{parameters,}

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

102 \pretolerance=100
103 \tolerance=200 % INITEX sets this to 10000
104 \hbadness=1000
105 \vbadness=1000
106 \linepenalty=10
107 \hyphenpenalty=50
108 \exhyphenpenalty=50
109 \binoppenalty=700
110 \relpenalty=500
111 \clubpenalty=150
112 \widowpenalty=150
113 \displaywidowpenalty=50
114 \brokenpenalty=100
115 \predisplaypenalty=10000
\postdisplaypenalty=0
\interlinepenalty=0
\floatingpenalty=0, set during \insert
\outputpenalty=0, set before TeX enters \output
116 \doublehyphendemerits=10000
117 \finalhyphendemerits=5000
118 \adjdemerits=10000

\looseness=0, cleared by TeX after each paragraph

\pausing=0
\holdinginserts=0
\tracingonline=0
\tracingmacros=0
\tracingstats=0
\tracingparagraphs=0
\tracingpages=0
\tracingoutput=0
119 \tracinglostchars=1
\tracingcommands=0
\tracingrestores=0
\language=0
120 \uchyph=1
\lefthyphenmin=2 \righthyphenmin=3 set below
\globaldefs=0
\maxdeadcycles=25 % INITEX does this

\hangafter=1 % INITEX does this, also TeX after each paragraph

\fam=0

\mag=1000 % INITEX does this

\escapechar=‘\\ % INITEX does this
121 \defaulthyphenchar=`\-
122 \defaultskewchar=-1
\endlinechar=‘\^^M % INITEX does this

\newlinechar=-1 \LaTeX\ sets this in ltdefns.dtx.

123 \delimiterfactor=901

\time=now % TeX does this at beginning of job \day=now % TeX does this at beginning of job \month=now % TeX does this at beginning of job \year=now % TeX does this at beginning of job

In L^{A}TEX we don’t want box information in the transcript unless we do a full tracing.

124 \showboxbreadth=-1
125 \showboxdepth=-1
126 \errorcontextlines=-1
127 \hfuzz=0.1pt
128 \vfuzz=0.1pt
129 \overfullrule=5pt
130 \maxdepth=4pt
131 \splitmaxdepth=\maxdimen
132 \boxmaxdepth=\maxdimen
\lineskiplimit=0pt, changed by \normalbaselines
133 \delimitershortfall=5pt
134 \nulldelimiterspace=1.2pt
135 \scriptspace=0.5pt
\mathsurround=0pt

\predisplaysize=0pt, set before TeX enters $$ \displaywidth=0pt, set before TeX enters $$ \displayindent=0pt, set before TeX enters $$

136 \parindent=20pt

\hangindent=0pt, zeroed by TeX after each paragraph

\hoffset=0pt
\voffset=0pt
\baselineskip=0pt, changed by \normalbaselines
\lineskip=0pt, changed by \normalbaselines
137 \parskip=0pt plus 1pt
138 \abovedisplayskip=12pt plus 3pt minus 9pt
139 \abovedisplayshortskip=0pt plus 3pt
140 \belowdisplayskip=12pt plus 3pt minus 9pt
141 \belowdisplayshortskip=7pt plus 3pt minus 4pt

  \leftskip=0pt
  \rightskip=0pt
142 \topskip=10pt
143 \splittopskip=10pt
  \tabskip=0pt
  \spaceskip=0pt
  \xspaceskip=0pt
144 \parfillskip=0pt plus 1fil
\normalbaselineskip \normallineskip \normallineskiplimit We also define special registers that function like parameters:
145 \newskip\normalbaselineskip \normalbaselineskip=12pt
146 \newskip\normallineskip \normallineskip=1pt
147 \newdimen\normallineskiplimit \normallineskiplimit=0pt
\interfootlinepenalty
148 \newcount\interfootnotelinepenalty \interfootnotelinepenalty=100

Definitions for preloaded fonts

\magstephalf
\magstep
149 \def\magstephalf{1095 }
150 \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or
151  2074\or 2488\fi\relax}

Macros for setting ordinary text

\frenchspacing
\nonfrenchspacing
152 \def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
153 \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
154 \def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
155 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
\normalbaselines
156 \def\normalbaselines{\lineskip\normallineskip
157 \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}

{\M \atop \I} Save a bit of space by using \let here.

158 \def\^^M{\ } % control <return> = control <space>
159 \let\^^I\^^M % same for <tab>

{\lq \atop \rq}

160 \def\lq{`}
161 \def\rq{'}
\lbrack \rbrack
162 \def\lbrack{[}
163 \def\rbrack{]}

{\aa \atop \AA} These are not from plain.tex but they are similar to other commands found here and nowhere else, being alternate input forms for characters.

164 \def \aa {\r a}
165 \def \AA {\r A}
\endgraf \endline
166 \let\endgraf=\par
167 \let\endline=\cr
\space
168 \def\space{ }

\empty This probably ought to go altogether, but let it to the L^{A}TEX version to save space.

169 \let\empty\@empty
\null
170 \def\null{\hbox{}}
\bgroup \egroup
171 \let\bgroup={
172 \let\egroup=}
\obeylines \obeyspaces In \obeylines, we say \let^^M=\par instead of \def^^M{\par} since this allows,
for example, \let\par=\cr \obeylines \halign{...
173 {\catcode`\^^M=\active % these lines must end with %
174 \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
175 \global\let^^M\par} % this is in case ^^M appears in a \write
176 \def\obeyspaces{\catcode`\ \active}
177 {\obeyspaces\global\let =\space}

\loop \iterate \repeat We use Kabelschacht’s method of doing loops, see TUB 8#2 (1987). (unless that breaks something :-). It turned out to need an extra \relax: see pr/642 (\loop could do one iteration too much in certain cases).

178 \long\def \loop #1\repeat{%
179 \def\iterate{#1\relax  % Extra \relax
180  \expandafter\iterate\fi

181 }%

182 \iterate
183 \let\iterate\relax

184 }

This setting of \repeat is needed to make \loop...\if...\repeat skippable within another \if....

185 \let\repeat=\fi
   L^{A}TEX defines \smallskip, etc. in ltspace.dtx.

\nointerlineskip
\offinterlineskip
186 \def\nointerlineskip{\prevdepth-\@m\p@}
187 \def\offinterlineskip{\baselineskip-\@m\p@
188 \lineskip\z@ \lineskiplimit\maxdimen}
\vglue \hglue
189 \def\vglue{\afterassignment\vgl@\skip@=}
190 \def\vgl@{\par \dimen@\prevdepth \hrule \@height\z@
191 \nobreak\vskip\skip@ \prevdepth\dimen@}
192 \def\hglue{\afterassignment\hgl@\skip@=}
193 \def\hgl@{\leavevmode \count@\spacefactor \vrule \@width\z@
194 \nobreak\hskip\skip@ \spacefactor\count@}

L^{A}TEX defines ~ in ltdefns.dtx.

\slash
195 \def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
\break \nobreak \allowbreak
196 \def\break{\penalty-\@M}
197 \def\nobreak{\penalty \@M}
198 \def\allowbreak{\penalty \z@}
\filbreak \goodbreak
199 \def\filbreak{\par\vfil\penalty-200\vfilneg}
200 \def\goodbreak{\par\penalty-500 }

\eject Define \eject as in plain TEX but define \supereject only in the compatibility file.

201 \def\eject{\par\break}
\removelastskip
202 \def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
\smallbreak \medbreak \bigbreak
203 \def\smallbreak{\par\ifdim\lastskip<\smallskipamount
204 \removelastskip\penalty-50\smallskip\fi}
205 \def\medbreak{\par\ifdim\lastskip<\medskipamount
206 \removelastskip\penalty-100\medskip\fi}
207 \def\bigbreak{\par\ifdim\lastskip<\bigskipamount
208 \removelastskip\penalty-200\bigskip\fi}
\m@th
209 \def\m@th{\mathsurround\z@}

\underbar Due to L^{A}TEX’s redefinition of \underline plain TEX’s \underbar can be done in a simpler fashion (but do we need it at all?).

210 \def\underbar#1{\underline{\sbox\tw@{#1}\dp\tw@\z@\box\tw@}}

\strutbox \strut L^{A}TEX sets \strutbox in \set@fontsize.
211 \newbox\strutbox
212 \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}

\hidewidth For alignment entries that can stick out.

213 \def\hidewidth{\hskip\hideskip}
\narrower
214 \def\narrower{%
215 \advance\leftskip\parindent
216 \advance\rightskip\parindent}

L^{A}TEX defines \ae and similar commands elsewhere.

217 \chardef\%=`\%
218 \chardef\&=`\&
219 \chardef\#=`\#

Most text commands are actually encoding specific and therefore defined later, so commented out or removed from this file.

\leavevmode begins a paragraph, if necessary

220 \def\leavevmode{\unhbox\voidb@x}
\mathhexbox
221 \def\mathhexbox#1#2#3{\mbox{$\m@th \mathchar"#1#2#3$}}
\ialign
222 \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
\oalign \o@lign \ooalign
223 \def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
224 \ialign{##\crcr#1\crcr}}}
225 \def\o@lign{\lineskiplimit\z@ \oalign}
226 \def\ooalign{\lineskiplimit-\maxdimen \oalign}
\sh@ft
227 \def\sh@ft#1{\dimen@.00#1ex\multiply\dimen@\fontdimen1\font
228 \kern-.0156\dimen@} % compensate for slant in lowered accents

L^{A}TEX change: \d, \b, \c, \copyright, \TeX defined elsewhere.

L^{A}TEX change: Make \t work in a moving argument. Now defined elsewhere.

\hrulefill \dotfill L^{A}TEX change: \kern\z@ added to end of \hrulefill and \dotfill to make them

work in ‘tabular’ and ‘array’ environments. (Change made 24 July 1987). L^{A}TEX change: \leavevmode added at begining of \dotfill and \hrulefill so that they work as expected in vertical mode.

229 \def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@}

The box in \dotfill originally contained (in plain.tex): \mkern 1.5mu .\mkern 1.5mu; the width of .44em differs from this by .04pt which is probably an acceptable difference within leaders.

230 \def\dotfill{%
231 \leavevmode
232 \cleaders \hb@xt@ .44em{\hss.\hss}\hfill
233 \kern\z@}

INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999 for uppercase letters. The following changes are needed:

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

The \nonfrenchspacing macro will make further changes to \sfcode values. Definitions related to output \magnification doesn’t work in L^{A}TEX.

 \def\magnification{\afterassignment\m@g\count@}
 \def\m@g{\mag\count@
   \hsize6.5truein\vsize8.9truein\dimen\footins8truein}

\showoverfull The following commands are used in debugging:

235 \def\showoverfull{\tracingonline\@ne}
\showoutput

236 ⟨/2ekernel | autoload⟩ 237 ⟨∗2ekernel | autoerr⟩

238 \gdef\showoutput{\tracingoutput\@ne
239  \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode
240  \showoverfull}

241 ⟨/2ekernel | autoerr⟩

242 ⟨autoload⟩\def\showoutput{\@autoerr\showoutput}
\tracingall

243 ⟨∗2ekernel | autoerr⟩

244 \gdef\tracingall{\tracingcommands\tw@\tracingstats\tw@
245 \tracingpages\@ne\tracinglostchars\@ne
246 \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
247 \errorcontextlines\maxdimen\showoutput}

248 ⟨/2ekernel | autoerr⟩

249 ⟨autoload⟩\def\tracingall{\@autoerr\tracingall}

L^{A}TEX change: \showhyphens Defined later.

Punctuation affects the spacing.

250 ⟨∗2ekernel | autoload⟩

251 \nonfrenchspacing

252 ⟨/2ekernel | autoload⟩

File c

ltvers.dtx

10 Version Identifictation

First we identify the date and version number of this release of L^{A}TEX, and set \everyjob so that it is printed at the start of every L^{A}TEX run.

\fmtname \fmtversion

1 ⟨∗2ekernel⟩

 2 \def\fmtname{LaTeX2e}
 3 \edef\fmtversion{1997/12/01}

Check that the format being made is not too old. The error message complains about ‘more than a year’ but in fact the error is not triggered until 18 months.

 4 \def\reserved@a#1/#2/#3\@nil{%
 5 \count@\year
 6 \advance\count@-#1\relax
 7 \multiply\count@ by 12\relax
 8 \advance\count@\month
 9 \advance\count@-#2\relax}
10 \expandafter\reserved@a\fmtversion\@nil

\count@ is now the age of this file in months. Take a generous definition of ‘year’ so this message is not generated too often.

11 \ifnum\count@>17
12 \typeout{^^J%
13 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
14 !  You are attempting to make a LaTeX format from a source file^^J%
15 !  That is more than one year old.^^J%
16 !^^J%
17 !  If you enter <return> to scroll past this message then the format^^J%
18 !  will be built, but please consider obtaining newer source files^^J%
19 !  before continuing to build LaTeX.^^J%
20 !^^J%
21 !  LaTeX is re-issued every 6 months, in June and December.^^J%
22 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%

23 }

24 \errhelp{To avoid this error message, obtain new LaTeX sources.}
25 \errmessage{LaTeX source files more than 1 year old!}
26 \fi
27 \let\reserved@a\relax

This startup banner may be further modified by the code in ltfinal.dtx if a patch file is present.

28 \everyjob{\typeout{\fmtname
29 ⟨autoload⟩\space(autoload version)%
30  \space<\fmtversion>}}

File c: ltvers.dtx Date: 1996/11/28 Version v1.0g 26

31 \immediate\write16{\fmtname
32 ⟨autoload⟩\space(autoload version)%
33  \space<\fmtversion>}

34 ⟨/2ekernel⟩

File c: ltvers.dtx Date: 1996/11/28 Version v1.0g 27

File d

ltdefns.dtx

11 Definitions

This section contains commands used in defining other macros.

1 ⟨∗2ekernel⟩

11.1 Initex initialisations

\two@digits Prefix a number less than 10 with ‘0’.

 2 \def\two@digits#1{\ifnum#1<10 0\fi\number#1}

\typeout Display something on the terminal.

 3 \def\typeout#1{\begingroup\set@display@protect
 4  \immediate\write\@unused{#1}\endgroup}

\newlinechar A char to be used as new-line in output to files.

 5 \newlinechar`\^^J

11.2 Saved versions of TEX primitives

The TeX primitive \foo is saved as \@@foo. The following primitives are handled in this way:

\@@par
 6 \let\@@par=\par
 7 %\let\@@input=\input    %%% moved earlier
 8 %\let\@@end=\end        %%%

{\@@hyph \atop \-} The following comment was added when these commands were first set up, 19 April 1986: the \- command is redefined to allow it to work in the \ttfamily type style, where automatic hyphenation is suppressed by setting \hyphenchar to −1. The original primitive TEX definition is saved as \@@hyph just in case anyone needs it.

There is a need for a robust command for a discretionary hyphen since its exact representation depends on the glyphs available in the current font. For example, with suitable fonts and the T1 font encoding it is possible to use hanging hyphens.

A suitable robust definition that allows for many possible types of font and encoding may be as follows:

  \DeclareRobustCommand {\-}{%
    \discretionary {%
      \char \ifnum\hyphenchar\font<\z@
              \defaulthyphenchar

            \else
              \hyphenchar\font
            \fi
                    }{}{}%
  }

The redefinition (via \let) of \- within tabbing also makes the use of a robust command advisable since then any redefinition of \- via \DeclareRobustCommand will not cause a conflict.

Therefore, macro writers should be hereby warned that these internals will probably change! It is likely that a future release of L^{A}TEX will make \- effectively an encoding specific text command.

 9 \let\@@hyph=\-        % Save original primitive definition
10 \def\-{\discretionary{-}{}{}}
\@dischyph
11 \let\@dischyph=\-

\@@italiccorr Save the original italic correction.

12 \let\@@italiccorr=\/

\@height \@depth \@width \@minus \@plus The following definitions save token space. E.g., using \@height instead of height saves 5 tokens at the cost in time of one macro expansion.

13 \def\@height{height} \def\@depth{depth} \def\@width{width}
14 \def\@minus{minus}
15 \def\@plus{plus}

\hb@xt@ The next one is another 100 tokens worth.

16 \def\hb@xt@{\hbox to}
17 \message{hacks,}

11.3 Command definitions

This section defines the following commands:

\@namedef      {⟨NAME⟩}

Expands to \def\{⟨NAME⟩}, except name can contain any characters.

\@nameuse      {⟨NAME⟩}

Expands to \{⟨NAME⟩}.

\@ifnextchar  X{⟨YES⟩}{⟨NO⟩}

Expands to ⟨YES⟩ if next character is an ‘X’, and to ⟨NO⟩ otherwise. (Uses \reserved@a–\reserved@c.) NOTE: GOBBLES ANY SPACE FOLLOWING IT.

\@ifstar      {⟨YES⟩}{⟨NO⟩}

Gobbles following spaces and then tests if next the character is a ’*’. If it is, then it gobbles the ‘*’ and expands to ⟨YES⟩, otherwise it expands to ⟨NO⟩.

\@dblarg      {⟨CMD⟩}{⟨ARG⟩}

Expands to \{⟨CMD⟩}[⟨ARG⟩]{⟨ARG⟩}. Use \@dblarg\CS when \CS takes arguments [ARG1]{ARG2}, where default is ARG1 = ARG2.

\@ifundefined      {⟨NAME⟩}{⟨YES⟩}{⟨NO⟩}

: If \NAME is undefined then it executes ⟨YES⟩, otherwise it executes ⟨NO⟩. More precisely, true if \NAME either undefined or = \relax.

\@ifdefinable \NAME{⟨YES⟩} Executes ⟨YES⟩ if the user is allowed to define \NAME, otherwise it gives an error. The user can define \NAME if \@ifundefined{NAME} is true, ’NAME’ ≠ ’relax’ and the first three letters of ’NAME’ are not ’end’, and if \endNAME is not defined.

\newcommand      *{⟨\FOO ⟩}[⟨i⟩]{⟨TEXT ⟩}

User command to define \FOO to be a macro with i arguments (i = 0 if missing) having the definition ⟨TEXT ⟩. Produces an error if \FOO already defined.

Normally the command is defined to be \long (ie it may take multiple paragraphs in its argument). In the star-form, the command is not defined as \long and a blank line in any argument to the command would generate an error.

\renewcommand      *{⟨\FOO ⟩}[⟨i⟩]{⟨TEXT ⟩}

Same as \newcommand, except it checks if \FOO already defined.

\newenvironment      *{⟨FOO⟩}[⟨i⟩]{⟨DEF1 ⟩}{⟨DEF2 ⟩}

equivalent to:

\newcommand{\FOO}[i]{DEF1} \def{\endFOO}{DEF2}

(or the appropriate star forms).

\renewenvironment

Obvious companion to \newenvironment. \@cons : See description of \output routine.

\@car      \@car T1 T2 ... Tn\@nil == T1 (unexpanded)
\@cdr      \@cdr T1 T2 ... Tn\@nil == T2 ... Tn (unexpanded)
\typeout      {⟨message⟩}

Produces a warning message on the terminal.

\typein      {⟨message⟩}

Types message, asks the user to type in a command, then executes it

\typein      [⟨\CS ⟩]{⟨MSG⟩}

Same as above, except defines \CS to be the input instead of executing it.

\typein
18 \def\typein{%
19 \let\@typein\relax
20 \@testopt\@xtypein\@typein}
21 \def\@xtypein[#1]#2{%
22 \typeout{#2}%
23 \advance\endlinechar\@M
24 \read\@inputcheck to#1%
25 \advance\endlinechar-\@M
26 \@typein}
\@namedef

27 \def\@namedef#1{\expandafter\def\csname #1\endcsname}
\@nameuse
28 \def\@nameuse#1{\csname #1\endcsname}
\@cons
29 \def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}

{\@car \atop \@cdr}

30 \def\@car#1#2\@nil{#1}
31 \def\@cdr#1#2\@nil{#2}
\@carcube  \@carcube T1 ... Tn\@nil = T1 T2 T3 , n > 3
32 \def\@carcube#1#2#3#4\@nil{#1#2#3}

\@onlypreamble \@preamblecmds This macro adds its argument to the list of commands stored in \@preamblecmds to be disabled after \begin{document}. These commands are redefined to generate \@notprerr at this point.

33 \def\@preamblecmds{}
34 \def\@onlypreamble#1{%
35 \expandafter\gdef\expandafter\@preamblecmds\expandafter{%
36  \@preamblecmds\do#1}}
37 \@onlypreamble\@onlypreamble
38 \@onlypreamble\@preamblecmds

\@star@or@long Look ahead for a *. If present reset \l@ngrel@x so that the next definition, #1, will be non-long.

39 \def\@star@or@long#1{%
40 \@ifstar
41 {\let\l@ngrel@x\relax#1}%
42 {\let\l@ngrel@x\long#1}}

\l@ngrel@x This is either \relax or \long depending on whether the *-form of a definition command is being executed.

43 \let\l@ngrel@x\relax
\newcommand User level \newcommand.
44 \def\newcommand{\@star@or@long\new@command}
\new@command
45 \def\new@command#1{%
46 \@testopt{\@newcommand#1}0}
\@newcommand \@argdef \@xargdef Handling arguments for \newcommand.
47 \def\@newcommand#1[#2]{%
48 \@ifnextchar [{\@xargdef#1[#2]}%
49  {\@argdef#1[#2]}}

Define #1 if it is definable.

50 \long\def\@argdef#1[#2]#3{%
51 \@ifdefinable #1{\@yargdef#1\@ne{#2}{#3}}}

Handle the second optional argument.

52 \long\def\@xargdef#1[#2][#3]#4{%
53 \@ifdefinable#1{%

Define the actual command to be:

\def\foo{\@protected@testopt\foo\\foo{default}}

where \\foo is a csname generated from applying \csname and \string to \foo, ie the actual name contains a backslash and therefore can’t clash easily with exisiting command names. “Default” is the contents of the second optional argument of

\(re)newcommand.

The \aut@global command below is only used in the autoload format. If it is \global then a global definition will be made.

54 ⟨autoload⟩\aut@global

55  \expandafter\def\expandafter#1\expandafter{%
56  \expandafter
57  \@protected@testopt
58  \expandafter
59  #1%
60  \csname\string#1\expandafter\endcsname
61  {#3}}%

Now we define the internal macro (ie \\foo which is supposed to pick up all arguments (optional and mandatory).

62  \expandafter\@yargdef
63  \csname\string#1\endcsname
64  \tw@
65  {#2}%
66  {#4}}}

\@testopt This macro encapsulates the most common call to \@ifnextchar, saving several tokens each time it is used in the definition of a command with an optional argument. #1 The code to execute in the case that there is a [ need not be a single token but can be any sequence of commands that ‘expects’ to be followed by [. If this command were only used in \newcommand definitions then #1 would be a single token and the braces could be omitted from {#1} in the definition below, saving a bit of memory.

67 \def\@testopt#1#2{%
68 \@ifnextchar[{#1}{#1[#2]}}

\@protected@testopt Robust version of \@testopt. The extra argument (#1) must be a single token. If protection is needed the call expands to \protect applied to this token, and the 2nd and 3rd arguments are discarded. Otherwise \@testopt is called on 2nd and 3rd arguments.

This method of making commands robust avoids the need for using up two csnames per command, the price is the extra expansion time for the \ifx test.

69 \def\@protected@testopt#1{%%
70 \ifx\protect\@typeset@protect
71  \expandafter\@testopt
72 \else
73  \@x@protect#1%
74 \fi}

\@yargdef Generate a primitive argument specification, from a L^{A}TEX [⟨num⟩] form.

   Reorganised slightly so that \renewcommand[1]{\reserved@a}{foo} works.

I am not sure this is worth it, as a following \newcommand would over-write the definition of \reserved@a. L^{A}TEX2.09 goes into an infinite loop with

\renewcommand[1]{\@tempa}{foo}.

(DPC 6 October 93)

75 \long\def\@yargdef#1#2#3{%
76 \@tempcnta#3\relax
77 \advance \@tempcnta \@ne
78 \let\@hash@\relax
79 \edef\reserved@a{\ifx#2\tw@ [\@hash@1]\fi}%
80 \@tempcntb #2%
81 \@whilenum\@tempcntb <\@tempcnta
82  \do{%
83  \edef\reserved@a{\reserved@a\@hash@\the\@tempcntb}%
84  \advance\@tempcntb \@ne}%
85 \let\@hash@##%

86 ⟨autoload⟩\aut@global

87 \l@ngrel@x\expandafter\def\expandafter#1\reserved@a}
\@reargdef
88 \long\def\@reargdef#1[#2]{%
89 \@yargdef#1\@ne{#2}}

\renewcommand Check the command name is already used. If not give an error message. Then temporarily disable \@ifdefinable then call \newcommand. (Previous version \let#1=\relax but this does not work too well if #1 is \@tempa–e.)

90 \def\renewcommand{\@star@or@long\renew@command}
\renew@command
91 \def\renew@command#1{%
92 \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
93 \expandafter\@ifundefined\@gtempa
94  {\@latex@error{\noexpand#1undefined}\@ehc}%
95  \relax
96 \let\@ifdefinable\@rc@ifdefinable
97 \new@command#1}

\@ifdefinable \@@ifdefinable \@rc@ifdefinable Test is user is allowed to define a command.
98 \long\def\@ifdefinable #1#2{%

 99  \edef\reserved@a{\expandafter\@gobble\string #1}%
100  \@ifundefined\reserved@a
101  {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}%
102  \ifx \reserved@b\@qend \@notdefinable\else
103  \ifx \reserved@a\@qrelax \@notdefinable\else
104  #2%
105  \fi
106  \fi}%
107  \@notdefinable}

Saved definition of \@ifdefinable.

108 \let\@@ifdefinable\@ifdefinable

Version of \@ifdefinable for use with \renewcommand. Does not do the check this time, but restores the normal definition.

109 \long\def\@rc@ifdefinable#1#2{%
110 \let\@ifdefinable\@@ifdefinable
111 #2}

\newenvironment Define a new user environment. #1 is the environment name. #2# Grabs all the tokens up to the first {. These will be any optional arguments. They are not parsed at this point, but are just passed to \@newenv which will eventually call \newcommand. Any optional arguments will then be parsed by \newcommand as it defines the command that executes the ‘begin code’ of the environment.

This #2# trick removed with version 1.2i as it fails if a { occurs in the optional argument. Now use \@ifnextchar directly.

112 \def\newenvironment{\@star@or@long\new@environment}
\new@environment
113 \def\new@environment#1{%
114 \@testopt{\@newenva#1}0}
115 \def\@newenva#1[#2]{%
116 \@ifnextchar [{\@newenvb#1[#2]}{\@newenv{#1}{[#2]}}}
117 \def\@newenvb#1[#2][#3]{\@newenv{#1}{[#2][#3]}}
\renewenvironment Redefine an environment. For \renewenvironment disable \@ifdefinable and

then call \newenvironment. It is OK to \let the argument to \relax here as there should not be a @temp… environment.

118 \def\renewenvironment{\@star@or@long\renew@environment}
\renew@environment
119 \def\renew@environment#1{%
120 \@ifundefined{#1}%
121  {\@latex@error{Environment #1 undefined}\@ehc
122  }\relax
123 \expandafter\let\csname#1\endcsname\relax

124 ⟨autoload⟩\aut@global

125 \expandafter\let\csname end#1\endcsname\relax
126 \new@environment{#1}}

\@newenv The internal version of \newenvironment.

Call \newcommand to define the ⟨begin-code⟩ for the environment. \def is used for the ⟨end-code⟩ as it does not take arguments. (but may contain \pars)

Make sure that an attempt to define a ‘graf’ or ‘group’ environment fails.

127 \long\def\@newenv#1#2#3#4{%
128 \@ifundefined{#1}%
129  {\expandafter\let\csname#1\expandafter\endcsname
130  \csname end#1\endcsname}%
131  \relax
132 \expandafter\new@command
133  \csname #1\endcsname#2{#3}%

134 ⟨autoload⟩\aut@global

135  \l@ngrel@x\expandafter\def\csname end#1\endcsname{#4}}

\newif And here’s a different sort of allocation: For example, \newif\iffoo creates

 \footrue, \foofalse to go with \iffoo.
136 \def\newif#1{%
137 \count@\escapechar \escapechar\m@ne

138 ⟨autoload⟩\aut@global

139  \let#1\iffalse
140  \@if#1\iftrue
141  \@if#1\iffalse
142 \escapechar\count@}
\@if
143 \def\@if#1#2{%

144 ⟨autoload⟩\aut@global

145 \expandafter\def\csname\expandafter\@gobbletwo\string#1%
146  \expandafter\@gobbletwo\string#2\endcsname
147  {\let#1#2}}
\providecommand  \providecommand takes the same arguments as \newcommand, but discards them

if #1 is already defined, Otherwise it just acts like \newcommand. This implementation currently leaves any discarded definition in \reserved@a (and possibly \\reserved@a) this wastes a bit of space, but it will be reclaimed as soon as these scratch macros are redefined.

148 \def\providecommand{\@star@or@long\provide@command}
\provide@command
149 \def\provide@command#1{%
150 \begingroup
151  \escapechar\m@ne\xdef\@gtempa{{\string#1}}%
152 \endgroup
153 \expandafter\@ifundefined\@gtempa
154  {\def\reserved@a{\new@command#1}}%
155  {\def\reserved@a{\renew@command\reserved@a}}%
156 \reserved@a}%

\CheckCommand  \CheckCommand takes the same arguments as \newcommand. If the command

already exists, with the same definition, then nothing happens, otherwise a warning is issued. Useful for checking the current state befor a macro package starts redefining things. Currently two macros are considered to have the same definition if they are the same except for different default arguments. That is, if the old definition was: \newcommand\xxx[2][a]{(#1)(#2)} then

\CheckCommand\xxx[2][b]{(#1)(#2)} would not generate a warning, but, for
instance \CheckCommand\xxx[2]{(#1)(#2)} would.
157 \def\CheckCommand{\@star@or@long\check@command}

\CheckCommand is only available in the preamble part of the document.

158 \@onlypreamble\CheckCommand
\check@command
159 \def\check@command#1#2#{\@check@c#1{#2}}
160 \@onlypreamble\check@command

\@check@c \CheckCommand itself just grabs all the arguments we need, without actually looking for [ optional argument forms. Now define \reserved@a. If \\reserved@a is then defined, compare it with the “\#1’ otherwise compare \reserved@a with #1.

161 \long\def\@check@c#1#2#3{%
162 \expandafter\let\csname\string\reserved@a\endcsname\relax
163 \renew@command\reserved@a#2{#3}%
164 \@ifundefined{\string\reserved@a}%
165 {\@check@eq#1\reserved@a}%
166 {\expandafter\@check@eq
167  \csname\string#1\expandafter\endcsname
168  \csname\string\reserved@a\endcsname}}
169 \@onlypreamble\@check@c

\@check@eq Complain if #1 and #2 are not \ifx equal.

170 \def\@check@eq#1#2{%
171 \ifx#1#2\else
172  \@latex@warning@no@line
173  {Command \noexpand#1 has
174  changed.\MessageBreak
175  Check if current package is valid}%
176 \fi}
177 \@onlypreamble\@check@eq
\@gobble \@gobbletwo \@gobblefour The \@gobble macro is used to get rid of its argument.
178 \long\def \@gobble #1{}
179 \long\def \@gobbletwo #1#2{}
180 \long\def \@gobblefour #1#2#3#4{}
\@firstofone \@firstoftwo \@secondoftwo Some argument-grabbers.
181 \long\def\@firstofone#1{#1}
182 \long\def\@firstoftwo#1#2{#1}
183 \long\def\@secondoftwo#1#2{#2}

\@iden \@iden is another name for \@firstofone for compatibility reasons.

184 \let\@iden\@firstofone

\@expandtwoargs A macro to totally expand two arguments to another macro

185 \def\@expandtwoargs#1#2#3{%
186 \edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}

\@backslashchar A category code 12 backslash.

187 \edef\@backslashchar{\expandafter\@gobble\string\\}

11.4 Robust commands and protect

Fragile and robust commands are one of the thornier issues in L^{A}TEX’s commands. Whilst typesetting documents, L^{A}TEX makes use of many of TEX’s features, such as arithmetic, defining macros, and setting variables. However, there are (at least) three different ocassions when these commands are not safe. These are called ‘moving arguments’ by L^{A}TEX, and consist of:

• writing information to a file, such as indexes or tables of contents.

• writing information to the screen.

• inside an \edef, \message, \mark, or other command which evaluates its argument fully.

The method L^{A}TEX uses for making fragile commands robust is to precede them with \protect. This can have one of five possible values:

• \relax, for normal typesetting. So \protect\foo will execute \foo.

• \string, for writing to the screen. So \protect\foo will write \foo.

• \noexpand, for writing to a file. So \protect\foo will write \foo followed by a space.

• \@unexpandable@protect, for writing a moving argument to a file. So \protect\foo will write \protect\foo followed by a space. This value is also used inside \edefs, \marks and other commands which evaluate their arguments fully.

• \@unexpandable@noexpand, for performing a deferred write inside an \edef. So \protect\foo will write \foo followed by a space. If you want

     \protect\foo to be written, you should use \@unexpandable@protect.

(Removed as never used).

\@unexpandable@protect \@unexpandable@noexpand These commands are used for setting \protect inside \edefs.
188 \def\@unexpandable@protect{\noexpand\protect\noexpand}
189 %\def\@unexpandable@noexpand{\noexpand\noexpand\noexpand}

\DeclareRobustCommand \declare@robustcommand This is a package-writers command, which has the same syntax as \newcommand,

but which declares a protected command. It does this by having

\DeclareRobustCommand\foo
define \foo to be \protect\foo<space>,
and then use \newcommand\foo<space>.

Since the internal command is \foo<space>, when it is written to an auxiliary file, it will appear as \foo.

We have to be a bit cleverer if we’re defining a short command, such as \_, in order to make sure that the auxiliary file does not include a space after the command, since \_a and \_a aren’t the same. In this case we define \_to be:

    \x@protect\_\protect\_<space>

which expands to:

    \ifx\protect\@typeset@protect\else
       \@x@protect@\_
    \fi
    \protect\_<space>

Then if \protect is \@typeset@protect (normally \relax) then we just perform \_<space>, and otherwise \@x@protect@ gobbles everything up and expands to

\protect\_.

Note: setting \protect to any value other than \relax whilst in ‘typesetting’ mode will cause commands to go into an infinite loop! In particular, setting \relax to \@empty will cause \_to loop forever. It will also break lots of other things, such as protected \ifmmodes inside \haligns. If you really really have to do such a thing, then please set \@typeset@protect to be \@empty as well. (This is what the code for \patterns does, for example.)

   More fun with \expandafter and \csname.
190 \def\DeclareRobustCommand{\@star@or@long\declare@robustcommand}
191 \def\declare@robustcommand#1{%
192 \ifx#1\@undefined\else\ifx#1\relax\else
193  \@latex@info{Redefining \string#1}%
194 \fi\fi
195 \edef\reserved@a{\string#1}%
196 \def\reserved@b{#1}%
197 \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%

198 ⟨autoload⟩\aut@global

199 \edef#1{%
200  \ifx\reserved@a\reserved@b
201  \noexpand\x@protect
202  \noexpand#1%
203  \fi
204  \noexpand\protect
205  \expandafter\noexpand\csname
206  \expandafter\@gobble\string#1 \endcsname

207 }%

208 \let\@ifdefinable\@rc@ifdefinable
209 \expandafter\new@command\csname
210  \expandafter\@gobble\string#1 \endcsname

211 }

\@x@protect \x@protect
212 \def\x@protect#1{%
213 \ifx\protect\@typeset@protect\else
214  \@x@protect#1%
215 \fi

216 }

217 \def\@x@protect#1\fi#2#3{%
218 \fi\protect#1%

219 }

\@typeset@protect
220 \let\@typeset@protect\relax

\set@display@protect \set@typeset@protect These macros set \protect appropriately for typesetting or displaying.

221 \def\set@display@protect{\let\protect\string}
222 \def\set@typeset@protect{\let\protect\@typeset@protect}
\protected@edef \protected@xdef \unrestored@protected@xdef \restore@protect The commands \protected@edef and \protected@xdef perform ‘safe’ \edefs

and \xdefs, saving and restoring \protect appropriately. For cases where restoring \protect doesn’t matter, there’s an ‘unsafe’ \unrestored@protected@xdef, useful if you know what you’re doing!

223 \def\protected@edef{%
224 \let\@@protect\protect
225 \let\protect\@unexpandable@protect
226 \afterassignment\restore@protect
227 \edef

228 }

229 \def\protected@xdef{%
230 \let\@@protect\protect
231 \let\protect\@unexpandable@protect
232 \afterassignment\restore@protect
233 \xdef

234 }

235 \def\unrestored@protected@xdef{%
236 \let\protect\@unexpandable@protect
237 \xdef

238 }

239 \def\restore@protect{\let\protect\@@protect}

\protect The normal meaning of \protect

240 \set@typeset@protect

11.5 Internal defining commands

These commands are used internally to define other L^{A}TEX commands.

\@ifundefined Check if first arg is undefined or \relax and execute second or third arg depending,

241 \def\@ifundefined#1{%
242 \expandafter\ifx\csname#1\endcsname\relax
243  \expandafter\@firstoftwo
244 \else
245  \expandafter\@secondoftwo
246 \fi}

\@qend \@qrelax The following define \@qend and \@qrelax to be the strings ‘end’ and ‘relax’ with the characters \catcoded 12.

247 \edef\@qend{\expandafter\@cdr\string\end\@nil}
248 \edef\@qrelax{\expandafter\@cdr\string\relax\@nil}

\@ifnextchar \@ifnextchar peeks at the following character and compares it with its first argument. If both are the same it executes its second argument, otherwise its third.

249 \def\@ifnextchar#1#2#3{%
250 \let\reserved@d=#1%
251 \def\reserved@a{#2}\def\reserved@b{#3}%
252 \futurelet\@let@token\@ifnch}

\@ifnch \@ifnch is a tricky macro to skip any space tokens that may appear before the character in question. If it encounters a space token, it calls xifnch.

253 \def\@ifnch{%
254 \ifx\@let@token\@sptoken
255  \let\reserved@c\@xifnch
256 \else
257  \ifx\@let@token\reserved@d
258  \let\reserved@c\reserved@a
259  \else
260  \let\reserved@c\reserved@b
261  \fi
262 \fi
263 \reserved@c}

\@sptoken The following code makes \@sptoken a space token. It is important here that the control sequence \: consists of a non-letter only, so that the following whitespace is significant. Together with the fact that the equal sign in a \let may be followed by only one optional space the desired effect is achieved. NOTE: the following hacking must precede the definition of \: as math medium space.

264 \def\:{\let\@sptoken= } \:  % this makes \@sptoken a space token

\@xifnch In the following definition of \@xifnch, \: is again used to get a space token as delimiter into the definition.

265 \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}

\makeatletter \makeatother Make internal control sequences accessible or inaccessible.

266 \def\makeatletter{\catcode`\@11\relax}
267 \def\makeatother{\catcode`\@12\relax}

\@ifstar The new implementation below avoids passing the ⟨true code⟩ Through one more \def than the ⟨false code⟩, which previously meant that # had to be written as #### in one argument, but ## in the other. The * is gobbled by \@firstoftwo.

268 \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
\@dblarg \@xdblarg
269 \long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}
270 \long\def\@xdblarg#1#2{#1[{#2}]{#2}}

\@sanitize The command \@sanitize changes the catcode of all special characters except for braces to ‘other’. It can be used for commands like \index that want to write their arguments verbatim. Needless to say, this command should only be executed within a group, or chaos will ensue.

271 \def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
272 \@makeother\#\@makeother\^\@makeother\_\@makeother\%\@makeother\~}

\@onelevel@sanitize This makes the whole “meaning” of #1 (its one-level expansion) into catcode 12

tokens: it could be used in \DeclareRobustCommand.

If it is to be used on default float specifiers, this should be done when they are defined.

273 \def \@onelevel@sanitize #1{%
274 \edef #1{\expandafter\strip@prefix
275  \meaning #1}%

276 }

277 ⟨/2ekernel⟩

11.6 Commands for Autoloading

278 ⟨∗autoload⟩

\aut@global This command is only defined in the ‘autoload’ format. It is normally \relax but may be set to \global, in which case \newif and the commands based on \newcommand will all make global definitions.

279 \let\aut@global\relax

\@autoload This macro is only defined in the ‘autoload’ format. It inputs a package ‘auto#1.sty’ within a local group, and with normalised catcodes. \aut@global is set to \global so that \newif \newcommand and related commands make global definitions.

280 \def\@autoload#1{%
281 \begingroup
282 \makeatletter
283 \let\aut@global\global

284 \nfss@catcodes
285 \catcode`\ =10
286 \let\@latex@e@error\@gobble
287 \@@input auto#1.sty\relax
288 \endgroup}

289 ⟨/autoload⟩

File e

ltalloc.dtx

12 Counters

This section deals with counter and other variable allocation.

1 ⟨∗2ekernel⟩

The following are from plain TEX: \z@ A zero dimen or number. It’s more efficient to write \parindent\z@ than

     \parindent 0pt.

\@ne The number 1. \m@ne The number −1. \tw@ The number 2. \sixt@@n The number 16. \@m The number 1000. \@MM The number 20000.

\@xxxii The constant 32.

 2 \chardef\@xxxii=32
\@Mi \@Mii \@Miii \@miv Constants 1001–1004.
 3 \mathchardef\@Mi=10001
 4 \mathchardef\@Mii=10002
 5 \mathchardef\@Miii=10003
 6 \mathchardef\@Miv=10004

\@tempcnta \@tempcntb Scratch count registers used by L^{A}TEX kernel commands.

 7 \newcount\@tempcnta
 8 \newcount\@tempcntb

\if@tempswa General boolean switch used by L^{A}TEX kernel commands.

 9 \newif\if@tempswa

\@tempdima \@tempdimb \@tempdimc Scratch dimen registers used by L^{A}TEX kernel commands.

10 \newdimen\@tempdima
11 \newdimen\@tempdimb
12 \newdimen\@tempdimc

\@tempboxa Scratch box register used by L^{A}TEX kernel commands.

13 \newbox\@tempboxa

\@tempskipa \@tempskipb Scratch skip registers used by L^{A}TEX kernel commands.

             14 \newskip\@tempskipa
             15 \newskip\@tempskipb

\@temptokena Scratch token register used by L^{A}TEX kernel commands.

             16 \newtoks\@temptokena
\@flushglue Glue used for \right- & \leftskip = 0pt plus 1fil
             17 \newskip\@flushglue \@flushglue = 0pt plus 1fil

18 ⟨/2ekernel⟩

File f

ltcntrl.dtx

13 Program control structure

This section defines a number of control structure macros, such as while-loops and for-loops.

1 ⟨∗2ekernel⟩

2 \message{control,}
\@whilenum TEST \do {BODY}

\@whiledim TEST \do {BODY} : These implement the loop

while TEST do BODY od where TEST is a TeX \ifnum or \ifdim test, respectively. They are optimized for the normal case of TEST initially false.

\@whilesw SWITCH \fi {BODY} : Implements the loop

while SWITCH do BODY od

Optimized for normal case of SWITCH initially false.

\@for NAME := LIST \do {BODY} : Assumes that LIST expands to A1,A2,

... ,An . Executes BODY n times, with NAME = Ai on the i-th

iteration.

Optimized for the normal case of n = 1. Works for n=0.

\@tfor NAME := LIST \do {BODY} if, before expansion, LIST = T1 ... Tn where each Ti is a token or {...}, then executes BODY n times, with NAME = Ti on the i-th iteration. Works for n=0.

NOTES: 1. These macros use no \@temp sequences. 2. These macros do not work if the body contains anything that looks syntactically to TeX like an improperly balanced \if

   \else \fi.
\@whilenum TEST \do {BODY} ==

BEGIN

if TEST

then BODY

      \@iwhilenum{TEST \relax BODY}

END

\@iwhilenum {TEST BODY} ==

BEGIN

if TEST

then BODY

           \@nextwhile = def(\@iwhilenum)
     else \@nextwhile = def(\@whilenoop)

fi

   \@nextwhile {TEST BODY}

END

\@whilesw SWITCH \fi {BODY} ==

BEGIN

if SWITCH then BODY

          \@iwhilesw {SWITCH BODY}\fi

fi END

\@iwhilesw {SWITCH BODY} \fi ==

BEGIN

if SWITCH then BODY

          \@nextwhile = def(\@iwhilesw)
     else \@nextwhile = def(\@whileswnoop)

fi

   \@nextwhile {SWITCH BODY} \fi

END

\@whilenoop \@whilenum \@iwhilenum
3 \long\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax
4  #2\relax}\fi}
5 \long\def\@iwhilenum#1{\ifnum #1\expandafter\@iwhilenum
6  \else\expandafter\@gobble\fi{#1}}
\@whiledim \@iwhiledim
7 \long\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
8 \long\def\@iwhiledim#1{\ifdim #1\expandafter\@iwhiledim
9  \else\expandafter\@gobble\fi{#1}}
\@whileswnoop
\@whilesw
\@iwhilesw

10 \long\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi}
11 \long\def\@iwhilesw#1\fi{#1\expandafter\@iwhilesw
12  \else\@gobbletwo\fi{#1}\fi}

File f: ltcntrl.dtx Date: 1995/08/16 Version v1.0g 46 \@for NAME := LIST \do {BODY} ==

BEGIN \@forloop expand(LIST),\@nil,\@nil \@@ NAME {BODY} END

\@forloop CAR, CARCDR, CDRCDR \@@ NAME {BODY} ==

BEGIN NAME = CAR if def(NAME) = def(\@nnil)

else BODY; NAME = CARCDR if def(NAME) = def(\@nnil)

else BODY

              \@iforloop CDRCDR \@@ NAME \do {BODY}

fi fi

END

\@iforloop CAR, CDR \@@ NAME {BODY} = NAME = CAR if def(NAME) = def(\@nnil)

   then \@nextwhile = def(\@fornoop)

else BODY ;

         \@nextwhile = def(\@iforloop)

fi

\@nextwhile name cdr {body}

\@tfor NAME := LIST \do {BODY}

= \@tforloop LIST \@nil \@@ NAME {BODY}
\@tforloop car cdr \@@ name {body} =

name = car if def(name) = def(\@nnil)

   then \@nextwhile == \@fornoop

else body ;

         \@nextwhile == \@forloop

fi

\@nextwhile name cdr {body}
\@nnil
13 \def\@nnil{\@nil}
\@empty
14 \def\@empty{}

\@fornoop
15 \def\@fornoop#1\@@#2#3{}
\@for
16 \long\def\@for#1:=#2\do#3{%
17 \expandafter\def\expandafter\@fortmp\expandafter{#2}%
18 \ifx\@fortmp\@empty \else
19  \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
\@forloop
20 \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
21  #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}
\@iforloop
22 \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
23  \expandafter\@fornoop \else
24  #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}
\@tfor
25 \def\@tfor#1:={\@tf@r#1 }
26 \long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else
27  \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
28 \long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
29  \expandafter\@fornoop \else
30  #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}}

\@break@tfor Break out of a \@tfor loop. This should be called inside the scope of an \if. See

\@iffileonpath for an example.
31 \long\def\@break@tfor#1\@@#2#3{\fi\fi}

\@removeelement Removes an element from a comma-separated list and puts it into a control sequence, called as \@removeelement{⟨element⟩}{⟨list⟩}{⟨cs⟩}.

32 \def\@removeelement#1#2#3{%
33 \def\reserved@a##1,#1,##2\reserved@a{##1,##2\reserved@b}%
34 \def\reserved@b##1,\reserved@b##2\reserved@b{%
35  \ifx,##1\@empty\else##1\fi}%
36 \edef#3{%
37  \expandafter\reserved@b\reserved@a,#2,\reserved@b,#1,\reserved@a}}

38 ⟨/2ekernel⟩

File f: ltcntrl.dtx Date: 1995/08/16 Version v1.0g 48

File g

lterror.dtx

14 Error handling

This section defines L^{A}TEX’s error commands.

The ‘2ekernel’ code ensures that a \usepackage{autoerr} is essentially ignored if a ‘full’ format is being used that has the error messages already in the format.

 1 ⟨2ekernel⟩\expandafter\let\csname ver@autoerr.sty\endcsname\fmtversion

2 ⟨∗2ekernel | autoload⟩

14.1 General commands

\MessageBreak This command prints a new-line inside a message, followed by a continuation line begun with \@msg@continuation. Normally it is defined to be \relax, but inside messages, it is let to \@message@break.

 3 \let\MessageBreak\relax

\GenericInfo This takes two arguments: a continuation and a message, and sends the result to the log file.

 4 \DeclareRobustCommand{\GenericInfo}[2]{%
 5 \begingroup
 6  \def\MessageBreak{^^J#1}%
 7  \set@display@protect
 8  \immediate\write\m@ne{#2\on@line.}%
 9 \endgroup

10 }

\GenericWarning This takes two arguments: a continuation and a message, and sends the result to the screen.

11 \DeclareRobustCommand{\GenericWarning}[2]{%
12 \begingroup
13  \def\MessageBreak{^^J#1}%
14  \set@display@protect
15  \immediate\write\@unused{^^J#2\on@line.^^J}%
16 \endgroup

17 } 18 ⟨/2ekernel | autoload⟩

\GenericError This macro takes four arguments: a continuation, an error message, where to go for further information, and the help information. It displays the error message, and sets the error help (the result of typing h to the prompt), and does a horrible hack to turn the last context line (which by default is the only context line) into just three dots. This could be made more efficient.

19 ⟨autoload⟩\def\GenericError{\@autoerr\GenericError}

20 ⟨∗2ekernel | def⟩

21 \bgroup
22 \lccode`\@=`\ %
23 \lccode`\~=`\ %
24 \lccode`\}=`\ %
25 \lccode`\{=`\ %
26 \lccode`\T=`\T%
27 \lccode`\H=`\H%
28 \catcode`\ =11\relax%
29 \lowercase{%
30 \egroup%

Unfortunately TEX versions older than 3.141 have a bug which means that ^^J does not force a linebreak in \message and \errmessage commands. So for these old TEX’s we use \typeout to produce the message, and then have an empty \errmessage command. This causes an extra line of the form

! .

To appear on the terminal, but if you do not like it, you can always upgrade your TEX! In order for your format to use this version, you must define the macro \@TeXversion to be the version number, e.g., 3.14 of the underlying TEX. See the

comments in ltdircheck.dtx.
31 \dimen@\ifx\@TeXversion\@undefined4\else\@TeXversion\fi\p@%
32 \ifdim\dimen@>3.14\p@%

First the ‘standard case’.

33 \DeclareRobustCommand{\GenericError}[4]{%
34 \begingroup%
35 \immediate\write\@unused{}%
36 \def\MessageBreak{^^J}%
37 \set@display@protect%
38 \edef%
39 %    %<-------------------do not delete this space!------------------->%
40 \@err@                                                                 %
41 {{#4}}%
42 \errhelp
43 %    %<-------------------do not delete this space!------------------->%
44 \@err@                                                                 %
45 \let
46 %    %<-------------------do not delete this space!------------------->%
47 \@err@                                                                 %
48 \@empty
49 \def\MessageBreak{^^J#1}%
50 \def~{\errmessage{%
51 #2.^^J^^J%
52 #3^^J%
53 Type  H <return>  for immediate help%
54 %    %<-------------------do not delete this space!------------------->%
55 \@err@                                                                 %

56 }}%
57 ~%
58 \endgroup}%
59 \else%

Secondly the version for old TEX’s.

60 \DeclareRobustCommand{\GenericError}[4]{%
61 \begingroup%
62 \immediate\write\@unused{}%
63 \def\MessageBreak{^^J}%
64 \set@display@protect%
65 \edef%
66 %    %<-------------------do not delete this space!------------------->%
67 \@err@                                                                 %
68 {{#4}}%
69 \errhelp
70 %    %<-------------------do not delete this space!------------------->%
71 \@err@                                                                 %
72 \let
73 %    %<-------------------do not delete this space!------------------->%
74 \@err@                                                                 %
75 \errmessage
76 \def\MessageBreak{^^J#1}%
77 \def~{\typeout{! %
78 #2.^^J^^J%
79 #3^^J%
80 Type  H <return>  for immediate help.}%
81 %    %<-------------------do not delete this space!------------------->%
82 \@err@                                                                 %
83 {}}%
84 ~%
85 \endgroup}%
86 \fi}%

87 ⟨/2ekernel | def⟩

\PackageError \PackageWarning \PackageWarningNoLine \PackageInfo \ClassError \ClassWarning \ClassWarningNoLine \ClassInfo These commands are intended for use by package and class writers, to give infor-

mation to authors. The syntax is:

\PackageError{⟨package⟩}{⟨error⟩}{⟨help⟩}

     \PackageWarning{⟨package⟩}{⟨warning⟩}
     \PackageWarningNoLine{⟨package⟩}{⟨warning⟩}
     \PackageInfo{⟨package⟩}{⟨info⟩}

and similarly for classes. The Error commands print the ⟨error⟩ message, and present the interactive prompt; if the author types h, then the ⟨help⟩ information is displayed. The Warning commands produce a warning but do not present the interactive prompt. The WarningNoLine commands do the same, but don’t print the input line number. The Info commands write the message to the log file. Within the messages, the command \MessageBreak can be used to break a line, \protect can be used to protect command names, and \space is a space, for example:

     \newcommand{\foo}{FOO}
     \PackageWarning{ethel}{%
        Your hovercraft is full of eels,\MessageBreak
        and \protect\foo\space is \foo}

produces:

     Package ethel warning: Your hovercraft is full of eels,
     (ethel)                and \foo is FOO on input line 54.

 88 ⟨autoload⟩\def\PackageError{\@autoerr\PackageError}

89 ⟨∗2ekernel | def⟩

 90 \gdef\PackageError#1#2#3{%
 91 \GenericError{%
 92  (#1)\@spaces\@spaces\@spaces\@spaces
 93 }{%
 94  Package #1 Error: #2%
 95 }{%
 96  See the #1 package documentation for explanation.%
 97 }{#3}%

98 } 99 ⟨/2ekernel | def⟩

100 ⟨∗2ekernel | autoload⟩

101 \def\PackageWarning#1#2{%
102 \GenericWarning{%
103  (#1)\@spaces\@spaces\@spaces\@spaces
104 }{%
105  Package #1 Warning: #2%

106 }% 107 }

108 \def\PackageWarningNoLine#1#2{%
109 \PackageWarning{#1}{#2\@gobble}%

110 }

111 \def\PackageInfo#1#2{%
112 \GenericInfo{%
113  (#1) \@spaces\@spaces\@spaces
114 }{%
115  Package #1 Info: #2%

116 }% 117 } 118 ⟨/2ekernel | autoload⟩

119 ⟨autoload⟩\def\ClassError{\@autoerr\ClassError}

120 ⟨∗2ekernel | def⟩

121 \gdef\ClassError#1#2#3{%
122 \GenericError{%

123  (#1) \space\@spaces\@spaces\@spaces
124 }{%
125  Class #1 Error: #2%
126 }{%
127  See the #1 class documentation for explanation.%
128 }{#3}%

129 } 130 ⟨/2ekernel | def⟩

131 ⟨∗2ekernel | autoload⟩

132 \def\ClassWarning#1#2{%
133 \GenericWarning{%
134  (#1) \space\@spaces\@spaces\@spaces
135 }{%
136  Class #1 Warning: #2%

137 }% 138 }

139 \def\ClassWarningNoLine#1#2{%
140 \ClassWarning{#1}{#2\@gobble}%

141 }

142 \def\ClassInfo#1#2{%
143 \GenericInfo{%
144  (#1) \space\space\@spaces\@spaces
145 }{%
146  Class #1 Info: #2%

147 }% 148 } 149 ⟨/2ekernel | autoload⟩

\@latex@error \@latex@warning \@latex@warning@no@line \@latex@info \@latex@info@no@line Errors and other info, for use in the L^{A}TEX core.
150 ⟨autoload⟩\def\@latex@error{\@autoerr\@latex@error}

151 ⟨∗2ekernel | def⟩

152 \gdef\@latex@error#1#2{%
153 \GenericError{%
154  \space\space\space\@spaces\@spaces\@spaces
155 }{%
156  LaTeX Error: #1%
157 }{%
158  See the LaTeX manual or LaTeX Companion for explanation.%
159 }{#2}%

160 } 161 ⟨/2ekernel | def⟩

162 ⟨∗2ekernel | autoload⟩

163 \def\@latex@warning#1{%
164 \GenericWarning{%
165  \space\space\space\@spaces\@spaces\@spaces
166 }{%
167  LaTeX Warning: #1%

168 }% 169 }

170 \def\@latex@warning@no@line#1{%
171 \@latex@warning{#1\@gobble}}
172 \def\@latex@info#1{%
173 \GenericInfo{%
174  \@spaces\@spaces\@spaces
175 }{%
176  LaTeX Info: #1%

177 }% 178 }

179 \def\@latex@info@no@line#1{%
180 \@latex@info{#1\@gobble}}

\@font@warning and \@font@info are defined later since they have to be redefined by the tracefnt package.

 \def\@font@warning#1{%
    \GenericWarning{%
       {(font)\@spaces\@spaces}%
       {Font Warning: #1}%
  }
 \def\@font@info#1{%
    \GenericInfo{%
       (font)\space\@spaces
    }{%
       Font Info: #1%
    }%
  }

\c@errorcontextlines \errorcontextlines as a L^{A}TEX counter, so that it may be be manipulated with \setcounter (once it is defined :-)

181 \let\c@errorcontextlines\errorcontextlines
182 \c@errorcontextlines=-1

\on@line The message ‘ on input line n’, if possible.

183 \ifnum\inputlineno=\m@ne
184 \let\on@line\@empty
185 \else
186 \def\on@line{ on input line \the\inputlineno}
187 \fi

\@warning \@@warning \@latexerr Older L^{A}TEX messages. For the moment, these \let to the new message commands. They may be changed later, once only obsolete packages and classes contain them.

188 \let\@warning\@latex@warning
189 \let\@@warning\@latex@warning@no@line

190 ⟨/2ekernel | autoload⟩

191 \global\let\@latexerr\@latex@error

\@spaces Four spaces.

192 ⟨∗2ekernel | autoload⟩

193 \def\@spaces{\space\space\space\space}

194 ⟨/2ekernel | autoload⟩

14.2 Specific errors

\@eha \@ehb \@ehc \@ehd The more common error help messages.

195 ⟨∗2ekernel | def⟩

196 \gdef\@eha{%
197 Your command was ignored.\MessageBreak
198 Type \space I <command> <return> \space to replace it %
199 with another command,\MessageBreak
200 or \space <return> \space to continue without it.}
201 \gdef\@ehb{%
202 You've lost some text. \space \@ehc}
203 \gdef\@ehc{%
204 Try typing \space <return> %
205 \space to proceed.\MessageBreak
206 If that doesn't work, type \space X <return> \space to quit.}
207 \gdef\@ehd{%
208 You're in trouble here.  \space\@ehc}

209 ⟨/2ekernel | def⟩

As \latex@error triggers the autoload, these definitions should not be needed in the autoload format, but just to be safe…

210 ⟨∗autoload⟩

211 \let\@eha\@empty\let\@ehb\@empty\let\@ehc\@empty\let\@ehd\@empty

212 ⟨/autoload⟩

Here are most of the error message-generating commands of L^{A}TEX.

\@autoerr Make this autoload command robust, as it may be read in at unpredicatble times.

213 ⟨autoload⟩\def\@autoerr{\protect\@autoload{err}\protect}

\@notdefinable Error message generated in \@ifdefinable from calls to one of the commands \newcommand, \newlength or \newtheorem specifying an already-defined command name.

214 \gdef\@notdefinable{%
215 ⟨!autoload⟩ \@latex@error{%
216 ⟨!autoload⟩ Command \@backslashchar\reserved@a\space already defined%

217 ⟨!autoload⟩}\@eha}

218 ⟨autoload⟩ \@autoerr\@notdefinable}

\@nolnerr Generated by \newline and \\ when called in vertical mode.

219 \gdef\@nolnerr{%
220 ⟨!autoload⟩ \@latex@error{There's no line here to end}\@eha}
221 ⟨autoload⟩ \@autoerr\@nolnerr}

\@nocounterr Generated by \setcounter, \addtocounter or \newcounter if applied to an un-

defined counter ⟨cnt⟩.

\@nocnterr Obsolete error message generated in L^{A}TEX2.09 by \setcounter, \addtocounter or \newcounter for undefined counter. DO NOT use for L^{A}TEX 2ε it MIGHT vanish! Use \@nocounterr{⟨cnt⟩} instead.

222 \gdef\@nocounterr#1{%
223 ⟨!autoload⟩ \@latex@error{No counter '#1' defined}\@eha}
224 ⟨autoload⟩ \@autoerr\@nocounterr}
225 \gdef\@nocnterr{\@nocounterr?}

\@ctrerr Called when trying to print the value of a counter numbered by letters that’s greater than 26.

226 \gdef\@ctrerr{%
227 ⟨!autoload⟩ \@latex@error{Counter too large}\@ehb}
228 ⟨autoload⟩ \@autoerr\@ctrerr}

\@nodocument Error produced if paragraphs are typeset in the preamble.

229 ⟨!def⟩\gdef\@nodocument{%
230 ⟨!def⟩ \@latex@error{Missing \protect\begin{document}}\@ehd}

\@badend Called by \end that doesn’t match its \begin. RmS 1992/08/24: added code to \@badend to display position of non-matching \begin. FMi 1993/01/14: missing space added.

231 \gdef\@badend#1{%
232 ⟨!autoload⟩ \@latex@error{\protect\begin{\@currenvir}\@currenvline
233 ⟨!autoload⟩  \space ended by \protect\end{#1}}\@eha}
234 ⟨autoload⟩ \@autoerr\@badend}

\@badmath Called by \[, \], \( or \) when used in wrong mode.

235 \gdef\@badmath{%
236 ⟨!autoload⟩ \@latex@error{Bad math environment delimiter}\@eha}
237 ⟨autoload⟩ \@autoerr\@badmath}

\@toodeep Called by a list environment nested more than six levels deep, or an enumerate or itemize nested more than four levels.

238 \gdef\@toodeep{%
239 ⟨!autoload⟩ \@latex@error{Too deeply nested}\@ehd}
240 ⟨autoload⟩ \@autoerr\@toodeep}
\@badpoptabs Called by \endtabbing when not enough \poptabs have occurred, or by \poptabs

when too many have occurred.

241 \gdef\@badpoptabs{%
242 ⟨!autoload⟩ \@latex@error{\protect\pushtabs\space and \protect\poptabs
243 ⟨!autoload⟩  \space don't match}\@ehd}
244 ⟨autoload⟩ \@autoerr\@badpoptabs}

\@badtab Called by \>, \+ , \- or \< when stepping to an undefined tab.

245 \gdef\@badtab{%
246 ⟨!autoload⟩ \@latex@error{Undefined tab position}\@ehd}
247 ⟨autoload⟩ \@autoerr\@badtab}

\@preamerr This error is special: it appears in places where we normally have to \protect expansions. However, to prevent a protection of the error message itself (which would result in the message getting printed not issued on the terminal) we need to locally reset \protect to \relax.

248 \gdef\@preamerr#1{%
249 \begingroup
250  \let\protect\relax

251 ⟨∗!autoload⟩

252  \@latex@error{\ifcase #1 Illegal character\or
253  Missing @-exp\or Missing p-arg\fi\space
254  in array arg}\@ehd

255 ⟨/!autoload⟩

256 ⟨autoload⟩ \@autoerr\@preamerr{#1}%
257 \endgroup}

\@badlinearg Occurs in \line and \vector command when a bad slope argument is encountered.

258 \gdef\@badlinearg{%
259 ⟨!autoload⟩ \@latex@error{%
260 ⟨!autoload⟩  Bad \protect\line\space or \protect\vector
261 ⟨!autoload⟩  \space argument}\@ehb}
262 ⟨autoload⟩ \@autoerr\@badlinearg}

\@parmoderr Occurs in a float environment or a \marginpar when encountered in inner vertical mode.

263 \gdef\@parmoderr{%
264 ⟨!autoload⟩ \@latex@error{Not in outer par mode}\@ehb}
265 ⟨autoload⟩ \@autoerr\@parmoderr}

\@fltovf Occurs in float environment or \marginpar when there are no more free boxes for storing floats.

266 \gdef\@fltovf{%
267 ⟨!autoload⟩ \@latex@error{Too many unprocessed floats}\@ehb}
268 ⟨autoload⟩ \@autoerr\@fltovf}

\@latexbug Occurs in output routine. This is bad news.

269 \gdef\@latexbug{%
270 ⟨!autoload⟩ \@latex@error{This may be a LaTeX bug}{Call for help}}
271 ⟨autoload⟩ \@autoerr\@latexbug}

\@badcrerr This error was removed and replaced by \@nolnerr.

272 %\def\@badcrerr {\@latex@error{Bad use of \protect\\}\@ehc}

\@noitemerr \addvspace or \addpenalty was called when not in vmode. Probably caused by a missing \item.

273 \gdef\@noitemerr{%
274 ⟨!autoload⟩ \@latex@error{Something's wrong--perhaps a missing %
275 ⟨!autoload⟩  \protect\item}\@ehc}
276 ⟨autoload⟩ \@autoerr\@noitemerr}

\@notprerr A command that can be used only in the preamble appears after the command

\begin{document}.
277 \gdef\@notprerr{%
278 ⟨!autoload⟩ \@latex@error{Can be used only in preamble}\@eha}
279 ⟨autoload⟩ \@autoerr\@notprerr}

\@inmatherr Issued by commands that don’t work correctly within math (like \item). There is no real error recovery happening, e.g., the user might get additional errors afterwards.

280 \gdef\@inmatherr#1{%
281 \relax
282 \ifmmode
283 ⟨!autoload⟩ \@latex@error{Command \protect#1 invalid in math mode}\@ehc
284 ⟨autoload⟩ \@autoerr\@inmatherr#1%
285 \fi}

\@invalidchar An error for use with invalid characters. This is commented out, since we decided to use chatcode 15 instead.

286 %\def\@invalidchar{\@latex@error{Invalid character in input}\@ehc}

As well as the above error commands some error messages are directly coded to save space. The Messages alrerady present in L^{A}TEX2.09 included:

   Environment --- undefined

Issued by \begin for undefined environment.

   tab overflow

Occurs in \= when maximum number of tabs exceeded.

   \< in mid line

Occurs in \< when it appears in middle of line.

   Float(s) lost

In output routine, caused by a float environment or \marginpar occurring in inner vertical mode.

File h

ltpar.dtx

15 Paragraphs

This section of the kernel declares the commands used to set \par and \everypar when ever their function needs to be changed for a long time.

15.1 Implementation

There are two situations in which \par may be changed:

• Long-term changes, in which the new value is to remain in effect until the current environment is left. The environments that change \par in this way are the following:

– All list environments (itemize, quote, etc.)

– Environments that turn \par into a noop: tabbing, array and tabular.

• Temporary changes, in which \par is restored to its previous value the next time it is executed. The following are all such uses.

– \end when preceded by \@endparenv, which is called by \endtrivlist

– The mechanism for avoiding page breaks and getting the spacing right after section heads.

\@setpar To permit the proper interaction of these two situations, long-term changes are made by the \@setpar{⟨VAL⟩} command. It’s function is:

To set \par. It \def’s \par and \@par to ⟨VAL⟩.

\@restorepar Short-term changes are made by the usual \def\par commands. The original

values are restored after a short-term change by the \@restorepar commands. \@@par \@@par always is defined to be the original TEX \par.

\everypar \everypar is changed only for the short term. Whenever \everypar is set

non-null, it should restore itself to null when executed.

The following commands change \everypar in this way:

   • \item

• \end when preceded by \@endparenv, which is called by endtrivlist

   • \minipage

When dealing with \par and \everypar remember the following two warnings:

1. Commands that make short-term changes to \par and \everypar must take account of the possibility that the new commands and the ones that do the restoration may be executed inside a group. In particular, \everypar is executed inside a group whenever a new paragraph begins with a left brace. The \everypar command that restores its definition should be local to the current group (in case the command is inside a minipage used inside someplace where \everypar has been redefined). Thus, if \everypar is redefined to do an \everypar{} it could take several executions of \everypar before the restoration “holds”. This usually causes no problem. However, to prevent the extra executions from doing harm, use a global switch to keep anything harmful in the new \everypar from being done twice.

2. Commands that change \everypar should remember that \everypar might be supposed to set the following switches false:

  • @nobreak
  • @minipage

they should do the setting if necessary.

1 ⟨∗2ekernel⟩

2 \message{par,}

\@setpar \@par Initiate a long-term change to \par.

3 \def\@setpar#1{\def\par{#1}\def\@par{#1}}

The default definition of \@par will ensure that if \@restorepar defines \par to execute \@par it will redefine itself to the primitive \@@par after one iteration.

4 \def\@par{\let\par\@@par\par}

5 ⟨/2ekernel⟩

\@restorepar Restore from a short-term change to \par.

6 \def\@restorepar{\def\par{\@par}}

File i

ltspace.dtx

16 Spacing

This section deals with spacing, and line- and page-breaking.

16.1 User Commands

\nopagebreak [⟨i⟩] : ⟨i⟩ = 0,...,4.

Default argument = 4. Puts a penalty into the vertical list output as follows: 0 : penalty = 0

1 : penalty = \@lowpenalty
2 : penalty = \@medpenalty
3 : penalty = \@highpenalty

4 : penalty = 10000

\pagebreak [⟨i⟩] : same as except negatives of its penalty \linebreak [⟨i⟩] : analog of the above

\nolinebreak [⟨i⟩] : analog of the above

\samepage : inhibits page breaking most places by setting the following penalties to 10000:

\interlinepenalty
\postdisplaypenalty
\interdisplaylinepenalty
\@beginparpenalty
\@endparpenalty
\@itempenalty
\@secpenalty
\interfootnotelinepenalty

\\ : initially defined to be \newline

\\[⟨length⟩] : initially defined to be \vspace{⟨length⟩}\newline

Note: \\* adds a \vadjust{\penalty 10000}

OBSOLETE COMMANDS (which never made it into the manual):

   \obeycr : defines ¡CR¿ == \\\relax

\restorecr : restores ¡CR¿ to its usual meaning.

16.2 Chris’ comments

There are several aspects of the handling of space in horizontal mode that are inconsistent or do not work well in some cases. These are largely concerned with ignoring the effect of space tokens that would otherwise typeset an inter-word space.

Negating the effect of such space tokens is achieved by two mechanisms:

• \unskip is used to remove the glue just added by a space that has already had its effect; it is sometimes invoked after an \ifdim test on \lastskip (see below);

• \ignorespaces is used to ignore space-tokens yet to come.

The test done on \lastskip is sometimes for equality with zero and sometimes for being positive. Recall also that the test is only on the natural length of the glue and that no glue cannot be distinguished from glue whose natural length is zero: to summarise, a pretty awful test. It is not clear why these tests are not all the same; I think that they should all be for equality. One place where \unskip is often used is just before a \par (which itself internally does an \unskip) and one bit of code (in \@item) even has two \unskips before a \par. These uses may be fossil code but if they are necessary, maybe \@killglue would be even safer.

Such removal of glue by \unskip may sometimes have the wrong result, removing not the glue from a space-token but other explicit glue; this is sometimes not what is intended.

A common way to prevent such removal is to add an \hskip\z@ after the glue that should not be removed. This protects that glue against one \unskip with no test but not against more than one. It does work for ‘tested \unskips’. This is used by \hspace* but not by \hspace; this is inconsistent as the star is supposed to prevent removal only at the beginning of a line, not at the end, or in a tabular, etc.

If this reason for removing glue were the only consideration then a tested- \unskip and protection by \hskip\z@ would suffice but would need to be consistently implemented.

However, the class of invisibles, commands and environments tries to be even cleverer: one of these tries to leave only one inter-word space whenever there is one before it and one after it; and it does this quite well.

But problems can arise when there is not a space-token on both sides of it; in particular, when an invisible appears at the beginning or end of a piece of text the method still leaves one space token whereas usually in these cases it should leave none.

Also, the current rules do not work well when more than one such command appears consecutively, separated by space-tokens; it leaves glue between every other invisible.

There is also a question about what these commands should do when they occur next to spaces that do not come from space tokens but, for example, from \hspace. Should they still produce ‘just one space’? If so, which one? It is good to note that the manual is sufficiently cautious about invisibles that we are not obliged to make anything work.

Another interesting side-road to explore is whether the space-tokens either side of an \hspace{...} should be ignored.

One alternative to the current algorithm that is often suggested is that all glue around the invisible should be consolidated into a space after it (usually without stating how much glue should be put there). The command \nolinebreak is implemented this way (and \linebreak should also be). This does not work correctly for the following common case:

   ... some text
   \index{some-word}
   some-word and more text.

This is optimal coding since it is normal to index a word that gets split across a page-break on its starting page. This would, on the other hand, fix another common (and documented) failure of the current system: when the invisible is the last thing in a paragraph the space before it is not removed and, worse, it is also hidden from the paragraph-ending mechanism so that an ‘empty’ line can be created at the end of the paragraph.

Another deficiency (I think) of the current system is that the following is treated as having the \index command between the paragraphs, which is probably not what the author intended (since there is no empty line after it).

   \index{beginnings}
   Beginnings of paragraphs ...

I know of no algorithm that will handle satisfactorily even all the most common cases; note that it could be that the best algorithm may be different for different invisibles since, for example, the common uses and expected behaviour of \index,

\marginpar, \linebreak, \pagebreak and \vspace are somewhat different. [For

example, is \vspace ever used in the middle of a paragraph?]

One method that can (and is) used to make invisible commands produce no space when used at the beginning of text is to put in some glue that is nearly enough the same as no glue or glue of zero length in all respects except for the precise test for not being exactly equal to zero; examples of such glue are \hskip 1sp and, possibly better but more complex, \hskip -1sp \hskip 1sp. However, this only works when it is known that user-supplied text is about to start.

Some similar concerns apply to the handling of space and penalties in vertical mode; there is an extra hurdle here as \unskip does not work on the main vertical list. The complexity of the tests done by \addvspace have never been explained.

The implementation of space hacks etc for vertical mode is another major area that needs further attention; my earlier experiments did not produce much improvement over the current unsatisfactory situation.

One particular problem is what happens when the following very natural coding is used (part of the problem here is that this looks like an hmode problem, but it is not):

   ... end of text.
   \begin{enumerate}
     \item \label{item:xxx} Item text.
   \end{enumerate}

16.3 Some immediate actions

• Fix bug in \linebreak.

• Fix bug in \\*.

• Reimplement \\, etc, removing extra \vadjusts and getting better error trapping (this seems to involve a lot more tokens).

• Investigate whether \\, etc need to be errors in vmode; I think that they could be noops (maybe with a warning).

• Make all(?) \unskips include test for zero skip (rather than other tests or no test).

• Consider replacing \hskip 1sp by something better (here called an ‘infinitesimal’ skip).

• Look at all \hskip\z@ (or similar) to see if they should be changed to an ‘infinitesimal’ skip.

• Resolve the inconsistency between \hspace and \hspace*.

• Remove unnecessary \unskips.

• Investigate and rationalise the ‘newline’ code.

• Find better algorithms for all sorts of things or, easier(?), fix TEX itself.

16.4 The code

1 ⟨∗2ekernel⟩

2 \message{spacing,}
\pagebreak
\nopagebreak
3 \def\pagebreak{\@testopt{\@no@pgbk-}4}
4 \def\nopagebreak{\@testopt\@no@pgbk4}
\@no@pgbk
5 \def\@no@pgbk #1[#2]{%
6 \ifvmode
7  \penalty #1\@getpen{#2}%
8 \else
9  \@bsphack
10  \vadjust{\penalty #1\@getpen{#2}}%
11  \@esphack
12 \fi}
\linebreak
\nolinebreak
13 \def\linebreak{\@testopt{\@no@lnbk-}4}
14 \def\nolinebreak{\@testopt\@no@lnbk4}

\@no@lnbk
15 \def\@no@lnbk #1[#2]{%
16 \ifvmode
17  \@nolnerr
18 \else
19  \@tempskipa\lastskip
20  \unskip
21  \penalty #1\@getpen{#2}%
22  \ifdim\@tempskipa>\z@
23  \hskip\@tempskipa
24  \ignorespaces
25  \fi
26 \fi}
\samepage
27 \def\samepage{\interlinepenalty\@M
28 \postdisplaypenalty\@M
29 \interdisplaylinepenalty\@M
30 \@beginparpenalty\@M
31 \@endparpenalty\@M
32 \@itempenalty\@M
33 \@secpenalty\@M
34 \interfootnotelinepenalty\@M}

\\ The purpose of the new code is to fix a few bugs; however, it also attempts to optimize the following, in order of priority:

1. efficient execution of plain \\;

2. efficient execution of \\[...];

3. memory use;

4. name-space use.

The changes should make no difference to the typeset output. It appears to be safe to use \reserved@e and \reserved@f here (other reserved macros are somewhat disastrous).

These changes made \newline even less robust than it had been, so now it is explicitly robust, like \\.

\@normalcr The internal definition of the ‘normal’ definition of \\.

35 \DeclareRobustCommand\\{%
36 \let \reserved@e \relax
37 \let \reserved@f \relax
38 \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak
39  \@xnewline}%
40  \@xnewline}
41 \expandafter\let\expandafter\@normalcr
42  \csname\expandafter\@gobble\string\\ \endcsname

\newline A simple form of the ‘normal’ definition of \\.

43 \DeclareRobustCommand\newline{\@normalcr\relax}
\@xnewline
44 \def\@xnewline{\@ifnextchar[% ] bracket matching
45  \@newline
46  {\@gnewline\relax}}
\@newline
47 \def\@newline[#1]{\let \reserved@e \vadjust
48  \@gnewline {\vskip #1}}

\@gnewline The \nobreak added to prevent null lines when \\ ends an overfull line. Change made 24 May 89 as suggested by Frank Mittelbach and Rainer Schöpf

49 \def\@gnewline #1{%
50 \ifvmode
51  \@nolnerr
52 \else
53  \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break
54 \fi}
\@getpen
55 \def\@getpen#1{\ifcase #1 \z@ \or \@lowpenalty\or
56  \@medpenalty \or \@highpenalty
57  \else \@M \fi}

\if@nobreak Switch used to avoid page breaks caused by \label after a section heading, etc. It should be GLOBALLY set true after the \nobreak and globally set false by the next invocation of \everypar.

Commands that reset \everypar should globally set it false if appropriate.

58 \def\@nobreakfalse{\global\let\if@nobreak\iffalse}
59 \def\@nobreaktrue {\global\let\if@nobreak\iftrue}
60 \@nobreakfalse

\@savsk \@savsf Registers used to save the space factor and last skip.

61 \newdimen\@savsk
62 \newcount\@savsf
\@bsphack  \@bsphack and \@esphack used by macros such as \index and \begin{@float}

… \end{@float} that want to be invisible — i.e., not leave any extra space when used in the middle of text. Such a macro should begin with \@bsphack and end with \@esphack The macro in question should not create any text, nor change the mode.

Before giving the current definition we give an extended definition that is currently not used (because it doesnt work as advertised:-)

These are generalised hacks which attempt to do sensible things when ‘invisible commands’ appear in vmode too.

They need to cope with space in both hmode (plus spacefactor) and vmode, and also cope with breaks etc. In vmode this means ensuring that any following \addvspace, etc sees the correct glue in \lastskip.

In fact, these improved versions should be used for other cases of ‘whatsits, thingies etc’ which should be invisible. They are only for commands, not environments (see notes on \@Esphack).

BTW, anyone know why the standard hacks are surrounded by \ifmmode\else rather than simply \ifhmode?

And are there any cases where saving the spacefactor is essential? I have some extensions where it is, but it does not appear to be so in the standard uses.

\def \@bsphack{%
  \relax \ifvmode
    \@savsk \lastskip
    \ifdim \lastskip=\z@
    \else
      \vskip -\lastskip
    \fi
  \else
    \ifhmode
      \@savsk \lastskip
      \@savsf \spacefactor
    \fi
  \fi
}

I think that, in vmode, it is the safest to put in a \nobreak immediately after such things since writes, inserts etc followed by glue give valid breakpoints and, in general, it is possible to create breaks but impossible to destroy them.

\def \@esphack{%
   \relax \ifvmode
     \nobreak
     \ifdim \@savsk=\z@
     \else
       \vskip\@savsk
     \fi
   \else
     \ifhmode
       \spacefactor \@savsf
       \ifdim \@savsk>\z@
         \ignorespaces
       \fi
     \fi
   \fi
}

For the moment we are going to ignore the vertical versions until they are correct.

63 \def\@bsphack{%

64 \relax
65 \ifhmode
66  \@savsk\lastskip
67  \@savsf\spacefactor
68 \fi}
\@esphack Companion to \@bsphack.
69 \def\@esphack{%
70 \relax
71 \ifhmode
72  \spacefactor\@savsf
73  \ifdim\@savsk>\z@
74  \ignorespaces
75  \fi
76 \fi}

\@Esphack A variant of \@esphack that sets the @ignore switch to true (as \@esphack used to do previously). This is currently used only for floats and similar environments.

77 \def\@Esphack{%
78 \relax
79 \ifhmode
80  \spacefactor\@savsf
81  \ifdim\@savsk>\z@
82  \@ignoretrue
83  \ignorespaces
84  \fi
85 \fi}

\@vbsphack Another variant which is useful for invisible things which should not live in vmode

(this is how some people feel about marginals).

If it occurs in vmode then it enters hmode and ensures that \@savsk is nonzero so that the \ignorespaces is put in later. It is not used at present.

 \def \@vbsphack{ %
    \relax \ifvmode
      \leavevmode
      \@savsk 1sp
      \@savsf \spacefactor
    \else
      \ifhmode
        \@savsk \lastskip
        \@savsf \spacefactor
      \fi
    \fi
 }

16.5 Vertical spacing

L^{A}TEX supports the plain TEX commands \smallskip, \medskip and \bigskip. However, it redefines them using \vspace instead of \vskip.

Extra vertical space is added by the command \addvspace{⟨skip⟩}, which adds a vertical skip of ⟨skip⟩ to the document. The sequence

\addvspace{⟨s1 ⟩} \addvspace{⟨s2 ⟩} is equivalent to

\addvspace{⟨maximum of s1, s2 ⟩}.

\addvspace should be used only in vertical mode, and gives an error if it’s not. The \addvspace command does not add vertical space if @minipage is true. The minipage environment uses this to inhibit the addition of extra vertical space at the beginning.

Penalties are put into the vertical list with the \addpenalty{⟨penalty⟩} command. It works properly when \addpenalty and \addvspace commands are mixed.

The @nobreak switch is set true used when in vertical mode and no page break should occur. (Right now, it is used only by the section heading commands to inhibit page breaking after a heading.)

 \addvspace{SKIP} ==
  BEGIN
   if vmode
     then if @minipage
            else if \lastskip =0
                    then  \vskip SKIP
                    else  if \lastskip < SKIP
                             then  \vskip -\lastskip
                                   \vskip SKIP
                             else if SKIP < 0 and \lastskip >= 0
                                    then \vskip -\lastskip
                                         \vskip \lastskip + SKIP
          fi      fi       fi      fi
     else useful error message (CAR).
   fi
  END

\@xaddvskip Internal macro for \vspace handling the case that space has previously been added.

86 \def\@xaddvskip{%
87 \ifdim\lastskip<\@tempskipb
88  \vskip-\lastskip
89  \vskip\@tempskipb
90 \else
91  \ifdim\@tempskipb<\z@
92  \ifdim\lastskip<\z@
93  \else
94  \advance\@tempskipb\lastskip
95  \vskip-\lastskip
96  \vskip \@tempskipb

 97  \fi
 98  \fi
 99 \fi}

\addvspace Add vertical space taking into account space already added, as described above.

100 \def\addvspace#1{%
101 \ifvmode
102  \if@minipage\else
103  \ifdim \lastskip =\z@
104  \vskip #1\relax
105  \else
106  \@tempskipb#1\relax
107  \@xaddvskip
108  \fi
109  \fi
110 \else
111  \@noitemerr
112 \fi}
\addpenalty
113 \def\addpenalty#1{%
114 \ifvmode
115  \if@minipage
116  \else
117  \if@nobreak
118  \else
119  \ifdim\lastskip=\z@
120  \penalty#1\relax
121  \else
122  \@tempskipb\lastskip
123  \vskip -\lastskip
124  \penalty#1%
125  \vskip\@tempskipb
126  \fi
127  \fi
128  \fi
129 \else
130  \@noitemerr
131 \fi}

\vspace \@vspace \@vspacer The new code for these commands depends on the following facts:

• The value of prevdepth is changed only when a box or rule is created and added to a vertical list;

• The value of prevdepth is used only when a box is created and added to a vertical list;

• The value of prevdepth is always local to the building of one vertical list.

132 \DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace}
133 \def\@vspace #1{%
134 \ifvmode
135  \vskip #1
136  \vskip\z@skip
137 \else
138  \@bsphack
139  \vadjust{\@restorepar
140  \vskip #1
141  \vskip\z@skip

142 }%

143  \@esphack
144 \fi}
145 \def\@vspacer#1{%
146 \ifvmode
147  \dimen@\prevdepth
148  \hrule \@height\z@
149  \nobreak
150  \vskip #1
151  \vskip\z@skip
152  \prevdepth\dimen@
153 \else
154  \@bsphack
155  \vadjust{\@restorepar
156  \hrule \@height\z@
157  \nobreak
158  \vskip #1
159  \vskip\z@skip}%
160  \@esphack
161 \fi}
\smallskip \medskip \bigskip
162 \def\smallskip{\vspace\smallskipamount}
163 \def\medskip{\vspace\medskipamount}
164 \def\bigskip{\vspace\bigskipamount}
\smallskipamount
\medskipamount
\bigskipamount

165 \newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
166 \newskip\medskipamount   \medskipamount  =6pt plus 2pt minus 2pt
167 \newskip\bigskipamount   \bigskipamount =12pt plus 4pt minus 4pt

16.6 Horizontal space

\nobreakspace \@xobeysp This is a robust command that produces a horizontal space at which, in paragraphmode, a line-break is not possible. We then define an active ~ to expand to it since this is the documented behaviour of ~. One reason for introducing this is that some 8-bit input encodings have a slot for such a space and we do not want to use active characters as the L^{A}TEX internal commands.

The braces in the definition of ~ are needed to ensure that a following space is preserved when reading to/from internal files.

We need to keep \@xobeysp as it is widely used; so here it is let to the nonrobust command \nobreakspace .

168 \DeclareRobustCommand{\nobreakspace}{%
169 \leavevmode\nobreak\ }
170 \catcode `\~=13
171 \def~{\nobreakspace{}}
172 \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname

\, Used in paragraph mode produces a \thinspace. It has the ordinary definition in math mode. Useful for quotes inside quotes, as in ``\,`Foo', he said.''

173 \DeclareRobustCommand{\,}{%
174 \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi

175 }

\@ Placed before a ’.’, makes it a sentence-ending period. Does the right thing for other punctuation marks as well. Does this by setting spacefactor to 1000.

176 \def\@{\spacefactor\@m}
\hspace
177 \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
\@hspace
178 \def\@hspace#1{\hskip #1\relax}

\@hspacer extra \hskip 0pt added 1985/17/12 to guard against a following \unskip\relax added 13 Oct 88 for usual TEX lossage replaced both changes by \hskip\z@skip 27 Nov 91

179 \def\@hspacer#1{\vrule \@width\z@\nobreak
180  \hskip #1\hskip \z@skip}
\fill
181 \newskip\fill
182 \fill = 0pt plus 1fill
\stretch
183 \def\stretch#1{\z@ \@plus #1fill\relax}
\thinspace
\negthinspace
\enspace

184 \def\thinspace{\kern .16667em }
185 \def\negthinspace{\kern-.16667em }
186 \def\enspace{\kern.5em }
\enskip \quad \qquad
187 \def\enskip{\hskip.5em\relax}
188 \def\quad{\hskip1em\relax}
189 \def\qquad{\hskip2em\relax}

\obeycr \restorecr The following definitions will probably get deleted or moved to compatibility mode soon.

190 {\catcode`\^^M=13 \gdef\obeycr{\catcode`\^^M13 \def^^M{\\\relax}%
191  \@gobblecr}%
192 {\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
193 \@gobble\ignorespaces}}
194 \gdef\restorecr{\catcode`\^^M5 }}

195 ⟨/2ekernel⟩

File j

ltlogos.dtx

17 Logos

Various logos are defined here.

\TeX The TEX logo, adjusted so that a full stop after the logo counts as ending a sentence.

1 ⟨∗2ekernel⟩

2 \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}

\LaTeX The L^{A}TEX logo.

3 \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
4  {\sbox\z@ T%
5  \vbox to\ht\z@{\hbox{\check@mathfonts
6  \fontsize\sf@size\z@
7  \math@fontsfalse\selectfont
8  A}%
9  \vss}%
10  }%
11  \kern-.15em%
12  \TeX}

\LaTeXe The L^{A}TEX 2ε logo as proposed by A-W designers.

13 \DeclareRobustCommand{\LaTeXe}{\mbox{\m@th
14 \if b\expandafter\@car\f@series\@nil\boldmath\fi
15 \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}}

16 ⟨/2ekernel⟩

File j: ltlogos.dtx Date: 1997/10/08 Version v1.1h 74

File k

ltfiles.dtx

18 File Handling

The following user commands are defined in this part:

\document  (ie \begin{document})

Reads in the .AUX files and \catcode’s @ to 12.

\nofiles

Suppresses all file output by setting \@filesw false.

\includeonly {⟨NAME1, ... ,NAMEn⟩} Causes only parts NAME1, ... ,NAMEn to be read by their \include commands. Works by setting partsw true and setting \@partlist to NAME1, ... ,NAMEn.

\include      {⟨NAME⟩}

Does an \input NAME unless \@partsw is true and NAME is not in \@partlist. If \@filesw is true, then it directs .AUX output to NAME.AUX, including a checkpoint at the end.

\input      {⟨NAME⟩}

The same as TeX’s \input, except it allows optional braces around the file name. In L^{A}TEX 2ε, it also avoids the primitive ‘missing file’ error, if the file can not be found.

\IfFileExists      {⟨NAME⟩}{⟨then⟩}{⟨else⟩}

If the file exists on the system, execute then otherwise execute else.

\InputIfFileExists      {⟨NAME⟩}{⟨then⟩}{⟨else⟩}

If the file exists on the system, execute then and input NAME otherwise execute else.

1 ⟨∗2ekernel | autoload⟩

 2 \message{files,}

VARIABLES, SWITCHES AND INTERNAL COMMANDS: \@mainaux : Output file number for main .AUX file. \@partaux : Output file number for current part’s .AUX file.

    \@auxout  : Either \@mainout or \@partout, depending on

which .AUX file output goes to.

\@input{foo} : If file foo exists, then \input's it,

otherwise types a warning message.

@filesw : Switch – set false if no .AUX, .TOC, .IDX etc files are to be written @partsw : Set true by a \includeonly command. \@partlist : Set to the argument of the \includeonly command.

\cp@FOO : The checkpoint for \include'd file FOO.TEX, written by \@writeckpt at the end of file FOO.AUX

\includeonly{FILELIST} ==

BEGIN

\@partsw := T
\@partlist := FILELIST

END

\include{FILE} ==

BEGIN

\clearpage
if \@filesw = T
  then \immediate\write\@mainaux{\string\@input{FILE.AUX}}

fi

if \@partsw = T
  then \@tempswa := F
       \reserved@b == FILE
       for \reserved@a := \@partlist
           do if eval(\reserved@a) = eval(\reserved@b)
                then \@tempswa := T  fi

od

fi

if \@tempswa = T
   then \@auxout := \@partaux
        if \@filesw = T
          then \immediate\openout\@partaux{FILE.AUX}
                \immediate\write\@partaux{\relax}

fi

        \@input{FILE.TEX}
        \clearpage
        \@writeckpt{FILE}
        if @filesw then \closeout \@partaux fi
        \@auxout := \@mainaux
   else \cp@FILE

fi END

\@writeckpt{FILE} ==

BEGIN

 if \@filesw = T
     \immediate\write on file \@partaux:
               \@setckpt{FILE}{                  %% }
     for \reserved@a := \cl@@ckpt
        do \immediate\write on file \@partaux:
                \global\string\setcounter

{eval(\reserved@a)}{eval(\c@eval(\reserved@a))}
           od  %% {
        \immediate\write on file \@partaux:  }

fi END

 \@setckpt{FILE}{LIST} ==

BEGIN

    G \cp@FILE := LIST

END

INITIALIZATION

    \@tempswa := T

\@inputcheck \@unused Allocate read stream for testing and output stream.

 3 \newread\@inputcheck
 4 \newwrite\@unused
\@mainaux \@partaux
 5 \newwrite\@mainaux
 6 \newwrite\@partaux
\if@filesw \if@partsw
 7 \newif\if@filesw \@fileswtrue
 8 \newif\if@partsw \@partswfalse

\@clubpenalty This stores the current normal (non-infinite) value of \clubpenalty; it should therefore be reset whenever the normal value is changed (as in the bibliography in the standard styles).

 9 \newcount\@clubpenalty
10 \@clubpenalty \clubpenalty
\document Cancel the \begingroup from \begin
11 \def\document{\endgroup

If some options on \documentclass haven’t been used by any package we will now give a warning since this is most certainly a misspelling.

12 \ifx\@unusedoptionlist\@empty\else
13  \@latex@warning@no@line{Unused global option(s):^^J%
14  \@spaces[\@unusedoptionlist]}%
15 \fi
16 \@colht\textheight
17 \@colroom\textheight \vsize\textheight
18 \columnwidth\textwidth
19 \@clubpenalty\clubpenalty
20 \if@twocolumn

21  \advance\columnwidth -\columnsep
22  \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
23 \fi
24 \hsize\columnwidth \linewidth\hsize
25 \begingroup\@floatplacement\@dblfloatplacement
26  \makeatletter\let\@writefile\@gobbletwo
27  \global \let \@multiplelabels \relax
28  \@input{\jobname.aux}%
29 \endgroup
30 \if@filesw
31  \immediate\openout\@mainaux\jobname.aux
32  \immediate\write\@mainaux{\relax}%
33 \fi

Dateline 1991/03/26: FMi added \process@table to support NFSS; This will also work with old lfonts if no other style defines \process@table. The following line forces the initialization of the math fonts.

34 \process@table
35 \let\glb@currsize\@empty  %% Force math initialization.
36 \normalsize
37 \everypar{}%

So that punctuation in headings is not disturbed by verbatim or other local changes to the space factor codes, save the document default here. This will be locally reset by the output routine. For special cases a class may want to define \normalsfcodes directly, in case that definition will be used. (This is an old bug, problem existed in L^{A}TEX2.0x and plain TEX.)

38 \ifx\normalsfcodes\@empty
39  \ifnum\sfcode`\.=\@m
40  \let\normalsfcodes\frenchspacing
41  \else
42  \let\normalsfcodes\nonfrenchspacing
43  \fi
44 \fi

Way back in 1991 (08/26) FMi & RmS set the \@noskipsec switch to true in the preamble and to false here. This was done to trap lists and related text in the preamble but it does not catch everything; hence Change 1.1g was introduced.

45 \@noskipsecfalse
46 \let \@refundefined \relax

Just before disabling the preamble commands we execute the begin document hook which contains any code contributed by \AtBeginDocument. Also disable the gathering of the file list, if no \listfiles has been issued. \AtBeginDocument is redefined at this point so that and such commands that get into the hook do not chase their tail…

47 \let\AtBeginDocument\@firstofone
48 \@begindocumenthook

Most of the following assignments will be done globally in case the user adds something like \begin{multicols} to the document hook, i.e. starts are group

in \begin{document}.

Since a value of exactly 0pt for \topskip causes \twocolumn[] to misbehave, we add this check, hoping that it will not cause any problems elsewhere.

49 \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
50 \global\@maxdepth\maxdepth
51 \global\let\@begindocumenthook\@undefined
52 \ifx\@listfiles\@undefined
53  \global\let\@filelist\relax
54  \global\let\@addtofilelist\@gobble
55 \fi

At the very end we disable all preamble commands. This has to happen after the begin document hooks was executed so that this hook can still use such commands.

56 \gdef\do##1{\global\let ##1\@notprerr}%
57 \@preamblecmds

The next line saves tokens and also allows \@nodocument to be used directly to trap preamble errors.

58 \global\let \@nodocument \relax

The next line is a pure safety measure in case a do list is ever expanded at the wrong place. In addition it will save a few tokens to get rid of the above definition.

59 \global\let\do\noexpand

Use of \AtBeginDocument hook might mean that we are already in horizontal mode, so ignore the space after \begin{document}.

60 \ignorespaces}
61 \@onlypreamble\document

\normalsfcodes The setting of \@empty is just a flag. This command may be defined in a class or package file. If it is still \@empty at \begin{document} it will be defined to be \frenchspacing or \nonfrenchspacing, depending on which of those appears to be in effect at that point.

62 \let\normalsfcodes\@empty

\nofiles Set \@fileswfalse which suppresses the places where L^{A}TEX makes \immediate

writes. The \makeindex and \makeglossary are disabled. \protected@write

is redefined not to write to the file specified, but rather to write a blank line to the log file. This ensures that a ⟨whatsit⟩ node is still created, and so spacing is not affected by the \nofiles command; to ensure this more generally, the \if@nobreak test is needed.

63 \def\nofiles{%
64 \@fileswfalse
65 \typeout{No auxiliary output files.^^J}%
66 \long\def\protected@write##1##2##3%
67  {\write\m@ne{}\if@nobreak\ifvmode\nobreak\fi\fi}%

68 \let\makeindex\relax
69 \let\makeglossary\relax}
70 \@onlypreamble\nofiles

\protected@write This takes three arguments: an output stream, some initialization code, and some text to write. It then writes this, with appropriate handling of \protect and

\thepage.
71 \long\def \protected@write#1#2#3{%
72  \begingroup
73  \let\thepage\relax
74  #2%
75  \let\protect\@unexpandable@protect
76  \edef\reserved@a{\write#1{#3}}%
77  \reserved@a
78  \endgroup
79  \if@nobreak\ifvmode\nobreak\fi\fi

80 }

81 \let\@auxout=\@mainaux
\includeonly
82 \def\includeonly#1{%
83 \@partswtrue
84 \edef\@partlist{\zap@space#1 \@empty}}
85 \@onlypreamble\includeonly
\include In the definition of \include, \def\reserved@b changed to \edef\reserved@b

to be consistent with the \edef in \includeonly. (Suggested by Rainer Schöpf & Frank Mittelbach. Change made 20 Jul 88.)

Changed definition of \include to allow space at end of file name — otherwise, typing \include{foo } would cause L^{A}TEX to overwrite foo.tex. Change made 24 May 89, suggested by Rainer Schöpf and Frank Mittelbach

Made \include check for being used inside an \include’d file, as this will not work and cause surprising results.

86 \def\include#1{\relax
87 \ifnum\@auxout=\@partaux
88  \@latex@error{\string\include\space cannot be nested}\@eha
89 \else \@include#1 \fi}
\@include
90 \def\@include#1 {%
91 \clearpage
92 \if@filesw
93  \immediate\write\@mainaux{\string\@input{#1.aux}}%
94 \fi
95 \@tempswatrue
96 \if@partsw
97  \@tempswafalse
98  \edef\reserved@b{#1}%

 99  \@for\reserved@a:=\@partlist\do
100  {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
101 \fi
102 \if@tempswa
103  \let\@auxout\@partaux
104  \if@filesw
105  \immediate\openout\@partaux #1.aux
106  \immediate\write\@partaux{\relax}%
107  \fi
108  \@input@{#1.tex}%
109  \clearpage
110  \@writeckpt{#1}%
111  \if@filesw
112  \immediate\closeout\@partaux
113  \fi
114 \else

If the file is not included, reset \deadcycles, so that a long list of non-included files does not generate an ‘Output loop’ error.

115  \deadcycles\z@
116  \@nameuse{cp@#1}%
117 \fi
118 \let\@auxout\@mainaux}
\@writeckpt
119 \def\@writeckpt#1{%
120 \if@filesw
121  \immediate\write\@partaux{\string\@setckpt{#1}\@charlb}%
122  {\let\@elt\@wckptelt \cl@@ckpt}%
123  \immediate\write\@partaux{\@charrb}%
124 \fi}
\@wckptelt
125 \def\@wckptelt#1{%
126 \immediate\write\@partaux{%
127  \string\setcounter{#1}{\the\@nameuse{c@#1}}}}

\@setckpt RmS 93/08/31: introduced \@setckpt

128 \def\@setckpt#1{\global\@namedef{cp@#1}}

\@charlb \@charrb The following defines \@charlb and \@charrb to be { and }, respectively with

 \catcode 11.
129 {\catcode`[=1 \catcode`]=2
130 \catcode`{=11 \catcode`}=11
131 \gdef\@charlb[{]
132 \gdef\@charrb[}]
133 ]% }brace matching

18.1 Safe Input Macros

\IfFileExists
134 \long\def \IfFileExists#1#2#3{%
135 \openin\@inputcheck#1 %
136 \ifeof\@inputcheck
137  \ifx\input@path\@undefined
138  \def\reserved@a{#3}%
139  \else
140  \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}%
141  \fi
142 \else
143  \closein\@inputcheck
144  \edef\@filef@und{#1 }%
145  \def\reserved@a{#2}%
146 \fi
147 \reserved@a}

\@iffileonpath If the file is not found by \openin, and \input@path is defined, look in all the directories specified in \input@path.

148 \long\def\@iffileonpath#1{%
149 \let\reserved@a\@secondoftwo
150 \expandafter\@tfor\expandafter\reserved@b\expandafter
151  :\expandafter=\input@path\do{%
152  \openin\@inputcheck\reserved@b#1 %
153  \ifeof\@inputcheck\else
154  \edef\@filef@und{\reserved@b#1 }%
155  \let\reserved@a\@firstoftwo%
156  \closein\@inputcheck
157  \@break@tfor
158  \fi}%
159 \reserved@a}

\InputIfFileExists Now define \InputIfFileExists to input #1 if it seems to exist. Immediately prior to the input, #2 is executed. If the file #1 does not exist, execute ‘#3’.

160 \long\def \InputIfFileExists#1#2{%
161 \IfFileExists{#1}%
162  {#2\@addtofilelist{#1}\@@input \@filef@und}}

\input Input a file: if the argument is given in braces use safe input macros, otherwise use TEX’s primitive \input command (which is called \@@input in L^{A}TEX).

163 \def\input{\@ifnextchar\bgroup\@iinput\@@input}
\@iinput Define \@iinput (i.e., \input) in terms of \InputIfIfileExists.
164 \def\@iinput#1{%
165 \InputIfFileExists{#1}{}%
166 {\filename@parse{#1}%
167 \edef\reserved@a{\noexpand\@missingfileerror
168  {\filename@area\filename@base}%

169  {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
170 \reserved@a}}

\@input Define \@input in terms of \IfIfileExists. So this is a ‘safe input’ command,

but the files input are not listed by \listfiles.

We don’t want .aux, .toc files etc be listed by \listfiles. However, something like .bbl probably should be listed and thus should be implemented not by

 \@input.
171 \def\@input#1{%
172 \IfFileExists{#1}{\@@input\@filef@und}{\typeout{No file #1.}}}

\@input@ Version of \@input that does add the file to \@filelist.

173 \def\@input@#1{\InputIfFileExists{#1}{}{\typeout{No file #1.}}}

\@missingfileerror This ‘error’ command avoids TEX’s primitive missing file loop.

Missing file error. Prompt for a new filename, offering a default extension.

174 ⟨autoload⟩\def\@missingfileerror{\@autoerr\@missingfileerror}

175 ⟨/2ekernel | autoload⟩ 176 ⟨∗2ekernel | autoerr⟩

177 \gdef\@missingfileerror#1#2{%
178  \typeout{^^J! LaTeX Error: File `#1.#2' not found.^^J^^J%
179  Type X to quit or <RETURN> to proceed,^^J%
180  or enter new name. (Default extension: #2)^^J}%
181  \message{Enter file name: }%
182  {\endlinechar\m@ne
183  \global\read\m@ne to\@gtempa}%
184  \ifx\@gtempa\@empty
185  \else
186  \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
187  \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
188  \filename@parse\@gtempa
189  \edef\filename@ext{%
190  \ifx\filename@ext\relax#2\else\filename@ext\fi}%
191  \edef\reserved@a{%
192  \noexpand\InputIfFileExists
193  {\filename@area\filename@base.\filename@ext}%
194  {}%
195  {\noexpand\@missingfileerror
196  {\filename@area\filename@base}{\filename@ext}}}%
197  \reserved@a
198  \fi}

199 ⟨/2ekernel | autoerr⟩ 200 ⟨∗2ekernel | autoload⟩

\@obsoletefile For compatibility with L^{A}TEX 2.09 document styles, we distribute files called

 article.sty, book.sty, report.sty, slides.sty and letter.sty. These use

the command \@obsoletefile, which produces a warning message.

201 \def\@obsoletefile#1#2{%
202 \@latex@warning@no@line{inputting `#1' instead of obsolete `#2'}}
203 \@onlypreamble\@obsoletefile

18.2 Listing files

\@filelist A list of files input so far. The initial value of \@gobble eats the comma before the first file name.

204 \let\@filelist\@gobble

\@addtofilelist Add to the list of files input so far. This ‘real’ definition is only used for ‘cfg’ files during initex. An initial definition of \@gobble has already been set.

205 %\def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}

\listfiles A preamble command to cause \end{document} to list files input from the main file.

206 \def\listfiles{%
207 \let\listfiles\relax
208 \def\@listfiles##1##2##3##4##5##6##7##8##9\@@{%
209  \def\reserved@d{\\}%
210  \@tfor\reserved@c:=##1##2##3##4##5##6##7##8\do{%
211  \ifx\reserved@c\reserved@d
212  \edef\filename@area{ \filename@area}%
213  \fi}}%
214 \def\@dofilelist{%
215  \typeout{^^J *File List*}%
216  \@for\@currname:=\@filelist\do{%
217  \filename@parse\@currname
218  \edef\reserved@a{%
219  \filename@base.%
220  \ifx\filename@ext\relax tex\else\filename@ext\fi}%
221  \expandafter\let\expandafter\reserved@b
222  \csname ver@\reserved@a\endcsname
223  \expandafter\expandafter\expandafter\@listfiles\expandafter
224  \filename@area\filename@base\\\\\\\\\\\\\\\\\\\@@
225  \typeout{%
226  \filename@area\reserved@a
227  \ifx\reserved@b\relax\else\@spaces\reserved@b\fi}}%
228  \typeout{ ***********^^J}}}

The \@filelist will be de-activated if \listfiles does not appear in the preamble. \begin{document} contains code equivalent to the following:

  \AtBeginDocument{%
    \ifx\@listfiles\@undefined
      \let\@filelist\relax
      \let\@addtofilelist\@gobble
    \fi}
229 \@onlypreamble\listfiles
\@dofilelist
230 \let\@dofilelist\relax

231 ⟨/2ekernel | autoload⟩

File l

ltoutenc.dtx

19 Font encodings

This section of the kernel contains commands for declaring encoding-specific commands, such as accents. It also contains the code for some of the encoding files,

including omlenc.def, omsenc.def, t1enc.def and ot1enc.def files, which de-

fine the OLM, OMS, T1 and OT1 encodings, and the fontenc package for selecting encodings.

The fontenc package has options for encodings, of which the last option is the default encoding. For example, to use the OT2, OT3 and T1 encodings, with T1 as the default, you say:

    \usepackage[OT2,OT3,T1]{fontenc}

The standard kernel set-up loads font encoding files and selects an encoding as follows.

    \input {omlenc.def}
    \input  {t1enc.def}
    \input {ot1enc.def}
    \input {omsenc.def}
    \fontencoding{OT1}

Note that the files in the standard inputenc package depend on this behaviour of the kerenel.

The syntax for declaring encoding-specific commands is:

     \DeclareTextCommand{⟨command⟩}{⟨encoding⟩}

[⟨number⟩][⟨default⟩]{⟨commands⟩}

This command is like \newcommand, except that it defines a command which is specific to one encoding. The resulting command is always robust, even if its definition is fragile. For example, the definition of \l in the OT1 encoding is:

    \DeclareTextCommand{\l}{OT1}{{\@xxxii l}}

\DeclareTextCommand takes the same optional arguments as \newcommand.

     \ProvideTextCommand{⟨command⟩}{⟨encoding⟩}

[⟨number⟩][⟨default⟩]{⟨commands⟩}

This acts like \DeclareTextCommand, but does nothing if the command is already defined.

\DeclareTextSymbol{⟨command⟩}{⟨encoding⟩}{⟨slot⟩} This command defines a text symbol, with a particular slot in that encoding. The commands:

    \DeclareTextSymbol{\ss}{OT1}{25}
    \DeclareTextCommand{\ss}{OT1}{\char25 }

have the same effect, but the \DeclareTextSymbol is faster.

\DeclareTextAccent{⟨command⟩}{⟨encoding⟩}{⟨slot⟩}

This command declares a text accent. The commands:

    \DeclareTextAccent{\"}{OT1}{127}
    \DeclareTextCommand{\"}{OT1}{\add@accent {127}}

have the same effect.

     \DeclareTextComposite{⟨command⟩}

{⟨encoding⟩}{⟨argument⟩}{⟨slot⟩}

This command declares a composite letter, for example in the T1 encoding \'{a} is slot 225, which is declared by:

    \DeclareTextComposite{\'}{T1}{a}{225}

The command will normally have been declared with \DeclareTextAccent, or as

a one-argument \DeclareTextCommand.

\DeclareTextComposite is the most common example of using the more general declaration \DeclareTextCompositeCommand, which can define a composite to be an arbitrary piece of text.

     \DeclareTextCompositeCommand{⟨command⟩}

{⟨encoding⟩}{⟨argument⟩}{⟨text⟩}

For example, in the OT1 encoding Å has a hand-crafted defintion this is declared as follows

    \DeclareTextCompositeCommand{\r}{OT1}{A}
     {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex%
      \rlap{\raise.67\dimen@\hbox{\char23}}A}

The command will normally have been declared with \DeclareTextAccent, or as

a one-argument \DeclareTextCommand.

The commands defined using the above commands can be used in two ways. Normally they are used by just calling the command in the appropriate encoding, for example \ss. However, sometimes you may wish to use a command in an encoding where it is not defined. If the command has no arguments, then you can use it in another encoding by calling \UseTextSymbol:

\UseTextSymbol{⟨encoding⟩}{⟨command⟩}

For example, \UseTextSymbol{OT1}{\ss} has the same effect as:

    {\fontencoding{OT1}\selectfont\ss}

If the command has one argument then you can use it in another encoding by

calling \UseTextAccent:

\UseTextAccent{⟨encoding⟩}{⟨command⟩}{⟨text⟩}

For example, if the current encoding is OT2 then \UseTextAccent{OT1}{\'}{a} has the same effect as:

    {\fontencoding{OT1}\selectfont\'{\fontencoding{OT2}\selectfont a}}

You can also declare a default definition for a text command, which will be used if the current encoding has no appropriate definition. Such use will also set the definition for this command in the current encoding to equal this default definition; this makes subsequent uses of the command much faster.

     \DeclareTextCommandDefault{⟨command⟩}{⟨definition⟩}

For example, the default definition of the command \textonequarter (which produces the fraction \frac{1}{4}) could be built using math mode:

    \DeclareTextCommandDefault{\textonequarter}{\ensuremath {\frac14}}

There is a matching \Provide command which will not override an existing default definition:

     \ProvideTextCommandDefault{⟨command⟩}{⟨definition⟩}

The most common use for these commands is to use symbols from other encodings, so there are some optimizations provided:

     \DeclareTextSymbolDefault{⟨command⟩}⟨encoding⟩}
     \DeclareTextAccentDefault{⟨command⟩}⟨encoding⟩}

are short for:

     \DeclareTextCommandDefault{⟨command⟩}
                         {\UseTextSymbol{⟨encoding⟩}{⟨command⟩}}
     \DeclareTextCommandDefault[1]{⟨command⟩}
                     {\UseTextAccent{⟨encoding⟩}{⟨command⟩}{#1}}

For example, to make OT1 the default encoding for \ss and \' you say:

    \DeclareTextSymbolDefault{\ss}{OT1}
    \DeclareTextAccentDefault{\'}{OT1}

Note that you can use these commands on any zero- or one-argument commands declared with \DeclareText* or \ProvideText*, not just those defined using

\DeclareTextSymbol or \DeclareTextAccent.

19.1 Docstrip modules

This .dtx file is be used to generate several related files containing font encoding definitions. The mutually exclusive docstrip options are listed here.

T1  generates t1enc.def for the Cork encoding.
TS1  generates ts1enc.def for the Text Companion encoding.

TS1sty generates textcomp.sty, package that sets up use of the Text

Companion encoding.

OT1  generates ot1enc.def for Knuth’s CM encoding.
OMS  generates omsenc.def for Knuth’s math symbol encoding.
OML  generates omlenc.def for Knuth’s math letters encoding.

OT4 generates ot4enc.def for the Polish extension to the OT1 encoding, created by B. Jackowski and M. Ryćko for use with the Polish version of Computer Modern and Computer Concrete.

package generates fontenc.sty for selecting encodings.
2ekernel for the kernel commands.
autoload for the ‘autoload’ kernel commands.
autoerr for the autoerr.sty error message autoload file.

19.2 Definitions for the kernel

19.2.1 Declaration commands

This section contains definitions for commands such as accents which depend on the current encoding. These commands will usually be kept in .def files, for example ot1enc.def contains the definitions for the OT1 encoding.

1 ⟨∗2ekernel | autoload⟩

2 \message{font encodings,}
\DeclareTextCommand \ProvideTextCommand \DeclareTextSymbol \@dec@text@cmd \@changed@cmd \@changed@x \TextSymbolUnavailable \@inmathwarn If you say:
  \DeclareTextCommand{\foo}{T1}...

then \foo is defined to be \T1-cmd \foo \T1\foo, where \T1\foo is one control sequence, not two! We then call \newcommand to define \T1\foo.

3 \def\DeclareTextCommand{%
4 \@dec@text@cmd\newcommand}
5 \def\ProvideTextCommand{%
6 \@dec@text@cmd\providecommand}
7 \def\DeclareTextSymbol#1#2#3{%
8 \@dec@text@cmd\chardef#1{#2}#3\relax}
9 \def\@dec@text@cmd#1#2#3{%
10 \expandafter\def\expandafter#2%
11  \expandafter{%
12  \csname#3-cmd\expandafter\endcsname
13  \expandafter#2%

14  \csname#3\string#2\endcsname
15  }%
16 \let\@ifdefinable\@rc@ifdefinable
17 \expandafter#1\csname#3\string#2\endcsname}

The declarations are only available before \begin{document}.

18 \@onlypreamble\DeclareTextCommand
19 \@onlypreamble\DeclareTextSymbol

The sneaky bit in all this is what \T1-cmd \foo \T1\foo does. There are five possibilities, depending on the current values of \protect, \cf@encoding and

\ifmmode:
   • If \protect is \@typeset@protect and \cf@encoding is T1, then we execute

\T1\foo. This should be the normal behaviour, and is optimized for speed.

   • If \protect is \@typeset@protect, \cf@encoding is (say) OT1, and

\OT1\foo is defined, then we execute \OT1\foo.

   • If \protect is \@typeset@protect, \cf@encoding is (say) OT1, we’re in

text mode, and \OT1\foo is undefined, then we define \OT1\foo to be the default value of \foo, and execute \OT1\foo.

   • If \protect is \@typeset@protect, \cf@encoding is (say) OT1, we’re in

math mode, and \OT1\foo is undefined, then we execute the default value of \foo. (This is necessary so that things like $X_\copyright$ work properly.)

   • If \protect is not \@typeset@protect then we execute \noexpand\foo.

For example, if we are writing to a file, then this results in \foo being written. If we are in a \mark, then \foo will be put in the mark—since \foo is robust, it will then survive all the things which may happen to it whilst it’s a \mark.

So after all that, we will either execute the appropriate definition of \foo for the current encoding, or we will execute \noexpand\foo.

The default value of \foo is \?\foo if it is defined, and an error message otherwise.

When the encoding is changed from T1 to OT1, \T1-cmd is defined to be

\@changed@cmd and \OT1-cmd is defined to be \@current@cmd. This means that

the test for what the current encoding is can be performed quickly.

20 \def\@current@cmd#1{%
21 \ifx\protect\@typeset@protect
22  \@inmathwarn#1%
23 \else
24  \noexpand#1\expandafter\@gobble
25 \fi}
26 \def\@changed@cmd#1#2{%
27 \ifx\protect\@typeset@protect
28  \@inmathwarn#1%
29  \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax

30  \expandafter\ifx\csname ?\string#1\endcsname\relax
31  \expandafter\def\csname ?\string#1\endcsname{%
32  \TextSymbolUnavailable#1%
33  }%
34  \fi
35  \global\expandafter\let
36  \csname\cf@encoding \string#1\expandafter\endcsname
37  \csname ?\string#1\endcsname
38  \fi
39  \csname\cf@encoding\string#1%
40  \expandafter\endcsname
41 \else
42  \noexpand#1%
43 \fi}

44 ⟨/2ekernel | autoload⟩ 45 ⟨∗2ekernel | autoerr⟩

46 \gdef\TextSymbolUnavailable#1{%
47 \@latex@error{%
48  Command \protect#1 unavailable in encoding \cf@encoding%
49 }\@eha}

50 ⟨/2ekernel | autoerr⟩

51 ⟨autoload⟩\gdef\TextSymbolUnavailable{\@autoerr\TextSymbolUnavailable}

52 ⟨∗2ekernel | autoload⟩

The command \@inmathwarn produces a warning message if we are currently in math mode. Note that since this command is used inside text commands, it can’t call \relax before the \ifmmode. This means that it is possible for the warning to fail to be issued at the beginning of a row of an halign whose template enters math mode. This is probably a bad feature, but there’s not much that can be done about it, since adding a \relax would break ligatures and kerning between text symbols.

A more efficient solution would be to make \@inmathwarn and \@inmatherr equal to \@empty and \relax by default, and to have \everymath reset them to their usual definitions. This is left for future investigation (for example it may break some third party code).

53 \def\@inmathwarn#1{%
54 \ifmmode
55  \@latex@warning{Command \protect#1 invalid in math mode}%
56 \fi}

\DeclareTextCommandDefault \ProvideTextCommandDefault These define commands with encoding ?.

Note that \DeclareTextCommandDefault can only be used in the preamble, but that the \Provide version is allowed in inputenc .def files, so is allowed anywhere.

57 \def\DeclareTextCommandDefault#1{%
58 \DeclareTextCommand#1?}

59 \def\ProvideTextCommandDefault#1{%
60 \ProvideTextCommand#1?}
61 \@onlypreamble\DeclareTextCommandDefault
62 %\@onlypreamble\ProvideTextCommandDefault

They require \?-cmd to be initialized as \@changed@cmd.

63 \expandafter\let\csname?-cmd\endcsname\@changed@cmd

\DeclareTextAccent This is just a disguise for defining a TEX \accent command.

64 \def\DeclareTextAccent#1#2#3{%
65 \DeclareTextCommand#1{#2}{\add@accent{#3}}}
66 \@onlypreamble\DeclareTextAccent

\add@accent To save space this code is shared between all text accents that are set using the \accent primitive. The argument is pre-set in a box so that any font loading that is needed is already done within the box. This is needed because font-loading involves grouping and that would prevent the accent mechanism form working so that the accent would not be positioned over the argument. Declarations that change the font should be allowed (only low-level ones are at present) inside the argument of an accent command, but not size changes, as they involve \setbox operations which also inhibit the mechanism of the \accent primitive.

Note that the whole process is within a group.

67 \def\add@accent#1#2{{%
68 \setbox\@tempboxa\hbox{#2}%
69 \accent#1 #2}}
\DeclareTextCompositeCommand \DeclareTextComposite \@text@composite \@text@composite@x \@strip@args Another amusing game to play with \expandafter, \csname, and \string. When
you say \DeclareTextCompositeCommand{\foo}{T1}{a}{bar}, we look to see if

the expansion of \T1\foo begins with \@text@composite, and if it doesn’t, we redefine \T1\foo to be:

    #1 -> \@text@composite \T1\foo #1\@empty \@text@composite {...}

where ... is the previous definition of \T1\foo. Finally, we define \\T1\foo-a to expand to bar.

70 \def\DeclareTextCompositeCommand#1#2#3#4{%
71 \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname
72 \expandafter\expandafter\expandafter\ifx
73 \expandafter\@car\reserved@a\relax\relax\@nil \@text@composite \else
74  \edef\reserved@b##1{%
75  \def\expandafter\noexpand
76  \csname#2\string#1\endcsname####1{%
77  \noexpand\@text@composite
78  \expandafter\noexpand\csname#2\string#1\endcsname
79  ####1\noexpand\@empty\noexpand\@text@composite
80  {##1}}}%
81  \expandafter\reserved@b\expandafter{\reserved@a{##1}}%

82 \fi
83 \expandafter\def\csname\expandafter\string\csname
84  #2\endcsname\string#1-\string#3\endcsname{#4}}
85 \@onlypreamble\DeclareTextCompositeCommand

This all works because:

    \@text@composite \T1\foo A\@empty \@text@composite {...}

expands to \\T1\foo-A if \\T1\foo-A has been defined, and {...} otherwise.

Note that \@text@composite grabs the first token of the argument and puts just that in the csname. This is so that \'{\textit{e}} will work—it checks whether \\T1\'-\textit is defined (which presumably it isn’t) and so expands

to {\accent 1 \textit{e}}.

This trick won’t always work, for example \'{{\itshape e}} will expand to (with spaces added for clarity):

    \csname \string \T1\' - \string {\itshape e} \@empty \endcsname

which will die pretty horribly. Unfortunately there’s not much can be done about this if we’re going to use \csname lookups as a fast way of accessing composites.

This has an unfortunate ‘misfeature’ though, which is that in the T1 encoding, \'{aa} produces á. This is not the expected behaviour, and should perhaps be fixed if the fix doesn’t affect performance too badly.

Finally, it’s worth noting that the \@empty is used in \@text@composite so that accents will work even when the argument is empty. If you say \'{} then this looks up \\T1\'-\@empty, which ought to be \relax, and so all is well. If we didn’t include the \@empty, then \'{} would expand to:

    \csname \string \T1\' - \string \endcsname

so the \endcsname would be \string’ed and the whole of the rest of the document would be put inside the \csname. This would not be good.

86 \def\@text@composite#1#2#3\@text@composite{%
87 \expandafter\@text@composite@x
88  \csname\string#1-\string#2\endcsname}

The \expandafter is added so that less chaos ensues from the misuse of this code with commands that take several arguments.

89 \def\@text@composite@x#1#2{%
90 \ifx#1\relax
91  \expandafter#2%
92 \else
93  #1%
94 \fi}
The command \DeclareTextComposite uses \DeclareTextCompositeCommand to

declare a command which expands out to a single glyph.

95 \catcode\z@=11\relax

 96 \def\DeclareTextComposite#1#2#3#4{%
 97 \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}%
 98 \bgroup
 99  \lccode\z@#4%
100  \lowercase{%
101 \egroup
102  \reserved@a ^^@}}
103 \catcode\z@=15\relax
104 \@onlypreamble\DeclareTextComposite

\UseTextSymbol \UseTextAccent \@use@text@encoding These fragile commands access glyphs from different encodings. They use grotty low-level calls to the font selection scheme for speed, and in order to make sure that \UseTextSymbol doesn’t do anything which you’re not allowed to do between an \accent and its glyph.

105 \def\UseTextSymbol#1#2{%
106 \def\@wrong@font@char{\MessageBreak for \noexpand\symbol`\string#2'}%
107 \let\@curr@enc\cf@encoding
108 \@use@text@encoding{#1}%
109 #2%
110 \let\@wrong@font@char\@empty
111 \@use@text@encoding\@curr@enc}
112 \def\UseTextAccent#1#2#3{%
113 \let\@curr@enc\cf@encoding
114 \@use@text@encoding{#1}%
115 #2{\@use@text@encoding\@curr@enc#3}%
116 \@use@text@encoding\@curr@enc}
117 \def\@use@text@encoding#1{%
118 \edef\f@encoding{#1}%
119 \xdef\font@name{%
120  \csname\curr@fontshape/\f@size\endcsname}%
121 \pickup@font
122 \font@name
123 \@@enc@update}

\DeclareTextSymbolDefault \DeclareTextAccentDefault Some syntactic sugar. Again, these should probably be optimized for speed.

124 \def\DeclareTextSymbolDefault#1#2{%
125 \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}}
126 \def\DeclareTextAccentDefault#1#2{%
127 \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}}
128 \@onlypreamble\DeclareTextSymbolDefault
129 \@onlypreamble\DeclareTextAccentDefault

19.2.2 Hyphenation

\patterns \@@patterns \hyphenation \@@hyphenation We redefine \patterns and \hyphenation to allow the use of commands declared

with \DeclareText* to be used inside them.

130 %\let\@@patterns\patterns
131 %\let\@@hyphenation\hyphenation
132 %\def\patterns{%
133 %   \bgroup
134 %      \let\protect\@empty
135 %      \let\@typeset@protect\@empty
136 %      \let\@changed@x\@changed@x@mouth
137 %   \afterassignment\egroup
138 %   \@@patterns

139 %}

140 %\def\hyphenation{%
141 %   \bgroup
142 %      \let\protect\@empty
143 %      \let\@typeset@protect\@empty
144 %      \let\@changed@x\@changed@x@mouth
145 %   \afterassignment\egroup
146 %   \@@hyphenation

147 %}

19.2.3 Miscellania

\a The \a command is used to access the accent commands even when they have been redefined (for example by the tabbing environment). Its internal name is

\@tabacckludge.
148 \def\@tabacckludge#1{\expandafter\@changed@cmd\csname#1\endcsname\relax}
149 \let\a=\@tabacckludge

19.2.4 Default encodings

We define the default encodings for most commands to be either OT1, OML or OMS. These defaults are in the kernel and therefore fonts with these encodings must be available unless these defaults are redefined elsewhere. Recall that the standard kernel loads the encoding files for these encodings, and also that for the T1 encoding.

The naming conventions in the kernel are not what we would use if we were starting from scratch… Those defined by DEK (like \ae and \ss) or by the TEX Users Group Technical Working Group on multi-lingual typesetting (like \th and \ng) have short names. Those which were added to the kernel in 1993 and early 1994 are named after their Adobe glyph names (like \guillemotleft and \quotedblbase). Unfortunately, this naming scheme won’t work for all glyphs, since some names (like \space) are already used, and some (like \endash) are very likely to be defined by users. So we’re now using the naming scheme of \text followed by the Adobe name, (like \textendash and \textsterling). Except that some glyphs don’t have Adobe names, so we’re using the names used by fontinst for those (like \textcompwordmark). Sigh.

Some accents from OT1:

150 \DeclareTextAccentDefault{\"}{OT1}

151 \DeclareTextAccentDefault{\'}{OT1}
152 \DeclareTextAccentDefault{\.}{OT1}
153 \DeclareTextAccentDefault{\=}{OT1}
154 \DeclareTextAccentDefault{\H}{OT1}
155 \DeclareTextAccentDefault{\^}{OT1}
156 \DeclareTextAccentDefault{\`}{OT1}
157 \DeclareTextAccentDefault{\b}{OT1}
158 \DeclareTextAccentDefault{\c}{OT1}
159 \DeclareTextAccentDefault{\d}{OT1}
160 \DeclareTextAccentDefault{\r}{OT1}
161 \DeclareTextAccentDefault{\u}{OT1}
162 \DeclareTextAccentDefault{\v}{OT1}
163 \DeclareTextAccentDefault{\~}{OT1}

Some symbols from OT1:

164 %\DeclareTextSymbolDefault{\AA}{OT1}
165 \DeclareTextSymbolDefault{\AE}{OT1}
166 \DeclareTextSymbolDefault{\L}{OT1}
167 \DeclareTextSymbolDefault{\OE}{OT1}
168 \DeclareTextSymbolDefault{\O}{OT1}
169 %\DeclareTextSymbolDefault{\aa}{OT1}
170 \DeclareTextSymbolDefault{\ae}{OT1}
171 \DeclareTextSymbolDefault{\i}{OT1}
172 \DeclareTextSymbolDefault{\j}{OT1}
173 \DeclareTextSymbolDefault{\l}{OT1}
174 \DeclareTextSymbolDefault{\oe}{OT1}
175 \DeclareTextSymbolDefault{\o}{OT1}
176 \DeclareTextSymbolDefault{\ss}{OT1}
177 \DeclareTextSymbolDefault{\textdollar}{OT1}
178 \DeclareTextSymbolDefault{\textemdash}{OT1}
179 \DeclareTextSymbolDefault{\textendash}{OT1}
180 \DeclareTextSymbolDefault{\textexclamdown}{OT1}
181 %\DeclareTextSymbolDefault{\texthyphenchar}{OT1}
182 %\DeclareTextSymbolDefault{\texthyphen}{OT1}
183 \DeclareTextSymbolDefault{\textquestiondown}{OT1}
184 \DeclareTextSymbolDefault{\textquotedblleft}{OT1}
185 \DeclareTextSymbolDefault{\textquotedblright}{OT1}
186 \DeclareTextSymbolDefault{\textquoteleft}{OT1}
187 \DeclareTextSymbolDefault{\textquoteright}{OT1}
188 \DeclareTextSymbolDefault{\textsterling}{OT1}

Some symbols from OMS:

189 \DeclareTextSymbolDefault{\textasteriskcentered}{OMS}
190 \DeclareTextSymbolDefault{\textbackslash}{OMS}
191 \DeclareTextSymbolDefault{\textbar}{OMS}
192 \DeclareTextSymbolDefault{\textbraceleft}{OMS}
193 \DeclareTextSymbolDefault{\textbraceright}{OMS}
194 \DeclareTextSymbolDefault{\textbullet}{OMS}
195 \DeclareTextSymbolDefault{\textdaggerdbl}{OMS}
196 \DeclareTextSymbolDefault{\textdagger}{OMS}
197 \DeclareTextSymbolDefault{\textparagraph}{OMS}

198 \DeclareTextSymbolDefault{\textperiodcentered}{OMS}
199 \DeclareTextSymbolDefault{\textsection}{OMS}
200 \DeclareTextAccentDefault{\textcircled}{OMS}

Some symbols from OML:

201 \DeclareTextSymbolDefault{\textless}{OML}
202 \DeclareTextSymbolDefault{\textgreater}{OML}
203 \DeclareTextAccentDefault{\t}{OML}

Some defaults we can fake.

The interface for defining \copyright changed, it used to use \expandafter to add braces at the appropriate points.

204 \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
205 % \expandafter\def\expandafter
206 %                 \copyright\expandafter{\expandafter{\copyright}}
207 \DeclareTextCommandDefault{\textasciicircum}{\^{}}
208 \DeclareTextCommandDefault{\textasciitilde}{\~{}}
209 \DeclareTextCommandDefault{\textcompwordmark}{\leavevmode\kern\z@}
210 \DeclareTextCommandDefault{\textunderscore}{%
211 \leavevmode \kern.06em\vbox{\hrule\@width.3em}}
212 \DeclareTextCommandDefault{\textvisiblespace}{%
213 \mbox{\kern.06em\vrule \@height.3ex}%
214 \vbox{\hrule \@width.3em}%
215 \hbox{\vrule \@height.3ex}}
216 \DeclareTextCommandDefault{\textellipsis}{%
217 .\kern\fontdimen3\font
218 .\kern\fontdimen3\font
219 .\kern\fontdimen3\font}
220 \DeclareTextCommandDefault{\textregistered}{\textcircled{\scshape r}}
221 \DeclareTextCommandDefault{\texttrademark}{\textsuperscript{TM}}
222 \DeclareTextCommandDefault{\SS}{SS}

19.2.5 Math material

Some commands can be used in both text and math mode:

223 \DeclareRobustCommand{\$}{\ifmmode\mathdollar\else\textdollar\fi}
224 \DeclareRobustCommand{\{}{\ifmmode\lbrace\else\textbraceleft\fi}
225 \DeclareRobustCommand{\}}{\ifmmode\rbrace\else\textbraceright\fi}
226 \DeclareRobustCommand{\P}{\ifmmode\mathparagraph\else\textparagraph\fi}
227 \DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi}
228 \DeclareRobustCommand{\dag}{\ifmmode{\dagger}\else\textdagger\fi}
229 \DeclareRobustCommand{\ddag}{\ifmmode{\ddagger}\else\textdaggerdbl\fi}

For historical reasons \copyright needs {} around the definition in maths.

230 \DeclareRobustCommand{\_}{%
231 \ifmmode\nfss@text{\textunderscore}\else\textunderscore\fi}
232 \DeclareRobustCommand{\copyright}{%
233 \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}

234 \DeclareRobustCommand{\pounds}{%
235 \ifmmode\mathsterling\else\textsterling\fi}
236 \DeclareRobustCommand{\dots}{%
237 \ifmmode\mathellipsis\else\textellipsis\fi}
238 \let\ldots\dots

239 ⟨/2ekernel | autoload⟩

19.3 The fontenc package

This package allows authors to specify which encodings they will use. For each encoding FOO, the package looks to see if the encoding FOO has already been declared. If it has not, the file fooenc.def is loaded. The default encoding is set to

 be FOO.

240 ⟨∗package⟩

241 \DeclareOption*{%
242 \let\encodingdefault\CurrentOption
243 \edef\reserved@f{%
244  \lowercase{\def\noexpand\reserved@f{\CurrentOption enc.def}}}%
245 \reserved@f
246 \InputIfFileExists\reserved@f
247  {}{\PackageError{fontenc}%
248  {Encoding file `\reserved@f' not found.%
249  \MessageBreak
250  You might have misspelt the name of the encoding}%
251  {Necessary code for this encoding was not
252  loaded.\MessageBreak
253  Thus calling the encoding later on will
254  produce further error messages.}}%
255 \let\reserved@f\relax}
256 \ProcessOptions*
257 \fontencoding\encodingdefault\selectfont

258 ⟨/package⟩

19.4 Definitions for the OT1 encoding

The definitions for the ‘TEX text’ (OT1) encoding.

Declare the encoding.

259 ⟨∗OT1⟩

260 \DeclareFontEncoding{OT1}{}{}

Declare the accents.

261 \DeclareTextAccent{\"}{OT1}{127}
262 \DeclareTextAccent{\'}{OT1}{19}
263 \DeclareTextAccent{\.}{OT1}{95}
264 \DeclareTextAccent{\=}{OT1}{22}
265 \DeclareTextAccent{\^}{OT1}{94}
266 \DeclareTextAccent{\`}{OT1}{18}

267 \DeclareTextAccent{\~}{OT1}{126}
268 \DeclareTextAccent{\H}{OT1}{125}
269 \DeclareTextAccent{\u}{OT1}{21}
270 \DeclareTextAccent{\v}{OT1}{20}
271 \DeclareTextAccent{\r}{OT1}{23}

Some accents have to be built by hand: Note that \ooalign and \o@lign must be inside a group.

272 \DeclareTextCommand{\b}{OT1}[1]
273 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
274  \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
275 \DeclareTextCommand{\c}{OT1}[1]
276 {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
277  \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
278 \DeclareTextCommand{\d}{OT1}[1]
279 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}

Declare the text symbols.

280 \DeclareTextSymbol{\AE}{OT1}{29}
281 \DeclareTextSymbol{\OE}{OT1}{30}
282 \DeclareTextSymbol{\O}{OT1}{31}
283 \DeclareTextSymbol{\ae}{OT1}{26}
284 \DeclareTextSymbol{\i}{OT1}{16}
285 \DeclareTextSymbol{\j}{OT1}{17}
286 \DeclareTextSymbol{\oe}{OT1}{27}
287 \DeclareTextSymbol{\o}{OT1}{28}
288 \DeclareTextSymbol{\ss}{OT1}{25}
289 \DeclareTextSymbol{\textemdash}{OT1}{124}
290 \DeclareTextSymbol{\textendash}{OT1}{123}
291 \DeclareTextSymbol{\textexclamdown}{OT1}{60}
292 %\DeclareTextSymbol{\texthyphenchar}{OT1}{`\-}
293 %\DeclareTextSymbol{\texthyphen}{OT1}{`\-}
294 \DeclareTextSymbol{\textquestiondown}{OT1}{62}
295 \DeclareTextSymbol{\textquotedblleft}{OT1}{92}
296 \DeclareTextSymbol{\textquotedblright}{OT1}{`\"}
297 \DeclareTextSymbol{\textquoteleft}{OT1}{`\`}
298 \DeclareTextSymbol{\textquoteright}{OT1}{`\'}

Some symbols which are faked from others:

299 % \DeclareTextCommand{\aa}{OT1}
300 %    {{\accent23a}}
301 \DeclareTextCommand{\L}{OT1}
302 {\leavevmode\setbox\z@\hbox{L}\hb@xt@\wd\z@{\hss\@xxxii L}}
303 \DeclareTextCommand{\l}{OT1}
304 {{\@xxxii l}}
305 % \DeclareTextCommand{\AA}{OT1}
306 %    {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex%
307 %     \rlap{\raise.67\dimen@\hbox{\char23}}A}

In the OT1 encoding Å has a hand-crafted defintion, so we have here the first

 recorded explicit use of \DeclareTextCompositeCommand.

308 \DeclareTextCompositeCommand{\r}{OT1}{A}
309 {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex%
310  \rlap{\raise.67\dimen@\hbox{\char23}}A}

In the OT1 encoding, £ and $ share a slot.

311 \DeclareTextCommand{\textdollar}{OT1}{{%
312 \ifdim \fontdimen\@ne\font >\z@
313  \slshape
314 \else
315  \upshape
316 \fi
317 \char`\$}}
318 \DeclareTextCommand{\textsterling}{OT1}{{%
319 \ifdim \fontdimen\@ne\font >\z@
320  \itshape
321 \else
322  \fontshape{ui}\selectfont
323 \fi
324 \char`\$}}

325 ⟨/OT1⟩

19.5 Definitions for the T1 encoding

The definitions for the ‘Extended TEX text’ (T1) encoding.

Declare the encoding.

326 ⟨∗T1⟩

327 \DeclareFontEncoding{T1}{}{}

Declare the accents.

328 \DeclareTextAccent{\`}{T1}{0}
329 \DeclareTextAccent{\'}{T1}{1}
330 \DeclareTextAccent{\^}{T1}{2}
331 \DeclareTextAccent{\~}{T1}{3}
332 \DeclareTextAccent{\"}{T1}{4}
333 \DeclareTextAccent{\H}{T1}{5}
334 \DeclareTextAccent{\r}{T1}{6}
335 \DeclareTextAccent{\v}{T1}{7}
336 \DeclareTextAccent{\u}{T1}{8}
337 \DeclareTextAccent{\=}{T1}{9}
338 \DeclareTextAccent{\.}{T1}{10}

Some accents have to be built by hand. Note that \ooalign and \o@lign must be inside a group.

339 \DeclareTextCommand{\b}{T1}[1]
340 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
341  \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}}}
342 \DeclareTextCommand{\c}{T1}[1]
343 {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1%
344  \else{\ooalign{\hidewidth\char11\hidewidth

345  \crcr\unhbox\z@}}\fi}
346 \DeclareTextCommand{\d}{T1}[1]
347 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}
348 \DeclareTextCommand{\k}{T1}[1]
349 {\oalign{\null#1\crcr\hidewidth\char12}}

Some symbols are constructed.

Slot 24 contains a small circle intended for construction of these two glyphs.

350 \DeclareTextCommand{\textperthousand}{T1}
351 {\%\char 24 }          % space or `relax as delimiter?
352 \DeclareTextCommand{\textpertenthousand}{T1}
353 {\%\char 24\char 24 }  % space or `relax as delimiter?

Declare the text symbols.

354 %\DeclareTextSymbol{\AA}{T1}{197}
355 \DeclareTextSymbol{\AE}{T1}{198}
356 \DeclareTextSymbol{\DH}{T1}{208}
357 \DeclareTextSymbol{\DJ}{T1}{208}
358 \DeclareTextSymbol{\L}{T1}{138}
359 \DeclareTextSymbol{\NG}{T1}{141}
360 \DeclareTextSymbol{\OE}{T1}{215}
361 \DeclareTextSymbol{\O}{T1}{216}
362 \DeclareTextSymbol{\SS}{T1}{223}
363 \DeclareTextSymbol{\TH}{T1}{222}
364 %\DeclareTextSymbol{\aa}{T1}{229}
365 \DeclareTextSymbol{\ae}{T1}{230}
366 \DeclareTextSymbol{\dh}{T1}{240}
367 \DeclareTextSymbol{\dj}{T1}{158}
368 \DeclareTextSymbol{\guillemotleft}{T1}{19}
369 \DeclareTextSymbol{\guillemotright}{T1}{20}
370 \DeclareTextSymbol{\guilsinglleft}{T1}{14}
371 \DeclareTextSymbol{\guilsinglright}{T1}{15}
372 \DeclareTextSymbol{\i}{T1}{25}
373 \DeclareTextSymbol{\j}{T1}{26}
374 \DeclareTextSymbol{\l}{T1}{170}
375 \DeclareTextSymbol{\ng}{T1}{173}
376 \DeclareTextSymbol{\oe}{T1}{247}
377 \DeclareTextSymbol{\o}{T1}{248}
378 \DeclareTextSymbol{\quotedblbase}{T1}{18}
379 \DeclareTextSymbol{\quotesinglbase}{T1}{13}
380 \DeclareTextSymbol{\ss}{T1}{255}
381 \DeclareTextSymbol{\textasciicircum}{T1}{`\^}
382 \DeclareTextSymbol{\textasciitilde}{T1}{`\~}
383 \DeclareTextSymbol{\textbackslash}{T1}{`\\}
384 \DeclareTextSymbol{\textbar}{T1}{`\|}
385 \DeclareTextSymbol{\textbraceleft}{T1}{`\{}
386 \DeclareTextSymbol{\textbraceright}{T1}{`\}}
387 \DeclareTextSymbol{\textcompwordmark}{T1}{23}
388 \DeclareTextSymbol{\textdollar}{T1}{`\$}
389 \DeclareTextSymbol{\textemdash}{T1}{22}

390 \DeclareTextSymbol{\textendash}{T1}{21}
391 \DeclareTextSymbol{\textexclamdown}{T1}{189}
392 \DeclareTextSymbol{\textgreater}{T1}{`\>}
393 %\DeclareTextSymbol{\texthyphenchar}{T1}{127}
394 %\DeclareTextSymbol{\texthyphen}{T1}{`\-}
395 \DeclareTextSymbol{\textless}{T1}{`\<}
396 \DeclareTextSymbol{\textquestiondown}{T1}{190}
397 \DeclareTextSymbol{\textquotedblleft}{T1}{16}
398 \DeclareTextSymbol{\textquotedblright}{T1}{17}
399 \DeclareTextSymbol{\textquotedbl}{T1}{`\"}
400 \DeclareTextSymbol{\textquoteleft}{T1}{`\`}
401 \DeclareTextSymbol{\textquoteright}{T1}{`\'}
402 \DeclareTextSymbol{\textsection}{T1}{159}
403 \DeclareTextSymbol{\textsterling}{T1}{191}
404 \DeclareTextSymbol{\textunderscore}{T1}{95}
405 \DeclareTextSymbol{\textvisiblespace}{T1}{32}
406 \DeclareTextSymbol{\th}{T1}{254}

Declare the composites.

407 \DeclareTextComposite{\.}{T1}{i}{`\i}

”80 = 128

408 \DeclareTextComposite{\u}{T1}{A}{128}
409 \DeclareTextComposite{\k}{T1}{A}{129}
410 \DeclareTextComposite{\'}{T1}{C}{130}
411 \DeclareTextComposite{\v}{T1}{C}{131}
412 \DeclareTextComposite{\v}{T1}{D}{132}
413 \DeclareTextComposite{\v}{T1}{E}{133}
414 \DeclareTextComposite{\k}{T1}{E}{134}
415 \DeclareTextComposite{\u}{T1}{G}{135}

”88 = 136

416 \DeclareTextComposite{\'}{T1}{L}{136}
417 \DeclareTextComposite{\v}{T1}{L}{137}
418 \DeclareTextComposite{\'}{T1}{N}{139}
419 \DeclareTextComposite{\v}{T1}{N}{140}
420 \DeclareTextComposite{\H}{T1}{O}{142}
421 \DeclareTextComposite{\'}{T1}{R}{143}

”90 = 144

422 \DeclareTextComposite{\v}{T1}{R}{144}
423 \DeclareTextComposite{\'}{T1}{S}{145}
424 \DeclareTextComposite{\v}{T1}{S}{146}
425 \DeclareTextComposite{\c}{T1}{S}{147}
426 \DeclareTextComposite{\v}{T1}{T}{148}
427 \DeclareTextComposite{\c}{T1}{T}{149}
428 \DeclareTextComposite{\H}{T1}{U}{150}
429 \DeclareTextComposite{\r}{T1}{U}{151}

”98 = 152

430 \DeclareTextComposite{\"}{T1}{Y}{152}
431 \DeclareTextComposite{\'}{T1}{Z}{153}

432 \DeclareTextComposite{\v}{T1}{Z}{154}
433 \DeclareTextComposite{\.}{T1}{Z}{155}
434 \DeclareTextComposite{\.}{T1}{I}{157}

”A0 = 160

435 \DeclareTextComposite{\u}{T1}{a}{160}
436 \DeclareTextComposite{\k}{T1}{a}{161}
437 \DeclareTextComposite{\'}{T1}{c}{162}
438 \DeclareTextComposite{\v}{T1}{c}{163}
439 \DeclareTextComposite{\v}{T1}{d}{164}
440 \DeclareTextComposite{\v}{T1}{e}{165}
441 \DeclareTextComposite{\k}{T1}{e}{166}
442 \DeclareTextComposite{\u}{T1}{g}{167}

”A8 = 168

443 \DeclareTextComposite{\'}{T1}{l}{168}
444 \DeclareTextComposite{\v}{T1}{l}{169}
445 \DeclareTextComposite{\'}{T1}{n}{171}
446 \DeclareTextComposite{\v}{T1}{n}{172}
447 \DeclareTextComposite{\H}{T1}{o}{174}
448 \DeclareTextComposite{\'}{T1}{r}{175}

”B0 = 176

449 \DeclareTextComposite{\v}{T1}{r}{176}
450 \DeclareTextComposite{\'}{T1}{s}{177}
451 \DeclareTextComposite{\v}{T1}{s}{178}
452 \DeclareTextComposite{\c}{T1}{s}{179}
453 \DeclareTextComposite{\v}{T1}{t}{180}
454 \DeclareTextComposite{\c}{T1}{t}{181}
455 \DeclareTextComposite{\H}{T1}{u}{182}
456 \DeclareTextComposite{\r}{T1}{u}{183}

”B8 = 184

457 \DeclareTextComposite{\"}{T1}{y}{184}
458 \DeclareTextComposite{\'}{T1}{z}{185}
459 \DeclareTextComposite{\v}{T1}{z}{186}
460 \DeclareTextComposite{\.}{T1}{z}{187}

”C0 = 192

461 \DeclareTextComposite{\`}{T1}{A}{192}
462 \DeclareTextComposite{\'}{T1}{A}{193}
463 \DeclareTextComposite{\^}{T1}{A}{194}
464 \DeclareTextComposite{\~}{T1}{A}{195}
465 \DeclareTextComposite{\"}{T1}{A}{196}
466 \DeclareTextComposite{\r}{T1}{A}{197}
467 \DeclareTextComposite{\c}{T1}{C}{199}

”C8 = 200

468 \DeclareTextComposite{\`}{T1}{E}{200}
469 \DeclareTextComposite{\'}{T1}{E}{201}
470 \DeclareTextComposite{\^}{T1}{E}{202}
471 \DeclareTextComposite{\"}{T1}{E}{203}

472 \DeclareTextComposite{\`}{T1}{I}{204}
473 \DeclareTextComposite{\'}{T1}{I}{205}
474 \DeclareTextComposite{\^}{T1}{I}{206}
475 \DeclareTextComposite{\"}{T1}{I}{207}

”D0 = 208

476 \DeclareTextComposite{\~}{T1}{N}{209}
477 \DeclareTextComposite{\`}{T1}{O}{210}
478 \DeclareTextComposite{\'}{T1}{O}{211}
479 \DeclareTextComposite{\^}{T1}{O}{212}
480 \DeclareTextComposite{\~}{T1}{O}{213}
481 \DeclareTextComposite{\"}{T1}{O}{214}

”D8 = 216

482 \DeclareTextComposite{\`}{T1}{U}{217}
483 \DeclareTextComposite{\'}{T1}{U}{218}
484 \DeclareTextComposite{\^}{T1}{U}{219}
485 \DeclareTextComposite{\"}{T1}{U}{220}
486 \DeclareTextComposite{\'}{T1}{Y}{221}

”E0 = 224

487 \DeclareTextComposite{\`}{T1}{a}{224}
488 \DeclareTextComposite{\'}{T1}{a}{225}
489 \DeclareTextComposite{\^}{T1}{a}{226}
490 \DeclareTextComposite{\~}{T1}{a}{227}
491 \DeclareTextComposite{\"}{T1}{a}{228}
492 \DeclareTextComposite{\r}{T1}{a}{229}
493 \DeclareTextComposite{\c}{T1}{c}{231}

”E8 = 232

494 \DeclareTextComposite{\`}{T1}{e}{232}
495 \DeclareTextComposite{\'}{T1}{e}{233}
496 \DeclareTextComposite{\^}{T1}{e}{234}
497 \DeclareTextComposite{\"}{T1}{e}{235}
498 \DeclareTextComposite{\`}{T1}{i}{236}
499 \DeclareTextComposite{\`}{T1}{\i}{236}
500 \DeclareTextComposite{\'}{T1}{i}{237}
501 \DeclareTextComposite{\'}{T1}{\i}{237}
502 \DeclareTextComposite{\^}{T1}{i}{238}
503 \DeclareTextComposite{\^}{T1}{\i}{238}
504 \DeclareTextComposite{\"}{T1}{i}{239}
505 \DeclareTextComposite{\"}{T1}{\i}{239}

”F0 = 240

506 \DeclareTextComposite{\~}{T1}{n}{241}
507 \DeclareTextComposite{\`}{T1}{o}{242}
508 \DeclareTextComposite{\'}{T1}{o}{243}
509 \DeclareTextComposite{\^}{T1}{o}{244}
510 \DeclareTextComposite{\~}{T1}{o}{245}
511 \DeclareTextComposite{\"}{T1}{o}{246}

”F8 = 248

512 \DeclareTextComposite{\`}{T1}{u}{249}
513 \DeclareTextComposite{\'}{T1}{u}{250}
514 \DeclareTextComposite{\^}{T1}{u}{251}
515 \DeclareTextComposite{\"}{T1}{u}{252}
516 \DeclareTextComposite{\'}{T1}{y}{253}

517 ⟨/T1⟩

19.6 Definitions for the OMS encoding

The definitions for the ‘TEX math symbol’ (OMS) encoding. Even though this is meant to be a math font, it includes some of the standard L^{A}TEX text symbols.

Declare the encoding.

518 ⟨∗OMS⟩

519 \DeclareFontEncoding{OMS}{}{}

Declare the symbols.

520 \DeclareTextSymbol{\textasteriskcentered}{OMS}{3}   % "03
521 \DeclareTextSymbol{\textbackslash}{OMS}{110}        % "6E
522 \DeclareTextSymbol{\textbar}{OMS}{106}              % "6A
523 \DeclareTextSymbol{\textbraceleft}{OMS}{102}        % "66
524 \DeclareTextSymbol{\textbraceright}{OMS}{103}       % "67
525 \DeclareTextSymbol{\textbullet}{OMS}{15}            % "0F
526 \DeclareTextSymbol{\textdaggerdbl}{OMS}{122}        % "7A
527 \DeclareTextSymbol{\textdagger}{OMS}{121}           % "79
528 \DeclareTextSymbol{\textparagraph}{OMS}{123}        % "7B
529 \DeclareTextSymbol{\textperiodcentered}{OMS}{1}     % "01
530 \DeclareTextSymbol{\textsection}{OMS}{120}          % "78
531 \DeclareTextCommand{\textcircled}{OMS}[1]{{%
532 \ooalign{%
533  \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr
534  \char 13 % "0D

535 }% 536 }} 537 ⟨/OMS⟩

19.7 Definitions for the OML encoding

The definitions for the ‘TEX math italic’ (OML) encoding. Even though this is meant to be a math font, it includes some of the standard L^{A}TEX text symbols.

Declare the encoding.

538 ⟨∗OML⟩

539 \DeclareFontEncoding{OML}{}{}

Declare the symbols.

540 \DeclareTextSymbol{\textless}{OML}{`\<}
541 \DeclareTextSymbol{\textgreater}{OML}{`\>}
542 \DeclareTextAccent{\t}{OML}{127}  % "7F

543 ⟨/OML⟩

19.8 Definitions for the OT4 encoding

These definitions are for the Polish extension to the ‘TEX text’ (OT1) encoding. This encoding was created by B. Jackowski and M. Ryćko for use with the Polish version of Computer Modern and Computer Concrete. In positions 0–127 it is identical to OT1 but it contains some additional characters in the upper half. The L^{A}TEX support was developed by Mariusz Olko.

The PL fonts that use it are available as follows:

 Metafont sources ftp://ftp.gust.org.pl/TeX/language/polish/pl-mf.zip;
    Font files ftp://ftp.gust.org.pl/TeX/language/polish/pl-tfm.zip.

Declare the encoding.

544 ⟨∗OT4⟩

545 \DeclareFontEncoding{OT4}{}{}
546 \DeclareFontSubstitution{OT4}{cmr}{m}{n}

Declare the accents.

547 \DeclareTextAccent{\"}{OT4}{127}
548 \DeclareTextAccent{\'}{OT4}{19}
549 \DeclareTextAccent{\.}{OT4}{95}
550 \DeclareTextAccent{\=}{OT4}{22}
551 \DeclareTextAccent{\^}{OT4}{94}
552 \DeclareTextAccent{\`}{OT4}{18}
553 \DeclareTextAccent{\~}{OT4}{126}
554 \DeclareTextAccent{\H}{OT4}{125}
555 \DeclareTextAccent{\u}{OT4}{21}
556 \DeclareTextAccent{\v}{OT4}{20}
557 \DeclareTextAccent{\r}{OT4}{23}

The ogonek accent is available only under a e A & E. But we have to provide some definition for \k. Some other accents have to be built by hand as in OT1:

558 \DeclareTextCommand{\k}{OT4}[1]{%
559  \TextSymbolUnavailable{\k{#1}}#1}
560 \DeclareTextCommand{\b}{OT4}[1]
561 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
562  \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}
563 \DeclareTextCommand{\c}{OT4}[1]
564 {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
565  \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
566 \DeclareTextCommand{\d}{OT4}[1]
567 {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}

Declare the text symbols.

568 \DeclareTextSymbol{\AE}{OT4}{29}
569 \DeclareTextSymbol{\OE}{OT4}{30}
570 \DeclareTextSymbol{\O}{OT4}{31}
571 \DeclareTextSymbol{\L}{OT4}{138}
572 \DeclareTextSymbol{\ae}{OT4}{26}
573 \DeclareTextSymbol{\guillemotleft}{OT4}{174}
574 \DeclareTextSymbol{\guillemotright}{OT4}{175}
575 \DeclareTextSymbol{\i}{OT4}{16}

576 \DeclareTextSymbol{\j}{OT4}{17}
577 \DeclareTextSymbol{\l}{OT4}{170}
578 \DeclareTextSymbol{\o}{OT4}{28}
579 \DeclareTextSymbol{\oe}{OT4}{27}
580 \DeclareTextSymbol{\quotedblbase}{OT4}{255}
581 \DeclareTextSymbol{\ss}{OT4}{25}
582 \DeclareTextSymbol{\textemdash}{OT4}{124}
583 \DeclareTextSymbol{\textendash}{OT4}{123}
584 \DeclareTextSymbol{\textexclamdown}{OT4}{60}
585 %\DeclareTextSymbol{\texthyphenchar}{OT4}{`\-}
586 %\DeclareTextSymbol{\texthyphen}{OT4}{`\-}
587 \DeclareTextSymbol{\textquestiondown}{OT4}{62}
588 \DeclareTextSymbol{\textquotedblleft}{OT4}{92}
589 \DeclareTextSymbol{\textquotedblright}{OT4}{`\"}
590 \DeclareTextSymbol{\textquoteleft}{OT4}{`\`}
591 \DeclareTextSymbol{\textquoteright}{OT4}{`\'}

Definition for Å as in OT1:

592 \DeclareTextCompositeCommand{\r}{OT4}{A}
593 {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex%
594  \rlap{\raise.67\dimen@\hbox{\char23}}A}

In the OT4 encoding, £ and $ share a slot.

595 \DeclareTextCommand{\textdollar}{OT4}{{%
596 \ifdim \fontdimen\@ne\font >\z@
597  \slshape
598 \else
599  \upshape
600 \fi
601 \char`\$}}
602 \DeclareTextCommand{\textsterling}{OT4}{{%
603 \ifdim \fontdimen\@ne\font >\z@
604  \itshape
605 \else
606  \fontshape{ui}\selectfont
607 \fi
608 \char`\$}}

Declare the composites.

609 \DeclareTextComposite{\k}{OT4}{A}{129}
610 \DeclareTextComposite{\'}{OT4}{C}{130}
611 \DeclareTextComposite{\k}{OT4}{E}{134}
612 \DeclareTextComposite{\'}{OT4}{N}{139}
613 \DeclareTextComposite{\'}{OT4}{S}{145}
614 \DeclareTextComposite{\'}{OT4}{Z}{153}
615 \DeclareTextComposite{\.}{OT4}{Z}{155}
616 \DeclareTextComposite{\k}{OT4}{a}{161}
617 \DeclareTextComposite{\'}{OT4}{c}{162}
618 \DeclareTextComposite{\k}{OT4}{e}{166}
619 \DeclareTextComposite{\'}{OT4}{n}{171}
620 \DeclareTextComposite{\'}{OT4}{s}{177}

621 \DeclareTextComposite{\'}{OT4}{z}{185}
622 \DeclareTextComposite{\.}{OT4}{z}{187}
623 \DeclareTextComposite{\'}{OT4}{O}{211}
624 \DeclareTextComposite{\'}{OT4}{o}{243}

625 ⟨/OT4⟩

626 ⟨∗TS1⟩

627 \DeclareFontEncoding{TS1}{}{}
628 \DeclareFontSubstitution{TS1}{cmr}{m}{n}

Some accents have to be built by hand. Note that \ooalign and \o@lign must be inside a group.

629 \DeclareTextCommand{\capitalcedilla}{TS1}[1]
630 {{\ooalign{\null#1\crcr\hidewidth\char11\hidewidth}}}
631 \DeclareTextCommand{\capitalogonek}{TS1}[1]
632 {{\ooalign{\null#1\crcr\hidewidth\char12\hidewidth}}}

Accents for capital letters.

These commands can be used by the end user either directly or through definitions of the type

  \DeclareTextCompositeCommand{\'}{T1}{X}{\capitalacute X}

None of the latter definitions are provided by default, since they are probably rarely used.

”00 = 0

633 \DeclareTextAccent{\capitalgrave}{TS1}{0}
634 \DeclareTextAccent{\capitalacute}{TS1}{1}
635 \DeclareTextAccent{\capitalcircumflex}{TS1}{2}
636 \DeclareTextAccent{\capitaltilde}{TS1}{3}
637 \DeclareTextAccent{\capitaldieresis}{TS1}{4}
638 \DeclareTextAccent{\capitalhungarumlaut}{TS1}{5}
639 \DeclareTextAccent{\capitalring}{TS1}{6}
640 \DeclareTextAccent{\capitalcaron}{TS1}{7}

”08 = 8

641 \DeclareTextAccent{\capitalbreve}{TS1}{8}
642 \DeclareTextAccent{\capitalmacron}{TS1}{9}
643 \DeclareTextAccent{\capitaldotaccent}{TS1}{10}

Tie accents.

The tie accent was borrowed from the cmsy font. The tc fonts now provide four tie accents, the first two are done in the classical way with assymetric glyphs hanging out of their boxes; the new ties are centered in their boxes like all other accents. They need a name: please tell us if you know what to call them.

” =

644 \DeclareTextAccent{\t}{TS1}{26}
645 \DeclareTextAccent{\capitaltie}{TS1}{27}
646 \DeclareTextAccent{\newtie}{TS1}{28}
647 \DeclareTextAccent{\capitalnewtie}{TS1}{29}

Compund word marks.

The text companion fonts contain two compound word marks of different heights, one has cap_height, the other asc_height.

648 \DeclareTextSymbol{\textcapitalcompwordmark}{TS1}{23}
649 \DeclareTextSymbol{\textascendercompwordmark}{TS1}{31}

The text companion symbols.

650 \DeclareTextSymbol{\textquotestraightbase}{TS1}{13}

”10 = 16

651 \DeclareTextSymbol{\textquotestraightdblbase}{TS1}{18}
652 \DeclareTextSymbol{\texttwelveudash}{TS1}{21}
653 \DeclareTextSymbol{\textthreequartersemdash}{TS1}{22}

”18 = 24

654 \DeclareTextSymbol{\textleftarrow}{TS1}{24}
655 \DeclareTextSymbol{\textrightarrow}{TS1}{25}

”20 = 32

656 \DeclareTextSymbol{\textblank}{TS1}{32}
657 \DeclareTextSymbol{\textdollar}{TS1}{36}
658 \DeclareTextSymbol{\textquotesingle}{TS1}{39}

”28 = 40

659 \DeclareTextSymbol{\textasteriskcentered}{TS1}{42}

Note that ’054 is a comma and ’056 is a full stop: these make numbers using oldstyle digits easier to input.

660 \DeclareTextSymbol{\textdblhyphen}{TS1}{45}
661 \DeclareTextSymbol{\textfractionsolidus}{TS1}{47}

Oldstyle digits.

”30 = 48

662 \DeclareTextSymbol{\textzerooldstyle}{TS1}{48}
663 \DeclareTextSymbol{\textoneoldstyle}{TS1}{49}
664 \DeclareTextSymbol{\texttwooldstyle}{TS1}{50}
665 \DeclareTextSymbol{\textthreeoldstyle}{TS1}{51}
666 \DeclareTextSymbol{\textfouroldstyle}{TS1}{52}
667 \DeclareTextSymbol{\textfiveoldstyle}{TS1}{53}
668 \DeclareTextSymbol{\textsixoldstyle}{TS1}{54}
669 \DeclareTextSymbol{\textsevenoldstyle}{TS1}{55}

”38 = 56

670 \DeclareTextSymbol{\texteightoldstyle}{TS1}{56}
671 \DeclareTextSymbol{\textnineoldstyle}{TS1}{57}

More text companion symbols.

672 \DeclareTextSymbol{\textlangle}{TS1}{60}
673 \DeclareTextSymbol{\textminus}{TS1}{61}
674 \DeclareTextSymbol{\textrangle}{TS1}{62}

”48 = 72

675 \DeclareTextSymbol{\textmho}{TS1}{77}

The big circle is here to define the command . ◯ Formerly it was taken from the cmsy font.

676 \DeclareTextSymbol{\textbigcircle}{TS1}{79}
677 \DeclareTextCommand{\textcircled}{TS1}[1]{{%
678 \ooalign{%
679  \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr
680  \char 79   % '117 = "4F

681 }% 682 }}

More text companion symbols.

”50 = 80

683 \DeclareTextSymbol{\textohm}{TS1}{87}

”58 = 88

684 \DeclareTextSymbol{\textlbrackdbl}{TS1}{91}
685 \DeclareTextSymbol{\textrbrackdbl}{TS1}{93}
686 \DeclareTextSymbol{\textuparrow}{TS1}{94}
687 \DeclareTextSymbol{\textdownarrow}{TS1}{95}

”60 = 96

688 \DeclareTextSymbol{\textasciigrave}{TS1}{96}
689 \DeclareTextSymbol{\textborn}{TS1}{98}
690 \DeclareTextSymbol{\textdivorced}{TS1}{99}
691 \DeclareTextSymbol{\textdied}{TS1}{100}

”68 = 104

692 \DeclareTextSymbol{\textleaf}{TS1}{108}
693 \DeclareTextSymbol{\textmarried}{TS1}{109}
694 \DeclareTextSymbol{\textmusicalnote}{TS1}{110}

”78 = 120

695 \DeclareTextSymbol{\texttildelow}{TS1}{126}

This glyph, \textdblhyphenchar is hanging, like the hyphenchar of the ec fonts.

696 \DeclareTextSymbol{\textdblhyphenchar}{TS1}{127}

”80 = 128

697 \DeclareTextSymbol{\textasciibreve}{TS1}{128}
698 \DeclareTextSymbol{\textasciicaron}{TS1}{129}

This next glyph is not the same as \textquotedbl.

699 \DeclareTextSymbol{\textgravedbl}{TS1}{130}
700 \DeclareTextSymbol{\textacutedbl}{TS1}{131}
701 \DeclareTextSymbol{\textdagger}{TS1}{132}
702 \DeclareTextSymbol{\textdaggerdbl}{TS1}{133}
703 \DeclareTextSymbol{\textbardbl}{TS1}{134}
704 \DeclareTextSymbol{\textperthousand}{TS1}{135}

”88 = 136

705 \DeclareTextSymbol{\textbullet}{TS1}{136}
706 \DeclareTextSymbol{\textcelsius}{TS1}{137}
707 \DeclareTextSymbol{\textdollaroldstyle}{TS1}{138}
708 \DeclareTextSymbol{\textcentoldstyle}{TS1}{139}
709 \DeclareTextSymbol{\textflorin}{TS1}{140}
710 \DeclareTextSymbol{\textcolonmonetary}{TS1}{141}
711 \DeclareTextSymbol{\textwon}{TS1}{142}
712 \DeclareTextSymbol{\textnaira}{TS1}{143}

”90 = 144

713 \DeclareTextSymbol{\textguarani}{TS1}{144}
714 \DeclareTextSymbol{\textpeso}{TS1}{145}
715 \DeclareTextSymbol{\textlira}{TS1}{146}
716 \DeclareTextSymbol{\textrecipe}{TS1}{147}
717 \DeclareTextSymbol{\textinterrobang}{TS1}{148}
718 \DeclareTextSymbol{\textinterrobangdown}{TS1}{149}
719 \DeclareTextSymbol{\textdong}{TS1}{150}
720 \DeclareTextSymbol{\texttrademark}{TS1}{151}

”98 = 152

721 \DeclareTextSymbol{\textpertenthousand}{TS1}{152}
722 \DeclareTextSymbol{\textpilcrow}{TS1}{153}
723 \DeclareTextSymbol{\textbaht}{TS1}{154}
724 \DeclareTextSymbol{\textnumero}{TS1}{155}

This next name may change. For the following sign we know only a german name, which is abzüglich. The meaning is something like “commercial minus”. An ASCII ersatz is ./. (dot slash dot). The temporary English name is \textdiscount.

725 \DeclareTextSymbol{\textdiscount}{TS1}{156}
726 \DeclareTextSymbol{\textestimated}{TS1}{157}
727 \DeclareTextSymbol{\textopenbullet}{TS1}{158}
728 \DeclareTextSymbol{\textservicemark}{TS1}{159}

”A0 = 160

729 \DeclareTextSymbol{\textlquill}{TS1}{160}
730 \DeclareTextSymbol{\textrquill}{TS1}{161}
731 \DeclareTextSymbol{\textcent}{TS1}{162}
732 \DeclareTextSymbol{\textsterling}{TS1}{163}
733 \DeclareTextSymbol{\textcurrency}{TS1}{164}
734 \DeclareTextSymbol{\textyen}{TS1}{165}
735 \DeclareTextSymbol{\textbrokenbar}{TS1}{166}
736 \DeclareTextSymbol{\textsection}{TS1}{167}

”A8 = 168

737 \DeclareTextSymbol{\textasciidieresis}{TS1}{168}
738 \DeclareTextSymbol{\textcopyright}{TS1}{169}
739 \DeclareTextSymbol{\textordfeminine}{TS1}{170}
740 \DeclareTextSymbol{\textcopyleft}{TS1}{171}
741 \DeclareTextSymbol{\textlnot}{TS1}{172}

The meaning of the circled-P is “sound recording copyright”.

742 \DeclareTextSymbol{\textcircledP}{TS1}{173}
743 \DeclareTextSymbol{\textregistered}{TS1}{174}
744 \DeclareTextSymbol{\textmacron}{TS1}{175}

”B0 = 176

745 \DeclareTextSymbol{\textdegree}{TS1}{176}
746 \DeclareTextSymbol{\textpm}{TS1}{177}
747 \DeclareTextSymbol{\texttwosuperior}{TS1}{178}
748 \DeclareTextSymbol{\textthreesuperior}{TS1}{179}
749 \DeclareTextSymbol{\textasciiacute}{TS1}{180}
750 \DeclareTextSymbol{\textmu}{TS1}{181} % micro sign
751 \DeclareTextSymbol{\textparagraph}{TS1}{182}
752 \DeclareTextSymbol{\textperiodcentered}{TS1}{183}

”B8 = 184

753 \DeclareTextSymbol{\textreferencemark}{TS1}{184}
754 \DeclareTextSymbol{\textonesuperior}{TS1}{185}
755 \DeclareTextSymbol{\textordmasculine}{TS1}{186}
756 \DeclareTextSymbol{\textsurd}{TS1}{187}
757 \DeclareTextSymbol{\textonequarter}{TS1}{188}
758 \DeclareTextSymbol{\textonehalf}{TS1}{189}
759 \DeclareTextSymbol{\textthreequarters}{TS1}{190}
760 \DeclareTextSymbol{\texteuro}{TS1}{191}

”E0 = 208

761 \DeclareTextSymbol{\texttimes}{TS1}{214}

”F0 = 240

762 \DeclareTextSymbol{\textdiv}{TS1}{246}

763 ⟨/TS1⟩

20 Package files

This file now also contains some packages that provide access to the more specialised encodings.

This one is for the TS1 encoding which contains text symbols for use with the T1-encoded text fonts. It therefore first inputs the file TS1enc.def and then sets (or resets) the defaults for the symbols it contains. The result of this is that when one of these symbols is accessed and the current encoding does not provide it, the symbol will be supplied by a silent, local change to this encoding.

764 ⟨∗TS1sty⟩

765 \input{ts1enc.def}
766 \DeclareTextAccentDefault{\textcircled}{TS1}
767 \DeclareTextAccentDefault{\capitalcedilla}{TS1}
768 \DeclareTextAccentDefault{\capitalogonek}{TS1}
769 \DeclareTextAccentDefault{\capitalgrave}{TS1}
770 \DeclareTextAccentDefault{\capitalacute}{TS1}

771 \DeclareTextAccentDefault{\capitalcircumflex}{TS1}
772 \DeclareTextAccentDefault{\capitaltilde}{TS1}
773 \DeclareTextAccentDefault{\capitaldieresis}{TS1}
774 \DeclareTextAccentDefault{\capitalhungarumlaut}{TS1}
775 \DeclareTextAccentDefault{\capitalring}{TS1}
776 \DeclareTextAccentDefault{\capitalcaron}{TS1}
777 \DeclareTextAccentDefault{\capitalbreve}{TS1}
778 \DeclareTextAccentDefault{\capitalmacron}{TS1}
779 \DeclareTextAccentDefault{\capitaldotaccent}{TS1}
780 \DeclareTextAccentDefault{\t}{TS1}
781 \DeclareTextAccentDefault{\capitaltie}{TS1}
782 \DeclareTextAccentDefault{\newtie}{TS1}
783 \DeclareTextAccentDefault{\capitalnewtie}{TS1}
784 \DeclareTextSymbolDefault{\textcapitalcompwordmark}{TS1}
785 \DeclareTextSymbolDefault{\textascendercompwordmark}{TS1}
786 \DeclareTextSymbolDefault{\textquotestraightbase}{TS1}
787 \DeclareTextSymbolDefault{\textquotestraightdblbase}{TS1}
788 \DeclareTextSymbolDefault{\texttwelveudash}{TS1}
789 \DeclareTextSymbolDefault{\textthreequartersemdash}{TS1}
790 \DeclareTextSymbolDefault{\textleftarrow}{TS1}
791 \DeclareTextSymbolDefault{\textrightarrow}{TS1}
792 \DeclareTextSymbolDefault{\textblank}{TS1}
793 \DeclareTextSymbolDefault{\textdollar}{TS1}
794 \DeclareTextSymbolDefault{\textquotesingle}{TS1}
795 \DeclareTextSymbolDefault{\textasteriskcentered}{TS1}
796 \DeclareTextSymbolDefault{\textdblhyphen}{TS1}
797 \DeclareTextSymbolDefault{\textfractionsolidus}{TS1}
798 \DeclareTextSymbolDefault{\textzerooldstyle}{TS1}
799 \DeclareTextSymbolDefault{\textoneoldstyle}{TS1}
800 \DeclareTextSymbolDefault{\texttwooldstyle}{TS1}
801 \DeclareTextSymbolDefault{\textthreeoldstyle}{TS1}
802 \DeclareTextSymbolDefault{\textfouroldstyle}{TS1}
803 \DeclareTextSymbolDefault{\textfiveoldstyle}{TS1}
804 \DeclareTextSymbolDefault{\textsixoldstyle}{TS1}
805 \DeclareTextSymbolDefault{\textsevenoldstyle}{TS1}
806 \DeclareTextSymbolDefault{\texteightoldstyle}{TS1}
807 \DeclareTextSymbolDefault{\textnineoldstyle}{TS1}
808 \DeclareTextSymbolDefault{\textlangle}{TS1}
809 \DeclareTextSymbolDefault{\textminus}{TS1}
810 \DeclareTextSymbolDefault{\textrangle}{TS1}
811 \DeclareTextSymbolDefault{\textmho}{TS1}
812 \DeclareTextSymbolDefault{\textbigcircle}{TS1}
813 \DeclareTextSymbolDefault{\textohm}{TS1}
814 \DeclareTextSymbolDefault{\textlbrackdbl}{TS1}
815 \DeclareTextSymbolDefault{\textrbrackdbl}{TS1}
816 \DeclareTextSymbolDefault{\textuparrow}{TS1}
817 \DeclareTextSymbolDefault{\textdownarrow}{TS1}
818 \DeclareTextSymbolDefault{\textasciigrave}{TS1}
819 \DeclareTextSymbolDefault{\textborn}{TS1}

820 \DeclareTextSymbolDefault{\textdivorced}{TS1}
821 \DeclareTextSymbolDefault{\textdied}{TS1}
822 \DeclareTextSymbolDefault{\textleaf}{TS1}
823 \DeclareTextSymbolDefault{\textmarried}{TS1}
824 \DeclareTextSymbolDefault{\textmusicalnote}{TS1}
825 \DeclareTextSymbolDefault{\texttildelow}{TS1}
826 \DeclareTextSymbolDefault{\textdblhyphenchar}{TS1}
827 \DeclareTextSymbolDefault{\textasciibreve}{TS1}
828 \DeclareTextSymbolDefault{\textasciicaron}{TS1}
829 \DeclareTextSymbolDefault{\textgravedbl}{TS1}
830 \DeclareTextSymbolDefault{\textacutedbl}{TS1}
831 \DeclareTextSymbolDefault{\textdagger}{TS1}
832 \DeclareTextSymbolDefault{\textdaggerdbl}{TS1}
833 \DeclareTextSymbolDefault{\textbardbl}{TS1}
834 \DeclareTextSymbolDefault{\textperthousand}{TS1}
835 \DeclareTextSymbolDefault{\textbullet}{TS1}
836 \DeclareTextSymbolDefault{\textcelsius}{TS1}
837 \DeclareTextSymbolDefault{\textdollaroldstyle}{TS1}
838 \DeclareTextSymbolDefault{\textcentoldstyle}{TS1}
839 \DeclareTextSymbolDefault{\textflorin}{TS1}
840 \DeclareTextSymbolDefault{\textcolonmonetary}{TS1}
841 \DeclareTextSymbolDefault{\textwon}{TS1}
842 \DeclareTextSymbolDefault{\textnaira}{TS1}
843 \DeclareTextSymbolDefault{\textguarani}{TS1}
844 \DeclareTextSymbolDefault{\textpeso}{TS1}
845 \DeclareTextSymbolDefault{\textlira}{TS1}
846 \DeclareTextSymbolDefault{\textrecipe}{TS1}
847 \DeclareTextSymbolDefault{\textinterrobang}{TS1}
848 \DeclareTextSymbolDefault{\textinterrobangdown}{TS1}
849 \DeclareTextSymbolDefault{\textdong}{TS1}
850 \DeclareTextSymbolDefault{\texttrademark}{TS1}
851 \DeclareTextSymbolDefault{\textpertenthousand}{TS1}
852 \DeclareTextSymbolDefault{\textpilcrow}{TS1}
853 \DeclareTextSymbolDefault{\textbaht}{TS1}
854 \DeclareTextSymbolDefault{\textnumero}{TS1}
855 \DeclareTextSymbolDefault{\textdiscount}{TS1}
856 \DeclareTextSymbolDefault{\textestimated}{TS1}
857 \DeclareTextSymbolDefault{\textopenbullet}{TS1}
858 \DeclareTextSymbolDefault{\textservicemark}{TS1}
859 \DeclareTextSymbolDefault{\textlquill}{TS1}
860 \DeclareTextSymbolDefault{\textrquill}{TS1}
861 \DeclareTextSymbolDefault{\textcent}{TS1}
862 \DeclareTextSymbolDefault{\textsterling}{TS1}
863 \DeclareTextSymbolDefault{\textcurrency}{TS1}
864 \DeclareTextSymbolDefault{\textyen}{TS1}
865 \DeclareTextSymbolDefault{\textbrokenbar}{TS1}
866 \DeclareTextSymbolDefault{\textsection}{TS1}
867 \DeclareTextSymbolDefault{\textasciidieresis}{TS1}
868 \DeclareTextSymbolDefault{\textcopyright}{TS1}
869 \DeclareTextSymbolDefault{\textordfeminine}{TS1}

870 \DeclareTextSymbolDefault{\textcopyleft}{TS1}
871 \DeclareTextSymbolDefault{\textlnot}{TS1}
872 \DeclareTextSymbolDefault{\textcircledP}{TS1}
873 \DeclareTextSymbolDefault{\textregistered}{TS1}
874 \DeclareTextSymbolDefault{\textmacron}{TS1}
875 \DeclareTextSymbolDefault{\textdegree}{TS1}
876 \DeclareTextSymbolDefault{\textpm}{TS1}
877 \DeclareTextSymbolDefault{\texttwosuperior}{TS1}
878 \DeclareTextSymbolDefault{\textthreesuperior}{TS1}
879 \DeclareTextSymbolDefault{\textasciiacute}{TS1}
880 \DeclareTextSymbolDefault{\textmu}{TS1}
881 \DeclareTextSymbolDefault{\textparagraph}{TS1}
882 \DeclareTextSymbolDefault{\textperiodcentered}{TS1}
883 \DeclareTextSymbolDefault{\textreferencemark}{TS1}
884 \DeclareTextSymbolDefault{\textonesuperior}{TS1}
885 \DeclareTextSymbolDefault{\textordmasculine}{TS1}
886 \DeclareTextSymbolDefault{\textsurd}{TS1}
887 \DeclareTextSymbolDefault{\textonequarter}{TS1}
888 \DeclareTextSymbolDefault{\textonehalf}{TS1}
889 \DeclareTextSymbolDefault{\textthreequarters}{TS1}
890 \DeclareTextSymbolDefault{\texteuro}{TS1}
891 \DeclareTextSymbolDefault{\texttimes}{TS1}
892 \DeclareTextSymbolDefault{\textdiv}{TS1}

893 ⟨/TS1sty⟩

File m

ltcounts.dtx

21 Counters and Lengths

Commands for defining and using counters. This file defines:

\newcounter To define a new counter. \setcounter To set the value of counters.

\addtotcounter Increase the counter #1 by the number #2. \steptcounter Increase a counter by one.

\refsteptcounter Increase a counter by one, also setting the value used by \label.

\value For accessing the value of the counter as a TEX number (as opposed to

\the⟨counter⟩ which expands to the printed representation of ⟨counter⟩)

\arabic \arabic{⟨counter⟩}: 1, 2, 3, … \roman \roman{⟨counter⟩}: i, ii, iii, … \Roman \Roman{⟨counter⟩}: I, II, III, … \alph \alph{⟨counter⟩}: a, b, c, … \Alph \Alph{⟨counter⟩}: A, B, C, …

\fnsymbol      \fnsymbol{⟨counter⟩}: ∗, †, ‡, . . .

1 ⟨∗2ekernel⟩

21.1 Environment Counter Macros

An environment foo has an associated counter defined by the following control sequences:

\c@foo Contains the counter’s numerical value. It is defined by

\newcount\foocounter.

\thefoo Macro that expands to the printed value of \foocounter. For example, if sections are numbered within chapters, and section headings look like Section II-3. The Nature of Counters then \thesection might be defined by:

\def\thesection
    {\@Roman{\c@chapter}-\@arabic{\c@section}}

\p@foo Macro that expands to a printed ‘reference prefix’ of counter foo. Any \ref to a value created by counter foo will produce the expansion of \p@foo\thefoo when the \label command is executed.

\cl@foo List of counters to be reset when foo stepped. Has format

\@elt{countera}\@elt{counterb}\@elt{counterc}.

NOTE:

\thefoo and \p@foo must be defined in such a way that \edef\bar{\thefoo} or

\edef\bar{\p@foo} defines \bar so that it will evaluate to the counter value at the time of the \edef, even after \foocounter and any other counters have been changed. This will happen if you use the standard commands \@arabic, \@Roman, etc.

The following commands are used to define and modify counters.

   \refstepcounter{⟨foo⟩}

Same as \stepcounter, but it also defines \@currentreference so that a subsequent \label{⟨bar⟩} command causes \ref{⟨bar⟩} to generate the current value of counter ⟨foo⟩.

   \@definecounter{⟨foo⟩}

Initializes counter {⟨foo⟩} (with empty reset list), defines \p@foo and \thefoo to be null. Also adds ⟨foo⟩ to \cl@@ckpt – the reset list of a dummy counter @ckpt used for taking checkpoints for the \include system.

\@addtoreset{⟨foo⟩}{⟨bar⟩} : Adds counter ⟨foo⟩ to the list of counters \cl@bar to be reset when counter ⟨bar⟩ is stepped.

\setcounter  \setcounter{⟨foo⟩}{⟨val⟩} : Globally sets \foocounter equal to ⟨val⟩.
 2 \def\setcounter#1#2{%
 3 \@ifundefined{c@#1}%
 4  {\@nocounterr{#1}}%
 5  {\global\csname c@#1\endcsname#2\relax}}
\addtocounter  \addtocounter{⟨foo⟩}{⟨val⟩} Globally increments \foocounter by ⟨val⟩.
 6 \def\addtocounter#1#2{%
 7 \@ifundefined{c@#1}%
 8  {\@nocounterr{#1}}%
 9  {\global\advance\csname c@#1\endcsname #2\relax}}

\newcounter \newcounter{⟨newctr⟩}[⟨oldctr⟩] Defines ⟨newctr⟩ to be a counter, which is reset when counter ⟨oldctr⟩ is stepped. If ⟨newctr⟩ already defined produces

‘c@newctr  already defined’ error.
10 \def\newcounter#1{%
11 \expandafter\@ifdefinable \csname c@#1\endcsname
12  {\@definecounter{#1}}%
13 \@ifnextchar[{\@newctr{#1}}{}}

\value \value{⟨ctr⟩} produces the value of counter ⟨ctr⟩, for use with a \setcounter or

\addtocounter command.
14 \def\value#1{\csname c@#1\endcsname}
\@newctr
15 \def\@newctr#1[#2]{%
16 \@ifundefined{c@#2}{\@nocounterr{#2}}{\@addtoreset{#1}{#2}}}

\stepcounter \stepcounterfoo Globally increments counter \c@FOO and resets all subsidiary counters.

17 \def\stepcounter#1{%
18 \addtocounter{#1}\@ne
19 \begingroup

20  \let\@elt\@stpelt
21  \csname cl@#1\endcsname
22 \endgroup}
\@stpelt
23 \def\@stpelt#1{\global\csname c@#1\endcsname \z@}
\cl@@ckpt
24 \def\cl@@ckpt{\@elt{page}}
\@definecounter
25 \def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
26  \setcounter{#1}\z@
27  \global\expandafter\let\csname cl@#1\endcsname\@empty
28  \@addtoreset{#1}{@ckpt}%
29  \global\expandafter\let\csname p@#1\endcsname\@empty
30  \expandafter
31  \gdef\csname the#1\expandafter\endcsname\expandafter
32  {\expandafter\@arabic\csname c@#1\endcsname}}
\@addtoreset
33 \def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}

Numbering commands for definitions of \theCOUNTER and \list arguments. All commands can now be used in text and math mode.

\arabic Representation of⟨counter⟩ as arabic numerals. Changed 29 Apr 86 to make it print the obvious thing it COUNTER not positive.

34 \def\arabic#1{\expandafter\@arabic\csname c@#1\endcsname}

\roman Representation of ⟨counter⟩ as lower-case Roman numerals.

35 \def\roman#1{\expandafter\@roman\csname c@#1\endcsname}

\Roman Representation of ⟨counter⟩ as upper-case Roman numerals.

36 \def\Roman#1{\expandafter\@Roman\csname c@#1\endcsname}

\alph Representation of ⟨counter⟩ as a lower-case letter: 1 = a, 2 = b, etc.

37 \def\alph#1{\expandafter\@alph\csname c@#1\endcsname}

\Alph Representation of ⟨counter⟩ as an upper-case letter: 1 = A, 2 = B, etc.

38 \def\Alph#1{\expandafter\@Alph\csname c@#1\endcsname}

\fnsymbol Representation of ⟨COUNTER⟩ as a footnote symbol: 1 = ∗, 2 = †, etc.

39 \def\fnsymbol#1{\expandafter\@fnsymbol\csname c@#1\endcsname}
\@arabic  \@arabic\FOOcounter Representation of \FOOcounter as arabic numerals.
40 \def\@arabic#1{\number #1}  %% changed 29 Apr 86

File m: ltcounts.dtx Date: 1997/10/06 Version v1.1f 117

\@roman  \@roman\FOOcounter Representation of \FOOcounter as lower-case Roman nu-

merals.

41 \def\@roman#1{\romannumeral #1}
\@Roman  \@Roman\FOOcounter Representation of \FOOcounter as upper-case Roman nu-

merals.

42 \def\@Roman#1{\expandafter\@slowromancap\romannumeral #1@}

\@slowromancap Fully expandable macro to change a roman number to uppercase.

43 \def\@slowromancap#1{\ifx @#1% then terminate
44  \else
45  \if i#1I\else\if v#1V\else\if x#1X\else\if l#1L\else\if
46  c#1C\else\if d#1D\else \if m#1M\else#1\fi\fi\fi\fi\fi\fi\fi
47  \expandafter\@slowromancap
48  \fi

49 }

\@alph \@alph\FOOcounter Representation of \FOOcounter as a lower-case letter: 1 = a, 2 = b, etc.

50 \def\@alph#1{%
51 \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
52 k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
53  y\or z\else\@ctrerr\fi}

\@Alph \@Alph\FOOcounter Representation of \FOOcounter as an upper-case letter: 1 = A, 2 = B, etc.

54 \def\@Alph#1{%
55 \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
56 K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or
57  Y\or Z\else\@ctrerr\fi}

\@fnsymbol Typesetting old fashioned footnote symbols. This can be done both in text or math mode now.

58 \def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or
59 \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger
60 \or \ddagger\ddagger \else\@ctrerr\fi}}

61 ⟨/2ekernel⟩

File m: ltcounts.dtx Date: 1997/10/06 Version v1.1f 118

File n

ltlength.dtx

22 Lengths

\newlength Declare #1 to be a new length command. \setlength Set the length command, #1, to the value #2.

\addtolength Increase the value of the length command, #1, by the value #2. \settowidth Set the length, #1 to the width of a box containing #2. \settoheight Set the length, #1 to the height of a box containing #2. \settodepth Set the length, #1 to the depth of a box containing #2.

1 ⟨∗2ekernel⟩

 2 \message{lengths,}
\newlength
 3 \def\newlength#1{\@ifdefinable#1{\newskip#1}}
\setlength
 4 \def\setlength#1#2{#1#2\relax}
\addtolength  \relax added 24 Mar 86
 5 \def\addtolength#1#2{\advance#1 #2\relax}
\settoheight \settodepth \settowidth \@settodim The obvious analogs of \settowidth.
 6 \def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa

Clear the memory afterwards (which might be a lot).

 7  \setbox\@tempboxa\box\voidb@x}
 8 \def\settoheight{\@settodim\ht}
 9 \def\settodepth {\@settodim\dp}
10 \def\settowidth {\@settodim\wd}

\@settopoint This macro takes the contents of the skip register that is supplied as its argument and removes the fractional part to make it a whole number of points. This can be used in class files to avoid values like 345.4666666pt when calulating a dimension.

11 \def\@settopoint#1{\divide#1\p@\multiply#1\p@}

12 ⟨/2ekernel⟩

File o

ltfssbas.dtx

This file contains the main implementation of the ‘low level’ font selection commands. See other parts of the L^{A}TEX distribution, or The L^{A}TEX Companion for higher level documentation of the L^{A}TEX ‘New’ Font Selection Scheme.

Warning: The macro documentation is still basically the documentation from the first NFSS release and therefore in some cases probably not completely accurate.

23 Autoloading parts of NFSS

This code is set up in a way that some parts of it can be kept separate and will only be loaded if needed.

If we are producing an autoload version of L^{A}TEX 2ε then all those parts with def1 or def2 docstrip guards will be placed into the autoloadable files autofss1.sty

and autofss2.sty.

The ‘2ekernel’ code ensures that a \usepackage{autofss1} is essentially ignored if a ‘full’ format is being used that has picture mode already in the format.

Note the autofss2 loading is currently disabled.

 1 ⟨2ekernel⟩\expandafter\let\csname ver@autofss1.sty\endcsname\fmtversion

The autoload file autofss2 is a specialty because it contains code which will be completely local, ie loaded every time again.

24 Preliminary macros

We define a number of macros that will be used later.

\@nomath \@nomath is used by most macros that will have no effect in math mode. It issues a warning message.

2 ⟨∗2ekernel | autoload⟩

 3 \def\@nomath#1{\relax\ifmmode
 4 \@font@warning{Command \noexpand#1invalid in math mode}\fi}

5 ⟨/2ekernel | autoload⟩

\no@alphabet@error The macro \no@alphabet@error is called whenever the user requests a math alphabet that is not available in the current version. In math mode an error message is produced otherwise the command keeps silent. The argument is the name of the control sequence that identifies the math alphabet. The \relax at the beginning is necessary to prevent TEX from scanning too far in certain situations.

6 ⟨∗2ekernel | def1⟩

 7 \gdef\no@alphabet@error#1{\relax \ifmmode
 8  \@latex@error{Math\space alphabet\space identifier\space
 9  \noexpand#1is\space undefined\space in\space math\space
10  version\space `\math@version'}%
11  {Your\space requested\space math\space alphabet\space
12  is\space undefined\space in\space the\space current\space
13  math\space version.^^JCheck\space the\space spelling\space
14  or\space use\space the\space \noexpand\SetMathAlphabet\space
15  command.}
16  \fi}

17 ⟨/2ekernel | def1⟩ 18 ⟨∗autoload⟩

19 \gdef\no@alphabet@error{\relax \ifmmode
20  \expandafter\try@sizes\expandafter\no@alphabet@error \fi}

21 ⟨/autoload⟩

\new@mathgroup \mathgroup We also give a new name to \newfam and \fam to avoid verbal confusion (see the introduction).^{2}

22 ⟨∗2ekernel | autoload⟩

23 \def\new@mathgroup{\alloc@8\mathgroup\chardef\sixt@@n}
24 \let\mathgroup\fam
25 \let\newfam\new@mathgroup
26 \@onlypreamble\new@mathgroup

25 Macros for setting up the tables

\DeclareFontShape The macro \DeclareFontShape takes 6 arguments:
27 \def\DeclareFontShape{\begingroup

First we restore the catcodes of all characters used in the syntax.

28 \nfss@catcodes

We use \expandafter\endgroup to restore catcode in case something goes wrong with the argument parsing (suggested by Tim Van Zandt)

\DeclareFontShape
29 \expandafter\endgroup
30 \DeclareFontShape@}
31 \def\DeclareFontShape@#1#2#3#4#5#6{%
32 \expandafter\ifx\csname #1+#2\endcsname\relax
33  \@latex@error{Font family `#1+#2' unknown}\@eha
34 \else
35  \expandafter
36  \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand
37  \csname #5\endcsname}%
38  \def\reserved@a{#6}%
39  \global

2For the same reason it seems advisable to \let\fam and \newfam equal to \relax, but this is commented out to retain compatibility to existing style files.

40  \expandafter\let\csname#5\expandafter\endcsname
41  \ifx\reserved@a\@empty
42  \@empty
43  \else
44  \reserved@a
45  \fi
46 \fi

47 }

\DeclareFixedFont Define a direct font switch that avoids all overhead.

48 \def\DeclareFixedFont#1#2#3#4#5#6{%
49 \begingroup
50  \math@fontsfalse
51  \every@math@size{}%
52  \fontsize{#6}\z@
53  \usefont{#2}{#3}{#4}{#5}%
54  \global\expandafter\let\expandafter#1\the\font
55 \endgroup

56 } 57 ⟨/2ekernel | autoload⟩

\do@subst@correction

58 ⟨∗2ekernel | autoload⟩

59 \def\do@subst@correction{%
60  \xdef\subst@correction{%
61  \font@name
62  \global\expandafter\font
63  \csname \curr@fontshape/\f@size\endcsname
64  \noexpand\fontname\font
65  \relax}%

Calling \subst@correction after the current group means calling it after we have loaded the substitution font which is done inside a group.

66  \aftergroup\subst@correction

67 }

\DeclareFontFamily
68 \def\DeclareFontFamily#1#2#3{%

If we want fast checking for the encoding scheme we can just check for \T@.. being defined.

69 % \@tempswafalse
70 % \def\reserved@b{#1}%
71 % \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}%
72 %      \ifx\reserved@b\reserved@c \@tempswatrue\fi}%
73 % \cdp@list
74 % \if@tempswa
75 \@ifundefined{T@#1}%
76  {%
77  \@latex@error{Encoding scheme  `#1' unknown}\@eha

78  }%
79  {%

Now we have to define the macro \⟨#1 ⟩+⟨#2 ⟩ to contain #3. But since most of the time #3 will be empty we use \let in a tricky way rather than a simple \def since this will save internal memory. We store the argument #3 in a temporary

macro \reserved@a.
80  \def\reserved@a{#3}%

We compare \reserved@a with \@empty If these two are the same we \let the ‘extra’ macro equal to \@empty which is not the same a doing a \let to \reserved@a — the latter would blow one extra memory location rather then reusing the one

from \@empty.
81  \global
82  \expandafter\let\csname #1+#2\expandafter\endcsname
83  \ifx \reserved@a\@empty
84  \@empty
85  \else \reserved@a
86  \fi
87  }%

88 }

\cdp@list We initialize the code page list to be empty.

89 \let\cdp@list\@empty
90 \@onlypreamble\cdp@list
\cdp@elt
91 \let\cdp@elt\relax
92 \@onlypreamble\cdp@elt
\DeclareFontEncoding
93 \def\DeclareFontEncoding{%

First we start with ignoring all blanks and newlines since every surplus space in the second or third argument will come out in a weird place in the document.

94 \begingroup
95 \nfss@catcodes
96 \expandafter\endgroup
97 \DeclareFontEncoding@}
98 \@onlypreamble\DeclareFontEncoding
99 \def\DeclareFontEncoding@#1#2#3{%
100 \expandafter
101 \ifx\csname T@#1\endcsname\relax
102  \def\cdp@elt{\noexpand\cdp@elt}%
103  \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
104  {\default@family}{\default@series}%
105  {\default@shape}}%

To support encoding dependent commands (like accents) we initialise the command \⟨encoding⟩-cmd to be \@changed@cmd. (See ltoutenc.dtx for details.)

106  \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
107 \else
108  \@font@info{Redeclaring font encoding #1}%
109 \fi
110 \global\@namedef{T@#1}{#2}%
111 \global\@namedef{M@#1}{\default@M#3}%

112 }

113 \@onlypreamble\DeclareFontEncoding@
\DeclareFontSubstitution
114 \def\DeclareFontSubstitution#1#2#3#4{%
115 \expandafter
116 \ifx\csname T@#1\endcsname\relax
117  \@latex@error{Encoding scheme  `#1' unknown}\@eha
118 \else
119  \begingroup
120  \def\reserved@a{#1}%
121  \toks@{}%
122  \def\cdp@elt##1##2##3##4{%
123  \def\reserved@b{##1}%
124  \ifx\reserved@a\reserved@b
125  \addto@hook\toks@{\cdp@elt{#1}{#2}{#3}{#4}}%
126  \else
127  \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}%
128  \fi}%
129  \cdp@list
130  \xdef\cdp@list{\the\toks@}%
131  \endgroup
132  \global
133  \@namedef{D@#1}{%
134  \def\default@family{#2}%
135  \def\default@series{#3}%
136  \def\default@shape{#4}%

137 }%

138 \fi

139 }

140 \@onlypreamble\DeclareFontSubstitution
\DeclareFontEncodingDefaults
141 \def\DeclareFontEncodingDefaults#1#2{%
142 \ifx\relax#1\else
143  \ifx\default@T\@empty\else
144  \@font@info{Overwriting encoding scheme text defaults}%
145  \fi
146  \gdef\default@T{#1}%
147 \fi

148 \ifx\relax#2\else
149  \ifx\default@M\@empty\else
150  \@font@info{Overwriting encoding scheme math defaults}%
151  \fi
152  \gdef\default@M{#2}%
153 \fi

154 }

155 \@onlypreamble\DeclareFontEncodingDefaults
\default@T \default@M
156 \let\default@T\@empty
157 \let\default@M\@empty
\DeclarePreloadSizes
158 \def\DeclarePreloadSizes#1#2#3#4#5{%
159 \@ifundefined{T@#1}%
160 {\@latex@error{Encoding scheme  `#1' unknown}\@eha}%

161 {%

Don’t know at the moment what this group here does!

162 \begingroup

We define a macro \reserved@f^{3} that grabs the next size and loads the corresponding font. This is done by delimiting \reserved@f’s only argument by the token , (comma).

163  \def\reserved@f##1,{%

The end of the list will be detected when there are no more elements, i.e. when \reserved@f’s argument is empty. The trick used here is explained in Appendix D of the TEXbook: if the argument is empty the \if will select the first clause and \let \reserved@f equal to \relax. (We use the > character here since it cannot appear in font file names.)

164  \if>##1>%
165  \let\reserved@f\relax
166  \else

Otherwise, we define \font@name appropriately and call \pickup@font to do the work. Note that the requested \curr@fontshape combination must have been defined, or you will get an error. The definition of \font@name is carried out globally to be consistent with the rest of the code in this file.

167  \xdef\font@name{\csname#1/#2/#3/#4/##1\endcsname}%
168  \pickup@font

Now we forget the name of the font just loaded. More precisely, we set the corresponding control sequence to \relax. This means that later on, when the font is first used, the macro \define@newfont is called again to execute the ‘extra’ macro for this font.

169  \global\expandafter\let\font@name\relax
170  \fi

3We cannot use \@tempa since it is needed in \pickup@font.

Finally we call \reserved@f again to process the next size. If \reserved@f was \let equal to \relax this will end the macro.

171  \reserved@f}%

We finish with reinserting the list of sizes after the \reserved@f macro and appending an empty element so that the end of the list is recognized properly.

172  \reserved@f#5,,%
173 \endgroup

174 }% 175 }

176 \@onlypreamble\DeclarePreloadSizes

\ifmath@fonts We need a switch to decide if we have to switch math fonts. For this purpose we provide \ifmath@fonts that can be set to true or false by the \S@... macros depending on if math fonts are provided for this size or not. The default is of course to switch all fonts.

177 \newif\ifmath@fonts \math@fontstrue
\DeclareMathSizes \DeclareMathSizes*  \DeclareMathSizes takes the text size, math text size, math script size, and math

scriptscript size as arguments and defines the right \S@… macro.

178 \def\DeclareMathSizes{%
179 \@ifstar{\@DeclareMathSizes\math@fontsfalse}%
180  {\@DeclareMathSizes{}}}
181 \@onlypreamble\DeclareMathSizes
\@DeclareMathSizes
182 \def\@DeclareMathSizes#1#2#3#4#5{%
183  \@defaultunits\dimen@#2pt\relax\@nnil
184  \if$#3$%
185  \expandafter \let
186  \csname S@\strip@pt\dimen@\endcsname
187  \math@fontsfalse
188  \else
189  \expandafter \gdef
190  \csname S@\strip@pt\dimen@\endcsname
191  {\gdef\tf@size{#3}\gdef\sf@size{#4}%
192  \gdef\ssf@size{#5}%
193  #1%

194 }%

195  \fi}
196 \@onlypreamble\@DeclareMathSizes

26 Selecting a new font

26.1 Macros for the user

\fontencoding \f@encoding As we said in the introduction a font is described by four parameters. We first define macros to specify the wanted family, series, or shape. These are simply recorded in internal macros \f@family, \f@series, and \f@shape, resp. We use \edef’s so that the arguments can also be macros.

197 \DeclareRobustCommand\fontencoding[1]{%
198  \expandafter\ifx\csname T@#1\endcsname\relax
199  \@latex@error{Encoding scheme `#1' unknown}\@eha
200  \else
201  \edef\f@encoding{#1}%
202  \ifx\cf@encoding\f@encoding

If the new encoding is the same as the old encoding we have nothing to do. However, in case we had a sequence of several encoding changes without a \selectfont inbetween we can save processing by making sure that \enc@update is \relax.

203  \let\enc@update\relax
204  \else

If current and new encoding differ we define the macro \enc@update to contain all updates necessary at \selectfont time.

205  \let\enc@update\@@enc@update
206  \fi
207  \fi

208 }

\@@enc@update
209 \def\@@enc@update{%

When \@@enc@update is executed \f@encoding holds the encoding name for the new encoding and \cf@encoding the name of the last active encoding.

We start by setting the init command for encoding dependent macros to

\@changed@cmd.
210  \expandafter
211  \let
212  \csname\cf@encoding -cmd\endcsname
213  \@changed@cmd

Then we turn the one for the new encoding to \@current@cmd (see ltoutenc.dtx for further explanations).

214  \expandafter
215  \let
216  \csname\f@encoding-cmd\endcsname
217  \@current@cmd

We execute the default settings \default@T, followed by the one for the new encoding.

218  \default@T
219  \csname T@\f@encoding\endcsname

Finally we change the default substitution values, disable \enc@update and make \f@encoding officially the current encoding.

220  \csname D@\f@encoding\endcsname
221  \let\enc@update\relax
222  \let\cf@encoding\f@encoding

223 }

\enc@update The default action in \selectfont is to do nothing.

224 \let\enc@update\relax
\fontfamily
\f@family
\fontseries
\f@series
\fontshape
\f@shape

225 \DeclareRobustCommand\fontfamily[1]{\edef\f@family{#1}}
226 \DeclareRobustCommand\fontseries[1]{\edef\f@series{#1}}
227 \DeclareRobustCommand\fontshape [1]{\edef\f@shape{#1}}

Some handy abbreviation if you want to get some particular font in the current size. If also the size should change one has to issue a \fontsize comand first.

228 \def\usefont#1#2#3#4{\fontencoding{#1}\fontfamily{#2}%
229  \fontseries{#3}\fontshape{#4}\selectfont
230  \ignorespaces}
\linespread The comand \linespread changes the current \baselinestretch by calling
\set@fontsize. The values for \f@size and \f@baselineskip will be left un-

changed.

231 \DeclareRobustCommand\linespread[1]
232 {\set@fontsize{#1}\f@size\f@baselineskip}

\fontsize We also define a macro that allows to specify a size. In this case, however, we also need the value of \baselineskip. As the first argument to \set@fontsize we pass the current value of \baselinestretch. This will either match the internal value (in which case nothing changes, or it will be an updated value due to a user change of that macro using \renewcommand. If we would pass the internal \f@linespread such a change would be efectively overwritten by a size change.

233 \DeclareRobustCommand\fontsize[2]
234 {\set@fontsize\baselinestretch{#1}{#2}}

\f@linespread This macro holds the current internal value for \baselinestretch.

235 \let\f@family\@empty
236 \let\f@series\@empty
237 \let\f@shape\@empty
238 \let\f@size\@empty
239 \let\f@baselineskip\@empty
240 \let\f@linespread\@empty
\cf@encoding
241 \let\f@encoding\@empty
242 \let\cf@encoding\@empty

\@defaultunits The function \@defaultunits when wrapped around a dimen or skip assignment

supplies default units. Usage:

   \@defaultunits\dimen@=#1pt\relax\@nnil

Note: the \relax is *important*. Other units can be substituted for the ‘pt’ if desired.

We use \remove@to@nnil as an auxiliary macros for \@defaultunits. It just has to gobble the supplied default unit ‘pt’ or whatever, if it wasn’t used in the assignment.

243 \def\@defaultunits{\afterassignment\remove@to@nnil}

\strip@pt \rem@pt This macro strips the characters pt produced by using \the on a dimen register.

244 \begingroup
245 \catcode`P=12
246 \catcode`T=12
247 \lowercase{
248  \def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}
249 \expandafter\endgroup\x
250 \def\strip@pt{\expandafter\rem@pt\the}
\mathversion \math@version  \mathversion takes the math version name as argument, defines \math@version

appropriately and switches to the font selected forcing a call to \glb@settings if the version is known to the system.

251 \DeclareRobustCommand\mathversion[1]
252  {\@nomath\mathversion
253  \expandafter\ifx\csname mv@#1\endcsname\relax
254  \@latex@error{Math version `#1' is not defined}\@eha\else
255  \edef\math@version{#1}%

We need to force a math font setup both now and at the point where we return to the previous math version. Forcing a math font setup can simply be done by setting \glb@currsize to an invalid value since this will trigger the setup when the formula starts.

256  \gdef\glb@currsize{}%

When the scope of the current \mathversion ends we need to restore the old setup. However this time we need to force it directly at least if we are inside math, otherwise we could wait. Another way to enhance this code here is todo the setting only if the version really has changed after all. This might be interesting

in case of amstext and boldsymbol.
257  \aftergroup\glb@settings
258  \fi}

If TEX would support a hook just before the end of a formula (opposite of \everymath so to speak) the implementation of the algorithm would be much simpler because in that case we would set up the correct math fonts at this point without having to worry about incorrect settings due to nesting. The same would be true if in L^{A}TEX the use of $ (as the primitive TEX command) would be impossible and instead only a higher-level interface would be available. Note that this does not mean that a $ couldn’t be the short-hand for starting and stopping that higher-level interface, it only means that the direct TEX function must be hidden.

Anyway, since we don’t have this and won’t have it in L^{A}TEX 2ε we need to implement it in a somewhat slower way.

We test for the current math font setup on entry of a formula, i.e., on the hooks \everymath and \everydisplay. But since these hooks may contain user data we provide ourselves with an internal version of these hooks which stays frozen.

\frozen@everymath \frozen@everydisplay New internal names for \everymath and \everydisplay.
259 \let\frozen@everymath\everymath
260 \let\frozen@everydisplay\everydisplay

\everymath \everydisplay Now we provide now user hooks that will be called in the frozen internals.

261 \newtoks\everymath
262 \newtoks\everydisplay

\frozen@everymath Now we define the behaviour of the frozen hooks: first check the math setup then call the user hook.

263 \frozen@everymath = {\check@mathfonts
264  \the\everymath}

\frozen@everydisplay Ditto for the display hook.

265 \frozen@everydisplay = {\check@mathfonts
266  \the\everydisplay}

\curr@math@size This holds locally the current math size.

267 \let\curr@math@size\@empty

26.2 Macros for loading fonts

\pickup@font The macro \pickup@font which is used in \selectfont is very simple: if the font name is undefined (i.e. not known yet) it calls \define@newfont to load it.

268 \def\pickup@font{%
269  \expandafter \ifx \font@name \relax
270  \define@newfont
271  \fi}

\split@name \pickup@font assumes that \font@name is set but it is sometimes called when

\f@family, \f@series, \f@shape, or \f@size may have the wrong settings (see,

e.g., the definition of \getanddefine@fonts). Therefore we need a macro to extract font family, series, shape, and size from the font name. To this end we define \split@name which takes the font name as a list of characters of \catcode 12 (without the backslash at the beginning) delimited by the special control sequence \@nil. This is not very complicated: we first ensure that / has the right

\catcode
272 {\catcode`\/=12

and define \split@name so that it will define our private \f@encoding, \f@family,

\f@series, \f@shape, and \f@size macros.
273 \gdef\split@name#1/#2/#3/#4/#5\@nil{\def\f@encoding{#1}%
274  \def\f@family{#2}%

275  \def\f@series{#3}%
276  \def\f@shape{#4}%
277  \def\f@size{#5}}}

\curr@fontshape Abbreviation which may get removed again for speed.

278 \def\curr@fontshape{\f@encoding/\f@family/\f@series/\f@shape}

279 ⟨/2ekernel | autoload⟩

\define@newfont Now we can tackle the problem of defining a new font.

280 ⟨∗2ekernel | def2 | autoload⟩

281 \def\define@newfont{%

We have already mentioned that the token list that \split@name will get as argument must not start with a backslash. To reach this goal we will set the \escapechar to −1 so that the \string primitive will not generate an escape character. To keep this change local we open a group. We use \begingroup for this purpose since \define@newfont might be called in math mode, and an empty \bgroup… \egroup would add an empty Ord atom to the math list and thus affect the spacing.

Also locally redefine \typeout so that ‘No file ...fd’ Warnings become Font Info message just sent to the log file.

282 \begingroup
283  \let\typeout\@font@info
284  \escapechar\m@ne

Then we extract encoding scheme, family, series, shape, and size from the font name. Note the four \expandafter’s so that \font@name is expanded first, then

\string, and finally \split@name.
285  \expandafter\expandafter\expandafter
286  \split@name\expandafter\string\font@name\@nil

If the \curr@fontshape combination is not available, (i.e. undefined) we call the macro \wrong@fontshape to take care of this case. Otherwise \extract@font will load the external font for us.

287 %    \expandafter\ifx
288 %        \csname\curr@fontshape\endcsname \relax
289  \try@load@fontshape % try always
290 %    \fi
291  \expandafter\ifx
292  \csname\curr@fontshape\endcsname \relax
293  \wrong@fontshape\else

To allow substitution we call the curr@fontshape macro which usually will expand to \relax but may hold code for substitution (see \subst@fontshape definition).

294 %      \csname\curr@fontshape\endcsname
295  \extract@font\fi

We are nearly finished and must only restore the \escapechar by closing the group.

296 \endgroup}

297 ⟨/2ekernel | def2 | autoload⟩

As autofss2.sty only makes local definitions it is re-loaded for each font, to save some string memory in the kernel, and to speed up the loading of some packages which may load fonts The code is actually pre-loaded into the kernel and removed at \begin{document}. The \ifx test below ensures that if \usepackage{autofss2} apears in the preamble, then the code is not removed at this time. Can not use \AtBeginDocument here as it is not defined yet! Listing all the commands like this is not ideal as any changes to the autofss2.sty need to be reflected here, but this seems the most memory efficient mechanism as it avoids the use of an extra csname to store the list.

This is currently disabled, so the ‘autofss2’ code remains in the kernel, and autofss2.sty is not generated in the current public release.

298 ⟨∗autoloadxxx⟩

299 \expandafter\def\expandafter\@begindocumenthook\expandafter{%
300 \expandafter\ifx\csname ver@autofss2.sty\endcsname\relax
301 \gdef\define@newfont{%
302  \begingroup
303  \makeatletter\nfss@catcodes
304  \catcode`\#6\relax
305  \@@input autofss2.sty\relax\define@newfont
306  \endgroup}%
307 \begingroup
308  \def\do##1{\global\let##1\@undefined}%
309  \do\extract@sizefn
310  \do\try@simple@size
311  \do\set@simple@size@args
312  \do\extract@rangefontinfo
313  \do\is@range
314  \do\check@range
315  \do\check@single
316  \do\set@size@funct@args
317  \do\set@size@funct@args@
318  \do\try@size@range
319  \do\empty@sfcnt
320  \do\gen@sfcnt
321  \do\genb@sfcnt
322  \do\sub@sfcnt
323  \do\subf@sfcnt
324  \do\fixed@sfcnt
325 \endgroup
326 \fi}

327 ⟨/autoloadxxx⟩

328 ⟨∗2ekernel | autoload⟩

329 \def\try@load@fontshape{%
330 \expandafter
331 \ifx\csname \f@encoding+\f@family\endcsname\relax
332  \@font@info{Try loading font information for
333  \f@encoding+\f@family}%

We predefine this combination to be \@empty which means that next time we don’t try again unnecessary in case we don’t find a .fd file. If the file contains a \DeclareFontFamily command than this setting will be overwritten.

334  \global\expandafter\let
335  \csname\f@encoding+\f@family\endcsname\@empty

Set the catcodes used in the syntax, but do it only once (this will be restored at the end of the font loading group).

336  \nfss@catcodes
337  \let\nfss@catcodes\relax

For increased portability make the external filename monocase, but look for the (old style) mixed case filename if the first attempt fails.

On any monocase system this means that the file is looked for twice which takes up time and string space, but at least for this release Check for both names to give people time to re-install their private fd files with lowercase names.

338  \edef\reserved@a{%
339  \lowercase{%
340  \noexpand\InputIfFileExists{\f@encoding\f@family.fd}}}%
341  \reserved@a\relax
342  {\@input@{\f@encoding\f@family.fd}}%
343 \fi}

\nfss@catcodes This macro should contain the standard \catcode assignments to all characters which are used in the commands found in an .fd file and which might have special \catcodes in the middle of a document. If necessary, this list can be extended in a package file using a suitable number of \expandafter, i.e.,

  \expandafter\def\expandafter\nfss@catcodes
        \expandafter{\nfss@catcodes <additional settings>}

Note, that this macro might get executed several times since it is also called by \DeclareFontShape, thus it probably should not be misused as a general purpose hook.

344 \def\nfss@catcodes{%

We start by making @ a letter and ignoring all blanks and newlines.

345  \makeatletter
346  \catcode`\ 9%
347  \catcode`\^^I9%
348  \catcode`\^^M9%

Then we set up \, {, }, # and % in case an .fd file is loaded during a verbatim environment.

349  \catcode`\\\z@
350  \catcode`\{\@ne
351  \catcode`\}\tw@
352  \catcode`\#6%
353  \catcode`\^7%
354  \catcode`\%14%

The we make sure that the important syntax parts have the right \catcode.

355 \@makeother\<%
356 \@makeother\>%
357 \@makeother\*%
358 \@makeother\.%
359 \@makeother\-%
360 \@makeother\/%
361 \@makeother\[%
362 \@makeother\]%
363 \@makeother\`%
364 \@makeother\'%
365 \@makeother\"%

366 }

\DeclareErrorFont Declare the last resort shape! We assume that in this fontshape there is a 10pt font but it doesn’t really matter. We only loose one macro name if the assumption is false. But at least the font should be there!

367 \def\DeclareErrorFont#1#2#3#4#5{%
368  \xdef\error@fontshape{%
369  \noexpand\expandafter\noexpand\split@name\noexpand\string
370  \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
371  \noexpand\@nil}%

Initialize all those internal variables which may or may not have values in the first seconds of NFSS’ bootstraping process. Later on such values will be updated when an encoding is selected, etc.

We definitely don’t want to set \f@encoding; we can set all the others since if they are left “blank” any selection would grap “error default values” as well. However, this probably should go also.

372 %      \gdef\f@encoding{#1}%
373  \gdef\default@family{#2}%
374  \gdef\default@series{#3}%
375  \gdef\default@shape{#4}%
376  \global\let\f@family\default@family
377  \global\let\f@series\default@series
378  \global\let\f@shape\default@shape
379  \gdef\f@size{#5}%
380  \gdef\f@baselineskip{#5pt}%

381 }

382 \@onlypreamble\DeclareErrorFont

\wrong@fontshape Before we come to the macro \extract@font we have to take care of unknown \curr@fontshape combinations. The general strategy is to issue a warning and to try a default shape, then a default series, and finally a default family. If this last one also fails TEX will go into an infinite loop. But if the defaults are set incorrectly one deserves nothing else!

383 \def\wrong@fontshape{%
384  \csname D@\f@encoding\endcsname      % install defaults if in math

We remember the wanted \curr@fontshape combination which we will need in a moment.

385  \edef\reserved@a{\csname\curr@fontshape\endcsname}%
386 \ifx\last@fontshape\reserved@a
387  \errmessage{Corrupted NFSS tables}%
388  \error@fontshape
389 \else

Then we warn the user about the mess and set the shape to its default.

390  \let\f@shape\default@shape

If the combination is not known, try the default series.

391  \expandafter\ifx\csname\curr@fontshape\endcsname\relax
392  \let\f@series\default@series

If this is still undefined, try the default family. Otherwise give up. We never try to change the encoding scheme!

393  \expandafter
394  \ifx\csname\curr@fontshape\endcsname\relax
395  \let\f@family\default@family
396  \fi \fi
397 \fi

At this point a valid \curr@fontshape combination must have been found. We inform the user about this fact.

The \expandafter\string here stops TEX adding the space that it usually puts after command names in messages. The similar construction with \@undefined just produces ‘undefined’, but saves a few tokens.

\@wrong@font@char is locally redefined in \UseTextSymbol from its normal (empty) definition, to report the symbol generating the font switch.

398  \@font@warning{Font shape `\expandafter\string\reserved@a'
399  \expandafter\@gobble\string\@undefined\MessageBreak
400  using `\curr@fontshape' instead\@wrong@font@char}%
401  \global\let\last@fontshape\reserved@a

We change \@defaultsubs to produce a warning at the end of the document. The macro \@defaultsubs is initially \relax but gets changed here if some default font substitution happens. It is then executed in \enddocument.

402  \gdef\@defaultsubs{%
403  \@font@warning{Some font shapes were not available, defaults
404  substituted.\@gobbletwo}}%

If we substitute a \curr@fontshape combination by the default one we don’t want the warning to be printed out whenever this (unknown) combination is used. Therefore we globally \let the macro corresponding to the wanted combination equal to its substitution. This requires the use of four \expandafter’s since \csname… \endcsname has to be expanded before \reserved@a (i.e. the requested combination), and this must happen before the \let is executed.

405  \global\expandafter\expandafter\expandafter\let
406  \expandafter\reserved@a
407  \csname\curr@fontshape\endcsname

Now we can redefine \font@name accordingly. This must be done globally since it might occur in the group opened by \define@newfont. If we would this definition were local the closing \endgroup there would restore the old meaning of \font@name and then switch to the wrong font at the end of \selectfont although the correct font was loaded.

408  \xdef\font@name{%
409  \csname\curr@fontshape/\f@size\endcsname}%

The last thing this macro does is to call \pickup@font again to load the font if it is not defined yet. At this point this code will loop endlessly if the defaults are not well defined.

410  \pickup@font}

\@wrong@font@char Normally empty but redefined in \UseTextSymbol so that the Font shape undefined message can refer to the symbol causing the problem.

411 \let\@wrong@font@char\@empty
\@@defaultsubs \@defaultsubs See above.
412 \let\@defaultsubs\relax

\strip@prefix In \extract@font we will need a way to recover the replacement text of a macro. This is done by the primitive \meaning together with the macro \strip@prefix (for the details see appendix D of the TEXbook, p. 382).

413 \def\strip@prefix#1>{}

27 Assigning math fonts to versions

\install@mathalphabet This is just another name for \gdef but we can redefine it if necessary later on.

414 \let\install@mathalphabet\gdef
\math@fonts
415 \let\math@fonts\@empty

\select@group \select@group has four arguments: the new ⟨math alphabet identifier⟩ (a control sequence), the ⟨math group number⟩, the extra macro for math mode and the \curr@fontshape definition macro name. We first check if we are in math mode.

416 %\def\select@group#1#2#3{\relax\ifmmode

We do these things locally using \begingroup instead of \bgroup to avoid the appearance of an empty Ord atom on the math list.

417 %  \begingroup

We set the math fonts for the family in question by calling \getanddefine@fonts in the correct environment.

418 %     \escapechar\m@ne
419 %    \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%

We globally select the math fonts…

420 %    \globaldefs\@ne  \math@fonts

… and close the group to restore \globaldefs and \escapechar.

421 %  \endgroup

As long as no size or version change occurs the ⟨math alphabet identifier⟩ should simply switch to the installed math group instead of calling \select@group unnecessarily. So we globally redefine the first argument (the new ⟨math alphabet identifier⟩) to expand into a \mathgroup switch and then select this alphabet. Note that this redefinition will be overwritten by the next call to a version macro. The original code for the end of \select@group was

  \gdef#1{#3\mathgroup #2}#1\fi}

i.e. first redefining the ⟨math alphabet identifier⟩ and then calling the new definition to switch to the wanted ⟨math group⟩. Now we define the ⟨math alphabet identifier⟩ as a call to the \use@mathgroup command.

422 %  \xdef#1{\noexpand\use@mathgroup\noexpand#2%
423 %          {\number\csname c@mv@\math@version\endcsname}}%

But this is not sufficient, as we learned the hard way. The problem here is that the loading of the fonts that comprise the alphabet identifier #1, as well as the necessary math font assignments is deferred until it is used. This is OK so far, but if the fonts are switched within the current formula (which may happen if a sub-formula is a box that contains a math version switch) the font assignments for #1 are not restored unless #1 is used again. This is disastrous since TeX sees the wrong fonts at the end of the math formula, when it converts the math list into a horizontal list.

This is taken into account as follows: When a math alphabet identifier is used for the first time in a certain version it modifies the corresponding macro \mv@⟨version⟩ so that it calls \getanddefine@fonts directly in future as well. We use the macro \extract@alph@from@version to do this. It takes the math alphabet identifer #1 and the math version macro as arguments.

424 %     \expandafter\extract@alph@from@version
425 %        \csname mv@\math@version\expandafter\endcsname
426 %       \expandafter{\number\csname c@mv@\math@version\endcsname}%
427 %       #1%
428 %     \stepcounter{mv@\math@version}%

Finally, it is not possible to simply call the new definition since we have an argument (the third argument of \use@mathgroup or more exactly the argument od \math@egroup if the margid option is in force) which would swallow our closing \fi. So we use the \expandafter technique to remove the \fi before the

\use@mathgroup is expanded.
429 %\expandafter #1\fi}
\extract@alph@from@version We proceed to the definition of the macro \extract@alph@from@version. As

stated above, it takes a math alphabet identifier and a math version macro (e.g. \mv@normal) as its arguments.

430 \def\extract@alph@from@version#1#2#3{%

To extract and replace the definition of math alphabet identifier #3 in macro #1 we have to recall how this definition looks like: Somewhere in the replacement text of #1 there is the sequence

\install@mathalphabet⟨math alphabet identifier⟩ #3{%

⟨Definitions for ⟩#3} Hence, the first thing we do is to extract the tokens preceding this definitions, the definition itself, and the tokens following it. To this end we define one auxiliary

macro \reserved@a.
431  \def\reserved@a##1\install@mathalphabet#3##2##3\@nil{%

When \reserved@a is expanded, it will have the tokens preceding the definition in question in its first argument (##1), the following tokens in its third argument (##3), and the replacement text for the math alphabet identifier #3 in its second argument. (##2). This is then recorded for later use in a temporary macro

\reserved@b.
432  \def\reserved@b{##2}%

Additionally, we define a macro \reserved@c to reconstruct the definitions for the math version in question from the tokens that will remain unchanged (##1 and ##3) and the yet to build new definitions for the math alphabet identifier #3.

433  \def\reserved@c####1{\gdef#1{##1####1##3}}}%

Then we execute our auxiliary macro.

434  \expandafter\reserved@a#1\@nil

OK, so now we have to build the new definition for #3. To do so, we first extract the interesting parts out of the old one. The old definition looks like: \select@group⟨math alphabet identifier⟩

⟨math group number⟩⟨math extra part⟩

⟨curr@fontshape definition⟩

So we define a new temporary macro \reserved@a that extracts these parts.

435  \def\reserved@a\select@group#3##1##2\@nil{%

This macro can now directly rebuild the math version definition by calling

\reserved@c:
436  \reserved@c{%
437  \getanddefine@fonts{#2}##2%
438  \install@mathalphabet#3{%
439  \relax\ifmmode \else \non@alpherr#3\fi
440  \use@mathgroup##1{#2}}}%

In addtion it defines the alphabet the way it should be used from now on.

441  \gdef#3{\relax\ifmmode \else \non@alpherr#3\fi
442  \use@mathgroup##1{#2}}}%

Finally, we only have to call this macro \reserved@a on the old definitions

recorded in \reserved@b:
443  \expandafter\reserved@a\reserved@b\@nil

444 }

\math@bgroup \math@egroup Here are the default definitions for \math@bgroup and \math@egroup. We use

\bgroup instead of \begingroup to avoid ‘leaking out’ of style changes. This has the side effect of always producing mathord atoms.

445 \let\math@bgroup\bgroup
446 \def\math@egroup#1{#1\egroup}

447 ⟨/2ekernel | autoload⟩

\calculate@math@sizes Here is the default definition for \calculate@math@sizes a more elaborate interface is under testing in mthscale.sty.

448 ⟨∗2ekernel | def1⟩

449 \gdef\calculate@math@sizes{%
450 \@font@info{Calculating\space math\space sizes\space for\space
451  size\space <\f@size>}%
452 \dimen@\f@size \p@
453 \@tempdimb \defaultscriptratio \dimen@
454 \dimen@ \defaultscriptscriptratio \dimen@
455 \expandafter\xdef\csname S@\f@size\endcsname{%
456  \gdef\noexpand\tf@size{\f@size}%
457  \gdef\noexpand\sf@size{\strip@pt\@tempdimb}%
458  \gdef\noexpand\ssf@size{\strip@pt\dimen@}%
459  \noexpand\math@fontstrue}}

460 ⟨/2ekernel | def1⟩ 461 ⟨∗autoload⟩

462 \def\calculate@math@sizes{\try@sizes\calculate@math@sizes}

463 ⟨/autoload⟩

\defaultscriptratio \defaultscriptscriptratio The default ratio for math sizes is:
 1 to \defaultscriptratio to \defaultscriptscriptratio.

By default this is 1 to .7 to .5.

464 ⟨∗2ekernel | autoload⟩

465 \def\defaultscriptratio{.7}
466 \def\defaultscriptscriptratio{.5}

\noaccents@ If we don’t have a definition for \noaccents@ we provide a dummy.

467 \ifx\noaccents@\@undefined
468 \let\noaccents@\@empty
469 \fi
\showhyphens  \showhyphens must be redefined since the version in plain.tex uses \tenrm.

470 ⟨/2ekernel | autoload⟩ 471 ⟨∗2ekernel | autoerr⟩

472 \gdef\showhyphens#1{%
473 \setbox0\vbox{%
474  \color@begingroup
475  \parfillskip\z@skip\hsize\maxdimen
476  \normalfont
477  \pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1%
478  \color@endgroup}}

479 ⟨/2ekernel | autoerr⟩

480 ⟨autoload⟩\def\showhyphens{\@autoerr\showhyphens}

481 ⟨∗2ekernel | autoload⟩

\addto@hook We need a macro to add tokens to a hook.

482 \long\def\addto@hook#1#2{#1\expandafter{\the#1#2}}
\@vpt
483 \def\@vpt{5}
\@vipt
484 \def\@vipt{6}
\@viipt
485 \def\@viipt{7}
\@viiipt
486 \def\@viiipt{8}
\@ixpt
487 \def\@ixpt{9}
\@xpt
488 \def\@xpt{10}
\@xipt
489 \def\@xipt{10.95}
\@xiipt
490 \def\@xiipt{12}
\@xivpt
491 \def\@xivpt{14.4}
\@xviipt
492 \def\@xviipt{17.28}
\@xxpt
493 \def\@xxpt{20.74}
\@xxvpt
494 \def\@xxvpt{24.88}

495 ⟨/2ekernel | autoload⟩

File p

ltfsstrc.dtx

28 Introduction

This package contains the code for tracing font loading and font changes. It basically overlays some of the low-level functions of NFSS with additional code used for tracing.

The package accepts the following options:

errorshow Write all information about font changes etc. only to the transcript file unless an error happens. This means that information about font substitution will not be shown on the terminal.

warningshow Show all NFSS warnings on the terminal. This setting corresponds to the default behaviour of NFSS if the tracefnt package is not loaded!

infoshow Show all NFSS warning and all NFSS info messages (that are normally only written to the transcript file) also on the terminal. This is the default if the tracefnt package is loaded.

debugshow In addition to infoshow show also changing of math fonts as far as possible (this option can produce a large amount of output.

loading Show the name of external fonts when they are loaded. This option shows only “newly” loaded fonts not those already preloaded in the format or the class file before the tracefnt package became active.

pausing Turn all font warnings into errors so that L^{A}TEX will stop.

29 A driver for this document

The next bit of code contains the documentation driver file for TEX, i.e., the file that will produce the documentation you are currently reading. It will be extracted from this file by the DocStrip program.

When this file is processed directly by L^{A}TEX this will produce the documentation as well.

1 ⟨∗driver⟩

 2 \documentclass{ltxdoc}

3 4

 5 %\OnlyDescription  % comment out for implementation details

6

 7 \begin{document}
 8 \DocInput{ltfsstrc.dtx}
 9 \end{document}

10 ⟨/driver⟩

30 The Implementation

Warning: Read the macro documentation with a grain of salt. It is still basically the documentation from the first NFSS release and therefore in some cases probably not completely accurate.

If we are making a package file it is a good idea to test whether we are running under 2e. This code is actually placed at the very beginning of this file for easier maintenance, thus commented out here.

11 ⟨∗package⟩

12 %\NeedsTeXFormat{LaTeX2e}
13 %\ProvidesPackage{tracefnt}[??/??/?? v?.??
14 %                           Standard LaTeX package (font tracing)]

15 ⟨/package⟩

The debug module makes use of commands contained in a special package file

named trace.sty.^{4}
16 ⟨+debug⟩ \input trace.sty

31 Handling Options

\tracingfonts Here is the definition of the integer register for the font trace. As a default in a package file we use 1 to give error messages if fonts are substituted. If this code is used for debugging or tracing reasons in the format file (i.e. in fam.dtx) we use 0 as the default. But if no font trace is used we build a definition that will produce a warning message.

17 ⟨∗2ekernel | autoload⟩

18 \def\tracingfonts{%
19 \@font@warning{Command \noexpand\tracingfonts
20  not provided.\MessageBreak
21  Use the `tracefnt' package.\MessageBreak Command found:}%
22  \count@}

23 ⟨/2ekernel | autoload⟩

The \count@ in the line above will remove the number after \tracingfonts. Note that this definition will be overwritten be the next line if one of these modules are included.

24 ⟨∗package, trace, debug⟩

25 \newcount\tracingfonts
26 \tracingfonts=0

27 ⟨/package, trace, debug⟩

The option errorshow turns off all warnings so that only real errors are shown. warningshow corresponds to the NFSS default (when tracefnt is not loaded). infoshow is the default for this package here; and debugshow, loading, and pausing extend the amount of information even further.

4This package is not in distribution at the moment (and probably doesn’t any longer work).

Think of this part of the code as being historical artefacts.

28 ⟨∗package⟩

29 \DeclareOption{errorshow}{%
30 \def\@font@info#1{%
31  \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}%
32  {LaTeX Font Info: \space\space\space#1}}%
33  \def\@font@warning#1{%
34  \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}%
35  {LaTeX Font Warning: #1}}%

36 }

37 \DeclareOption{warningshow}{%
38 \def\@font@info#1{%
39  \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}%
40  {LaTeX Font Info: \space\space\space#1}}%
41  \def\@font@warning#1{%
42  \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}%
43  {LaTeX Font Warning: #1}}%

44 }

45 \DeclareOption{infoshow}{%
46 \def\@font@info#1{%
47  \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}%
48  {LaTeX Font Info: \space\space\space#1}}%
49  \def\@font@warning#1{%
50  \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}%
51  {LaTeX Font Warning: #1}}%

52 }

53 \DeclareOption{loading}{%
54  \tracingfonts\tw@

55 }

56 \DeclareOption{debugshow}{%
57  \ExecuteOptions{infoshow}%
58  \tracingfonts\thr@@

59 }

60 \DeclareOption{pausing}{%
61  \def\@font@warning#1{%
62  \GenericError
63  {(Font)\@spaces\@spaces\@spaces\space\space}%
64  {LaTeX Font Warning: #1}%
65  {See the LaTeX Companion for details.}%
66  {I'll stop for every LaTeX Font Warning because
67  you requested\MessageBreak the `pausing' option
68  to the tracefnt package.}}%

69 }

We make infoshow the default, which in turn defines \font@warning and

\font@info.

70 \ExecuteOptions{infoshow}
71 \ProcessOptions

72 ⟨/package⟩

We also need a default definition inside the kernel:

73 ⟨∗2ekernel | autoload⟩

74 \def\@font@info#1{%
75  \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}%
76  {LaTeX Font Info: \space\space\space#1}}%
77 \def\@font@warning#1{%
78  \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}%
79  {LaTeX Font Warning: #1}}%

80 ⟨/2ekernel | autoload⟩

32 Macros common to fam.tex and tracefnt.sty

In the first versions of tracefnt.dtx some macros of fam.dtx^{5} were redefined to included the extra tracing information. Now these macros are all defined in this file (i.e. removed from fam.dtx) and different production versions can be obtained simply by specifying a different set of modules to include when generating

ltfss.dtx.

32.1 General font loading

\extract@font This macro organizes the font loading. It first calls \get@external@font which will return in \external@font the name of the external font file (the .tfm) as it was determined by the NFSS tables.

81 ⟨∗2ekernel | package | autoload⟩

82 \def\extract@font{%
83 \get@external@font

Then the external font is loaded and assigned to the font identifier stored inside

\font@name (for this reason we need \expandafter).
84 \global\expandafter\font\font@name\external@font\relax

When tracing we typeout the internal and external font name.

85 ⟨∗trace⟩

86  \ifnum \tracingfonts >\@ne
87  \@font@info{External font `\external@font'
88  loaded as\MessageBreak \font@name}\fi

89 ⟨/trace⟩

Finally we call the corresponding “loading action” macros to finish things. First the font is locally selected to allow the use of \font inside the loading action macros.

90  \font@name \relax

5This file is currently not distributed in documented form. Its code is part of ltfss.dtx.

The next two lines execute the “loading actions” for the family and then for the individual font shape.

91  \csname \f@encoding+\f@family\endcsname
92  \csname\curr@fontshape\endcsname
93  \relax

94 } 95 ⟨/2ekernel | package | autoload⟩

The \relax at the end needs to be explained. This is inserted to prevent TEX from scanning too far when it is executing the replacement text of the loading code macros.

\get@external@font This function tries to find an external font name. It will place the name into the macro \external@font. If no font is found it will return the one that was defined

via \DeclareErrorFont.

96 ⟨∗2ekernel | autoload⟩

97 \def\get@external@font{%

We don’t know the external font name at the beginning.

98 \let\external@font\@empty
99 \edef\font@info{\expandafter\expandafter\expandafter\string
100  \csname \curr@fontshape \endcsname}%
101 \try@size@range

If this failed, we’ll try to substitute another size of the same font. This is done

by the \try@size@substitution macro. It “knows about” \do@extract@font,
\font@name, \f@size, and so on.
102 \ifx\external@font\@empty
103  \try@size@substitution
104  \ifx\external@font\@empty
105  \@latex@error{Font \expandafter \string\font@name\space
106  not found}\@eha
107  \error@fontshape
108  \get@external@font
109 \fi\fi

110 } 111 ⟨/2ekernel | autoload⟩

\selectfont The macro \selectfont is called whenever a font change must take place.

112 ⟨∗2ekernel | package | autoload⟩

113 \DeclareRobustCommand\selectfont

114 {%

When debug is specified we actually want something like ‘undebug’. The font selection is now stable so that using \tracingall on some other macros will show us a lot of unwanted information about font loading. Therefore we disable tracing during font loading as long as \tracingfonts is less than 4.

115 ⟨+debug⟩ \pushtracing
116 ⟨+debug⟩ \ifnum\tracingfonts<4 \tracingoff
117 ⟨+debug⟩ \else \tracingon\p@selectfont \fi

If \baselinestretch was redefined by the user it will not longer match its internal counterpart \f@linespread. If so we call \set@fontsize to prepare

\size@update.
118  \ifx\f@linespread\baselinestretch \else
119  \set@fontsize\baselinestretch\f@size\f@baselineskip \fi

Then we generate the internal name of the font by concatenating family, series, shape, and current size, with slashes as delimiters between them. This is much more readable than standard L^{A}TEX’s \twfbf, etc. We define \font@name globally, as always. The reason for this is explained later on.

120  \xdef\font@name{%
121  \csname\curr@fontshape/\f@size\endcsname}%

We call the macro \pickup@font which will load the font if necessary.

122  \pickup@font

Then we select the font.

123  \font@name

If \tracingfonts is greater than 2 we also show the font switch. We do this before \glb@settings is called since this macro might redefine \font@name.

124 ⟨∗trace⟩

125  \ifnum \tracingfonts>\tw@
126  \@font@info{Switching to \font@name}\fi

127 ⟨/trace⟩

Finally we call \size@update. This macro is normally empty but will contain actions (like setting the \baselineskip) that have to be carried out when the font size, the base \baselineskip or the \baselinestretch have changed.

128  \size@update

A similar function is called to handle anything related to encoding updates. This

one is changed from \relax by \fontencoding.
129  \enc@update

Just before ending this macro we have to pop the tracing stack if it was pushed before.

130 ⟨+debug⟩ \poptracing

131 }

\set@fontsize The macro \set@fontsize does the actual work. First it assigns new values to

\f@size, \f@baselineskip and \f@linespread.
132 \def\set@fontsize#1#2#3{%
133  \@defaultunits\@tempdimb#2pt\relax\@nnil
134  \edef\f@size{\strip@pt\@tempdimb}%
135  \@defaultunits\@tempskipa#3pt\relax\@nnil
136  \edef\f@baselineskip{\the\@tempskipa}%
137  \edef\f@linespread{#1}%

For backward compatibility and for later testing within \selectfont the internal

value of \f@linespread is passed back to \baselinestretch.
138  \let\baselinestretch\f@linespread

Additional processing will happen within \selectfont. For this reason the macro \size@update (which will be called in \selectfont) will be defined to be:

139  \def\size@update{%

First calculate the new \baselineskip and also store it in normalbaselineskip

140  \baselineskip\f@baselineskip\relax
141  \baselineskip\f@linespread\baselineskip
142  \normalbaselineskip\baselineskip

then to set up a new \strutbox

143  \setbox\strutbox\hbox{%
144  \vrule\@height.7\baselineskip
145  \@depth.3\baselineskip
146  \@width\z@}%

We end with a bit of tracing information.

147 ⟨∗trace⟩

148 \ifnum \tracingfonts>\tw@
149  \ifx\f@linespread\@empty
150  \let\reserved@a\@empty
151  \else
152  \def\reserved@a{\f@linespread x}%
153  \fi
154  \@font@info{Changing size to \f@size/\reserved@a
155  \f@baselineskip}%
156  \aftergroup\type@restoreinfo \fi

157 ⟨/trace⟩

When all this is processed \size@update redefines itself to \relax so that in later calls of \selectfont no extra code will be executed.

158  \let\size@update\relax}%

159 }

Instead of defining this macro internally we might speed things up by placing the code into a separate macro and use \let!

\size@update Normally this macro does nothing; it will be redefined by \set@fontsize to initiate an update.

160 \let\size@update\relax

\type@restoreinfo This macro produces some info when a font size and/or baseline change will get restored.

161 ⟨∗trace⟩

162 \def\type@restoreinfo{%
163  \ifx\f@linespread\@empty
164  \let\reserved@a\@empty
165  \else
166  \def\reserved@a{\f@linespread x}%
167  \fi
168  \@font@info{Restoring size to
169  \f@size/\reserved@a\f@baselineskip}}

170 ⟨/trace⟩

\glb@settings \glb@currsize The macro \glb@settings globally selects all math fonts for the current size if necessary.

171 \def\glb@settings{%

When \glb@settings gains control a size change was requested and all previous font assignments need to be replaced. Therefore the old values of the fonts are no longer needed. For every math group the new assignments are appended to \math@fonts. But this happens only if the math@fonts switch is set to true. However, we always set up the correct math sizes for script and scriptscript fonts since they may be needed even if we don’t set up the whole math machinery.

Here we set the math size, script size and scriptscript size. If the S@… macro is not defined we have to first calculate the three sizes.

172  \expandafter\ifx\csname S@\f@size\endcsname\relax
173  \calculate@math@sizes
174  \fi

The effect of this is that \calculate@math@sizes may or may not define the S@… macro. In the first case the next time the same size is requested this macro is used, otherwise \calculate@math@sizes is called again. This also sets the math@fonts switch. If it is true we must switch the math fonts.

175  \csname S@\f@size\endcsname
176  \ifmath@fonts

177 ⟨∗trace⟩

178  \ifnum \tracingfonts>\tw@
179  \@font@info{Setting up math fonts for
180  \f@size/\f@baselineskip}\fi

181 ⟨/trace⟩

Inside a group we execute the macro for the current math version. This sets

\math@fonts to a list of \textfont. . . assignments. \getanddefine@fonts

(which may be called at this point) needs the \escapechar parameter to be set to −1.

182  \begingroup
183  \escapechar\m@ne
184  \csname mv@\math@version \endcsname

Then we set \globaldefs to 1 so that all following changes are done globally. The math font assignments recorded in \math@fonts are executed and \glb@currsize is set equal to \f@size. This signals that the fonts for math in this size are set up.

185  \globaldefs\@ne
186  \math@fonts
187  \let \glb@currsize \f@size
188  \endgroup

Finally we execute any code that is supposed to happen whenever the math font setup changes. This register will be executed in local mode which means that everything that is supposed to have any effect should be done globally inside. We can’t execute it within \globaldefs\@ne as we don’t know what ends up inside this register, e.g., it might contain calculations which use some local registers to calculate the final (global) value.

189  \the\every@math@size

Otherwise we announce that the math fonts are not set up for this size.

190 ⟨∗trace⟩

191  \else
192  \ifnum \tracingfonts>\tw@
193  \@font@info{No math setup for
194  \f@size/\f@baselineskip}\fi

195 ⟨/trace⟩

196  \fi

197 } 198 ⟨/2ekernel | package | autoload⟩

\baselinestretch In \selectfont we used \baselinestretch as a factor when assigning a value to

\baselineskip. We use 1 as a default (i.e. no stretch).

199 ⟨∗2ekernel | autoload⟩

200 \def\baselinestretch{1}
\every@math@size We must still define the hook \every@math@size we used in \glb@settings. We

initialize it to nothing. It is important to remember that everything that goes into this hook should to global updates, local changes will have weird effects.

201 \newtoks\every@math@size
202 \every@math@size={}

203 ⟨/2ekernel | autoload⟩

32.2 Math fonts setup

32.2.1 Outline of algorithm for math font sizes

TEX uses the the math fonts that are current when the end of a formula is reached. If we don’t want to keep font setups local to every formula (which would result in an enormous overhead, we have to be careful not to end up with the wrong setup in case formulas are nested, e.g., we need to be able to handle

 $ a=b+c \mbox{ \small for all $b$ and $c\in Z$}$

Here the inner formulae b and c\in Z are typeset in \small but we have to return to \normalsize before we reach the closing $ of the outer formula.

This is handled in the following way:

1. At any point in the document the global variable \gbl@currsize contains the point size for which the math fonts currently are set up.

2. Whenever we start a formula we compare its value with the local variable \f@size that describes the current text font size.

3. If both are the same we assume that we can use the current math font setup without adjustment.

4. If they differ we call \gbl@settings which changes the math font setup and

updates \gbl@currsize.

(a) If we are recursively inside another formula (\if@inmath) we ensure that \gbl@settings is executed again in the outer formula, so that the old setup is automatically restored.

(b) Otherwise, we set the switch @inmath locally to true so that all nested formulae will be able to detect that they are nested in some outer formula.

The above algorithm has the following features:

• For sizes which are not containing any formula no math setup is done. Compared to the original algorithm of NFSS this results in the following savings:

– No unnecessary loading of math fonts for sizes that are not used to typeset any math formulae (explicit or implicit ones).

– No time overhead due to unnecessary changes of the math font setup on entrance and exit of the text font size.

• Math font setup changes for top-level formulae will survive (there is no restoration after the formula) thus any following formula in the same size will be directly typesetable. Compared to original implementation in NFSS2 the new algorithm has the overhead of one test per formula to see if the current math setup is valid (in the original algorithm the setup was always valid, thus no test was necessary).

• In nested formulae the math font setup is restored in the outer formula by a series of \aftergroup commands and checks. Compared to the original algorithm this involves additional checks (2 × ⟨non-math levels⟩ per inner formula).

32.2.2 Code for math font size setting

\check@mathfonts In the \check@mathfonts macros we implement the steps 2 to 4 except that instead of a switch the macro \init@restore@glb@settings is used.

204 ⟨∗2ekernel | package | autoload⟩

205 \def\check@mathfonts{%
206 \ifx \glb@currsize \f@size

207 ⟨∗trace⟩

208  \ifnum \tracingfonts>\thr@@
209  \@font@info{*** MATH: no change \f@size\space
210  curr/global (\curr@math@size/\glb@currsize)}\fi

211 ⟨/trace⟩

212 \else

213 ⟨∗trace⟩

214  \ifnum \tracingfonts>\thr@@
215  \@font@info{*** MATH: setting up \f@size\space

216  curr/global (\curr@math@size/\glb@currsize)}\fi

217 ⟨/trace⟩

218  \glb@settings
219  \init@restore@glb@settings
220 \fi
221 \let\curr@math@size\f@size
222 \def\init@restore@glb@settings{\aftergroup\restglb@settings}%

223 }

\init@restore@glb@settings This macros does by default nothing but get redefined inside \check@mathfonts to initiate fontsize restoring in nested formulas.

224 ⟨−trace⟩\let\init@restore@glb@settings\relax

225 ⟨∗trace⟩

226 \def\init@restore@glb@settings{%
227  \ifnum \tracingfonts>\thr@@
228  \@font@info{*** MATH: no resetting (not in
229  nested math)}\fi

230 } 231 ⟨/trace⟩

\restglb@settings This macro will be executed the first time after the current formula.

232 \def\restglb@settings{%

233 ⟨∗trace⟩

234  \ifnum \tracingfonts>\thr@@
235  \@font@info{*** MATH: restoring}\fi

236 ⟨/trace⟩

237  \begingroup
238  \let\f@size\curr@math@size
239  \ifx\glb@currsize \f@size

240 ⟨∗trace⟩

241  \ifnum \tracingfonts>\thr@@
242  \@font@info{*** MATH: ... already okay (\f@size)}\fi

243 ⟨/trace⟩

244  \else

245 ⟨∗trace⟩

246  \ifnum \tracingfonts>\thr@@
247  \@font@info{*** MATH: ... to \f@size}\fi

248 ⟨/trace⟩

249  \glb@settings
250  \fi
251  \endgroup

252 }

32.2.3 Other code for math

\use@mathgroup The \use@mathgroup macro should be used in user macros to select a math group. Depending on whether or not the margid option is in force it has two or three arguments. For this reason it should be called as the last macro.

First we test if we are inside math mode since we don’t want to apply a useless definition.

253 \def\use@mathgroup#1#2{\relax\ifmmode

254 ⟨∗trace⟩

255 \ifnum \tracingfonts>\tw@
256  \count@#2\relax
257  \@font@info{Using \noexpand\mathgroup
258  (\the\count@) #2}\fi

259 ⟨/trace⟩

If so we first call the ‘=’ macro (i.e. argument three) to set up special things for the selected math group. Then we call \mathgroup to select the group given by argument two and finally we place #1 (i.e. the argument of the ⟨math alphabet identifier⟩ at the end. This part of the code is surrounded by two commands which behave like \begingroup and \endgroup if we want ⟨math alphabet identifier⟩s but will expand into \@empty if we want simply switches to a new math group. Since argument number 2 may be a digit instead of a control sequence we add a \relax. Otherwise something like \mit{1} would switch to math group 11 (and back) instead of printing an oldstyle 1.

260  \math@bgroup
261  \expandafter\ifx\csname M@\f@encoding\endcsname#1\else
262  #1\fi
263  \mathgroup#2\relax

Before we reinsert the swallowed token (arg. three) into the input stream, in the case that the ⟨math alphabet identifier⟩ isn’t called in math mode, we remove the \fi with the \expandafter trick. This is necessary if the token is actually an macro with arguments. In such a case the \fi will be misinterpreted as the first argument which would be disastrous.

264  \expandafter\math@egroup\fi}%

The surrounding macros equal \begingroup and \endgroup. But using internal names makes it possible to overwrite their meaning in certain cases. This is for example used in AMS-TEX macros for placing accents.

\math@egroup If the margid option is in force (which can be tested by looking at the definition of \math@bgroup we change the \math@egroup command a bit to display the current ⟨math group number⟩ after it closes the scope of ⟨math alphabet⟩ with \endgroup.

265 ⟨∗trace⟩

266 \ifx\math@bgroup\bgroup
267  \def\math@egroup#1{#1\egroup
268  \ifnum \tracingfonts>\tw@
269  \@font@info{Restoring \noexpand\mathgroup
270  (\ifnum\mathgroup=\m@ne default\else \the\mathgroup \fi)%
271  }\fi}
272 \fi

273 ⟨/trace⟩

\getanddefine@fonts \getanddefine@fonts has two arguments: the ⟨math group number⟩ and the family/series/shape name as a control sequence.

274 \def\getanddefine@fonts#1#2{%

First we turn of tracing when \tracingfonts is less than 4.

275 ⟨+debug⟩ \pushtracing
276 ⟨+debug⟩ \ifnum\tracingfonts<4 \tracingoff
277 ⟨+debug⟩ \else \tracingon\getanddefine@fonts \fi

278 ⟨∗trace⟩

279 \ifnum \tracingfonts>\tw@
280 \count@#1\relax
281  \@font@info{\noexpand\mathgroup (\the\count@) #1 :=\MessageBreak
282  \string#2 \tf@size/\sf@size/\ssf@size}\fi

283 ⟨/trace⟩

We append the current \tf@size to #2 to obtain the font name.^{6} Again, font@name is defined globally, for the reasons explained in the description of

\wrong@fontshape.
284 \xdef\font@name{\csname \string#2/\tf@size\endcsname}%

Then we call \pickup@font to load it if necessary. We remember the internal

name as \textfont@name.
285 \pickup@font \let\textfont@name\font@name
Same game for \scriptfont and \scriptscriptfont:
286 \xdef\font@name{\csname \string#2/\sf@size\endcsname}%
287 \pickup@font \let\scriptfont@name\font@name
288 \xdef\font@name{\csname \string#2/\ssf@size\endcsname}%
289 \pickup@font

Then we append the new \textfont… assignments to the \math@fonts.

290 \edef\math@fonts{\math@fonts
291  \textfont#1\textfont@name
292  \scriptfont#1\scriptfont@name
293  \scriptscriptfont#1\font@name}%

Just before ending this macro we have to pop the tracing stack if it was pushed before.

294 ⟨+debug⟩ \poptracing

295 } 296 ⟨/2ekernel | package | autoload⟩

33 Scaled font extraction

\ifnot@nil We begin with a simple auxiliary macro. It checks whether its argument is the token \@nil. If so, it expands to \@gobble which discards the following argument, otherwise it expands to \@firstofone which reproduces it argument.

6One might ask why this expansion does not generate a macro name that starts with an additional \ character. The solution is that \escapechar is set to −1 before \getanddefine@fonts is called.

297 ⟨∗2ekernel | autoload⟩

298 \def\ifnot@nil#1{\def\reserved@a{#1}%
299 \ifx\reserved@a\@nnil \expandafter\@gobble
300 \else \expandafter\@firstofone\fi}
\remove@to@nnil \remove@angles \remove@star Three other auxiliary macros will be needed in the following: \remove@to@nnil

gobbles up everything up to, and including, the next \@nnil token, and \remove@angles and \remove@star do the same for the character > and *, respectively, instead of \@nnil.

301 \def\remove@to@nnil#1\@nnil{}
302 \def\remove@angles#1>{\set@simple@size@args}
303 \def\remove@star#1*{#1}

304 ⟨/2ekernel | autoload⟩

\extract@sizefn This macro takes a size specification and parses it into size function and the optional and mandatory arguments.

305 ⟨∗2ekernel | def2 | autoload⟩

306 \def\extract@sizefn#1*#2\@nil{%
307 \if>#2>\set@size@funct@args#1\@nil
308  \let\sizefn@info\@empty
309 \else\expandafter\set@size@funct@args\remove@star#2\@nil
310  \def\sizefn@info{#1}\fi

311 }

\try@simple@size This function tries to extract the given size (specified by \f@size) for the requested font shape. The font information must already be present in \font@info. The central macro that does the real work is \extract@fontinfo. We will first give a simple example how this macro works, and describe it in full generality later.

Assume that the requested parameters are: encoding scheme ‘OT1’, family ‘cm’, series ‘sansserif’, shape ‘normal’, and size ‘12’. The correspondign font definitions have already been extracted from the macro \OT1/cm/sansserif/normal and stored in font@info. (Otherwise \extract@fontinfo doesn’t get called.) This information consists of a token list made of characters of category code 12 of the form

       <10*>cmss10<12*>cmss12<17*>cmss17

For reasonable packages one usually needs more sizes but this is sufficient to get the flavour. We will define a macro \extract@fontinfo to find the external font name (‘cmss12’) for us:

      \def\extract@fontinfo#1<12*#2>#3<#4\@nnil{%
          \set@simple@size@args#3<#4\@nnil
          \execute@size@function{#2}}

so that when it gets called via

      \extract@fontinfo<10*>cmss10<12*>cmss12<17*>cmss17\@nnil

#1 will contain all characters before <12*>, #2 will be empty, #3 will be exactly cmss12, and #3 will be 17>cmss17. The expansion is therefore

      \set@simple@size@args cmss12<17*>cmss17\@nnil
      \execute@size@function{}

This means: the default (empty) size function will be executed, with its optional argument argument set to empty and its mandatory argument set to cmss12 by \set@simple@size@args. As we discussed earlier, the effect of the default size function is to load the given external font (cmss12) at the specified size (12)— which is exactly what was intended.

But this is only part of the whole story. It may be that the size requested does not occur in the token list \font@info. And the simple definition of \extract@fontinfo we gave above does not allow to specify give more than one size specification in front of the external font name.

Let’s address these two problems separately. The first one is solved with the following trick: We define \extract@fontinfo as follows:

      \def\extract@fontinfo#1<12*#2>#3<#4\@nnil{%
        \ifnot@nil{#3}%
          {\set@simple@size@args#3<#4\@nnil
           \execute@size@function{#2}%
          }}%

How does this work? We call \extract@fontinfo via

      \expandafter\extract@fontinfo\font@info<12*>\@nil<\@nnil

i.e. by appending <12*>\@nil<\@nnil. If the size (‘12’ in this case) appears in \font@info everything works as explained above, the only difference being that argument #4 of \extract@fontinfo additionally gets the tokens <12*>\@nil<\@nnil. However, if the size is not found everything up to the final <12*> is in argument #1, #3 gets \@nil, and #2 and #4 are empty. The macro \ifnot@nil will discard the calls to \set@simple@size@args and execute@size@function, and hence \font@info will continue to be equal to \@empty. This means that no simple size specification matching the requested size could be found.

The second problem (more than one simple size specification for one external font name) will be addressed in \set@simple@size@args below.

The macros are hidden inside other control sequences so that we have to build

\extract@fontinfo in several steps.

So here’s the actual definition of \extract@font in \try@simple@size.

312 % % this could be replaced by \try@size@range making the subst slower!
313 \def\try@simple@size{%

\reserved@a is made an abbreviation for the head of the definition of the macro

\extract@fontinfo.
314  \def\reserved@a{\def\extract@fontinfo####1}%

Now we can define \extract@fontinfo. Here we handle a small but convenient variation: in case of the default (empty) size function it is allowed to omit the * character.

315  \expandafter\reserved@a\expandafter<\f@size>##2<##3\@nnil{%
316  \ifnot@nil{##2}%
317  {\set@simple@size@args##2<##3\@nnil
318  \execute@size@function\sizefn@info
319  }}%

Now we call \extract@fontinfo. Note the <\@nil tokens at the end.

320  \expandafter\expandafter
321  \expandafter\extract@fontinfo\expandafter\font@info
322  \expandafter<\f@size>\@nil<\@nnil

323 }

\set@simple@size@args As promised above, the macro \set@simple@size@args will handle the case of several size specifications in a row. If another size specification follows, the very first token of its argument list is the character <. By starting the definition as follows,

324 \def\set@simple@size@args#1<{%

parameter #1 is empty in this case, and contains the size function’s arguments otherwise. We distinguish these two cases (Note that the character < cannot

appear in #1) by calling \remove@angles for empty #1 and \extract@sizefn

otherwise. In the latter case we have to take care of the remaining character tokens and discard them. This is done by \remove@to@nnil. Note also the use of Kabelschacht’s method.

325  \if<#1<%
326  \expandafter\remove@angles
327  \else
328  \extract@sizefn#1*\@nil
329  \expandafter\remove@to@nnil
330  \fi}

Now, we are through with the case of a simple size, except for calling the size function. This will be handled later, as it is the same mechanism for all types of size specification. We will now proceed to macors for extraction of size range specification.

\extract@rangefontinfo \extract@rangefontinfo goes through a font shape definition in the input until it recognizes the tokens <\@nil->. It looks for font ranges with font size functions. It’s operation is rather simple: it discards everything up to the next size specification and passes this on to \is@range for inspection. The specification (parameter #2 is inserted again, in case it is needed later.

331 \def\extract@rangefontinfo#1<#2>{%
332  \is@range#2->\@nil#2>}

\is@range \is@range is again a sort of dispatcher macro: if the size specification it is looking at is not a range specification it discards it and calls \extract@rangefontinfo to continue the search. Otherwise it calls \check@range to check the requested size against the specified range.

   From the way \is@range is called inside \extract@rangefontinfo we see

that #2 is the character > if the size specification found is a simple one (as it does not contain a - character. This is checked easily enough and \extract@rangefontinfo called again. Note that the extra tokens inserted after the \@nil in the call to \is@range appear at the beginning of the first argument

to \extract@rangefontinfo and are hence ignored.
333 \def\is@range#1-#2\@nil{%
334 \if>#2\expandafter\check@single\else
335  \expandafter\check@range\fi}

\check@range \check@range takes lower bound as parameter #1, upper bound as #2, size function as #3 and the size function’s arguments as #4. If #3 is the special token \@nil \font@info is exhausted and we can stop searching.

336 \def\check@range#1-#2>#3<#4\@nnil{%
337 \ifnot@nil{#3}{%

If #3 wasn’t \@nil we have a range. We start by assuming that we have to recurse. Note that we have to reinsert an < as it was already removed by scanning.

338  \def\reserved@f{\extract@rangefontinfo<#4\@nnil}%

We have to make sure that both boundaries are present, if not we have to set them. Here we check the upper bound. If \upper@bound is zero after the assignment we set it to \maxdimen (upper open range). We need to use a ⟨dimen⟩ register for the scan since we may have a decimal number as the boundary.

339  \upper@bound0#2\p@
340  \ifdim\upper@bound=\z@ \upper@bound\maxdimen\fi

Now we check the upper boundary against \f@size. If it is larger or equal than \f@size this range is no good and we have to recurse.

341  \ifdim \f@size \p@<\upper@bound

Otherwise we have to check the lower bound. This time it is not necessary to scan the boundary value into a register because if it is empty we get zero as desired. We could even omit the 0 which would result in 1pt as default lower boundary. If \f@size is smaller than the boundary we have to recurse.

342  \lower@bound0#1\p@
343  \ifdim \f@size \p@<\lower@bound
344  \else

If both tests are passed we can try executing the size function.

345  \set@simple@size@args#3<#4\@nnil
346  \execute@size@function\sizefn@info

If the function was successful it should have left an external font name in \external@font. We use this to see if we can stop scanning. Otherwise we recurse.

347  \ifx\external@font\@empty
348  \else

349  \let\reserved@f\@empty
350  \fi
351  \fi
352  \fi
353  \reserved@f}}

354 ⟨/2ekernel | def2 | autoload⟩

\lower@bound \upper@bound We use two dimen registers \lower@bound and \upper@bound to store the lower

and upper endpoints of the range we found.

355 ⟨∗2ekernel | autoload⟩

356 \newdimen\lower@bound
357 \newdimen\upper@bound

358 ⟨/2ekernel | autoload⟩

\check@single \check@single takes the size as parameter #1, size function as #2 and the size function’s arguments as #3. We can assume that there is always something in the pipeline since the very last entry is a faked range (see above).

359 ⟨∗2ekernel | def2 | autoload⟩

360 \def\check@single#1>#2<#3\@nnil{%

We start by assuming that we have to recurse. Note that we have to reinsert an < as it was already removed by scanning.

361  \def\reserved@f{\extract@rangefontinfo<#3\@nnil}%

Now we check the the size against \f@size. If it is not equal \f@size it is no good and we have to recurse.

362  \ifdim \f@size \p@=#1\p@

Otherwise if this test is passed we can try executing the size function.

363  \set@simple@size@args#2<#3\@nnil
364  \execute@size@function\sizefn@info

If the function was successful it should have left an external font name in \external@font. We use this to see if we can stop scanning. Otherwise we recurse.

365  \ifx\external@font\@empty
366  \else
367  \let\reserved@f\@empty
368  \fi
369  \fi
370  \reserved@f}

\set@size@funct@args \set@size@funct@args@ This macro sets the optional and mandatory arguments for a size function. If the optional argument is not present it is set to the empty token list. The mandatory argument is delimited by the token \@nil.

371 \def\set@size@funct@args{\@ifnextchar[%
372 \set@size@funct@args@{\set@size@funct@args@[]}}
373 \def\set@size@funct@args@[#1]#2\@nil{%
374 \def\mandatory@arg{#2}%
375 \def\optional@arg{#1}}

376 ⟨/2ekernel | def2 | autoload⟩

\DeclareSizeFunction This function defines a new size function hiding the internal from the designer. The body of the size function may use \optional@arg and \mandatory@arg denoting the optional and mandatory argument that may follow the size specification <...>.

377 ⟨∗2ekernel | autoload⟩

378 \def\DeclareSizeFunction#1#2{\@namedef{s@fct@#1}{#2}}
379 \@onlypreamble\DeclareSizeFunction

380 ⟨/2ekernel | autoload⟩

\execute@size@function This macro is very simple. The only point worth noting is that calling an undefined size function will do nothing (actually execute a \relax).

381 ⟨∗2ekernel | package | autoload⟩

382 \def\execute@size@function#1{%    %%% could be added to autoload as well

383 ⟨∗trace⟩

384  \@ifundefined{s@fct@#1}%
385  {\errmessage{Undefined font size function #1}%
386  \s@fct@}%
387  {\csname s@fct@#1\endcsname}%

388 ⟨/trace⟩

389 ⟨−trace⟩  \csname s@fct@#1\endcsname

390 } 391 ⟨/2ekernel | package | autoload⟩

\try@size@range This macro tries to find a suitable range for requested size (specified by \f@size)

in \font@info. All the relevant action is done in \extract@rangefontinfo.

All that needs to be done is to stuff in the token list in \font@info so that \extract@rangefontinfo can inspect it. Note the <-*\@nil>< token at the end to stop scanning.

392 ⟨∗2ekernel | def2 | autoload⟩

393 \def\try@size@range{%
394  \expandafter\extract@rangefontinfo\font@info <-*>\@nil<\@nnil

395 } 396 ⟨/2ekernel | def2 | autoload⟩

\try@size@substitution This is the last thing that can be tried. If the desired \f@size is found neither among the simple size specifications nor in one of the ranges the whole list of size specifications is searched for a nearby simple size.

397 ⟨∗2ekernel | def1⟩

398 \gdef\try@size@substitution{%

First we do some initializations. \@tempdimb will hold the difference between the wanted size and the best solution found so far, so we initialise it with \maxdimen. The macro \best@size will hold the best size found, nothing found is indicated by the empty value.

399 \@tempdimb \maxdimen
400 \let \best@size \@empty

Now we loop over the specification

401 \expandafter \try@simples \font@info <\number\@M>\@nil<\@nnil

402 } 403 ⟨/2ekernel | def1⟩ 404 ⟨∗autoload⟩

405 \def\try@size@substitution{\try@simples\try@size@substitution}

406 ⟨/autoload⟩

\font@submax \fontsubfuzz The macro \font@submax records the maximal deviation from the desired size encountered so far. Its value is used in a warning message at \end{coument}. The macro \fontsubfuzz contains the amount that will not cause terminal warnings (warnings still go into the transcript file).

407 ⟨∗2ekernel | autoload⟩

408 \def\font@submax{0pt}
409 \def\fontsubfuzz{.4pt}

410 ⟨/2ekernel | autoload⟩

411 ⟨+package⟩\def\fontsubfuzz{0pt}

\try@simples \try@simples goes through a font shape definition in the input until it recognizes the tokens <*\@nil><. It looks for simple sizes to determine the two closest sizes. It is assumed that simple sizes are in increasing order.

412 ⟨∗2ekernel | def1⟩

413 \gdef\try@simples#1<#2>{%
414 \tryif@simple#2->\tryif@simple}

415 ⟨/2ekernel | def1⟩ 416 ⟨∗autoload⟩

417 \def\try@simples{\@autoload{fss1}}

418 ⟨/autoload⟩

\tryis@simple \tryis@simple is similar to \is@range. If it sees a simple size, it checks it against

the value of \f@size and sets \lower@font@size or \higher@font@size. In the

latter case, it stops the iteration. By adding <\number\@M> at the end of the line we always have an end point. This is a hack which probably should be corrected.

First it checks whether it is finished already, then whether the size specification in question is a simple one.

419 ⟨∗2ekernel | def1⟩

420 \gdef\tryif@simple#1-#2\tryif@simple{%

Most common case for \reserved@f first:

421 \let \reserved@f \try@simples
422 \if>#2%

If so, it compares it to the value of \f@size. This is done using a dimen register since there may be fractional numbers.

423  \dimen@ #1\p@
424  \ifdim \dimen@<\@M\p@

If \dimen@ is \@M\p@ we have reached the end of the fontspec (hopefully) otherwise we compare the value with \f@size and compute in \@tempdimc the absolute value of the difference between the two values.

425  \ifdim \f@size\p@<\dimen@
426  \@tempdimc \dimen@
427  \advance\@tempdimc -\f@size\p@
428  \else
429  \@tempdimc \f@size\p@
430  \advance\@tempdimc -\dimen@
431  \fi

The result is then compared with the smallest difference we have encountered, if the new value (in \@tempdimc is smaller) we have found a size which is a better approximation so we make it the \best@size and adjust \@tempdimb.

432  \ifdim \@tempdimc<\@tempdimb
433  \@tempdimb \@tempdimc
434  \def \best@size{#1}%
435  \fi

When we have reached the end of the fontspec we substitute the best size found (if any). We code this inline to save macro space; in the past this was done by a macro called \subst@size.

436  \else

\subst@size This macro substitutes the size recorded in \best@size for the unavailable size \f@size. \font@submax records the maximum difference between desired size and selected size in the whole run.

437 % %\subst@size             %% coded inline
438 % %\def\subst@size{%
439 \ifx \external@font\@empty
440  \ifx \best@size\@empty
441  \else
442  \ifdim \@tempdimb>\font@submax \relax
443  \xdef \font@submax {\the\@tempdimb}%
444  \fi
445  \let \f@user@size \f@size
446  \let \f@size \best@size
447  \ifdim \@tempdimb>\fontsubfuzz\relax
448  \@font@warning{Font\space shape\space
449  `\curr@fontshape'\space in\space size\space
450  <\f@user@size>\space not\space available\MessageBreak
451  size\space <\f@size>\space substituted}%
452  \fi
453  \try@simple@size
454  \do@subst@correction
455  \fi
456 \fi
457 % %}

This brings us back into the main part of \tryif@simple. Finally we get rid of any rubbish left over on the input stack.

458  \let \reserved@f \remove@to@nnil
459  \fi

460 \fi

If it’s a range iterate also.

461 \reserved@f}

462 ⟨/2ekernel | def1⟩

33.1 Sizefunctions

In the following we define some useful size functions.

\s@fct@ This is the default size function. Mandatory argument is an external font name, optinal argument a scale factor. The font is scaled to \f@size if no optional argument is present, and to \f@size multiplied by the optional argument otherwise.

463 ⟨∗2ekernel | autoload⟩

464 \DeclareSizeFunction{}{\empty@sfcnt\@font@warning}
465 \DeclareSizeFunction{s}{\empty@sfcnt\@font@info}

466 ⟨/2ekernel | autoload⟩

467 ⟨∗2ekernel | def2 | autoload⟩

468 \def\empty@sfcnt#1{%
469  \@tempdimb \f@size\p@
470  \ifx\optional@arg\@empty
471  \else
472  \@tempdimb \optional@arg\@tempdimb
473  #1{Font\space shape\space `\curr@fontshape'\space
474  will\space be\MessageBreak
475  scaled\space to\space size\space \the\@tempdimb}%
476  \fi
477  \edef\external@font{\mandatory@arg\space at\the\@tempdimb}}

478 ⟨/2ekernel | def2 | autoload⟩

\s@fct@gen \s@fct@sgen This size function generates the external name from the mandatory argument and the requested user size, and thus can be used for external names where the size is encoded in the font name. The optinal argument a scale factor. The font is scaled to \f@size if no optional argument is present, and to \f@size multiplied by the optional argument otherwise.

479 ⟨∗2ekernel | autoload⟩

480 \DeclareSizeFunction{gen}{\gen@sfcnt\@font@warning}
481 \DeclareSizeFunction{sgen}{\gen@sfcnt\@font@info}

482 ⟨/2ekernel | autoload⟩

483 ⟨∗2ekernel | def2 | autoload⟩

484 \def\gen@sfcnt{%
485  \edef\mandatory@arg{\mandatory@arg\f@size}%
486  \empty@sfcnt}

487 ⟨/2ekernel | def2 | autoload⟩

\s@fct@genb \s@fct@sgenb This size function is similar to gen, but for fonts where the size is encoded in the font name in centipoints, as in the DC fonts version 1.2. The font is scaled to \f@size if no optional argument is present, and to \f@size multiplied by the optional argument otherwise.

488 ⟨∗2ekernel | autoload⟩

489 \DeclareSizeFunction{genb}{\genb@sfcnt\@font@warning}
490 \DeclareSizeFunction{sgenb}{\genb@sfcnt\@font@info}

491 ⟨/2ekernel | autoload⟩

492 ⟨∗2ekernel | def2 | autoload⟩

493 \def\genb@sfcnt{%
494  \edef\mandatory@arg{\mandatory@arg\expandafter\genb@x\f@size..\@@}%
495  \empty@sfcnt}

496 ⟨/2ekernel | def2 | autoload⟩

\genb@x \genb@y The auxiliary macros \genb@x and \genb@y are used to convert the \f@size into centipoints.

497 ⟨∗2ekernel | def2 | autoload⟩

498 \def\genb@x#1.#2.#3\@@{\two@digits{#1}\genb@y#200\@@}
499 \def\genb@y#1#2#3\@@{#1#2}

500 ⟨/2ekernel | def2 | autoload⟩

\s@fct@sub This size function handles font substitution. The mandatory argument is a family/series/shape combination, the optional argument (if present) is ignored. The font encoding scheme cannot be changed. Therefore, the first thing we do is to prepend the encoding scheme.

501 ⟨∗2ekernel | autoload⟩

502 \DeclareSizeFunction{sub}{\sub@sfcnt\@font@warning}
503 \DeclareSizeFunction{ssub}{\sub@sfcnt\@font@info}

504 ⟨/2ekernel | autoload⟩

505 ⟨∗2ekernel | def2 | autoload⟩

506 \def\sub@sfcnt#1{%
507  \edef\mandatory@arg{\f@encoding/\mandatory@arg}%

Next action is split the arg into its individual components and allow for a late font shape load.

508  \begingroup
509  \expandafter\split@name\mandatory@arg/\@nil
510  \try@load@fontshape
511  \endgroup

Then we record the current \f@size since it may get clobbered.

512  \let\f@user@size\f@size

Then we check whether this new combination is defined and give an error message if not. In this case we also switch to \error@fontshape.

513  \expandafter
514  \ifx\csname\mandatory@arg\endcsname\relax
515  \errmessage{No\space declaration\space for\space
516  shape\space \mandatory@arg}%
517  \error@fontshape
518  \else

Otherwise we warn the user about the substitution taking place.

519  #1{Font\space shape\space `\curr@fontshape'\space in\space
520  size\space <\f@size>\space not\space available\MessageBreak
521  Font\space shape\space `\mandatory@arg'\space tried\space
522  instead}%
523  \expandafter\split@name\mandatory@arg/\@nil
524  \fi

Then we restart the font specification scan by calling \get@external@font.

525  \edef\f@size{\f@user@size}%
526  \get@external@font

Finally \do@subst@correction is called to get the font name right.

527  \do@subst@correction

528 } 529 ⟨/2ekernel | def2 | autoload⟩

\s@fct@subf The subf size function allows substitution of another font. The mandatory argument is the external name of the font to be substituted, the optional argument a size scaling factor like in the default size function. The main difference to the default size function is the warning message.

530 ⟨∗2ekernel | autoload⟩

531 \DeclareSizeFunction{subf}{\subf@sfcnt\@font@warning}
532 \DeclareSizeFunction{ssubf}{\subf@sfcnt\@font@info}

533 ⟨/2ekernel | autoload⟩

534 ⟨∗2ekernel | def2 | autoload⟩

535 \def\subf@sfcnt#1{%
536  #1{Font\space shape\space `\curr@fontshape'\space in\space
537  size\space \f@size\space not\space available\MessageBreak
538  external\space font\space `\mandatory@arg'\space used}%
539  \empty@sfcnt#1%

540 } 541 ⟨/2ekernel | def2 | autoload⟩

\s@fct@fixed The fixed size function is for using a font at a different size than requested. A warning message is printed, and the external font to be used is taken from the mandatory argument. If an optional argument is present it is used as the ‘at’ size for the font. Otherwise the font is loaded at its design size.

542 ⟨∗2ekernel | autoload⟩

543 \DeclareSizeFunction{fixed}{\fixed@sfcnt\@font@warning}
544 \DeclareSizeFunction{sfixed}{\fixed@sfcnt\@font@info}

545 ⟨/2ekernel | autoload⟩

546 ⟨∗2ekernel | def2 | autoload⟩

547 \def\fixed@sfcnt#1{%
548 \ifx\optional@arg\@empty
549  \let\external@font\mandatory@arg
550 \else
551  \edef\external@font{\mandatory@arg\space at\optional@arg pt}%
552 \fi

553 #1{External\space font\space `\external@font'\space loaded\space
554  for\space size\MessageBreak
555  <\f@size>}%

556 } 557 ⟨/2ekernel | def2 | autoload⟩

File q

ltfsscmp.dtx

This file contains the implementation of commands giving compatibility with the original ‘NFSS1’ release of the Font Selection Scheme.

Warning: The macro documentation is still basically the documentation from the first NFSS release and therefore in some cases probably not completely accurate.

34 Compatibility code for NFSS release 1

There have been a couple of commands which became obsolete with NFSS2. In the past they have been still part of the kernel code to make it possible to process old packages using those commands but since they take up valuable space we decided to remove them and instead auto-load their definitions if they are actually encountered in some file.

Thus the following code doesn’t really belong to this file but I put it here for the moment until finally a documented version of ltfss.dtx is available.

[ auto-loading not activated ]

\new@fontshape \subst@fontshape \extra@def \default@mextra \define@mathalphabet \define@mathgroup These macros are the interfaces in NFSS1 which shouldn’t be used any longer.

We all define them to call the macro \scan@fontshape which is an internal macro that loads the real definitions and then to execute themselves again. Once this auto-loading has happened they have the definition shown below and thus execute their real code directly.

1 ⟨∗autoload⟩

 2 \def\new@fontshape{\scan@fontshape\new@fontshape}
 3 \def\subst@fontshape{\scan@fontshape\subst@fontshape}
 4 \def\extra@def{\scan@fontshape\extra@def}
 5 \def\default@mextra{\scan@fontshape\default@mextra}
 6 \def\define@mathalphabet{\scan@fontshape\define@mathalphabet}
 7 \def\define@mathgroup{\scan@fontshape\define@mathgroup}

\scan@fontshape Here is the kernel definition for \scan@fontshape which loads the actual definitions from the file nfsscmp.def.

 8 \def\scan@fontshape{\input{nfsscmp.def}}

The following definitions are now placed into the auto-load file.

Since we don’t know when this file will be read in we need to provide ourselves with standard \catcode settings. This is done by placing all definitions in a group and calling \nfss@catcodes. But this macro will also disable spaces which isn’t very appropriate for the following code because it contains a lot of helper messages. Therefore we change this back.

 9 \begingroup
10 \nfss@catcodes
11 \catcode`\ =10\relax

12 ⟨/autoload⟩ 13 ⟨∗compat⟩

\new@fontshape The interface is now \DeclareFontShape.
14 \gdef\new@fontshape#1#2#3#4{%
15  \warn@rel@i\new@fontshape\DeclareFontShape
16  \expandafter\scan@fontshape\@gobble#4<\@nil><<%
17  \DeclareFontShape U{#1}{#2}{#3}\reserved@f}
18 \@onlypreamble\new@fontshape

\warn@rel@i The warning message used above.

19 \gdef\warn@rel@i#1#2{%
20 \@font@warning{***  NFSS release 1 command
21  \noexpand#1found\MessageBreak
22 ***  Update by using release 2 command
23  \string#2.\MessageBreak
24 ***  Recovery is probably possible}%

25 }

26 \@onlypreamble\warn@rel@i

\scan@fontshape This will scan the old font shape definition syntax.

27 \gdef\scan@fontshape{%
28 \let\reserved@f\@empty
29 \let\reserved@e\@empty %        holds last info
30 \scan@@fontshape

31 }

32 \@onlypreamble\scan@fontshape
\scan@@fontshape
33 \gdef\scan@@fontshape#1>#2#3<{%
34 \ifx\@nil#1%
35  \edef\reserved@f{\reserved@f\reserved@e}%
36 \else
37  \def\reserved@b{#1}%       nick names
38  \def\reserved@c{#3}%
39  \in@{ at}{#3}%
40  \ifin@
41  \in@{pt}{#3}%  not a proof but a good chance
42  \ifin@

We grap also everything after pt and discard it if people have forgotten to place a percent sign there.

43  \def\reserved@a##1 at##2pt##3\@nil{%
44  \def\reserved@b{##2}%
45  \def\reserved@c{##1}%
46  }%
47  \reserved@a#3\@nil

48  \fi
49  \fi
50  \ifnum 0<0#2
51  \edef\reserved@d{subf*\reserved@c}%
52  \ifcase #2\or
53  \or
54  \else
55  \errmessage{*** What's this? NFSS release 0? ***}%
56  \fi
57  \else
58  \edef\reserved@d{#2\reserved@c}%
59  \fi
60  \ifx\reserved@d\reserved@e
61  \edef\reserved@f{\reserved@f<\reserved@b>}%
62  \else
63  \edef\reserved@f{\reserved@f\reserved@e<\reserved@b>}%add old info
64  \let\reserved@e\reserved@d
65  \fi
66  \expandafter\scan@@fontshape
67 \fi

68 }

69 \@onlypreamble\scan@@fontshape

\subst@fontshape This is now also handled by the extend syntax of \DeclareFontShape.

70 \gdef\subst@fontshape#1#2#3#4#5#6{%
71  \warn@rel@i\subst@fontshape\DeclareFontShape
72  \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}
73 \@onlypreamble\subst@fontshape
\extra@def This was replaced by \DeclareFontFamily.
74 \gdef\extra@def#1#2#3{%
75  \warn@rel@i\extra@def\DeclareFontFamily
76  \DeclareFontFamily{U}{#1}{}%

77 }

78 \@onlypreamble\extra@def
\default@mextra The new name is \DeclareFontEncodingDefaults but in this case we don’t feel

comfortable with this either.

79 \gdef\default@mextra{%
80 \warn@rel@i\default@mextra\DeclareFontEncodingDefaults

We pick up the argument to \default@mextra implicitly as the second argument

of \DeclareFontEncodingDefaults.
81 \DeclareFontEncodingDefaults\relax

82 }

83 \@onlypreamble\default@mextra
\preload@sizes The new interface is \DeclarePreloadSizes.
84 \gdef\preload@sizes{%

 85  \warn@rel@i\preload@sizes\DeclarePreloadSizes
 86  \DeclarePreloadSizes U%

87 }

 88 \@onlypreamble\preload@sizes

\err@rel@i This macro is used in cases where emulation with NFSS2 features is not really possible.

 89 \gdef\err@rel@i#1#2{%
 90 \@latex@error{***  NFSS release 1 command \noexpand#1found%
 91  ^^J***  Recovery not possible. Use \string#2}%
 92  {The new release of NFSS doesn't support the
 93  \noexpand#1command^^Jany longer.
 94  Please upgrade your file to the syntax of NFSS
 95  release 2^^Jusing the \noexpand#2command.}%

Let’s die.

 96 \batchmode\input.\relax

97 }

 98 \@onlypreamble\err@rel@i
\newmathalphabet \newmathalphabet@@ \newmathalphabet@@@  \newmathalphabet is the old form.
 99 \gdef\newmathalphabet{%
100 \if@no@font@opt
101  \@latex@error{*** NFSS release 1 command
102  \noexpand\newmathalphabet found%
103  ^^J \space*** Automatic recovery not possible.%
104  ^^J \space*** TYPE H for Help%

105 }%

106  {Please look at the file usrguide.tex for hints on
107  how to resolve this problem.}%
108 \else
109  \warn@rel@i\newmathalphabet\DeclareMathAlphabet
110 \fi
111 \@ifstar\newmathalphabet@@@
112  \newmathalphabet@@}
113 \gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}
114 \gdef\newmathalphabet@@@#1#2#3#4{%
115  \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}
116 \@onlypreamble\newmathalphabet
117 \@onlypreamble\newmathalphabet@@
118 \@onlypreamble\newmathalphabet@@@
\if@no@font@opt
\@no@font@optfalse
119 \global\let\if@no@font@opt\iftrue
120 \gdef\@no@font@optfalse{\let\if@no@font@opt\iffalse}

\define@mathalphabet This is a case where dying is best.

121 \gdef\define@mathalphabet{%
122  \err@rel@i\define@mathalphabet\DeclareMathAlphabet

123 }

124 \@onlypreamble\define@mathalphabet

\define@mathgroup And here is another one

125 \gdef\define@mathgroup{%
126  \err@rel@i\define@mathgroup\DeclareSymbolFont

127 }

128 \@onlypreamble\define@mathgroup

129 ⟨/compat⟩

\addtoversion  \addtoversion is the old form.
130 \def\addtoversion#1#2{%
131 \warn@rel@i\addtoversion\SetMathAlphabet
132 \SetMathAlphabet#2{#1}{U}}
133 \@onlypreamble\addtoversion

That finishes the definitions for the old interfaces — but first we better finish the group.

134 ⟨∗autoload⟩

135 \endgroup

136 ⟨/autoload⟩

File r

ltfssdcl.dtx

This file contains the main implementation of the font selection scheme commands. See other parts of the L^{A}TEX distribution, or The L^{A}TEX Companion for higher level documentation of these commands.

Warning: The macro documentation is still basically the documentation from the first NFSS release and therefore in some cases probably not completely accurate.

35 Interface Commands

{\in@ \atop \ifin@} \@in is a utility macro with two arguments. It determines whether its first argument occurs in its second (after expanding it) and sets the switch \if@in accordingly.

1 ⟨∗2ekernel | autoload⟩

 2 \def\in@#1#2{%
 3 \def\in@@##1#1##2##3\in@@{%
 4 \ifx\in@##2\in@false\else\in@true\fi}%
 5 \in@@#2#1\in@\in@@}
 6 \newif\ifin@

Before the \begin{document} command several ⟨math versions⟩ and ⟨math alphabet identifiers⟩ may be declared. In principle, there should be exactly one family/series/shape combination be declared for each version/alphabet pair. But we want to allow for defaults as well for automagical filling of holes.

While building the tables for math alphabet identifiers and math versions we keep several lists:

• the list of all math versions, \version@list, each entry prefixed by the control sequence \version@elt, i.e. this list has the following form

         \version@elt⟨version_{1}⟩\version@elt⟨version_{2}⟩. . .
                                           \version@elt⟨version_{n}⟩

• the list of all math alphabet identifiers. Here every entry has the form: \group@elt⟨math group number⟩ {{⟨default family⟩}{⟨default series⟩}{⟨default shape⟩}}.

• Each defined math alphabet identifier holds a list containing Information about the versions for which it is defined. This list has a more complicated structure: it looks as follows:

\set@alpha⟨the alphabet identifier itself ⟩ \reserved@c⟨math version⟩⟨font info⟩

…

         \@nil

where ⟨font info⟩ is either \reserved@e (if the combination is not defined yet) or

{{⟨family⟩}{⟨series⟩}{⟨shape⟩}}

\version@list We initialize the version list to be empty.

 7 \let\version@list=\@empty
 8 \@onlypreamble\version@list
\version@elt
 9 \let\version@elt\relax
10 \@onlypreamble\version@elt

\new@mathversion The macro \new@mathversion is called with the version control sequence as its argument.

11 %\def\new@mathversion#1{%

The first thing this macro does is to check if the version identifier is already present in \version@list. We enclose \version@list in braces since it might be empty (if no version is defined yet). But this means that we need a suitable number of

\expandafter primitives.
12 %  \expandafter\in@\expandafter#1\expandafter{\version@list}%
13 %  \ifin@

If so it prints an error message. The \next macro is used to get rid of the four characters \mv@ that would otherwise appear at the begin of the version name in the error message.

14 %    \@latex@error{Math version
15 %               `\expandafter\@gobblefour\string#1'
16 %               already defined}\@eha

Otherwise we have a new version, and we can proceed with entering it into the tables. We add it to \version@list. This is very easy: we define \version@elt (which is the delimiter in \version@list) to protect itself and the following token from being expanded and simply redefine \version@list.

17 %  \else
18 %     \global\expandafter\newcount\csname c@\expandafter
19 %                                 \@gobble\string#1\endcsname
20 %     \global\csname c@\expandafter
21 %                                 \@gobble\string#1\endcsname\@ne
22 %     \def\version@elt{\noexpand\version@elt\noexpand}%
23 %     \edef\version@list{\version@list\version@elt#1}%

Then we prepare to enter the new version into all math alphabet identifier lists. Remember that these lists use \reserved@c as delimiter, and that there appears the control sequence \reserved@e that must not be expanded. Therefore we take suitable precautions.

24 %     \def\reserved@c{\noexpand\reserved@c\noexpand}%
25 %     \let\reserved@e\relax

We will now go through the \alpha@list to process every ⟨math alphabet identifier⟩ in turn. Since this list has \group@elt as a delimiter we define this control sequence. It has three arguments as every entry consists of three items (as explained above).

26 %     \def\group@elt##1##2##3{%

The first of these arguments is the ⟨math alphabet identifier⟩. We redefine it by appending the information about the new version at the end of the list contained in it. However, there is one subtlety: the definitions for \reserved@c and \reserved@e made above prevent the main part of the list from being expanded. But we still have to take care of the header and the trailer. To do this we remove the trailer by means of the macro \remove@nil which also protect the header from being expanded. Its definition is given below. Now we can prepare to add the new version.

27 %          \edef##1{\expandafter\remove@nil##1%
28 %                   \reserved@c
29 %                   #1%
30 %                   \reserved@e
31 %                   \noexpand\@nil}}%

Finally we call \alpha@list which will now execute the macro \group@elt once for every defined ⟨math alphabet identifier⟩. And that’s all for now.

32 %     \alpha@list
33 %  \fi}

\alpha@list As we explained above every entry in \alpha@list has the form

\alpha@elt

⟨alphabet identifier⟩⟨internal group number⟩⟨default font assignments⟩… We initialize it to \@empty.

34 \let\alpha@list\@empty
35 \@onlypreamble\alpha@list
\alpha@elt
36 \let\alpha@elt\relax
37 \@onlypreamble\alpha@elt

\newgroup Start the group (fam) allocation at 0. (Doesn’t belong here.)

38 \count18=-1
\stepcounter

\select@group We surround \select@group with braces so that functions using it can be used directly after _or ^. However, if we use oldstyle syntax where the math alphabet doesn’t have arguments (ie if \math@bgroup is not \bgroup) we need to get rid of the extra group.

39 \def\select@group#1#2#3#4{%

40 \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
41 {%
42 \ifmmode
43 \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n
44  \begingroup
45  \escapechar\m@ne
46  \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
47  \globaldefs\@ne  \math@fonts
48  \endgroup
49  \init@restore@version
50  \xdef#1{\noexpand\use@mathgroup\noexpand#2%
51  {\number\csname c@mv@\math@version\endcsname}}%
52  \global\advance\csname c@mv@\math@version\endcsname\@ne
53 \else
54  \let#1\relax
55  \@latex@error{Too many math alphabets used in
56  version \math@version}%
57  \@eha
58 \fi
59 \else \expandafter\non@alpherr\fi
60 #1{#4}%
61 }%

62 }

63 \@onlypreamble\restore@mathversion
\init@restore@version
64 \def\init@restore@version{%
65  \global\let\init@restore@version\relax
66  \xdef\restore@mathversion
67  {\expandafter\noexpand\csname mv@\math@version\endcsname
68  \global\csname c@mv@\math@version\endcsname
69  \number\csname c@mv@\math@version\endcsname\relax}%
70  \aftergroup\dorestore@version

71 }

72 \@onlypreamble\init@restore@version
\non@alpherr

73 ⟨/2ekernel | autoload⟩ 74 ⟨∗2ekernel | autoerr⟩

75 \gdef\non@alpherr#1{\@latex@error{%

Since the argument is the internal alphabet name, we have to get rid of the @ in its name. The trick here is to use \@firstoftwo which is a L^{A}TEX macro which discards the second of two arguments.

76  \expandafter\@firstoftwo\string#1 allowed only in math mode}\@ehd}

77 ⟨/2ekernel | autoerr⟩

78 ⟨autoload⟩\def\non@alpherr{\@autoerr\non@alpherr}

79 ⟨∗2ekernel | autoload⟩

\dorestore@version

 80 \def\dorestore@version
 81 {\ifmmode
 82  \aftergroup\dorestore@version
 83 \else
 84  \gdef\init@restore@version{%
 85  \global\let\init@restore@version\relax
 86  \xdef\restore@mathversion
 87  {\expandafter\noexpand\csname mv@\math@version\endcsname
 88  \global\csname c@mv@\math@version\endcsname
 89  \number\csname c@mv@\math@version\endcsname\relax}%
 90  \aftergroup\dorestore@version
 91  }%
 92  \begingroup
 93  \let\getanddefine@fonts\@gobbletwo
 94  \restore@mathversion
 95  \endgroup
 96 \fi}%
 97 \@onlypreamble\dorestore@version

\document@select@group We surround \select@group with braces so that functions using it can be used directly after _or ^.

 98 \def\document@select@group#1#2#3#4{%
 99 \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi

100 {%

101 \ifmmode
102 \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n
103  \begingroup
104  \escapechar\m@ne
105  \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
106  \globaldefs\@ne  \math@fonts
107  \endgroup
108  \expandafter\extract@alph@from@version
109  \csname mv@\math@version\expandafter\endcsname
110  \expandafter{\number\csname
111  c@mv@\math@version\endcsname}%
112  #1%
113  \global\advance\csname c@mv@\math@version\endcsname\@ne
114 \else
115  \let#1\relax
116  \@latex@error{Too many math alphabets used
117  in version \math@version}%
118  \@eha
119 \fi
120 \else \expandafter\non@alpherr\fi
121 #1{#4}%

122 }% 123 }

\process@table

124 \def\process@table{%
125  \def\cdp@elt##1##2##3##4{%
126  \@font@info{Checking defaults for
127  ##1/##2/##3/##4}%
128  \expandafter
129  \ifx\csname##1/##2/##3/##4\endcsname\relax

Grouping is important for two reasons, first \cdp@elt will get redefined if \Declare... functions are executed within the external .fd file and secondly \try@load@fontshape changes a lot of catcodes without surrounding itself with a group.

130  \begingroup
131  \def\f@encoding{##1}\def\f@family{##2}%
132  \try@load@fontshape
133  \endgroup
134  \fi
135  \expandafter
136  \ifx\csname##1/##2/##3/##4\endcsname\relax
137  \@latex@error{This NFSS system isn't set up properly}%
138  {For encoding scheme ##1 the defaults
139  ##2/##3/##4 do not form a valid font shape}%
140  \else
141  \@font@info{... okay}%
142  \fi}%
143  \cdp@list

Now we make sure that \error@fontshape is okay.

144  \begingroup
145  \escapechar\m@ne
146  \error@fontshape
147  \expandafter\ifx\csname \curr@fontshape\endcsname\relax
148  \begingroup
149  \try@load@fontshape
150  \endgroup
151  \fi
152  \expandafter\ifx\csname \curr@fontshape\endcsname\relax
153  \@latex@error{This NFSS system isn't set up properly}%
154  {The system maintainer forgot to specify a suitable
155  substitution
156  font shape using the \noexpand\DeclareErrorFont
157  command}%
158  \fi
159  \endgroup

Set \select@group to its meaning used within the document body.

160  \let\select@group\document@select@group

Install the default font attributes they are currently pointing to error font shape. Don’t use \reset@font since that would trigger \selectfont.

161  \fontencoding{\encodingdefault}%
162  \fontfamily{\familydefault}%

163  \fontseries{\seriesdefault}%
164  \fontshape{\shapedefault}%

kill all macros not longer needed. we need to add many more!!!!!!

165 \everyjob{}%

166 }

167 \@onlypreamble\process@table
168 %\@onlypreamble\set@mathradical
\DeclareMathVersion
169 \def\DeclareMathVersion#1{%
170 \expandafter\new@mathversion\csname mv@#1\endcsname}
171 \@onlypreamble\DeclareMathVersion
\new@mathversion
172 \def\new@mathversion#1{%
173 \expandafter\in@\expandafter#1\expandafter{\version@list}%
174 \ifin@
175  \@font@info{Redeclaring math version
176  `\expandafter\@gobblefour\string#1'}%
177 \else
178  \global\expandafter\newcount\csname c@\expandafter
179  \@gobble\string#1\endcsname
180  \def\version@elt{\noexpand\version@elt\noexpand}%
181  \edef\version@list{\version@list\version@elt#1}%
182 \fi

\toks@ is used to gather all tokens for the math version. \count@ will be used to count the math groups we add to this version.

183 \toks@{}%
184 \count@\z@

Now we loop over \group@list to add all math groups defined so far to the version and at the same time to count them.

185 \def\group@elt##1##2{%
186  \advance\count@\@ne
187  \addto@hook\toks@{\getanddefine@fonts##1##2}%

188 }%

189 \group@list

We set the counter for this math version to the number of math groups found in

 \group@list.
190 \global\csname c@\expandafter\@gobble\string#1\endcsname\count@

Now we loop over \alpha@list to add all math alphabets known so far. We have to distinugish the case that an alphabet by default should produce an error in new versions.

191 \def\alpha@elt##1##2##3{%
192  \ifx##2\no@alphabet@error
193  \toks@\expandafter{\the\toks@\install@mathalphabet##1%

194  {\no@alphabet@error##1}}%
195  \else
196  \toks@\expandafter{\the\toks@\install@mathalphabet##1%
197  {\select@group##1##2##3}}%
198  \fi

199 }%

200 \alpha@list

Finally we define the math version to expand to the contents of \toks@.

201 \xdef#1{\the\toks@}%

202 }

203 \@onlypreamble\new@mathversion
\DeclareSymbolFont
204 \def\DeclareSymbolFont#1#2#3#4#5{%
205 \@tempswafalse
206 \edef\reserved@b{#2}%
207 \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}%
208  \ifx\reserved@b\reserved@c \@tempswatrue\fi}%
209 \cdp@list
210 \if@tempswa
211 \@ifundefined{sym#1}{%
212  \expandafter\new@mathgroup\csname sym#1\endcsname
213  \expandafter\new@symbolfont\csname sym#1\endcsname
214  {#2}{#3}{#4}{#5}}%

215 {%

216  \@font@info{Redeclaring symbol font `#1'}%

Update the group list.

217  \def\group@elt##1##2{%
218  \noexpand\group@elt\noexpand##1%
219  \expandafter\ifx\csname sym#1\endcsname##1%
220  \expandafter\noexpand\csname#2/#3/#4/#5\endcsname
221  \else
222  \noexpand##2%
223  \fi}%
224  \xdef\group@list{\group@list}%

Update the version list.

225  \def\version@elt##1{%
226  \expandafter
227  \SetSymbolFont@\expandafter##1\csname#2/#3/#4/#5\expandafter
228  \endcsname \csname sym#1\endcsname

229 }%

230  \version@list

231 }%

232 \else
233  \@latex@error{Encoding scheme  `#2' unknown}\@eha
234 \fi

235 }

236 \@onlypreamble\DeclareSymbolFont

\group@list
237 \let\group@list\@empty
238 \@onlypreamble\group@list
\group@elt
239 \let\group@elt\relax
240 \@onlypreamble\group@elt
\new@symbolfont
241 \def\new@symbolfont#1#2#3#4#5{%
242  \toks@\expandafter{\group@list}%
243  \edef\group@list{\the\toks@\noexpand\group@elt\noexpand#1%
244  \expandafter\noexpand\csname#2/#3/#4/#5\endcsname}%
245  \def\version@elt##1{\toks@\expandafter{##1}%
246  \edef##1{\the\toks@\noexpand\getanddefine@fonts
247  #1\expandafter\noexpand\csname#2/#3/#4/#5\endcsname}%
248  \global\advance\csname c@\expandafter
249  \@gobble\string##1\endcsname\@ne

250 }%

251  \version@list

252 }

253 \@onlypreamble\new@symbolfont
\SetSymbolFont
254 \def\SetSymbolFont#1#2#3#4#5#6{%
255 \@tempswafalse
256 \edef\reserved@b{#3}%
257 \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}%
258  \ifx\reserved@b\reserved@c \@tempswatrue\fi}%
259 \cdp@list
260 \if@tempswa
261 \expandafter\SetSymbolFont@
262  \csname mv@#2\expandafter\endcsname\csname#3/#4/#5/#6\expandafter
263  \endcsname \csname sym#1\endcsname
264 \else
265 \@latex@error{Encoding scheme  `#3' unknown}\@eha
266 \fi

267 }

268 \@onlypreamble\SetSymbolFont
\SetSymbolFont@
269 \def\SetSymbolFont@#1#2#3{%
270 \expandafter\in@\expandafter#1\expandafter{\version@list}%
271 \ifin@
272  \expandafter\in@\expandafter#3\expandafter{\group@list}%
273  \ifin@
274  \begingroup
275  \expandafter\get@cdp\string#2\@nil\reserved@a
276  \toks@{}%

277  \def\install@mathalphabet##1##2{%
278  \addto@hook\toks@{\install@mathalphabet##1{##2}}%

279 }%

280  \def\getanddefine@fonts##1##2{%
281  \ifnum##1=#3%
282  \addto@hook\toks@{\getanddefine@fonts#3#2}%
283  \expandafter\get@cdp\string##2\@nil\reserved@b
284  \ifx\reserved@a\reserved@b\else
285  \@font@warning{Encoding `\reserved@b' has changed
286  to `\reserved@a' for symbol font\MessageBreak
287  `\expandafter\@gobblefour\string#3' in the
288  math version `\expandafter
289  \@gobblefour\string#1'}%
290  \fi
291  \@font@info{%
292  Overwriting symbol font
293  `\expandafter\@gobblefour\string#3' in
294  version `\expandafter
295  \@gobblefour\string#1'\MessageBreak
296  \@spaces \expandafter\@gobble\string##2 -->
297  \expandafter\@gobble\string#2}%
298  \else
299  \addto@hook\toks@{\getanddefine@fonts##1##2}%
300  \fi}%
301  #1%
302  \xdef#1{\the\toks@}%
303  \endgroup
304  \else
305  \@latex@error{Symbol font `\expandafter\@gobblefour\string#3'
306  not defined}\@eha
307  \fi
308 \else
309  \@latex@error{Math version `\expandafter\@gobblefour\string#1'
310  is not
311  defined}{You probably mispelled the name of the math
312  version.^^JOr you have to specify an additional package.}%
313 \fi

314 }

315 \@onlypreamble\SetSymbolFont@
\get@cdp
316 \def\get@cdp#1#2/#3\@nil#4{\def#4{#2}}
317 \@onlypreamble\get@cdp
\DeclareMathAlphabet
318 \def\DeclareMathAlphabet#1#2#3#4#5{%
319 \@tempswafalse
320 \edef\reserved@b{#2}%
321 \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}%
322  \ifx\reserved@b\reserved@c \@tempswatrue\fi}%

323 \cdp@list
324 \if@tempswa
325 \expandafter\ifx
326 \csname\expandafter\@gobble\string#1\endcsname
327 \relax
328  \new@mathalphabet#1{#2}{#3}{#4}{#5}%
329 \else

Check if it is already a math alphabet.

330  \edef\reserved@a{\noexpand\in@{\string\select@group}%
331  {\expandafter\meaning\csname @\expandafter
332  \@gobble\string#1\endcsname}}%
333  \reserved@a
334  \ifin@
335  \@font@info{Redeclaring math alphabet \string#1}%
336  \def\version@elt##1{%
337  \expandafter\SetMathAlphabet@\expandafter
338  ##1\csname#2/#3/#4/#5\expandafter\endcsname
339  \csname M@#2\expandafter\endcsname
340  \csname @\expandafter\@gobble\string#1\endcsname#1}%
341  \version@list
342  \else

Check if it is a math alphabet defined via \DeclareSymbolFontAlphabet.

343  \edef\reserved@a{\noexpand\in@{\string\use@mathgroup}%
344  {\expandafter\meaning\csname @\expandafter
345  \@gobble\string#1\endcsname}}%
346  \reserved@a
347  \ifin@

In that case overwriting is simple since there is nothing inserted in the math version macros.

348  \@font@info{Redeclaring math alphabet \string#1}%
349  \new@mathalphabet#1{#2}{#3}{#4}{#5}%

Otherwise panic.

350  \else
351  \@latex@error{Command `\string#1' already defined}\@eha
352  \fi
353  \fi
354 \fi
355 \else
356 \@latex@error{Encoding scheme  `#2' unknown}\@eha
357 \fi

358 }

359 \@onlypreamble\DeclareMathAlphabet
\new@mathalphabet
360 \def\new@mathalphabet#1#2#3#4#5{%
361  \toks@\expandafter{\alpha@list}%

362  \edef#1{\expandafter\noexpand\csname @\expandafter
363  \@gobble\string#1\endcsname
364  \if/#5/%
365  \noexpand\no@alphabet@error
366  \noexpand\no@alphabet@error
367  \else
368  \expandafter\noexpand\csname M@#2\endcsname
369  \expandafter\noexpand\csname#2/#3/#4/#5\endcsname
370  \fi

371 }%

372  \toks2\expandafter{#1}%
373  \edef\alpha@list{\the\toks@\noexpand\alpha@elt\the\toks2}%
374  \def\version@elt##1{\toks@\expandafter{##1}%
375  \edef##1{\the\toks@\install@mathalphabet
376  \expandafter\noexpand
377  \csname @\expandafter\@gobble
378  \string#1\endcsname
379  {\if/#5/%
380  \noexpand\no@alphabet@error
381  \noexpand#1%
382  \else
383  \noexpand\select@group\the\toks2
384  \fi}}%

385 }%

386  \version@list
387  \expandafter\edef\csname @\expandafter\@gobble
388  \string#1\endcsname{\if/#5/%
389  \noexpand\no@alphabet@error
390  \noexpand#1%
391  \else
392  \noexpand\select@group\the\toks2
393  \fi}%
394  \edef#1{\noexpand\protect
395  \expandafter\noexpand\csname @\expandafter
396  \@gobble\string#1\endcsname}%

397 }

398 \@onlypreamble\new@mathalphabet
\SetMathAlphabet
399 \def\SetMathAlphabet#1#2#3#4#5#6{%
400 \@tempswafalse
401 \edef\reserved@b{#3}%
402 \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}%
403  \ifx\reserved@b\reserved@c \@tempswatrue\fi}%
404 \cdp@list
405 \if@tempswa
406 \expandafter\SetMathAlphabet@
407  \csname mv@#2\expandafter\endcsname\csname#3/#4/#5/#6\expandafter
408  \endcsname \csname M@#3\expandafter\endcsname
409  \csname @\expandafter\@gobble\string#1\endcsname#1%

410 \else
411 \@latex@error{Encoding scheme  `#3' unknown}\@eha
412 \fi

413 }

414 \@onlypreamble\SetMathAlphabet
\SetMathAlphabet@
415 \def\SetMathAlphabet@#1#2#3#4#5{%
416 \expandafter\in@\expandafter#1\expandafter{\version@list}%
417 \ifin@
418  \expandafter\in@\expandafter#4\expandafter{\alpha@list}%
419  \ifin@
420  \begingroup
421  \toks@{}%
422  \def\getanddefine@fonts##1##2{%
423  \addto@hook\toks@{\getanddefine@fonts##1##2}%

424 }%

425  \def\reserved@c##1##2##3##4{%                % for message below
426  \expandafter\@gobble\string##4}%
427  \def\install@mathalphabet##1##2{%
428  \ifx##1#4%
429  \addto@hook\toks@
430  {\install@mathalphabet#4{\select@group#4#3#2}}%
431  \@font@info{Overwriting math alphabet
432  `\string#5' in version `\expandafter
433  \@gobblefour\string#1'\MessageBreak
434  \@spaces \reserved@c##2 -->
435  \expandafter\@gobble\string#2}%
436  \else
437  \addto@hook\toks@{\install@mathalphabet##1{##2}}%
438  \fi

439 }%

440  #1%
441  \xdef#1{\the\toks@}%
442  \endgroup
443  \else

If the math alphabet was defined via \DeclareSymbolFontAlphabet we have remove its external definition and add it as a normal math alphabet to every version before trying to change it in one version.

444  \edef\reserved@a{%
445  \noexpand\in@{\string\use@mathgroup}{\meaning#4}}%
446  \reserved@a
447  \ifin@
448  \def\reserved@b##1\use@mathgroup##2##3{%
449  \def\reserved@b{##3}\def\reserved@c{##2}}%
450  \expandafter\reserved@b#4%
451  \begingroup
452  \def\install@mathalphabet##1##2{%
453  \addto@hook\toks@{\install@mathalphabet##1{##2}}%

454 }%

455  \def\getanddefine@fonts##1##2{%
456  \addto@hook\toks@{\getanddefine@fonts##1##2}%
457  \ifnum##1=\reserved@b
458  \expandafter
459  \addto@hook\expandafter\toks@
460  \expandafter{\expandafter\install@mathalphabet
461  \expandafter#4\expandafter
462  {\expandafter\select@group\expandafter
463  #4\reserved@c##2}}%
464  \fi

465 }%

466  \def\version@elt##1{%
467  \toks@{}%
468  ##1%
469  \xdef##1{\the\toks@}%

470 }%

471  \version@list
472  \endgroup

Put it into the \alpha@list with default ‘error’

473  \expandafter\gdef\expandafter\alpha@list\expandafter
474  {\alpha@list
475  \alpha@elt #4\no@alphabet@error \no@alphabet@error}%
476  \gdef#4{\no@alphabet@error #5}% fake things :-)

Then call the internal setting routine again:

477  \SetMathAlphabet@{#1}{#2}{#3}#4#5%
478  \else
479  \@latex@error{Command `\string#5' not defined as a
480  math alphabet}%
481  {Use \noexpand\DeclareMathAlphabet to define it.}%
482  \fi
483  \fi
484 \else
485  \@latex@error{Math version `\expandafter\@gobblefour\string#1'
486  is not
487  defined}{You probably mispelled the name of the math
488  version.^^JOr you have to specify an additional package.}%
489 \fi

490 }

491 \@onlypreamble\SetMathAlphabet@

\DeclareMathAlphabet could do with more checks like allowing single number in #4 lowercase in #4 etc

492 \def\DeclareMathAccent#1#2#3#4{%
493 \expandafter\in@\csname sym#3\expandafter\endcsname
494  \expandafter{\group@list}%
495 \ifin@
496  \begingroup
497  \count\z@=#4\relax

498  \count\tw@\count\z@
499  \divide\count\z@\sixt@@n
500  \count@\count\z@
501  \multiply\count@\sixt@@n
502  \advance\count\tw@-\count@
503  \if\relax\noexpand#1% is command?
504  \edef\reserved@a{\noexpand\in@{\string\mathaccent}{\meaning#1}}%
505  \reserved@a
506  \ifin@
507  \expandafter\set@mathaccent
508  \csname sym#3\endcsname#1#2%
509  {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
510  \@font@info{Redeclaring math accent \string#1}%
511  \else
512  \expandafter\ifx
513  \csname\expandafter\@gobble\string#1\endcsname
514  \relax
515  \expandafter\set@mathaccent
516  \csname sym#3\endcsname#1#2%
517  {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
518  \else
519  \@latex@error{Command `\string#1' already defined}\@eha
520  \fi
521  \fi
522  \else
523  \@latex@error{Not a command name: `\noexpand#1'}\@eha
524  \fi
525  \endgroup
526 \else
527  \@latex@error{Symbol font `#3' is not defined}\@eha
528 \fi

529 }

530 \@onlypreamble\DeclareMathAccent
\set@mathaccent
531 \def\set@mathaccent#1#2#3#4{%
532 \xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}}
533 \@onlypreamble\set@mathaccent
\DeclareMathSymbol
534 \def\DeclareMathSymbol#1#2#3#4{%
535 \expandafter\in@\csname sym#3\expandafter\endcsname
536  \expandafter{\group@list}%
537 \ifin@
538  \begingroup
539  \count\z@=#4\relax
540  \count\tw@\count\z@
541  \divide\count\z@\sixt@@n
542  \count@\count\z@
543  \multiply\count@\sixt@@n

544  \advance\count\tw@-\count@
545  \if\relax\noexpand#1% is command?
546  \edef\reserved@a{\noexpand\in@{\string\mathchar}{\meaning#1}}%
547  \reserved@a
548  \ifin@
549  \expandafter\set@mathsymbol
550  \csname sym#3\endcsname#1#2%
551  {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
552  \@font@info{Redeclaring math symbol \string#1}%
553  \else
554  \expandafter\ifx
555  \csname\expandafter\@gobble\string#1\endcsname
556  \relax
557  \expandafter\set@mathsymbol
558  \csname sym#3\endcsname#1#2%
559  {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
560  \else
561  \@latex@error{Command `\string#1' already defined}\@eha
562  \fi
563  \fi
564  \else
565  \expandafter\set@mathchar
566  \csname sym#3\endcsname#1#2
567  {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
568  \fi
569  \endgroup
570 \else
571  \@latex@error{Symbol font `#3' is not defined}\@eha
572 \fi

573 }

574 \@onlypreamble\DeclareMathSymbol
\set@mathchar
575 \def\set@mathchar#1#2#3#4{%
576 \global\mathcode`#2="\mathchar@type#3\hexnumber@#1#4\relax}
577 \@onlypreamble\set@mathchar
\set@mathsymbol
578 \def\set@mathsymbol#1#2#3#4{%
579 \global\mathchardef#2"\mathchar@type#3\hexnumber@#1#4\relax}
580 \@onlypreamble\set@mathsymbol
581 %\def\mathsymbol#1#2#3{%
582 %  \@tempcnta=#3\relax
583 %  \@tempcntb\@tempcnta
584 %  \divide\@tempcnta\sixt@@n
585 %  \count@\@tempcnta
586 %  \multiply\count@\sixt@@n
587 %  \advance\@tempcntb-\count@
588 %  \mathchar"\mathchar@type#1\hexnumber@#2%

589 %             \hexnumber@\@tempcnta\hexnumber@\@tempcntb\relax}

590 %

591 %\def\DeclareMathAlphabetCharacter#1#2#3{%
592 %  \DeclareMathSymbol{#1}7{#2}{#3}}
\DeclareMathDelimiter
593 \def\DeclareMathDelimiter#1{%
594 \if\relax\noexpand#1%
595  \expandafter\@DeclareMathDelimiter
596 \else
597  \expandafter\@xDeclareMathDelimiter
598 \fi
599 #1}
600 \@onlypreamble\DeclareMathDelimiter
\@DeclareMathDelimiter
601 \def\@DeclareMathDelimiter#1#2#3#4#5#6{%
602 \expandafter\in@\csname sym#3\expandafter\endcsname
603  \expandafter{\group@list}%
604 \ifin@
605  \expandafter\in@\csname sym#5\expandafter\endcsname
606  \expandafter{\group@list}%
607  \ifin@
608  \begingroup
609  \count\z@=#4\relax
610  \count\tw@\count\z@
611  \divide\count\z@\sixt@@n
612  \count@\count\z@
613  \multiply\count@\sixt@@n
614  \advance\count\tw@-\count@
615  \edef\reserved@c{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%

616 %

617  \count\z@=#6\relax
618  \count\tw@\count\z@
619  \divide\count\z@\sixt@@n
620  \count@\count\z@
621  \multiply\count@\sixt@@n
622  \advance\count\tw@-\count@
623  \edef\reserved@d{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%

624 %

625  \edef\reserved@a{\noexpand\in@{\string\delimiter}{\meaning#1}}%
626  \reserved@a
627  \ifin@
628  \expandafter\set@mathdelimiter
629  \csname sym#3\expandafter\endcsname
630  \csname sym#5\endcsname#1#2%
631  \reserved@c\reserved@d
632  \@font@info{Redeclaring math delimiter \string#1}%
633  \else
634  \expandafter\ifx

635  \csname\expandafter\@gobble\string#1\endcsname
636  \relax
637  \expandafter\set@mathdelimiter
638  \csname sym#3\expandafter\endcsname
639  \csname sym#5\endcsname#1#2%
640  \reserved@c\reserved@d
641  \else
642  \@latex@error{Command `\string#1' already defined}\@eha
643  \fi
644  \fi
645  \endgroup
646  \else
647  \@latex@error{Symbol font `#5' is not defined}\@eha
648  \fi
649 \else
650  \@latex@error{Symbol font `#3' is not defined}\@eha
651 \fi

652 }

653 \@onlypreamble\@DeclareMathDelimiter
\@xDeclareMathDelimiter
654 \def\@xDeclareMathDelimiter#1#2#3#4#5{%
655 \expandafter\in@\csname sym#2\expandafter\endcsname
656  \expandafter{\group@list}%
657 \ifin@
658  \expandafter\in@\csname sym#4\expandafter\endcsname
659  \expandafter{\group@list}%
660  \ifin@
661  \begingroup
662  \count\z@=#3\relax
663  \count\tw@\count\z@
664  \divide\count\z@\sixt@@n
665  \count@\count\z@
666  \multiply\count@\sixt@@n
667  \advance\count\tw@-\count@
668  \edef\reserved@c{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%

669 %

670  \count\z@=#5\relax
671  \count\tw@\count\z@
672  \divide\count\z@\sixt@@n
673  \count@\count\z@
674  \multiply\count@\sixt@@n
675  \advance\count\tw@-\count@
676  \edef\reserved@d{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
677  \expandafter\set@@mathdelimiter
678  \csname sym#2\expandafter\endcsname\csname sym#4\endcsname#1%
679  \reserved@c\reserved@d
680  \endgroup
681  \else
682  \@latex@error{Symbol font `#4' is not defined}\@eha

683  \fi
684 \else
685  \@latex@error{Symbol font `#2' is not defined}\@eha
686 \fi

687 }

688 \@onlypreamble\@xDeclareMathDelimiter

\set@mathdelimiter We have to end the definition of a math delimiter like \lfloor with a space and not with \relax as we did before, because otherwise contructs involving \abovewithdelims will prematurely end (pr/1329)

689 \def\set@mathdelimiter#1#2#3#4#5#6{%
690 \xdef#3{\delimiter"\mathchar@type#4\hexnumber@#1#5%
691  \hexnumber@#2#6 }}
692 \@onlypreamble\set@mathdelimiter
\set@@mathdelimiter
693 \def\set@@mathdelimiter#1#2#3#4#5{%
694 \global\delcode`#3="\hexnumber@#1#4\hexnumber@#2#5\relax}
695 \@onlypreamble\set@@mathdelimiter
\DeclareMathRadical
696 \def\DeclareMathRadical#1#2#3#4#5{%

Below is a crude fix to make this macro work if #1 is undefined or \relax. Should be improved!

697 \expandafter\ifx
698  \csname\expandafter\@gobble\string#1\endcsname
699  \relax
700  \let#1\radical
701 \fi
702 \edef\reserved@a{\noexpand\in@{\string\radical}{\meaning#1}}%
703 \reserved@a
704 \ifin@
705  \expandafter\in@\csname sym#2\expandafter\endcsname
706  \expandafter{\group@list}%
707  \ifin@
708  \expandafter\in@\csname sym#4\expandafter\endcsname
709  \expandafter{\group@list}%
710  \ifin@
711  \begingroup
712  \count\z@=#3\relax
713  \count\tw@\count\z@
714  \divide\count\z@\sixt@@n
715  \count@\count\z@
716  \multiply\count@\sixt@@n
717  \advance\count\tw@-\count@
718  \edef\reserved@c{%
719  \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%
720  \count\z@=#5\relax

721  \count\tw@\count\z@
722  \divide\count\z@\sixt@@n
723  \count@\count\z@
724  \multiply\count@\sixt@@n
725  \advance\count\tw@-\count@
726  \edef\reserved@d{%
727  \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}%

Coded inline instead of using \set@mathradical

728 %          \expandafter\set@mathradical
729 %             \csname sym#2\expandafter\endcsname
730 %             \csname sym#4\endcsname#1%
731 %             \reserved@c\reserved@d
732  \xdef#1{\radical"\expandafter\hexnumber@
733  \csname sym#2\endcsname\reserved@c
734  \expandafter\hexnumber@
735  \csname sym#4\endcsname\reserved@d
736  \relax}%
737  \endgroup
738  \else
739  \@latex@error{Symbol font `#4' is not defined}\@eha
740  \fi
741  \else
742  \@latex@error{Symbol font `#2' is not defined}\@eha
743  \fi
744 \else
745  \@latex@error{Command `\string#1' already defined}\@eha
746 \fi

747 }

748 \@onlypreamble\DeclareMathRadical

Definition below was wrong it contained \delimiter !

 \def\set@mathradical#1#2#3#4#5{%
   \xdef#3{\radical"\hexnumber@#1#4\hexnumber@#2#5\relax}}

\mathalpha just a dummy currently

749 \let\mathalpha\relax
\mathchar@type
750 \def\mathchar@type#1{%
751 \ifodd 2#11 #1\else             % is this non-negative number?
752  \ifx#1\mathord 0\else
753  \ifx#1\mathop   1\else
754  \ifx#1\mathbin 2\else
755  \ifx#1\mathrel 3\else
756  \ifx#1\mathopen 4\else
757  \ifx#1\mathclose 5\else
758  \ifx#1\mathpunct 6\else
759  7%             % anything else is variable ord

760  \fi
761  \fi
762  \fi
763  \fi
764  \fi
765  \fi
766  \fi
767 \fi}
768 \@onlypreamble\mathchar@type
\DeclareSymbolFontAlphabet
769 \def\DeclareSymbolFontAlphabet#1#2{%
770 \expandafter\DeclareSymbolFontAlphabet@
771  \csname @\expandafter\@gobble\string#1\endcsname{#2}#1}
772 \@onlypreamble\DeclareSymbolFontAlphabet
\DeclareSymbolFontAlphabet@
773 \def\DeclareSymbolFontAlphabet@#1#2#3{%

We use the switch \if@tempswa to decide if we can declare this symbol font alphabet.

774  \@tempswatrue

First check if #2 is known to be a symbol font

775 \expandafter\in@\csname sym#2\expandafter\endcsname
776  \expandafter{\group@list}%
777 \ifin@

Check if #1 is defined as a math alphabet defined via \DeclareMathAlphabet:

778  \expandafter\in@\expandafter#1\expandafter{\alpha@list}%
779  \ifin@

If so remove it from the \alpha@list and from all math version macros.

780  \@font@info{Redeclaring math alphabet \string#3}%
781  \toks@{}%
782  \def\alpha@elt##1##2##3{%
783  \ifx##1#1\else\addto@hook\toks@{\alpha@elt##1##2##3}\fi}%
784  \alpha@list
785  \xdef\alpha@list{\the\toks@}%

Now we loop over all versions and remove the math alphabet:

786  \def\version@elt##1{%
787  \begingroup
788  \toks@{}%
789  \def\getanddefine@fonts####1####2{%
790  \addto@hook\toks@{\getanddefine@fonts####1####2}}%
791  \def\install@mathalphabet####1####2{%
792  \ifx####1#1\else
793  \addto@hook\toks@{\install@mathalphabet
794  ####1{####2}}\fi}%
795  ##1%

796  \xdef##1{\the\toks@}%
797  \endgroup

798 }%

799  \version@list
800  \else

If #3 is not defined as a math alphabet check if it is defined at all:

801  \expandafter\ifx
802  \csname\expandafter\@gobble\string#1\endcsname
803  \relax

If it is undefined, fine otherwise check if it is a math alphabet defined via

\DeclareSymbolFontAlphabet:
804  \else
805  \edef\reserved@a{%
806  \noexpand\in@{\string\use@mathgroup}{\meaning#1}}%
807  \reserved@a
808  \ifin@
809  \@font@info{Redeclaring math alphabet \string#3}%
810  \else

Since the command #3 is defined to be something which is not a math alphabet we have to skip redefining it.

811  \@tempswafalse
812  \@latex@error{Command `\string#3' already defined}\@eha
813  \fi
814  \fi
815  \fi
816 \else

Since the symbol font is not known we better skip defining this alphabet.

817  \@tempswafalse
818  \@latex@error{Unknown symbol font `#2'}\@eha
819 \fi
820 \if@tempswa

When we reach this point we are allowed to define #1 to be a symbol font math alphabet. This means that we have to set it to

\use@mathgroup ⟨math-settings⟩ \sym⟨name⟩

The ⟨math-settings⟩ are the one for the encoding that is used in the font shape where \sym⟨name⟩ is pointing to. This means that we have to get it from the information stored in \group@list. Thus we loop through that list after defining \group@elt in a suitable way.

821  \def\group@elt##1##2{%
822  \expandafter\ifx\csname sym#2\endcsname##1%
823  \expandafter\reserved@a\string##2\@nil
824  \fi}%
825  \def\reserved@a##1##2/##3\@nil{%
826  \def\reserved@a{##2}}%
827  \group@list

828  \toks@{\relax\ifmmode \else \non@alpherr#1\fi}%
829  \edef#1{\the\toks@
830  \noexpand\use@mathgroup
831  \expandafter\noexpand\csname M@\reserved@a\endcsname
832  \csname sym#2\endcsname}%
833  \def#3{\protect#1}%
834 \fi

835 }

836 \@onlypreamble\DeclareSymbolFontAlphabet@

837 ⟨/2ekernel | autoload⟩

File s

ltfssini.dtx

This file contains the top level L^{A}TEX interface to the font selection scheme commands. See other parts of the L^{A}TEX distribution, or The L^{A}TEX Companion for higher level documentation of these commands.

36 NFSS Initialisation

Finally, there are six commands that are to be used in L^{A}TEX and that we will therefore protect against expansion at the wrong point: \fontfamily, \fontseries,

\fontshape, \fontsize, \selectfont, and \mathversion.

36.1 Providing math versions

L^{A}TEX provides two versions. We call them normal and bold, respectively.

 1 \DeclareMathVersion{normal}
 2 \DeclareMathVersion{bold}

Now we define the standard font change commands. We don’t allow the use of \rmfamily etc. in math mode.

First the changes to another family:

 3 \DeclareRobustCommand\rmfamily
 4  {\not@math@alphabet\rmfamily\mathrm
 5  \fontfamily\rmdefault\selectfont}
 6 \DeclareRobustCommand\sffamily
 7  {\not@math@alphabet\sffamily\mathsf
 8  \fontfamily\sfdefault\selectfont}
 9 \DeclareRobustCommand\ttfamily
10  {\not@math@alphabet\ttfamily\mathtt
11  \fontfamily\ttdefault\selectfont}

Then the commands changing the series:

12 \DeclareRobustCommand\bfseries
13  {\not@math@alphabet\bfseries\mathbf
14  \fontseries\bfdefault\selectfont}
15 \DeclareRobustCommand\mdseries
16  {\not@math@alphabet\mdseries\relax
17  \fontseries\mddefault\selectfont}
18 \DeclareRobustCommand\upshape
19  {\not@math@alphabet\upshape\relax
20  \fontshape\updefault\selectfont}

Then the commands changing the shape:

21 \DeclareRobustCommand\slshape
22  {\not@math@alphabet\slshape\relax
23  \fontshape\sldefault\selectfont}

24 \DeclareRobustCommand\scshape
25  {\not@math@alphabet\scshape\relax
26  \fontshape\scdefault\selectfont}
27 \DeclareRobustCommand\itshape
28  {\not@math@alphabet\itshape\mathit
29  \fontshape\itdefault\selectfont}

We also have to define the emphasize font change command (i.e. \em). This command will look is the current font is sloped (i.e. has a positive \fontdimen1) and will then select either \upshape or \itshape.

30 \DeclareRobustCommand\em
31  {\@nomath\em \ifdim \fontdimen\@ne\font >\z@
32  \upshape \else \itshape \fi}

\not@math@alphabet This function generates an error message when it is called in math mode. The same function should be defined in newlfont.sty.

33 \def\not@math@alphabet#1#2{%
34 \relax
35 \ifmmode
36  \@latex@error{Command \noexpand#1invalid in math mode}%
37  {%
38  Please
39  \ifx#2\relax
40  define a new math alphabet^^J%
41  if you want to use a special font in math mode%
42  \else

We have to a \noexpand below to prevent expansion of #2. In case of #1 we can omit this (due to the current definition of robust commands since they do come out right there :-).

43  use the math alphabet \noexpand#2instead of
44  the #1command%
45  \fi

46 .

47  }%
48 \fi}

Finally we provide two abbreviations to switch to the L^{A}TEX versions.

49 \def\boldmath{\@nomath\boldmath
50  \mathversion{bold}}
51 \def\unboldmath{\@nomath\unboldmath
52  \mathversion{normal}}

Here we switch to the default math version by defining the internal macro \math@version. We dare not to call \mathversion at this place because this

would call \glb@settings.
53 \def\math@version{normal}

36.2 Miscellaneous

\newfont \symbol We start by defining a few macros that are part of standard L^{A}TEX’s user interface. The use of these functions is not encouraged, but they will allow to process older documents without changes to the source.

54 \def\newfont#1#2{\@ifdefinable#1{\font#1=#2\relax}}
55 \def\symbol#1{\char #1\relax}

\@setfontsize \@setsize This abbreviation is used by L^{A}TEX’s user level size changing commands, such as

\large.
56 \def\@setfontsize#1#2#3{\@nomath#1%

For the benefit of people relying on keeping the name of the current font command saved in \@currsize we define it. To ensure that \@setfontsize keeps being robust we omit this assignment during times where \protect differs from

\@typeset@protect.
57  \ifx\protect\@typeset@protect
58  \let\@currsize#1%
59  \fi
60  \fontsize{#2}{#3}\selectfont}

For compatibility we also define \@setsize the 209 command

61 ⟨∗compat⟩

62 \def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}}

63 ⟨/compat⟩

\oldstylenums This macro implements old style numerals but only works if we assume that the standard math fonts are used. Thus it needs changing in case other math encodings are used.

64 \def\oldstylenums#1{%
65 \begingroup

Provide spacing using the interword space of the current font.

66  \spaceskip\fontdimen\tw@\font

Then switch to the math italic font. We don’t change the current value of \f@series which means that you can use bold numerals if \bfseries is in force (For this there must be a substitution of OML/cmm/bx/it into OML/cmm/b/it in the corresponding .fd files.

67  \usefont{OML}{cmm}{\f@series}{it}%
68  \mathgroup\symletters #1%
69 \endgroup

70 }

\hexnumber@ To set up L^{A}TEX’s special math character definitions we first provide a macro to generate hexadecimal numbers. It is a rather simple \ifcase.

71 \def\hexnumber@#1{\ifcase\number#1
72 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or
73 9\or A\or B\or C\or D\or E\or F\fi}

\nfss@text In it simplest form \nfss@text is an \mbox. This will produce unbreakable text outside math and inside math you will get text with the same fonts as outside. The only drawback is that such item won’t change sizes in subscripts. But this behavior can be easily changed. With the amstex style option one will get a sub style called amstext which will redefine the \nfss@text macro to produce correct text in all sizes.

We have to use \def instead of the shorter \let since \mbox is undefined when we reach this point.

74 \def\nfss@text#1{{\mbox{#1}}}

\copyright The definition of \copyright was changed so that it works in other type styles, and to make it robust. We leave the family untouched so that the copyright notice will come out differently if a different font family is in use. This command is commented out, since it is now defined in ltoutenc.dtx.

75 %\DeclareRobustCommand\copyright
76 %    {{\ooalign{\hfil
77 %     \raise.07ex\hbox{\mdseries\upshape c}\hfil\crcr
78 %     \mathhexbox20D}}}

\normalfont \reset@font \p@reset@font The macro \reset@font is used in L^{A}TEX to switch to a standard font, in order to initialize the current font in situations where typesetting is done in a new visual context (e.g. in a footnote). We define it here to allow the test for the new L^{A}TEX version above but nevertheless are able to run all kind of mixtures.

The user interface name for \reset@font is \normalfont:

79 \DeclareRobustCommand\normalfont
80  {\usefont\encodingdefault
81  \familydefault
82  \seriesdefault
83  \shapedefault
84  \relax}
85 \let\reset@font\normalfont

We left out the special L^{A}TEX fonts which are not automatically included in the base version of the font selection since these fonts contain only a few characters which are also included in the AMS fonts so anybody who is using these fonts doesn’t need them. But for compatibility reasons we will define these symbols.

86 \def\not@base#1{\@latex@error
87 {Command \noexpand#1not provided in base LaTeX2e}%
88 {Load the latexsym or the amsfonts package to
89 define this symbol}}
90 \def\mho{\not@base\mho}
91 \def\Join{\not@base\Join}
92 \def\Box{\not@base\Box}
93 \def\Diamond{\not@base\Diamond}
94 \def\leadsto{\not@base\leadsto}
95 \def\sqsubset{\not@base\sqsubset}
96 \def\sqsupset{\not@base\sqsupset}

 97 \def\lhd{\not@base\lhd}
 98 \def\unlhd{\not@base\unlhd}
 99 \def\rhd{\not@base\rhd}
100 \def\unrhd{\not@base\unrhd}

We now initialize all variables set by \DeclareErrorFont. These values are not really important since they will be overwritten later on by the definition in

 fontdef.ltx.

However, if fontdef.cfg is corrupted then at least a hopefully suitable error font is present.

101 \DeclareErrorFont{OT1}{cmr}{m}{n}{10}  %%% don't modify this setting
102  %%% overwrite it in fontdef.cfg
103  %%% if necessary

We now load the customizable parts of NFSS.

104 \ifnum\inputlineno=\m@ne

Still using TEX2. need a configuration file to avoid setting the 8bit characters.

105 \InputIfFileExists{fonttext.cfg}
106  {\typeout{====================================^^J%
107  ^^J%
108  Local config file fonttext.cfg used^^J%
109  ^^J%
110  ====================================}%
111  \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%

112 }

113  {\typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
114  !^^J%
115  ! You MUST use a fonttext.cfg file!^^J%
116  ! As you are still using TeX2!!!!!^^J%
117  !^^J%
118  ! See the documentation file tex2.txt^^J%
119  !^^J%
120  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}%
121  \batchmode \@@end}
122 \else

With TEX3 can use the standard ltx file if no configuration file exists.

123 \InputIfFileExists{fonttext.cfg}
124  {\typeout{====================================^^J%
125  ^^J%
126  Local config file fonttext.cfg used^^J%
127  ^^J%
128  ====================================}%
129  \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%

130 }

131  {\input{fonttext.ltx}}
132 \fi
133 \let\@addtofilelist\@gobble

Ditto for math although I don’t that we will get a lot of customisation :-)

134 \InputIfFileExists{fontmath.cfg}
135  {\typeout{====================================^^J%
136  ^^J%
137  Local config file fontmath.cfg used^^J%
138  ^^J%
139  ====================================}%
140  \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%

141 }

142  {\input{fontmath.ltx}}
143 \let\@addtofilelist\@gobble

Then we preload several fonts. This file might be customized without changing the behavior of the format (i.e. necessary font definitions will be loaded at runtime if they are not preloaded). This is done in the file preload.ltx.

144 \InputIfFileExists{preload.cfg}
145  {\typeout{====================================^^J%
146  ^^J%
147  Local config file preload.cfg used^^J%
148  ^^J%
149  =====================================}%
150  \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%

151 }

152  {\input{preload.ltx}}
153 \let\@addtofilelist\@gobble

\@acci \@accii \@acciii We also save the values of some accents in \@acci, \@accii and \@acciii so they can be restored by a minipage inside a tabbing environment.

154 \let\@acci\' \let\@accii\` \let\@acciii\=

{\cal \atop \mit} Here were the two old ⟨alphabet identifiers⟩.

File t

fontdef.dtx

37 Introduction

This file is used to generate the files fonttext.ltx (text font declarations) and fontmath.ltx (math font declarations), which are used during the format generation. It contains the declaration of the standard text encodings used at the site as well as a minimal subset of font shape groups that NFSS will look at to ensure that the specified encodings are valid.

The math part contains the setup for math encodings as well as the default math symbol declarations that belong to the encoding.

It is possible to change this setup (by using other fonts, or defaults) without losing the ability to process documents written at other sites. Portability in this sense means that a document will compile without errors. It does not mean, however, that identical output will be produced. For this it is necessary that the distributed setup is used at both installations.

38 Customization

You are not allowed to change this source file! If you want to change the default encodings and/or the font shape groups preloaded you should should create a copy of fonttext.ltx under the name fonttext.cfg and change this copy. If L^{A}TEX 2ε finds a file of this name it will use it, otherwise it uses the standard file which is

fontdef.ltx.

If you don’t plan to use Computer Modern much or at all, it might (!) be a good idea to make your own fonttext.cfg. Look at the comments below (docstrip module ‘text’) to see what should should go into such a file.

To change the math font setup use a copy of fontmath.ltx under the name fontmath.cfg and change this copy. However, dealing with this interface is even more a job for an expert than changing the text font setup — in short, we don’t encourage either.

Warning: please note that we don’t support customised L^{A}TEX versions. Thus, before sending in a bug report please try your test file with a L^{A}TEX format which is not customised and send in the log from that version (unless the problem goes away).

Please note: the following standard encodings have to be defined in all local variants of font....cfg to guarantee that all L^{A}TEX installations behave in the same way.

T1 Cork TEX text encoding
OT1 old TEX text encoding
U  unknown encoding
OML old TEX math letters encoding
OMS old TEX math symbols encoding
OMX old TEX math extension symbols encoding

Notice that some of these encodings are ‘old’ in the sense that we hope that they will be superseded soon by encoding standards defined by the TEX user community. Therefore this set of default encodings may change in the future.

The first candidate is OT1 which will soon be replaced by T1, the official TEX text encoding.

Warning: If you add additional encodings to this file there is no guarantee any longer that files processable at your installation will also be processable at other installations. Thus, if you make use of such an encoding in your document, e.g. if you intend to typeset in Cyrillic (OT2 encoding), you need to specify this encoding in the preamble of your document prior to sending it to another installation. Once the encoding is specified in that place in your document, the document is processable at all L^{A}TEX installations (provided they have suitable fonts installed).

For this reason we suggest that you define a short package file that sets up an additional encoding used at your site (rather than putting the encoding into this file) since this package can easily be shipped with your document.

39 The docstrip modules

The following modules are used to direct docstrip in generating external files:

driver produce a documentation driver file
text  produce the file fonttext.ltx
math produce the file fonttext.ltx

A typical docstrip command file would then have entries like:

\generateFile{fonttext.ltx}{t}{\from{fontdef.dtx}{text}}

40 A driver for this document

The next bit of code contains the documentation driver file for TEX, i.e. the file that will produce the documentation you are currently reading. It will be extracted from this file by the docstrip program.

1 ⟨∗driver⟩

2 \documentclass{ltxdoc}

 3 \GetFileInfo{fontdef.dtx}
 4 \begin{document}
 5 \DocInput{fontdef.dtx}
 6 \end{document}

7 ⟨/driver⟩

41 The fonttext.ltx file

The identification is done earlier on with a \ProvidesFile declaration.

8 ⟨∗text⟩

 9 \typeout{=== Don't modify this file, use a .cfg file instead ===^^J}

41.1 Encodings

This file declares the standard encodings for text and math fonts. All others should be declared in packages or in the documents directly.

For every text encoding there are normally a number of encoding specific commands, e.g. accents, special characters, etc. (The definition for such a command might have to change when the encoding is changed, because the character is in a different position, or not available at all, or the accent is produced in a different way.) This is handled by a general mechanism which is described in ltoutenc.dtx.

By convention, text encoding specific declarations, including the declaration \DeclareFontEncoding, are kept in separate file of the form ⟨enc⟩enc.def, e.g. ot1enc.def. This allows other applications to make use of the declarations as well.

Similar to the default encoding, the loading of the encoding files for the two major text encodings shouldn’t be changed. In particular, the inputenc package depends on this.

10 \input {omlenc.def}
11 \input  {t1enc.def}
12 \input {ot1enc.def}       % <- should come after T1 for speed
13 \input {omsenc.def}

We then set set the default text font encoding. This will hopefully change some day to T1. This setting should not be changed to produce a portable format.

14 \fontencoding{OT1}

If different encodings for text fonts are in use one could put the common setup into \DeclareFontEncodingDefaults. There is now a better mechanism so using this interface is discouraged!

15 \DeclareFontEncodingDefaults{}{}

Then we define the default substitution for every encoding. This release of L^{A}TEX 2ε assumes that the ec fonts are available. It is possible to change this to point to some other font family (e.g., Times with the appropriate encoding if it is available) without making documents non-portable. However, in such a case documents will produce different page breaks at other sites. The substitution defaults can all be changed without losing portability as long as there are font shape definitions for the selected substitutions.

16 \DeclareFontSubstitution{T1}{cmr}{m}{n}
17 \DeclareFontSubstitution{OT1}{cmr}{m}{n}

For every encoding declaration, L^{A}TEX 2ε will try to verify that the given substitution information makes sense, i.e. that it is impossible to go into an endless loop if font substitution happens. This is done at the moment the \begin{document} is encountered. L^{A}TEX 2ε will then check that for every encoding the substitution defaults form a valid font shape group, which means that it will check if there is a \DeclareFontShape declaration for this combination. We will therefore load the corresponding .fd files now. If we don’t do this they would be loaded at verification time (i.e. at \begin{document} which would delay processing unnecessarily.

Warning: Please note that this means that you have to regenerate the format whenever you change any of these .fd files since L^{A}TEX 2ε will not read .fd files if it already knows about the encoding/family combination.

The \nfss@catcodes ensures that white space is ignored in any definitions made in the fd files.

18 \begingroup
19 \nfss@catcodes
20 \input  {t1cmr.fd}
21 \input  {ot1cmr.fd}
22 \endgroup

We also load some other font definition files which are normally needed in a document. This is only done for processing speed and you can comment the next two lines out to save some memory. If necessary these files are then loaded when your document is processed. (Loading .fd files is a less drastic step compared to preloading fonts because the number of fonts is limited 255 at (nearly) every TEX installation, while the amount of main memory is not a limiting factor at most installations.)

23 \begingroup
24 \nfss@catcodes
25 \input {ot1cmss.fd}
26 \input {ot1cmtt.fd}
27 \endgroup

Even with all the precautions it is still possible that NFSS will run into problems, for example, when a .fd file contains corrupted data. To guard against such cases NFSS has a very low-level fallback font that is installed with the following line.

28 \DeclareErrorFont{OT1}{cmr}{m}{n}{10}

This means, “if everything else fails use Computer Modern Roman normal shape at 10pt in the old text encoding”. You can change the font used but the encoding should be the same as the one specified with \fontencoding above.

41.2 Defaults

To allow the use of \rmfamily, \sffamily, etc. in documents even if non-standard families are used we provide nine macros which hold the name of the corresponding families, series, and so on. This makes it easy to use other font families (like Times Roman, etc.). One simply has to redefine these defaults.

All these hooks have to be defined in this file but you can change their meaning (except for \encodingdefault) without making documents non-portable.

\rmdefault \sfdefault \ttdefault The following three definitions set up the meaning for \rmfamily, \sffamily, and

\ttfamily.
29 \newcommand\rmdefault{cmr}
30 \newcommand\sfdefault{cmss}
31 \newcommand\ttdefault{cmtt}

\bfdefault \mddefault Series changing commands are influenced by the following hooks.

32 \newcommand\bfdefault{bx}
33 \newcommand\mddefault{m}

\itdefault \sldefault \scdefault \updefault Shape changing commands use the following hooks.

34 \newcommand\itdefault{it}
35 \newcommand\sldefault{sl}
36 \newcommand\scdefault{sc}
37 \newcommand\updefault{n}
\encodingdefault \familydefault \seriesdefault \shapedefault Finally we have the hooks that describe the behaviour of the \normalfont com-

mand. To stay portable, the definition of \encodingdefault should not be changed and should match the setting above for \fontencoding. All other values can be set according to your taste.

38 \newcommand\encodingdefault{OT1}
39 \newcommand\familydefault{\rmdefault}
40 \newcommand\seriesdefault{\mddefault}
41 \newcommand\shapedefault{\updefault}

This finishes the low-level setup in fonttext.ltx.

42 ⟨/text⟩

42 The fontmath.ltx file

The identification is done earlier on with a \ProvidesFile declaration.

43 ⟨∗math⟩

44 \typeout{=== Don't modify this file, use a .cfg file instead ===^^J}

42.1 The font encodings used

45 \DeclareFontEncoding{OML}{}{}
46 \DeclareFontEncoding{OMS}{}{}
47 \DeclareFontEncoding{OMX}{}{}

Finally a declaration for U encoding which serves for all fonts that do not fit standard encodings. For math this sets up \noaccents@ providing for AMS-L^{A}TEX. This macro is used therein to handle accented characters if they are not supported by the font. In other words, if fonts with U encoding are used in math, all accents (like from \breve) are obtained from some other font that has them.

48 \DeclareFontEncoding{U}{}{\noaccents@}

The encodings for math are next:

49 \DeclareFontSubstitution{OML}{cmm}{m}{it}
50 \DeclareFontSubstitution{OMS}{cmsy}{m}{n}
51 \DeclareFontSubstitution{OMX}{cmex}{m}{n}
52 \DeclareFontSubstitution{U}{cmr}{m}{n}
53 \begingroup
54 \nfss@catcodes
55 \input  {omlcmm.fd}
56 \input  {omscmsy.fd}
57 \input  {omxcmex.fd}
58 \input  {ucmr.fd}
59 \endgroup

42.1.1 Symbolfont and Alphabet declarations

We now define the basic symbol fonts used by L^{A}TEX. These four symbol fonts must be defined by this file.

It is possible to make the symbol fonts point to other external fonts without losing the ability to process documents written at other sites, as long as one defines the same symbol font names with the same encodings, e.g. operators with OT1 etc. If other encodings are used documents become non-portable. Such a change should therefore be done in a package file.

60 \DeclareSymbolFont{operators}   {OT1}{cmr} {m}{n}
61 \DeclareSymbolFont{letters}     {OML}{cmm} {m}{it}
62 \DeclareSymbolFont{symbols}     {OMS}{cmsy}{m}{n}
63 \DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
64 \SetSymbolFont{operators}{bold}{OT1}{cmr} {bx}{n}
65 \SetSymbolFont{letters}  {bold}{OML}{cmm} {b}{it}
66 \SetSymbolFont{symbols}  {bold}{OMS}{cmsy}{b}{n}

Below are the seven math alphabets which are defined by NFSS. Again they must be defined by this file. However, as before you can change the fonts used without losing portability, but you should be careful when changing the encoding since that may make documents come out wrong.

67 \DeclareSymbolFontAlphabet{\mathrm}    {operators}
68 \DeclareSymbolFontAlphabet{\mathnormal}{letters}
69 \DeclareSymbolFontAlphabet{\mathcal}   {symbols}

70 \DeclareMathAlphabet      {\mathbf}{OT1}{cmr}{bx}{n}
71 \DeclareMathAlphabet      {\mathsf}{OT1}{cmss}{m}{n}
72 \DeclareMathAlphabet      {\mathit}{OT1}{cmr}{m}{it}
73 \DeclareMathAlphabet      {\mathtt}{OT1}{cmtt}{m}{n}

Given the currently available fonts we cannot bold-en \mathbf and \mathtt but in principle one could use ‘ultra bold’ or something. The alphabets defined via \DeclareSymbolFontAlphabet will change automatically in a new math version if the corresponding symbol font changes.

74 \SetMathAlphabet\mathsf{bold}{OT1}{cmss}{bx}{n}
75 \SetMathAlphabet\mathit{bold}{OT1}{cmr}{bx}{it}

42.2 Math font sizes

The declarations below declare the text, script and scriptscript size to be used for each text font size.

All occurences of sizes longer than a single character are replaced with the macro name that holds them, saving a number of tokens (but losing a bit of speed, so this may not stay this way).

76 \DeclareMathSizes{5}{5}{5}{5}
77 \DeclareMathSizes{6}{6}{5}{5}
78 \DeclareMathSizes{7}{7}{5}{5}
79 \DeclareMathSizes{8}{8}{6}{5}
80 \DeclareMathSizes{9}{9}{6}{5}
81 \DeclareMathSizes{\@xpt}{\@xpt}{7}{5}
82 \DeclareMathSizes{\@xipt}{\@xipt}{8}{6}
83 \DeclareMathSizes{\@xiipt}{\@xiipt}{8}{6}
84 \DeclareMathSizes{\@xivpt}{\@xivpt}{\@xpt}{7}
85 \DeclareMathSizes{\@xviipt}{\@xviipt}{\@xiipt}{\@xpt}
86 \DeclareMathSizes{\@xxpt}{\@xxpt}{\@xivpt}{\@xiipt}
87 \DeclareMathSizes{\@xxvpt}{\@xxvpt}{\@xxpt}{\@xviipt}

42.3 The math symbol assignments

We start by setting up math codes for most of the characters typed in directly from the keyboard. Most of them are normally already setup up in the same way by IniTEX. However, we repeat them here to have a complete setup which can be exchanged with another if desired.

42.3.1 The letters

88 \DeclareMathSymbol{a}{\mathalpha}{letters}{`a}
89 \DeclareMathSymbol{b}{\mathalpha}{letters}{`b}
90 \DeclareMathSymbol{c}{\mathalpha}{letters}{`c}
91 \DeclareMathSymbol{d}{\mathalpha}{letters}{`d}
92 \DeclareMathSymbol{e}{\mathalpha}{letters}{`e}
93 \DeclareMathSymbol{f}{\mathalpha}{letters}{`f}
94 \DeclareMathSymbol{g}{\mathalpha}{letters}{`g}
95 \DeclareMathSymbol{h}{\mathalpha}{letters}{`h}

 96 \DeclareMathSymbol{i}{\mathalpha}{letters}{`i}
 97 \DeclareMathSymbol{j}{\mathalpha}{letters}{`j}
 98 \DeclareMathSymbol{k}{\mathalpha}{letters}{`k}
 99 \DeclareMathSymbol{l}{\mathalpha}{letters}{`l}
100 \DeclareMathSymbol{m}{\mathalpha}{letters}{`m}
101 \DeclareMathSymbol{n}{\mathalpha}{letters}{`n}
102 \DeclareMathSymbol{o}{\mathalpha}{letters}{`o}
103 \DeclareMathSymbol{p}{\mathalpha}{letters}{`p}
104 \DeclareMathSymbol{q}{\mathalpha}{letters}{`q}
105 \DeclareMathSymbol{r}{\mathalpha}{letters}{`r}
106 \DeclareMathSymbol{s}{\mathalpha}{letters}{`s}
107 \DeclareMathSymbol{t}{\mathalpha}{letters}{`t}
108 \DeclareMathSymbol{u}{\mathalpha}{letters}{`u}
109 \DeclareMathSymbol{v}{\mathalpha}{letters}{`v}
110 \DeclareMathSymbol{w}{\mathalpha}{letters}{`w}
111 \DeclareMathSymbol{x}{\mathalpha}{letters}{`x}
112 \DeclareMathSymbol{y}{\mathalpha}{letters}{`y}
113 \DeclareMathSymbol{z}{\mathalpha}{letters}{`z}
114 \DeclareMathSymbol{A}{\mathalpha}{letters}{`A}
115 \DeclareMathSymbol{B}{\mathalpha}{letters}{`B}
116 \DeclareMathSymbol{C}{\mathalpha}{letters}{`C}
117 \DeclareMathSymbol{D}{\mathalpha}{letters}{`D}
118 \DeclareMathSymbol{E}{\mathalpha}{letters}{`E}
119 \DeclareMathSymbol{F}{\mathalpha}{letters}{`F}
120 \DeclareMathSymbol{G}{\mathalpha}{letters}{`G}
121 \DeclareMathSymbol{H}{\mathalpha}{letters}{`H}
122 \DeclareMathSymbol{I}{\mathalpha}{letters}{`I}
123 \DeclareMathSymbol{J}{\mathalpha}{letters}{`J}
124 \DeclareMathSymbol{K}{\mathalpha}{letters}{`K}
125 \DeclareMathSymbol{L}{\mathalpha}{letters}{`L}
126 \DeclareMathSymbol{M}{\mathalpha}{letters}{`M}
127 \DeclareMathSymbol{N}{\mathalpha}{letters}{`N}
128 \DeclareMathSymbol{O}{\mathalpha}{letters}{`O}
129 \DeclareMathSymbol{P}{\mathalpha}{letters}{`P}
130 \DeclareMathSymbol{Q}{\mathalpha}{letters}{`Q}
131 \DeclareMathSymbol{R}{\mathalpha}{letters}{`R}
132 \DeclareMathSymbol{S}{\mathalpha}{letters}{`S}
133 \DeclareMathSymbol{T}{\mathalpha}{letters}{`T}
134 \DeclareMathSymbol{U}{\mathalpha}{letters}{`U}
135 \DeclareMathSymbol{V}{\mathalpha}{letters}{`V}
136 \DeclareMathSymbol{W}{\mathalpha}{letters}{`W}
137 \DeclareMathSymbol{X}{\mathalpha}{letters}{`X}
138 \DeclareMathSymbol{Y}{\mathalpha}{letters}{`Y}
139 \DeclareMathSymbol{Z}{\mathalpha}{letters}{`Z}

42.3.2 The digits

140 \DeclareMathSymbol{0}{\mathalpha}{operators}{`0}
141 \DeclareMathSymbol{1}{\mathalpha}{operators}{`1}
142 \DeclareMathSymbol{2}{\mathalpha}{operators}{`2}

143 \DeclareMathSymbol{3}{\mathalpha}{operators}{`3}
144 \DeclareMathSymbol{4}{\mathalpha}{operators}{`4}
145 \DeclareMathSymbol{5}{\mathalpha}{operators}{`5}
146 \DeclareMathSymbol{6}{\mathalpha}{operators}{`6}
147 \DeclareMathSymbol{7}{\mathalpha}{operators}{`7}
148 \DeclareMathSymbol{8}{\mathalpha}{operators}{`8}
149 \DeclareMathSymbol{9}{\mathalpha}{operators}{`9}

42.3.3 Punctuation, brace, etc. keys

150 \DeclareMathSymbol{!}{\mathclose}{operators}{"21}
151 \DeclareMathSymbol{(}{\mathopen}{operators}{"28}
152 \DeclareMathSymbol{)}{\mathclose}{operators}{"29}
153 \DeclareMathSymbol{*}{\mathbin}{symbols}{"03} % \ast
154 \DeclareMathSymbol{+}{\mathbin}{operators}{"2B}
155 \DeclareMathSymbol{,}{\mathpunct}{letters}{"3B}
156 \DeclareMathSymbol{-}{\mathbin}{symbols}{"00}
157 \DeclareMathSymbol{.}{\mathord}{letters}{"3A}
158 \DeclareMathSymbol{/}{\mathord}{letters}{"3D}
159 \DeclareMathSymbol{:}{\mathrel}{operators}{"3A}
160 \DeclareMathSymbol{;}{\mathpunct}{operators}{"3B}
161 \DeclareMathSymbol{<}{\mathrel}{letters}{"3C}
162 \DeclareMathSymbol{=}{\mathrel}{operators}{"3D}
163 \DeclareMathSymbol{>}{\mathrel}{letters}{"3E}
164 \DeclareMathSymbol{?}{\mathclose}{operators}{"3F}
165 \DeclareMathSymbol{[}{\mathopen}{operators}{"5B}
166 \DeclareMathSymbol{]}{\mathclose}{operators}{"5D}
167 \DeclareMathSymbol{|}{\mathord}{symbols}{"6A}

Should all of the following being activated by default? Probably not.

168 %\DeclareMathSymbol{`\{}{\mathopen}{symbols}{"66}
169 %\DeclareMathSymbol{`\}}{\mathclose}{symbols}{"67}
170 %\DeclareMathSymbol{`\\}{\mathord}{symbols}{"6E} % \backslash
171 \mathcode`\ ="8000 % \space
172 \mathcode`\'="8000 % ^\prime
173 \mathcode`\_="8000 % \_

42.3.4 Delimitercodes for characters

[to be completed]

Finally, IniTEX sets all \delcode values to -1, except \delcode`.=0

174 \DeclareMathDelimiter{(}{operators}{"28}{largesymbols}{"00}
175 \DeclareMathDelimiter{)}{operators}{"29}{largesymbols}{"01}
176 \DeclareMathDelimiter{[}{operators}{"5B}{largesymbols}{"02}
177 \DeclareMathDelimiter{]}{operators}{"5D}{largesymbols}{"03}
178 \DeclareMathDelimiter{/}{operators}{"2F}{largesymbols}{"0E}
179 \DeclareMathDelimiter{<}{symbols}{"68}{largesymbols}{"0A}
180 \DeclareMathDelimiter{>}{symbols}{"69}{largesymbols}{"0B}
181 \DeclareMathDelimiter{|}{symbols}{"6A}{largesymbols}{"0C}
182 \expandafter\DeclareMathDelimiter\@backslashchar
183  {symbols}{"6E}{largesymbols}{"0F}

N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!

42.4 Symbols accessed via control sequences

42.4.1 Greek letters

184 \DeclareMathSymbol{\alpha}{\mathord}{letters}{"0B}
185 \DeclareMathSymbol{\beta}{\mathord}{letters}{"0C}
186 \DeclareMathSymbol{\gamma}{\mathord}{letters}{"0D}
187 \DeclareMathSymbol{\delta}{\mathord}{letters}{"0E}
188 \DeclareMathSymbol{\epsilon}{\mathord}{letters}{"0F}
189 \DeclareMathSymbol{\zeta}{\mathord}{letters}{"10}
190 \DeclareMathSymbol{\eta}{\mathord}{letters}{"11}
191 \DeclareMathSymbol{\theta}{\mathord}{letters}{"12}
192 \DeclareMathSymbol{\iota}{\mathord}{letters}{"13}
193 \DeclareMathSymbol{\kappa}{\mathord}{letters}{"14}
194 \DeclareMathSymbol{\lambda}{\mathord}{letters}{"15}
195 \DeclareMathSymbol{\mu}{\mathord}{letters}{"16}
196 \DeclareMathSymbol{\nu}{\mathord}{letters}{"17}
197 \DeclareMathSymbol{\xi}{\mathord}{letters}{"18}
198 \DeclareMathSymbol{\pi}{\mathord}{letters}{"19}
199 \DeclareMathSymbol{\rho}{\mathord}{letters}{"1A}
200 \DeclareMathSymbol{\sigma}{\mathord}{letters}{"1B}
201 \DeclareMathSymbol{\tau}{\mathord}{letters}{"1C}
202 \DeclareMathSymbol{\upsilon}{\mathord}{letters}{"1D}
203 \DeclareMathSymbol{\phi}{\mathord}{letters}{"1E}
204 \DeclareMathSymbol{\chi}{\mathord}{letters}{"1F}
205 \DeclareMathSymbol{\psi}{\mathord}{letters}{"20}
206 \DeclareMathSymbol{\omega}{\mathord}{letters}{"21}
207 \DeclareMathSymbol{\varepsilon}{\mathord}{letters}{"22}
208 \DeclareMathSymbol{\vartheta}{\mathord}{letters}{"23}
209 \DeclareMathSymbol{\varpi}{\mathord}{letters}{"24}
210 \DeclareMathSymbol{\varrho}{\mathord}{letters}{"25}
211 \DeclareMathSymbol{\varsigma}{\mathord}{letters}{"26}
212 \DeclareMathSymbol{\varphi}{\mathord}{letters}{"27}
213 \DeclareMathSymbol{\Gamma}{\mathalpha}{operators}{"00}
214 \DeclareMathSymbol{\Delta}{\mathalpha}{operators}{"01}
215 \DeclareMathSymbol{\Theta}{\mathalpha}{operators}{"02}
216 \DeclareMathSymbol{\Lambda}{\mathalpha}{operators}{"03}
217 \DeclareMathSymbol{\Xi}{\mathalpha}{operators}{"04}
218 \DeclareMathSymbol{\Pi}{\mathalpha}{operators}{"05}
219 \DeclareMathSymbol{\Sigma}{\mathalpha}{operators}{"06}
220 \DeclareMathSymbol{\Upsilon}{\mathalpha}{operators}{"07}
221 \DeclareMathSymbol{\Phi}{\mathalpha}{operators}{"08}
222 \DeclareMathSymbol{\Psi}{\mathalpha}{operators}{"09}
223 \DeclareMathSymbol{\Omega}{\mathalpha}{operators}{"0A}

42.4.2 Ordinary symbols

224 \DeclareMathSymbol{\aleph}{\mathord}{symbols}{"40}
225 \def\hbar{{\mathchar'26\mkern-9muh}}

226 \DeclareMathSymbol{\imath}{\mathord}{letters}{"7B}
227 \DeclareMathSymbol{\jmath}{\mathord}{letters}{"7C}
228 \DeclareMathSymbol{\ell}{\mathord}{letters}{"60}
229 \DeclareMathSymbol{\wp}{\mathord}{letters}{"7D}
230 \DeclareMathSymbol{\Re}{\mathord}{symbols}{"3C}
231 \DeclareMathSymbol{\Im}{\mathord}{symbols}{"3D}
232 \DeclareMathSymbol{\partial}{\mathord}{letters}{"40}
233 \DeclareMathSymbol{\infty}{\mathord}{symbols}{"31}
234 \DeclareMathSymbol{\prime}{\mathord}{symbols}{"30}
235 \DeclareMathSymbol{\emptyset}{\mathord}{symbols}{"3B}
236 \DeclareMathSymbol{\nabla}{\mathord}{symbols}{"72}
237 \def\surd{{\mathchar"1270}}
238 \DeclareMathSymbol{\top}{\mathord}{symbols}{"3E}
239 \DeclareMathSymbol{\bot}{\mathord}{symbols}{"3F}
240 \def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
241  \not\mathrel{\mkern14mu}\crcr
242  \noalign{\nointerlineskip}
243  \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr}}}}
244 \DeclareMathSymbol{\triangle}{\mathord}{symbols}{"34}
245 \DeclareMathSymbol{\forall}{\mathord}{symbols}{"38}
246 \DeclareMathSymbol{\exists}{\mathord}{symbols}{"39}
247 \DeclareMathSymbol{\neg}{\mathord}{symbols}{"3A}
248  \let\lnot=\neg
249 \DeclareMathSymbol{\flat}{\mathord}{letters}{"5B}
250 \DeclareMathSymbol{\natural}{\mathord}{letters}{"5C}
251 \DeclareMathSymbol{\sharp}{\mathord}{letters}{"5D}
252 \DeclareMathSymbol{\clubsuit}{\mathord}{symbols}{"7C}
253 \DeclareMathSymbol{\diamondsuit}{\mathord}{symbols}{"7D}
254 \DeclareMathSymbol{\heartsuit}{\mathord}{symbols}{"7E}
255 \DeclareMathSymbol{\spadesuit}{\mathord}{symbols}{"7F}

42.4.3 Large Operators

256 \DeclareMathSymbol{\coprod}{\mathop}{largesymbols}{"60}
257 \DeclareMathSymbol{\bigvee}{\mathop}{largesymbols}{"57}
258 \DeclareMathSymbol{\bigwedge}{\mathop}{largesymbols}{"56}
259 \DeclareMathSymbol{\biguplus}{\mathop}{largesymbols}{"55}
260 \DeclareMathSymbol{\bigcap}{\mathop}{largesymbols}{"54}
261 \DeclareMathSymbol{\bigcup}{\mathop}{largesymbols}{"53}
262 \DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52}
263  \def\int{\intop\nolimits}
264 \DeclareMathSymbol{\prod}{\mathop}{largesymbols}{"51}
265 \DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50}
266 \DeclareMathSymbol{\bigotimes}{\mathop}{largesymbols}{"4E}
267 \DeclareMathSymbol{\bigoplus}{\mathop}{largesymbols}{"4C}
268 \DeclareMathSymbol{\bigodot}{\mathop}{largesymbols}{"4A}
269 \DeclareMathSymbol{\ointop}{\mathop}{largesymbols}{"48}
270  \def\oint{\ointop\nolimits}
271 \DeclareMathSymbol{\bigsqcup}{\mathop}{largesymbols}{"46}
272 \DeclareMathSymbol{\smallint}{\mathop}{symbols}{"73}

42.4.4 Binary symbols

273 \DeclareMathSymbol{\triangleleft}{\mathbin}{letters}{"2F}
274 \DeclareMathSymbol{\triangleright}{\mathbin}{letters}{"2E}
275 \DeclareMathSymbol{\bigtriangleup}{\mathbin}{symbols}{"34}
276 \DeclareMathSymbol{\bigtriangledown}{\mathbin}{symbols}{"35}
277 \DeclareMathSymbol{\wedge}{\mathbin}{symbols}{"5E}
278 \let\land=\wedge
279 \DeclareMathSymbol{\vee}{\mathbin}{symbols}{"5F}
280 \let\lor=\vee
281 \DeclareMathSymbol{\cap}{\mathbin}{symbols}{"5C}
282 \DeclareMathSymbol{\cup}{\mathbin}{symbols}{"5B}
283 \DeclareMathSymbol{\ddagger}{\mathbin}{symbols}{"7A}
284 \DeclareMathSymbol{\dagger}{\mathbin}{symbols}{"79}
285 \DeclareMathSymbol{\sqcap}{\mathbin}{symbols}{"75}
286 \DeclareMathSymbol{\sqcup}{\mathbin}{symbols}{"74}
287 \DeclareMathSymbol{\uplus}{\mathbin}{symbols}{"5D}
288 \DeclareMathSymbol{\amalg}{\mathbin}{symbols}{"71}
289 \DeclareMathSymbol{\diamond}{\mathbin}{symbols}{"05}
290 \DeclareMathSymbol{\bullet}{\mathbin}{symbols}{"0F}
291 \DeclareMathSymbol{\wr}{\mathbin}{symbols}{"6F}
292 \DeclareMathSymbol{\div}{\mathbin}{symbols}{"04}
293 \DeclareMathSymbol{\odot}{\mathbin}{symbols}{"0C}
294 \DeclareMathSymbol{\oslash}{\mathbin}{symbols}{"0B}
295 \DeclareMathSymbol{\otimes}{\mathbin}{symbols}{"0A}
296 \DeclareMathSymbol{\ominus}{\mathbin}{symbols}{"09}
297 \DeclareMathSymbol{\oplus}{\mathbin}{symbols}{"08}
298 \DeclareMathSymbol{\mp}{\mathbin}{symbols}{"07}
299 \DeclareMathSymbol{\pm}{\mathbin}{symbols}{"06}
300 \DeclareMathSymbol{\circ}{\mathbin}{symbols}{"0E}
301 \DeclareMathSymbol{\bigcirc}{\mathbin}{symbols}{"0D}
302 \DeclareMathSymbol{\setminus}{\mathbin}{symbols}{"6E}
303 \DeclareMathSymbol{\cdot}{\mathbin}{symbols}{"01}
304 \DeclareMathSymbol{\ast}{\mathbin}{symbols}{"03}
305 \DeclareMathSymbol{\times}{\mathbin}{symbols}{"02}
306 \DeclareMathSymbol{\star}{\mathbin}{letters}{"3F}

42.4.5 Relations

307 \DeclareMathSymbol{\propto}{\mathrel}{symbols}{"2F}
308 \DeclareMathSymbol{\sqsubseteq}{\mathrel}{symbols}{"76}
309 \DeclareMathSymbol{\sqsupseteq}{\mathrel}{symbols}{"77}
310 \DeclareMathSymbol{\parallel}{\mathrel}{symbols}{"6B}
311 \DeclareMathSymbol{\mid}{\mathrel}{symbols}{"6A}
312 \DeclareMathSymbol{\dashv}{\mathrel}{symbols}{"61}
313 \DeclareMathSymbol{\vdash}{\mathrel}{symbols}{"60}
314 \DeclareMathSymbol{\nearrow}{\mathrel}{symbols}{"25}
315 \DeclareMathSymbol{\searrow}{\mathrel}{symbols}{"26}
316 \DeclareMathSymbol{\nwarrow}{\mathrel}{symbols}{"2D}
317 \DeclareMathSymbol{\swarrow}{\mathrel}{symbols}{"2E}
318 \DeclareMathSymbol{\Leftrightarrow}{\mathrel}{symbols}{"2C}

319 \DeclareMathSymbol{\Leftarrow}{\mathrel}{symbols}{"28}
320 \DeclareMathSymbol{\Rightarrow}{\mathrel}{symbols}{"29}
321 \def\neq{\not=} \let\ne=\neq
322 \DeclareMathSymbol{\leq}{\mathrel}{symbols}{"14}
323 \let\le=\leq
324 \DeclareMathSymbol{\geq}{\mathrel}{symbols}{"15}
325 \let\ge=\geq
326 \DeclareMathSymbol{\succ}{\mathrel}{symbols}{"1F}
327 \DeclareMathSymbol{\prec}{\mathrel}{symbols}{"1E}
328 \DeclareMathSymbol{\approx}{\mathrel}{symbols}{"19}
329 \DeclareMathSymbol{\succeq}{\mathrel}{symbols}{"17}
330 \DeclareMathSymbol{\preceq}{\mathrel}{symbols}{"16}
331 \DeclareMathSymbol{\supset}{\mathrel}{symbols}{"1B}
332 \DeclareMathSymbol{\subset}{\mathrel}{symbols}{"1A}
333 \DeclareMathSymbol{\supseteq}{\mathrel}{symbols}{"13}
334 \DeclareMathSymbol{\subseteq}{\mathrel}{symbols}{"12}
335 \DeclareMathSymbol{\in}{\mathrel}{symbols}{"32}
336 \DeclareMathSymbol{\ni}{\mathrel}{symbols}{"33}
337  \let\owns=\ni
338 \DeclareMathSymbol{\gg}{\mathrel}{symbols}{"1D}
339 \DeclareMathSymbol{\ll}{\mathrel}{symbols}{"1C}
340 \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
341 \DeclareMathSymbol{\leftrightarrow}{\mathrel}{symbols}{"24}
342 \DeclareMathSymbol{\leftarrow}{\mathrel}{symbols}{"20}
343 \let\gets=\leftarrow
344 \DeclareMathSymbol{\rightarrow}{\mathrel}{symbols}{"21}
345 \let\to=\rightarrow
346 \DeclareMathSymbol{\mapstochar}{\mathrel}{symbols}{"37}
347 \def\mapsto{\mapstochar\rightarrow}
348 \DeclareMathSymbol{\sim}{\mathrel}{symbols}{"18}
349 \DeclareMathSymbol{\simeq}{\mathrel}{symbols}{"27}
350 \DeclareMathSymbol{\perp}{\mathrel}{symbols}{"3F}
351 \DeclareMathSymbol{\equiv}{\mathrel}{symbols}{"11}
352 \DeclareMathSymbol{\asymp}{\mathrel}{symbols}{"10}
353 \DeclareMathSymbol{\smile}{\mathrel}{letters}{"5E}
354 \DeclareMathSymbol{\frown}{\mathrel}{letters}{"5F}
355 \DeclareMathSymbol{\leftharpoonup}{\mathrel}{letters}{"28}
356 \DeclareMathSymbol{\leftharpoondown}{\mathrel}{letters}{"29}
357 \DeclareMathSymbol{\rightharpoonup}{\mathrel}{letters}{"2A}
358 \DeclareMathSymbol{\rightharpoondown}{\mathrel}{letters}{"2B}
359 \def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
360 \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@
361  \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
362 \def\notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
363 \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
364 \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
365 \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
366  \hbox{$#1\rightharpoonup$}\crcr
367  $#1\leftharpoondown$}}}}

368 \def\doteq{\buildrel\textstyle.\over=}

42.4.6 Arrows

369 \def\joinrel{\mathrel{\mkern-3mu}}
370 \def\relbar{\mathrel{\smash-}} % \smash, because -
371  % has the same height as +
372 \def\Relbar{\mathrel=}
373 \DeclareMathSymbol{\lhook}{\mathrel}{letters}{"2C}
374 \def\hookrightarrow{\lhook\joinrel\rightarrow}
375 \DeclareMathSymbol{\rhook}{\mathrel}{letters}{"2D}
376 \def\hookleftarrow{\leftarrow\joinrel\rhook}
377 \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
378 \def\models{\mathrel|\joinrel=}
379 \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
    LaTeX Change: \longrightarrow and \longleftarrow redefined to make

then robust.

380 \DeclareRobustCommand\longrightarrow
381  {\relbar\joinrel\rightarrow}
382 \DeclareRobustCommand\longleftarrow
383  {\leftarrow\joinrel\relbar}
384 \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
385 \def\longmapsto{\mapstochar\longrightarrow}
386 \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
387 \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
388 \def\iff{\;\Longleftrightarrow\;}

42.4.7 Punctuation symbols

389 \DeclareMathSymbol{\ldotp}{\mathpunct}{letters}{"3A}
390 \DeclareMathSymbol{\cdotp}{\mathpunct}{symbols}{"01}
391 \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A}

This is commented out, since \ldots is now defined in ltoutenc.dtx.

392 %\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}}
393 %\DeclareRobustCommand\ldots
394 %          {\relax\ifmmode\@ldots\else\mbox{$\m@th\@ldots\,$}\fi}
395 \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
396 \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
397  \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
398 \def\ddots{\mathinner{\mkern1mu\raise7\p@
399  \vbox{\kern7\p@\hbox{.}}\mkern2mu
400  \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}

42.4.8 Math accents

401 \DeclareMathAccent{\acute}{\mathalpha}{operators}{"13}
402 \DeclareMathAccent{\grave}{\mathalpha}{operators}{"12}
403 \DeclareMathAccent{\ddot}{\mathalpha}{operators}{"7F}
404 \DeclareMathAccent{\tilde}{\mathalpha}{operators}{"7E}
405 \DeclareMathAccent{\bar}{\mathalpha}{operators}{"16}
406 \DeclareMathAccent{\breve}{\mathalpha}{operators}{"15}

407 \DeclareMathAccent{\check}{\mathalpha}{operators}{"14}
408 \DeclareMathAccent{\hat}{\mathalpha}{operators}{"5E}
409 \DeclareMathAccent{\vec}{\mathord}{letters}{"7E}
410 \DeclareMathAccent{\dot}{\mathalpha}{operators}{"5F}
411 \DeclareMathAccent{\widetilde}{\mathord}{largesymbols}{"65}
412 \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62}

42.4.9 Radicals

413 \DeclareMathRadical{\sqrtsign}{symbols}{"70}{largesymbols}{"70}
414 % \let\@@sqrt\sqrtsign

42.4.10 Over and under something, etc

415 \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
416  \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
417  $\hfil\displaystyle{#1}\hfil$\crcr}}}
418 \def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
419  \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}%
420  $\hfil\displaystyle{#1}\hfil$\crcr}}}
421 \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}%
422  \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}%
423  $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
424 \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
425 $\hfil\displaystyle{#1}\hfil$\crcr
426 \noalign{\kern3\p@\nointerlineskip}%
427 \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}

(quite a waste of tokens, IMHO — Frank)

428 \def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@
429  #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}}
430 \def\rightarrowfill{$\m@th\smash-\mkern-7mu%
431 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
432 \mkern-7mu\mathord\rightarrow$}
433 \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu%
434 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
435 \mkern-7mu\smash-$}
436 \DeclareMathSymbol{\braceld}{\mathord}{largesymbols}{"7A}
437 \DeclareMathSymbol{\bracerd}{\mathord}{largesymbols}{"7B}
438 \DeclareMathSymbol{\bracelu}{\mathord}{largesymbols}{"7C}
439 \DeclareMathSymbol{\braceru}{\mathord}{largesymbols}{"7D}
440 \def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
441 \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru
442 \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd$}
443 \def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
444 \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd
445 \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$}

42.4.11 Delimiters

446 \DeclareMathDelimiter{\lmoustache}   % top from (, bottom from )
447 {\mathopen}{largesymbols}{"7A}{largesymbols}{"40}
448 \DeclareMathDelimiter{\rmoustache}   % top from ), bottom from (

449 {\mathclose}{largesymbols}{"7B}{largesymbols}{"41}
450 \DeclareMathDelimiter{\arrowvert}    % arrow without arrowheads
451 {\mathord}{symbols}{"6A}{largesymbols}{"3C}
452 \DeclareMathDelimiter{\Arrowvert}    % double arrow without arrowheads
453 {\mathord}{symbols}{"6B}{largesymbols}{"3D}
454 \DeclareMathDelimiter{\Vert}
455 {\mathord}{symbols}{"6B}{largesymbols}{"0D}
456 \let\|=\Vert
457 \DeclareMathDelimiter{\vert}
458 {\mathord}{symbols}{"6A}{largesymbols}{"0C}
459 \DeclareMathDelimiter{\uparrow}
460 {\mathrel}{symbols}{"22}{largesymbols}{"78}
461 \DeclareMathDelimiter{\downarrow}
462 {\mathrel}{symbols}{"23}{largesymbols}{"79}
463 \DeclareMathDelimiter{\updownarrow}
464 {\mathrel}{symbols}{"6C}{largesymbols}{"3F}
465 \DeclareMathDelimiter{\Uparrow}
466 {\mathrel}{symbols}{"2A}{largesymbols}{"7E}
467 \DeclareMathDelimiter{\Downarrow}
468 {\mathrel}{symbols}{"2B}{largesymbols}{"7F}
469 \DeclareMathDelimiter{\Updownarrow}
470 {\mathrel}{symbols}{"6D}{largesymbols}{"77}
471 \DeclareMathDelimiter{\backslash}    % for double coset G\backslash H
472 {\mathord}{symbols}{"6E}{largesymbols}{"0F}
473 \DeclareMathDelimiter{\rangle}
474 {\mathclose}{symbols}{"69}{largesymbols}{"0B}
475 \DeclareMathDelimiter{\langle}
476 {\mathopen}{symbols}{"68}{largesymbols}{"0A}
477 \DeclareMathDelimiter{\rbrace}
478 {\mathclose}{symbols}{"67}{largesymbols}{"09}
479 \DeclareMathDelimiter{\lbrace}
480 {\mathopen}{symbols}{"66}{largesymbols}{"08}
481 \DeclareMathDelimiter{\rceil}
482 {\mathclose}{symbols}{"65}{largesymbols}{"07}
483 \DeclareMathDelimiter{\lceil}
484 {\mathopen}{symbols}{"64}{largesymbols}{"06}
485 \DeclareMathDelimiter{\rfloor}
486 {\mathclose}{symbols}{"63}{largesymbols}{"05}
487 \DeclareMathDelimiter{\lfloor}
488 {\mathopen}{symbols}{"62}{largesymbols}{"04}

\lgroup \rgroup \bracevert There are three plain TEX delimiters which are not fully supported by NFSS, since they partly point into a bold cmr font. Allocating a full symbol font, just to have three delimiters seems a bit too much given the limited space available. For this reason only the extensible sizes are supported. If this is not desired one can use, without losing portability, define \mathbf and \mathtt as font symbol alphabet (setting up cmr/bx/n and cmtt/m/n as symbol fonts first) and modify the delimiter declarations to point with their small variant to those symbol fonts. (This is done in oldlfont.dtx so look there for examples.)

489 \DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips
490  {\mathopen}{largesymbols}{"3A}{largesymbols}{"3A}
491 \DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips
492  {\mathclose}{largesymbols}{"3B}{largesymbols}{"3B}
493 \DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces
494  {\mathord}{largesymbols}{"3E}{largesymbols}{"3E}

42.5 Math versions of text commands

The \mathunderscore here is really a text definition, so it has been put back into ltoutenc.dtx (by Chris, 30/04/97) and should be removed from here.

These symbols are the math versions of text commands such as \P, \$, etc.

\mathparagraph \mathsection \mathdollar \mathsterling \mathunderscore These math symbols are not in plain TEX.
495 \DeclareMathSymbol{\mathparagraph}{\mathord}{symbols}{"7B}
496 \DeclareMathSymbol{\mathsection}{\mathord}{symbols}{"78}
497 \DeclareMathSymbol{\mathdollar}{\mathord}{operators}{"24}
498 \def\mathsterling{\mathit{\mathchar"7024}}
499 \def\mathunderscore{\kern.06em\vbox{\hrule\@width.3em}}
\mathellipsis This is plain TEX’s \ldots.
500 \def\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}}%

42.6 Other special functions and parameters

42.6.1 Biggggg

501 \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
502 \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
503 \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
504 \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
505 \def\n@space{\nulldelimiterspace\z@ \m@th}

42.6.2 The log-like functions

\operator@font The \operator@font determines the symbol font used for log-like functions.

506 \def\operator@font{\mathgroup\symoperators}

42.6.3 Parameters

507 \thinmuskip=3mu
508 \medmuskip=4mu plus 2mu minus 4mu
509 \thickmuskip=5mu plus 5mu

This finishes the low-level setup in fontmath.ltx.

510 ⟨/math⟩

File u

preload.dtx

43 Overview

This file contains an number of possible settings for preloading fonts during installation of NFSS2 (which is used by L^{A}TEX 2ε). It will be used to generate the following files:

preload.min minimal subset of fonts necessary to run NFSS2
preload.ori  preload of CM fonts similar to the old lfonts.tex
preload.ltx  The standard selection of preloads
cmpreloa.xpt preload of CM fonts for 10pt document size
cmpreloa.xip preload of CM fonts for 11pt document size
cmpreloa.xii preload of CM fonts for 12pt document size
dcpreloa.xpt preload of DC fonts for 10pt size
dcpreloa.xip preload of DC fonts for 11pt size
dcpreloa.xii preload of DC fonts for 12pt size

These files are for installations that make use of Computer Modern fonts either old encoding (OT1) or Cork encoding (T1). The Computer Modern fonts with Cork encoding are known as DC-fonts.

Most important is preload.ltx which is used during format generation. You are not allowed to change this file.

44 Customization

You can customize the preloaded fonts in your L^{A}TEX 2ε system by installing a file with the name preload.cfg. If this file exists it will be used in place of the system file preload.ltx. You can, for example, copy one of the files mentioned above (that can be generated from this source) to preload.cfg.

Or you can define completely other preloads. In that case start from preload.min since that contains the fonts that have to be preloaded by *all* L^{A}TEX 2ε sytems.

Avoid using preload.ori, it will load so many fonts that on most installations it is nearly impossible to load other font families afterwards. This file is only generated to show what fonts have been preloaded by L^{A}TEX 2.09.

If you normally use other fonts than Computer Modern preload.min might be best.

Warning: If you preload fonts with encodings other than the normally supported encodings you have to declare that encoding in a fontdef.cfg configuration file (see the documentation in the file fontdef.dtx). Adding an extra encoding to the format might produce non-portable documents, thus this should be avoided if possible.

45 Module switches for the docstrip program

The docstrip will generate the above file from this source using the following module directives:

driver produce a documentation driver file
preload produce a preload… file
cm  for OT1 encoded Computer Modern
dc  for T1 encoded Computer Modern
min  produce minimal subset
xpt  produce 10pt preloads
xipt  produce 11pt preloads
xiipt  produce 12pt preloads
ori  produce preloads similar to old lfonts.tex
tex  produce preload.ltx

A typical docstrip command file would then have entries like:

\generateFile{preload.min}{t}{\from{preload.dtx}{preload,min}}

for generating preload files.

46 A driver for this document

The next bit of code contains the documentation driver file for TEX, i.e., the file that will produce the documentation you are currently reading. It will be extracted from this file by the docstrip program.

1 ⟨∗driver⟩

 2 \documentclass{ltxdoc}
 3 %\OnlyDescription  % comment out for implementation details
 4 \begin{document}
 5 \DocInput{preload.dtx}
 6 \end{document}

7 ⟨/driver⟩

47 The code

We begin by loading the math extension font (cmex10) and the L^{A}TEX line and circle fonts. It is necessary to do this explicitly since these are used by lplain.tex and latex.tex. Since the internal font name contains / characters and digits we construct the name via \csname. These are the only fonts (!) that must be loaded in this file.

All \DeclarePreloadSizes can be removed or others can be added, they only influence the processing speed.

 8 \expandafter\font\csname OMX/cmex/m/n/10\endcsname=cmex10\relax
 9 \font\tenln  =line10   \font\tenlnw  =linew10\relax
10 \font\tencirc=lcircle10 \font\tencircw=lcirclew10\relax

The above fonts should not be touched but anything below this point here in the preload suggestions can be modified without any problems.

11 ⟨−tex⟩%*******************************************
12 ⟨−tex⟩% Start any modification below this point **
13 ⟨−tex⟩%*******************************************

14 ⟨−tex⟩

15 %%
16 %% Computer Modern Roman:
17 %%-----------------------

18 ⟨∗ori⟩

19 \DeclarePreloadSizes{OT1}{cmr}{m}{n}
20  {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88}
21 \DeclarePreloadSizes{OT1}{cmr}{bx}{n}{9,10,10.95,12,14.4,17.28}
22 \DeclarePreloadSizes{OT1}{cmr}{m}{sl}{10,10.95,12}
23 \DeclarePreloadSizes{OT1}{cmr}{m}{it}{7,8,9,10,10.95,12}

24 ⟨/ori⟩

25 ⟨+xpt & cm⟩ \DeclarePreloadSizes{OT1}{cmr}{m}{n}{5,7,10}
26 ⟨+xpt & dc⟩ \DeclarePreloadSizes{T1}{cmr}{m}{n}{5,7,10}
27 ⟨+xipt & cm⟩ \DeclarePreloadSizes{OT1}{cmr}{m}{n}{6,8,10.95}
28 ⟨+xipt & dc⟩ \DeclarePreloadSizes{T1}{cmr}{m}{n}{6,8,10.95}
29 ⟨+xiipt & cm⟩ \DeclarePreloadSizes{OT1}{cmr}{m}{n}{6,8,12}
30 ⟨+xiipt & dc⟩ \DeclarePreloadSizes{T1}{cmr}{m}{n}{6,8,12}
31 %%
32 %% Computer Modern Sans:
33 %%----------------------
34 ⟨+ori⟩ \DeclarePreloadSizes{OT1}{cmss}{m}{n}{10,10.95,12}
35 %%
36 %% Computer Modern Typewriter:
37 %%----------------------------
38 ⟨+ori⟩ \DeclarePreloadSizes{OT1}{cmtt}{m}{n}{9,10,10.95,12}
39 %%
40 %% Computer Modern Math:
41 %%----------------------

42 ⟨∗ori⟩

43 \DeclarePreloadSizes{OML}{cmm}{m}{it}
44  {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74}
45 \DeclarePreloadSizes{OMS}{cmsy}{m}{n}
46  {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74}

47 ⟨/ori⟩

The math fonts are the same for both DC and CM fonts. So far there isn’t an agreed on standard.

48 ⟨∗xpt⟩

49 \DeclarePreloadSizes{OML}{cmm}{m}{it}{5,7,10}
50 \DeclarePreloadSizes{OMS}{cmsy}{m}{n}{5,7,10}

51 ⟨/xpt⟩ 52 ⟨∗xipt⟩

53 \DeclarePreloadSizes{OML}{cmm}{m}{it}{6,8,10.95}
54 \DeclarePreloadSizes{OMS}{cmsy}{m}{n}{6,8,10.95}

55 ⟨/xipt⟩

File u: preload.dtx Date: 1995/12/04 Version v2.1f 219

56 ⟨∗xiipt⟩

57 \DeclarePreloadSizes{OML}{cmm}{m}{it}{6,8,12}
58 \DeclarePreloadSizes{OMS}{cmsy}{m}{n}{6,8,12}

59 ⟨/xiipt⟩

60 %%
61 %% LaTeX symbol fonts:
62 %%--------------------

63 ⟨∗ori⟩

64 \DeclarePreloadSizes{U}{lasy}{m}{n}
65  {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74}

66 ⟨/ori⟩ 67 ⟨/preload⟩

File u: preload.dtx Date: 1995/12/04 Version v2.1f 220

File v

ltfntcmd.dtx

Abstract The commands defined in this file ltfntcmd are part of the kernel code

for L^{A}TEX 2ε/NFSS2.

It is also meant to serve as documentation for package writers since it demonstrates how to define high-level font changing commands using a small number of creator functions.

48 Introduction

Font changes such as \bfseries, \sffamily, etc. are declarations; this means that their scope is delimited by the grouping structure, either by the next \end of some environment or by explicitly using a group, e.g., writing something like {\bfseries...} in the source. If you make the mistake of writing \bfseries{...} (thinking of \bfseries as a command with one argument) then the result is rather striking.

Font declarations are an artifact of the TEX system and for several reasons it is better to avoid them on the user level whenever possible. In L^{A}TEX3 they will probably all be replaced by environments and by font commands taking one argument.

This file defines a creator function for such declarative font switches. This function creates commands which can be used in both math and text.

This file also defines a number of high-level commands (all starting with \text..) that have one argument and typeset this argument in the requested way. Thus these commands are for typesetting short pieces of text in a specific family, series or shape. These are all produced as examples of the use of a creator function which is itself also defined in this file.

Table 1 shows all these high-level commands in action. A further advantage of using these commands is that they automatically take care of any necessary italic correction on either side of their argument.

Thus, when using such commands, one does not have to worry about forgetting the italic correction when changing fonts. Only in very few situations is this additional space wrong but, for example, most typographers recommend omitting the italic correction if a small punctuation character, like a comma, directly follows the font change. Since the amount of correction required is partly a matter of taste, you can define in what situations the italic correction should be suppressed. This is done by putting the characters that should cancel a preceding italic correction in the list \nocorrlist.^{7} The default definition for this list is produced by the following.

7Any package that changes the \catcode of a character inside \nocorrlist must then explicitly reset the list. Otherwise the changed character will no longer be recognized by the suppression algorithm.

Command  Corresponds to Action
\textrm{..}  \rmfamily  Typeset argument in roman family
\textsf{..}  \sffamily  Typeset argument in sans serif family

\texttt{..}  \ttfamily  Typeset argument in typewriter family

\textmd{..}  \mdseries  Typeset argument in medium series
\textbf{..}  \bfseries  Typeset argument in bold series
\textup{..}  \upshape  Typeset argument in normal shape
\textit{..}  \itshape  Typeset argument in italic shape
\textsl{..}  \slshape  Typeset argument in slanted shape
\textsc{..}  \scshape  Typeset argument in small caps shape
\emph{..}    \em  Typeset argument emphasized

Table 1: Font-change commands with arguments

The font change commands provided here all start with \text.. to emphasize that they are for use in normal text and to be easily memorable. They automatically take care of any necessary italic correction on either side of the argument.

\newcommand \nocorrlist {,.}

It is best to declare the most often used characters first, because this will make the processing slightly faster. For example,

\emph{When using the \NFSS{} high-level commands,
the \emph{proper} use of italic corrections is
automatically taken care of}. Only
\emph{sometimes} one has to help \LaTeX{} by
adding a \verb=\nocorr= command.

which results in:

When using the NFSS high-level commands, the proper use of italic corrections is automatically taken care of. Only sometimes one has to help L^{A}TEX by adding a \nocorr command.

In contrast, the use of the declaration forms is often more appropriate when you define your own commands or environments.

\newenvironment{bfitemize}{\begin{itemize}\normalfont\bfseries}
                        {\end{itemize}}
\begin{bfitemize}
\item This environment produces boldface items.
\item It is defined in terms of \LaTeX's

   \texttt{itemize} environment and NFSS
   declarations.
 \end{bfitemize}

This gives:

• This environment produces boldface items.

• It is defined in terms of L^{A}TEX’s itemize environment and NFSS declarations.

In addition to global customization of when to insert the italic correction, it is of course sometimes necessary to explicitly insert one with \/.

It is also possible to suppress the italic correction in individual instances. For this, the command \nocorr is provided.

The \nocorr must appear as the first or last token inside the braces of the argument of the \text... commands, at that end of the text where you wish to suppress the italic correction.

It is worth pointing out here that inserting a \/ in places where it can have no function (i.e. anywhere except immediately after a slanted letter) is not an error— it will just be silently ignored. Unfortunately this is not true if the redefinition of \/ in amstex.sty is used as this version can cause space to be removed immediately before the \/.

49 The implementation

\DeclareTextFontCommand This is the creator function for \text.. commands. It gives a warning if \foo or

\fragfoo is already defined.

In math mode it simply puts the font declaration and text into a box (possibly an automagically sized one).

Otherwise it first scans the text to see where \nocorr occurs within it. This sets the \check@ic commands to do what is necessary concerning the italic correction at both ends.

Note that it is necessary to put in the \aftergroup\maybe@ic at the end of the group so that it comes after any other aftergroup tokens and immediately before the following tokens. It is also necessary to remove the \fi from the token list before the group ends; this is done by adding an \expandafter just before the closing brace.

This now checks for empty contents of text command and optimises this case.

1 ⟨∗2ekernel⟩

 2 \def \DeclareTextFontCommand #1#2{%
 3 \DeclareRobustCommand#1[1]{%
 4  \ifmmode
 5  \nfss@text{#2##1}%
 6  \else
 7  \leavevmode

 8  {\text@command{##1}%
 9  #2\check@icl ##1\check@icr
10  \expandafter}%
11  \fi
12  }%

13 }

\textrm \textsf \texttt \textnormal Now we define the \text⟨family⟩ commands in terms of the above; \texttt does not look very nice!

14 \DeclareTextFontCommand{\textrm}{\rmfamily}
15 \DeclareTextFontCommand{\textsf}{\sffamily}
16 \DeclareTextFontCommand{\texttt}{\ttfamily}
17 \DeclareTextFontCommand{\textnormal}{\normalfont}

\textbf \textmd For the series attribute:

18 \DeclareTextFontCommand{\textbf}{\bfseries}
19 \DeclareTextFontCommand{\textmd}{\mdseries}
\textit \textsl \textsc \textup And for the shapes:
20 \DeclareTextFontCommand{\textit}{\itshape}
21 \DeclareTextFontCommand{\textsl}{\slshape}
22 \DeclareTextFontCommand{\textsc}{\scshape}
23 \DeclareTextFontCommand{\textup}{\upshape}

\emph Finally we have the \em font change declaration of L^{A}TEX. The corresponding definition with argument is

24 \DeclareTextFontCommand{\emph}{\em}

\nocorr This is just a label, so it does nothing; it should also be unexpandable.

25 \let \nocorr \relax

\check@icl \check@icr We define these defaults in case some error causes them to be expanded at the wrong time.

26 \let \check@icl \@empty
27 \let \check@icr \@empty

\text@command \check@nocorr@ This checks for a \nocorr as the first token in its argument and also for one in any other position not protected within braces (the latter is treated as if it were at the end of the argument).

Is this the correct action in the ‘empty’ case? It is efficient but typographically it is, strictly, incorrect!

28 \def \text@command #1{%
29 \def \reserved@a {#1}%
30 \ifx \reserved@a \@empty
31  \let \check@icl \@empty
32  \let \check@icr \@empty
33 \else

\space is a reserved word in L^{A}TEX or actually already in plain TEX. If somebody really redefines it so many things will break that I don’t see any reason to make this routine here slower than necessary.

34 %    \def \reserved@b { }%
35 %    \ifx \reserved@a \reserved@b
36  \ifx \reserved@a \space
37  \let \check@icl \@empty
38  \let \check@icr \@empty
39  \else
40  \check@nocorr@ #1\nocorr\@nil
41  \fi
42 \fi

43 }

44 \def \check@nocorr@ #1#2\nocorr#3\@nil {%

The two checks are initialised here to their values in the normal case.

45 \let \check@icl \maybe@ic
46 \def \check@icr {\ifvmode \else \aftergroup \maybe@ic \fi}%
47 \def \reserved@a {\nocorr}%
48 \def \reserved@b {#1}%
49 \def \reserved@c {#3}%
50 \ifx \reserved@a \reserved@b
51  \ifx \reserved@c \@empty

In this case there is a \nocorr at the start but not at the end, so \check@icl should be empty.

52  \let \check@icl \@empty
53  \else

Otherwise there is a \nocorr both at the start and elsewhere, so no italic corrections should be added.

54  \let \check@icl \@empty
55  \let \check@icr \@empty
56  \fi
57 \else
58  \ifx \reserved@c \@empty

In this case there is no \nocorr anywhere, so we need to check for an italic corection at both the beginning and the end.

59  \else

In this case there is no \nocorr at the start but there is one elsewhere, so no

\aftergroup is needed.
60  \let \check@icr \@empty
61  \fi
62 \fi

63 }

\maybe@ic \maybe@ic@ These macros implement the italic correction.

64 \def \maybe@ic {\futurelet\@let@token\maybe@ic@}
65 \def \maybe@ic@ {%

We first check to see if the current font is also sloped. (But do not forget the message Rainer sent about an upright font with non-zero slope!)

66 \ifdim \fontdimen\@ne\font>\z@
67 \else
68  \@tempswatrue

It would be possible, but probably not worthwhile, to continue the forward scan beyond any closing braces.

69  \expandafter\@tfor\expandafter\reserved@a\expandafter:\expandafter=%
70  \nocorrlist

We have to hide the \@let@token in the macro \t@st@ic rather than testing it directly in the loop since it might be \let to a \fi or \else, which would result in chaos.

71  \do \t@st@ic

Frank thinks that the next bit it is inefficient if done after the second change. Chris thinks that most all of this is inefficient for the commonest cases: but that is the price of a cleverer algorithm. It is certainly needed to deal with the use of

\nolinebreak.
72  \if@tempswa \sw@slant \fi
73 \fi

74 }

\t@st@ic The next token in the input stream is stored in \@let@token via a \let, the current token from \nocorrlist is stored via \def in \reserved@a. To compare them we have to fiddle around a bit.

If the only things to check were characters then this could be done via an \if thus their catcodes would not matter; but this will not work whilst \futurelet is used above.

75 \def \t@st@ic {%
76 \expandafter\let\expandafter\reserved@b\expandafter=\reserved@a\relax
77 \ifx\reserved@b\@let@token

If they are the same we record the fact and jump out of the loop.

78  \@tempswafalse
79  \@break@tfor
80 \fi

81 }

\sw@slant \fix@penalty The definition of the mysterious \sw@slant command is as follows.

82 \def \sw@slant {%

It is surely correct to put in an italic correction when there is no skip. If the last thing on the list is actually a zero skip (including things whose dimension part is zero, such as \hfill), or anything other than a sloped character, then the italic correction will have no effect.

In order to work correctly with unbreakable spaces from ~ (and other common forms of line-breaking control) we also move back across a penalty before the glue.

83 \ifdim \lastskip=\z@
84  \fix@penalty
85 \else
86  \skip@ \lastskip
87  \unskip
88  \fix@penalty
89  \hskip \skip@
90 \fi

91 }

The above code means: “If there is a non-zero space just before the current position (\ifdim...) save the amount of that space (\skip@\lastskip), remove it (\unskip), then do a similar thing if there is a penalty just before the skip, and finally put the space back in.”

Since zero glue cannot be distinguished in this context from no glue, we dare not put in an \hskip in this case as this may produce an unwanted breakpoint. This is not satisfactory.

The penalty before the glue is handled similarly, with the same caveats concerning the zero case. Is this the first recorded use of \unpenalty in standard L^{A}TEX code?

92 \def \fix@penalty {%
93 \ifnum \lastpenalty=\z@
94  \@@italiccorr
95 \else
96  \count@ \lastpenalty
97  \unpenalty
98  \@@italiccorr
99  \penalty \count@
100 \fi

101 }

\nocorrlist This holds the list of characters that should prevent italic correction. They should be ordered by decreasing frequency of use. If any such character is made active later on one needs to redefine the list so that the active character becomes part of it.

102 \def \nocorrlist {,.}

\nfss@text This command will by default behave like a L^{A}TEX \mbox but may be redefined by packages such as amstext.sty to be a bit cleverer.

103 \ifx \nfss@text\@undefined
104 \def \nfss@text {\leavevmode\hbox}
105 \fi

\DeclareOldFontCommand This is the function used to create declarative font-changing commands that can

also be used to change alphabets in math-mode.

Usage: \DeclareOldFontCommand \fn{⟨font-change decls⟩} ⟨math-alphabet⟩ Here \fn is the font-declaration command being defined, ⟨font-change decls⟩ is

the declaration it will expand to in text-mode, and ⟨math-alphabet⟩ is the (single) math alphabet specifier which is to be used in math-mode.

It does not care whether the command being defined already exists but it does give a warning if it redefines anything.

Here are some typical examples of its use in conjunction with more basic NFSS2 font commands.

     \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
     \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
     \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}

106 \def \DeclareOldFontCommand #1#2#3{%
107 \DeclareRobustCommand #1{\@fontswitch {#2}{#3}}%

108 }

\@fontswitch \@@math@egroup \@@math@egroup These two commands actually do the necessary tests and declarative font- or alphabet-changing.

109 \def \@fontswitch #1#2{%
110 \ifmmode
111  \let \math@bgroup \relax
112  \def \math@egroup {\let \math@bgroup \@@math@bgroup
113  \let \math@egroup \@@math@egroup}%

We need to have a \relax in the following line in case the #2 is something like \mathsf grabbing the next token as an argument. For this reason the code also uses explicit arguments again (see pr/1275).

114  #2\relax
115 \else
116  #1%
117 \fi

118 }

119 \let \@@math@bgroup \math@bgroup
120 \let \@@math@egroup \math@egroup

These commands are available only in the preamble.

121 \@onlypreamble \DeclareTextFontCommand
122 \@onlypreamble \DeclareOldFontCommand

50 Initialization

\normalsize This is defined to produce an error.

123 \def\normalsize{%
124 \@latex@error {The font size command \protect\normalsize\space
125  is not defined:\MessageBreak
126  there is probably something wrong with
127  the class file}\@eha

128 } 129 ⟨/2ekernel⟩

File v: ltfntcmd.dtx Date: 1997/10/17 Version v3.3w 228

File w

ltpageno.dtx

51 Page Numbering

Page numbers are produced by a page counter, used just like any other counter. The only difference is that \c@page contains the number of the next page to be output (the one currently being produced), rather than one minus it. Thus, it is normally initialized to 1 rather than 0. \c@page is defined to be \count0, rather than a count assigned by \newcount.

\pagenumbering The user sets the pagenumber style with the \pagenumbering{⟨foo⟩} command, which sets the page counter to 1 and defines \thepage to be \foo. For example, \pagenumbering{roman} causes pages to be numbered i, ii, etc.

1 ⟨∗2ekernel⟩

 2 \message{page nos.,}
 3 \countdef\c@page=0 \c@page=1
 4 \def\cl@page{}
 5 \def\pagenumbering#1{%
 6 \global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
 7 \c@page}}

8 ⟨/2ekernel⟩

File x

ltxref.dtx

52 Cross Referencing

The user writes \label{⟨foo⟩} to define the following cross-references:

\ref{⟨foo⟩}: value of most recently incremented referencable counter. in the current environment. (Chapter, section, theorem and enumeration counters counters are referencable, footnote counters are not.)

\pageref{⟨foo⟩}: page number at which \label{foo} command appeared. where foo can be any string of characters not containing ‘\’, ‘{’ or ‘}’.

Note: The scope of the \label command is delimited by environments, so

\begin{theorem} \label{foo} ... \end{theorem} \label{bar}

defines \ref{foo} to be the theorem number and \ref{bar} to be the current section number.

Note: \label does the right thing in terms of spacing – i.e., leaving a space on both sides of it is equivalent to leaving a space on either side.

52.1 Cross Referencing

1 ⟨∗2ekernel⟩

 2 \message{x-ref,}

This is implemented as follows. A referencable counter CNT is incremented by the command \refstepcounter{CNT} , which sets

  \@currentlabel == {CNT}{eval(\p@cnt\theCNT)}. The command

\label{FOO} then writes the following on file \@auxout :

        \newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}
  \ref{FOO} ==

BEGIN

if \r@foo undefined

then @refundefined := G T ?? Warning: ’reference foo on page ... undefined’

        else \@car \eval(\r@FOO)\@nil

fi END

  \pageref{foo} =

BEGIN

if \r@foo undefined

then @refundefined := G T ?? Warning: ’reference foo on page ... undefined’

        else \@cdr \eval(\r@FOO)\@nil

fi END

\G@refundefinedtrue \@refundefined This does not save on name-space (since \G@refundefinedfalse was never

needed) but it does make the implmentation of such one-way switches more consistent. The extra macro to make the change is used since this change appears several times.

Note despite its name, \G@refundefinedtrue does not correspnd to an \if command, and there is no matching … false. It would be more natural to call the command \G@refundefined (as inspection of the change log will reveal) but unfortunately such a change would break any package that had defined a \ref-like command that mimicked the definition of \ref, calling \G@refundefinedtrue. Inspection of the TEX archives revealed several such packages, and so this command has been named … true so that the definition of \ref need not be changed, and the packages will work without change.

 3 % \newif\ifG@refundefined
 4 % \def\G@refundefinedtrue{\global\let\ifG@refundefined\iftrue}
 5 % \def\G@refundefinedfalse{\global\let\ifG@refundefined\iffalse}
 6 \def\G@refundefinedtrue{%
 7 \gdef\@refundefined{%
 8  \@latex@warning@no@line{There were undefined references}}}
 9 \let\@refundefined\relax

\ref \pageref \@setref Referencing a \label. RmS 91/10/25: added a few extra \reset@font, as sug-

gested by Bernd Raichle RmS 92/08/14: made \ref and \pageref robust RmS 93/09/08: Added setting of refundefined switch.

10 \def\@setref#1#2#3{%
11 \ifx#1\relax
12 \protect\G@refundefinedtrue
13 \nfss@text{\reset@font\bfseries ??}%
14 \@latex@warning{Reference `#3' on page \thepage \space
15  undefined}%
16 \else
17 \expandafter#2#1\null
18 \fi}
19 \def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
20 \def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
21  \@secondoftwo{#1}}

\newlabel This command will be written to the .aux file to pass label information from one run to another.

\@newl@bel The internal form of \newlabel and \bibcite.
22 \def\@newl@bel#1#2#3{%
23 \@ifundefined{#1@#2}%

24  \relax
25  {\gdef \@multiplelabels {%
26  \@latex@warning@no@line{There were multiply-defined labels}}%
27  \@latex@warning@no@line{Label `#2' multiply defined}}%
28 \global\@namedef{#1@#2}{#3}}
29 \def\newlabel{\@newl@bel r}
30 \@onlypreamble\@newl@bel

\if@multiplelabels \@multiplelabels This is redefined to produce a warning if at least one label is defined more than once. It is executed by the \enddocument command.

31 \let \@multiplelabels \relax
\label \refstepcounter The commands \label and \refstepcounter have been changed to allow

\protect’ed commands to work properly. For example,

   \def\thechapter{\protect\foo{\arabic{chapter}.\roman{section}}}

will cause a \label{bar} command to define \ref{bar} to expand to something like \foo{4.d}. Change made 20 Jul 88.

32 \def\label#1{\@bsphack
33 \protected@write\@auxout{}%
34  {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}%
35 \@esphack}
36 \def\refstepcounter#1{\stepcounter{#1}%
37  \protected@edef\@currentlabel
38  {\csname p@#1\endcsname\csname the#1\endcsname}%

39 }

\@currentlabel For \label commands that come before any environment

40 \def\@currentlabel{}

41 ⟨/2ekernel⟩

File x: ltxref.dtx Date: 1995/12/07 Version v1.1i 232

File y

ltmiscen.dtx

53 Miscellaneous Environments

This section implements the basic environment mechanism, and also a few specific environments including document, The math environments and related commands, the ‘flushing’ environments, (center, flushleft, flushright), and verbatim.

1 ⟨∗2ekernel⟩

 2 \message{environments,}

53.1 Environments

\begin{foo} and \end{foo} are used to delimit environment foo.

\begin{foo} starts a group and calls \foo if it is defined, otherwise it does nothing.

\end{foo} checks to see that it matches the corresponding \begin and if so, it calls \endfoo and does an \endgroup. Otherwise, \end{foo} does nothing.

If \end{foo} needs to ignore blanks after it, then \endfoo should globally set the @ignore switch true with \@ignoretrue (this will automatically be global).

NOTE: \@@end is defined to be the \end command of TEX82.

\enddocument is the user’s command for ending the manuscript file.

\stop is a panic button — to end TEX in the middle.

 \enddocument ==

BEGIN \@checkend{document} %% checks for unmatched \begin

    \clearpage
    \begingroup

if @filesw = true

then close file @mainaux if G@refundefined = true then LaTeX Warning: ’There are undefined references.’ fi if @multiplelabels = true then LaTeX Warning:

’One or more label(s) multiply defined.’ else \@setckpt {ARG1}{ARG2} == null

                \newlabel{LABEL}{VAL} ==

BEGIN

                      \reserved@a == VAL
                      if def(\reserved@a) = def(\r@LABEL)

else @tempswa := true fi END

\bibcite{LABEL}{VAL} == null BEGIN

                      \reserved@a == VAL
                      if def(\reserved@a) = def(\g@LABEL)

else @tempswa := true fi END @tempswa := false make @ a letter

                \input \jobname.AUX

if @tempswa = true

then LaTeX Warning: ’Label may have changed.

Rerun to get cross-references right.’

fi  fi  fi

    \endgroup

finish up

END

  \@writefile{EXT}{ENTRY} ==

if tf@EXT undefined

        else \write\tf@EXT{ENTRY}

fi

\@currenvir The name of the current environment. Initialized to document to so that \end{document} works correctly.

 3 \def\@currenvir{document}
\if@ignore
\@ignoretrue
\@ignorefalse

 4 \def\@ignorefalse{\global\let\if@ignore\iffalse}
 5 \def\@ignoretrue {\global\let\if@ignore\iftrue}
 6 \@ignorefalse
\ignorespacesafterend
 7 \let\ignorespacesafterend\@ignoretrue
\enddocument
 8 \def\enddocument{%

The \end{document} hook is executed first. If necessary it can contain a \clearpage to output dangling floats first. In this position it can also contain something like \end{foo} so that the whole document effectively starts and ends with some special environment. However, this must be used with care, eg if two applications would use this without knowledge of each other the order of the environments will be wrong after all.

 9 \@enddocumenthook
10 \@checkend{document}%
11 \clearpage
12 \begingroup
13  \if@filesw

14  \immediate\closeout\@mainaux
15  \let\@setckpt\@gobbletwo
16  \let\@newl@bel\@testdef

The previous line is equiv to setting

       \def\newlabel{\@testdef r}%
       \def\bibcite{\@testdef b}%
17  \@tempswafalse
18  \makeatletter \input\jobname.aux
19  \fi
20  \@dofilelist

First we check for font size substitution bigger than \fontsubfuzz. The \relax is necessary because this is a macro not a register.

21  \ifdim \font@submax >\fontsubfuzz\relax

In case you wonder about the \@gobbletwo inside the message below, this is a horrible hack to remove the tokens \on@line. that are added by \@font@warning at the end.

22  \@font@warning{Size substitutions with differences\MessageBreak
23  up to \font@submax\space have occured.\@gobbletwo}%
24  \fi

The macro \@defaultsubs is initially \relax but gets redefined to produce a warning if there have been some default font substitutions.

25  \@defaultsubs

The macro \@refundefined is initially \relax but gets redefined to produce a warning if there are undefined refs.

26  \@refundefined

If a label is defined more than once, \@tempswa will always be true and thus produce a “Label(s) may … ” warning. But since a rerun will not solve that problem (unless one uses a package like varioref that generates labels on the fly), we suppress this message.

27  \if@filesw
28  \ifx \@multiplelabels \relax
29  \if@tempswa
30  \@latex@warning@no@line{Label(s) may have changed.
31  Rerun to get cross-references right}%
32  \fi
33  \else
34  \@multiplelabels
35  \fi
36  \fi
37 \endgroup
38 \deadcycles\z@\@@end}

\@testdef
39 \def\@testdef #1#2#3{%
40 \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname
41 \reserved@a  \else \@tempswatrue \fi}
\@writefile
42 \long\def\@writefile#1#2{%
43 \@ifundefined{tf@#1}\relax
44  {\@temptokena{#2}%
45  \immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
46  }%

47 }

\stop
48 \def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}

49 \everypar{\@nodocument} %% To get an error if text appears before the
50 \nullfont               %% \begin{document}

\begin, \end, and \@checkend changed so \end{document} will catch an unmatched \begin. Changed 24 May 89 as suggested by Frank Mittelbach and Rainer Sch\"opf.

\begin{NAME} ==

BEGIN

IF \NAME undefined THEN \reserved@a == BEGIN report error END

                    ELSE \reserved@a ==
                               (\@currenvir :=L NAME) \NAME

FI @ignore :=G F %% Added 30 Nov 88

\begingroup
\@endpe := F
\@currenvir :=L NAME
\NAME

END

\end{NAME} ==

BEGIN

\endNAME
\@checkend{NAME}
\endgroup

IF @endpe = T %% @endpe set True by \@endparenv

 THEN \@doendpe           %% \@doendpe redefines \par and
\everypar

%% to suppress paragraph indentation in FI %% immediately following text IF @ignore = T

THEN @ignore :=G F

          \ignorespaces

FI

END

 \@checkend{NAME} ==

BEGIN

   IF \@currenvir = NAME
     ELSE \@badend{NAME}

FI

END

\begin
51 \def\begin#1{%
52 \@ifundefined{#1}%
53  {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
54  {\def\reserved@a{\def\@currenvir{#1}%
55  \edef\@currenvline{\on@line}%
56  \csname #1\endcsname}}%
57 \@ignorefalse
58 \begingroup\@endpefalse\reserved@a}
\end
59 \def\end#1{%
60 \csname end#1\endcsname\@checkend{#1}%
61 \expandafter\endgroup\if@endpe\@doendpe\fi
62 \if@ignore\@ignorefalse\ignorespaces\fi}
\@checkend
63 \def\@checkend#1{\def\reserved@a{#1}\ifx
64  \reserved@a\@currenvir \else\@badend{#1}\fi}

\@currenvline We do need a default value for \@currenvline on top-level since the document environment cancels the brace group. This means that a missmatch with \begin {document} will not produce a line number. Thus the outer default must be \@empty or we will end up with two spaces.

65 \let\@currenvline\@empty

53.2 Center, Flushright, Flushleft

66 \message{center,}
 \center, \flushright and \flushleft set
   \rightskip = 0pt or \@flushglue (as appropriate)

\leftskip = 0pt or \@flushglue (as appropriate)

  \parindent = 0pt
  \parfillskip = 0pt. (except \flushleft)
  \\  == \par \vskip -\parskip

\\[LENGTH] == \\ \vskip LENGTH

  \\*  == \par \penalty 10000 \vskip -\parskip

\\*[LEN] == \\* \vskip LENGTH

They invoke the trivlist environment to handle vertical spacing before and after them.

\centering, \raggedright and \raggedleft are the declaration analogs

of the above.

\raggedright has a more universal effect, however. It sets \@rightskip := flushglue. Every environment, like the list environments, that set \rightskip to its ’normal’ value set it to \@rightskip

\@centercr
67 \def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
68  \par\@ifstar{\nobreak\@xcentercr}\@xcentercr}
\@xcentercr
69 \def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
70  [\@icentercr\ignorespaces}
\@icentercr
71 \def\@icentercr[#1]{\vskip #1\ignorespaces}

center We use \relax to prevent \item scanning too far.

72 \def\center{\trivlist \centering\item\relax}
73 \def\endcenter{\endtrivlist}
\centering
74 \def\centering{%
75 \let\\\@centercr
76 \rightskip\@flushglue\leftskip\@flushglue
77 \parindent\z@\parfillskip\z@skip}
\@rightskip
78 \newskip\@rightskip \@rightskip \z@skip

flushleft We use \relax to prevent \item scanning too far.

79 \def\flushleft{\trivlist \raggedright\item\relax}
80 \def\endflushleft{\endtrivlist}

\raggedright
81 \def\raggedright{%
82 \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip
83 \leftskip\z@skip
84 \parindent\z@}

flushright We use \relax to prevent \item scanning too far.

85 \def\flushright{\trivlist \raggedleft\item\relax}
86 \def\endflushright{\endtrivlist}
\raggedleft
87 \def\raggedleft{%
88 \let\\\@centercr
89 \rightskip\z@skip\leftskip\@flushglue
90 \parindent\z@\parfillskip\z@skip}
91 \message{verbatim,}

53.3 Verbatim

The verbatim environment uses the fixed-width \ttfamily font, turns blanks into spaces, starts a new line for each carrige return (or sequence of consecutive carriage returns), and interprets every character literally. I.e., all special characters \, {, $, etc. are \catcode’d to ’other’.

The command \verb produces in-line verbatim text, where the argument is delimited by any pair of characters. E.g., \verb #...# takes ‘...’ as its argument, and sets it verbatim in \ttfamily font.

The *-variants of these commands are the same, except that spaces print as the TEXbook’s space character instead of as blank spaces.

\@vobeyspaces
92 {\catcode`\ =\active%
93 \gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
\@xobeysp
\@xverbatim
\@sxverbatim
94 \begingroup \catcode `|=0 \catcode `[= 1
95 \catcode`]=2 \catcode `\{=12 \catcode `\}=12
96 \catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]]
97 |gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
98 |endgroup

\@verbatim Real start of verbatim environment We use \relax to prevent \item scanning too far.

99 \def\@verbatim{\trivlist \item\relax
100 \if@minipage\else\vskip\parskip\fi
101 \leftskip\@totalleftmargin\rightskip\z@skip
102 \parindent\z@\parfillskip\@flushglue\parskip\z@skip

Added \@@par to clear possible \parshape definition from a surrounding list (the verbatim guru says).

103 \@@par
104 \@tempswafalse
105 \def\par{%
106  \if@tempswa

A \leavevmode added: needed if, for example, a blank verbatim line is the first thing in a list item (wow!).

107  \leavevmode \null \@@par\penalty\interlinepenalty
108  \else
109  \@tempswatrue
110  \ifhmode\@@par\penalty\interlinepenalty\fi
111  \fi}%

To allow customization we hide the font used in a separate macro.

112 \let\do\@makeother \dospecials
113 \obeylines \verbatim@font \@noligs

To avoid a breakpoint after the labels box, we remove the penalty put there by the list macros: another use of \unpenalty!

114 \everypar \expandafter{\the\everypar \unpenalty}%

115 }

\begin{matrix}\verbatim \\ \endverbatim \end{matrix} (RmS 93/09/19) Protected against ‘missing item’ error message triggered by empty verbatim environment.

116 \def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
117 \def\endverbatim{\if@newlist \leavevmode\fi\endtrivlist}

\verbatim@font Macro to select the font used for verbatim typesetting. It also does other work if necessary for the font used.

118 \def\verbatim@font{\normalfont\ttfamily}
verbatim*
119 \@namedef{verbatim*}{\@verbatim\@sxverbatim}
120 \expandafter\let\csname endverbatim*\endcsname =\endverbatim
\@makeother
121 \def\@makeother#1{\catcode`#112\relax}
\verb@balance@group
122 \let\verb@balance@group\@empty
\verb@egroup
123 \def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
\verb@eol@error
124 \begingroup
125 \obeylines%

126 \gdef\verb@eol@error{\obeylines%
127  \def^^M{\verb@egroup\@latex@error{%
128  \noexpand\verb ended by end of line}\@ehc}}%
129 \endgroup

\verb Typesetting a small piece verbatim.

130 \def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
131 \bgroup
132  \verb@eol@error \let\do\@makeother \dospecials
133  \verbatim@font\@noligs
134  \@ifstar\@sverb\@verb}

\@sverb Definitions of \@sverb and \@verb changed so \verb+ foo+ does not lose leading blanks when it comes at the beginning of a line. Change made 24 May 89. Suggested by Frank Mittelbach and Rainer Schöpf.

135 \def\@sverb#1{%
136 \catcode`#1\active
137 \lccode`\~`#1%
138 \gdef\verb@balance@group{\verb@egroup
139  \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
140 \aftergroup\verb@balance@group
141 \lowercase{\let~\verb@egroup}}%
\@verb
142 \def\@verb{\@vobeyspaces \frenchspacing \@sverb}
\verbatim@nolig@list
143 \def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
\do@noligs
144 \def\do@noligs#1{%
145 \catcode`#1\active
146 \begingroup
147  \lccode`\~`#1\relax
148  \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}

\@noligs To stay compatible with packages that use \@noligs we keep it.

149 \def\@noligs{\let\do\do@noligs \verbatim@nolig@list}

150 ⟨/2ekernel⟩

File z

ltmath.dtx

54 Math setup

This file contains a lot of the original plain TEX code, as well as the L^{A}TEX environments for math. It still needs sorting out.

1 ⟨∗2ekernel⟩

 2 \message{math definitions,}

54.1 Math commands based on plain TEX

54.1.1 The log-like functions

\log The standard operators:

 3 \def\log{\mathop{\operator@font log}\nolimits}
 4 \def\lg{\mathop{\operator@font lg}\nolimits}
 5 \def\ln{\mathop{\operator@font ln}\nolimits}
 6 \def\lim{\mathop{\operator@font lim}}
 7 \def\limsup{\mathop{\operator@font lim\,sup}}
 8 \def\liminf{\mathop{\operator@font lim\,inf}}
 9 \def\sin{\mathop{\operator@font sin}\nolimits}
10 \def\arcsin{\mathop{\operator@font arcsin}\nolimits}
11 \def\sinh{\mathop{\operator@font sinh}\nolimits}
12 \def\cos{\mathop{\operator@font cos}\nolimits}
13 \def\arccos{\mathop{\operator@font arccos}\nolimits}
14 \def\cosh{\mathop{\operator@font cosh}\nolimits}
15 \def\tan{\mathop{\operator@font tan}\nolimits}
16 \def\arctan{\mathop{\operator@font arctan}\nolimits}
17 \def\tanh{\mathop{\operator@font tanh}\nolimits}
18 \def\cot{\mathop{\operator@font cot}\nolimits}
19 \def\coth{\mathop{\operator@font coth}\nolimits}
20 \def\sec{\mathop{\operator@font sec}\nolimits}
21 \def\csc{\mathop{\operator@font csc}\nolimits}
22 \def\max{\mathop{\operator@font max}}
23 \def\min{\mathop{\operator@font min}}
24 \def\sup{\mathop{\operator@font sup}}
25 \def\inf{\mathop{\operator@font inf}}
26 \def\arg{\mathop{\operator@font arg}\nolimits}
27 \def\ker{\mathop{\operator@font ker}\nolimits}
28 \def\dim{\mathop{\operator@font dim}\nolimits}
29 \def\hom{\mathop{\operator@font hom}\nolimits}
30 \def\det{\mathop{\operator@font det}}
31 \def\exp{\mathop{\operator@font exp}\nolimits}
32 \def\Pr{\mathop{\operator@font Pr}}
33 \def\gcd{\mathop{\operator@font gcd}}
34 \def\deg{\mathop{\operator@font deg}\nolimits}

\bmod And some operators have to be done by hand:

35 \def\bmod{%
36 \nonscript\mskip-\medmuskip\mkern5mu%
37 \mathbin{\operator@font mod}\penalty900\mkern5mu%
38 \nonscript\mskip-\medmuskip}
\pmod
39 \def\pmod#1{%
40 \allowbreak\mkern18mu({\operator@font mod}\,\,#1)}

54.1.2 Biggggg

\big Variants on \big and friends for use with delimiters:

41 \def\bigl{\mathopen\big}
42 \def\bigm{\mathrel\big}
43 \def\bigr{\mathclose\big}
44 \def\Bigl{\mathopen\Big}
45 \def\Bigm{\mathrel\Big}
46 \def\Bigr{\mathclose\Big}
47 \def\biggl{\mathopen\bigg}
48 \def\biggm{\mathrel\bigg}
49 \def\biggr{\mathclose\bigg}
50 \def\Biggl{\mathopen\Bigg}
51 \def\Biggm{\mathrel\Bigg}
52 \def\Biggr{\mathclose\Bigg}

54.1.3 The UNSORTED Rest

The other math commands are lifted from plain TEX.

\jot
53 \newdimen\jot
54 \jot=3pt
\interdisplaylinepenalty
55 \newcount\interdisplaylinepenalty
56 \interdisplaylinepenalty=100
\choose
57 \def\choose{\atopwithdelims()}
\atopwithdelims
58 \def\brack{\atopwithdelims[]}
\brace
59 \def\brace{\atopwithdelims\{\}}

\mathpalette
60 \def\mathpalette#1#2{%
61 \mathchoice
62  {#1\displaystyle{#2}}%
63  {#1\textstyle{#2}}%
64  {#1\scriptstyle{#2}}%
65  {#1\scriptscriptstyle{#2}}}
\root \rootbox \r@@t
66 \newbox\rootbox
67 \def\root#1\of{%
68 \setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}%
69 \mathpalette\r@@t}
70 \def\r@@t#1#2{%
71 \setbox\z@\hbox{$\m@th#1\sqrtsign{#2}$}%
72 \dimen@\ht\z@ \advance\dimen@-\dp\z@
73 \mkern5mu\raise.6\dimen@\copy\rootbox
74 \mkern-10mu\box\z@}
\phantom \hphantom \vphantom
75 \newif\ifv@
76 \newif\ifh@
77 \def\vphantom{\v@true\h@false\ph@nt}
78 \def\hphantom{\v@false\h@true\ph@nt}
79 \def\phantom{\v@true\h@true\ph@nt}
80 \def\ph@nt{%
81 \ifmmode
82  \expandafter\mathpalette\expandafter\mathph@nt
83 \else
84  \expandafter\makeph@nt
85 \fi}
86 \def\makeph@nt#1{%
87 \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finph@nt}
88 \def\mathph@nt#1#2{%
89 \setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
90 \def\finph@nt{%
91 \setbox\tw@\null
92 \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
93 \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
\mathstrut
94 \def\mathstrut{\vphantom(}

\smash
 95 \def\smash{%
 96 \relax % \relax, in case this comes first in \halign
 97 \ifmmode
 98  \expandafter\mathpalette\expandafter\mathsm@sh
 99 \else
100  \expandafter\makesm@sh
101 \fi}
102 \def\makesm@sh#1{%
103 \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finsm@sh}
104 \def\mathsm@sh#1#2{%
105 \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
106 \def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
\buildrel
107 \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
\cases
108 \def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
109  \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
\matrix
110 \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
111  \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
112  \mathstrut\crcr\noalign{\kern-\baselineskip}
113  #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
\pmatrix
114 \def\pmatrix#1{\left(\matrix{#1}\right)}
\bordermatrix
115 \def\bordermatrix#1{\begingroup \m@th
116 \@tempdima 8.75\p@
117 \setbox\z@\vbox{%
118  \def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
119  \ialign{$##$\hfil\kern2\p@\kern\@tempdima&\thinspace\hfil$##$\hfil
120  &&\quad\hfil$##$\hfil\crcr
121  \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
122  #1\crcr\omit\strut\cr}}%
123 \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
124 \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
125 \setbox\tw@\hbox{$\kern\wd\@ne\kern-\@tempdima\left(\kern-\wd\@ne
126  \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
127  \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
128 \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
\openup
129 \def\openup{\afterassignment\@penup\dimen@}

130 \def\@penup{\advance\lineskip\dimen@
131 \advance\baselineskip\dimen@
132 \advance\lineskiplimit\dimen@}
\displaylines
133 \newif\ifdt@p
134 \def\displ@y{\global\dt@ptrue\openup\jot\m@th
135 \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@
136  \vskip-\lineskiplimit \vskip\normallineskiplimit \fi
137  \else \penalty\interdisplaylinepenalty \fi}}}
138 \def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
139 \def\displaylines#1{\displ@y \tabskip\z@skip
140 \halign{\hb@xt@\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
141  #1\crcr}}

{\sp \atop \sb}

142 \let\sp=^
143 \let\sb=_
\> \; \!
144 %\def\,{\mskip\thinmuskip}      % already defined in ltspace
145 \def\>{\mskip\medmuskip}
146 \def\;{\mskip\thickmuskip}
147 \def\!{\mskip-\thinmuskip}
\*
148 \def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}

\: Nickname for the medium space since \> is not available inside tabbing.

149 \let\:=\>
\prime@s
150 {\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
151 \def\prim@s{%
152 \prime\futurelet\@let@token\pr@m@s}
153 \def\pr@m@s{%
154 \ifx'\@let@token
155  \expandafter\pr@@@s
156 \else
157  \ifx^\@let@token
158  \expandafter\expandafter\expandafter\pr@@@t
159  \else
160  \egroup
161  \fi
162 \fi}
163 \def\pr@@@s#1{\prim@s}

164 \def\pr@@@t#1#2{#2\egroup}
165 {\catcode`\_=\active \gdef_{\_}} % _in math is
166  % either subscript or \_

54.2 Math Environments

{\( \atop \)} Produces $...$ with checks that \( isn’t used in math mode, and that \) is only used in math mode begun with \(.

167 \def\({\relax\ifmmode\@badmath\else$\fi}
168 \def\){\relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}

{\[ \atop \]} Produces $$...$$ with checks that \[ isn’t used in math mode, and that \] is only used in math mode begun with \].

169 \def\[{%
170 \relax\ifmmode
171  \@badmath
172 \else
173  \ifvmode
174  \nointerlineskip
175  \makebox[.6\linewidth]%
176  \fi
177  $$%%$$ BRACE MATCH HACK
178 \fi

179 }

180 \def\]{%
181 \relax\ifmmode
182  \ifinner
183  \@badmath
184  \else
185  $$%%$$ BRACE MATCH HACK
186  \fi
187 \else
188  \@badmath
189 \fi
190 \ignorespaces

191 }

math displaymath Disguises for \(...\) and \[...\].
192 \let\math=\(
193 \let\endmath=\)
194 \def\displaymath{\[}
195 \def\enddisplaymath{\]\@ignoretrue}

equation \c@equation Numbered equations, using the counter \c@equation. Note: The document style must define \theequation etc., and do the appropriate \@addtoreset. It should also redefine \@eqnnum if another format for the equation number is desired other than the standard (...), or to move the equation numbers to the flushleft. (See comment on the \def of \@eqnnum.)

196 \@definecounter{equation}
197 \def\equation{$$\refstepcounter{equation}}
198 \def\endequation{\eqno \hbox{\@eqnnum}$$\@ignoretrue}

\@eqnnum Produces the equation number for equation and eqnarray environments. The following definition is for flushright numbers; for flushleft numbers, see leqno.clo. The equation number is set in black roman type even if an eqnarray environment appears in an italic environment.

199 \def\@eqnnum{{\normalfont \normalcolor (\theequation)}}

\stackrel A disguise for plain TEX’s buildrel.

200 \def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}}

\frac A disguise for plain TEX’s \over.

201 \def\frac#1#2{{\begingroup#1\endgroup\over#2}}

\sqrt \@sqrt Add an optional argument to plain’s \sqrt to give the nth root of an expression n \sqrt{e}.

202 \DeclareRobustCommand\sqrt{\@ifnextchar[\@sqrt\sqrtsign}
203 \def\@sqrt[#1]{\root #1\of}

eqnarray \@eqcnt \@eqpen \if@eqnsw \@eqnsel Here’s the eqnarray environment: Default is for left-hand side of equations to be flushright. To make them flushleft, \let\@eqnsel = \hfil.

204 \newcount\@eqcnt
205 \newcount\@eqpen
206 \newif\if@eqnsw\@eqnswtrue
207 \newskip\@centering
208 \@centering = 0pt plus 1000pt

To get a proper \@currentlabel we have to redefine it for the whole display. Note that we can’t use \refstepcounter as this results in \@currentlabel getting restored at the wrong and thus always writing the first label to the .aux file.

209 \def\eqnarray{%
210 \stepcounter{equation}%
211 \def\@currentlabel{\p@equation\theequation}%
212 \global\@eqnswtrue
213 \m@th
214 \global\@eqcnt\z@
215 \tabskip\@centering
216 \let\\\@eqncr
217 $$\everycr{}\halign to\displaywidth\bgroup
218  \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
219  &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
220  &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
221  $\displaystyle{##}$\hfil\tabskip\@centering

222  &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
223  \tabskip\z@skip
224  \cr

225 }

226 \def\endeqnarray{%
227  \@@eqncr
228  \egroup
229  \global\advance\c@equation\m@ne
230 $$\@ignoretrue

231 }

232 \let\@eqnsel=\relax

\nonumber Switches off equation numbering.

233 \def\nonumber{\global\@eqnswfalse}
\@eqncr \@xeqncr \@yeqncr
234 \def\@eqncr{%
235 {\ifnum0=`}\fi
236 \@ifstar{%
237  \global\@eqpen\@M\@yeqncr
238 }{%
239  \global\@eqpen\interdisplaylinepenalty \@yeqncr

240 }% 241 }

242 \def\@yeqncr{\@testopt\@xeqncr\z@skip}
243 \def\@xeqncr[#1]{%
244 \ifnum0=`{\fi}%
245 \@@eqncr
246 \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}%

247 }

\@@eqncr
248 \def\@@eqncr{\let\reserved@a\relax
249  \ifcase\@eqcnt \def\reserved@a{& & &}\or \def\reserved@a{& &}%
250  \or \def\reserved@a{&}\else
251  \let\reserved@a\@empty
252  \@latex@error{Too many columns in eqnarray environment}\@ehc\fi
253  \reserved@a \if@eqnsw\@eqnnum\stepcounter{equation}\fi
254  \global\@eqnswtrue\global\@eqcnt\z@\cr}

eqnarray* \@seqncr Here’s the eqnarray* environment:

255 \let\@seqncr=\@eqncr
256 \@namedef{eqnarray*}{\def\@eqncr{\nonumber\@seqncr}\eqnarray}
257 \@namedef{endeqnarray*}{\nonumber\endeqnarray}

\lefteqn \lefteqn{FORMULA} typesets FORMULA in display math style flushleft in a box of width zero.

258 \def\lefteqn#1{\rlap{$\displaystyle #1$}}

\ensuremath In math mode, \ensuremath{text} is equivalent to text; in LR or paragraph mode, it is equivalent to $text$. \relax is not needed in front of the \ifmmode as \protect will be \let to \relax. This version (due to Donald Arseneau) avoids duplicating its argument in the ‘then’ and ‘else’ part of the \ifmath which is necessary in nested ‘tabular’ like environments. See amslatex/2104.

259 \DeclareRobustCommand{\ensuremath}{%
260 \ifmmode
261  \expandafter\@firstofone
262 \else
263  \expandafter\@ensuredmath
264 \fi}
\@ensuredmath The \relax stops \ensuremath{} starting display math.
265 \long\def\@ensuredmath#1{$\relax#1$}

266 ⟨/2ekernel⟩

54.3 External options to the standard document classes

54.3.1 Left equation numbering

\@eqnnum To put the equation number on the left side of an equation we have to use a little trick. The number is shifted \displaywidth to the left inside a box of (approximately) zero width. This fails when the quation is too wide, the equation number than may overprint the equation itself.

267 ⟨∗leqno⟩

268 \renewcommand\@eqnnum{\hb@xt@.01\p@{}%
269  \rlap{\normalfont\normalcolor
270  \hskip -\displaywidth(\theequation)}}

271 ⟨/leqno⟩

54.3.2 Flush left equations

To get the displayed math environments to print the contents flush left (with an indentation) we have to redefine all of L^{A}TEX 2ε’s displayed math environments.

\mathindent The amount of indentation of the equations is stored in a register.

272 ⟨∗fleqn⟩

273 \newdimen\mathindent

The setting of \mathindent has to be deferred until the class file has been processed, because \leftmargini is still 0pt wide at the moment fleqn.clo is read in.

274 \AtEndOfClass{\mathindent\leftmargini}

\[ Begin display math;

275 \renewcommand\[{\relax
276  \ifmmode\@badmath
277  \else

278  \begin{trivlist}%
279  \@beginparpenalty\predisplaypenalty
280  \@endparpenalty\postdisplaypenalty
281  \item[]\leavevmode
282  \hb@xt@\linewidth\bgroup $\m@th\displaystyle %$
283  \hskip\mathindent\bgroup
284  \fi}

\] end display math;

285 \renewcommand\]{\relax
286  \ifmmode
287  \egroup $\hfil% $
288  \egroup
289  \end{trivlist}%
290  \else \@badmath
291  \fi}

equation The equation environment

292 \renewenvironment{equation}%
293  {\@beginparpenalty\predisplaypenalty
294  \@endparpenalty\postdisplaypenalty
295  \refstepcounter{equation}%
296  \trivlist \item[]\leavevmode
297  \hb@xt@\linewidth\bgroup $\m@th% $
298  \displaystyle
299  \hskip\mathindent}%
300  {$\hfil % $
301  \displaywidth\linewidth\hbox{\@eqnnum}%
302  \egroup
303  \endtrivlist}

eqnarray The eqnarray environment

304 \renewenvironment{eqnarray}{%
305  \stepcounter{equation}%
306  \def\@currentlabel{\p@equation\theequation}%
307  \global\@eqnswtrue\m@th
308  \global\@eqcnt\z@
309  \tabskip\mathindent
310  \let\\=\@eqncr
311  \setlength\abovedisplayskip{\topsep}%
312  \ifvmode
313  \addtolength\abovedisplayskip{\partopsep}%
314  \fi

When the documentclass uses a non-zero \parskip setting the \topsep might have a negative value to compensate for that. Therefore we add \parskip to

 \abovedisplayskip.
315  \addtolength\abovedisplayskip{\parskip}%
316  \setlength\belowdisplayskip{\abovedisplayskip}%
317  \setlength\belowdisplayshortskip{\abovedisplayskip}%

318  \setlength\abovedisplayshortskip{\abovedisplayskip}%
319  $$\everycr{}\halign to\linewidth% $$
320  \bgroup
321  \hskip\@centering
322  $\displaystyle\tabskip\z@skip{##}$\@eqnsel&%
323  \global\@eqcnt\@ne \hskip \tw@\arraycolsep \hfil${##}$\hfil&%
324  \global\@eqcnt\tw@ \hskip \tw@\arraycolsep
325  $\displaystyle{##}$\hfil \tabskip\@centering&%
326  \global\@eqcnt\thr@@
327  \hb@xt@\z@\bgroup\hss##\egroup\tabskip\z@skip\cr}%
328  {\@@eqncr
329  \egroup
330  \global\advance\c@equation\m@ne$$% $$
331  \@ignoretrue

332 } 333 ⟨/fleqn⟩

File A

ltlists.dtx

55 List, and related environments

The generic commands for creating an indented environment – enumerate,

itemize, quote, etc – are:

\list{⟨LABEL⟩}{⟨COMMANDS⟩} ... \endlist

which can be invoked by the user as the list environment. The LABEL argument specifies item labeling. COMMANDS contains commands for changing the horizontal and vertical spacing parameters.

Each item of the environment is begun by the command \item[ITEMLABEL] which produces an item labeled by ITEMLABEL. If the argument is missing, then the LABEL argument of the \list command is used as the item label.

The label is formed by putting \makelabel{⟨ITEMLABEL⟩} in an hbox whose width is either its natural width or else \labelwidth, whichever is larger. The \list command defines \makelabel to have the default definition:

\makelabel{⟨ARG⟩} == BEGIN \hfil ARG END

which, for a label of width less than \labelwidth, puts the label flushright, \labelsep to the left of the item’s text. However, \makelabel can be \let to another command by the \list’s COMMANDS argument.

A \usecounter{⟨foo⟩} command in the second argument causes the counter foo to be initialized to zero, and stepped by every \item command without an argument. (\label commands within the list refer to this counter.)

When you leave a list environment, returning either to an enclosing list or normal text mode, LaTeX begins a new paragraph if and only if you leave a blank line after the \end command. This is accomplished by the \@endparenv command.

Blank lines are ignored every other reasonable place–i.e.:

• Between the \begin{list} and the first \item,

• Between the \item and the text of that item.

• Between the end of the last item and the \end{list}.

For an environment like quotation, in which items are not labeled, the entire environment is a single item. It is defined by letting \quotation == \list{}{...}\item\relax. (Note the \relax, there in case the first character in the environment is a ’[’.) The spacing parameters provide a great deal of flexability in designing the format, including the ability to let the indentation of the first paragraph be different from that of the subsequent ones.

The trivlist environment is equivalent to a list environment whose second argument sets the following parameter values:

\leftmargin = 0: causes no indentation of left margin

\labelwidth = 0: see below for precise effect this has.

\itemindent = 0: with a null label, makes first paragraph have no indentation. Succeeding paragraphs have \parindent indentation. To give first paragraph same indentation, set \itemindent = \parindent before the \item[].

Every \item in a trivlist environment must have an argument—in many cases, this will be the null argument (\item[]). The trivlist environment is mainly used for paragraphing environments, like verbatim, in which there is no margin change. It provides the same vertical spacing as the list environment, and works reasonably well when it occurs immediately after an \item command in an enclosing list.

55.1 List and Trivlist

The following variables are used inside a list environment:

\@totalleftmargin The distance that the prevailing left margin is indented from the outermost left margin,

\linewidth The width of the current line. Must be initialized to \hsize.

\@listdepth A count for holding current list nesting depth.

\makelabel A macro with a single argument, used to generate the label from the argument (given or implied) of the \item command. Initialized to \@mklab by the \list command. This command must produce some stretch—i.e.,

     an \hfil.

\@inlabel A switch that is false except between the time an \item is encountered and the time that TEX actually enters horizontal mode. Should be tested by commands that can be messed up by the list environment’s use of \everypar.

\boxlabels When @inlabel = true, it holds the labels to be put out by

     \everypar.

@noparitem A switch set by \list when @inlabel = true. Handles the case of a \list being the first thing in an item.

@noparlist A switch set true for a list that begins an item. No \topsep space is added before or after \item’s such a list.

@newlist Set true by \list, set false by the first text (by \everypar).

@noitemarg Set true when executing an \item with no explicit argument. Used to save space. To save time, make two separate \@item commands.

@nmbrlist Set true by \usecounter command, causes list to be numbered.

\@listctr \def’ed by \usecounter to name of counter.

\@noskipsec A switch set true by a sectioning command when it is creating an in-text heading with \everypar.

Throughout a list environment, \hsize is the width of the current line, measured from the outermost left margin to the outermost right margin. Environments like tabbing should use \linewidth instead of \hsize.

Here are the parameters of a list that can be set by commands in the \list’s COMMANDS argument. These parameters are all TeX skips or dimensions (defined by \newskip or \newdimen), so the usual TEX or L^{A}TEX commands can be used to set them. The commands will be executed in vmode if and only if the \list was preceded by a \par (or something like an \end{list}), so the spacing parameters can be set according to whether the list is inside a paragraph or is its own paragraph.

55.2 Vertical Spacing (skips)

\topsep: Space between first item and preceding paragraph.

\partopsep: Extra space added to \topsep when environment starts a new paragraph (is called in vmode).

\itemsep: Space between successive items.

\parsep: Space between paragraphs within an item – the \parskip for this environment.

55.3 Penalties

\@beginparpenalty: put at the beginning of a list

\@endparpenalty: put at end of list

\@itempenalty: put between items.

55.4 Horizontal Spacing (dimens)

\leftmargin: space between left margin of enclosing environment (or of page if top level list) and left margin of this list. Must be nonnegative.

\rightmargin: analogous.

\listparindent: extra indentation at beginning of every paragraph of a list except the one started by the \item command. May be negative! Usually, labeled lists have \listparindent equal to zero.

\itemindent: extra indentation added right BEFORE an item label.

\labelwidth: nominal width of box that contains the label. If the natural width of the label <= \labelwidth, then the label is flushed right inside a box of width \labelwidth (with an \hfil). Otherwise, a box of the natural width is employed, which causes an indentation of the text on that line.

\labelsep: space between end of label box and text of first item.

55.5 Default Values

Defaults for the list environment are set as follows. First, \rightmargin, \listparindent and \itemindent are set to 0pt. Then, one of the commands \@listi, \@listii, ... , \@listvi is called, depending upon the current level of the list. The \@list … commands should be defined by the document style. A convention that the document style should follow is to set \leftmargin to \leftmargini,…, \leftmarginvi for the appropriate level. Items that aren’t changed may be left alone, but everything that could possibly be changed must be reset.

\list{LABEL}{COMMANDS} == BEGIN

if \@listdepth > 5

then LaTeX error: ’Too deeply nested’

  else \@listdepth :=G \@listdepth + 1

fi

\rightmargin  := 0pt
\listparindent := 0pt
\itemindent  := 0pt
\eval(@list \romannumeral\the\@listdepth)  %% Set default values:
\@itemlabel  :=L LABEL
\makelabel  == \@mklab

@nmbrlist :=L false COMMANDS

\@trivlist % commands common to \list and

\trivlist
\parskip  :=L \parsep
\parindent  :=L \listparindent
\linewidth  :=L \linewidth - \rightmargin -\leftmargin
\@totalleftmargin :=L \@totalleftmargin + \leftmargin
\parshape 1 \@totalleftmargin \linewidth
\ignorespaces                    % gobble space up to \item

END

\endlist == BEGIN \@listdepth :=G \@listdepth -1
              \endtrivlist

END

\@trivlist ==

BEGIN if @newlist = T then \@noitemerr fi

%% This command removed for some forgotten

reason.

\@topsepadd :=L \topsep

if @noskipsec then leave vertical mode fi %% Added 11 Jun 85 if vertical mode

  then \@topsepadd :=L \@topsepadd + \partopsep

else \unskip \par % remove glue from end of last line fi if @inlabel = true

then @noparitem :=L true

@noparlist :=L true else @noparlist :=L false

        \@topsep :=L \@topsepadd

fi

\@topsep  :=L \@topsep + \parskip  %% Change 4 Sep 85

\leftskip  :=L 0pt  % Restore paragraphing

parameters

\rightskip  :=L \@rightskip
\parfillskip  :=L 0pt + 1fil

NOTE: \@setpar called on every \list in case \par has been temporarily munged before the \list command.

\@setpar{if @newlist = false then {\@@par} fi}

\@newlist  :=G T
\@outerparskip  :=L \parskip

END

\trivlist ==

BEGIN

\parsep  := \parskip

@nmbrlist := F

\@trivlist
\labelwidth := 0
\leftmargin := 0
\itemindent := \parindent

\@itemlabel :=L ”empty” %% added 93/12/13

\makelabel{LABEL} == LABEL

END

\endtrivlist ==

BEGIN if @inlabel = T then \indent fi if horizontal mode then \unskip \par fi if @noparlist = true

  else if \lastskip > 0
          then \@tempskipa := \lastskip

        \vskip - \lastskip
        \vskip \@tempskipa -\@outerparskip + \parskip

fi

\@endparenv

fi END

\@endparenv ==

BEGIN \addpenalty{@endparpenalty}

\addvspace{\@topsepadd}
\endgroup    %% ends the \begin command’s \begingroup

\par == BEGIN

    \@restorepar
    \everypar{}
    \par

END

\everypar == BEGIN remove \lastbox \everypar{} END
\begingroup  %% to match the \end commands \endgroup

END

\item == BEGIN if math mode then WARNING fi if next char = [

      then \@item

else @noitemarg := true

\@item[@itemlabel]

END

\@item[LAB] ==

BEGIN if @noparitem = true

then @noparitem := false % NOTE: then clause hardly every taken,

    % so made a macro \@donoparitem
\box\@labels :=G \hbox{\hskip -\leftmargin
                       \box\@labels
                       \hskip \leftmargin }

if @minipage = false then

   \@tempskipa := \lastskip
   \vskip -\lastskip
   \vskip \@tempskipa + \@outerparskip - \parskip

fi else if @inlabel = true

then \indent \par % previous item empty. fi if hmode then 2 \unskip's % To remove any space at end of prev. % paragraph that could cause a blank line.

                \par

fi

if @newlist = T

then if @nobreak = T % Kludge if list follows \section

                 then \addvspace{\@outerparskip - \parskip}
                 else \addpenalty{\@beginparpenalty}
                      \addvspace{\@topsep}
                      \addvspace{-\parskip}   %% added 4 Sep 85

fi

          else \addpenalty{\@itempenalty}
               \addvspace{\itemsep}

fi

@inlabel :=G true fi

\everypar{ @minipage :=G F @newlist :=G F if @inlabel = true

then @inlabel :=G false

                  \hskip -\parindent
                  \box\@labels
                  \penalty 0

%% 3 Oct 85 – allow line break here

                  \box\@labels :=G null

fi

           \everypar{} }

@nobreak :=G false if @noitemarg = true

then @noitemarg := false

if @nmbrlist

         then \refstepcounter{\@listctr}

fi fi

\@tempboxa :=L \hbox{\makelabel{LAB}}
\box\@labels :=G \@labels \hskip \itemindent
                  \hskip - (\labelwidth + \labelsep)
                  if \wd \@tempboxa > \labelwidth
                     then \box\@tempboxa
                     else \hbox to \labelwidth
{\unhbox\@tempboxa}

fi

                  \hskip\labelsep

\ignorespaces %gobble space up to text END \makelabel{LABEL} == ERROR %% default to catch lonely \item

\usecounter{CTR} == BEGIN @nmbrlist :=L true

                              \@listctr == CTR
                              \setcounter{CTR}{0}

END

 DEFINE \dimen's and \count
\topskip
\partopsep
\itemsep
\parsep
\@topsep
\@topsepadd
\outerparskip

1 ⟨∗2ekernel⟩

 2 \newskip\topsep
 3 \newskip\partopsep
 4 \newskip\itemsep
 5 \newskip\parsep
 6 \newskip\@topsep
 7 \newskip\@topsepadd
 8 \newskip\@outerparskip
\leftmargin
\rightmargin
\listparindent
\itemindent
\labelwidth
\labelsep
\@totalleftmargin

 9 \newdimen\leftmargin
10 \newdimen\rightmargin
11 \newdimen\listparindent
12 \newdimen\itemindent
13 \newdimen\labelwidth
14 \newdimen\labelsep
15 \newdimen\linewidth
16 \newdimen\@totalleftmargin \@totalleftmargin=\z@
\leftmargini
\leftmarginii
\leftmarginiii
\leftmarginiv
\leftmarginv
\leftmarginvi

17 \newdimen\leftmargini
18 \newdimen\leftmarginii
19 \newdimen\leftmarginiii
20 \newdimen\leftmarginiv
21 \newdimen\leftmarginv
22 \newdimen\leftmarginvi
\@listdepth
\@itempenalty
\@beginparpenalty
\@endparpenalty

23 \newcount\@listdepth \@listdepth=0
24 \newcount\@itempenalty
25 \newcount\@beginparpenalty
26 \newcount\@endparpenalty
\@labels
27 \newbox\@labels
\if@inlabel
\@inlabelfalse
\@inlabeltrue

28 \newif\if@inlabel \@inlabelfalse

\if@newlist
\@newlistfalse
\@newlisttrue

29 \newif\if@newlist   \@newlistfalse
\if@noparitem
\@noparitemfalse
\@noparitemtrue

30 \newif\if@noparitem \@noparitemfalse
\if@noparlist
\@noparlistfalse
\@noparlisttrue

31 \newif\if@noparlist \@noparlistfalse
\if@noitemarg
\@noitemargfalse
\@noitemargtrue

32 \newif\if@noitemarg \@noitemargfalse
\if@newlist
\@newlistfalse
\@newlisttrue

33 \newif\if@nmbrlist  \@nmbrlistfalse
\list
34 \def\list#1#2{%
35 \ifnum \@listdepth >5\relax
36  \@toodeep
37 \else
38  \global\advance\@listdepth\@ne
39 \fi
40 \rightmargin\z@
41 \listparindent\z@
42 \itemindent\z@
43 \csname @list\romannumeral\the\@listdepth\endcsname
44 \def\@itemlabel{#1}%
45 \let\makelabel\@mklab
46 \@nmbrlistfalse
47 #2\relax
48 \@trivlist
49 \parskip\parsep
50 \parindent\listparindent
51 \advance\linewidth -\rightmargin
52 \advance\linewidth -\leftmargin
53 \advance\@totalleftmargin \leftmargin
54 \parshape \@ne \@totalleftmargin \linewidth
55 \ignorespaces}
\par@deathcycles
56 \newcount\par@deathcycles

\@trivlist Because \par is sometimes made a no-op it is possible for a missing \item to produce a loop that does not fill memory and so never gets trapped by TEX. We thus need to trap this here by seting \par to count the number of times a paragraph ii is called with no progress being made started.

57 \def\@trivlist{%
58 \if@noskipsec \leavevmode \fi

59 \@topsepadd \topsep
60 \ifvmode
61  \advance\@topsepadd \partopsep
62 \else
63  \unskip \par
64 \fi
65 \if@inlabel
66  \@noparitemtrue
67  \@noparlisttrue
68 \else
69  \if@newlist \@noitemerr \fi
70  \@noparlistfalse
71  \@topsep \@topsepadd
72 \fi
73 \advance\@topsep \parskip
74 \leftskip \z@skip
75 \rightskip \@rightskip
76 \parfillskip \@flushglue
77 \par@deathcycles \z@
78 \@setpar{\if@newlist
79  \advance\par@deathcycles \@ne
80  \ifnum \par@deathcycles >\@m
81  \@noitemerr
82  {\@@par}%
83  \fi
84  \else
85  {\@@par}%
86  \fi}%
87 \global \@newlisttrue
88 \@outerparskip \parskip}

\trivlist
89 \def\trivlist{%
90 \parsep\parskip
91 \@nmbrlistfalse
92 \@trivlist
93 \labelwidth\z@
94 \leftmargin\z@
95 \itemindent\z@

We initialise \@itemlabel so that a trivlist with an \item not having an optional argument doesn’t produce an error message.

96 \let\@itemlabel\@empty
97 \def\makelabel##1{##1}}
\endlist
98 \def\endlist{%
99 \global\advance\@listdepth\m@ne
100 \endtrivlist}

The definition of \trivlist used to be in ltspace.dtx so that other commands could be ‘let to it’. They now use \def.

\endtrivlist
101 \def\endtrivlist{%
102 \if@inlabel
103  \leavevmode
104  \global \@inlabelfalse
105 \fi
106 \if@newlist
107  \@noitemerr
108  \global \@newlistfalse
109 \fi
110 \ifhmode\unskip \par\fi
111 \if@noparlist \else
112  \ifdim\lastskip >\z@
113  \@tempskipa\lastskip \vskip -\lastskip
114  \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
115  \vskip\@tempskipa
116  \fi
117  \@endparenv
118 \fi

119 }

\@endparenv \@doendpe To suppress the paragraph indentation in text immediately following a paragraphmaking environment, \everypar is changed to remove the space, and \par is redefined to restore \everypar. Instead of redefining \par and \everpar, \@endparenv was changed to set the @endpe switch, letting \end redefine \par

 and \everypar.

This allows paragraph-making environments to work right when called by other environments. (Changed 27 Oct 86)

120 \def\@endparenv{%
121 \addpenalty\@endparpenalty\addvspace\@topsepadd\@endpetrue}
122 \def\@doendpe{\@endpetrue
123  \def\par{\@restorepar\everypar{}\par\@endpefalse}\everypar
    Use \setbox0=\lastbox instead of \hskip -\parindent so that a \noindent

becomes a no-op when used before a line immediately following a list environment(23 Oct 86).

124  {{\setbox\z@\lastbox}\everypar{}\@endpefalse}}
\if@endpe
\@endpefalse
\@endpeltrue

125 \newif\if@endpe
126 \@endpefalse
\@mklab
127 \def\@mklab#1{\hfil #1}

\item
128 \def\item{%
129 \@inmatherr\item
130 \@ifnextchar [\@item{\@noitemargtrue \@item[\@itemlabel]}}
\@donoparitem
131 \def\@donoparitem{%
132 \@noparitemfalse
133 \global\setbox\@labels\hbox{\hskip -\leftmargin
134  \unhbox\@labels
135  \hskip \leftmargin}%
136 \if@minipage\else
137  \@tempskipa\lastskip
138  \vskip -\lastskip
139  \advance\@tempskipa\@outerparskip
140  \advance\@tempskipa -\parskip
141  \vskip\@tempskipa
142 \fi}
\@item
143 \def\@item[#1]{%
144 \if@noparitem
145  \@donoparitem
146 \else
147  \if@inlabel
148  \indent \par
149  \fi
150  \ifhmode
151  \unskip\unskip \par
152  \fi
153  \if@newlist
154  \if@nobreak
155  \@nbitem
156  \else
157  \addpenalty\@beginparpenalty
158  \addvspace\@topsep
159  \addvspace{-\parskip}%
160  \fi
161  \else
162  \addpenalty\@itempenalty
163  \addvspace\itemsep
164  \fi
165  \global\@inlabeltrue
166 \fi
167 \everypar{%
168  \@minipagefalse
169  \global\@newlistfalse

This \if@inlabel check is needed in case an item starts of inside a group so that \everypar does not become empty outside that group. nobreakfalse, etc etc.

170  \if@inlabel
171  \global\@inlabelfalse

The paragraph indent is now removed by using \setbox... since this makes \noindent a no-op here, as it should be. Thus the following comment is redundant but is left here for the sake of future historians: this next command was changed from an hskip to a kern to avoid a break point after the parindent box: the skip could cause a line-break if a very long label occurs in raggedright setting. If \noindent was used after \item want to cancel the \itemindent skip. This case can be detected as the indentation box will be void.

172  {\setbox\z@\lastbox
173  \ifvoid\z@
174  \kern-\itemindent
175  \fi}%
176  \box\@labels
177  \penalty\z@
178  \fi

This code is intended to prevent a page break after the first line of an item that comes immediately after a section title. It may be sensible to always forbid a page break after one line of an item? As with all such settings of \clubpenalty it is local so will have no effect if the item starts in a group.

Only resetting \@nobreak when it is true is now essential since now it is sometimes set locally.

179  \if@nobreak
180  \@nobreakfalse
181  \clubpenalty \@M
182  \else
183  \clubpenalty \@clubpenalty
184  \everypar{}%
185  \fi}%
186 \if@noitemarg
187  \@noitemargfalse
188  \if@nmbrlist
189  \refstepcounter\@listctr
190  \fi
191 \fi

We use \sbox to support colour commands.

192 \sbox\@tempboxa{\makelabel{#1}}%
193 \global\setbox\@labels\hbox{%
194  \unhbox\@labels
195  \hskip \itemindent
196  \hskip -\labelwidth
197  \hskip -\labelsep
198  \ifdim \wd\@tempboxa >\labelwidth
199  \box\@tempboxa

200  \else
201  \hbox to\labelwidth {\unhbox\@tempboxa}%
202  \fi
203  \hskip \labelsep}%
204 \ignorespaces}
\makelabel
205 \def\makelabel#1{%
206 \@latex@error{Lonely \string\item--perhaps a missing
207  list environment}\@ehc}
\@nbitem
208 \def\@nbitem{%
209 \@tempskipa\@outerparskip
210 \advance\@tempskipa -\parskip
211 \addvspace\@tempskipa}
\usecounter
212 \def\usecounter#1{\@nmbrlisttrue\def\@listctr{#1}\setcounter{#1}\z@}

55.6 Itemize and Enumerate

Enumeration is done with four counters: enumi, enumii, enumiii and enumiv, where enumN controls the numbering of the Nth level enumeration. The label is generated by the commands \labelenumi … \labelenumiv, which should be defined by the document style. Note that \p@enumN\theenumN defines the output of a \ref command. A typical definition might be:

     \def\theenumii{\alph{enumii}}
     \def\p@enumii{\theenumi}
     \def\labelenumii{(\theenumii)}

which will print the labels as ‘(a)’, ‘(b)’, … and print a \ref as ‘3a’.

The item numbers are moved to the right of the label box, so they are always a distance of \labelsep from the item.

\@enumdepth holds the current enumeration nesting depth.

Itemization is controlled by four commands: \labelitemi, \labelitemii, \labelitemiii, and \labelitemiv. To cause the second-level list to be bulleted,

you just define \labelitemii to be •. \@itemspacing and \@itemdepth are the
analogs of \@enumspacing and \@enumdepth.
 \enumerate ==

BEGIN

     if \@enumdepth > 3

then errormessage: “Too deeply nested”.

       else \@enumdepth :=L \@enumdepth + 1
            \@enumctr :=L eval(enum@\romannumeral\the\@enumdepth)
            \list{\label(\@enumctr)}

                  {\usecounter{\@enumctr}
                   \makelabel{LABEL} == \hss \llap{LABEL}}

fi END

  \endenumerate == \endlist
\@enumdepth
213 \newcount\@enumdepth \@enumdepth = 0
\c@enumi \c@enumii \c@enumii \c@enumiv
214 \@definecounter{enumi}
215 \@definecounter{enumii}
216 \@definecounter{enumiii}
217 \@definecounter{enumiv}
enumerate
218 \def\enumerate{%
219 \ifnum \@enumdepth >\thr@@\@toodeep\else
220  \advance\@enumdepth\@ne
221  \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
222  \expandafter
223  \list
224  \csname label\@enumctr\endcsname
225  {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
226 \fi}
227 \let\endenumerate =\endlist
   \itemize ==

BEGIN

       if \@itemdepth > 3

then errormessage: ’Too deeply nested’.

         else \@itemdepth :=L \@itemdepth + 1
              \@itemitem ==
 eval(labelitem\romannumeral\the\@itemdepth)
              \list{\@nameuse{\@itemitem}}
                    {\makelabel{LABEL} == \hss \llap{LABEL}}

fi END

   \enditemize == \endlist

\@itemdepth
228 \newcount\@itemdepth \@itemdepth = 0

itemize
229 \def\itemize{%
230 \ifnum \@itemdepth >\thr@@\@toodeep\else
231  \advance\@itemdepth\@ne
232  \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
233  \expandafter
234  \list
235  \csname\@itemitem\endcsname
236  {\def\makelabel##1{\hss\llap{##1}}}%
237 \fi}
238 \let\enditemize =\endlist

239 ⟨/2ekernel⟩

File B

ltboxes.dtx

56 L^{A}TEX Box commands

\makebox  \makebox[⟨wid⟩][⟨pos⟩]{⟨obj ⟩}

Puts ⟨obj ⟩ in an \hbox of width ⟨wid⟩, positioned by ⟨pos⟩.

The possible ⟨pos⟩ are: s stretched, l flushleft, r flushright, c (default) centred.

If ⟨wid⟩ is missing, then ⟨pos⟩ is also missing and ⟨obj ⟩ is put in an \hbox of its natural width.

\makebox(⟨x⟩,⟨y⟩)[⟨pos⟩]{⟨obj ⟩} Puts ⟨obj ⟩ in an \hbox of width x∗\unitlength and height y∗\unitlength. ⟨pos⟩ arguments are s, l, r or c (default) for stretched, flushleft, flushright or centred, and t or b for top, bottom – or combinations like tr or rb. Default for horizontal and vertical are centered. Note that in this picture mode version of \makebox a [b] aligns on the bottom of the text as documented. If you want to align on

the baseline use \makebox( , )[b]{\raisebox{0pt}[\height][0pt]{xyz}}} or
\makebox( , )[b]{\smash{xyz}}

\mbox \mbox{⟨obj ⟩} The same as \makebox{⟨obj ⟩}, but is more efficient as no check-

ing for optional arguments is done.

\newsavebox \newsavebox{\cmd} : If \cmd is undefined, then defines it to be a TEX box

register.

\savebox \savebox{\cmd} ... : \cmd is defined to be a TEX box register, and the ’...’ are any \makebox arguments. It is like \makebox, except it doesn’t produce text but saves the value in \box \cmd.

\sbox \sbox{⟨cmd⟩}{⟨obj ⟩} is an efficient abbreviation for

\savebox{⟨cmd⟩}{⟨obj ⟩}.
lrbox      \begin{lrbox}{⟨cmd⟩}⟨text⟩\end{lrbox} is equivalent to

\sbox{⟨cmd⟩}{⟨text⟩} except that any white space at the beginning and end of ⟨text⟩ is ignored.

\framebox \framebox ... : like \makebox, except it puts a ‘frame’ around the box. The frame is made of lines of thickness \fboxrule, separated by space \fboxsep from the text – except for \framebox(X,Y) ... , where the thickness of the lines is as for the picture environment, and there is no separation added.

\fbox \fbox{⟨obj ⟩} is an abbreviation for \framebox{⟨obj ⟩}. \parbox \parbox[⟨pos⟩][⟨height⟩][⟨inner-pos⟩]{⟨width⟩}{⟨text⟩} : Makes a box with

\hsize ⟨width⟩, positioned by ⟨pos⟩ as follows: c : \vcenter (placed in $...$ if not in math mode) b : \vbox t : \vtop default value is c. Sets \hsize := ⟨width⟩ and calls \@parboxrestore, which does the following: Restores the original definitions of:

    \par \\ \- \' \` \=

Resets the following parameters:

    \parindent  = 0pt

\parskip  = 0pt  added 20 Jan 87

    \linewidth  = \hsize
    \@totalleftmargin = 0pt
    \leftskip  = 0pt
    \rightskip  = 0pt
    \@rightskip  = 0pt
    \parfillskip  = 0pt plus 1fil
    \lineskip  = \normallineskip
    \baselineskip  = \normalbaselineskip

   Calls \sloppy
   Note: \@arrayparboxrestore same as \@parboxrestore but it doesn’t re-

store \\.

minipage minipage : Similar to \parbox, except it also makes this look like a page by

setting

   \textwidth == \columnwidth == box width

changes footnotes by redefining: \@mpfn == mpfootnote

\thempfn == \thempfootnote
\@footnotetext == \@mpfootnotetext

resets the following list environment parameters:

\@listdepth == \@mplistdepth

where \@mplistdepth is initialized to zero,

and executes \@minipagerestore to allow the document style to reset any other parameters it desires. It sets @minipage true, and resets \everypar to set it false. This switch keeps \addvspace from putting space at the top of a minipage.

Change added 24 May 89: \minipage sets @minipage globally; \endminipage resets it false.

\rule \rule[⟨raised⟩]{⟨width⟩}{⟨height⟩} : Makes a ⟨width⟩ ∗ ⟨height⟩ rule, raised

⟨raised⟩.

\underline \underline{⟨text⟩} : Makes an underlined hbox with ⟨text⟩ in it. \raisebox \raisebox{⟨distance⟩}[⟨height⟩][⟨depth⟩]{⟨box⟩} :

Raises ⟨box⟩ up by ⟨distance⟩ length (down if ⟨distance⟩ negative). Makes TEX think that the new box extends ⟨height⟩ above the line and ⟨depth⟩ below, for a total vertical length of ⟨height⟩+⟨depth⟩. Default values of ⟨height⟩ & ⟨depth⟩ = actual height and depth of box in new position.

1 ⟨∗2ekernel⟩

 2 \message{boxes,}

\makebox \makebox User level command just looks for optional [ or (.

 3 \def\makebox{%
 4 \leavevmode
 5 \@ifnextchar(%)
 6  \@makepicbox
 7  {\@ifnextchar[\@makebox\mbox}}

\mbox The basic horizontal box command for L^{A}TEX.

 8 \long\def\mbox#1{\leavevmode\hbox{#1}}

\@makebox Look for a possible second optional argument (defaults to c).

 9 \def\@makebox[#1]{%
10 \@ifnextchar [{\@imakebox[#1]}{\@imakebox[#1][c]}}
\@begin@tempboxa Helper macro for supporting \height, \width etc. Grab #1 into \@tempboxa and

measure it.

11 \long\def\@begin@tempboxa#1#2{%
12 \begingroup
13  \setbox\@tempboxa#1{\color@begingroup#2\color@endgroup}%
14  \def\width{\wd\@tempboxa}%
15  \def\height{\ht\@tempboxa}%
16  \def\depth{\dp\@tempboxa}%
17  \let\totalheight\@ovri
18  \totalheight\height
19  \advance\totalheight\depth}

\@end@tempboxa End the group started by \@begin@tempboxa, so that the scope of \height only includes the ‘length’ argument to the user-command.

20 \let\@end@tempboxa\endgroup
\bm@c \bm@l \bm@r \bm@s \bm@t \bm@b Set up spacing.
21 \def\bm@c{\hss\unhbox\@tempboxa\hss}
22 \def\bm@l{\unhbox\@tempboxa\hss}\let\bm@t\bm@l
23 \def\bm@r{\hss\unhbox\@tempboxa}\let\bm@b\bm@r
24 \def\bm@s{\unhbox\@tempboxa}
\@imakebox Internal form of \makebox.
25 \long\def\@imakebox[#1][#2]#3{%
26 \@begin@tempboxa\hbox{#3}%
27  \setlength\@tempdima{#1}%       support calc
28  \hb@xt@\@tempdima{\csname bm@#2\endcsname}%
29 \@end@tempboxa}
\@makepicbox Picture mode form of \makebox.
30 \def\@makepicbox(#1,#2){%
31 \@ifnextchar[{\@imakepicbox(#1,#2)}{\@imakepicbox(#1,#2)[]}}

\@imakepicbox picture mode version

32 \long\def\@imakepicbox(#1,#2)[#3]#4{%
33 \vbox to#2\unitlength
34 {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
35  \let\mb@t\vss
36  \@tfor\reserved@a :=#3\do{%
37  \if s\reserved@a
38  \let\mb@l\relax\let\mb@r\relax
39  \else
40  \expandafter\let\csname mb@\reserved@a\endcsname\relax
41  \fi}%
42  \mb@t
43  \hb@xt@ #1\unitlength{\mb@l #4\mb@r}%
44  \mb@b

This kern ensures that a b option aligns on the bottom of the text rather than the baseline. this is the documented behaviour in the L^{A}TEXBook. The kern is removed in compatibility mode.

45  \kern\z@}}

\set@color This macro is initialy a no-op, but the colour package will redefine it to insert a

\special.
46 \let\set@color\relax
\color@begingroup \color@endgroup \color@setgroup \normalcolor \color@hbox \color@vbox \color@endbox These macros are initialy a no-op, but the colour package will redefine them to be
\begingroup, \endgroup, \begingroup\set@color,
\hbox\bgroup\color@begingroup, \color@endgroup\egroup. and ⟨set to main

document colour⟩ respectively.

47 \let\color@begingroup\relax
48 \let\color@endgroup\relax
49 \let\color@setgroup\relax
50 \let\normalcolor\relax
51 \let\color@hbox\relax
52 \let\color@vbox\relax
53 \let\color@endbox\relax

\newsavebox Allocate a new ‘savebox’.

54 \def\newsavebox#1{\@ifdefinable{#1}{\newbox#1}}

\savebox Save #1 in a box register.

55 \def\savebox#1{%
56 \@ifnextchar(%)
57  {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}

\sbox Save #1 in a box register.

58 \long\def\sbox#1#2{\setbox#1\hbox{%
59 \color@setgroup#2\color@endgroup}}

\@savebox Look for second optional argument.

60 \def\@savebox#1[#2]{%
61 \@ifnextchar [{\@isavebox#1[#2]}{\@isavebox#1[#2][c]}}
\@isavebox
62 \long\def\@isavebox#1[#2][#3]#4{%
63 \sbox#1{\@imakebox[#2][#3]{#4}}}

\@savepicbox Picture mode version of \savebox.

64 \def\@savepicbox#1(#2,#3){%
65 \@ifnextchar[%]
66  {\@isavepicbox#1(#2,#3)}{\@isavepicbox#1(#2,#3)[]}}
\@isavepicbox Picture mode version of \savebox.
67 \long\def\@isavepicbox#1(#2,#3)[#4]#5{%
68 \sbox#1{\@imakepicbox(#2,#3)[#4]{#5}}}

\lrbox lrbox: the new environment form of \sbox. Use \aftergroup tricks to enable a local assignment to be made to the box, in a way that it still has an effect outside the lrbox environment.

69 \def\lrbox#1{%
70 \edef\reserved@a{%
71  \endgroup
72  \setbox#1\hbox{%
73  \begingroup\aftergroup}%
74  \def\noexpand\@currenvir{\@currenvir}%
75  \def\noexpand\@currenvline{\on@line}}%
76 \reserved@a
77  \@endpefalse
78  \color@setgroup
79  \ignorespaces}

\endlrbox End the lrbox environment.

80 \def\endlrbox{\unskip\color@endgroup}

\usebox unchanged

81 \def\usebox#1{\leavevmode\copy #1\relax}

\frame The following definition of \frame was written by Pavel Curtis (Extra space removed 14 Jan 88) RmS 92/08/24: Replaced occurence of \@halfwidth by

\@wholewidth
82 \long\def\frame#1{%
83 \leavevmode
84 \hbox{%
85  \hskip-\@wholewidth
86  \vbox{%
87  \vskip-\@wholewidth
88  \hrule \@height\@wholewidth

 89  \hbox{%
 90  \vrule\@width\@wholewidth
 91  #1%
 92  \vrule\@width\@wholewidth}%
 93  \hrule\@height\@wholewidth
 94  \vskip-\@wholewidth}%
 95  \hskip-\@wholewidth}}

\fboxrule \fboxsep user level parameters,

 96 \newdimen\fboxrule
 97 \newdimen\fboxsep

\fbox Abbreviated framed box command.

 98 \long\def\fbox#1{%
 99 \leavevmode
100 \setbox\@tempboxa\hbox{%
101  \color@begingroup
102  \kern\fboxsep{#1}\kern\fboxsep
103  \color@endgroup}%
104 \@frameb@x\relax}
\framebox Framed version of \makebox.
105 \def\framebox{%
106 \@ifnextchar(%)
107  \@framepicbox{\@ifnextchar[\@framebox\fbox}}

\@framebox Deal with optional arguments.

108 \def\@framebox[#1]{%
109 \@ifnextchar[%]
110  {\@iframebox[#1]}%
111  {\@iframebox[#1][c]}}

\@iframebox The handling the optional arguments. In order to set the whole box, including the frame to the specified dimension, we first determine that dimension from the natural size of the text, #3. calculated width.

112 \long\def\@iframebox[#1][#2]#3{%
113 \leavevmode
114 \@begin@tempboxa\hbox{#3}%
115  \setlength\@tempdima{#1}%
116  \setbox\@tempboxa\hb@xt@\@tempdima
117  {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}%
118  \@frameb@x{\kern-\fboxrule}%
119 \@end@tempboxa}

\@frameb@x Common part of \framebox and \fbox. #1 is a negative kern in the \framebox case so that the vertical rules do not add to the width of the box.

120 \def\@frameb@x#1{%
121 \@tempdima\fboxrule
122 \advance\@tempdima\fboxsep

123 \advance\@tempdima\dp\@tempboxa
124 \hbox{%
125  \lower\@tempdima\hbox{%
126  \vbox{%
127  \hrule\@height\fboxrule
128  \hbox{%
129  \vrule\@width\fboxrule
130  #1%
131  \vbox{%
132  \vskip\fboxsep
133  \box\@tempboxa
134  \vskip\fboxsep}%
135  #1%
136  \vrule\@width\fboxrule}%
137  \hrule\@height\fboxrule}%

138 }% 139 }% 140 }

\@framepicbox Picture mode version.

141 \def\@framepicbox(#1,#2){%
142 \@ifnextchar[{\@iframepicbox(#1,#2)}{\@iframepicbox(#1,#2)[]}}

\@iframepicbox Picture mode version.

143 \long\def\@iframepicbox(#1,#2)[#3]#4{%
144 \frame{\@imakepicbox(#1,#2)[#3]{#4}}}

\parbox The main vertical-box command for L^{A}TEX.

145 \def\parbox{%
146 \@ifnextchar[%]
147  \@iparbox
148  {\@iiiparbox c\@empty[s]}}

\@iparbox Optional argument handling.

149 \def\@iparbox[#1]{%
150 \@ifnextchar[%]
151  {\@iiparbox{#1}}%
152  {\@iiiparbox{#1}\@empty[s]}}

\@iiparbox Optional argument handling.

153 \def\@iiparbox#1[#2]{%
154 \@ifnextchar[%]
155  {\@iiiparbox{#1}{#2}}%
156  {\@iiiparbox{#1}{#2}[#1]}}
\@iiiparbox \@parboxto The internal version of \parbox.
157 \let\@parboxto\@empty
158 \long\def\@iiiparbox#1#2[#3]#4#5{%
159 \leavevmode

160 \@pboxswfalse
161 \setlength\@tempdima{#4}%
162 \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
163  \ifx\@empty#2\else
164  \setlength\@tempdimb{#2}%
165  \def\@parboxto{to\@tempdimb}%
166  \fi
167  \if#1b\vbox
168  \else\if #1t\vtop
169  \else\ifmmode\vcenter
170  \else\@pboxswtrue $\vcenter
171  \fi\fi\fi
172  \@parboxto{\let\hss\vss\let\unhbox\unvbox
173  \csname bm@#3\endcsname}%
174  \if@pboxsw \m@th$\fi
175 \@end@tempboxa}

\@arrayparboxrestore Restore various paragraph parameters.

The rational for allowing two normally global flags to be set locally here was stated originally by Donald Arsenau and extended by Chris Rowley. It is because these flags are only set globally to true by section commands, and these should never appear within boxes or, indeed, in any group; and they are only ever set globally to false when they are definitely true.

If anyone is unhappy with this argument then both flags should be treated as in \set@nobreak; otherwise this command will be redundant.

176 \def\@arrayparboxrestore{%
177 \let\if@nobreak\iffalse
178 \let\if@noskipsec\iffalse
179 \let\par\@@par
180 \let\-\@dischyph

Redefined accents to allow changes in font encoding

181 \let\'\@acci\let\`\@accii\let\=\@acciii
182 \parindent\z@ \parskip\z@skip
183 \everypar{}%
184 \linewidth\hsize
185 \@totalleftmargin\z@
186 \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
187 \parfillskip\@flushglue \lineskip\normallineskip
188 \baselineskip\normalbaselineskip
189 \sloppy}

\parboxrestore Restore various paragraph parameters, and also \\.

190 \def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}

\if@minipage Switch that is true at the start of a minipage.

191 \def\@minipagefalse{\global\let\if@minipage\iffalse}
192 \def\@minipagetrue {\global\let\if@minipage\iftrue}
193 \@minipagefalse

\minipage Essentially an environment form of \parbox.

194 \def\minipage{%
195 \@ifnextchar[%]
196  \@iminipage
197  {\@iiiminipage c\@empty[s]}}

\@iminipage Optional argument handling.

198 \def\@iminipage[#1]{%
199 \@ifnextchar[%]
200  {\@iiminipage{#1}}%
201  {\@iiiminipage{#1}\@empty[s]}}

\@iiminipage Optional argument handling.

202 \def\@iiminipage#1[#2]{%
203 \@ifnextchar[%]
204  {\@iiiminipage{#1}{#2}}%
205  {\@iiiminipage{#1}{#2}[#1]}}
\@iiiminipage Internal form of minipage.
206 \def\@iiiminipage#1#2[#3]#4{%
207 \leavevmode
208 \@pboxswfalse
209 \setlength\@tempdima{#4}%
210 \def\@mpargs{{#1}{#2}[#3]{#4}}%
211 \setbox\@tempboxa\vbox\bgroup
212  \color@begingroup
213  \hsize\@tempdima
214  \textwidth\hsize \columnwidth\hsize
215  \@parboxrestore
216  \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
217  \let\@footnotetext\@mpfootnotetext
218  \let\@listdepth\@mplistdepth \@mplistdepth\z@
219  \@minipagerestore
220  \@setminipage}

\@minipagerestore Hook so that other styles can reset other commands in a minipage.

221 \let\@minipagerestore=\relax
\endminipage
222 \def\endminipage{%
223  \par
224  \unskip
225  \ifvoid\@mpfootins\else
226  \vskip\skip\@mpfootins
227  \normalcolor
228  \footnoterule
229  \unvbox\@mpfootins
230  \fi
231  \@minipagefalse   %% added 24 May 89

232 \color@endgroup
233 \egroup
234 \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
\@mplistdepth \@mpfootins Versions of \@listdepth and \footins local to minipage.
235 \newcount\@mplistdepth
236 \newinsert\@mpfootins
\@mpfootnotetext Minipage version of \@footnotetext.

Final \strut added 27 Mar 89, on suggestion by Don Hosek

237 \long\def\@mpfootnotetext#1{%
238 \global\setbox\@mpfootins\vbox{%
239  \unvbox\@mpfootins
240  \reset@font\footnotesize
241  \hsize\columnwidth
242  \@parboxrestore
243  \protected@edef\@currentlabel
244  {\csname p@mpfootnote\endcsname\@thefnmark}%
245  \color@begingroup
246  \@makefntext{%
247  \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
248  \color@endgroup}}
249 \newif\if@pboxsw

\rule Draw a rule of the specified size.

250 \def\rule{\@ifnextchar[\@rule{\@rule[\z@]}}

\@rule internal form of \rule.

251 \def\@rule[#1]#2#3{%
252 \@tempdima#3\advance\@tempdima #1%
253 \leavevmode
254 \hbox{\vrule\@width#2\@height\@tempdima\@depth-#1}}
\@@underline Saved primitive \underline.
255 \let\@@underline\underline

\underline L^{A}TEX version works outside math.

256 \def\underline#1{%
257 \relax
258 \ifmmode\@@underline{#1}%
259 \else $\@@underline{\hbox{#1}}\m@th$\relax\fi}

\raisebox Raise a box, and change its vertical dimensions.

260 \def\raisebox#1{%
261 \leavevmode
262 \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}

\@rsbox Optional argument handling.

263 \def\@rsbox#1[#2]{%
264 \@ifnextchar[{\@iirsbox{#1}[#2]}{\@irsbox{#1}[#2]}}
\@argrsbox ...

\@irsbox Internal version of \raisebox (less than two optional args).

265 \long\def\@irsbox#1[#2]#3{%
266 \@begin@tempboxa\hbox{#3}%
267  \setlength\@tempdima{#1}%
268  \ifx\\#2\\\else\setlength\@tempdimb{#2}\fi
269  \setbox\@tempboxa\hbox{\raise\@tempdima\box\@tempboxa}%
270  \ifx\\#2\\\else\ht\@tempboxa\@tempdimb\fi
271  \box\@tempboxa
272 \@end@tempboxa}

\@iirsbox Internal version of \raisebox (two optional args).

273 \long\def\@iirsbox#1[#2][#3]#4{%
274 \@begin@tempboxa\hbox{#4}%
275  \setlength\@tempdima{#1}%
276  \setlength\@tempdimb{#2}%
277  \setlength\dimen@{#3}%
278  \setbox\@tempboxa\hbox{\raise\@tempdima\box\@tempboxa}%
279  \ht\@tempboxa\@tempdimb
280  \dp\@tempboxa\dimen@
281  \box\@tempboxa
282 \@end@tempboxa}

\@finalstrut This macro adds a special strut the depth of the box given as #1, and height and width 0pt. It is used for ensuring that the last line of a paragraph has the correct depth in ‘p’ columns of tables and in footnotes. In vertical mode nothing is done, as adding the strut (as done in 2.09) would start a new paragraph. It would be possible to inspect \prevdepth to check the depth of the just-completed paragraph, but we do not do that here. Actually we do even less now, skip the vmode test as it broke tabular ‘p’ columns. .

The \nobreak was added (1995/10/31) to allow hyphenation of the final word of the paragraph.

283 \def\@finalstrut#1{%
284 \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}

56.1 Some low-level constructs

The following commands are basically inherited from plain TEX.

\leftline \rightline \centerline \@@line These macros place text on a full line either centred or left or right adjusted.

285 \def\@@line{\hb@xt@\hsize}
286 \def\leftline#1{\@@line{#1\hss}}
287 \def\rightline#1{\@@line{\hss#1}}
288 \def\centerline#1{\@@line{\hss#1\hss}}

\rlap \llap These macros place text to the left or right of the current reference point without taking up space.

289 \def\rlap#1{\hb@xt@\z@{#1\hss}}
290 \def\llap#1{\hb@xt@\z@{\hss#1}}

291 ⟨/2ekernel⟩

File C

lttab.dtx

57 Tabbing, Tabular and Array Environments

This section deals with ‘Lining It Up in Columns’. First the tabbing environment is defined, and then in second part, tabular together with its variants, tabular*

and array.

Note that the tabular defined here is essentially the original L^{A}TEX 2.09 version, not the extended version described in The L^{A}TEX Companion. Use the array package to obtain the extended version.

57.1 tabbing

\dimen(\@firsttab + i) = distance of tab stop i from left margin 0 <= i <= 15 (?).

\dimen\@firsttab is initialized to \@totalleftmargin, so it starts

at the prevailing left margin.

\@maxtab = number of highest defined tab register

probably = \@firsttab + 12

\@nxttabmar = tab stop number of next line’s left margin \@curtabmar = tab stop number of current line’s left margin \@curtab = number of the current tab. At start of line,

                    it equals \@curtabmar

\@hightab = largest tab number currently defined.

\@tabpush = depth of \pushtab's

\box\@curline = contents of current line, excluding left margin

skip, and excluding contents of current field

\box\@curfield = contents of current field

@rjfield = switch: T iff the last field of the line should be right-justified at the right margin.

\tabbingsep = distance left by the \' command between the current position and the field that is “left-shifted”.

UTILITY MACROS \@stopfield : closes the current field \@addfield : adds the current field to the current line. \@contfield : continues the current field \@startfield : begins the next field \@stopline : closes the current line and outputs it \@startline : starts the next line \@ifatmargin : an \if that is true iff the current line.

has width zero

\@startline ==

BEGIN

\@curtabmar :=G \@nxttabmar
\@curtab :=G \@curtabmar
\box\@curline :=G null
\@startfield
\strut

END

\@stopline ==

BEGIN

\unskip
\@stopfield

if @rjfield = T

then @rjfield :=G F

        \@tempdima := \@totalleftmargin + \linewidth
        \hb@xt@ \@tempdima{\@itemfudge
                            \hskip \dimen\@curtabmar
                            \box\@curline
                            \hfil
                            \box\@curfield}
  else \@addfield
       \hbox {\@itemfudge
              \hskip \dimen\@curtabmar
              \box\@curline}

fi END

\@startfield ==

BEGIN

 \box\@curfield :=G \hbox {

END

\@stopfield ==

BEGIN

  }

END

\@contfield ==

BEGIN

\box\@curfield :=G \hbox { \unhbox\@currfield  %%} brace

matching END

\@addfield ==

BEGIN

\box\@curline :=G \unbox\@curline * \unbox\@curfield

END

\@ifatmargin ==

BEGIN if dim of box\@curline = 0pt then END

\tabbing ==

BEGIN

\lineskip :=L 0pt
\> == \@rtab
\< == \@ltab
\= == \@settab
\+ == \@tabplus
\- == \@tabminus
\` == \@tabrj
\' == \@tablab
\\ == BEGIN \@stopline \@startline END

\\[DIST] == BEGIN

             \@stopline \vskip DIST \@startline\ignorespaces

END

\\* == BEGIN \@stopline \penalty 10000 \@startline END
\\*[DIST] == BEGIN \@stopline \penalty 10000 \vskip DIST
                   \@startline\ignorespaces  END
\@hightab := \@nxttabmar :=G \@firsttab
\@tabpush :=G 0
\dimen\@firsttab := \@totalleftmargin

@rjfield :=G F

\trivlist  \item\relax

if @minipage = F then \vskip \parskip fi

\box\@tabfbox = \rlap{\indent\the\everypar}

% note: \the\everypar sets @inlabel :=G F

\@itemfudge == BEGIN \box\@tabfbox END
\@startline
\ignorespaces

END

\@endtabbing ==

BEGIN

\@stopline

if \@tabpush > 0 then error message: ”unmatched \poptabs'’ fi

\endtrivlist

END

\@rtab ==

BEGIN

\@stopfield
\@addfield
if \@curtab < \@hightab
  then \@curtab :=G \@curtab + 1

else error message “Undefined Tab” fi

\@tempdima := \dimen\@curtab - \dimen\@curtabmar

- width of box \@curline

\box\@curline :=G \hbox{\unhbox\@curline + \hskip\@tempdima}
\@startfield

END

\@settab ==

BEGIN

\@stopfield
\@addfield
if \@curtab < \@maxtab
  then \@curtab :=G \@curtab+1

else error message: “Too many tabs” fi

if \@curtab > \@hightab
  then \@hightab :=L \@curtab  fi
\dimen\@curtab :=L \dimen\@curtabmar + width of \box\@curline
\@startfield

END

\@ltab ==

BEGIN

\@ifatmargin
  then if \@curtabmar > \@firsttab
         then \@curtab :=G \@curtab - 1
              \@curtabmar :=G \@curtabmar - 1

else error message “Too many untabs” fi else error message “Left tab in middle of line”

fi END

\@tabplus ==

BEGIN

     if \@nxttabmar < \@hightab
        then \@nxttabmar :=G \@nxttabmar+1

else error message “Undefined tab” fi

END

\@tabminus ==

BEGIN

      if \@nxttabmar > \@firsttab
         then \@nxttabmar :=G \@nxttabmar-1

else error message “Too many untabs” fi

END

\@tabrj ==
BEGIN \@stopfield
      \@addfield

@rjfield :=G T

      \@startfield

END

\@tablab ==
BEGIN \@stopfield
    \box\@curline G:= \hbox{\box\@curline %% ‘G’ added 17 Jun 86
                            \hskip - width of \box\@curfield
                            \hskip -\tabbingsep
                            \box\@curfield
                            \hskip \tabbingsep }
      \@startfield

END

\pushtabs ==

BEGIN

   \@stopfield
   \@tabpush :=G \@tabpush + 1
   \begingroup
   \@contfield

END

\poptabs ==

BEGIN

  \@stopfield
  if \@tabpush > 0
    then \endgroup
         \@tabpush :=G \@tabpush - 1

else error message: “Too many \poptabs'’ fi

  \@contfield

END

\a The accents \` , \' , and \= that have been redefined inside a tabbing environment can be called by typing \a` , \a' , and \a=. The macro \a is defined in

ltoutenc.dtx.

The ‘2ekernel’ code ensures that a \usepackage{autotabg} is essentially ignored if a ‘full’ format is being used that has picture mode already in the format.

 1 ⟨2ekernel⟩\expandafter\let\csname ver@autotabg.sty\endcsname\fmtversion
\@firsttab \@maxtab

2 ⟨∗2ekernel | autoload⟩

 3 \newdimen\@gtempa
 4 \chardef\@firsttab=\the\allocationnumber
 5 \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
 6 \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
 7 \newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
 8 \newdimen\@gtempa
 9 \chardef\@maxtab=\the\allocationnumber
10 \dimen\@firsttab=0pt
\@nxttabmar \@curtabmar \@curtab \@hightab \@tabpush
11 \newcount\@nxttabmar
12 \newcount\@curtabmar
13 \newcount\@curtab
14 \newcount\@hightab
15 \newcount\@tabpush
\@curline \@curfield \@tabfbox
16 \newbox\@curline
17 \newbox\@curfield
18 \newbox\@tabfbox

19 ⟨/2ekernel | autoload⟩ 20 ⟨∗2ekernel | def⟩

\if@rjfield
21 \newif\if@rjfield

\@startline It is, in some sense, an error if the current margin tab setting is higher than the value of \@hightab (which is a local variable). That this is allowed is a fundamental design flaw which is not going to be corrected now.

22 \gdef\@startline{%
23  \ifnum \@nxttabmar >\@hightab
24  \@badtab
25  \global\@nxttabmar \@hightab
26  \fi
27  \global\@curtabmar \@nxttabmar

28  \global\@curtab \@curtabmar
29  \global\setbox\@curline \hbox {}%
30  \@startfield
31  \strut}
\@stopline
32 \gdef\@stopline{%
33 \unskip
34 \@stopfield
35 \if@rjfield
36  \global\@rjfieldfalse
37  \@tempdima\@totalleftmargin
38  \advance\@tempdima\linewidth
39  \hb@xt@\@tempdima{%
40  \@itemfudge\hskip\dimen\@curtabmar
41  \box\@curline
42  \hfil
43  \box\@curfield}%
44 \else
45  \@addfield
46  \hbox{\@itemfudge\hskip\dimen\@curtabmar\box\@curline}%
47 \fi}
\@startfield
48 \gdef\@startfield{%
49 \global\setbox\@curfield\hbox\bgroup\color@begingroup}
\@stopfield
50 \gdef\@stopfield{%
51 \color@endgroup\egroup}
\@contfield
52 \gdef\@contfield{%
53 \global\setbox\@curfield\hbox\bgroup\color@begingroup
54 \unhbox\@curfield}
\@addfield
55 \gdef\@addfield{\global\setbox\@curline\hbox{\unhbox
56  \@curline\unhbox\@curfield}}
\@ifatmargin
57 \gdef\@ifatmargin{\ifdim \wd\@curline =\z@}
\@tabcr
58 \gdef\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}\@xtabcr}
\@xtabcr
59 \gdef\@xtabcr{\@ifnextchar[\@itabcr{\@startline\ignorespaces}}

\@itabcr
60 \gdef\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
61 \gdef\kill{\@stopfield\@startline\ignorespaces}

\tabbing We use \relax to prevent \item from scanning too far.

62 \gdef\tabbing{\lineskip \z@skip\let\>\@rtab\let\<\@ltab\let\=\@settab
63  \let\+\@tabplus\let\-\@tabminus\let\`\@tabrj\let\'\@tablab
64  \let\\=\@tabcr
65  \@hightab\@firsttab
66  \global\@nxttabmar\@firsttab
67  \dimen\@firsttab\@totalleftmargin
68  \global\@tabpush\z@ \global\@rjfieldfalse
69  \trivlist \item\relax
70  \if@minipage\else\vskip\parskip\fi
71  \setbox\@tabfbox\hbox{%
72  \rlap{\hskip\@totalleftmargin\indent\the\everypar}}%
73  \def\@itemfudge{\box\@tabfbox}%
74  \@startline\ignorespaces}
\endtabbing
75 \gdef\endtabbing{%
76 \@stopline\ifnum\@tabpush >\z@ \@badpoptabs \fi\endtrivlist}

\@rtab Omitted \global added to \@rtab 17 Jun 86

77 \gdef\@rtab{\@stopfield\@addfield\ifnum \@curtab<\@hightab
78  \global\advance\@curtab \@ne \else\@badtab\fi
79  \@tempdima\dimen\@curtab
80  \advance\@tempdima -\dimen\@curtabmar
81  \advance\@tempdima -\wd\@curline
82  \global\setbox\@curline\hbox{\unhbox\@curline\hskip\@tempdima}%
83  \@startfield\ignorespaces}
\@settab
84 \gdef\@settab{\@stopfield\@addfield
85 \ifnum \@curtab <\@maxtab
86  \ifnum\@curtab =\@hightab
87  \advance\@hightab \@ne
88  \fi
89  \global\advance\@curtab \@ne
90 \else
91  \@latex@error{Tab overflow}\@ehd
92 \fi
93 \dimen\@curtab \dimen\@curtabmar
94 \advance\dimen\@curtab \wd\@curline
95 \@startfield
96 \ignorespaces}

\@ltab
 97 \gdef\@ltab{\@ifatmargin\ifnum\@curtabmar >\@firsttab
 98  \global\advance\@curtab \m@ne \global\advance\@curtabmar\m@ne\else
 99  \@badtab\fi\else
100  \@latex@error{\string\<\space in mid line}\@ehd\fi\ignorespaces}
\@tabplus
101 \gdef\@tabplus{%
102 \ifnum\@nxttabmar<\@hightab
103  \global\advance\@nxttabmar\@ne
104 \else
105  \@badtab
106 \fi
107 \ignorespaces}
\@tabminus
108 \gdef\@tabminus{%
109 \ifnum\@nxttabmar>\@firsttab
110  \global\advance\@nxttabmar\m@ne
111 \else
112  \@badtab
113 \fi
114 \ignorespaces}
\@tabrj
115 \gdef\@tabrj{%
116 \@stopfield\@addfield\global\@rjfieldtrue\@startfield\ignorespaces}
\@tablab  \setbox\@curline made \global in \@tablab. 17 Jun 86
117 \gdef\@tablab{%
118 \@stopfield
119 \global\setbox\@curline\hbox{%
120  \box\@curline
121  \hskip-\wd\@curfield \hskip-\tabbingsep
122  \box\@curfield
123  \hskip\tabbingsep}%
124 \@startfield
125 \ignorespaces}
\pushtabs
126 \gdef\pushtabs{%
127 \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup
128  \@contfield}

\poptabs It is, in some sense, an error if, after the endgroup, the current tab setting is higher than the new value of \@hightab (which is a local variable). That this is allowed is a fundamental design flaw which is not going to be corrected now.

129 \gdef\poptabs{\@stopfield\@addfield

130 \ifnum \@tabpush >\z@
131  \endgroup
132  \global\advance\@tabpush \m@ne
133  \ifnum \@curtab >\@hightab
134  \global \@curtab \@hightab
135  \@badtab
136  \fi
137 \else
138  \@badpoptabs
139 \fi
140 \@contfield}

141 ⟨/2ekernel | def⟩

\tabbingsep

142 ⟨∗2ekernel | autoload⟩

143 \newdimen\tabbingsep

144 ⟨/2ekernel | autoload⟩

\tabbing

145 ⟨∗autoload⟩

146 \def\tabbing{\@autoload{tabg}\tabbing}

147 ⟨/autoload⟩

57.2 array and tabular environments

ARRAY PARMETERS:

\arraycolsep

: half the width separating columns in an array environment

\tabcolsep

: half the width separating columns in a tabular environment

\arrayrulewidth

: width of rules

\doublerulesep

: space between adjacent rules in array or tabular

\arraystretch

: line spacing in array and tabular environments is done by placing a strut in every row of height and depth \arraystretch times the height and depth of the strut produced by an ordinary \strut commmand.

PREAMBLE: The PREAMBLE argument of an array or tabular environment can contain the following:

l,r,c : indicate where entry is to be placed.

| : for vertical rule

@{EXP} : inserts the text EXP in every column.

            \arraycolsep or \tabcolsep spacing is suppressed.

*{N}{PRE} : equivalent to writing N copies of PRE in the preamble.

PRE may contain *{N’}{EXP’} expressions.

p{LEN} : makes entry in parbox of width LEN.

SPECIAL ARRAY COMMANDS: \multicolumn{N}{FORMAT}{ITEM} : replaces the next N column items by ITEM, formatted according to FORMAT. FORMAT should contain at most one l,r or c. If it contains none, then ITEM is ignored.

\vline : draws a vertical line the height of the current row. May

appear in an array element entry.

\hline : draws a horizontal line between rows. Must appear either before the first entry (to appear above the first row) or right after a \\ command. If followed by another \hline,

         then adds a \vskip of \doublerulesep.

\cline[i-j] : draws horizontal lines between rows covering columns i through j, inclusive. Multiple commands may follow one another to provide lines covering several disjoint columns

\extracolsep{WIDTH} : for use inside an @ in the preamble. Causes a WIDTH space to be added between columns for the rest of the columns. This is in addition to the ordinary intercolumn space.

\array ==

BEGIN

  \@acol  == \@arrayacol
  \@classz == \@arrayclassz
  \@classiv == \@arrayclassiv
  \\  == \@arraycr
  \@halignto == NULL
  \@tabarray

END

\endarray{NAME} == BEGIN \crcr }} END
\tabular ==

BEGIN

  \@halignto == NULL
  \@tabular

END

\tabular*{WIDTH} ==

BEGIN

\@halignto == to WIDTH
\@tabular

END

\@tabular ==

BEGIN

\leavevmode
\hbox { $
   \@acol  == \@tabacol
   \@classz == \@tabclassz
   \@classiv == \@tabclassiv
   \\  == \@tabularcr
   \@tabarray

END

\endtabular == BEGIN \crcr}} $} END
\@tabarray == if next char = [ then \@array else \@array[c] fi

\@array[POS]{PREAMBLE} ==

BEGIN

define \@arstrutbox to make \@arstrut produce strut of height and depth \arraystretch times the height and depth of a normal strut.

\@mkpream{PREAMBLE}
\@preamble == \halign \@halignto {\tabskip=0pt\@arstrut
                        eval{\@preamble}\tabskip = 0pt\cr %%}
\@startpbox == \@@startpbox
\@endpbox == \@@endpbox

if POS = t then \vtop

else if POS = b then \vbox

                           else \vcenter

fi fi

{

\par ==L {} % changed 92/09/18

\@sharp  == #
\protect  == \relax
\lineskip  :=L 0pt
\baselineskip :=L 0pt
\@preamble

END

\@arraycr ==

BEGIN $ %% Prevents extra space at end of row’s last entry. if next char = [

       then \@argarraycr

else $ \cr %% Needed to balance $ END

   \@argarraycr[LENGTH] ==

BEGIN $ %% Needed to balance $ of \@arraycr if LENGTH > 0

        then \@tempdima := depth of \@arstrutbox + LENGTH

\vrule height 0pt width 0pt depth \@tempdima

              \cr
        else \cr \noalign{\vskip LENGTH}

END

   \@tabularcr and \@argtabularcr same as \@arraycr and
 \@argarraycr

except without the extra $’s.

148 ⟨∗2ekernel | autoload⟩

\extracolsep
149 \def\extracolsep#1{\tabskip #1\relax}
\array
150 \def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
151 \let\@classiv\@arrayclassiv
152 \let\\\@arraycr\let\@halignto\@empty\@tabarray}
\endarray
\endtabular
\endtabular*

153 \def\endarray{\crcr\egroup\egroup}
154 \def\endtabular{\crcr\egroup\egroup $\egroup}
155 \expandafter \let \csname endtabular*\endcsname = \endtabular
\tabular
156 \def\tabular{\let\@halignto\@empty\@tabular}
\tabular* RmS 93/08/05: Replaced \expandafter\def by \@namedef.
157 \@namedef{tabular*}#1{\def\@halignto{to#1}\@tabular}
\@tabular
158 \def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
159 \let\@classz\@tabclassz
160 \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}

\@tabarray RmS 91/11/04 added \m@th.

161 \def\@tabarray{\m@th\@ifnextchar[\@array{\@array[c]}}

RmS 1993/11/03 changed \halign to \ialign and removed superfluous \tabskip assignment

\array
162 \def\@array[#1]#2{%
163 \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
164 \bgroup

This next bit of code sets up the strut and then builds the halign and its preamble according to the specification in the second argument.

This code has been moved inside the box. A side effect of this has been to expose what was a buglet in the previous version: since the \@arstrut below is expanded and contains an \ifmmode then it could produce an unnecessary extra box in every row, thus wasting ‘lots of’ main memory.

165 \setbox\@arstrutbox\hbox{%
166  \vrule \@height\arraystretch\ht\strutbox
167  \@depth\arraystretch \dp\strutbox
168  \@width\z@}%
169 \@mkpream{#2}%
170 \edef\@preamble{%
171  \ialign \noexpand\@halignto
172  \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%

That is the end of setting up the preamble; now we reset things before executing the halign built-up in \@preamble. The restorations could be done by introducing an extra group, thus saving tokens.

173 \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
174 \let\tabularnewline\\%
175  \let\par\@empty
176  \let\@sharp##%
177  \set@typeset@protect
178  \lineskip\z@skip\baselineskip\z@skip
179  \@preamble}

\@arraycr Array version of \\.

180 \def\@arraycr{%
181 ${\ifnum0=`}\fi\@ifstar\@xarraycr\@xarraycr}
\@arraycr
182 \def\@xarraycr{\@ifnextchar[\@argarraycr{\ifnum0=`{\fi}${}\cr}}
\@argarraycr
183 \def\@argarraycr[#1]{%
184 \ifnum0=`{\fi}${}\ifdim #1>\z@ \@xargarraycr{#1}\else
185 \@yargarraycr{#1}\fi}
\tabularnewline Tabular version of \\.
186 \let\tabularnewline\relax

\@tabularcr
187 \def\@tabularcr{%
188 {\ifnum0=`}\fi\@ifstar\@xtabularcr\@xtabularcr}
\@xtabularcr
189 \def\@xtabularcr{\@ifnextchar[\@argtabularcr{\ifnum0=`{\fi}\cr}}
\@argtabularcr
190 \def\@argtabularcr[#1]{%
191 \ifnum0=`{\fi}%
192  \ifdim #1>\z@
193  \unskip\@xargarraycr{#1}%
194  \else
195  \@yargarraycr{#1}%
196  \fi}
\@xargarraycr
197 \def\@xargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox
198 \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr}
\@yargarraycr
199 \def\@yargarraycr#1{\cr\noalign{\vskip #1}}
\multicolumn   \multicolumn{NUMBER}{FORMAT}{ITEM} ==

BEGIN

\multispan{NUMBER}
\begingroup
\@addamp == null
\@mkpream{FORMAT}
\@sharp == ITEM
\protect == \relax
\@startpbox == \@@startpbox
\@endpbox == \@@endpbox
\@arstrut
\@preamble
\endgroup

END The command \def\@addamp{} was removed from \multicolumn on 6 Dec

86 because it caused embedded array environments not to work. I think that it was included originally to prevent an error message if the 2nd argument to the \multicolumn command had two column specifiers.

8 Feb 89 — \hbox{} added after \@preamble to correct bug that occurred if \multicolumn preceded \\[D] with D > 0, caused by \\[] command doing an

\unskip, which removed \tabcolsep glue inserted by \multicolumn.

This has been made long so that, for example, a p-column can contain multiple paragraphs; maybe the arguments of @-expressions should also be able to contain multiple paragraphs.

200 \long\def\multicolumn#1#2#3{\multispan{#1}\begingroup
201 \@mkpream{#2}%
202 \def\@sharp{#3}\set@typeset@protect
203 \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
204 \@arstrut \@preamble\hbox{}\endgroup\ignorespaces}

Codes for classes and character numbers of array, tabular and multicolumn arguments.

Character  Class  Number
———  —–  ——
c  0  0
l  0  1
r  0  2
|  1  -
@  2  -
p  3  -
{@-exp}  4  -
{p-arg}  5  -

\@testpach \foo : expands \foo, which should be an array parameter token, and sets \@chclass and \@chnum to its class and number. Uses \@lastchclass to distinguish 4 and 5

Preamble error codes 0: ’illegal character’ 1: ’Missing @-exp’ 2: ’Missing p-arg’

\@addamp ==

BEGIN if @firstamp = true then @firstamp := false

else & fi

END

\@mkpream TOKENLIST == BEGIN @firstamp := T

\@lastchclass := 6
\@preamble  == null
\@sharp  == \relax
\protect  == BEGIN \noexpand\protect\noexpand END
\@startpbox == \relax
\@endpbox  == \relax
\@expast{TOKENLIST}
for \@nextchar := expand(\reserved@a)

do \@testpach{\@nextchar}
case of \@chclass
0 -> \@classz
1 -> \@classi

...

5 -> \@classv

end case

\@lastchclass := \@chclass

od

case of \@lastchclass
0 -> \hskip \arraycolsep             % lrc
1 ->                                  % |

2 -> \@preamerr1 % ’Missing @-exp’ % @ 3 -> \@preamerr2 % ’Missing p-arg’ % p 4 -> % @-exp

5 -> \hskip \arraycolsep             % p-exp

end case END

\@arrayclassz ==

BEGIN

\@preamble := \@preamble *
case of \@lastchclass
0 -> \hskip \arraycolsep \@addamp \hskip
\arraycolsep
1 -> \@addamp \hskip \arraycolsep

2 -> % impossible 3 -> % impossible

4 -> \@addamp
5 -> \hskip \arraycolsep \@addamp \hskip
\arraycolsep
6 -> \@addamp \hskip \arraycolsep

end case

* case of \@chnum
 0 -> \hfil$\relax\@sharp$\hfil
 1 -> $\relax\@sharp$\hfil
 2 -> \hfil$\relax\@sharp$

end case

END

\@tabclassz == similar to \@arrayclassz
\@classi ==

BEGIN

\@preamble := \@preamble *
case of \@lastchclass

0 -> \hskip \arraycolsep \@arrayrule
1 -> \hskip \doublerulesep \@arrayrule

2 -> % impossible 3 -> % impossible

4 -> \@arrayrule
5 -> \hskip \arraycolsep \@arrayrule
6 -> \@arrayrule

end case

END

\@classii ==

BEGIN

\@preamble := \@preamble *
case of \@lastchclass

0 ->

1  -> \hskip .5\arrayrulewidth

2 -> % impossible else ->

end case

END

\@classiii ==

BEGIN

\@preamble := \@preamble *
case of \@lastchclass
0 -> \hskip \arraycolsep \@addamp \hskip
\arraycolsep
1 -> \@addamp \hskip \arraycolsep

2 -> % impossible 3 -> % impossible

4 -> \@addamp
5 -> \hskip \arraycolsep \@addamp \hskip
\arraycolsep
6 -> \@addamp \hskip \arraycolsep

end case

END

\@arrayclassiv ==
BEGIN \@preamble := \@preamble * $ \@nextchar$ END
\@tabclassiv == same as \@arrayclassv except without the $ ... $
\@classv ==

BEGIN

\@preamble :=
\@preamble * \@startpbox{\@nextchar}\ignorespaces\@sharp

                             \@endpbox

END

\@expast{S}:

Sets \reserved@a := S with all instances of *{N}{STRING} replaced by N copies of STRING, where N > 0. An * appearing inside braces is ignored, but *-expressions inside STRING are expanded, so nested *-expressions are handled properly.

\@expast{S} == BEGIN \@xexpast S *0x\@@ END
\@xexpast S1 *{N}{S2} S3 \@@ ==

BEGIN

  \reserved@a := S1
  \@tempcnta := N
  if \@tempcnta > 0
    then while \@tempcnta > 0 do \reserved@a := \reserved@a S2
                                 \@tempcnta := \@tempcnta - 1 od
          \reserved@b == \@xexpast
    else \reserved@b == \@xexnoop

fi

  \expandafter \reserved@b \reserved@a S3 \@@

END

\@xexnoop
205 \def\@xexnoop #1\@@{}
\@expast
206 \def\@expast#1{\@xexpast #1*0x\@@}
\@xexpast
207 \def\@xexpast#1*#2#3#4\@@{%
208 \edef\reserved@a{#1}%
209 \@tempcnta#2\relax
210 \ifnum\@tempcnta>\z@
211  \@whilenum\@tempcnta>\z@\do
212  {\edef\reserved@a{\reserved@a#3}\advance\@tempcnta \m@ne}%
213  \let\reserved@b\@xexpast
214 \else
215  \let\reserved@b\@xexnoop
216 \fi
217 \expandafter\reserved@b\reserved@a #4\@@}
\if@firstamp
\@addamp
218 \newif\if@firstamp

219 \def\@addamp{%
220 \if@firstamp
221  \@firstampfalse
222 \else
223  \edef\@preamble{\@preamble &}%
224 \fi}
\@arrayacol
\@tabacol
\@ampacol
\@acolampacol

225 \def\@arrayacol{\edef\@preamble{\@preamble \hskip \arraycolsep}}
226 \def\@tabacol{\edef\@preamble{\@preamble \hskip \tabcolsep}}
227 \def\@ampacol{\@addamp \@acol}
228 \def\@acolampacol{\@acol\@addamp\@acol}
\@mkpream
229 \def\@mkpream#1{\@firstamptrue\@lastchclass6
230 \let\@preamble\@empty
231 \let\protect\@unexpandable@protect
232 \let\@sharp\relax
233 \let\@startpbox\relax\let\@endpbox\relax
234 \@expast{#1}%
235 \expandafter\@tfor \expandafter
236  \@nextchar \expandafter:\expandafter=\reserved@a\do
237  {\@testpach\@nextchar
238  \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
239  \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
240 \ifcase \@lastchclass \@acol
241  \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi}
\@arrayclassz
242 \def\@arrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
243 \or \or \@addamp \or
244 \@acolampacol \or \@firstampfalse \@acol \fi
245 \edef\@preamble{\@preamble
246 \ifcase \@chnum
247  \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
248  \or \hfil$\relax\@sharp$\fi}}

\@tabclassz RmS 91/08/14 inserted extra braces around entry for NFSS

249 \def\@tabclassz{%
250 \ifcase\@lastchclass
251  \@acolampacol
252 \or
253  \@ampacol
254 \or
255 \or
256 \or
257  \@addamp
258 \or
259  \@acolampacol

260 \or
261  \@firstampfalse\@acol
262 \fi
263 \edef\@preamble{%
264  \@preamble{%
265  \ifcase\@chnum
266  \hfil\ignorespaces\@sharp\unskip\hfil
267  \or
268  \hskip1sp\ignorespaces\@sharp\unskip\hfil
269  \or
270  \hfil\hskip1sp\ignorespaces\@sharp\unskip
271  \fi}}}
\@classi
272 \def\@classi{%
273 \ifcase\@lastchclass
274  \@acol\@arrayrule
275 \or
276  \@addtopreamble{\hskip \doublerulesep}\@arrayrule
277 \or
278 \or
279 \or
280  \@arrayrule
281 \or
282  \@acol\@arrayrule
283 \or
284  \@arrayrule
285 \fi}
\@classii
286 \def\@classii{%
287 \ifcase\@lastchclass
288 \or
289  \@addtopreamble{\hskip .5\arrayrulewidth}%
290 \fi}
\@classiii
291 \def\@classiii{\ifcase \@lastchclass \@acolampacol \or
292 \@addamp\@acol \or
293 \or \or \@addamp \or
294 \@acolampacol \or \@ampacol \fi}
\@tabclassiv
295 \def\@tabclassiv{\@addtopreamble\@nextchar}
\@arrayclassiv
296 \def\@arrayclassiv{\@addtopreamble{$\@nextchar$}}

\@classv
297 \def\@classv{\@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
298 \@sharp\@endpbox}}
\@addtopreamble
299 \def\@addtopreamble#1{\edef\@preamble{\@preamble #1}}
\@chclass
\@lastchclass
\@chnum

300 \newcount\@chclass
301 \newcount\@lastchclass
302 \newcount\@chnum
\arraycolsep
\tabcolsep
\arrayrulewidth
\doublerulesep

303 \newdimen\arraycolsep
304 \newdimen\tabcolsep
305 \newdimen\arrayrulewidth
306 \newdimen\doublerulesep
\arraystretch
307 \def\arraystretch{1}    % Default value.
\@arstrutbox
\@arstrut
308 \newbox\@arstrutbox
309 \def\@arstrut{%
310 \relax\ifmmode\copy\@arstrutbox\else\unhcopy\@arstrutbox\fi}
\@arrayrule
311 \def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
312 \vrule \@width \arrayrulewidth\hskip -.5\arrayrulewidth}}
\@testpatch
313 \def\@testpach#1{\@chclass \ifnum \@lastchclass=\tw@ 4 \else
314  \ifnum \@lastchclass=3 5 \else
315  \z@ \if #1c\@chnum \z@ \else
316  \if #1l\@chnum \@ne \else
317  \if #1r\@chnum \tw@ \else
318  \@chclass \if #1|\@ne \else
319  \if #1@\tw@ \else
320  \if #1p3 \else \z@ \@preamerr 0\fi
321 \fi  \fi  \fi  \fi  \fi  \fi
322 \fi}
\hline
323 \def\hline{%
324 \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
325 \reserved@a\@xhline}

\@xhline
326 \def\@xhline{\ifx\reserved@a\hline
327  \vskip\doublerulesep

Measure from the middle of the rules.

328  \vskip-\arrayrulewidth
329  \fi
330  \ifnum0=`{\fi}}
\vline
331 \def\vline{\vrule \@width \arrayrulewidth}

\cline \@cline The old L^{A}TEX2.09 implementation of \cline used up quite a lot of memory and two precious count registers. This new (1995/09/14) implementation does not use any count registers. It is coded in a way that depends heavily on the definition of \multispan so that command has been moved here from the file ltplain.dtx.

These counters are no longer declared.

 \newcount\@cla
 \newcount\@clb
332 \def\cline#1{\@cline#1\@nil}
333 \def\@cline#1-#2\@nil{%
334 \omit

Use the counter from \multispan.

335 \@multicnt#1%
336 \advance\@multispan\m@ne
337 \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
338 \@multicnt#2%
339 \advance\@multicnt-#1%
340 \advance\@multispan\@ne

The original had \unskip at this point, but how could a skip get here ???

341 \leaders\hrule\@height\arrayrulewidth\hfill
342 \cr

This is back spacing is fairly horrible, but it is what happened in the old version… An alternative would be to make \cline look ahead for a following \cline as does \hline. This would alter the spacing in existing documents so keep the old version in the kernel. Perhaps a package should do this differently.

343 \noalign{\vskip-\arrayrulewidth}}

\mscount The \mscount counter is no longer declared, saving a csname and a register. It is declared in compatibility mode.

\multispan \@multispan \sp@n Modify \multispan slightly from its plain TEX definition to allow more efficient code sharing with \multicolumn. Also share a count register with \multiput.

344 \def\multispan{\omit\@multispan}

345 \def\@multispan#1{%
346 \@multicnt#1\relax
347 \loop\ifnum\@multicnt>\@ne \sp@n\repeat}
348 \def\sp@n{\span\omit\advance\@multicnt\m@ne}

\@startpbox \@endpbox Helper macros for ‘p’ columns. \@startpbox{⟨width⟩} text \egroup is essentially \parbox{⟨width⟩}{⟨text⟩}

   \@endpbox is essentially \unskip \strut \par \egroup\hfil (Changed 14

Jan 89) (changed again 1994/05/13)

349 \def\@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore}
350 \def\@endpbox{\@finalstrut\@arstrutbox\par\egroup\hfil}

14 Jan 89: Def of \@endpbox changed from

\def\@endpbox{\par\vskip\dp\@arstrutbox\egroup\hfil}

so vertical spacing works out right if the last line of a ‘p’ entry has a descender.

\@@startpbox
\@@endpbox
351 \let\@@startpbox=\@startpbox
352 \let\@@endpbox=\@endpbox

353 ⟨/2ekernel | autoload⟩

File D

ltpictur.dtx

58 Picture Mode

Picture mode commands. In addition to the commands available in L^{A}TEX2.09, This section adds the new \qbezier command for drawing curves.

\qbezier \qbezier[⟨N ⟩](⟨AX,AY ⟩)(⟨BX,BY ⟩)(⟨CX,CY ⟩) plots a quadratic Bezier curve from (⟨AX,AY ⟩) to (⟨CX,CY ⟩), with (⟨BX,BY ⟩) as the third Bezier point, using N + 1 points equally spaced parametrically. If N = 0 (the default value), then a sufficient number of points are used to draw a connected curve–except that at most \qbeziermax + 1 points are drawn. A “point” is a square of side

\@wholewidth.

\bezier In addition, to be compatible with the old bezier package, a variant of this command, \bezier, is defined, in which the first argument is not optional.

\unitlength = value of dimension argument \@wholewidth = current line width \@halfwidth = half of current line width \@linefnt = font for drawing lines \@circlefnt = font for drawing circles

\linethickness{DIM} : Sets the width of horizontal and vertical lines in a picture to DIM. Does not change width of slanted lines or circles. Width of all lines reset by \thinlines and

     \thicklines

\picture(XSIZE,YSIZE)(XORG,YORG)

BEGIN

     \@picht :=L YSIZE * \unitlength
     box \@picbox :=
          \hb@xt@ XSIZE * \unitlength
            {\hskip -XORG * \unitlength
             \lower YORG * \unitlength
             \hbox{
             \ignorespaces    %% added 13 June 89

END

 \endpicture ==

BEGIN

                   } \hss }
                   heigth of \@picbox := \@picht

depth of \@picbox := 0

                   \mbox{\box\@picbox}   %% change 26 Aug 91

END

\put(X, Y){OBJ} ==

BEGIN

 \@killglue
 \raise Y * \unitlength  \hb@xt@ 0pt { \hskip X * \unitlength
                                          OBJ \hss
}
 \ignorespaces

END

\multiput(X,Y)(DELX,DELY){N}{OBJ} == BEGIN

\@killglue
\@multicnt := N
\@xdim := X * \unitlength
\@ydim := Y * \unitlength
while \@multicnt > 0
  do \raise \@ydim \hb@xt@ 0pt { \hskip \@xdim
                                         OBJ \hss   }
     \@multicnt := \@multicnt - 1
     \@xdim  := \@xdim + DELX * \unitlength
     \@ydim  := \@ydim + DELY * \unitlength

od

\ignorespaces

END

\shortstack[POS]{TEXT} : Makes a \vbox containing TEXT stacked as a one-column array, positioned l, r or c as indicated by POS.

The ‘2ekernel’ code ensures that a \usepackage{autopict} is essentially ignored if a ‘full’ format is being used that has picture mode already in the format.

1 ⟨2ekernel⟩\expandafter\let\csname ver@autopict.sty\endcsname\fmtversion
\@wholewidth
\@halfwidth

2 ⟨∗2ekernel | autoload⟩

3 \newdimen\@wholewidth
4 \newdimen\@halfwidth
\unitlength
5 \newdimen\unitlength \unitlength =1pt
\@picbox \@picht
6 \newbox\@picbox
7 \newdimen\@picht

8 ⟨/2ekernel | autoload⟩

\picture #1 should be white space.

\pictur@ #1 should be a ( (eating any white space before the bracket),

9 ⟨∗2ekernel | def⟩

10 \long\gdef\picture#1{\pictur@#1}
11 \gdef\pictur@(#1){%
12 \@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}}

13 ⟨/2ekernel | def⟩ 14 ⟨∗autoload⟩

15 \def\pictur@{\@autoload{pict}}
16 \def\picture{\pictur@\picture}

17 ⟨/autoload⟩

\@picture

18 ⟨∗2ekernel | def⟩

19 \gdef\@picture(#1,#2)(#3,#4){%
20 \@picht#2\unitlength
21 \setbox\@picbox\hb@xt@#1\unitlength\bgroup
22  \hskip -#3\unitlength
23  \lower #4\unitlength\hbox\bgroup
24  \ignorespaces}
\endpicture
25 \gdef\endpicture{%
26 \egroup\hss\egroup
27  \ht\@picbox\@picht\dp\@picbox\z@
28  \mbox{\box\@picbox}}

In the definitions of \put and \multiput, \hskip was replaced by \kern just in case arg #3 = “plus”. (Bug detected by Don Knuth. changed 20 Jul 87).

29 \long\gdef\put(#1,#2)#3{%
30 \@killglue\raise#2\unitlength
31 \hb@xt@\z@{\kern#1\unitlength #3\hss}%
32 \ignorespaces}

\multiput #3 had better be a (.

33 \gdef\multiput(#1,#2)#3{%
34 \@xdim #1\unitlength
35 \@ydim #2\unitlength
36 \@multiput(}
\multiput
37 \long\gdef\@multiput(#1,#2)#3#4{%
38 \@killglue\@multicnt #3\relax
39 \@whilenum \@multicnt >\z@\do
40  {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}%
41  \advance\@multicnt\m@ne
42  \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
43 \ignorespaces}

\@killglue
44 \gdef\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}}

45 ⟨/2ekernel | def⟩

\thinlines \thicklines

46 ⟨∗2ekernel | def⟩

47 \gdef\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
48 \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
49 \gdef\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
50 \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}

51 ⟨/2ekernel | def⟩ 52 ⟨∗autoload⟩

53 \def\thinlines{\pictur@\thinlines}
54 \def\thicklines{\pictur@\thicklines}

55 ⟨/autoload⟩

\linethickness

56 ⟨∗2ekernel | def⟩

57 \gdef\linethickness#1{\@wholewidth #1\relax \@halfwidth .5\@wholewidth}

58 ⟨/2ekernel | def⟩ 59 ⟨∗autoload⟩

60 \def\linethickness{\pictur@\linethickness}

61 ⟨/autoload⟩

\ishortstack

62 ⟨∗2ekernel | def⟩

63 \gdef\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}}
\@ishortstack
64 \gdef\@shortstack[#1]{%
65 \leavevmode
66 \vbox\bgroup
67  \baselineskip-\p@\lineskip 3\p@
68  \let\mb@l\hss\let\mb@r\hss
69  \expandafter\let\csname mb@#1\endcsname\relax
70  \let\\\@stackcr
71  \@ishortstack}

\@ishortstack
72 \gdef\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup}
\@stackcr \@ixstackcr
73 \gdef\@stackcr{\@ifstar\@ixstackcr\@ixstackcr}
74 \gdef\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}}
\@istackcr
75 \gdef\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}

\line(X,Y){LEN} == BEGIN

\@xarg  := X
\@yarg  := Y
\@linelen := LEN * \unitlength
if \@xarg = 0
then \@vline

else if \@yarg = 0

       then \@hline
       else \@sline

if

if END

\@sline ==

BEGIN

if \@xarg < 0

then @negarg := T

      \@xarg := -\@xarg
      \@yyarg := -\@yarg

else @negarg := F

      \@yyarg := \@yarg

fi

\@tempcnta := |\@yyarg|
if \@tempcnta > 6

then error: ’LATEX ERROR: Illegal \line or \vector argument.’

      \@tempcnta := 0

fi

\box\@linechar := \hbox{\@linefnt \@getlinechar(\@xarg,\@yyarg)
}
if \@yarg > 0 then \@upordown = \raise
                    \@clnht := 0
              else \@upordown = \lower
                   \@clnht := height of \box\@linechar

fi

\@clnwd := width of \box\@linechar

if @negarg

  then \hskip - width of \box\@linechar
       \reserved@a == \hskip - 2* width of box \@linechar
  else \reserved@a == \relax

fi %% Put out integral number of line segments

while \@clnwd <  \@linelen
  do \@upordown \@clnht \copy\@linechar
      \reserved@a
      \@clnht := \@clnht + ht of \box\@linechar

      \@clnwd := \@clnwd + width of \box\@linechar

od

%% Put out last segment

\@clnht := \@clnht - height of \box\@linechar
\@clnwd := \@clnwd - width of \box\@linechar
\@tempdima := \@linelen - \@clnwd
\@tempdimb := \@tempdima - width of \box\@linechar
if @negarg then \hskip -\@tempdimb
            else \hskip  \@tempdimb

fi

\@tempdima := 1000 * \@tempdima
\@tempcnta := \@tempdima / width of \box\@linechar
\@tempdima := (\@tempcnta * ht of \box\@linechar)/1000
\@clnht := \@clnht + \@tempdima
if \@linelen < width of box\@linechar
    then \hskip width of box\@linechar
    else \hbox{\@upordown \@clnht \copy\@linechar}

fi END

\@hline ==

BEGIN

if \@xarg < 0 then \hskip -\@linelen \fi
\vrule height \@halfwidth depth \@halfwidth width \@linelen
if \@xarg < 0 then \hskip -\@linelen \fi

END

\@vline == if \@yarg < 0 \@downline else \@upline fi

\@getlinechar(X,Y) ==

BEGIN

\@tempcnta := 8*X - 9

if Y > 0

  then \@tempcnta := \@tempcnta + Y
  else \@tempcnta := \@tempcnta - Y + 64

fi

\char\@tempcnta

END

\vector(X,Y){LEN} ==

BEGIN

\@xarg  := X
\@yarg  := Y
\@linelen := LEN * \unitlength

if \@xarg = 0
then \@vvector

else if \@yarg = 0

       then \@hvector
       else \@svector

if

if END

\@hvector ==

BEGIN

\@hline
{\@linefnt if \@xarg < 0 then \@getlarrow(1,0)
                         else \@getrarrow(1,0)
            fi}

END

\@vvector == if \@yarg < 0 \@downvector else \@upvector fi
\@svector ==

BEGIN

\@sline
\@tempcnta := |\@yarg|
if \@tempcnta < 5
   then \hskip - width of \box\@linechar
         \@upordown \@clnht \hbox
                  {\@linefnt
                   if @negarg then \@getlarrow(\@xarg,\@yyarg)
                              else \@getrarrow(\@xarg,\@yyarg)
                   fi }

else error: ’LATEX ERROR: Illegal \line or \vector argument.’ fi

END

\@getlarrow(X,Y) ==

BEGIN if Y = 0

then \@tempcnta := ’33

else \@tempcnta := 16 * X - 9

     \@tempcntb := 2 * Y
     if \@tempcntb > 0
       then \@tempcnta := \@tempcnta + \@tempcntb
       else \@tempcnta := \@tempcnta - \@tempcntb + 64

fi fi

\char\@tempcnta

END

 \@getrarrow(X,Y) ==

BEGIN

   \@tempcntb := |Y|
   case of \@tempcntb
     0 : \@tempcnta := ’55

1 : if X < 3 then \@tempcnta := 24*X - 6 else if X = 3

                  then \@tempcnta := 49
                  else \@tempcnta := 58 fi

fi 2 : if X < 3

then \@tempcnta := 24*X - 3

else \@tempcnta := 51 % X must = 3 fi

     3 : \@tempcnta := 16*X - 2
     4 : \@tempcnta := 16*X + 7

endcase

if Y < 0

     then \@tempcnta := \@tempcnta + 64

fi

   \char\@tempcnta

END

\if@negarg
76 \newif\if@negarg
\line
77 \gdef\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
78 \@linelen #3\unitlength
79 \ifdim\@linelen<\z@\@badlinearg\else
80  \ifnum\@xarg =\z@ \@vline
81  \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
82  \fi
83 \fi}
\@sline
84 \gdef\@sline{%
85 \ifnum\@xarg<\z@ \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg
86 \else \@negargfalse \@yyarg \@yarg \fi
87 \ifnum \@yyarg >\z@ \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi
88 \ifnum\@tempcnta>6 \@badlinearg\@tempcnta\z@ \fi
89 \ifnum\@xarg>6 \@badlinearg\@xarg \@ne \fi
90 \setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
91 \ifnum \@yarg >\z@ \let\@upordown\raise \@clnht\z@

 92 \else\let\@upordown\lower \@clnht \ht\@linechar\fi
 93 \@clnwd \wd\@linechar
 94 \if@negarg
 95 \hskip -\wd\@linechar \def\reserved@a{\hskip -2\wd\@linechar}%
 96 \else
 97  \let\reserved@a\relax
 98 \fi
 99 \@whiledim \@clnwd <\@linelen \do
100 {\@upordown\@clnht\copy\@linechar
101 \reserved@a
102 \advance\@clnht \ht\@linechar
103 \advance\@clnwd \wd\@linechar}%
104 \advance\@clnht -\ht\@linechar
105 \advance\@clnwd -\wd\@linechar
106 \@tempdima\@linelen\advance\@tempdima -\@clnwd
107 \@tempdimb\@tempdima\advance\@tempdimb -\wd\@linechar
108 \if@negarg \hskip -\@tempdimb \else \hskip \@tempdimb \fi
109 \multiply\@tempdima \@m
110 \@tempcnta \@tempdima
111 \@tempdima \wd\@linechar \divide\@tempcnta \@tempdima
112 \@tempdima \ht\@linechar \multiply\@tempdima \@tempcnta
113 \divide\@tempdima \@m
114 \advance\@clnht \@tempdima
115 \ifdim \@linelen <\wd\@linechar
116 \hskip \wd\@linechar

Warn if line gets so short that it can’t be printed.

117 \@picture@warn
118 \else\@upordown\@clnht\copy\@linechar\fi}
\@hline
119 \gdef\@hline{\ifnum \@xarg <\z@ \hskip -\@linelen \fi
120 \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen
121 \ifnum \@xarg <\z@ \hskip -\@linelen \fi}
\getlinechar
122 \gdef\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8%
123 \advance\@tempcnta -9\ifnum #2>\z@ \advance\@tempcnta #2\relax\else
124 \advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi
125 \char\@tempcnta}
\vector
126 \gdef\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
127 \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
128 \ifnum\@tempcnta<5\relax
129 \@linelen #3\unitlength
130 \ifdim\@linelen<\z@\@badlinearg\else
131  \ifnum\@xarg =\z@ \@vvector
132  \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
133  \fi

134 \fi
135 \else\@badlinearg\fi}
\@hvector
136 \gdef\@hvector{\@hline\hb@xt@\z@{\@linefnt
137 \ifnum \@xarg <\z@ \@getlarrow(1,0)\hss\else
138  \hss\@getrarrow(1,0)\fi}}
\@vvector
139 \gdef\@vvector{\ifnum \@yarg <\z@ \@downvector \else \@upvector \fi}
\@svector
140 \gdef\@svector{\@sline
141 \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi
142 \ifnum\@tempcnta <5%
143  \hskip -\wd\@linechar
144  \@upordown\@clnht \hbox{\@linefnt  \if@negarg
145  \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}%
146 \else\@badlinearg\fi}
\@getlarrow
147 \gdef\@getlarrow(#1,#2){\ifnum #2=\z@ \@tempcnta'33 \else
148 \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n \advance\@tempcnta
149 -9 \@tempcntb #2\relax\multiply\@tempcntb \tw@
150 \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb
151 \else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64
152 \fi\fi\char\@tempcnta}
\@getrarrow
153 \gdef\@getrarrow(#1,#2){\@tempcntb #2\relax
154 \ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi
155 \ifcase \@tempcntb\relax \@tempcnta'55 \or
156 \ifnum #1<\thr@@ \@tempcnta #1\relax\multiply\@tempcnta
157 24\advance\@tempcnta -6 \else \ifnum #1=\thr@@ \@tempcnta 49
158 \else\@tempcnta 58 \fi\fi\or
159 \ifnum #1<\thr@@ \@tempcnta=#1\relax\multiply\@tempcnta
160 24\advance\@tempcnta -\thr@@ \else \@tempcnta 51 \fi\or
161 \@tempcnta #1\relax\multiply\@tempcnta
162 \sixt@@n \advance\@tempcnta -\tw@ \else
163 \@tempcnta #1\relax\multiply\@tempcnta
164 \sixt@@n \advance\@tempcnta 7 \fi\ifnum #2<\z@ \advance\@tempcnta 64 \fi
165 \char\@tempcnta}
\@vline
166 \gdef\@vline{\ifnum \@yarg <\z@ \@downline \else \@upline\fi}
\@upline
167 \gdef\@upline{%
168 \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
169 \@height \@linelen \@depth \z@\hss}}

\@downline
170 \gdef\@downline{%
171 \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
172 \@height \z@ \@depth \@linelen \hss}}
\@upvector
173 \gdef\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char'66}\raise
174  \@linelen \hb@xt@\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}}
\@downvector
175 \gdef\@downvector{\@downline\lower \@linelen
176  \hb@xt@\z@{\@linefnt\char'77\hss}}
\dashbox{D}(X,Y) ==

BEGIN leave vertical mode

\hb@xt@ 0pt {
\baselineskip := 0pt
\lineskip  := 0pt

%% HORIZONTAL DASHES

\@dashdim := X * \unitlength

\@dashcnt := \@dashdim + 200 % to prevent roundoff error

\@dashdim := D * \unitlength
\@dashcnt := \@dashcnt / \@dashdim
if \@dashcnt is odd
  then \@dashdim := 0pt
       \@dashcnt := (\@dashcnt + 1) / 2
  else \@dashdim := \@dashdim / 2
       \@dashcnt := \@dashcnt / 2 - 1
       \box\@dashbox := \hbox{\vrule height \@halfwidth
                      depth \@halfwidth width \@dashdim}
       \put(0,0){\copy\@dashbox}
       \put(0,Y){\copy\@dashbox}
       \put(X,0){\hskip -\@dashdim\copy\@dashbox}
       \put(X,Y){\hskip -\@dashdim\box\@dashbox}
       \@dashdim := 3 * \@dashdim

fi

\box\@dashbox := \hbox{\vrule height \@halfwidth
                  depth \@halfwidth width D * \unitlength
                  \hskip D * \unitlength}
\@tempcnta := 0
\put(0,0){\hskip \@dashdim
         while \@tempcnta < \@dascnt
           do \copy\@dashbox
              \@tempcnta := \@tempcnta + 1

od

        }
\@tempcnta := 0
put(0,Y){\hskip \@dashdim
         while \@tempcnta < \@dascnt
           do \copy\@dashbox
              \@tempcnta := \@tempcnta + 1

od

        }

%% vertical dashes

\@dashdim := Y * \unitlength

\@dashcnt := \@dashdim + 200 % to prevent roundoff error

\@dashdim := D * \unitlength
\@dashcnt := \@dashcnt / \@dashdim
if \@dashcnt is odd
  then \@dashdim := 0pt
       \@dashcnt := (\@dashcnt + 1) / 2
  else \@dashdim := \@dashdim / 2
       \@dashcnt := \@dashcnt / 2 - 1
       \box\@dashbox := \hbox{\hskip -\@halfwidth
                                \vrule width \@wholewidth
                                         height \@dashdim  }
       \put(0,0){\copy\@dashbox}
       \put(X,0){\copy\@dashbox}
       \put(0,Y){\lower\@dashdim\copy\@dashbox}
       \put(X,Y){\lower\@dashdim\copy\@dashbox}
       \@dashdim := 3 * \@dashdim

fi

\box\@dashbox := \hbox{\vrule width \@wholewidth
                          height D * \unitlength       }
\@tempcnta := 0
put(0,0){\hskip -\halfwidth
         \vbox{while \@tempcnta < \@dashcnt
                do \vskip D*\unitlength
                   \copy\@dashbox
                   \@tempcnta := \@tempcnta + 1

od

               \vskip \@dashdim
              } }
\@tempcnta := 0
put(X,0){\hskip -\halfwidth
         \vbox{while \@tempcnta < \@dashcnt
                do \vskip D*\unitlength
                   \copy\@dashbox
                   \@tempcnta := \@tempcnta + 1

od

                       \vskip \@dashdim
                      }
                }

} % END DASHES

   \@imakepicbox(X,Y)

END

\dashbox
177 \gdef\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip
178 \lineskip \z@skip
179 \@dashdim #2\unitlength
180 \@dashcnt \@dashdim \advance\@dashcnt 200
181 \@dashdim #1\unitlength\divide\@dashcnt \@dashdim
182 \ifodd\@dashcnt\@dashdim \z@
183 \advance\@dashcnt \@ne \divide\@dashcnt \tw@
184 \else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
185 \advance\@dashcnt \m@ne
186 \setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
187 \@width \@dashdim}\put(0,0){\copy\@dashbox}%
188 \put(0,#3){\copy\@dashbox}%
189 \put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
190 \put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
191 \multiply\@dashdim \thr@@
192 \fi
193 \setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
194 \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
195 \put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
196 \do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
197 \put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
198 \do{\copy\@dashbox\advance\@tempcnta \@ne }}%
199 \@dashdim #3\unitlength
200 \@dashcnt \@dashdim \advance\@dashcnt 200
201 \@dashdim #1\unitlength\divide\@dashcnt \@dashdim
202 \ifodd\@dashcnt \@dashdim \z@
203 \advance\@dashcnt \@ne \divide\@dashcnt \tw@
204 \else
205 \divide\@dashdim \tw@ \divide\@dashcnt \tw@
206 \advance\@dashcnt \m@ne
207 \setbox\@dashbox\hbox{\hskip -\@halfwidth
208 \vrule \@width \@wholewidth
209 \@height \@dashdim}\put(0,0){\copy\@dashbox}%
210 \put(#2,0){\copy\@dashbox}%
211 \put(0,#3){\lower\@dashdim\copy\@dashbox}%
212 \put(#2,#3){\lower\@dashdim\copy\@dashbox}%
213 \multiply\@dashdim \thr@@
214 \fi
215 \setbox\@dashbox\hbox{\vrule \@width \@wholewidth
216 \@height #1\unitlength}\@tempcnta\z@

217 \put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
218 \do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
219 \vskip\@dashdim}}\@tempcnta\z@
220 \put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
221 \do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
222 \vskip\@dashdim}}}\@makepicbox(#2,#3)}

CIRCLES AND OVALS

USER COMMANDS:

\circle{D} : Produces the circle with the diameter as close as

possible to D * \unitlength.  \put(X,Y){\circle{D}}

puts the circle with its center at (X,Y).

\oval(X,Y) : Makes an oval as round as possible that fits in the rectangle of width X * \unitlength and height Y * \unitlength. The reference point is the center.

\oval(X,Y)[POS] : Save as \oval(X,Y) except it draws only the half or quadrant of the oval indicated by POS. E.G., \oval(X,Y)[t] draws just the top half and \oval(X,Y)[br] draws just the bottom right quadrant. In all cases, the reference point is the same as the unqualified \oval(X,Y) command.

\@ovvert {DELTA1} {DELTA2} : Makes a vbox containing either the left side or the right side of the oval being constructed. The baseline will coincide with the outside bottom edge of the oval; the left side of the box will coincide with the left edge of the vertical rule. The width of the box will be \@tempdima. DELTA1 and DELTA2 are added to the character number in

\@tempcnta

to get the characters for the top and bottom quarter circle pieces.

\@ovhorz : Makes an hbox containing the straight rule for either the top or the bottom of the oval being constructed. The baseline will coincide with bottom edge of the rule; the left side of the box will coincide with the left side of the oval. The width of the box will be \@ovxx.

\@getcirc {DIAM} : Sets \@tempcnta to the character number of the top-right quarter circle with the largest diameter less than or equal to DIAM. Sets \@tempboxa to an hbox containing that character.

Sets \@tempdima to \wd \@tempboxa, which is the distance

from the circle’s left outside edge to its right inside edge. (These characters are like those described in the TeXbook, pp. 389-90.)

\@getcirc {DIAM} ==

BEGIN

\@tempcnta := integer coercion of (DIAM + 2pt)

+ 2pt added 1 Nov 88

\@tempcnta := \@tempcnta / integer coercion of 4pt

if \@tempcnta > 10
then \@tempcnta := 10 fi
if \@tempcnta > 0
then \@tempcnta := \@tempcnta-1

else LaTeX Warning: Oval too small. fi

\@tempcnta  := 4 * \@tempcnta
\@tempboxa  := \hbox{\@circlefnt \char \@tempcnta}
\@tempdima  := \wd \@tempboxa

END

\@put{X}{Y}{OBJ} ==

BEGIN

\raise Y \hb@xt@ 0pt{\hskip X OBJ \hss}

END

\@oval(X,Y)[POS] ==

BEGIN

\begingroup
\boxmaxdepth := \maxdimen

@ovt := @ovb := @ovl := @ovr := true for all E in POS

do @ovE := false od

\@ovxx  := X * \unitlength
\@ovyy  := Y * \unitlength
\@tempdimb := min(\@ovxx,\@ovyy)
\@getcirc{\@tempdimb-2pt}   %% ”-2pt” added 7 Dec 89
\@ovro  := \ht \@tempboxa
\@ovri  := \dp \@tempboxa
\@ovdx  := \@ovxx - \@tempdima
\@ovdx  := \@ovdx/2
\@ovdy  := \@ovyy - \@tempdima
\@ovdy  := \@ovyy/2
\@circlefnt
\@tempboxa :=
    \hbox{

if @ovr

  then \@ovvert{3}{2} \kern -\@tempdima

fi if @ovl

  then \kern \@ovxx \@ovvert{0}{1} \kern
-\@tempdima
       \kern -\@ovxx

fi if @ovt

  then \@ovhorz \kern -\@ovxx

fi if @ovb

  then \raise \@ovyy \@ovhorz

fi

}
\@ovdx  := \@ovdx + \@ovro
\@ovdy  := \@ovdy + \@ovro
\ht\@tempboxa := \dp\@tempboxa := 0
\@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}
\endgroup

END

\@ovvert {DELTA1} {DELTA2} ==

BEGIN

\vbox to \@ovyy {

if @ovb

       then \@tempcntb := \@tempcnta + DELTA1
            \kern -\@ovro
            \hbox { \char \@tempcntb }
            \nointerlineskip
       else \kern \@ovri \kern \@ovdy

fi

     \leaders \vrule width \@wholewidth \vfil
     \nointerlineskip

if @ovt

       then \@tempcntb := \@tempcnta + DELTA2
            \hbox { \char \@tempcntb }
       else \kern \@ovdy \kern \@ovro

fi

    }

END

\@ovhorz ==

BEGIN

\hb@xt@ \@ovxx{
  \kern \@ovro

if @ovr then

  else \kern \@ovdx

fi

\leaders \hrule height \@wholewidth \hfil

if @ovl then

  else \kern \@ovdx

fi

\kern \@ovri
}

END

\circle{DIAM} ==

BEGIN

\begingroup
\boxmaxdepth := maxdimen
\@tempdimb := DIAM *\unitlength
if \@tempdimb > 15.5pt
then \@getcirc{\@tempdimb}
\@ovro := \ht \@tempboxa
\@tempboxa := \hbox{
\@circlefnt
\@tempcnta := \@tempcnta + 2
\char \@tempcnta
\@tempcnta := \@tempcnta - 1
\char \@tempcnta
\kern -2\@tempdima
\@tempcnta := \@tempcnta + 2
\raise \@tempdima \hbox { \char \@tempcnta }
\raise \@tempdima \box\@tempboxa
}
\ht\@tempboxa := \dp\@tempboxa := 0
\@put{-\@ovro}{-\@ovro}{\@tempboxa}

else

\@circ{\@tempdimb}{96}

fi

\endgroup

END

\circle*{DIAM} == \@dot{DIAM} ==
\@circ{DIAM*\unitlength}{112}
\@circ{DIAM}{CHAR} ==

BEGIN \@tempcnta := integer coercion of (DIAM + .5pt)/1pt.

    if \@tempcnta > 15 then \@tempcnta := 15 fi
    if \@tempcnta > 1 then \@tempcnta := \@tempcnta - 1 fi
    \@tempcnta := \@tempcnta + CHAR
    \@circlefnt
    \char \@tempcnta

END

\if@ovt \if@ovb \if@ovl \if@ovr If producing the Top Bottom Left or Right of an oval.

223 \newif\if@ovt
224 \newif\if@ovb
225 \newif\if@ovl
226 \newif\if@ovr

227 ⟨/2ekernel | def⟩ 228 ⟨∗2ekernel | autoload⟩

\@ovxx
\@ovyy
\@ovdx
\@ovdy
\@ovro
\@ovri

229 \newdimen\@ovxx
230 \newdimen\@ovyy
231 \newdimen\@ovdx
232 \newdimen\@ovdy
233 \newdimen\@ovro
234 \newdimen\@ovri

235 ⟨/2ekernel | autoload⟩

\advance\@tempdima 2pt\relax added 1 Nov 88 to fix bug in which size of drawn circle not monotonic function of argument of \circle, caused by different rounding for dimensions of large and small circles.

236 ⟨∗2ekernel | def⟩

\@getcirc
237 \gdef\@getcirc#1{\@tempdima #1\relax \advance\@tempdima 2\p@
238 \@tempcnta\@tempdima
239 \@tempdima 4\p@ \divide\@tempcnta\@tempdima
240 \ifnum \@tempcnta >10\relax \@tempcnta 10\relax\fi
241 \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne

Warn if requirements for oval or circle can’t be met.

242  \else \@picture@warn \fi
243 \multiply\@tempcnta 4\relax
244 \setbox \@tempboxa \hbox{\@circlefnt
245 \char \@tempcnta}\@tempdima \wd \@tempboxa}

\@picture@warn Generic warning for lines, vectors (used in \@sline) and oval or circle (used un \@getcirc) are not available at right size.

246 \def\@picture@warn{\@latex@warning{%
247  \string\oval, \string\circle, or \string\line\space
248  size unavailable}}

\@put
249 \gdef\@put#1#2#3{\raise #2\hb@xt@\z@{\hskip #1#3\hss}}
\oval
250 \gdef\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}}
\@oval
251 \gdef\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
252 \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
253 \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}%
254 \@ovxx
255 #1\unitlength \@ovyy #2\unitlength
256 \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
257 \advance \@tempdimb -2\p@
258 \@getcirc \@tempdimb
259 \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
260 \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
261 \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
262 \@circlefnt \setbox\@tempboxa
263 \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi
264 \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
265 \if@ovt \@ovhorz \kern -\@ovxx \fi
266 \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
267 \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
268 \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
269 \endgroup}
\@ovvert
270 \gdef\@ovvert#1#2{\vbox to\@ovyy{%
271  \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
272  \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
273  \else \kern \@ovri \kern \@ovdy \fi
274  \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip
275  \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
276  \hbox{\char \@tempcntb}%
277  \else \kern \@ovdy \kern \@ovro \fi}}
\@ovhorz
278 \gdef\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro
279  \if@ovr \else \kern \@ovdx \fi
280  \leaders \hrule \@height \@wholewidth \hfil
281  \if@ovl \else \kern \@ovdx \fi
282  \kern \@ovri}}
\circle
283 \gdef\circle{\@inmatherr\circle\@ifstar\@dot\@circle}
\@circle
284 \gdef\@circle#1{%

285 \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
286 \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
287  \@ovro\ht\@tempboxa
288  \setbox\@tempboxa\hbox{\@circlefnt
289  \advance\@tempcnta\tw@ \char \@tempcnta
290  \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima
291  \advance\@tempcnta\tw@
292  \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima
293  \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
294  \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
295 \else  \@circ\@tempdimb{96}\fi\endgroup}

\@dot Internal form of \circle*.

296 \gdef\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
\@circ
297 \gdef\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@
298 \@tempcnta\@tempdima \@tempdima \p@
299 \divide\@tempcnta\@tempdima
300 \ifnum\@tempcnta >15\relax \@tempcnta 15\relax \fi
301 \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne\fi
302 \advance\@tempcnta #2\relax
303 \@circlefnt \char\@tempcnta}

304 ⟨/2ekernel | def⟩

305 ⟨∗2ekernel | autoload⟩

\@xarg \@yarg \@yyarg Counters used for manipulating the ‘slope’ arguments.

306 \newcount\@xarg
307 \newcount\@yarg
308 \newcount\@yyarg
\@multicnt Counter used in \multiput, and also \multicolumn.
309 \newcount\@multicnt

\@xdim \yxdim Length registers.

310 \newdimen\@xdim
311 \newdimen\@ydim

\@linechar Box for holding a line segment character, for sloping lines.

312 \newbox\@linechar

\@linelen Length of the line currently being built.

313 \newdimen\@linelen

\@clnwd \@clnht Height and width of current line segment.

314 \newdimen\@clnwd
315 \newdimen\@clnht

\@dashdim \@dashbox \@dashcnt  \dashbox internal registers.
316 \newdimen\@dashdim
317 \newbox\@dashbox
318 \newcount\@dashcnt

Initialization: “\thinlines”

319 \let\@linefnt\tenln
320 \let\@circlefnt\tencirc
321 \@wholewidth\fontdimen8\tenln
322 \@halfwidth .5\@wholewidth

323 ⟨/2ekernel | autoload⟩

58.1 Curves

The new \qbezier command, based on the old \bezier defined in bezier.sty.

\qbezier[N] == \bezier{N}

\bezier{N}(AX,AY)(BX,BY)(CX,CY) ==

BEGIN

IF N = 0

THEN \@xdima := |BX - AX| \@xb := |CX - BX|

\@xa := Max(\@xa, \@xb)

\@ya := |BY - AY| \@yb := |CY - BY|

\@ya := Max(\@ya, \@yb)
@sc := Max(\@xa, \@ya)

%% The coefficient .5 below is the degree of overlap of %% successive points, where 1 is no overlap and 0 is %% complete overlap. A coefficient of C multiplies %% the number of points plotted by 1/C.

%%
\@xa := .5 * \@halfwidth
@sc := @sc / \@halfwidth

@sc := Max(@sc, qbeziermax) ELSE @sc := N

@scp := @sc+1

\@xb := 2 * (BX - AX) * \unitlength
\@xa := ((CX-AX)*\unitlength - \@xb)/@sc
\@yb := 2 * (BY - AY) * \unitlength
\@ya := ((CY-AY)*\unitlength - \@yb)/@sc
\@pictdot := square rule of width \@wholewidth
\count@ := 0

WHILE \count@ < @scp

DO \@xdim := ((\count@*\@xa + @xb) / @sc) * \count@

             \@ydim := ((\count@*\@ya + @yb) / @sc) * \count@

plot pt with relative coords (\@xdim,\@ydim)

             \count@ := \count@+1

OD

\qbeziermax The maximum number of points to plot.

324 ⟨∗2ekernel | def⟩

325 ⟨def⟩\ifx\qbeziermax\@undefined
326 \gdef\qbeziermax{500}

327 ⟨def⟩\fi

In the code below, to save registers \@a … are not used. Instead other registers are reused.

    \newcounter{@sc} -> \c@multicnt
    \newcounter{@scp} -> \@tempcnta
    \newdimen\@xa ->  \@ovxx
    \newdimen\@xb ->  \@ovdx
    \newdimen\@ya ->  \@ovyy
    \newdimen\@yb ->  \@ovdy
    \newsavebox{\@pictdot} -> \@tempboxa

\qbezier Main user-level command to plot quadratic bezier curves. #2 should be (.

328 \newcommand\qbezier[2][0]{\bezier{#1}#2}

\bezier Form of \bezier compatible with 2.09 bezier.sty, but modified to ignore spaces between its arguments. #2 should be white space, and #4 should be (.

329 \gdef\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
\@bezier
330 \gdef\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
331 \ifnum #1=\z@
332  \@ovxx #4\unitlength
333  \advance\@ovxx -#2\unitlength
334  \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
335  \@ovdx #6\unitlength
336  \advance\@ovdx -#4\unitlength
337  \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
338  \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
339  \@ovyy #5\unitlength
340  \advance\@ovyy -#3\unitlength
341  \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
342  \@ovdy #7\unitlength
343  \advance\@ovdy -#5\unitlength
344  \ifdim \@ovdy<\z@  \@ovdy -\@ovdy \fi
345  \ifdim \@ovyy<\@ovdy \@ovyy  \@ovdy \fi
346  \@multicnt
347  \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi

348  \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
349  \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi
350 \else \@multicnt#1\relax \fi
351 \@tempcnta\@multicnt \advance\@tempcnta\@ne
352 \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
353  \multiply\@ovdx \tw@
354 \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
355  \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
356 \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
357  \multiply\@ovdy \tw@
358 \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
359  \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
360 \setbox\@tempboxa\hbox{\vrule \@height\@halfwidth
361  \@depth \@halfwidth
362  \@width \@wholewidth}%
363 \put(#2,#3){%
364  \count@\z@
365  \@whilenum{\count@<\@tempcnta}\do
366  {\@xdim\count@\@ovxx
367  \advance\@xdim\@ovdx
368  \divide\@xdim\@multicnt
369  \multiply\@xdim\count@
370  \@ydim\count@\@ovyy
371  \advance\@ydim\@ovdy
372  \divide\@ydim\@multicnt
373  \multiply\@ydim\count@
374  \raise \@ydim
375  \hb@xt@\z@{\kern\@xdim
376  \unhcopy\@tempboxa\hss}%
377  \advance\count@\@ne}}}

378 ⟨/2ekernel | def⟩

File E

ltthm.dtx

59 Theorem Environments

The user creates his own theorem-like environments with the command \newtheorem{⟨name⟩}{⟨text⟩}[⟨counter⟩] or \newtheorem{⟨name⟩}[⟨oldname⟩]{⟨text⟩} This defines the environment ⟨name⟩ to be just as one would expect a theorem environment to be, except that it prints ⟨text⟩ instead of “Theorem”.

If ⟨oldname⟩ is given, then environments ⟨name⟩ and ⟨oldname⟩ use the same counter, so using a ⟨name⟩ environment advances the number of the next ⟨name⟩ environment, and vice-versa.

If ⟨counter⟩ is given, then environment ⟨name⟩ is numbered within ⟨counter⟩. E.g., if ⟨counter⟩ = subsection, then the first ⟨name⟩ in subsection 7.2 is

numbered ⟨text⟩ 7.2.1.

The way ⟨name⟩ environments are numbered can be changed by redefining \the⟨name⟩.

DOCUMENT STYLE PARAMETERS

\@thmcounter{COUNTER} : A command such that

               \edef\theCOUNTER{\@thmcounter{COUNTER}}

defines \theCOUNTER to produce a number for a theorem environment. The default is:

            BEGIN \noexpand\arabic{COUNTER} END

\@thmcountersep : A separator placed between a theorem number and the number of the counter within which it is numbered. E.g., to make the third theorem of section 7.2 be numbered 7.2-3, \@thmcountersep should be \def'ed to ’-’. Its default is ’.’.

\@begintheorem{NAME}{NUMBER} : A command that begins a theorem

environment for a ’theorem’ named ’NAME NUMBER’ – e.g., \@begintheorem{Lemma}{3.7} starts Lemma 3.7.

  \@opargbegintheorem{NAME}{NUMBER}{OPARG} :

A command that begins a theorem

environment for a ’theorem’ named ’NAME NUMBER’ with

optional argument OPARG – e.g., \@begintheorem{Lemma}{3.7}{Jones} starts ‘Lemma 3.7 (Jones):’.

\@endtheorem : A command that ends a theorem environment.

\newtheorem{NAME}{TEXT}[COUNTER] ==

BEGIN

if \NAME is definable

    then \@definecounter{NAME}

if COUNTER present

then \@newctr{NAME}[COUNTER] fi

                \theNAME == BEGIN \theCOUNTER \@thmcountersep
                                    eval\@thmcounter{NAME}

END

           else \theNAME == BEGIN eval\@thmcounter{NAME} END
         \NAME == \@thm{NAME}{TEXT}
         \endNAME == \@endtheorem

else error fi

END

\newtheorem{NAME}[OLDNAME]{TEXT}==

BEGIN

if counter OLDNAME nonexistant then ERROR else

if \NAME is definable then BEGIN

                \theNAME == \theOLDNAME
                \NAME == \@thm{OLDNAME}{TEXT}
                \endNAME == \@endtheorem

END else error

fi fi

END

\@thm{NAME}{TEXT} == BEGIN

 \refstepcounter{NAME}

if next char = [ then \@ythm{NAME}{TEXT} else \@xthm{NAME}{TEXT}

fi END

\@xthm{NAME}{TEXT} ==

BEGIN

    \@begintheorem{TEXT}{\theNAME}
    \ignorespaces

END

\@ythm{NAME}{TEXT}[OPARG] == BEGIN

    \@opargbegintheorem{TEXT}{\theNAME}{OPARG}
    \ignorespaces

END

\newtheorem \newtheorem ought really be allowed only in the preamble Which would be good document style, and allow some main memory to be saved by declaring these commands to be \@onlypreamble. Unfortunately the L^{A}TEX book indicates that \newtheorem may be used anywhere in the document…

1 ⟨∗2ekernel⟩

 2 \def\newtheorem#1{%
 3 \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
\@nthm
 4 \def\@nthm#1#2{%
 5 \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}

\@xnthm 92/09/18 RmS: Changed \@addtoreset to \@newctr to produce error message if counter #3 does not exist (to be consistent with behaviour of \newcounter)

 6 \def\@xnthm#1#2[#3]{%
 7 \expandafter\@ifdefinable\csname #1\endcsname
 8  {\@definecounter{#1}\@newctr{#1}[#3]%
 9  \expandafter\xdef\csname the#1\endcsname{%
10  \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
11  \@thmcounter{#1}}%
12  \global\@namedef{#1}{\@thm{#1}{#2}}%
13  \global\@namedef{end#1}{\@endtheorem}}}
\@ynthm
14 \def\@ynthm#1#2{%
15 \expandafter\@ifdefinable\csname #1\endcsname
16  {\@definecounter{#1}%
17  \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
18  \global\@namedef{#1}{\@thm{#1}{#2}}%
19  \global\@namedef{end#1}{\@endtheorem}}}
\@othm
20 \def\@othm#1[#2]#3{%
21 \@ifundefined{c@#2}{\@nocounterr{#2}}%
22  {\expandafter\@ifdefinable\csname #1\endcsname
23  {\global\@namedef{the#1}{\@nameuse{the#2}}%
24 \global\@namedef{#1}{\@thm{#2}{#3}}%
25 \global\@namedef{end#1}{\@endtheorem}}}}

File E: ltthm.dtx Date: 1995/10/10 Version v1.0f 330

\@thm
26 \def\@thm#1#2{%
27 \refstepcounter{#1}%
28 \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
\@xthm \@ythm
29 \def\@xthm#1#2{%
30 \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
31 \def\@ythm#1#2[#3]{%
32 \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}\ignorespaces}

Default values

\@thmcounter
\@thmcountersep
33 \def\@thmcounter#1{\noexpand\arabic{#1}}
34 \def\@thmcountersep{.}
\@begintheorem \@opargbegintheorem \@endtheorem Providing theorem defaults.
35 \def\@begintheorem#1#2{\trivlist
36 \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape}
37 \def\@opargbegintheorem#1#2#3{\trivlist
38  \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape}
39 \def\@endtheorem{\endtrivlist}

40 ⟨/2ekernel⟩

File E: ltthm.dtx Date: 1995/10/10 Version v1.0f 331

File F

ltsect.dtx

60 Sectioning Commands

This file defines the declarations such as \author which are used by \maketitle. \maketitle itself is defined by each class, not in the L^{A}TEX kernel.

The second part of the file defines the generic commands used for defining sectioning commands such as \chapter. Again the actual document level commands are defined in the class files, in terms of these commands.

1 ⟨∗2ekernel⟩

 2 \message{title,}

60.1 The Title

\title The user defines the title and author by the declarations \title{⟨name⟩},

\author  \author{⟨name⟩}

\date Similarly the date is declared with \date{⟨date⟩}. \thanks Inside these, the \thanks{⟨footnote text⟩} command may be used to make

\and acknowledgements, notice of address, etc. in a footnote. If there are multiple

authors, they have to be separated with the \and command.

\maketitle And finally, the \maketitle command produces the actual title, using the information previously saved with the other commands.

\title \@title  \title for use in \maketitle. If not given \maketitle will produce an error

message.

 3 \def\title#1{\gdef\@title{#1}}
 4 \def\@title{\@latex@error{No \noexpand\title given}\@ehc}
\author \@author  \author for use in \maketitle. If not given \maketitle will produce a warning

message.

 5 \def\author#1{\gdef\@author{#1}}
 6 \def\@author{\@latex@warning@no@line{No \noexpand\author given}}
\date \@date  \date for use in \maketitle. If not given \maketitle will produce \today as the

default.

 7 \def\date#1{\gdef\@date{#1}}
 8 \gdef\@date{\today}
\thanks
 9 \def\thanks#1{\footnotemark
10  \protected@xdef\@thanks{\@thanks
11  \protect\footnotetext[\the\c@footnote]{#1}}%

12 }

\@thanks
13 \let\@thanks\@empty
\and
14 \def\and{%                  % \begin{tabular}
15 \end{tabular}%
16 \hskip 1em \@plus.17fil%
17 \begin{tabular}[t]{c}}%   % \end{tabular}
18 \message{sectioning,}

60.2 Sectioning

\@secpenalty
19 \newcount\@secpenalty
20 \@secpenalty = -300

\if@noskipsec \@noskipsectrue Way back in 1991 (08/26) FMi & RmS set the \@noskipsec switch to true for the preamble and to false in \document. This was done to trap lists and related text in the preamble but it does not catch everything.

21 \newif\if@noskipsec \@noskipsectrue
\@startsection The \@startsection{⟨name⟩}{⟨level⟩}{ ⟨indent⟩}{⟨beforeskip⟩}

{⟨afterskip⟩}{⟨style⟩}*[⟨altheading⟩ ]{⟨heading⟩} command is the mother of all the user level sectioning commands. The part after the *, including the * is optional.

name: e.g., ’subsection’

level: a number, denoting depth of section – e.g., chapter=1, section = 2, etc.

indent: Indentation of heading from left margin

beforeskip: Absolute value = skip to leave above the heading. If negative, then paragraph indent of text following heading is suppressed.

afterskip: if positive, then skip to leave below heading, else negative of skip to leave to right of run-in heading.

style: Commands to set style. Since June 1996 release the last command in this argument may be a command such as \MakeUppercase or \fbox that takes an argument. The section heading will be supplied as the argument to this command. So setting #6 to, say, \bfseries\MakeUppercase would produce bold, uppercase headings.

If ‘*’ is missing, then increment the counter. If it is present, then there should be no [⟨altheading⟩] argument. The command uses the counter ’secnumdepth’. It contains a pointer to the highest section level that is to be numbered.

Warning: The \@startsection command should be at the same or higher grouping level as the text that follows it. For example, you should not do something like

\def\foo{ \begingroup ...
             \paragraph{...}
           \endgroup}

Pseudocode for the \@startsection command

\@startsection

{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} == BEGIN IF @noskipsec = T THEN \leavevmode FI

% true if previous section had no body.

\par

\@tempskipa := BEFORESKIP @afterindent := T

IF \@tempskipa < 0 THEN \@tempskipa := -\@tempskipa

@afterindent := F

FI IF @nobreak = true

THEN \everypar == null

  ELSE \addpenalty{\@secpenalty}
       \addvspace{\@tempskipa}

FI IF * next

THEN \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}

  ELSE \@dblarg{\@sect

{NAME}{LEVEL}{INDENT}

{BEFORESKIP}{AFTERSKIP}{STYLE}}

FI END

22 \def\@startsection#1#2#3#4#5#6{%
23 \if@noskipsec \leavevmode \fi
24 \par
25 \@tempskipa #4\relax
26 \@afterindenttrue
27 \ifdim \@tempskipa <\z@
28  \@tempskipa -\@tempskipa \@afterindentfalse
29 \fi
30 \if@nobreak
31  \everypar{}%
32 \else
33  \addpenalty\@secpenalty\addvspace\@tempskipa
34 \fi
35 \@ifstar

36  {\@ssect{#3}{#4}{#5}{#6}}%
37  {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

\@sect Pseudocode for the \@sect command

\@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2}

==

BEGIN

IF LEVEL > \c@secnumdepth

THEN \@svsec :=L null

ELSE \refstepcounter{NAME}
\@svsec :=L BEGIN \@seccntformat{#1}\relax END

FI IF AFTERSKIP > 0

THEN \begingroup

STYLE

   \@hangfrom{\hskip INDENT\@svsec}
   {\interlinepenalty 10000 ARG2\par}
\endgroup
\NAMEmark{ARG1}
\addcontentsline{toc}{NAME}
   { IF LEVEL > \c@secnumdepth
       ELSE \protect\numberline{\theNAME} FI

ARG1 }

ELSE \@svsechd == BEGIN STYLE

                    \hskip INDENT\@svsec

ARG2

                    \NAMEmark{ARG1}
                    \addcontentsline{toc}{NAME}
                       { IF LEVEL > \c@secnumdepth

ELSE

\protect\numberline{\theNAME}

FI ARG1 }

END

FI

\@xsect{AFTERSKIP}

END

38 \def\@sect#1#2#3#4#5#6[#7]#8{%
39 \ifnum #2>\c@secnumdepth
40  \let\@svsec\@empty
41 \else
42  \refstepcounter{#1}%

Since \@seccntformat might end with an improper \hskip which is scanning forward for plus or minus we end the definition of \@svsec with \relax as a precaution.

43  \protected@edef\@svsec{\@seccntformat{#1}\relax}%
44 \fi
45 \@tempskipa #5\relax
46 \ifdim \@tempskipa>\z@
47  \begingroup

This { used to be after the argument to \@hangfrom but was moved here to allow commands such as \MakeUppercase to be used at the end of #6.

48  #6{%
49  \@hangfrom{\hskip #3\relax\@svsec}%
50  \interlinepenalty \@M #8\@@par}%
51  \endgroup
52  \csname #1mark\endcsname{#7}%
53  \addcontentsline{toc}{#1}{%
54  \ifnum #2>\c@secnumdepth \else
55  \protect\numberline{\csname the#1\endcsname}%
56  \fi
57  #7}%
58 \else

\relax added 2 May 90

59  \def\@svsechd{%
60  #6{\hskip #3\relax
61  \@svsec #8}%
62  \csname #1mark\endcsname{#7}%
63  \addcontentsline{toc}{#1}{%
64  \ifnum #2>\c@secnumdepth \else
65  \protect\numberline{\csname the#1\endcsname}%
66  \fi
67  #7}}%
68 \fi
69 \@xsect{#5}}

\@xsect Pseudocode for the \@xsect command \@xsect{AFTERSKIP} == BEGIN

IF AFTERSKIP > 0

      THEN \par \nobreak

\vskip AFTERSKIP

           \@afterheading

ELSE @nobreak :=G F @noskipsec :=G T \everypar{ IF @noskipsec = T

THEN @noskipsec :=G F

                             \clubpenalty :=G 10000
                             \hskip -\parindent

File F: ltsect.dtx Date: 1996/12/20 Version v1.0z 336

\begingroup
  \@svsechd
\endgroup
\unskip
\hskip -AFTERSKIP \relax

%% relax added 14 Jan 91

ELSE \clubpenalty :=G \@clubpenalty
\everypar := NULL

FI

}

FI

END

70 \def\@xsect#1{%
71 \@tempskipa #1\relax
72 \ifdim \@tempskipa>\z@

Why not combine \@sect and \@xsect and save doing the same test twice? It is not possible to change this now as these have become hooks!

This \par seems unnecessary.

73  \par \nobreak
74  \vskip \@tempskipa
75  \@afterheading
76 \else
77  \@nobreakfalse
78  \global\@noskipsectrue
79  \everypar{%
80  \if@noskipsec
81  \global\@noskipsecfalse
82  {\setbox\z@\lastbox}%
83  \clubpenalty\@M
84  \begingroup \@svsechd \endgroup
85  \unskip
86  \@tempskipa #1\relax
87  \hskip -\@tempskipa
88  \else
89  \clubpenalty \@clubpenalty
90  \everypar{}%
91  \fi}%
92 \fi
93 \ignorespaces}

\@seccntformat This command formats the section number including the space following it.

94 \def\@seccntformat#1{\csname the#1\endcsname\quad}

Pseudocode for the \@ssect command \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} == BEGIN IF AFTERSKIP > 0

  THEN \begingroup

STYLE

         \@hangfrom{\hskip INDENT}{\interlinepenalty 10000
ARG\par}
       \endgroup

ELSE \@svsechd == BEGIN STYLE

                          \hskip INDENT

ARG END

FI

\@xsect{AFTERSKIP}

END Pseudocode for the \@afterheading command

\@afterheading ==

BEGIN @nobreak :=G true \everypar := BEGIN IF @nobreak = T

THEN @nobreak :=G false

                           \clubpenalty :=G 10000

IF @afterindent = F

THEN remove \lastbox FI

                      ELSE \clubpenalty :=G \@clubpenalty
                           \everypar := NULL

FI END

END

\@ssect
95 \def\@ssect#1#2#3#4#5{%
96 \@tempskipa #3\relax
97 \ifdim \@tempskipa>\z@
98  \begingroup

This { used to be after the argument to \@hangfrom but was moved here to allow commands such as \MakeUppercase to be used at the end of #4.

99  #4{%
100  \@hangfrom{\hskip #1}%
101  \interlinepenalty \@M #5\@@par}%
102  \endgroup
103 \else
104  \def\@svsechd{#4{\hskip #1\relax #5}}%
105 \fi
106 \@xsect{#3}}

\if@afterindent
\@afterindenttrue
107 \newif\if@afterindent \@afterindenttrue

\@afterheading This hook is used in setting up custom-built headings in classes.dtx.

108 \def\@afterheading{%
109 \@nobreaktrue
110 \everypar{%
111  \if@nobreak
112  \@nobreakfalse
113  \clubpenalty \@M
114  \if@afterindent \else
115  {\setbox\z@\lastbox}%
116  \fi
117  \else
118  \clubpenalty \@clubpenalty
119  \everypar{}%
120  \fi}}

\@hangfrom \@hangfrom{⟨text⟩} : Puts ⟨text⟩ in a box, and makes a hanging indentation of the following material up to the first \par. Should be used in vertical mode.

121 \def\@hangfrom#1{\setbox\@tempboxa\hbox{{#1}}%
122  \hangindent \wd\@tempboxa\noindent\box\@tempboxa}
\c@secnumdepth
\c@tocdepth
123 \newcount\c@secnumdepth
124 \newcount\c@tocdepth

\secdef \secdef{⟨unstarcmds⟩}{⟨unstarcmds⟩}{ ⟨starcmds⟩} When defining a \chapter or \section command without using \@startsection, you can use \secdef as follows:

1. \def\chapter{ … \secdef \⟨starcmd⟩ \⟨unstarcmd⟩ }

2. \def\⟨starcmd⟩[#1]#2{ … } % Command to define \chapter[…]{… }

3. \def\⟨unstarcmd⟩#1{ … } % Command to define \chapter*{… }

125 \def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}}

60.2.1 Initializations

\sectionmark
\subsectionmark
\subsubsectionmark
\paragraphmark
\subparagraphmark

126 \let\sectionmark\@gobble
127 \let\subsectionmark\@gobble
128 \let\subsubsectionmark\@gobble
129 \let\paragraphmark\@gobble
130 \let\subparagraphmark\@gobble
131 \message{contents,}

File F: ltsect.dtx Date: 1996/12/20 Version v1.0z 339

60.3 Table of Contents etc.

60.3.1 Convention

\tf@⟨foo⟩ = file number for output for table foo. The file is opened only if @filesw

= true.

60.3.2 Commands

A \l@⟨type⟩{⟨entry⟩}{⟨page⟩} Macro needs to defined by document style for making an entry of type ⟨type⟩ in a table of contents, etc. E.g., the document style

should define \l@chapter, \l@section, etc.

Note: When the \protect command is used in the ⟨entry⟩ or ⟨text⟩ of one of the commands below, it causes the following control sequence to be written on the file without being expanded. The sequence will be expanded when the table of contents entry is processed.

Surprise: Inside an \addcontentsline or \addtocontents command argument, the commands: \index, \glossary, and \label are no-ops . This could cause a problem if the user puts an \index or \label into one of the commands he writes, or into the optional ‘short version’ argument of a \section or \caption command.

\@starttoc The \@starttoc{⟨ext⟩} command is used to define the commands:

\tableofcontents, \listoffigures, etc.

For example: \@starttoc{lof} is used in \listoffigures. This command reads the .⟨ext⟩ file and sets up to write the new .⟨ext⟩ file.

 \@starttoc{EXT} ==

BEGIN

     \begingroup
        \makeatletter

read file \jobname.EXT

IF @filesw = true

          THEN open \jobname.EXT as file \tf@EXT

FI

@nobreak :=G FALSE %% added 24 May 89

     \endgroup

END

132 \def\@starttoc#1{%
133 \begingroup
134  \makeatletter
135  \@input{\jobname.#1}%
136  \if@filesw
137  \expandafter\newwrite\csname tf@#1\endcsname
138  \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
139  \fi
140  \@nobreakfalse
141 \endgroup}

\addcontentsline The \addcontentsline{⟨table⟩}{⟨type⟩}{ ⟨entry⟩} command allows the user to add his/her own entry to a table of contents, etc. The command adds the entry \contentsline{⟨type⟩}{⟨entry⟩}{⟨page⟩} to the .⟨table⟩ file.

This macro is implemented as an aplication of \addtocontents. Note that \thepage is not expandable during \protected@write therefore one gets the page number at the time of the \shipout.

142 \def\addcontentsline#1#2#3{%
143 \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}}

\addtocontents The \addtocontents{⟨table⟩}{⟨text⟩} command adds ⟨text⟩ to the .⟨table⟩ file, with no page number.

144 \long\def\addtocontents#1#2{%
145 \protected@write\@auxout
146  {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
147  {\string\@writefile{#1}{#2}}}

\contentsline The \contentsline{⟨type⟩}{⟨entry⟩}{⟨page⟩} macro produces a ⟨type⟩ entry in a table of contents, etc. It will appear in the .toc or other file. For example, The entry for subsection 1.4.3 in the table of contents for example, might be produced by:

       \contentsline{subsection}
           {\makebox{30pt}[r]{1.4.3} Gnats and Gnus}{22}

The \protect command causes command sequences to be written without expanding them.

148 \def\contentsline#1{\csname l@#1\endcsname}

\@dottedtocline{⟨level⟩}{⟨indent⟩}{⟨numwidth⟩ }{⟨title⟩}{⟨page⟩}: Macro to produce a table of contents line with the following parameters:

level If ⟨level⟩ > \c@tocdepth, then no line produced.

indent Total indentation from the left margin.

numwidth Width of box for number if the ⟨title⟩ has a \numberline command. As of 25 Jan 1988, this is also the amount of extra indentation added to second and later lines of a multiple line entry.

title Contents of entry.

page Page number.

Uses the following parameters, which must be set by the document style. They should be defined with \def’s.

pnumwidth Width of box in which page number is set. tocrmarg Right margin indentation for all but last line of multiple-line entries.

dotsep Separation between dots, in mu units. Should be \def’d to a number like 2 or 1.7

\@dottedtocline
149 \def\@dottedtocline#1#2#3#4#5{%
150 \ifnum #1>\c@tocdepth \else
151  \vskip \z@ \@plus.2\p@
152  {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
153  \parindent #2\relax\@afterindenttrue
154  \interlinepenalty\@M
155  \leavevmode
156  \@tempdima #3\relax
157  \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
158  {#4}\nobreak
159  \leaders\hbox{$\m@th

If a document uses fonts other than computer modern, the use of a dot from math can be very disturbing despite the fact that this might be the only place in a document that then uses computer modern. Therefore we surround the dot with an \hbox to escape to the surrounding text font.

160  \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
161  mu$}\hfill
162  \nobreak
163  \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
164  \par}%
165 \fi}

Note: \nobreak’s added 7 Jan 86 to prevent bad line break that left the page number dangling by itself at left edge of a new line.

Changed 25 Jan 88 to use \leftskip instead of \hangindent so leaders of multiple-line contents entries would line up properly.

\numberline  \numberline{⟨number⟩}: For use in a \contentsline command. It puts

⟨number⟩ flushleft in a box of width \@tempdima (Before 25 Jan 88 change, it also added \@tempdima to the hanging indentation.)

166 \def\numberline#1{\hb@xt@\@tempdima{#1\hfil}}

167 ⟨/2ekernel⟩

File G

ltfloat.dtx

61 Floats

The different types of floats are identified by a ⟨type⟩ name, which is the name of the counter for that kind of float. For example, figures are of type ‘figure’ and tables are of type ‘table’. Each ⟨type⟩ has associated a positive ⟨type number⟩, which is a power of two. E.g., figures might be have type number 1, tables type number 2, programs type number 4, etc.

The locations where a float can go are specified by a ⟨placement specifier⟩, which is a list of the possible locations, each denoted by a letter as follows:

h : here — at the current location in the text.
t : top  — at the top of a text page.
b : bottom — at the bottom of a text page.
p : page — on a separate float page

In addition, in conjunction with these, you can use ‘!’ which means that the current values of the float positioning parameters are ignored for this float. (Has no effect on ‘p’, float page positioning.) For example, ‘pht’ specifies that the float can appear in any of three locations: page, here or top.

61.1 Floating Environments

1 ⟨∗2ekernel⟩

 2 \message{floats,}

Where floats may appear on a page, and how many may appear there are specified by the following float placement parameters. The numbers are named like counters so the user can set them with the ordinary counter-setting commands.

\c@topnumber : Number of floats allowed at the top of a column. \topfraction : Fraction of column that can be devoted to floats.

  \c@dbltopnumber, \dbltopfraction

: Same as above, but for double-column floats.

  \c@bottomnumber, \bottomfraction

: Same as above for bottom of page.

\c@totalnumber : Number of floats allowed in a single column,

including in-text floats.

\textfraction :Minimum fraction of column that must contain text. \floatpagefraction: Minimum fraction of page that must be taken

up by float page.

\dblfloatpagefraction

: Same as above, for double-column floats.

The document style must define the following.

\fps@TYPE : The default placement specifier for floats of type TYPE.

\ftype@TYPE : The type number for floats of type TYPE.

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

\@float{TYPE}[PLACEMENT] : This macro begins a float environment for a

single-column float 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 == \@float{figure}, \endfigure == \end@float.

\@float{TYPE}[PLACEMENT] == BEGIN

if hmode then \@bsphack

              \@floatpenalty := -10002
         else \@floatpenalty := -10003

fi

\@captype ==L TYPE
\@dblflset

\@fps ==L PLACEMENT

\@onelevel@sanitize \@fps

add default PLACEMENT if at most ! in PLACEMENT ==

\@fpsadddefault

if inner

then LaTeX Error: ’Not in outer paragraph mode.’

       \@floatpenalty := 0

else if \@freelist nonempty

         then \@currbox :=L head of \@freelist
              \@freelist :=G tail of \@freelist
              \count\@currbox :=G 32*\ftype@TYPE +

bits determined by

PLACEMENT

         else \@floatpenalty := 0

LaTeX Error: ’Too many unprocessed floats’ fi

fi

\@currbox :=G \color@vbox
                  \normalcolor
                    \vbox{

%% 15 Dec 87 –

                     %% removed \boxmaxdepth :=L 0pt

%% that made box 0 depth because it screwed %% things up. Instead, added \vskip0pt at

end

                          \hsize = \columnwidth
                          \@parboxrestore
                          \@floatboxreset

END

\caption ==

BEGIN

\refstepcounter{\@captype}
\@dblarg{\@caption{\@captype}}

END

In following definition, \par moved from after \addcontentsline to before \addcontentsline because the \write could cause an extra blank line to be added to the paragraph above the caption. (Change made 12 Jun 87)

\@caption{TYPE}[STEXT]{TEXT} == BEGIN

\par
\addcontentsline{\ext@TYPE}{TYPE}{\numberline{\theTYPE}{STEXT}}
\begingroup
  \@parboxrestore
  \@normalsize
  \@makecaption{\fnum@TYPE}{TEXT}
  \par
\endgroup

END

\@dblfloat{TYPE}[PLACEMENT] : Macro to begin a float environment for

a double-column float of type TYPE with PLACEMENT as the placement

specifier. The default value of PLACEMENT is ’tp’

The environment is ended by \end@dblfloat.

     E.g., \figure* == \@dblfloat{figure},
           \endfigure* == \end@dblfloat.

\@dblfloat{TYPE}[PLACEMENT] ==

Identical to \@float{TYPE}[PLACEMENT] except \hsize and

\linewidth
     are set to \textwidth.
\@floatpenalty
 3 \newcount\@floatpenalty
\caption
 4 \def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
\@caption
 5 \long\def\@caption#1[#2]#3{%
 6 \par
 7 \addcontentsline{\csname ext@#1\endcsname}{#1}%
 8  {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
 9 \begingroup

The paragraph setting parameters are normalised at this point, however \@parboxrestore resets \everypar which is not correct in this context so \@setminipage is called if needed.

The float mechanism, like minipage, sets the flag @minipage true before executing the user-supplied text. Many L^{A}TEX constructs test for this flag and do not add vertical space when it is true. The intention is that this emulates TEX’s ‘top of page’ behaviour. The flag must be set false at the start of the first paragraph. This is achieved by a redefinition of \everypar, but the call to \@parboxrestore removes that redefinition, so it is re-inserted if needed. If the flag is already false then the \caption was not the first entry in the float, and so some other paragraph has already activated the special \everypar. In this case no further action is needed.

10  \@parboxrestore
11  \if@minipage
12  \@setminipage
13  \fi
14  \normalsize
15  \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
16 \endgroup}

\@float \@dblflset
17 \def\@float#1{%
18 \@ifnextchar[%
19  {\@xfloat{#1}}%
20  {\edef\reserved@a{\noexpand\@xfloat{#1}[\csname fps@#1\endcsname]}%
21  \reserved@a}}
\@dblfloat
22 \def\@dblfloat{%
23 \if@twocolumn\let\reserved@a\@dbflt\else\let\reserved@a\@float\fi
24 \reserved@a}

\fps@dbl Note that all double floats have default fps ‘tp’.

\@setfps This sets the fps, dealing with error conditions by adding the default.

\@xfloat The first part of this sets the count register that stores all the information about

the type and fps of the float.

We assume here that the default specifiers already contain no active characters. It may be better to store the defaults as numbers, rather than symbol strings.

25 \def\@xfloat #1[#2]{%
26 \@nodocument
27 \def \@captype {#1}%
28 \def \@fps {#2}%
29 \@onelevel@sanitize \@fps
30 \def \reserved@b {!}%
31 \ifx \reserved@b \@fps
32  \@fpsadddefault
33 \else
34  \ifx \@fps \@empty
35  \@fpsadddefault
36  \fi
37 \fi
38 \ifhmode
39  \@bsphack
40  \@floatpenalty -\@Mii
41 \else
42  \@floatpenalty-\@Miii
43 \fi
44 \ifinner
45  \@parmoderr\@floatpenalty\z@
46 \else
47  \@next\@currbox\@freelist
48  {%
49  \@tempcnta \sixt@@n
50  \expandafter \@tfor \expandafter \reserved@a
51  \expandafter :\expandafter =\@fps
52  \do
53  {%

54  \if \reserved@a h%
55  \ifodd \@tempcnta
56  \else
57  \advance \@tempcnta \@ne
58  \fi
59  \fi
60  \if \reserved@a t%
61  \@setfpsbit \tw@
62  \fi
63  \if \reserved@a b%
64  \@setfpsbit 4%
65  \fi
66  \if \reserved@a p%
67  \@setfpsbit 8%
68  \fi
69  \if \reserved@a !%
70  \ifnum \@tempcnta>15
71  \advance\@tempcnta -\sixt@@n\relax
72  \fi
73  \fi
74  }%
75  \@tempcntb \csname ftype@\@captype \endcsname
76  \multiply \@tempcntb \@xxxii
77  \advance \@tempcnta \@tempcntb
78  \global \count\@currbox \@tempcnta
79  }%
80  \@fltovf
81 \fi

The remainder sets up the box in which the float is typeset, and the typesetting environment to be used. It is essential to have the extra box to avoid the unwanted space that would otherwise often be put at the top of the float.

It ends with a hook; not sure how useful this is but it is needed at present to deal with double-column floats.

82 \global \setbox\@currbox
83  \color@vbox
84  \normalcolor
85  \vbox \bgroup
86  \hsize\columnwidth
87  \@parboxrestore
88  \@floatboxreset

89 }

\@floatboxreset The rational for allowing these normally global flags to be set locally here, via \@parboxrestore, was stated originally by Donald Arseneau and extended by Chris Rowley. It is because these flags are only set globally to true by section commands, and these should never appear within marginals or floats or, indeed, in any group; and they are only ever set globally to false when they are definitely true.

If anyone is unhappy with this argument then both flags should be treated as in \set@nobreak; otherwise this command will be redundant.

 90 \def \@floatboxreset {%
 91  \reset@font
 92  \normalsize
 93 %        \let\if@nobreak\iffalse
 94 %        \let\if@noskipsec\iffalse
 95 %        \@setnobreak
 96  \@setminipage

97 }

\@setnobreak
 98 \def \@setnobreak{%
 99 \if@nobreak
100  \let\outer@nobreak\@nobreaktrue
101  \@nobreakfalse
102 \fi

103 }

\@setminipage
104 \def \@setminipage{%
105 \@minipagetrue
106 \everypar{\@minipagefalse\everypar{}}%

107 }

\end@float
108 \def\end@float{%
109 \@endfloatbox
110 \ifnum\@floatpenalty <\z@

We make sure that we never exceed \textheight, otherwise float will never get typeset (91/03/15 FMi).

111  \@largefloatcheck
112  \@cons\@currlist\@currbox
113  \ifnum\@floatpenalty <-\@Mii
114  \penalty -\@Miv

Saving and restoring \prevdepth added 26 May 87 to prevent extra vertical space when used in vertical mode.

115  \@tempdima\prevdepth
116  \vbox{}%
117  \prevdepth\@tempdima
118  \penalty\@floatpenalty
119  \else
120  \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack
121  \fi
122 \fi

123 }

\end@dblfloat
124 \def\end@dblfloat{%
125 \if@twocolumn
126 \@endfloatbox
127 \ifnum\@floatpenalty <\z@

We make sure that we never exceed \textheight, otherwise float will never get typeset (91/03/15 FMi).

128  \@largefloatcheck
129  \@cons\@dbldeferlist\@currbox
130 \fi

RmS 92/03/18 changed \@esphack to \@Esphack.

131  \ifnum \@floatpenalty =-\@Mii \@Esphack\fi
132 \else
133 \end@float
134 \fi

135 }

\@endfloatbox This macro is not intended to be a hook; it is designed to help maintain the integrity of this code, which is used twice and, as can be seen, is subject to frequent changes.

136 \def \@endfloatbox{%
137  \par\vskip\z@skip      %% \par\vskip\z@ added 15 Dec 87
138  \@minipagefalse
139  \outer@nobreak
140  \egroup                  %% end of vbox
141 \color@endbox

142 } 143 %

144 % \begin{macro}{\outer@nobreak}
145 % \changes{v1.0h}{1994/05/20}{Macro added: default is to do nothing.}
146 %    \begin{macrocode}
147 \let\outer@nobreak\@empty

\@largefloatcheck This calculates by how much a float is oversize for the page and prints this in a warning message.

148 \def \@largefloatcheck{%
149 \ifdim \ht\@currbox>\textheight
150  \@tempdima -\textheight
151  \advance \@tempdima \ht\@currbox
152  \@latex@warning {Float too large for page by \the\@tempdima}%
153  \ht\@currbox \textheight
154 \fi

155 }

\@dbflt \@xdblfloat
156 \def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tp]}}

157 \def\@xdblfloat#1[#2]{%
158 \@xfloat{#1}[#2]\hsize\textwidth\linewidth\textwidth}

Moved to ltoutput 93/12/16

159 %\newcount\c@topnumber
160 %\newcount\c@dbltopnumber
161 %\newcount\c@bottomnumber
162 %\newcount\c@totalnumber
An analysis of \@floatplacement:

This should be called whenever \@colht has been set.

163 \def\@floatplacement{\global\@topnum\c@topnumber
164  % Textpage bit, global:
165 \global\@toproom \topfraction\@colht
166 \global\@botnum  \c@bottomnumber
167 \global\@botroom \bottomfraction\@colht
168 \global\@colnum  \c@totalnumber
169  % Floatpage bit, local:
170 \@fpmin   \floatpagefraction\@colht}

\@dblfloatplacement This should be called only within a group. Now changed to provide extra checks in \@addtodblcol, needed when processing a BANG float.

171 \def \@dblfloatplacement {%

Textpage bit: global, but need not be.

172 \global \@dbltopnum \c@dbltopnumber
173 \global \@dbltoproom \dbltopfraction\@colht

This new bit uses \@textmin to locally store the amount of extra room in the column.

174 \@textmin \@colht
175 \advance \@textmin -\@dbltoproom

Floatpage bit: must be local.

176 \@fpmin \dblfloatpagefraction\textheight
177 \@fptop \@dblfptop
178 \@fpsep \@dblfpsep
179 \@fpbot \@dblfpbot

180 }

MARGINAL NOTES:

Marginal notes use the same mechanism as floats to communicate with the \output routine. Marginal notes are distinguished from floats by having a negative placement specification. The command \marginpar [LTEXT]{RTEXT} generates a marginal note in a parbox, using LTEXT if it’s on the left and RTEXT if it’s on the right. (Default is RTEXT = LTEXT.) It uses the following parameters.

\marginparwidth : Width of marginal notes.

\marginparsep : Distance between marginal note and text. the page layout to determine how to move the marginal note into the margin. E.g., \@leftmarginskip ==

      \hskip -\marginparwidth \hskip -\marginparsep .

\marginparpush : Minimum vertical separation between \marginpar's

Marginal notes are normally put on the outside of the page if @mparswitch = true, and on the right if @mparswitch = false. The command \reversemarginpar reverses the side where they

are put. \normalmarginpar undoes \reversemarginpar.

These commands have no effect for two-column output.

SURPRISE: if two marginal notes appear on the same line of text, then the second one could appear on the next page, in a funny position.

\marginpar [LTEXT]{RTEXT} == BEGIN

if hmode then \@bsphack

                 \@floatpenalty := -10002
            else \@floatpenalty := -10003

fi

if inner

then LaTeX Error: ’Not in outer paragraph mode.’

          \@floatpenalty := 0

else if \@freelist has two elements:

            then get \@marbox, \@currbox from \@freelist
                 \count\@marbox :=G -1
            else \@floatpenalty := 0

LaTeX Error: ’Too many unprocessed floats’

                 \@currbox, \@marbox := \@tempboxa    %%use \def

fi fi if optional argument

     then %% \@xmpar ==
          \@savemarbox\@marbox{LTEXT}
          \@savemarbox\@currbox{RTEXT}
     else %% \@ympar ==
          \@savemarbox\@marbox{RTEXT}
          \box\@currbox :=G \box\@marbox

fi

  \@xympar

END

\reversemarginpar == BEGIN \@mparbottom :=G 0

@reversemargin :=G true END

  \normalmarginpar == BEGIN \@mparbottom :=G 0

@reversemargin :=G false END

\marginpar
181 \def\marginpar{%
182 \ifhmode
183  \@bsphack
184  \@floatpenalty -\@Mii
185 \else
186  \@floatpenalty-\@Miii
187 \fi
188 \ifinner
189  \@parmoderr
190  \@floatpenalty\z@
191 \else
192  \@next\@currbox\@freelist{}{}%
193  \@next\@marbox\@freelist{\global\count\@marbox\m@ne}%
194  {\@floatpenalty\z@
195  \@fltovf\def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}%
196 \fi
197 \@ifnextchar [\@xmpar\@ympar}
\@xmpar
198 \long\def\@xmpar[#1]#2{%
199 \@savemarbox\@marbox{#1}%
200 \@savemarbox\@currbox{#2}%
201 \@xympar}
\@ympar
202 \long\def\@ympar#1{%
203 \@savemarbox\@marbox{#1}%
204 \global\setbox\@currbox\copy\@marbox
205 \@xympar}
\@savemarbox
206 \long\def \@savemarbox #1#2{%
207 \global\setbox #1%
208  \color@vbox
209  \vtop{%
210  \hsize\marginparwidth
211  \@parboxrestore
212  \@marginparreset
213  #2%
214  \@minipagefalse

215  \outer@nobreak

216 }%

217  \color@endbox

218 }

\@marginparreset The rational for allowing these normally global flags to be set locally here, via \@parboxrestore was stated originally by Donald Arsenau and extended by Chris Rowley. It is because these flags are only set globally to true by section commands, and these should never appear within marginals or floats or, indeed, in any group; and they are only ever set globally to false when they are definitely true.

If anyone is unhappy with this argument then both flags should be treated as in \set@nobreak; otherwise this command will be redundant.

219 \def \@marginparreset {%
220  \reset@font
221  \normalsize
222 %        \let\if@nobreak\iffalse
223 %        \let\if@noskipsec\iffalse
224 %        \@setnobreak
225  \@setminipage

226 }

\@xympar

Setting the box here is done only because the code uses \end@float; it will be empty and gets discarded.

227 \def \@xympar{%
228 \ifnum\@floatpenalty <\z@\@cons\@currlist\@marbox\fi
229 \setbox\@tempboxa
230  \color@vbox
231  \vbox \bgroup
232 \end@float
233 \@ignorefalse
234 \@esphack

235 }

\reversemarginpar
\normalmarginpar
236 \def\reversemarginpar{\global\@mparbottom\z@ \@reversemargintrue}
237 \def\normalmarginpar{\global\@mparbottom\z@ \@reversemarginfalse}
238 \message{footnotes,}

61.2 Footnotes

\footnote{NOTE} : User command to insert a footnote.

\footnote[NUM]{NOTE}: User command to insert a footnote numbered NUM, where NUM is a number – 1, 2, etc. For example, if footnotes are numbered *, **, etc. within pages, then \footnote[2]{...} produces footnote ’**’. This command does not step the footnote counter.

\footnotemark[NUM] : Command to produce just the footnote mark in the text, but no footnote. With no argument, it steps the footnote counter before generating the mark.

\footnotetext[NUM]{TEXT} : Command to produce the footnote but no mark. \footnote is equivalent to

                           \footnotemark \footnotetext .

As in PLAIN, footnotes use \insert\footins, and the following parameters:

\footnotesize : Size-changing command for footnotes.

\footnotesep : The height of a strut placed at the beginning of

every footnote.

\skip\footins : Space between main text and footnotes. The rule separating footnotes from text occurs in this space. This space lies above the strut of height \footnotesep which is at the beginning of the first footnote.

\footnoterule : Macro to draw the rule separating footnotes from text. It is executed right after a \vspace of \skip\footins. It should take zero vertical space–i.e., it should to a negative skip to compensate for any positive space it occupies. (See PLAIN.TEX.)

\interfootnotelinepenalty : Interline penalty for footnotes.

\thefootnote : In usual LaTeX style, produces the footnote number. If footnotes are to be numbered within pages, then the document style file must include an \@addtoreset command to cause the footnote counter to be reset when the page counter is stepped. This is not a good idea, though, because the counter will not always be reset in time to ensure that the first footnote on a page is footnote number one.

\@thefnmark : Holds the current footnote’s mark–e.g., \dag or ’1’ or ’a’.

\@mpfnnumber : A macro that generates the numbers for \footnote

              and \footnotemark commands. It == \thefootnote

outside a minipage environment, but can be changed inside to generate numbers for

              \footnote's.

\@makefnmark : A macro to generate the footnote marker from \@thefnmark The default definition was

             \hbox{$^\@thefnmark$}.

This is now replaced by

             \textsuperscript{\@thefnmark}
\@makefntext{NOTE} :

Must produce the actual footnote, using \@thefnmark as the mark of the footnote and NOTE as the text. It is called when

    effectively inside a \parbox, with \hsize = \columnwidth.

For example, it might be as simple as

           $^{\@thefnmark}$ NOTE

In a minipage environment, \footnote and \footnotetext are redefined so that

(a) they use the counter mpfootnote

(b) the footnotes they produce go at the bottom of the minipage. The switch is accomplished by letting \@mpfn == footnote or mpfootnote

and \thempfn == \thefootnote or \thempfootnote, and by redefining
\@footnotetext to be \@mpfootnotetext in the minipage.
\footnote{NOTE} ==

BEGIN

\stepcounter{\@mpfn}

begingroup

   \protect == \noexpand
   \@thefnmark :=G eval (\thempfn)

endgroup

\@footnotemark
\@footnotetext{NOTE}

END

\footnote[NUM]{NOTE} ==

BEGIN

begingroup

   \protect == \noexpand

counter \@mpfn :=L NUM

   \@thefnmark :=G eval (\thempfn)

endgroup

\@footnotemark

\@footnotetext{NOTE}

END

\footnotemark  ==
BEGIN \stepcounter{footnote}

begingroup

       \protect == \noexpand
       \@thefnmark :=G eval(\thefootnote)

endgroup

    \@footnotemark

END

\footnotemark[NUM] ==

BEGIN

begingroup footnote counter :=L NUM

     \protect == \noexpand
    \@thefnmark :=G eval(\thefootnote)

endgroup

   \@footnotemark

END

\@footnotemark ==

BEGIN

\leavevmode
IF hmode THEN \@x@sf := \the\spacefactor FI

\@makefnmark % put number in main text

IF hmode THEN \spacefactor := \@x@sf FI

END

\footnotetext  ==
BEGIN begingroup \protect == \noexpand
                 \@thefnmark :=G eval (\thempfn)

endgroup

      \@footnotetext

END

\footnotetext[NUM] ==

BEGIN begingroup counter \@mpfn :=L NUM

                  \protect == \noexpand
                  \@thefnmark :=G eval (\thempfn)

endgroup

      \@footnotetext

END \footins L^{A}TEX does use the same insert for footnotes as PLAIN.

239 \newinsert\footins

L^{A}TEX leaves these initializations for the \footins insert.

240 \skip\footins=\bigskipamount % space added when footnote is present
241 \count\footins=1000 % footnote magnification factor (1 to 1)
242 \dimen\footins=8in % maximum footnotes per page

\footnoterule L^{A}TEX keeps PLAIN TEX’s \footnoterule as the default.

243 \def\footnoterule{\kern-3\p@
244 \hrule \@width 2in \kern 2.6\p@} % the \hrule is .4pt high
\thefootnote
245 \@definecounter{footnote}
246 \def\thefootnote{\@arabic\c@footnote}
\thempfootnote
247 \@definecounter{mpfootnote}
248 \def\thempfootnote{\itshape\@alph\c@mpfootnote}

\@makefnmark Default definition.

249 %\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
250 \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}

\textsuperscript This command provides superscript characters in the current text font. It’s implementation might change!!!

251 \DeclareRobustCommand*\textsuperscript[1]{%
252 \@textsuperscript{\selectfont#1}}

\@textsuperscript This command should not be used directly, but may be used to define other commands \textsuperscript, \@makefnmark. #1 should always start with a font selection command, to activate the font size switch.

253 \def\@textsuperscript#1{%
254 {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
\footnotesep
255 \newdimen\footnotesep
\footnote
256 \def\footnote{\@ifnextchar[\@xfootnote{\stepcounter\@mpfn
257  \protected@xdef\@thefnmark{\thempfn}%
258  \@footnotemark\@footnotetext}}
\@xfootnote
259 \def\@xfootnote[#1]{%
260 \begingroup
261  \csname c@\@mpfn\endcsname #1\relax
262  \unrestored@protected@xdef\@thefnmark{\thempfn}%
263 \endgroup
264 \@footnotemark\@footnotetext}

\@footnotetext
265 \long\def\@footnotetext#1{\insert\footins{%
266  \reset@font\footnotesize
267  \interlinepenalty\interfootnotelinepenalty
268  \splittopskip\footnotesep
269  \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
270  \hsize\columnwidth \@parboxrestore
271  \protected@edef\@currentlabel{%
272  \csname p@footnote\endcsname\@thefnmark

273 }%

274  \color@begingroup
275  \@makefntext{%
276  \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
277  \color@endgroup}}%
\footnotemark
278 \def\footnotemark{%
279 \@ifnextchar[\@xfootnotemark
280  {\stepcounter{footnote}%
281  \protected@xdef\@thefnmark{\thefootnote}%
282  \@footnotemark}}
\@xfootnotemark
283 \def\@xfootnotemark[#1]{%
284 \begingroup
285  \c@footnote #1\relax
286  \unrestored@protected@xdef\@thefnmark{\thefootnote}%
287 \endgroup
288 \@footnotemark}
\@footnotemark
289 \def\@footnotemark{%
290 \leavevmode
291 \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
292 \@makefnmark
293 \ifhmode\spacefactor\@x@sf\fi
294 \relax}
\footnotetext
295 \def\footnotetext{%
296  \@ifnextchar [\@xfootnotenext
297  {\protected@xdef\@thefnmark{\thempfn}%
298  \@footnotetext}}
\@xfootnotenext
299 \def\@xfootnotenext[#1]{%
300 \begingroup
301  \csname c@\@mpfn\endcsname #1\relax
302  \unrestored@protected@xdef\@thefnmark{\thempfn}%

303 \endgroup
304 \@footnotetext}
\thempfn \@mpfn
305 \def\@mpfn{footnote}
306 \def\thempfn{\thefootnote}

307 ⟨/2ekernel⟩

File H

ltidxglo.dtx

62 Index and Glossary Generation

Index and Glossary commands.

\makeindex A preamble command to turn on indexing. \makeglossary A preamble command to turn on making glossary entries.

\index Make an index entry for #1. \glossary Make a glossary entry for #1.

\makeindex ==

BEGIN

\index == BEGIN \@bsphack
\begingroup
\protect{X} == \string X\space

%% added 3 Feb 87 for \index

commands

%% in \footnotes

re-\catcode special characters to ’other’

\@wrindex

END

\@wrindex{ITEM} ==

BEGIN

write of {\indexentry{ITEM}{page number}}

\endgroup
\@esphack

END

INITIALIZATION:

\index == BEGIN \@bsphack
\begingroup

re-\catcode special characters (in case ’%’ there)

\@index

END

\@index{ITEM} == BEGIN \endgroup \@esphack END

Changes made 14 Apr 89 to write \glossaryentry's instead of \indexentry's on the .glo file.

1 ⟨∗2ekernel⟩

2 \message{index,}

\makeindex
 3 \def\makeindex{%
 4 \newwrite\@indexfile
 5 \immediate\openout\@indexfile=\jobname.idx
 6 \def\index{\@bsphack\begingroup
 7  \@sanitize
 8  \@wrindex}\typeout
 9  {Writing index file \jobname.idx}%

Opening the write channel should be done only once since on some OS multiple opens are forbidden and in any case it is useless. So we turn this into a no-op after use.

10 \let\makeindex\@empty

11 }

12 \@onlypreamble\makeindex
\@wrindex
13 \def\@wrindex#1{%
14 \protected@write\@indexfile{}%
15  {\string\indexentry{#1}{\thepage}}%
16 \endgroup
17 \@esphack}
\index
18 \def\index{\@bsphack\begingroup \@sanitize\@index}
\@index
19 \def\@index#1{\endgroup\@esphack}
\makeglossary
20 \def\makeglossary{%
21 \newwrite\@glossaryfile
22 \immediate\openout\@glossaryfile=\jobname.glo
23 \def\glossary{\@bsphack\begingroup
24  \@sanitize
25  \@wrglossary}\typeout
26  {Writing glossary file \jobname.glo }%

Opening the write channel should be done only once since on some OS multiple opens are forbidden and in any case it is useless. So we turn this into a no-op after use.

27 \let\makeglossary\@empty

28 }

29 \@onlypreamble\makeglossary
\@wrglossary
30 \def\@wrglossary#1{%
31 \protected@write\@glossaryfile{}%
32  {\string\glossaryentry{#1}{\thepage}}%
33 \endgroup
34 \@esphack}

File H: ltidxglo.dtx Date: 1996/01/20 Version v1.1e 362

\glossary
35 \def\glossary{\@bsphack\begingroup\@sanitize\@index}

36 ⟨/2ekernel⟩

File H: ltidxglo.dtx Date: 1996/01/20 Version v1.1e 363

File I

ltbibl.dtx

63 Bibliography Generation

A bibliography is created by the thebibliography environment, which generates a title such as “References”, and a list of entries. The BIBTEX program will create a file containing such an environment, which will be read in by the \bibliography command. With BIBTEX, the following commands will be used.

\bibliography \bibliography{⟨file1,file2, …,filen⟩} : specifies the bibdata files. Writes a

\bibdata entry on the .aux file and tries to read in mainfile.bbl.

\bibliographystyle      \bibliographystyle{⟨style⟩} : Writes a \bibstyle entry on the .aux file.

thebibliography The thebibliography environment is a list environment. To save the use of an extra counter, it should use enumiv as the item counter. Instead of using \item, items in the bibliography are produced by the following commands: \bibitem{⟨name⟩} : Produces a numbered entry cited as ⟨name⟩. \bibitem[⟨label⟩]{⟨name⟩} : Produces an entry labeled by ⟨Label⟩ and cited by ⟨name⟩.

The former is used for bibliographies with citations like [1], [2], etc.; the latter is used for citations like [Knuth82].

The document class must define the thebibliography environment. This environment has a single argument, which is the widest bibliography label– e.g., if the [Knuth67] is the widest entry, then this argument will be Knuth67. The \thebibliography command must begin a list environment, which the

\endthebibliography command ends.

\cite Entries are cited by the command \cite{⟨name⟩}. \nocite \nocite{⟨citations⟩} puts information on the .aux file that causes BibTEX to

include the {⟨citations⟩} list in the bibliography, but puts nothing in the text.

\nocite{*} is special: it tells BibTEX to put the whole of a collection of references into the bibiography.

1 ⟨∗2ekernel⟩

 2 \message{bibliography,}

PARAMETERS

\@cite : A macro such that \@cite{LABEL1,LABEL2}{NOTE}

produces the output for a \cite[NOTE]{FOO1,FOO2}

command, where entry FOOi is defined by \bibitem[LABELi]{FOOi}. The switch @tempswa is true if the optional NOTE

argument is present. The default definition is :

\@cite{LABELS}{NOTE} == BEGIN [LABELS

IF @tempswa = T THEN , NOTE FI ]

END

\@biblabel : A macro to produce the label in the bibliography entry. For \bibitem[LABEL]{NAME}, the label is generated by \@biblabel{LABEL}. It has the default definition \@biblabel{LABEL} -> [LABEL].

CONVENTION

\b@FOO : The name or number of the reference created by \cite{FOO} E.g., if \cite{FOO} -> [17] , then \b@FOO -> 17.

\bibitem
 3 \def\bibitem{\@ifnextchar[\@lbibitem\@bibitem}
\@lbibitem
 4 \def\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]\if@filesw
 5  {\let\protect\noexpand
 6  \immediate
 7  \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\@bibitem
 8 \def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
 9  {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
\bibcite
10 \def\bibcite{\@newl@bel b}
\citation
11 \let\citation\@gobble
\cite
12 \DeclareRobustCommand\cite{%
13 \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

\@citex \penalty\@m added to definition of \@citex to allow a line break after the ‘,’ in

citations like [Jones80,Smith77] (Added 23 Oct 86)

space added after the ‘,’ (21 Nov 87)

14 \def\@citex[#1]#2{%
15 \let\@citea\@empty
16 \@cite{\@for\@citeb:=#2\do
17  {\@citea\def\@citea{,\penalty\@m\ }%
18  \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
19  \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi

20  \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
21  \G@refundefinedtrue
22  \@latex@warning
23  {Citation `\@citeb' on page \thepage \space undefined}}%
24  {\hbox{\csname b@\@citeb\endcsname}}}}{#1}}
\bibdata \bibstyle
25 \let\bibdata=\@gobble
26 \let\bibstyle=\@gobble
\bibliography
27 \def\bibliography#1{%
28 \if@filesw
29  \immediate\write\@auxout{\string\bibdata{#1}}%
30 \fi
31 \@input@{\jobname.bbl}}
\bibliographystyle
32 \def\bibliographystyle#1{%
33 \ifx\@begindocumenthook\@undefined\else
34  \expandafter\AtBeginDocument
35 \fi
36  {\if@filesw
37  \immediate\write\@auxout{\string\bibstyle{#1}}%
38  \fi}}

\nocite (Added 14 Jun 85)

This puts information on the .aux file that causes BibTEX to include the citation list in the bibliography, but puts nothing in the text.

RmS 93/08/06: Made loop for \nocite like that for \@citex, to get rid of leading spaces.

39 \def\nocite#1{\@bsphack
40 \@for\@citeb:=#1\do{%
41  \edef\@citeb{\expandafter\@firstofone\@citeb}%
42  \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
43  \@ifundefined{b@\@citeb}{\G@refundefinedtrue
44  \@latex@warning{Citation `\@citeb' undefined}}{}}%
45 \@esphack}

Since \nocite{*} should not produce a warning about undefined citation keys (seee PR 557), we need to set the control sequence ‘\b@*’ to something other than \relax. As a result \cite{*} will not warn either (but that never worked with BibTEX in the first place).

46 \expandafter\let\csname b@*\endcsname\@empty

63.1 Default definitions

\@cite
47 \def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}

\@biblabel
48 \def\@biblabel#1{[#1]}

49 ⟨/2ekernel⟩

File J

ltpage.dtx

64 Page styles and related commands

64.1 Page Style Commands

\pagestyle{⟨style⟩} : sets the page style of the current and succeeding pages to style

\thispagestyle{⟨style⟩} : sets the page style of the current page only to style. To define a page style style, you must define \ps@style to set the page style

parameters.

64.2 How a page style makes running heads and feet

The \ps@. . . command defines the macros \@oddhead, \@oddfoot, \@evenhead,

and \@evenfoot to define the running heads and feet. (See output routine.) To make headings determined by the sectioning commands, the page style defines

the commands \chaptermark, \sectionmark, etc., where \chaptermark{⟨text⟩}

is called by \chapter to set a mark. The \...mark commands and the \...head macros are defined with the help of the following macros.

(All the \...mark commands should be initialized to no-ops.)

64.3 marking conventions

L^{A}TEX 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 output routine, gets the current ‘left’ mark. Works like

TEX’s \botmark.

\rightmark : Used in the output routine, gets the current ‘right’ mark. Works like TEX’s \firstmark. The marking commands work reasonably well for right marks ‘numbered within’ left marks—e.g., the left mark is changed by a \chapter command and the right mark is changed by a \section command. However, it does produce somewhat anomalous results if 2 \markboth’s occur on the same page.

Commands like \tableofcontents that should set the marks in some page styles use a \@mkboth command, which is \let by the pagestyle command (\ps@...) to \markboth for setting the heading or to \@gobbletwo to do nothing.

1 ⟨∗2ekernel⟩

\pagestyle User command to set the page style for this and following pages.

 2 \def\pagestyle#1{%
 3 \@ifundefined{ps@#1}%

 4  \undefinedpagestyle
 5  {\@nameuse{ps@#1}}}

\thispagestyle User command to set the page style for this page only.

 6 \def\thispagestyle#1{%
 7 \@ifundefined{ps@#1}%
 8  \undefinedpagestyle
 9  {\global\@specialpagetrue\gdef\@specialstyle{#1}}}

\ps@empty The empty page style: No head or foot line.

10 \def\ps@empty{%
11 \let\@mkboth\@gobbletwo\let\@oddhead\@empty\let\@oddfoot\@empty
12 \let\@evenhead\@empty\let\@evenfoot\@empty}

\ps@plain The plain page style: No head, centred page number in foot.

13 \def\ps@plain{\let\@mkboth\@gobbletwo
14  \let\@oddhead\@empty\def\@oddfoot{\reset@font\hfil\thepage
15  \hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot}
\@leftmark \@rightmark We implement \@leftmark and \@rightmark in terms of already defined com-

mands to save token space. We can’t get rid of them since they are sometimes used in applications.

16 \let\@leftmark\@firstoftwo
17 \let\@rightmark\@secondoftwo

\markboth \markright User commands for setting L^{A}TEX marks.

Test for \@nobreak added 15 Apr 86 in \markboth and \markright letting \label and \index to \relax added 22 Feb 86 so these commands can appear in sectioning command arguments RmS 91/06/21 Same for \glossary

18 \def\markboth#1#2{\gdef\@themark{{#1}{#2}}{%
19  \let\protect\@unexpandable@protect
20  \let\label\relax \let\index\relax \let\glossary\relax
21  \mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
22 \def\markright#1{{\let\protect\@unexpandable@protect
23  \let\label\relax \let\index\relax \let\glossary\relax
24  \expandafter\@markright\@themark
25  {#1}\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
\@markright \leftmark \rightmark
26 \def\@markright#1#2#3{\gdef\@themark{{#1}{#3}}}
27 \def\leftmark{\expandafter\@leftmark\botmark{}{}}
28 \def\rightmark{\expandafter\@rightmark\firstmark{}{}}

\@themark Initialise L^{A}TEX’s marks without setting a TEX mark ⟨whatsit⟩.

29 \def\@themark{{}{}}

\mark Test versions of L^{A}TEX 2ε initialised TEX’s \mark system at this point, but this was removed before the first release.

\AtBeginDocument{\mark{{}{}}}

File J: ltpage.dtx Date: 1996/04/18 Version v1.0i 369 \raggedbottom \raggedbottom typesets pages with no vertical stretch, so they have their natural

height instead of all being exactly the same height. (Uses a space of .0001fil to avoid interfering with the 1fil space of \newpage.)

30 \def\raggedbottom{%
31 \def\@textbottom{\vskip \z@ \@plus.0001fil}\let\@texttop\relax}

\flushbottom \flushbottom: Inverse of \raggedbottom — makes all pages the same height.

32 \def\flushbottom{%
33 \let\@textbottom\relax \let\@texttop\relax}

\sloppy \sloppy will never (well, hardly ever) produce overfull boxes, but may produce underfull ones. (14 June 85)

34 \def\sloppy{%
35 \tolerance 9999%
36 \emergencystretch 3em%
37 \hfuzz .5\p@
38 \vfuzz\hfuzz}

sloppypar A sloppypar environment is equivalent to {\par \sloppy ... \par}.

39 \def\sloppypar{\par\sloppy}
40 \def\endsloppypar{\par}

\fussy Resets TEX’s parameters to their normal finicky values.

41 \def\fussy{%
42 \emergencystretch\z@
43 \tolerance 200%
44 \hfuzz .1\p@
45 \vfuzz\hfuzz}

\overfullrule L^{A}TEX default is no overfull box rule. Changed by document class option.

46 \overfullrule 0pt

47 ⟨/2ekernel⟩

File K

ltoutput.dtx

65 Output Routine

65.1 Floats

The ‘2ekernel’ code ensures that a \usepackage{autoout1} is essentially ignored if a ‘full’ format is being used that has the autoload file mode already in the format.

1 ⟨defx⟩\begingroup
2 ⟨defx⟩\makeatletter
3 ⟨defx⟩\nfss@catcodes
4 ⟨2ekernel⟩\expandafter\let\csname ver@autoout1.sty\endcsname\fmtversion

5 ⟨∗2ekernel | autoload⟩

6 \message{output,}

****************************************

* OUTPUT * ****************************************

PAGE LAYOUT PARAMETERS

\topmargin : Extra space added to top of page. @twoside : boolean. T if two-sided printing

\oddsidemargin : IF @twoside = T

THEN extra space added to left of odd-numbered

pages. ELSE extra space added to left of all pages.

\evensidemargin : IF @twoside = T

THEN extra space added to left of

even-numbered

pages.

\headheight : height of head \headsep : separation between head and text \footskip : distance separation between baseline of last

line of text and baseline of foot.

Note difference between \footSKIP and \headSEP.

\textheight : height of text on page, excluding head and foot \textwidth : width of printing on page \columnsep : IF @twocolumn = T

THEN width of space between columns

\columnseprule : IF @twocolumn = T THEN width of rule between columns (0 if none).

\columnwidth : IF @twocolumn = T

  THEN (\textwidth - \columnsep)/2
  ELSE \textwidth

It is set by the \twocolumn and

\onecolumn commands.

\@textbottom : Command executed at bottom of vbox holding text of

page (including figures). The \raggedbottom command almost \let's this to \vfil (actually sets it to \vskip \z@ plus.0001fil). Should have depth 0pt.

\@texttop : Command executed at top of vbox holding text of page (including figures). Used by letter style; can also be used to produce centered pages.

Let to \relax by \raggedbottom and
\flushbottom.

Page layout must initialize \@colht and \@colroom to \textheight.

PAGE STYLE PARAMETERS:

\floatsep : Space left between floats. \textfloatsep : Space between last top float or first bottom float

and the text.

\topfigrule : Command to place rule (or whatever) between floats at top of page and text. Executed in inner vertica mode right before the \textfloatsep skip separating the floats from the text. Must occupy zero vertical space. (See \footnoterule.)

\botfigrule  : Same as \topfigrule, but put after the

\textfloatsep skip separating text from the floats at bottom of page.

\intextsep : Space left on top and bottom of an in-text float. \dblfloatsep : Space between double-column floats. \dbltextfloatsep : Space between top double-column floats

and text.

\dblfigrule : Similar to \topfigrule, but for double-column

floats.

\@fptop : Glue to go at top of float column – must be 0pt +

stretch

\@fpsep : Glue to go between floats in a float column. \@fpbot : Glue to go at bottom of float column

– must be 0pt + stretch

\@dblfptop, \@dblfpsep, \@dblfpbot

: Analogous for double-column float page in two-column format.

FOOTNOTES: As in PLAIN, footnotes use \insert\footins.

PAGE LAYOUT SWITCHES AND MACROS

@twocolumn : Boolean. T if two columns per page globally.

PAGE STYLE MACROS AND SWITCHES

\@oddhead : IF @twoside = T

THEN macro to generate head of

odd-numbered

pages. ELSE macro to generate head of all pages.

\@evenhead : IF @twoside = T

THEN macro to generate head of

even-numbered

pages.

\@oddfoot : IF @twoside = T

THEN macro to generate foot of

odd-numbered

pages. ELSE macro to generate foot of all pages.

\@evenfoot : IF @twoside = T

THEN macro to generate foot of

even-numbered

pages.

@specialpage : boolean. T if current page is to have a special

format.

\@specialstyle : If its value is foo then

IF @specialpage = T

THEN the command \ps@foo is executed to temporarily reset the page style parameters before composing the current page. This command should execute only \def's

and \edef's, making only local definitions.

FLOAT PLACEMENT PARAMETERS

The following parameters are set by the macro \@floatplacement.

When \@floatplacement is called,

\@colht is the height of the page or column being built. I.e.: * For single-column page it equals \textheight.

* For double-column page it equals \textheight - height

of double-column floats on page.

Note that some are set globally and some locally:

\@topnum :=G Maximum number of floats allowed on the top of a

column.

\@toproom :=G Maximum amount of top of column devoted to floats– excluding \textfloatsep separation below the floats and \floatsep separation between them. For two-column output, should be computed as a function

              of \@colht.
\@botnum, \@botroom

: Analogous to above.

\@colnum :=G Maximum number of floats allowed in a column,

including in-text floats.

\@textmin :=L Minimum amount of text (excluding footnotes) that

must appear on a text page.

%% 27 Sep 85 : made local to

                 %% \@addtocurcol and \@addtonextcol

It is now also used locally in processing double floats.

\@fpmin :=L Minimum height of floats in a float column.

The macro \@dblfloatplacement sets the following parameters.

\@dbltopnum :=G Maximum number of double-column floats allowed at

the top of a two-column page.

\@dbltoproom :=G Maximum height of double-column floats allowed at

top of two-column page.

\@fpmin :=L Minimum height of floats in a float column. It should also perform the following local assignments where necessary

– i.e., where the new value differs from the old one:

  \@fptop  :=L \@dblfptop
  \@fpsep  :=L \@dblfpsep
  \@fpbot  :=L \@dblfpbot

OUTPUT ROUTINE VARIABLES

\@colht : The total height of the current column. In single column style, it equals \textheight. In two-column style, it is \textheight minus the height of the double-column floats on the current page. MUST BE INITIALIZED TO

\textheight.

\@colroom : The height available in the current column for text and footnotes. It equals \@colht minus the height of all floats committed to the top and bottom of the current

column.

\@textfloatsheight : The total height of in-text floats on the current page.

\footins : Footnote insertion number.

\@maxdepth : Saved value of TeX’s \maxdepth. Must be set when any routine sets \maxdepth.

CALLING THE OUTPUT ROUTINE

————————–

The output routine is called either by TeX’s normal page-breaking mechanism, or by a macro putting a penalty < or = -10000 in the output list. In the latter case, the penalty indicates why the output routine was called, using the following code.

penalty reason

——- ——

  -10000  \pagebreak
            \newpage
  -10001  \clearpage (\penalty -10000 \vbox{} \penalty -10001)

-10002 float insertion, called from horizontal mode

-10003 float insertion, called from vertical mode.

-10004 float insertion.

Note: A float or marginpar puts the following sequence in the output

list: (i) a penalty of -10004, (ii) a null \vbox (iii) a penalty of -10002 or -10003.

This solves two special problems:

1. If the float comes right after a \newpage or \clearpage, then the first penalty is ignored, but the second one invokes the output routine.

2. If there is a split footnote on the page, the second ’page’ puts out the rest of the footnote.

THE OUTPUT ROUTINE ——————

FUNCTIONS USED IN THE OUTPUT ROUTINE:

\@outputpage : Produces an output page with the contents of box \@outputbox as the text part.

             Also sets \@colht :=G \textheight.

The page style is determined as follows.

IF @thispagestyle = true

  THEN use \thispagestyle style

ELSE use ordinary page style.

\@tryfcolumn\FLIST : Tries to form a float column composed of floats

from \FLIST (if nonempty) with the following parameters: \@colht : height of box \@fpmin : minimum height of floats in the box \@fpsep : interfloat space \@fptop : glue at top of box \@fpbot : glue at bottom of box.

If it succeeds, then it does the following: * \@outputbox :=L the composed float box.

* @fcolmade :=G true

* \FLIST :=G \FLIST - floats put in box

* \@freelist :=G \@freelist + floats put in box

If it fails, then:

* @fcolmade :=G false NOTE: BIT MUST BE A SINGLE TOKEN!

\@makefcolumn \FLIST : Same as \@tryfcolumn except that it

fails to make a float column only if \FLIST is empty. Otherwise, it makes a float column containing at least the first box in \FLIST, disregarding \@fpmin.

\@startcolumn :
Calls \@tryfcolumn\@deferlist. If \@tryfcolumn returns with

(globally set) @fcolmade = false, then:

* Globally sets \@toplist and \@botlist to floats from \@deferlist to go at top and bottom of column, deleting them from \@deferlist. It does this using \@colht as the total height, the page

  style parameters \@floatsep and \@textfloatsep, and

the float placement parameters \@topnum, \@toproom,

  \@botnum, \@botroom, \@colnum and \textfraction.

* Globally sets \@colroom to \@colht minus the height of the added floats.

\@startdblcolumn :
Calls \@tryfcolumn\@dbldeferlist{8}. If \@tryfcolumn returns

with (globally set) @fcolmade = false, then:

* Globally sets \@dbltoplist to floats from \@dbldeferlist to go at top and bottom of column, deleting them from \@dbldeferlist. It does this using \textheight as the

total height, and the parameters \@dblfloatsep, etc.

* Globally sets \@colht to \textheight minus the height of the added floats.

\@combinefloats : Combines the text from box

\@outputbox with the floats from \@toplist and
\@botlist,

putting the new box in \@outputbox. It uses \floatsep and \textfloatsep for the appropriate separations. It puts the elements of \TOPLIST and \BOTLIST onto \@freelist, and makes those lists null.

\@makecol : Makes the contents of \box255 plus the accumulated footnotes, plus the floats in \@toplist and \@botlist, into a single column of height \@colht (unless the page height has been locally changed), which it puts into box \@outputbox. It puts boxes in \@midlist back

onto \@freelist and restores \maxdepth.

\@opcol : Outputs a column whose text is in box \@outputbox If @twocolumn = false, then it calls \@outputpage,

sets \@colht :=G \textheight, and calls
\@floatplacement.

If @twocolumn = true, then:

If @firstcolumn = true, then it puts box \@outputbox into \@leftcolumn and sets @firstcolumn :=G false.

If @firstcolumn = false, then it puts out the current two-column page, any possible two-column float pages, and determines \@dbltoplist for the next page.

USER COMMANDS THAT CALL OR AFFECT THE

OUTPUT ROUTINE —————————————————-

\newpage == BEGIN \par\vfil\penalty -10000 END
\clearpage == BEGIN \newpage

\write -1{} % Part of hack to make sure no

       \vbox{}        % \write's get lost.
       \penalty -10001

END

\cleardoublepage == BEGIN \clearpage

if @twoside = true and c@page is even

                            then \hbox{} \newpage fi

END

\twocolumn[BOX] : starts a new page, chnaging to twocolumn setting and puts BOX in a parbox of width \textwidth across the top. Useful for full-width titles for double-column pages. SURPRISE: The stretch from \@dbltextfloatsep will be inserted

between the BOX and the top of the two columns.

FLOAT-HANDLING MECHANISMS ————————-

The float environment obtains an insertion number B from the \@freelist (see below for a description of list manipulation), puts the float into box B and sets \count B to a FLOAT SPECIFIER. For a normal (not double-column) float, it then causes a page break in one of the following two ways:

- In outer hmode: \vadjust{\penalty -10002}

- In vmode : \penalty -10003. For a double-column float, it puts B onto the \@dbldeferlist. The float specifier has two components:

* A PLACEMENT SPECIFICATION, describing where the float may be placed.

* A TYPE, which is a power of two–e.g., figures might be

type 1 floats, tables type 2 floats, programs type 4 floats, etc. The float specifier is encoded as follows, where bit 0 is the least significant bit.

Bit Meaning

— ——-

0 1 iff the float may go where it appears in the text.

1 1 iff the float may go on the top of a page.

2 1 iff the float may go on the bottom of a page.

3 1 iff the float may go on a float page.

4 1 unless the PLACEMENT incluses a !

5 1 iff a type 1 float

6 1 iff a type 2 float

etc.

A negative float specifier is used to indicate a marginal note.

MACROS AND DATA STRUCTURES FOR PROCESSING FLOATS

————————————————

A FLOAT LIST consisting of the floats in boxes \boxa ... \boxN has the form:

       \@elt \boxa ... \@elt \boxN

where \boxI is defined by

       \newinsert\boxI

Normally, \@elt is \let to \relax. A test can be performed on the entire float list by locally \def'ing \@elt appropriately and executing the list. This is a lot more efficient than looping through the list.

The following macros are used for manipulating float lists.

\@next \CS \LIST {NONEMPTY}{EMPTY} == %% NOTE: ASSUME

\@elt = \relax
  BEGIN assume that \LIST == \@elt \B1 ... \@elt \Bn

if n = 0 then EMPTY else \CS :=L \B1

                 \LIST :=G \@elt \B2 ... \@elt \Bn

NONEMPTY

fi END

\@bitor\NUM\LIST : Globally sets switch @test to the disjunction for all I of bit log2 \NUM of the float specifiers of all the floats in \LIST. I.e., @test is set to true iff there is at least one float in \LIST having bit log2 \NUM of its float specifier equal to 1.

Note: log2 [(\count I)/32] is the bit number corresponding to the type of float I. To see if there is any float in \LIST having the same type as float I, you run \@bitor with

\NUM = [(\count I)/32] * 32.

\@bitor\NUM\LIST ==

BEGIN @test :=G false

    { \@elt \CTR == if \NUM <> 0 then
                        if \count\CTR / \NUM is odd

then @test := true fi fi

      \LIST
    }

END

\@cons\LIST\NUM : Globally sets \LIST := \LIST * \@elt \NUM
\@cons\LIST\NUM ==
BEGIN {  \@elt == \relax
\LIST :=G \LIST \@elt \NUM
}

BOX LISTS FOR FLOAT-PLACEMENT ALGORITHMS

\@freelist : List of empty boxes for placing new floats. \@toplist : List of floats to go at top of current column. \@midlist : List of floats in middle of current column. \@botlist : List of floats to go at bottom of current column. \@deferlist : List of floats to go after current column. \@dbltoplist : List of double-col. floats to go at top of current

page.

\@dbldeferlist : List of double-column floats to go on subsequent pages.

FLOAT-PLACEMENT ALGORITHMS

\@addtobot : Tries to put insert \@currbox on \@botlist.

Called only when:

* \ht BOX < \@colroom
* type of \@currbox not on \@deferlist
* \@colnum > 0

* @insert = false If it succeeds, then:

* sets @insert true

* decrements \@botroom by \ht BOX

* decrements \@botnum and \@colnum by 1

* decrements \@colroom by \ht BOX + either

\floatsep

or \textfloatsep, as appropriate.

* sets \maxdepth to 0pt

\@addtotoporbot : Tries to put insert \@currbox on \@toplist or
  \@botlist.

Called only under same conditions as \@addtobot. If it succeeds, then:

* sets @insert true

      * decrements \@toproom or \@botroom by \ht

BOX

* decrements \@colnum and either \@topnum or

        \@botnum by 1

* decrements \@colroom by \ht BOX +

\floatsep

or \textfloatsep, as appropriate.

\@addtocurcol : Tries to add \@currbox to current column, setting @insert true if it succeeds, false otherwise. It will add \@currbox to top only if bit 0 of \count \@currbox is 0, and to the bottom only if bit 0 = 0 or an earlier float of the same type is put on the bottom. If the float is put in the text, then

\penalty\interlinepenalty is put

right after the float, before the following \vskip,

and \outputpenalty :=L 0.

\@addtonextcol : Tries to add \@currbox to the next column, setting @insert true if it succeeds, false otherwise.

\@addtodblcol : Tries to add \@currbox to the next double-column page, adding it to \@dbltoplist if it succeeds and

\@dbldeferlist if it fails.

\@addmarginpar ==

BEGIN

if \@currlist nonempty
then remove \@marbox from \@currlist
add \@marbox and \@currbox to \@freelist

%% NOTE: \@currbox = left box

else LaTeX error: ? %% shouldn’t happen fi \@tempcnta := 1 %% 1 = right, -1 = left if @twocolumn = true

then if @firstcolumn = true

then \@tempcnta := -1

fi else if @mparswitch = true

then if count0 odd

    else \@tempcnta := -1

fi fi if @reversemargin = true

          then \@tempcnta := -\@tempcnta

fi fi

if \@tempcnta < 0 then \box\@marbox :=G \box\@currbox

fi

\@tempdima :=L maximum(\@mparbottom - \@pageht
                                      + ht of \@marbox, 0)

if \@tempdima > 0 then LaTeX warning: ’marginpar moved’ fi

\@mparbottom :=G \@pageht + \@tempdima + depth of \@marbox
                     + \marginparpush
\@tempdima :=L \@tempdima - ht of \@marbox
\box\@marbox :=G \box\@currbox
                           \vbox { \vskip \@tempdima
                                   \box\@marbox
                                  }

height of \@marbox :=G depth of \@marbox :=G 0

\kern -\@pagedp
\nointerlineskip
\hbox{ if @tempcnta > 0 then \hskip \columnwidth
                            \hskip \marginparsep
                       else \hskip -\marginparsep
                            \hskip -\marginparwidth

fi

       \box\@marbox \hss
     }
\nobreak
\nointerlineskip
\hbox{\vrule height 0 width 0 depth \@pagedp}

END

Floats and marginpars add a lot of dead cycles.

7 \maxdeadcycles = 100
8 \let\@elt\relax
9 \def\@next#1#2#3#4{\ifx#2\@empty #4\else
10 \expandafter\@xnext #2\@@#1#2#3\fi}
11 \def\@xnext \@elt #1#2\@@#3#4{\def#3{#1}\gdef#4{#2}}

\changes{v1.1v}{1996/07/26}{put \cs{global} into definition}

12 \def\@testfalse{\global\let\if@test\iffalse}
13 \def\@testtrue {\global\let\if@test\iftrue}
14 \@testfalse

\changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}}

15 \def\@bitor#1#2{\@testfalse {\let\@elt\@xbitor
16 \@tempcnta #1\relax #2}}

RmS 91/11/22: Added test for |\count#1 = 0|. Suggested by Chris Rowley.

\changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}}

17 \def\@xbitor #1{\@tempcntb \count#1
18 \ifnum \@tempcnta =\z@
19 \else
20  \divide\@tempcntb\@tempcnta
21  \ifodd\@tempcntb \@testtrue\fi
22 \fi}

DEFINITION OF FLOAT BOXES:

23 \newinsert\bx@A
24 \newinsert\bx@B
25 \newinsert\bx@C
26 \newinsert\bx@D
27 \newinsert\bx@E
28 \newinsert\bx@F
29 \newinsert\bx@G
30 \newinsert\bx@H
31 \newinsert\bx@I
32 \newinsert\bx@J
33 \newinsert\bx@K
34 \newinsert\bx@L
35 \newinsert\bx@M
36 \newinsert\bx@N
37 \newinsert\bx@O
38 \newinsert\bx@P
39 \newinsert\bx@Q
40 \newinsert\bx@R
41 \gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E
42  \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J
43  \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N
44  \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R}
45 \gdef\@toplist{}
46 \gdef\@botlist{}
47 \gdef\@midlist{}
48 \gdef\@currlist{}
49 \gdef\@deferlist{}
50 \gdef\@dbltoplist{}
51 \gdef\@dbldeferlist{}

PAGE LAYOUT PARAMETERS

52 \newdimen\topmargin
53 \newdimen\oddsidemargin
54 \newdimen\evensidemargin

55 \let\@themargin=\oddsidemargin
56 \newdimen\headheight
57 \newdimen\headsep
58 \newdimen\footskip
59 \newdimen\textheight
60 \newdimen\textwidth
61 \newdimen\columnwidth
62 \newdimen\columnsep
63 \newdimen\columnseprule
64 \newdimen\marginparwidth
65 \newdimen\marginparsep
66 \newdimen\marginparpush

\AtBeginDvi \@begindvibox We use a box register in which to put stuff that must appear before anything else

in the .dvi file.

The stuff in the box should not add any typeset material to the page when it is unboxed.

67 \newbox\@begindvibox
68 \def \AtBeginDvi #1{%
69 \global \setbox \@begindvibox
70  \vbox{\unvbox \@begindvibox #1}%

71 }

\@maxdepth This is not the right place to set this; it needs to be set in a class/style file when

\maxdepth is set.

Also, many settings to \maxdepth should be to \@maxdepth, probably?

72 \newdimen\@maxdepth
73 \@maxdepth = \maxdepth
\paperheight \paperwidth New \paper. . . registers.
74 \newdimen\paperheight
75 \newdimen\paperwidth
\if@insert \if@fcolmade \if@specialpage \if@firstcolumn \if@twocolumn \if@twoside \if@reversemarginpar \if@mparswitch \col@number Local switches first:
76 \newif \if@insert

These should definitely be global:

77 \newif \if@fcolmade
78 \newif \if@specialpage \@specialpagefalse

These should be global but are not always set globally in other files.

79 \newif \if@firstcolumn \@firstcolumntrue
80 \newif \if@twocolumn   \@twocolumnfalse

Not sure about these: two questions. Should things which must apply to a whole doument be local or global (they probably should be ‘preamble only’ commands)? Are these three such things?

81 \newif \if@twoside     \@twosidefalse
82 \newif \if@reversemargin \@reversemarginfalse
83 \newif \if@mparswitch  \@mparswitchfalse

This counter has been imported from ‘multicol’.

 84 \newcount \col@number
 85 \col@number \@ne

INTERNAL REGISTERS

 86 \newcount\@topnum
 87 \newdimen\@toproom
 88 \newcount\@dbltopnum
 89 \newdimen\@dbltoproom
 90 \newcount\@botnum
 91 \newdimen\@botroom
 92 \newcount\@colnum
 93 \newdimen\@textmin
 94 \newdimen\@fpmin
 95 \newdimen\@colht
 96 \newdimen\@colroom
 97 \newdimen\@pageht
 98 \newdimen\@pagedp
 99 \newdimen\@mparbottom \@mparbottom\z@
100 \newcount\@currtype
101 \newbox\@outputbox
102 \newbox\@leftcolumn
103 \newbox\@holdpg
104 \def\@thehead{\@oddhead} % initialization
105 \def\@thefoot{\@oddfoot}

\clearpage The tests at the beginning are an experimental attempt to avoid a completely empty page after a \twocolumn[...]. This prevents the text from the argument vanishing into a float box, never to be seen again. We hope that it does not produce wrong formatting in other cases.

106 \def\clearpage{%
107 \ifvmode
108  \ifnum \@dbltopnum =\m@ne
109  \ifdim \pagetotal <\topskip
110  \hbox{}%
111  \fi
112  \fi
113 \fi
114 \newpage
115 \write\m@ne{}%
116 \vbox{}%
117 \penalty -\@Mi

118 }

\cleardoublepage
119 \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
120  \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}

121 ⟨/2ekernel | autoload⟩

\onecolumn

122 ⟨∗2ekernel | autoload | fltrace⟩

123 \def\onecolumn{%
124 \clearpage
125 \global\columnwidth\textwidth
126 \global\hsize\columnwidth
127 \global\linewidth\columnwidth
128 \global\@twocolumnfalse
129 \col@number \@ne
130 \@floatplacement}

\newpage The two checks at the beginning ensure that an item label or run-in section title immediately before a \newpage get printed on the correct page, the one before the page break.

All three tests are largely to make error processing more robust; that is why they all reset the flags explicitly, even when it would appear that this would be

 done by a \leavevmode.
131 \def \newpage {%
132 \if@noskipsec
133  \ifx \@nodocument\relax
134  \leavevmode
135  \global \@noskipsecfalse
136  \fi
137 \fi
138 \if@inlabel
139  \leavevmode
140  \global \@inlabelfalse
141 \fi
142 \if@nobreak \@nobreakfalse \everypar{}\fi
143 \par
144 \vfil
145 \penalty -\@M}

\@emptycol It may be better to use an invisible rule rather than an empty box here.

146 \def \@emptycol {\vbox{}\penalty -\@M}

\twocolumn \@topnewpage There are several bug fixes to the two-column stuff here.

147 \def \twocolumn {%
148 \clearpage
149 \global\columnwidth\textwidth
150 \global\advance\columnwidth-\columnsep
151 \global\divide\columnwidth\tw@
152 \global\hsize\columnwidth
153 \global\linewidth\columnwidth
154 \global\@twocolumntrue
155 \global\@firstcolumntrue
156 \col@number \tw@

There is no reason to put a \@dblfloatplacement here since \@topnewpage ignores these settings. The \@floatplacement is needed in case this comes after some changes.

157 \@ifnextchar [\@topnewpage\@floatplacement

158 }

Note that here, getting a box from the freelist can assume success since this comes just after a \clearpage.

159 \long\def \@topnewpage [#1]{%
160 \@nodocument
161 \@next\@currbox\@freelist{}{}%
162 \global \setbox\@currbox
163  \color@vbox
164  \normalcolor
165  \vbox {%
166  \hsize\textwidth
167  \@parboxrestore
168  \col@number \@ne
169  #1%
170  \vskip -\dbltextfloatsep

171 }%

172  \color@endbox

Added size test and warning message; perhaps we should use an error message.

173 \ifdim \ht\@currbox>\textheight
174  \ht\@currbox \textheight
175 \fi

This next line is not essential but it is more robust to make this value non-zero, in case of weird errors.

This next bit is what is needed from \@addtodblcol, plus some extra checks for error trapping.

176 \global \count\@currbox \tw@
177 \@tempdima -\ht\@currbox
178 \advance \@tempdima -\dbltextfloatsep
179 \global \advance \@colht \@tempdima
180 \ifx \@dbltoplist \@empty
181 \else
182  \@latexerr{Float(s) lost}\@ehb
183  \let \@dbltoplist \@empty
184 \fi
185 \@cons \@dbltoplist \@currbox

This setting of \@dbltopnum is used only to change the typesetting in

 \@combinedblfloats.
186 \global \@dbltopnum \m@ne

187 ⟨∗trace⟩

188  \tr@ce{dbltopnum set to -1 (= \the \@dbltopnum) (topnewpage)}%

189 ⟨/trace⟩

At points such as this we need to check that there is still a minimal amount of room left on the page; this uses an arbitrary small value at present; but note that this value is larger than that used when checking that page is too full of normal floats.

If there is little room left we just force a page-break, OK? This involves producing two empty columns. The second empty column may be produced by \output, in which case an extra, misleading, warning will be generated, OK? (This happens only when there is too little room left on the page for any float.) Otherwise (i.e. if the size is such that it is allowed as a normal float) the extra \@emptycol will be invoked in the second column by the conditional code guarded by the

\if@firstcolumn test.

I now think that the cut-off point here should be 3\baselineskip, but we make it a bit less so that 3 lines of text will be allowed, OK?

Since this happens only when there is nothing on the page but the ‘top-box’, the empty box should not cause any problem other than some overfull box messages, which is not entirely misleading.

Here we need two page-ends since both columns need to be empty.

190 \ifdim \@colht<2.5\baselineskip
191  \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
192  too tall on page \thepage}%
193  \@emptycol
194  \if@firstcolumn
195  \else
196  \@emptycol
197  \fi
198 \else
199  \global \vsize \@colht
200  \global \@colroom \@colht
201  \@floatplacement
202 \fi

203 }

\output \@specialoutput This needs some small adjustments. We cannot guarantee that the float mechanism will interact correctly with this stuff, but that mecahnism does not always work properly with footnotes already.

RmS 91/09/29:

added reset of \par to the output routine. This avoids problems when the output routine is called within a list where \par may be a no-op.

204 \output {%
205 \let \par \@@par
206 \ifnum \outputpenalty<-\@M
207  \@specialoutput
208 \else
209  \@makecol
210  \@opcol
Moved to \@opcol: \@floatplacement.
211  \@startcolumn

This loop could be replaced by an \expandafter tail recursion in \@startcolumn.

212  \@whilesw \if@fcolmade \fi

213 {% 214 ⟨∗trace⟩

215  \tr@ce{PAGE: float \if@twocolumn column \else page \fi
216  completed}%

217 ⟨/trace⟩

218  \@opcol\@startcolumn}%
219 \fi
220 \ifnum \outputpenalty>-\@Miv

At points such as this we need to check that there is still a minimal amount of room left on the page; this uses an arbitrary small value at present. If there is little room left we just force a page-break, OK?

This bit is essential only if a float has just been processed so maybe it should be moved; but this is the natural place at which to set the vsize and a test would need to be done anyway. A check has been added to ensure that there really has been a change in the value of \@colroom.

Since this happens only when there is nothing on the page but floats, the empty box should not cause any problem other than some overfull box messages, which is not entirely misleading.

The twocolumn case does not need any extra code here since this is the \output itself; in the second column there will still not be enough room left so \@emptycol will be executed again when the OR is called by the-page builder when it gets to the penalty inserted by the first execution. (The page-builder is never invoked whilst the OR is being executed since it builds a inner vlist; thus any conditional code for the two-column case within \output may not get executed with the correct

value of \if@firstcolumn.
221  \ifdim \@colroom<1.5\baselineskip
222  \ifdim \@colroom<\textheight
223  \@latex@warning@no@line {Text page \thepage\space
224  contains only floats}%
225  \@emptycol
226 %         \if@twocolumn
227 %           \if@firstcolumn
228 %           \else
229 %             \@emptycol
230 %           \fi
231 %         \fi
232  \else
233  \global \vsize \@colroom
234  \fi
235  \else
236  \global \vsize \@colroom
237  \fi
238 \else
239  \global \vsize \maxdimen
240 \fi

242 ⟨/2ekernel | autoload | fltrace⟩

 CHANGES TO \@specialoutput:
 * \penalty\z@ changed to \penalty\interlinepenalty so \samepage

works properly with figure and table environments.

(Changed 23 Oct 86)

* Definition of \@specialoutput changed 26 Feb 88 so \@pageht and \@pagedp aren’t changed for a marginal note. (Change suggested by Chris Rowley.)

243 ⟨∗2ekernel | def1 | autoload | fltrace⟩

244 \gdef\@specialoutput{%
245 \ifnum \outputpenalty>-\@Mii
246  \@doclearpage
247 \else
248  \ifnum \outputpenalty<-\@Miii
249  \ifnum \outputpenalty<-\@MM \deadcycles \z@ \fi
250  \global \setbox\@holdpg \vbox {\unvbox\@cclv}%
251  \else

Note that \boxmaxdepth should not be set here since we wish to record the natural depth of the holdpg box.

This is changed so as to not lose anything, such as writes and marks, which may get into box 255 and should be returned to the list. This should only happen when the first penalty in the mechanism is discarded and therefore \@holdpg should always be void in this case. This can happen because a penalty is discarded whenever there is no box on the list.

   It was just: \setbox\@tempboxa \box \@cclv.

The last box which is removed is the box put there by the double-penalty mechanism. The \unskip then removes the \topskip which is put there since the box is the first on the page.

252  \global \setbox\@holdpg \vbox{%
253  \unvbox\@holdpg
254  \unvbox\@cclv

We must now remove the box added by the float mechanism and the \topskip glue therefore added above it by TEX.

255  \setbox\@tempboxa \lastbox
256  \unskip

257 }%

These two are needed as separate dimensions only by \@addmarginpar; for other purposes we put the whole size into \@pageht (see below).

258  \@pagedp \dp\@holdpg
259  \@pageht \ht\@holdpg
260  \unvbox \@holdpg
261  \@next\@currbox\@currlist{%
262  \ifnum \count\@currbox>\z@

Putting the whole size into \@pageht (see above).

263  \advance \@pageht \@pagedp
264  \ifvoid\footins \else
265  \advance \@pageht \ht\footins
266  \advance \@pageht \skip\footins
267  \advance \@pageht \dp\footins
268  \fi

269 ⟨∗2ekernel | def1⟩

270  \ifvbox \@kludgeins

We want to make the adjustment due to this insert only if the non-star form is used. The *-form will probably not work with floats, but maybe it still could make some adjustment here even so?

271  \ifdim \wd\@kludgeins=\z@
272  \advance \@pageht \ht\@kludgeins

273 ⟨∗trace⟩

274  \tr@ce {Extra size added: \the \ht\@kludgeins}%

275 ⟨/trace⟩

276  \fi
277  \fi

278 ⟨/2ekernel | def1⟩

This version puts the inserts back just before the additional material; it could be moved earlier, before unboxing the page-so-far. Neither is guaranteed not to put things on the wrong page. This version is similar to the original version.

279  \@reinserts
280  \@addtocurcol
281  \else
282  \@reinserts
283  \@addmarginpar
284  \fi
285  }\@latexbug

A 2e change: use \addpenalty instead of \penalty here. Some penalty is needed to create a potential break-point immediately after the reinerts (or the marginal). Otherwise there can be no possibility to break here and this can cause the reinserts or the marginal to appear on the next page (which is often incorrect). However, if the nobreak flag is true, a \nobreak must be correct.

286  \ifnum \outputpenalty<\z@
287  \if@nobreak
288  \nobreak
289  \else
290  \addpenalty \interlinepenalty
291  \fi
292  \fi
293  \fi
294 \fi

295 } 296 ⟨/2ekernel | def1 | autoload | fltrace⟩

\@doclearpage This is a very much an emergency action, just dumping everything: footnotes first

then floats. A more sophisticated version is needed.

Also, it puts any left-over non-boxes (writes, specials, etc.) back after any float pages created: this is a bug.

297 ⟨∗2ekernel | autoload⟩

298 \def \@doclearpage {%
299  \ifvoid\footins
300  \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
301  \setbox\@tempboxa\box\@cclv
302  \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
303  \global \let \@toplist \@empty
304  \global \let \@botlist \@empty
305  \global \@colroom \@colht
306  \ifx \@currlist\@empty
307  \else
308  \@latexerr{Float(s) lost}\@ehb
309  \global \let \@currlist \@empty
310  \fi
311  \@makefcolumn\@deferlist
312  \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
313  \if@twocolumn
314  \if@firstcolumn
315  \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
316  \global \let \@dbltoplist \@empty
317  \global \@colht \textheight
318  \begingroup
319  \@dblfloatplacement
320  \@makefcolumn\@dbldeferlist
321  \@whilesw\if@fcolmade \fi{\@outputpage
322  \@makefcolumn\@dbldeferlist}%
323  \endgroup
324  \else
325  \vbox{}\clearpage
326  \fi
327  \fi
328  \else
329  \setbox\@cclv\vbox{\box\@cclv\vfil}%
330  \@makecol\@opcol
331  \clearpage
332  \fi

333 } 334 ⟨/2ekernel | autoload⟩

\@opcol Several changes in detail here.

335 ⟨∗2ekernel | autoload | fltrace⟩

336 \def \@opcol {%

337 \if@twocolumn
338  \@outputdblcol
339 \else
340  \@outputpage

341 ⟨∗trace⟩

342  \tr@ce{PAGE: one column (float? see above) page completed}%

343 ⟨/trace⟩

Not needed since it comes after \@outputpage:

344 %   \global\@colht\textheight
345 \fi

These do not need to be done every time \@opcol is used: they should be grouped together since they all need to be done at the end of the non-special output routine, or at the end of a clearpage one.

346 \global \@mparbottom \z@ \global \@textfloatsheight \z@
347 \@floatplacement

348 } 349 ⟨/2ekernel | autoload | fltrace⟩

\@makecol We must rewrite this macro to alllow for variations in page-makeup required by

changes in page-length.

This uses a different macro if a special-length column is being produced.

350 ⟨∗2ekernel | def1 | autoload⟩

351 \gdef \@makecol {%
352 \ifvoid\footins
353  \setbox\@outputbox \box\@cclv
354 \else
355  \setbox\@outputbox \vbox {%

This \boxmaxdepth setting is to ensure that deep footnotes do not overwrite the footer (on account of the negative skip added later): it should use \@maxdepth otherwise the chnage is pointless when there are footnotes.

But see also its use when combining floats.

356  \boxmaxdepth \@maxdepth
357  \unvbox \@cclv
358  \vskip \skip\footins
359  \color@begingroup
360  \normalcolor
361  \footnoterule
362  \unvbox \footins
363  \color@endgroup

364 }%

365 \fi

The h floats have now been finally committed to this page so we can reset their list. The top and bottom floats are then added to the page.

366 \xdef\@freelist{\@freelist\@midlist}%

367 \global \let \@midlist \@empty
368 \@combinefloats

The variations start here in case \enlargethispage has been used.

369 ⟨∗2ekernel | def1⟩

370 \ifvbox\@kludgeins
371  \@makespecialcolbox
372 \else

373 ⟨/2ekernel | def1⟩

This extra reboxing is only needed to add the \@texttop and \@textbotttom but this could be done earlier, when the floats are added.

The \boxmaxdepth resetting here will have no effect unless \@textbottom ends with a box or rule. So is this (or possibly \@maxdepth) the correct value?

The \vskip -\dimen@ ensures that the visible depth of the box does not affect the placement of anything on the page. Thus very deep pages will overprint the footer; but these should have been prevented by suitable settings of the maxdepths at appropriate times.

If \@textbottom ends with a box or rule of non-zero depth then this skip adjustemnt should be done again after it.

I think that the final boxing of the main text page could have a common ending which may make it simpler to see what is going on.

This needs further investigation, especially in the ‘special case’.

Also, the \boxmaxdepth setting here affects what happens wthin \@texttop and \@textbottom, should it? Is it needed at all?

RmS 91/10/22: Replaced \dimen128 by \dimen@.

374  \setbox\@outputbox \vbox to\@colht {%
375 %       \boxmaxdepth \maxdepth                   %??
376  \@texttop
377  \dimen@ \dp\@outputbox
378  \unvbox \@outputbox
379  \vskip -\dimen@
380  \@textbottom

381 }% 382 ⟨∗2ekernel | def1⟩

383 \fi

384 ⟨/2ekernel | def1⟩

385 \global \maxdepth \@maxdepth

386 } 387 ⟨/2ekernel | def1 | autoload⟩

\@reinserts This is the code which reinserts the inserts. It puts them all in one place; this can make some of them come out on the wrong page. It has been put into a separate macro to expidite experimentation.

388 ⟨∗2ekernel | def1 | autoload⟩

389 \gdef \@reinserts{%
390 \ifvoid\footins\else\insert\footins{\unvbox\footins}\fi
391 ⟨+2ekernel | def1⟩ \ifvbox\@kludgeins\insert\@kludgeins
392 ⟨+2ekernel | def1⟩  {\unvbox\@kludgeins}\fi

394 ⟨/2ekernel | def1 | autoload⟩

\@makespecialcolbox This implements certain variations in page-makeup.

395 ⟨∗2ekernel | def1 | fltrace⟩

396 \gdef \@makespecialcolbox {%

397 ⟨∗trace⟩

398 \tr@ce{Kludgeins ht \the\ht\@kludgeins\space
399  dp \the\dp\@kludgeins\space
400  wd \the\wd\@kludgeins}%

401 ⟨/trace⟩

First we find the natural height of the column.

See above for discussion of what is happening here.

This needs further investigation, especially in this ‘special case’.

402 \setbox\@outputbox \vbox {%
403  \@texttop
404  \dimen@ \dp\@outputbox
405  \unvbox\@outputbox
406  \vskip-\dimen@

407 }%

408 \@tempdima \@colht
409 \ifdim \wd\@kludgeins>\z@

Note that in this case (the *-version), the height of the \@kludgeins box is not used since its value is somewhat arbitrary: it need only be big enough to ensure that the page-break is not taken prematurely.

Here we calculate how much vertical space needs to be added in order to enable the column to fit into a box of size \@colht using the best information we have about the amount of shrink available (another thing which is known internally about a box, but cannot be accessed at the TEX level!).

This needs TEX3 otherwise \pageshrink is zero anyway; it may not be exactly the figure we wish as it is the total available from the all the material collected before the page-break decision is made. It will, we think, always be an overestimate of the actual shrink in the box; therefore this should always force the shortest possible column with the possibility of an overfull box.

This should work for bothe flush- and ragged-bottom setting since it makes the contents no smaller than the size (\@colht) of the box into which they are put.

Their should perhaps be an upper limit, of 0pt?, on the extra space added to force shrinking.

See above for a discussion of the \boxmaxdepth setting here.

410  \advance \@tempdima -\ht\@outputbox
411  \advance \@tempdima \pageshrink

412 ⟨∗trace⟩

413  \tr@ce {Natural ht of col: \the \ht\@outputbox}%
414  \tr@ce {\string \@colht: \the \@colht}%
415  \tr@ce {Pageshrink added: \the \pageshrink}%
416  \tr@ce {Hence, space added: \the \@tempdima}%

417 ⟨/trace⟩

418  \setbox\@outputbox \vbox to \@colht {%
419 %       \boxmaxdepth \maxdepth
420  \unvbox\@outputbox
421  \vskip \@tempdima
422  \@textbottom

423 }%

For the unstarred version, the final size of the page is precisely specified. Therefore, at least for the flush-bottom case, we need to ensure that, visually, it has this size exactly.

Thus we calculate this size and set the material in a box of this size, which is then put into a box of size \@colht with \vss at the bottom.

424 \else
425  \advance \@tempdima -\ht\@kludgeins

426 ⟨∗trace⟩

427  \tr@ce {Natural ht of col: \the \ht\@outputbox}%
428  \tr@ce {\string \@colht: \the \@colht}%
429  \tr@ce {Extra size added: -\the \ht \@kludgeins}%
430  \tr@ce {Hence, height of inner box: \the \@tempdima}%
431  \tr@ce {Max? pageshrink available: \the \pageshrink}%

432 ⟨/trace⟩

This type of final packaging could be done always; this may simplify all of this page-makeup.

It is not necessary to set \boxmaxdepth here since the \@outputbox ends with glue.

433  \setbox \@outputbox \vbox to \@colht {%
434  \vbox to \@tempdima {%
435  \unvbox\@outputbox
436  \@textbottom}%
437  \vss}%
438 \fi

Finally we need to explicitly make the insert box void.

439 {\setbox \@tempboxa \box \@kludgeins}%

440 } 441 ⟨/2ekernel | def1 | fltrace⟩

\@texttop \@textbottom These do nothing as a default.

442 ⟨∗2ekernel | autoload⟩

443 \let \@texttop \relax
444 \let \@textbottom \relax

\@resetactivechars \@activechar@info RmS 93/09/06: added hook to protect against certain active characters in the output routine. Default checks are for active space and end-of-line.

445 \def\@activechar@info #1{%
446  \@latex@info@no@line {Active #1 character found while
447  output routine is active
448  \MessageBreak

449  This may be a bug in a package file
450  you are using}%

451 }

Do not put any spaces in this next bit!

452 \begingroup
453 \obeylines\obeyspaces%
454 \gdef\@resetactivechars{%
455 \def^^M{\@activechar@info{EOL}\space}%
456 \def {\@activechar@info{space}\space}}%
457 \endgroup

\@outputpage \@shipoutsetup \@writesetup The \color@hbox hooks here are used to avoid putting just a colour special into an otherwise empty box (in a header or footer). These boxes are often set to be completely empty and so adding a special produces a very underfull box message.

There has been extensive tidying up of the old code here; including the removal of a level of grouping.

The setting of \protect immediately before the \shipout is needed so that protected commands within \writes are handled correctly.

Within shipout’s vbox it is reset to its default value, \relax.

Resetting it to its default value after the shipout has been completed (and the contents of the writes have been expanded) must be done by use of \aftergroup. This is because it must have the value \relax before macros coming from other uses of \aftergroup within this box are expanded.

Putting this into the \aftergroup token list does not affect the definition used in expanding the \writes because the aftergroup token list is only constructed when popping the save-stack, it is not expanded until after the shipout is completed.

Question: should things from an \aftergroup within the shipped out box be executed in the environment set up for the writes, or after it finishes?

A lot of this code has been in-lined tp prevent mis-use of internal commands as hooks.

458 \def\@outputpage{%
459 \begingroup           % the \endgroup is put in by \aftergroup

Now all the set-up stuff has been in-lined for Frank.

First the stuff for the writes.

From here … was in the command \@writesetup.

460 \let \protect \noexpand

RmS 93/08/19: Redefined accents to allow changes in font encoding; but exactly why was this needed?

The \catcode`\ = 10 was removed as it was considered useless (presumably because nothing gets tokenised during shipout).

This was put in as some error produced active spaces in a mark, I think.

Why was the hyphen reset?

461 \@resetactivechars

This next hook replaces the following:

       \let\-\@dischyph
       \let\'\@acci\let\`\@accii\let\=\@acciii
       \let\\\@normalcr
       \let\par\@@par %% 15 Sep 87 (this was once inside the box)

and it does more than they did; in particular it sets:

       \parindent\z@
       \parskip\z@skip
       \everypar{}%
       \leftskip\z@skip
       \rightskip\z@skip
       \parfillskip\@flushglue
       \lineskip\normallineskip
       \baselineskip\normalbaselineskip
       \sloppy

462 \@parboxrestore

… to here was in the command \@writesetup.

463 \shipout \vbox{%
464  \set@typeset@protect
465  \aftergroup \endgroup
466  \aftergroup \set@typeset@protect
467  % correct? or just restore by ending
468  % the group?

This first bit has been moved inside the shipped out box.

Now the setup inside the shipped out box; this should conatin all the stuff that could only affect typesetting; other stuff may need to be reset for the writes also.

From here … was in the command \@shipoutsetup.

469 \if@specialpage
470  \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
471 \fi
472 \if@twoside
473  \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
474  \let\@themargin\oddsidemargin
475  \else \let\@thehead\@evenhead
476  \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
477  \fi
478 \fi

The rest was always inside the box. RmS 91/08/15: aded this line:

479 \reset@font

RmS 93/08/06 Added \lineskiplimit=0pt to guard against it being nonzero: e.g. by \offinterlineskip being in effect.

There are probably lots of other things that may need resetting.

480 \normalsize

Reset the space factors.

481 \normalsfcodes

Reset these here (previously reset separately for head and foot)

482 \let\label\@gobble
483 \let\index\@gobble
484 \let\glossary\@gobble
485 \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@

… to here was in the command \@shipoutsetup.

486  \@begindvi
487  \vskip \topmargin
488  \moveright\@themargin \vbox {%
489  \setbox\@tempboxa \vbox to\headheight{%
490  \vfil
491  \color@hbox
492  \normalcolor
493  \hb@xt@\textwidth{\@thehead}%
494  \color@endbox
495  }%                        %% 22 Feb 87
496  \dp\@tempboxa \z@
497  \box\@tempboxa
498  \vskip \headsep
499  \box\@outputbox
500  \baselineskip \footskip
501  \color@hbox
502  \normalcolor
503  \hb@xt@\textwidth{\@thefoot}%
504  \color@endbox

505 }% 506 }%

507 %   \endgroup now inserted by \aftergroup
508 \global \@colht \textheight
509 \stepcounter{page}%

It is now clear that this does something useful, thanks to Piet van Oostrum. It is needed because a float page is made without using TeX’s page-builder; thus the output routine is never called so the marks are not updated.

510 \let\firstmark\botmark

511 }

\@begindvi This unboxes stuff that must appear before anything else in the .dvi file, then

returns that box register to the free list and cancels itself.

The stuff in the box should not add any typeset material to the page.

512 \def \@begindvi{%
513 \unvbox \@begindvibox
514 \global\let \@begindvi \@empty

515 }

\@combinefloats \@cflt \@cflb The \boxmaxdepth setting here was not made local to a box so was dangerous. It is needed only within the box made by \@cflt (and not normally even there), so it has been moved there; this also agrees with the original pseudcode.

516 \def \@combinefloats {%
517 %    \boxmaxdepth \maxdepth
518  \ifx \@toplist\@empty \else \@cflt \fi
519  \ifx \@botlist\@empty \else \@cflb \fi

520 }

521 \def \@cflt{%
522  \let \@elt \@comflelt
523  \setbox\@tempboxa \vbox{}%
524  \@toplist
525  \setbox\@outputbox \vbox{%
526  \boxmaxdepth \maxdepth
527  \unvbox\@tempboxa
528  \vskip -\floatsep
529  \topfigrule
530  \vskip \textfloatsep
531  \unvbox\@outputbox

532 }%

533  \let\@elt\relax
534  \xdef\@freelist{\@freelist\@toplist}%
535  \global\let\@toplist\@empty

536 }

537 \def \@cflb {%
538  \let\@elt\@comflelt
539  \setbox\@tempboxa \vbox{}%
540  \@botlist
541  \setbox\@outputbox \vbox{%
542  \unvbox\@outputbox
543  \vskip \textfloatsep
544  \botfigrule
545  \unvbox\@tempboxa
546  \vskip -\floatsep

547 }%

548  \let\@elt\relax
549  \xdef\@freelist{\@freelist\@botlist}%
550  \global \let \@botlist\@empty

551 }

\@comflelt
\@comdblflelt
\@combinedblfloats

552 \def\@comflelt#1{\setbox\@tempboxa
553  \vbox{\unvbox\@tempboxa\box #1\vskip\floatsep}}
554 \def\@comdblflelt#1{\setbox\@tempboxa
555  \vbox{\unvbox\@tempboxa\box #1\vskip\dblfloatsep}}
556 \def \@combinedblfloats{%
557 \ifx \@dbltoplist \@empty

558 \else
559  \setbox\@tempboxa \vbox{}%
560  \let \@elt \@comdblflelt
561  \@dbltoplist
562  \let \@elt \relax
563  \xdef \@freelist {\@freelist\@dbltoplist}%
564  \global\let \@dbltoplist \@empty
565  \setbox\@outputbox \vbox to\textheight

The setting of \boxmaxdepth here has no effect since the \@outputbox should already have depth zero. Even so, it would have no effect on the layout of the page.

566  {%\boxmaxdepth\maxdepth   %% probably not needed, CAR
567  \unvbox\@tempboxa\vskip-\dblfloatsep

Here we need different typesetting if the top float comes from \@topnewpage.

568  \ifnum \@dbltopnum>\m@ne
569  \dblfigrule
570  \fi
571  \vskip \dbltextfloatsep
572  \box\@outputbox

573 }%

574 \fi

575 } 576 ⟨/2ekernel | autoload⟩

\@startcolumn \@startdblcolumn We could combine (most of) these two into \@startcol <list>. Note that

\@xstartcol was only used once (i.e. in \@startcolumn); it has therefore been removed. This is not quite as efficient but it now has the same structure as

 \@startdblcolumn.

The empty-list test has been moved to \@tryfcolumn.

577 ⟨∗2ekernel | autoload | fltrace⟩

578 \def \@startcolumn {%
579 \global \@colroom \@colht
580 \@tryfcolumn \@deferlist
581 \if@fcolmade

582 ⟨∗trace⟩

583  \tr@ce{PAGE: float \if@twocolumn column \else page \fi
584  completed}%

585 ⟨/trace⟩

586 \else
587  \begingroup
588  \let \reserved@b \@deferlist
589  \global \let \@deferlist \@empty
590  \let \@elt \@scolelt
591  \reserved@b
592  \endgroup
593 \fi

594 }

This one does not need to set \@colht.

595 \def \@startdblcolumn {%

Not needed since this always comes after \@outputpage:

596 % \global \@colht \textheight
597 \@tryfcolumn \@dbldeferlist
598 \if@fcolmade

599 ⟨∗trace⟩

600  \tr@ce{PAGE: double float page completed}%

601 ⟨/trace⟩

602 \else
603  \begingroup
604  \let \reserved@b \@dbldeferlist
605  \global \let \@dbldeferlist \@empty
606  \let \@elt \@sdblcolelt
607  \reserved@b
608  \endgroup
609 \fi

610 }

\@tryfcolumn Now tests if its list is empty before any further exertion.

611 \def \@tryfcolumn #1{%
612 \global \@fcolmadefalse
613 \ifx #1\@empty
614 \else

615 ⟨∗trace⟩

616  \tr@ce{PAGE: try float \if@twocolumn column/page\else page\fi
617  ---\string #1}%
618  \tr@ce{----- \string #1: #1}%

619 ⟨/trace⟩

620  \xdef\@trylist{#1}%
621  \global \let \@failedlist \@empty
622  \begingroup
623  \let \@elt \@xtryfc \@trylist
624  \endgroup
625  \if@fcolmade
626  \@vtryfc #1%
627  \fi
628 \fi

629 } 630 ⟨/2ekernel | autoload | fltrace⟩

631 ⟨∗2ekernel | autoload⟩

\@scolelt
632 \def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}
\@sdblcolelt
633 \def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}

\@vtryfc
634 \def\@vtryfc #1{%
635 \global\setbox\@outputbox\vbox{}%
636 \let\@elt\@wtryfc
637 \@flsucceed
638 \global\setbox\@outputbox \vbox to\@colht{%
639  \vskip \@fptop
640  \vskip -\@fpsep
641  \unvbox \@outputbox
642  \vskip \@fpbot}%
643 \let\@elt\relax
644 \xdef #1{\@failedlist\@flfail}%
645 \xdef\@freelist{\@freelist\@flsucceed}}
\@wtryfc
646 \def\@wtryfc #1{%
647 \global\setbox\@outputbox\vbox{%
648  \unvbox\@outputbox
649  \vskip\@fpsep
650  \box #1}}
\@xtryfc
651 \def\@xtryfc #1{%
652 \@next\reserved@a\@trylist{}{}%
653 \@currtype \count #1%
654 \divide\@currtype\@xxxii
655 \multiply\@currtype\@xxxii
656 \@bitor \@currtype \@failedlist
657 \@testfp #1%
658 \ifdim \ht #1>\@colht
659  \@testtrue
660 \fi
661 \if@test
662  \@cons\@failedlist #1%
663 \else
664  \@ytryfc #1%
665 \fi}
\@ytryfc
666 \def\@ytryfc #1{%
667 \begingroup
668  \gdef\@flsucceed{\@elt #1}%
669  \global\let\@flfail\@empty
670  \@tempdima\ht #1%
671  \let\@elt\@ztryfc
672  \@trylist
673  \ifdim \@tempdima >\@fpmin
674  \global\@fcolmadetrue
675  \else

676  \@cons\@failedlist #1%
677  \fi
678 \endgroup
679 \if@fcolmade
680  \let\@elt\@gobble
681 \fi}
\@ztryfc
682 \def\@ztryfc #1{%
683 \@tempcnta \count#1%
684 \divide\@tempcnta\@xxxii
685 \multiply\@tempcnta\@xxxii
686 \@bitor \@tempcnta {\@failedlist \@flfail}%
687 \@testfp #1%
688 \@tempdimb\@tempdima
689 \advance\@tempdimb \ht#1%
690 \advance\@tempdimb\@fpsep
691 \ifdim \@tempdimb >\@colht
692  \@testtrue
693 \fi
694 \if@test
695  \@cons\@flfail #1%
696 \else
697  \@cons\@flsucceed #1%
698  \@tempdima\@tempdimb
699 \fi}

700 ⟨/2ekernel | autoload⟩

The major changes for float suppression and the changes to the float mechanism to make it conform to the documentation are in these next macros.

\@addtobot Lots of changes.

701 ⟨∗2ekernel | autoload | fltrace⟩

702 \def \@addtobot {%

703 ⟨∗trace⟩

704 \tr@ce{***Start addtobot}%

705 ⟨/trace⟩

706 \@getfpsbit 4\relax

707 ⟨∗trace⟩

708 \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi bot:
709  \the \@fpstype}%

710 ⟨/trace⟩

711 \ifodd \@tempcnta
712  \@flsetnum \@botnum
713  \ifnum \@botnum>\z@
714  \@tempswafalse
715  \@flcheckspace \@botroom \@botlist
716  \if@tempswa

This next line means that this page is produced with box 255 having depth zero, rather than the normal maxdepth: is this needed, useful?

717  \global \maxdepth \z@
718  \@flupdates \@botnum \@botroom \@botlist

719 ⟨∗trace⟩

720  \tr@ce{colroom (after-bot) = \the \@colroom}%
721  \tr@ce{colnum (after-bot) = \the \@colnum}%
722  \tr@ce{botnum (after-bot) = \the \@botnum}%
723  \tr@ce{***Success: bot}%

724 ⟨/trace⟩

725  \@inserttrue
726  \fi

727 ⟨∗trace⟩

728  \else
729  \tr@ce{Fail: botnum = \the \@botnum:
730  fpstype \the \@fpstype=ORD?}%
731  \ifnum \@fpstype<\sixt@@n
732  \tr@ce{ERROR: !b float not successful (addtobot)}%
733  \fi

734 ⟨/trace⟩

735  \fi
736 \fi

737 }

\@addtotoporbot Lots of changes.
738 \def \@addtotoporbot {%

739 ⟨∗trace⟩

740 \tr@ce{***Start addtotoporbot}%

741 ⟨/trace⟩

742 \@getfpsbit \tw@

743 ⟨∗trace⟩

744 \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi top:
745  \the \@fpstype}%

746 ⟨/trace⟩

747 \ifodd \@tempcnta
748  \@flsetnum \@topnum
749  \ifnum \@topnum>\z@
750  \@tempswafalse
751  \@flcheckspace \@toproom \@toplist
752  \if@tempswa
753  \@bitor\@currtype{\@midlist\@botlist}%

754 ⟨∗trace⟩

755  \tr@ce{(mid+bot)list: \@midlist, \@botlist:
756  (addtotoporbot-before)}%

757 ⟨/trace⟩

758  \if@test

759 ⟨∗trace⟩

760  \tr@ce{type already on list: mid or bot---sent to addtobot}%

761 ⟨/trace⟩

762  \else
763  \@flupdates \@topnum \@toproom \@toplist

764 ⟨∗trace⟩

765  \tr@ce{colroom (after-top) = \the \@colroom}%
766  \tr@ce{colnum (after-top) = \the \@colnum}%
767  \tr@ce{topnum (after-top) = \the \@topnum}%
768  \tr@ce{***Success: top}%

769 ⟨/trace⟩

770  \@inserttrue
771  \fi
772  \fi

773 ⟨∗trace⟩

774  \else
775  \tr@ce{Fail: topnum = \the \@topnum: fpstype
776  \the \@fpstype=ORD?}%
777  \ifnum \@fpstype<\sixt@@n
778  \tr@ce{ERROR: !t float not successful (addtotoporbot)}%
779  \fi

780 ⟨/trace⟩

781  \fi
782 \fi
783 \if@insert
784 \else

785 ⟨∗trace⟩

786  \tr@ce{sent to addtobot (addtotoporbot)}%

787 ⟨/trace⟩

788  \@addtobot
789 \fi

790 } 791 ⟨/2ekernel | autoload | fltrace⟩

\@addtocurcol Lots of changes.

792 ⟨∗2ekernel | autoload | fltrace | flafter⟩

793 \def \@addtocurcol {%

794 ⟨∗trace⟩

795 \tr@ce{***Start addtocurcol}%

796 ⟨/trace⟩

797 \@insertfalse
798 \@setfloattypecounts
799 \ifnum \@fpstype=8

800 ⟨∗trace⟩

801  \tr@ce{fpstype !p only (addtocurcol): \the \@fpstype = 8?}%

802 ⟨/trace⟩

803 \else
804  \ifnum \@fpstype=24

805 ⟨∗trace⟩

806  \tr@ce{fpstype p only (addtocurcol): \the \@fpstype = 24?}%

807 ⟨/trace⟩

808  \else
809  \@flsettextmin

This is a new adjustment which is quite a major change in functionality; but it implements the documentation. Note that \@reqcolroom will include the whole of the page-so-far, and hence includes \@textfloatsheight of floats, so before comparing it with \@textmin, we add this to \@textmin also.

810 ⟨∗trace⟩

811  \tr@ce{textfloatsheight (before) = \the \@textfloatsheight}%

812 ⟨/trace⟩

813  \advance \@textmin \@textfloatsheight
814  \@reqcolroom \@pageht

This line must be removed since \@specialoutput changed.

815 %       \advance \@reqcolroom \@pagedp

816 ⟨∗trace⟩

817  \tr@ce{textmin + textfloatsheight: \the \@textmin}%
818  \tr@ce{page-so-far: \the \@reqcolroom}%

819 ⟨/trace⟩

820  \ifdim \@textmin>\@reqcolroom
821  \@reqcolroom \@textmin

822 ⟨∗trace⟩

823  \tr@ce{ORD? textmin being used}%

824 ⟨/trace⟩

825  \fi
826  \advance \@reqcolroom \ht\@currbox

827 ⟨∗trace⟩

828  \tr@ce{float size = \the \ht \@currbox (addtocurcol)}%
829  \tr@ce{colroom = \the \@colroom (addtocurcol)}%
830  \tr@ce{reqcolroom = \the \@reqcolroom (addtocurcol)}%

831 ⟨/trace⟩

832  \ifdim \@colroom>\@reqcolroom
833  \@flsetnum \@colnum
834  \ifnum \@colnum>\z@
835  \@bitor\@currtype\@deferlist

836 ⟨∗trace⟩

837  \tr@ce{deferlist: \@deferlist: (addtocurcol-before)}%

838 ⟨/trace⟩

839  \if@test

840 ⟨∗trace⟩

841  \tr@ce{type already on list: defer (addtocurcol)}%

842 ⟨/trace⟩

843  \else
844  \@bitor\@currtype\@botlist

845 ⟨∗trace⟩

846  \tr@ce{botlist: \@botlist: (addtocurcol-before)}%

847 ⟨/trace⟩

848  \if@test

849 ⟨∗trace⟩

850  \tr@ce{type already on list: bot---sent to addtobot}%

851 ⟨/trace⟩

852  \@addtobot
853  \else

854 ⟨∗trace⟩

855  \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi
856  here: \the \@fpstype}%

857 ⟨/trace⟩

858  \ifodd \count\@currbox
859  \advance \@reqcolroom \intextsep
860  \ifdim \@colroom>\@reqcolroom
861  \global \advance \@colnum \m@ne
862  \global \advance \@textfloatsheight \ht\@currbox

This may sometimes give an overestimate.

863  \global \advance \@textfloatsheight 2\intextsep
864  \@cons \@midlist \@currbox

865 ⟨∗trace⟩

866  \tr@ce{***Success: here}%
867  \tr@ce{textfloatsheight (after-here) =
868  \the \@textfloatsheight}%
869  \tr@ce{colnum (after-here) = \the \@colnum}%

870 ⟨/trace⟩

   CHANGE TO \@addtocurcol:
   \penalty\z@ changed to \penalty\interlinepenalty so \samepage works

properly with figure and table environments. (Changed 23 Oct 86)

   There is also an \addpenalty\interlinepenalty above.

Since in 2e \samepage is no longer supported, these could be removed.

Although it is best to use \addvspace in case two h floats come together, this makes other spacing more difficult to adjust; whereas if a user specifies two h floats together then they can more easily get the spacing correct by ad hoc commands.

It is necessary to adjust for the addition of \parskip here in case the float is added betweeen paragraphs (i.e. when in vertical mode).

If the nobreak switch is true we need to reset it and clear \everypar sionce the float may not reset the flag and cannot reset the \everypar globally.

Typesetting starts here (we are in vertical mode).

871  \if@nobreak
872  \nobreak
873  \@nobreakfalse
874  \everypar{}%
875  \else
876  \addpenalty \interlinepenalty
877  \fi
878  \vskip \intextsep
879  \box\@currbox
880  \penalty\interlinepenalty
881  \vskip\intextsep
882  \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi

Typesetting ends here.

883  \outputpenalty \z@
884  \@inserttrue

885 ⟨∗trace⟩

886  \else
887  \tr@ce{Fail---no room at 2nd test of colroom
888  (addtocorcol \string\intextsep)}%

889 ⟨/trace⟩

890  \fi
891  \fi
892  \if@insert
893  \else

894 ⟨∗2ekernel | autoload | fltrace⟩ 895 ⟨∗trace⟩

896  \tr@ce{not here: sent to addtotoporbot}%

897 ⟨/trace⟩

898  \@addtotoporbot

899 ⟨/2ekernel | autoload | fltrace⟩ 900 ⟨∗!2ekernel&!autoload&!fltrace⟩ 901 ⟨∗trace⟩

902  \tr@ce{not here: sent to addtobot}%

903 ⟨/trace⟩

904  \@addtobot

905 ⟨/!2ekernel&!autoload&!fltrace⟩

906  \fi
907  \fi
908  \fi

909 ⟨∗trace⟩

910  \else
911  \tr@ce{Fail: colnum = \the \@colnum:
912  fpstype \the \@fpstype=ORD?}%
913  \ifnum \@fpstype<\sixt@@n
914  \tr@ce{ERROR: BANG float not successful (addtocurcol)}%
915  \fi

916 ⟨/trace⟩

917  \fi

918 ⟨∗trace⟩

919  \else
920  \tr@ce{Fail---no room: fl box ht: \the \ht \@currbox
921  (addtocurcol)}%

922 ⟨/trace⟩

923  \fi
924  \fi
925 \fi
926 \if@insert
927 \else
928  \@resethfps

929 ⟨∗trace⟩

930  \tr@ce{put on deferlist (addtocurcol)}%

931 ⟨/trace⟩

932  \@cons\@deferlist\@currbox

933 ⟨∗trace⟩

934  \tr@ce{deferlist: \@deferlist: (addtocurcol-after)}%

935 ⟨/trace⟩

936 \fi

937 } 938 ⟨/2ekernel | autoload | fltrace | flafter⟩

\@addtonextcol Lots of changes.

939 ⟨∗2ekernel | autoload | fltrace⟩

940 \def\@addtonextcol{%
941 \begingroup

942 ⟨∗trace⟩

943 \tr@ce{***Start addtonextcol}%

944 ⟨/trace⟩

945 \@insertfalse
946 \@setfloattypecounts
947 \ifnum \@fpstype=8

948 ⟨∗trace⟩

949  \tr@ce{fpstype not curcol: \the \@fpstype = 8?}%

950 ⟨/trace⟩

951 \else
952  \ifnum \@fpstype=24

953 ⟨∗trace⟩

954  \tr@ce{fpstype not curcol: \the \@fpstype = 24?}%

955 ⟨/trace⟩

956  \else
957  \@flsettextmin

958 ⟨∗trace⟩

959  \tr@ce{text-so-far: 0pt (top of col)}%

960 ⟨/trace⟩

961  \@reqcolroom \ht\@currbox

962 ⟨∗trace⟩

963  \tr@ce{float size: \the \@reqcolroom (addtonextcol)}%

964 ⟨/trace⟩

965  \advance \@reqcolroom \@textmin

966 ⟨∗trace⟩

967  \tr@ce{colroom = \the \@colroom (addtonextcol)}%
968  \tr@ce{reqcolroom = \the \@reqcolroom (addtonextcol)}%

969 ⟨/trace⟩

970  \ifdim \@colroom>\@reqcolroom
971  \@flsetnum \@colnum
972  \ifnum\@colnum>\z@
973  \@bitor\@currtype\@deferlist

974 ⟨∗trace⟩

975  \tr@ce{deferlist: \@deferlist: (addtonextcol-before)}%

976 ⟨/trace⟩

977  \if@test

978 ⟨∗trace⟩

979  \tr@ce{type already on list: defer (addtonextcol)}%

980 ⟨/trace⟩

981  \else

982 ⟨∗trace⟩

983  \tr@ce{sent to addtotoporbot (addtonextcol)}%

984 ⟨/trace⟩

 985  \@addtotoporbot
 986  \fi
 987  \fi

988 ⟨∗trace⟩

 989  \else
 990  \tr@ce{Fail---no room: fl box ht: \the \ht \@currbox
 991  (addtonextcol)}%

992 ⟨/trace⟩

 993  \fi
 994  \fi
 995 \fi
 996 \if@insert
 997 \else

998 ⟨∗trace⟩

 999  \tr@ce{put back on deferlist (addtonextcol)}%

1000 ⟨/trace⟩

1001  \@cons\@deferlist\@currbox

1002 ⟨∗trace⟩

1003  \tr@ce{deferlist: \@deferlist: (addtonextcol-after)}%

1004 ⟨/trace⟩ 1005 \fi 1006 ⟨∗trace⟩

1007 \tr@ce{End of addtonextcol -- locally counts:}%
1008 \tr@ce{ col: \the \@colnum. top: \the \@topnum. bot: \the \@botnum.}%

1009 ⟨/trace⟩

1010 \endgroup

1011 ⟨∗trace⟩

1012 \tr@ce{End of addtonextcol -- globally counts:}%
1013 \tr@ce{col: \the \@colnum. top: \the \@topnum. bot: \the \@botnum.}%

1014 ⟨/trace⟩ 1015 }

\@addtodblcol Lots of changes.

1016 \def\@addtodblcol{%
1017 \begingroup

1018 ⟨∗trace⟩

1019 \tr@ce{***Start addtodblcol}%

1020 ⟨/trace⟩

1021 \@insertfalse
1022 \@setfloattypecounts
1023 \@getfpsbit \tw@

1024 ⟨∗trace⟩

1025 \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi dbltop:
1026  \the \@fpstype}%

1027 ⟨/trace⟩

1028 \ifodd\@tempcnta
1029  \@flsetnum \@dbltopnum
1030  \ifnum \@dbltopnum>\z@
1031  \@tempswafalse

1032  \ifdim \@dbltoproom>\ht\@currbox
1033  \@tempswatrue

1034 ⟨∗trace⟩

1035  \tr@ce{Space OK: \@dbltoproom =
1036  \the \@dbltoproom > \the \ht \@currbox
1037  (dbltoproom)}%

1038 ⟨/trace⟩

1039  \else

1040 ⟨∗trace⟩

1041  \tr@ce{fpstype: \the \@fpstype (addtodblcol)}%

1042 ⟨/trace⟩

1043  \ifnum \@fpstype<\sixt@@n

1044 ⟨∗trace⟩

1045  \tr@ce{BANG float ignoring \@dbltoproom}%
1046  \tr@ce{\@spaces \@dbltoproom = \the \@dbltoproom.
1047  Ht float: \the \ht \@currbox-BANG}%

1048 ⟨/trace⟩

Need to check that there is room on the page, using the local value of \@textmin to make the necessary adjustment to \@dbltoproom.

1049  \advance \@dbltoproom \@textmin

1050 ⟨∗trace⟩

1051  \tr@ce{Local value of texmin: \the\@textmin}%
1052  \tr@ce{\@spaces space on page = \the \@dbltoproom.
1053  Ht float: \the \ht \@currbox-BANG}%

1054 ⟨/trace⟩

1055  \ifdim \@dbltoproom>\ht\@currbox
1056  \@tempswatrue

1057 ⟨∗trace⟩

1058  \tr@ce{Space OK BANG: space on page = \the \@dbltoproom >
1059  \the \ht \@currbox}%
1060  \else
1061  \tr@ce{fpstype: \the \@fpstype}%
1062  \tr@ce{Fail---no room dbltoproom-BANG?:}%
1063  \tr@ce{\@spaces space on page = \the \@dbltoproom.
1064  Ht float: \the \ht \@currbox}%

1065 ⟨/trace⟩ 1066 \fi

1067  \advance \@dbltoproom -\@textmin

1068 ⟨∗trace⟩

1069  \else
1070  \tr@ce{fpstype: \the \@fpstype}%
1071  \tr@ce{Fail---no room dbltoproom-ORD?:}%
1072  \tr@ce{\@spaces \@dbltoproom = \the \@dbltoproom.
1073  Ht float: \the \ht \@currbox}%

1074 ⟨/trace⟩ 1075 \fi 1076 \fi

1077  \if@tempswa
1078  \@bitor \@currtype \@dbldeferlist

1079 ⟨∗trace⟩

1080  \tr@ce{dbldeferlist: \@dbldeferlist: (before)}%

1081 ⟨/trace⟩

1082  \if@test

1083 ⟨∗trace⟩

1084  \tr@ce{type already on list: dbldefer}%

1085 ⟨/trace⟩

1086  \else
1087  \@tempdima -\ht\@currbox
1088  \advance\@tempdima
1089  -\ifx \@dbltoplist\@empty \dbltextfloatsep \else
1090  \dblfloatsep \fi
1091  \global \advance \@dbltoproom \@tempdima
1092  \global \advance \@colht \@tempdima
1093  \global \advance \@dbltopnum \m@ne
1094  \@cons \@dbltoplist \@currbox

1095 ⟨∗trace⟩

1096  \tr@ce{dbltopnum (after) = \the \@dbltopnum}%
1097  \tr@ce{***Success: dbltop}%

1098 ⟨/trace⟩

1099  \@inserttrue

1100 \fi 1101 \fi 1102 ⟨∗trace⟩

1103  \else
1104  \tr@ce{Fail: dbltopnum = \the \@dbltopnum: fpstype
1105  \the \@fpstype=ORD?}%
1106  \ifnum \@fpstype<\sixt@@n
1107  \tr@ce{ERROR: !t float not successful (addtodblcol)}%

1108 \fi 1109 ⟨/trace⟩ 1110 \fi 1111 \fi

1112 \if@insert
1113 \else

1114 ⟨∗trace⟩

1115  \tr@ce{put on dbldeferlist}%

1116 ⟨/trace⟩

1117  \@cons\@dbldeferlist\@currbox

1118 ⟨∗trace⟩

1119  \tr@ce{dbldeferlist: \@dbldeferlist: (after)}%

1120 ⟨/trace⟩ 1121 \fi 1122 ⟨∗trace⟩

1123 \tr@ce{End of addtodblcol -- locally count:}%
1124 \tr@ce{ dbltop: \the \@dbltopnum.}%

1125 ⟨/trace⟩

1126 \endgroup

1127 ⟨∗trace⟩

1128 \tr@ce{End of addtodblcol -- globally count:}%

1129 \tr@ce{dbltop: \the \@dbltopnum.}%

1130 ⟨/trace⟩ 1131 } 1132 ⟨/2ekernel | autoload | fltrace⟩

\@addmarginpar

1133 ⟨∗2ekernel | autoload⟩

1134 \def\@addmarginpar{\@next\@marbox\@currlist{\@cons\@freelist\@marbox
1135  \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
1136  \if@twocolumn
1137  \if@firstcolumn \@tempcnta\m@ne \fi
1138  \else
1139  \if@mparswitch
1140  \ifodd\c@page \else\@tempcnta\m@ne \fi

1141 \fi

1142  \if@reversemargin \@tempcnta -\@tempcnta \fi

1143 \fi

1144  \ifnum\@tempcnta <\z@  \global\setbox\@marbox\box\@currbox \fi
1145  \@tempdima\@mparbottom
1146  \advance\@tempdima -\@pageht
1147  \advance\@tempdima\ht\@marbox
1148  \ifdim\@tempdima >\z@
1149  \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
1150  \else
1151  \@tempdima\z@

1152 \fi

1153  \global\@mparbottom\@pageht
1154  \global\advance\@mparbottom\@tempdima
1155  \global\advance\@mparbottom\dp\@marbox
1156  \global\advance\@mparbottom\marginparpush
1157  \advance\@tempdima -\ht\@marbox

Putting box movement inside the ‘marbox’:

1158  \global\setbox \@marbox
1159  \vbox {\vskip \@tempdima
1160  \box \@marbox}%
1161  \global \ht\@marbox \z@
1162  \global \dp\@marbox \z@

Sticking (rather than gluing:-) the ‘marbox’ to the line above, changed vskip to kern:

1163  \kern -\@pagedp
1164  \nointerlineskip
1165  \hb@xt@\columnwidth
1166  {\ifnum \@tempcnta >\z@
1167  \hskip\columnwidth \hskip\marginparsep
1168  \else
1169  \hskip -\marginparsep \hskip -\marginparwidth

1170 \fi

1171  \box\@marbox \hss}%

For this reason the following code can vanish:

    \nobreak             %% No longer needed.  CAR92/12
    \vskip -\@tempdima   %% No longer needed.  CAR92/12
1172  \nointerlineskip
1173  \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}}

1174 ⟨/2ekernel | autoload⟩

65.1.1 Kludgeins

This part of the file is part of the implementation of the following two new commands for L^{A}TEX2e.

 \enlargethispage{<dim>}

Adds <dim> to the height of the current column only. On the printed page the bottom of this column is extended downwards by exactly <dim> without having any effect on the placement of the footer; this may result in an overprinting.

 \enlargethispage*{<dim>}

Similar to \enlargethispage but it tries to squeeze the column to be printed in as small a space as possible, ie it uses any shrinkability in the column. If the column was not explicitly broken (e.g. with \pagebreak) this may result in an overfull box message but execpt for this it will come out as expected (if you know what to expect).

The star form of this command is dedicated to Leslie Lamport, the other we need for ourselves (FMi, CAR).

\@kludgeins The insert which makes TEX do a lot of the necessary work. All we need to put into it is the amount by which the pagegoal should be changed.

1175 ⟨∗2ekernel | def1⟩

1176 \newinsert \@kludgeins
1177 \global\dimen\@kludgeins \maxdimen
1178 \global\count\@kludgeins 1000

1179 ⟨/2ekernel | def1⟩

\enlargethispage \enlargethispage* The user command.

1180 ⟨∗2ekernel | def1⟩

1181 \gdef \enlargethispage {%
1182 \@ifstar

1183 {% 1184 ⟨∗trace⟩

1185  \tr@ce{Enlarging page height * }%

1186 ⟨/trace⟩

1187  \@enlargepage{\hbox{\kern\p@}}}%

1188 {% 1189 ⟨∗trace⟩

1190  \tr@ce{Enlarging page height exactly---}%

1191 ⟨/trace⟩

1192  \@enlargepage\@empty}%

1193 } 1194 ⟨/2ekernel | def1⟩ 1195 ⟨∗autoload⟩

1196 \def\enlargethispage{\@autoload{out1}\enlargethispage}

1197 ⟨/autoload⟩

\@enlargepage This actually inserts the insert, after checking for extreme values of the change.

1198 ⟨∗2ekernel | def1⟩

1199 \gdef\@enlargepage#1#2{%

1200 ⟨∗trace⟩

1201 \tr@ce{\@spaces\@spaces by #2}%

1202 ⟨/trace⟩

1203 \@tempskipa#2\relax
1204 \ifdim \@tempskipa>.5\maxdimen
1205  \@latexerr{Suggested\space extra\space height\space
1206  (\the\@tempskipa)\space dangerously\space
1207  large}\@eha
1208 \else
1209  \ifdim \vsize<.5\maxdimen

1210 ⟨∗trace⟩

1211  \tr@ce {Kludgeins added--pagegoal before: \the\pagegoal}%

1212 ⟨/trace⟩

1213  \@bsphack
1214  \insert\@kludgeins{#1\vskip-\@tempskipa}%
1215  \@esphack

This next bit is for tracing only:

1216 ⟨∗trace⟩

1217  \ifvmode \par
1218  \tr@ce {Kludgeins added--pagegoal after: \the \pagegoal}%

1219 \fi 1220 ⟨/trace⟩

1221  \else
1222  \@latexerr{Page\space height\space already\space
1223  too\space large}\@eha

1224 \fi 1225 \fi 1226 } 1227 ⟨/2ekernel | def1⟩

65.1.2 Float control

This part implements controllable floats and other changes to the float mechanism.

It provides, at the doument level, the following command for inclusion in L^{A}TEX2e.

  \suppressfloats

This suppresses all further floats on the current page. With an optional argument it suppresses only floats only in certain positions

on the current page.

[t] suppresses only floats at the top of the page [b] suppresses only floats at the bottom of the page

It also enables the use of an extra specifier, !, in the location optional argument of a float. If this is present then, just for this particular float, whenever it is processed by the float mechanism the followinhg are ignored:

• all restrictions on the number of floats which can appear;

• all explicit restrictions on the amount of space which should (not) be occupied by floats and/or text.

The mechanism will still attempt to ensure that pages are not overfull. These specifiers override, for the single float, the suppression commands de-

scribed above.

In its current form, it also suplies a reasonably exhaustive, and somewhat baroque, means of tracing some aspects of the float mechanism.

More tracing.

\tr@ce \notrace \tracefloats \@traceval \tracefloatvals \@tracemessage Set-up tracing for floats independent of other tracing as it produces mega-output. Default is no tracing.

1228 ⟨∗trace⟩

1229 \def \@tracemessage #1{\typeout{LaTeX2e: #1}}
1230 \def \tracefloats{\let \tr@ce \@tracemessage}
1231 \def \notrace {\let \tr@ce \@gobble}
1232 \notrace
1233 \def \@traceval #1{\tr@ce{\string #1 = \the #1}}
1234 \def \tracefloatvals{%
1235 \@dblfloatplacement
1236 \@floatplacement
1237 \@traceval\@colnum
1238 \@traceval\@colroom
1239 \@traceval\@topnum
1240 \@traceval\@toproom
1241 \@traceval\@botnum
1242 \@traceval\@botroom
1243 \@traceval\@fpmin
1244 \tr@ce{\string\textfraction = \textfraction}%
1245 \@traceval\@dbltopnum
1246 \@traceval\@dbltoproom

1247 } 1248 ⟨/trace⟩ 1249 ⟨∗flafter⟩

1250 \providecommand\tr@ce[1]{}

1251 ⟨/flafter⟩

\suppressfloats \@flstop Float suppression commands: these set the relevant counter globally to zero. Thus they are overridden for a particular float by an ! specifier.

1252 ⟨∗2ekernel | autoload⟩

1253 \def \suppressfloats {%
1254 \@ifnextchar [%
1255  \@flstop
1256  {\global \@colnum \z@}%

1257 }

Maybe this should be a loop over #1?

1258 \def \@flstop [#1]{%
1259 \if t#1%
1260  \global \@topnum \z@

1261 \fi

1262 \if b#1%
1263  \global \@botnum \z@

1264 \fi 1265 }

Manipulation of float placement and type; both their strings and the corresponding count registers.

\@fpstype \@reqcolroom \@textfloatsheight First a new count register to go with \@currtype.

Then a new skip register, for information needed to remove the \@maxsep conservatism: it is possible that this could use a temporary register.

Finally a dimension register to hold the total height of in-text floats on the current page. This is needed to implement a major change in the functionality of \@addtocurcol which is, nevertheless, a bug fix. It is not local and therefore cannot be a temporary register.

1266 \newcount \@fpstype
1267 \newdimen \@reqcolroom
1268 \newdimen \@textfloatsheight

1269 ⟨/2ekernel | autoload⟩

\@fpsadddefault Adds the default placement to what is already there.

Should not need to change this, but could do it as follows:

\def \@fpsadddefault {%
   \@temptokena \expandafter\expandafter\expandafter
                {\csname fps@\@captype \endcsname}%
   \edef \reserved@a {\the\@temptokena}%
   \@onelevel@sanitize \reserved@a
   \edef \@fps {\@fps\reserved@a}%
}

1270 ⟨∗2ekernel | autoload | fltrace⟩

1271 \def \@fpsadddefault {%

1272 ⟨∗trace⟩

1273 \tr@ce{fps changed from: \@fps}%

1274 ⟨/trace⟩

1275 \edef \@fps {\@fps\csname fps@\@captype \endcsname}%
1276 \@latex@warning {%
1277  No positions in optional float specifier.\MessageBreak
1278  Default added (so using `\@fps')}%

1279 }

\@setfloattypecounts Sets counters \@fpstype and \@currtype.
    BANG == bit4 of \count\@currbox = 0.
1280 \def \@setfloattypecounts {%
1281 \@currtype \count\@currbox
1282 \@fpstype \count\@currbox
1283 \divide\@currtype\@xxxii \multiply\@currtype\@xxxii
1284 \advance \@fpstype -\@currtype

1285 ⟨∗trace⟩

1286 \tr@ce{(mod 32) fpstype: \the \@fpstype}%
1287 \tr@ce{(mult of 32) currtype: \the \@currtype}%
1288 % Tracing only: but some should be changed into real errors/warnings?
1289 \ifnum \@fpstype<\sixt@@n
1290  \ifnum \@fpstype=\z@
1291  \tr@ce{ERROR: no PLACEMENT, fpstype = \the \@fpstype = 0?}%

1292 \fi

1293  \ifnum \@fpstype=\@ne
1294  \tr@ce{WARNING: only h, fpstype = \the \@fpstype = 1?}%

1295 \fi

1296  \tr@ce{BANG float}%
1297 \else
1298  \ifnum \@fpstype=\sixt@@n
1299  \tr@ce{ERROR: no PLACEMENT, fpstype = \the \@fpstype = 16?}%

1300 \fi

1301  \ifnum \@fpstype=17
1302  \tr@ce{WARNING: only h, fpstype = \the \@fpstype = 17?}%

1303 \fi

1304  \tr@ce{ORD float}%

1305 \fi 1306 ⟨/trace⟩ 1307 } 1308 ⟨/2ekernel | autoload | fltrace⟩

Macros for getting, testing and setting bits of the fps.

\@getfpsbit Sets \@tempcnta to required bit of \count\@currbox.

1309 ⟨∗2ekernel | autoload⟩

1310 \def \@getfpsbit {%
1311 \@boxfpsbit \@currbox

1312 }

\@boxfpsbit Used above.
1313 \def \@boxfpsbit #1#2{%
1314 \@tempcnta \count#1%
1315 \divide \@tempcnta #2\relax

1316 }

\@testfp New definition of the float page test.

1317 \def \@testfp #1{%
1318 \@boxfpsbit #18\relax % Really `#1 8' for human readers!
1319 \ifodd \@tempcnta
1320 \else
1321  \@testtrue

1322 \fi 1323 }

\@setfpsbit Sets required bit of \@tempcnta (to 1).

1324 \def \@setfpsbit #1{%
1325 \@tempcntb \@tempcnta
1326 \divide \@tempcntb #1\relax
1327 \ifodd \@tempcntb
1328 \else
1329  \advance \@tempcnta #1\relax

1330 \fi 1331 } 1332 ⟨/2ekernel | autoload⟩

\@resethfps Globally adds t as a possible location for an h or !h only placement: this must be

done using the count.

Although it will leave \@fpstype set to 17 even if it was originally 1, this does not matter since it is the last thing in \@addtocurcol.

1333 ⟨∗2ekernel | autoload | fltrace⟩

1334 \def \@resethfps {%
1335 \let\reserved@a\@empty
1336 \ifnum \@fpstype=\@ne
1337  \def \reserved@a {!}%
1338  \@fpstype 17

1339 \fi

1340 \ifnum \@fpstype=17
1341  \global \advance \count\@currbox \tw@
1342  \@latex@warning@no@line {%
1343  `\reserved@a h' float specifier changed to `\reserved@a ht'}%

1344 ⟨∗trace⟩

1345  \tr@ce{%
1346  `t' added to `\reserved@a h'- new Count: \the \count\@currbox}%

1347 ⟨/trace⟩ 1348 \fi 1349 }

Special stuff for BANG floats.

\@flsetnum Ignores any zero float counter value in case BANG.

It uses a local assignment to the normally global counter: a bit naughty, perhaps?

These assgnments are safe so long as the counter involved is only consulted once (i.e. only for the ‘bang float’) with the changed value. This is the case within \@addtocurcol because it is used only once within a call of the output routine (which forms a group).

For \@addtonextcol this is achieved by putting a group around its code; this is needed because it is called (by \@startcolumn) for each float which was on the deferlist. Almost identical considerations pertain to \@addtodblcol. There may be more efficient ways to handle this, but the group seems to be the simplest.

1350 \def \@flsetnum #1{%

1351 ⟨∗trace⟩

1352 \tr@ce{fpstype: \the \@fpstype (flsetnum \string#1)}%

1353 ⟨/trace⟩

1354 \ifnum \@fpstype<\sixt@@n
1355  \ifnum #1=\z@

1356 ⟨∗trace⟩

1357  \tr@ce{BANG float resetting \string#1 to 1}%

1358 ⟨/trace⟩

1359  #1\@ne

1360 \fi 1361 \fi 1362 ⟨∗trace⟩

1363 \tr@ce{#1 (before) = \the #1}%

1364 ⟨/trace⟩ 1365 }

\@flsettextmin This ignores \textfraction space restriction in case BANG.

1366 \def \@flsettextmin {%

1367 ⟨∗trace⟩

1368 \tr@ce{fpstype: \the \@fpstype (flsettextmin)}%

1369 ⟨/trace⟩

1370 \ifnum \@fpstype<\sixt@@n

1371 ⟨∗trace⟩

1372  \tr@ce{BANG ignoring textmin}%

1373 ⟨/trace⟩

1374  \@textmin \z@
1375 \else
1376  \@textmin \textfraction\@colht

1377 ⟨∗trace⟩

1378  \tr@ce{ORD textmin = \the \@textmin}%

1379 ⟨/trace⟩ 1380 \fi 1381 }

\@flcheckspace This ignores space restriction in case BANG; this is still slightly conervative since it does not allow for the fact that, if there is no text in the column then \textfloatsep is not needed. Sets @tempswa true if there is room for \@currbox.

1382 \def \@flcheckspace #1#2{%
1383 \advance \@reqcolroom
1384  \ifx #2\@empty \textfloatsep \else \floatsep \fi

1385 ⟨∗trace⟩

1386 \tr@ce{colroom = \the \@colroom (flcheckspace \string#1 \string#2)}%
1387 \tr@ce{reqcolroom = \the \@reqcolroom
1388  (flcheckspace \string#1 \string#2)}%

1389 ⟨/trace⟩

1390 \ifdim \@colroom>\@reqcolroom
1391  \ifdim #1>\ht\@currbox
1392  \@tempswatrue

1393 ⟨∗trace⟩

1394  \tr@ce{Space OK: #1 = \the #1 > \the \ht \@currbox
1395  (flcheckspace \string#1 \string#2)}%

1396 ⟨/trace⟩

1397  \else

1398 ⟨∗trace⟩

1399  \tr@ce{fpstype: \the \@fpstype
1400  (flcheckspace \string#1 \string#2)}%

1401 ⟨/trace⟩

1402  \ifnum \@fpstype<\sixt@@n

1403 ⟨∗trace⟩

1404  \tr@ce{BANG float ignoring #1
1405  (flcheckspace \string#1 \string#2):}%
1406  \tr@ce{\@spaces #1 = \the #1.  Ht float: \the \ht \@currbox
1407  BANG}%

1408 ⟨/trace⟩

1409  \@tempswatrue

1410 ⟨∗trace⟩

1411  \else
1412  \tr@ce{Fail---no room (flcheckspace \string#1 \string#2)
1413  (fpstype \the \@fpstype=ORD?):}%
1414  \tr@ce{\@spaces #1 = \the #1.  Ht float: \the \ht \@currbox
1415  ORD?}%

1416 ⟨/trace⟩ 1417 \fi 1418 \fi 1419 ⟨∗trace⟩

1420 \else
1421  \tr@ce{Fail---no room at 2nd test of colroom
1422  (flcheckspace \string#1 \string#2)}%

1423 ⟨/trace⟩ 1424 \fi 1425 } 1426 ⟨/2ekernel | autoload | fltrace⟩

\@flupdates This updates everything when a float is placed.

1427 ⟨∗2ekernel | autoload⟩

1428 \def \@flupdates #1#2#3{%
1429 \global \advance #1\m@ne
1430 \global \advance \@colnum \m@ne
1431 \@tempdima -\ht\@currbox
1432 \advance \@tempdima
1433  -\ifx #3\@empty \textfloatsep \else \floatsep \fi
1434 \global \advance #2\@tempdima
1435 \global \advance \@colroom \@tempdima
1436 \@cons #3\@currbox

1437 } 1438 ⟨/2ekernel | autoload⟩

Interesting facts about float mechanisms past and present, together with a summary of various features, some unresolved:

1. The value \textfraction does not affect the processing of doublecol floats: this seems sensible, but should be documented.

2. \twocolumn floatplacement was wrong: dbl not needed, ord needed.

3. \@floatplacement was not called after \@startdblcol or \@topnewpage.

This has been changed; it is clearly a bug fix.

4. The use \@topnewpage when \dblfigrule is non-trivial produced a rule in the wrong place. This has been fixed by not using \dblfigrule when processing the ‘float’ from \@topnewpage.

5. If the specifier was just h and the float could not be put here, it went on the deferlist and stayed there until a clearpage. It now gets changed to a ‘th’: this is only an error-recovery action, putting just h or !h should be deprecated.

6. \@dblmaxsep was ‘the maximum of \dblfloatsep and \dbltexfloatsep’.

But it was never used! Now gone completely, like \@maxsep.

7. After an h float is put on a page, it was counted as text when applying the \textfraction test; this is possibly too big a change although it is a bug fix?

8. Two consecutive h floats are separated by twice \intextsep: this could be changed to one by use of \addvspace, OK? Note that it would also mean that less space is put in if an h float immediaiely follows other spaces. This is also possibly too big a change, at least for compatibility mode? Or it may be simply wrong! It has not been changed.

9. Now \@addtocurcol checks first for just p fps. I think that this is an increase in efficiency, but maybe the coding should be made even more efficient.

10. \@tryfcolumn now tests if the list is empty first, otherwise lots of wasted time! Thus this test has been removed from \@startcolumn. As Frank pointed out, this makes \@startcolumn less efficient. But it is now the same as \@startdblcolumn: I can see no reason why they should be different, but which is best?

11. Why is \@colroom set in \@doclearpage?

12. Footnotes. Check what \clearpage does when footnotes are left over. Footnotes are not put on float pages and, also, \@addtonextcol ignores the existence of held-over footnotes in deciding what floats can go on the page. Not changed.

13. \clearpage can still lose non-boxes, at least when floats are involved. It also moves some to the ‘wrong page’, but this may be a coding problem.

14. The ! option makes it necessary to check in \output that there is enough room left on the page after adding a float. (This would have been necessary anyway if anyone set \@textmin too close to zero! A similar danger existed also if the text in a \twocolumn[text] entity gets too large.) The current implementation of this also makes the normal case a little less efficient, OK? Not enough room means, at present, less than \baselineskip, with a warning: is this OK? Should it be made generic (another parameter)?

15. There are four possibilities for supporting this:

\twocolumn[\maketitle more text]

One is to change \maketitle slightly to allow this. Another is to change \@topnewpage so that more than one \twocolumn[] command is allowed; in this case \maketitle\twoclumn[more text] will work. The former is more robust from the user’s viewpoint, but makes the code for \maketitle rather ad hoc (maybe it is already?). Another is to misuse the global twocolumn flag locally within \@topnewpage. Yet another is to move the column count register from the multicol package into the kernel. This has beeen done.

16. Where should the reinserts be put to maximise the probability that footmotes come out on the correct page? Or should we go for as much comaptibility as psossible (but see next item)?

17. Should we continue to support (as much as possible) \samepage? Some of its intended functionality is now advertised as being provided by \enlargethispage. Use of either is likely to result in wrongly placed footnotes, marginals, etc. Which should have priority: obeying the pagination instructions, or correct placement of notes/marginalia?

18. Is the adjustment of space to cause shrinking in the kludge-* case correct? Should it be limited to 0pt?

19. Is the setting of \boxmaxdepth in makecol and friends needed? It only has any effect if \@textbottom ends with a box or rule, in which case the vskip to allow for its depth should also be added. If it is kept, it should probably be the last thing in the box. It has now been removed.

It would perhaps be better to document that \@textbottom and \@texttop must have natural height 0pt.

20. I cannot see why the vskip adjustement for the depth is needed if boxmaxdepth is used to ensure that there is never a too deep box.

21. The value of \boxmaxdepth should be explicitly set whenever necessary: it is too risky to assume that it has any particular value. Care is needed in deciding what to set it to.

It is interesting to note that the value of \boxmaxdepth is unique in being read before the local settings for the box group are reset; all other parameter settings which affect the box construction use their values outside the box group.

22. Should \@maxdepth store the setting of \maxdepth from lplain? Or should we provide a proper interface to class files for setting these?

An analysis of various other macros. \@opcol should do \@floatplacement, but where? Right at the end, since it

always occurs at the start of a column.

\def\@opcol{%
% Why is this done first?
\global \@mparbottom \z@
\if@twocolumn
\@outputdblcol
\else
\@outputpage
% This is not needed since it is done at the end of
%   |\@outputpage|:
\global \@colht \textheight
\fi}

Only tracing has been added to these.

1439 ⟨∗2ekernel | autoload | fltrace⟩

1440 \def\@makefcolumn #1{%
1441 \begingroup
1442  \@fpmin \z@
1443  \let \@testfp \@gobble
1444  \@tryfcolumn #1%
1445 \endgroup

1446 ⟨∗trace⟩

1447 \if@fcolmade
1448  \tr@ce{PAGE: in \string\clearpage \if@twocolumn ---twocolumn\fi---}%
1449  \tr@ce{----- float column/page completed from \string#1}%

1450 \fi 1451 ⟨/trace⟩ 1452 }

This will line up the last baselines in the two columns provided they are constructed in the normal way: i.e. ending in a skip of minus the original depth, with \@textbottom adding nothing.

Thus again it is essential for \@textbottom to have depth 0pt.

1453 \def\@outputdblcol{%
1454 \if@firstcolumn
1455  \global \@firstcolumnfalse
1456  \global \setbox\@leftcolumn \box\@outputbox

1457 ⟨∗trace⟩

1458  \tr@ce{PAGE: first column boxed}%

1459 ⟨/trace⟩

1460 \else
1461  \global \@firstcolumntrue
1462  \setbox\@outputbox \vbox {%
1463  \hb@xt@\textwidth {%
1464  \hb@xt@\columnwidth {%
1465  \box\@leftcolumn \hss}%
1466  \hfil
1467  \vrule \@width\columnseprule
1468  \hfil
1469  \hb@xt@\columnwidth {%
1470  \box\@outputbox \hss}%

1471 }% 1472 }% 1473 ⟨∗trace⟩

1474  \tr@ce{PAGE: second column also boxed}%

1475 ⟨/trace⟩

1476  \@combinedblfloats
1477  \@outputpage

1478 ⟨∗trace⟩

1479  \tr@ce{PAGE: two column page completed}%

1480 ⟨/trace⟩

1481  \begingroup
1482  \@dblfloatplacement
1483  \@startdblcolumn

This loop could be replaced by an \expandafter tail recursion in

  \@startdblcolumn.
1484  \@whilesw\if@fcolmade \fi
1485  {\@outputpage

1486 ⟨∗trace⟩

1487  \tr@ce{PAGE: double float page completed}%

1488 ⟨/trace⟩

1489  \@startdblcolumn}%
1490  \endgroup

1491 \fi 1492 } 1493 ⟨/2ekernel | autoload | fltrace⟩

65.1.3 Float placement parameters

The main purpose of this section is to ensure that all the float-placement parameters which need to be set in a class file or package have been declared. It also describes their use and sets values for them which are reasonable for typical douments using US letter or A4 sized paper.

Limits for the placement of floating objects

\c@topnumber This counter holds the maximum number of floats that can appear at the top of a text page or column.

1494 ⟨∗2ekernel | autoload⟩

1495 \newcount\c@topnumber
1496 \setcounter{topnumber}{2}

\topfraction This macro holds the maximum proportion (as a decimal number) of a text page or column that can be occupied by floats at the top.

1497 \newcommand\topfraction{.7}

\c@bottomnumber This counter holds the maximum number of floats that can appear at the bottom of a text page or column.

1498 \newcount\c@bottomnumber
1499 \setcounter{bottomnumber}{1}

\bottomfraction This macro holds the maximum proportion (as a decimal number) of a text page or column that can be occupied by floats at the bottom.

1500 \newcommand\bottomfraction{.3}

\c@totalnumber This counter holds the maximum number of floats that can appear on any text page or column.

1501 \newcount\c@totalnumber
1502 \setcounter{totalnumber}{3}

\textfraction This macro holds the minimum proportion (as a decimal number) of a text page or column that must be occupied by text.

1503 \newcommand\textfraction{.2}

\floatpagefraction This macro holds the minimum proportion (as a decimal number) of a page or column that must be occupied by floating objects before a ‘float page’ is produced.

1504 \newcommand\floatpagefraction{.5}

\c@dbltopnumber This counter holds the maximum number of double-column floats that can appear on the top of a two-column text page.

1505 \newcount\c@dbltopnumber
1506 \setcounter{dbltopnumber}{2}

\dbltopfraction This macro holds the maximum proportion (as a decimal number) of a two-column text page that can be occupied by double-column floats at the top.

1507 \newcommand\dbltopfraction{.7}

\dblfloatpagefraction This macro holds the minimum proportion (as a decimal number) of a page that must be occupied by double-column floating objects before a ‘double-column float page’ is produced.

1508 \newcommand\dblfloatpagefraction{.5}

Floats on a text page

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

\floatsep is the space between adjacent floats that are placed at the top or bottom of the text page or column.

\textfloatsep is the space between the main text and floats at the top or bottom of the page or column.

\intextsep is the space between in-text floats and the text.

1509 \newskip\floatsep
1510 \newskip\textfloatsep
1511 \newskip\intextsep
1512 \setlength\floatsep    {12\p@ \@plus 2\p@ \@minus 2\p@}
1513 \setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
1514 \setlength\intextsep   {12\p@ \@plus 2\p@ \@minus 2\p@}

\dblfloatsep \dbltextfloatsep When double-column floats (floating objects that span the whole \textwidth) are placed at the top of a text page in two-column mode, the separation between the float and the text is controlled by \dblfloatsep and \dbltextfloatsep. They are rubber lengths.

\dblfloatsep is the space between adjacent double-column floats placed at the top of the text page.

\dbltextfloatsep is the space between the main text and double-column floats at the top of the page.

1515 \newskip\dblfloatsep
1516 \newskip\dbltextfloatsep
1517 \setlength\dblfloatsep    {12\p@ \@plus 2\p@ \@minus 2\p@}
1518 \setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}

Floats on their own page or column

\@fptop \@fpsep \@fpbot When floating objects are placed on a seperate page or column, called a ‘float page’, the layout of the page is controlled by these parameters, which are rubber lengths.

At the top of the page \@fptop is inserted; typically this supplies some stretchable whitespace. At the bottom of the page \@fpbot ais inserted. Between adjacent floats \@fpsep is inserted.

These parameters are used for all floating objects on a ‘float page’ in onecolumn mode, and for single-column floats in two-column mode.

Note that at least one of the two parameters \@fptop and \@fpbot should contain a plus ...fil so as to fill the remaining empty space.

1519 \newskip\@fptop
1520 \newskip\@fpsep
1521 \newskip\@fpbot
1522 \setlength\@fptop{0\p@ \@plus 1fil}
1523 \setlength\@fpsep{8\p@ \@plus 2fil}
1524 \setlength\@fpbot{0\p@ \@plus 1fil}

\@dblfptop \@dblfpsep \@dblfpbot Double-column ‘float pages’ in two-column mode use similar parameters.

1525 \newskip\@dblfptop
1526 \newskip\@dblfpsep
1527 \newskip\@dblfpbot
1528 \setlength\@dblfptop{0\p@ \@plus 1fil}
1529 \setlength\@dblfpsep{8\p@ \@plus 2fil}
1530 \setlength\@dblfpbot{0\p@ \@plus 1fil}

\topfigrule \botfigrule \dblfigrule The macros can be used to put in rules between floats and text; whatever they insert should be vertical mode material which takes up zero space.

1531 \let\topfigrule=\relax
1532 \let\botfigrule=\relax
1533 \let\dblfigrule=\relax

1534 ⟨/2ekernel | autoload⟩

File L

ltclass.dtx

66 Introduction

This file implements the following declarations, which replace \documentstyle in L^{A}TEX 2ε documents.

Note that old documents containing \documentstyle will be run using a compatibility option—thus keeping everyone happy, we hope!

The overall idea is that there are two types of ‘style files’: ‘class files’ which define elements and provide a default formatting for them; and ‘packages’ which provide extra functionality. One difference between L^{A}TEX 2ε and L^{A}TEX2.09 is that L^{A}TEX 2ε packages may have options. Note that options to classes packages may be implemented such that they input files, but these file names are not necessarily directly related to the option name.

67 User interface

\documentclass[⟨main-option-list⟩]{⟨class⟩}[⟨version⟩]

There must be exactly one such declaration, and it must come first. The ⟨main-option-list⟩ is a list of options which can modify the formatting of elements which are defined in the ⟨class⟩ file as well as in all following \usepackage declarations (see below). The ⟨version⟩ is a version number, beginning with a date in the format YYYY/MM/DD. If an older version of the class is found, a warning is issued.

\documentstyle[⟨main-option-list⟩]{⟨class⟩}[⟨version⟩]

The \documentstyle declaration is kept in order to maintain upward compatibility with L^{A}TEX2.09 documents. It is similar to \documentclass, but it causes all options in ⟨main-option-list⟩ that the ⟨class⟩ does not use to be passed to \RequirePackage after the options have been processed. This maintains compatibility with the 2.09 behaviour. Also a flag is set to indicate that the document is to be processed in L^{A}TEX2.09 compatibility mode. As far as most packages are concerned, this only affects the warnings and errors L^{A}TEX generates. This flag does affect the definition of font commands, and \sloppy.

\usepackage[⟨package-option-list⟩]{⟨package-list⟩}[⟨version⟩]

There can be any number of these declarations. All packages in ⟨package-list⟩ are called with the same options.

Each ⟨package⟩ file defines new elements (or modifies those defined in the ⟨class⟩), and thus extends the range of documents which can be processed. The ⟨package-option-list⟩ is a list of options which can modify the formatting of elements defined in the ⟨package⟩ file. The ⟨version⟩ is a version number, beginning with a date in the format YYYY/MM/DD. If an older version of the package is found, a warning is issued.

Each package is loaded only once. If the same package is requested more than once, nothing happens, unless the package has been requested with options that were not given the first time it was loaded, in which case an error is produced.

As well as processing the options given in the ⟨package-option-list⟩, each package processes the ⟨main-option-list⟩. This means that options that affect all of the packages can be given globally, rather than repeated for every package.

Note that class files have the extension .cls, packages have the extension .sty.

filecontents The environment filecontents is intended for passing the contents of packages, options, or other files along with a document in a single file. It has one argument, which is the name of the file to create. If that file already exists (maybe only in the current directory if the OS supports a notion of a ‘current directory’ or ‘default directory’) then nothing happens (except for an information message) and the body of the environment is bypassed. Otherwise, the body of the environment is written verbatim to the file name given as the first argument.

The environment is allowed only before \documentclass to ensure that all packages or options necessary for this particular run are present when needed.

67.1 Option processing

When the options are processed, they are divided into two types: local and global:

• For a class, the options in the \documentclass command are local.

• For a package, the options in the \usepackage command are local, and the options in the \documentclass command are global.

The options for \documentclass and \usepackage are processed in the following way:

1. The local and global options that have been declared (using \DeclareOption as described below) are processed first.

In the case of \ProcessOptions, they are processed in the order that they were declared in the class or package.

In the case of \ProcessOptions*, they are processed in the order that they appear in the option-lists. First the global options, and then the local ones.

2. Any remaining local options are dealt with using the default option (declared using the \DeclareOption* declaration described below). For document classes, this usually does nothing, but records the option on a list of unused options. For packages, this usually produces an error.

Finally, when \begin{document} is reached, if there are any global options which have not been used by either the class or any package, the system will produce a warning.

68 Class and Package interface

68.1 Class name and version

\ProvidesClass A class can identify itself with the \ProvidesClass{⟨name⟩}[⟨version⟩] command. The ⟨version⟩ should begin with a date in the format YYYY/MM/DD.

68.2 Package name and version

\ProvidesPackage A package can identify itself with the \ProvidesPackage{⟨name⟩}[⟨version⟩] command. The ⟨version⟩ should begin with a date in the format YYYY/MM/DD.

68.3 Requiring other packages

\RequirePackage Packages or classes can load other packages using \RequirePackage[⟨options⟩]{⟨name⟩}[⟨version⟩]. If the package has already been loaded, then nothing happens unless the requested options are not a subset of the options with which it was loaded, in which case an error is called.

\LoadClass Similar to \RequirePackage, but for classes, may not be used in package files.

\PassOptionsToPackage Packages can pass options to other packages using:

\PassOptionsToPackage{⟨options⟩}{⟨package⟩}.

\PassOptionsToClass This adds the ⟨options⟩ to the options list of any future \RequirePackage or \usepackage command. For example:

    \PassOptionsToPackage{foo,bar}{fred}
    \RequirePackage[baz]{fred}

is the same as:

    \RequirePackage[foo,bar,baz]{fred}
\LoadClassWithOptions      \LoadClassWithOptions{⟨name⟩}[⟨version⟩]:

This is similar to \LoadClass, but it always calls class ⟨name⟩ with exactly the same option list that is being used by the current class, rather than an option explicitly supplied or passed on by \PassOptionsToClass.

\RequirePackageWithOptions  \RequirePackageWithOptions is the analogous command for packages.

This is mainly intended to allow one class to simply build on another, for example:

   \LoadClassWithOptions{article}

This should be contrasted with the slightly different construction

   \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
   \ProcessOptions
   \LoadClass{article}

As used here, the effects are more or less the same, but the version using \LoadClassWithOptions is slightly quicker (and less to type). If, however, the class declares options of its own then the two constructions are different; compare, for example:

   \DeclareOption{landscape}{...}
   \ProcessOptions
   \LoadClassWithOptions{article}

with:

   \DeclareOption{landscape}{...}
   \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
   \ProcessOptions
   \LoadClass{article}

In the first case, the article class will be called with option landscape precisely when the current class is called with this option; but in the second example it will not as in that case article is only passed options by the default option handler, which is not used for landscape as that option is explicitly declared.

\@ifpackageloaded To find out if a package has already been loaded, use

\@ifclassloaded  \@ifpackageloaded{⟨package⟩}{⟨true⟩}{⟨false⟩}.

\@ifpackagelater To find out if a package has already been loaded with a version more recent \@ifclasslater than ⟨version⟩, use \@ifpackagelater{⟨package⟩}{⟨version⟩}{⟨true⟩}{⟨false⟩}. \@ifpackagewith To find out if a package has already been loaded with at least the options

\@ifclasswith ⟨options⟩, use \@ifpackagewith{⟨package⟩}{⟨options⟩}{⟨true⟩}{⟨false⟩}.

68.4 Declaring new options

Options for classes and packages are built using the same macros.

\DeclareOption To define a builtin option, use \DeclareOption{⟨name⟩}{⟨code⟩}. \DeclareOption* To define the default action to perform for local options which have not been

declared, use \DeclareOption*{⟨code⟩}.

Note: there should be no use of

\RequirePackage, \DeclareOption, \DeclareOption* or \ProcessOptions
inside \DeclareOption or \DeclareOption*.

Possible uses for \DeclareOption* include:

   \DeclareOption*{}

Do nothing. Silently accept unknown options. (This suppresses the usual warnings.)

   \DeclareOption*{\@unkownoptionerror}

Complain about unknown local options. (The initial setting for package files.)

   \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{⟨pkg-name⟩}

Handle the the current option by passing it on to the package ⟨pkg-name⟩, which will presumably be loaded via \RequirePackage later in the file. This is useful for building ‘extension’ packages, that perhaps handle a couple of new options, but then pass everything else on to an existing package.

   \DeclareOption*{\InputIfFileExists{xx-\CurrentOption.yyy}%
               {}%
               {\OptionNotUsed}}

Handle the option foo by loading the file xx-foo.yyy if it exists, otherwise do nothing, but declare that the option was not used. Actually the \OptionNotUsed declaration is only needed if this is being used in class files, but does no harm in package files.

68.5 Safe Input Macros

\InputIfFileExists  \InputIfFileExists{⟨file⟩}{⟨then⟩}{⟨else⟩}

Inputs ⟨file⟩ if it exists. Immediately before the input, ⟨then⟩ is executed. Otherwise ⟨else⟩ is executed.

\IfFileExists As above, but does not input the file.

One thing you might like to put in the ⟨else⟩ clause is

\@missingfileerror This starts an interactive request for a filename, supplying default extensions. Just hitting return causes the whole input to be skipped and entering x quits the current run,

\input This has been redefined from the L^{A}TEX2.09 definition, in terms of the new

commands \InputIfFileExists and \@missingfileerror.

\listfiles Giving this declaration in the preamble causes a list of all files input via the ‘safe input’ commands to be listed at the end. Any strings specified in the optional argument to \ProvidesPackage are listed alongside the file name. So files in standard (and other non-standard) distributions can put informative strings in this argument.

69 Implementation

1 ⟨∗2ekernel⟩

\if@compatibility The flag for compatibilty mode.

 2 \newif\if@compatibility

\@documentclasshook The hook called after the first \documentclass command. By default this checks to see if \@normalsize is undefined, and if so, sets it to \normalsize.

 3 \def\@documentclasshook{%
 4 \ifx\@normalsize\@undefined
 5  \let\@normalsize\normalsize
 6 \fi
 7 }

\@declaredoptions This list is automatically built by \DeclareOption. It is the list of options (separated by commas) declared in the class or package file and it defines the order in which the the corresponding \ds@⟨option⟩ commands are executed. All local ⟨option⟩s which are not declared will be processed in the order defined by the

optional argument of \documentclass or \usepackage.
 8 \let\@declaredoptions\@empty

\@classoptionslist List of options of the main class.

 9 \let\@classoptionslist\relax
10 \@onlypreamble\@classoptionslist

\@unusedoptionlist List of options of the main class that haven’t been declared or loaded as class option files.

11 \let\@unusedoptionlist\@empty
12 \@onlypreamble\@unusedoptionlist

\CurrentOption Name of current package or option.

13 \let\CurrentOption\@empty

\@currname Name of current package or option.

14 \let\@currname\@empty

\@currext The current file extension.

15 \global\let\@currext=\@empty
\@clsextension \@pkgextension The two possible values of \@currext.
16 \def\@clsextension{cls}
17 \def\@pkgextension{sty}
18 \@onlypreamble\@clsextension
19 \@onlypreamble\@pkgextension

\@pushfilename \@popfilename \@currnamestack Commands to push and pop the file name and extension. #1 current name. #2 current extension. #3 current catcode of @. #4 Rest of the stack.

20 \def\@pushfilename{%
21 \xdef\@currnamestack{%
22  {\@currname}%
23  {\@currext}%
24  {\the\catcode`\@}%
25  \@currnamestack}}
26 \@onlypreamble\@pushfilename
27 \def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil}
28 \@onlypreamble\@popfilename
29 \def\@p@pfilename#1#2#3#4\@nil{%
30 \gdef\@currname{#1}%
31 \gdef\@currext{#2}%
32 \catcode`\@#3\relax
33 \gdef\@currnamestack{#4}}
34 \@onlypreamble\@p@pfilename
35 \gdef\@currnamestack{}
36 \@onlypreamble\@currnamestack

\@ptionlist Returns the option list of the file.

37 \def\@ptionlist#1{%
38 \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}}
39 \@onlypreamble\@ptionlist
\@ifpackageloaded \@ifclassloaded  \@ifpackageloaded{⟨name⟩} Checks to see whether a file has been loaded.
40 \def\@ifpackageloaded{\@ifl@aded\@pkgextension}
41 \def\@ifclassloaded{\@ifl@aded\@clsextension}
42 \@onlypreamble\@ifpackageloaded
43 \@onlypreamble\@ifclassloaded
44 \def\@ifl@aded#1#2{%
45 \expandafter\ifx\csname ver@#2.#1\endcsname\relax
46  \expandafter\@secondoftwo
47 \else
48  \expandafter\@firstoftwo
49 \fi}
50 \@onlypreamble\@ifl@aded
\@ifpackagelater \@ifclasslater  \@ifpackagelater{⟨name⟩}{YYYY/MM/DD} Checks that the package loaded is

more recent than the given date.

51 \def\@ifpackagelater{\@ifl@ter\@pkgextension}
52 \def\@ifclasslater{\@ifl@ter\@clsextension}
53 \@onlypreamble\@ifpackagelater
54 \@onlypreamble\@ifclasslater
55 \def\@ifl@ter#1#2{%
56 \expandafter\@ifl@t@r
57  \csname ver@#2.#1\endcsname}
58 \@onlypreamble\@ifl@ter

This internal macro is also used in \NeedsTeXFormat.

59 \def\@ifl@t@r#1#2{%
60 \ifnum\expandafter\@parse@version#1//00\@nil<%
61  \expandafter\@parse@version#2//00\@nil
62  \expandafter\@secondoftwo
63 \else
64  \expandafter\@firstoftwo
65 \fi}
66 \@onlypreamble\@ifl@t@r
67 \def\@parse@version#1/#2/#3#4#5\@nil{#1#2#3#4 }
68 \@onlypreamble\@parse@version

\@ifpackagewith \@ifclasswith \@ifpackagewith{⟨name⟩}{⟨option-list⟩} Checks that ⟨option-list⟩ is a subset of the options with which ⟨name⟩ was loaded.

69 \def\@ifpackagewith{\@if@ptions\@pkgextension}
70 \def\@ifclasswith{\@if@ptions\@clsextension}
71 \@onlypreamble\@ifpackagewith
72 \@onlypreamble\@ifclasswith

73 \def\@if@ptions#1#2{%
74 \@expandtwoargs\@if@pti@ns{\@ptionlist{#2.#1}}}
75 \@onlypreamble\@if@ptions

Probably shouldnt use \CurrentOption here… (changed to \reserved@b.)

76 \def\@if@pti@ns#1#2{%
77 \let\reserved@a\@firstoftwo
78 \@for\reserved@b:=#2\do{%
79  \expandafter\in@\expandafter{\expandafter,\reserved@b,}{,#1,}%
80  \ifin@\else\let\reserved@a\@secondoftwo\fi}%
81 \reserved@a}
82 \@onlypreamble\@if@pti@ns

\ProvidesPackage Checks that the current filename is correct, and defines \ver@filename.

83 \def\ProvidesPackage#1{%
84 \xdef\@gtempa{#1}%
85 \ifx\@gtempa\@currname\else
86  \@latex@warning@no@line{You have requested
87  \@cls@pkg\space`\@currname',\MessageBreak
88  but the \@cls@pkg\space provides `#1'}%
89 \fi
90 \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
91 \@onlypreamble\ProvidesPackage
92 \def\@pr@videpackage[#1]{%
93 \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}%
94 \ifx\@currext\@clsextension
95  \typeout{Document Class: \@gtempa\space#1}%
96 \else
97  \wlog{Package: \@gtempa\space#1}%
98 \fi}
99 \@onlypreamble\@pr@videpackage
\ProvidesClass Like \ProvidesPackage, but for classes.
100 \let\ProvidesClass\ProvidesPackage
101 \@onlypreamble\ProvidesClass
\ProvidesFile Like \ProvidesPackage, but for arbitrary files. Do not apply \@onlypreamble to

these, as we may want to label files input during the document.

\@providesfile
102 \def\ProvidesFile#1{%
103 \begingroup
104  \catcode`\ 10 %
105  \@makeother\/%
106  \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}

During initex a special version of \@providesfile is used. The real definition is installed right at the end, in ltfinal.dtx.

\def\@providesfile#1[#2]{%

     \wlog{File: #1 #2}%
     \expandafter\xdef\csname ver@#1\endcsname{#2}%
   \endgroup}
     \end{macrocode}

\PassOptionsToPackage \PassOptionsToClass If the package has been loaded, we check that it was first loaded with the options. Otherwise we add the option list to that of the package.

107 \def\@pass@ptions#1#2#3{%
108 \expandafter\xdef\csname opt@#3.#1\endcsname{%
109  \@ifundefined{opt@#3.#1}\@empty
110  {\csname opt@#3.#1\endcsname,}%
111  \zap@space#2 \@empty}}
112 \@onlypreamble\@pass@ptions
113 \def\PassOptionsToPackage{\@pass@ptions\@pkgextension}
114 \def\PassOptionsToClass{\@pass@ptions\@clsextension}
115 \@onlypreamble\PassOptionsToPackage
116 \@onlypreamble\PassOptionsToClass
\DeclareOption \DeclareOption* Adds an option as a \ds@ command, or the default \default@ds command.
117 \def\DeclareOption{%
118 \let\@fileswith@pti@ns\@badrequireerror
119 \@ifstar\@defdefault@ds\@declareoption}
120 \long\def\@declareoption#1#2{%
121 \xdef\@declaredoptions{\@declaredoptions,#1}%
122 \toks@{#2}%
123 \expandafter\edef\csname ds@#1\endcsname{\the\toks@}}
124 \long\def\@defdefault@ds#1{%
125 \toks@{#1}%
126 \edef\default@ds{\the\toks@}}
127 \@onlypreamble\DeclareOption
128 \@onlypreamble\@declareoption
129 \@onlypreamble\@defdefault@ds

\OptionNotUsed If we are in a class file, add \CurrentOption to the list of unused options. Otherwise, in a package file do nothing.

130 \def\OptionNotUsed{%
131 \ifx\@currext\@clsextension
132  \xdef\@unusedoptionlist{%
133  \ifx\@unusedoptionlist\@empty\else\@unusedoptionlist,\fi
134  \CurrentOption}%
135 \fi}
136 \@onlypreamble\OptionNotUsed

\default@ds The default default option code. Set by \@onefilewithoptions to either

 \OptionNotUsed for classes, or \@unknownoptionerror for packages. This may

be reset in either case with \DeclareOption*.

137 % \let\default@ds\OptionNotUsed

\ProcessOptions \ProcessOptions*  \ProcessOptions calls \ds@option for each known package option, then calls

\default@ds for each option on the local options list. Finally resets all the declared options to \relax. The empty option does nothing, this has to be reset on the off chance it’s set to \relax if an empty element gets into the

 \@declaredoptions list.

The star form is similar but executes options given in the order specified in the document, not the order they are declared in the file. In the case of packages, global options are executed before local ones.

138 \def\ProcessOptions{%
139 \let\ds@\@empty
140 \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
141 \@ifstar\@xprocess@ptions\@process@ptions}
142 \@onlypreamble\ProcessOptions
143 \def\@process@ptions{%
144 \@for\CurrentOption:=\@declaredoptions\do{%
145  \ifx\CurrentOption\@empty\else
146  \@expandtwoargs\in@{,\CurrentOption,}{%
147  ,\ifx\@currext\@clsextension\else\@classoptionslist,\fi
148  \@curroptions,}%
149  \ifin@
150  \@use@ption
151  \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
152  \fi
153  \fi}%
154 \@process@pti@ns}
155 \@onlypreamble\@process@ptions
156 \def\@xprocess@ptions{%
157 \ifx\@currext\@clsextension\else
158  \@for\CurrentOption:=\@classoptionslist\do{%
159  \ifx\CurrentOption\@empty\else
160  \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}%
161  \ifin@
162  \@use@ption
163  \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
164  \fi
165  \fi}%
166 \fi
167 \@process@pti@ns}
168 \@onlypreamble\@xprocess@ptions
    The common part of \ProcessOptions and \ProcessOptions*.
169 \def\@process@pti@ns{%
170 \@for\CurrentOption:=\@curroptions\do{%
171  \@ifundefined{ds@\CurrentOption}%
172  {\@use@ption
173  \default@ds}%

There should not be any non-empty definition of \CurrentOption at this point, as all the declared options were executed earlier. This is for compatibility with 2.09 styles which use \def\ds@… directly, and so have options which do not appear

 in \@declaredoptions.
174  \@use@ption}%

Clear all the definitions for option code. First set all the declared options to \relax, then reset the ‘default’ and ‘empty’ options. and the lst of declared options.

175 \@for\CurrentOption:=\@declaredoptions\do{%
176  \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
177 \let\CurrentOption\@empty
178 \let\@fileswith@pti@ns\@@fileswith@pti@ns
179 \AtEndOfPackage{\let\@unprocessedoptions\relax}}
180 \@onlypreamble\@process@pti@ns

\@options \@options is a synonym for \ProcessOptions* for upward compatibility with L^{A}TEX2.09 style files.

181 \def\@options{\ProcessOptions*}
182 \@onlypreamble\@options

\@use@ption Execute the code for the current option.

183 \def\@use@ption{%
184 \@expandtwoargs\@removeelement\CurrentOption
185 \@unusedoptionlist\@unusedoptionlist
186 \csname ds@\CurrentOption\endcsname}
187 \@onlypreamble\@use@ption

\ExecuteOptions \ExecuteOptions{⟨option-list⟩} executes the code declared for each option.

188 \def\ExecuteOptions#1{%
189 \def\reserved@a##1\@nil{%
190  \@for\CurrentOption:=#1\do{\csname ds@\CurrentOption\endcsname}%
191  \edef\CurrentOption{##1}}%
192 \expandafter\reserved@a\CurrentOption\@nil}
193 \@onlypreamble\ExecuteOptions

The top-level commands, which just set some parameters then call the internal

 command, \@fileswithoptions.

\documentclass The main new-style class declaration.

194 \def\documentclass{%
195 \let\documentclass\@twoclasseserror
196 \if@compatibility\else\let\usepackage\RequirePackage\fi
197 \@fileswithoptions\@clsextension}
198 \@onlypreamble\documentclass

\documentstyle 2.09 style class ‘style’ declaration.

199 \def\documentstyle{%
200 \makeatletter\input{latex209.def}\makeatother
201 \documentclass}
202 \@onlypreamble\documentstyle

\RequirePackage Load package if not already loaded.

203 \def\RequirePackage{%
204 \@fileswithoptions\@pkgextension}
205 \@onlypreamble\RequirePackage
\LoadClass Load class.
206 \def\LoadClass{%
207 \ifx\@currext\@pkgextension
208  \@latex@error
209  {\noexpand\LoadClass in package file}%
210  {You may only use \noexpand\LoadClass in a class file.}%
211 \fi
212 \@fileswithoptions\@clsextension}
213 \@onlypreamble\LoadClass

\@loadwithoptions Pass the current option list on to a class or package. #1 is \@cls-or-pkgextension, #2 is \RequirePackage or \LoadClass, #3 is the class or package to be loaded.

214 \def\@loadwithoptions#1#2#3{%
215 \expandafter\let\csname opt@#3.#1\expandafter\endcsname
216  \csname opt@\@currname.\@currext\endcsname
217 #2{#3}}
218 \@onlypreamble\@loadwithoptions

\LoadClassWithOptions Load class ‘#1’ with the current option list.

219 \def\LoadClassWithOptions{%
220 \@loadwithoptions\@clsextension\LoadClass}
221 \@onlypreamble\LoadClassWithOptions

\RequirePackageWithOptions Load package ‘#1’ with the current option list.

222 \def\RequirePackageWithOptions{%
223 \AtEndOfPackage{\let\@unprocessedoptions\relax}%
224 \@loadwithoptions\@pkgextension\RequirePackage}
225 \@onlypreamble\RequirePackageWithOptions

\usepackage To begin with, \usepackage produces an error. This is reset by \documentclass.

226 \def\usepackage#1#{%
227 \@latex@error
228  {\noexpand \usepackage before \string\documentclass}%
229  {\noexpand \usepackage may only appear in the document
230  preamble, i.e.,\MessageBreak
231  between \noexpand\documentclass and
232  \string\begin{document}.}%
233 \@gobble}
234 \@onlypreamble\usepackage

\NeedsTeXFormat Check that the document is running on the correct system.

235 \def\NeedsTeXFormat#1{%

236 \def\reserved@a{#1}%
237 \ifx\reserved@a\fmtname
238  \expandafter\@needsformat
239 \else
240  \@latex@error{This file needs format `\reserved@a'%
241  \MessageBreak but this is `\fmtname'}{%
242  The current input file will not be processed
243  further,\MessageBreak
244  because it was written for some other flavor of
245  TeX.\MessageBreak\@ehd}%

If the file is not meant to be processed by L^{A}TEX 2ε we stop inputting it, but we do not end the run. We just end inputting the current file.

246  \endinput \fi}
247 \@onlypreamble\NeedsTeXFormat
248 \def\@needsformat{%
249 \@ifnextchar[%]
250  \@needsf@rmat
251  {}}
252 \@onlypreamble\@needsformat
253 \def\@needsf@rmat[#1]{%
254  \@ifl@t@r\fmtversion{#1}{}%
255  {\@latex@warning@no@line
256  {You have requested release `#1' of LaTeX,\MessageBreak
257  but only release `\fmtversion' is available}}}
258 \@onlypreamble\@needsf@rmat

\zap@space \zap@space foo⟨space⟩\@empty removes all spaces from foo that are not protected by { } groups.

259 \def\zap@space#1 #2{%
260 #1%
261 \ifx#2\@empty\else\expandafter\zap@space\fi
262 #2}
\@fileswithoptions The common part of \documentclass and \usepackage.
263 \def\@fileswithoptions#1{%
264 \@ifnextchar[%]
265  {\@fileswith@ptions#1}%
266  {\@fileswith@ptions#1[]}}
267 \@onlypreamble\@fileswithoptions
268 \def\@fileswith@ptions#1[#2]#3{%
269 \@ifnextchar[%]
270 {\@fileswith@pti@ns#1[#2]#3}%
271 {\@fileswith@pti@ns#1[#2]#3[]}}
272 \@onlypreamble\@fileswith@ptions

Then we do some work.

First of all, we define the global variables. Then we look to see if the file has already been loaded. If it has, we check that it was first loaded with at least the current options. If it has not, we add the current options to the package options, set the default version to be 0000/00/00, and load the file if we can find it. Then we check the version number.

Finally, we restore the old file name, reset the default option, and we set the catcode of @.

For classes, we can immediately process the file. For other types, #2 could be a comma separated list, so loop through, processing each one separately.

273 \def\@fileswith@pti@ns#1[#2]#3[#4]{%
274 \ifx#1\@clsextension
275  \ifx\@classoptionslist\relax
276  \xdef\@classoptionslist{\zap@space#2 \@empty}%
277  \def\reserved@a{%
278  \@onefilewithoptions#3[#2][#4]#1%
279  \@documentclasshook}%
280  \else
281  \def\reserved@a{%
282  \@onefilewithoptions#3[#2][#4]#1}%
283  \fi
284 \else

build up a list of calls to \@onefilewithoptions (one for each package) without thrashing the parameter stack.

285  \def\reserved@b##1,{%
286  \ifx\@nil##1\relax\else
287  \ifx\relax##1\relax\else
288  \noexpand\@onefilewithoptions##1[#2][#4]\noexpand\@pkgextension
289  \fi
290  \expandafter\reserved@b
291  \fi}%
292  \edef\reserved@a{\zap@space#3 \@empty}%
293  \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}%
294 \fi
295 \reserved@a}
296 \@onlypreamble\@fileswith@pti@ns

Have the main argument as #1, so we only need one \expandafter above.

297 \def\@onefilewithoptions#1[#2][#3]#4{%
298 \@pushfilename
299 \xdef\@currname{#1}%
300 \global\let\@currext#4%
301 \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
302 \let\CurrentOption\@empty
303 \@reset@ptions
304 \makeatletter

Grab everything in a macro, so the parameter stack is popped before any processing begins.

305 \def\reserved@a{%

306  \@ifl@aded\@currext{#1}%
307  {\@if@ptions\@currext{#1}{#2}{}%
308  {\@latex@error
309  {Option clash for \@cls@pkg\space #1}%
310  {The package #1 has already been loaded
311  with options:\MessageBreak
312  \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
313  There has now been an attempt to load it
314  with options\MessageBreak
315  \space\space[#2]\MessageBreak
316  Adding the line:\MessageBreak
317  \space\space\string\usepackage
318  [\@ptionlist{#1.\@currext},#2]{#1}\MessageBreak
319  to your document may fix this.\MessageBreak
320  Try typing \space <return> \space to proceed.}}}%
321  {\@pass@ptions\@currext{#2}{#1}%
322  \global\expandafter
323  \let\csname ver@\@currname.\@currext\endcsname\@empty
324  \InputIfFileExists
325  {\@currname.\@currext}%
326  {}%
327  {\@missingfileerror\@currname\@currext}%

\@unprocessedoptions will generate an error for each specified option in a package unless a \ProcessOptions has appeared in the package file.

328  \let\@unprocessedoptions\@@unprocessedoptions
329  \csname\@currname.\@currext-h@@k\endcsname
330  \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
331  \@undefined
332  \@unprocessedoptions}
333  \@ifl@ter\@currext{#1}{#3}{}%
334  {\@latex@warning@no@line
335  {You have requested,\on@line,
336  version\MessageBreak
337  `#3' of \@cls@pkg\space #1,\MessageBreak
338  but only version\MessageBreak
339  `\csname ver@#1.\@currext\endcsname'\MessageBreak
340  is available}}%
341  \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
342  \@popfilename
343  \@reset@ptions}%
344 \reserved@a}
345 \@onlypreamble\@onefilewithoptions

\@@fileswith@pti@ns Save the definition (for error checking).

346 \let\@@fileswith@pti@ns\@fileswith@pti@ns
347 \@onlypreamble\@@fileswith@pti@ns

\@reset@ptions Reset the default option, and clear lists of declared options.

348 \def\@reset@ptions{%
349 \global\ifx\@currext\@clsextension
350  \let\default@ds\OptionNotUsed
351 \else
352  \let\default@ds\@unknownoptionerror
353 \fi
354 \global\let\ds@\@empty
355 \global\let\@declaredoptions\@empty}
356 \@onlypreamble\@reset@ptions

69.1 Hooks

Allow code do be saved to be executed at specific later times.

Save things in macros, I considered using toks registers, (and \addto@hook from the NFSS code, that would require stacking the contents in the case of required packages, so just generate a new macro for each package.

\@begindocumenthook \@enddocumenthook Stuff to appear at the begining or end of the document.

357 \ifx\@begindocumenthook\@undefined
358 \let\@begindocumenthook\@empty
359 \fi
360 \let\@enddocumenthook\@empty

\g@addto@macro Globally add to the end of a macro.

361 \long\def\g@addto@macro#1#2{%
362 \begingroup
363  \toks@\expandafter{#1#2}%
364  \xdef#1{\the\toks@}%
365 \endgroup}
\AtEndOfPackage \AtEndOfClass \AtBeginDocument \AtEndDocument The access functions.
366 \def\AtEndOfPackage{%
367 \expandafter\g@addto@macro\csname\@currname.\@currext-h@@k\endcsname}
368 \let\AtEndOfClass\AtEndOfPackage
369 \@onlypreamble\AtEndOfPackage
370 \@onlypreamble\AtEndOfClass
371 \def\AtBeginDocument{\g@addto@macro\@begindocumenthook}
372 \def\AtEndDocument{\g@addto@macro\@enddocumenthook}
373 \@onlypreamble\AtBeginDocument

\@cls@pkg The current file type.

374 \def\@cls@pkg{%
375 \ifx\@currext\@clsextension
376  document class%
377 \else
378  package%
379 \fi}
380 \@onlypreamble\@cls@pkg

\@unknownoptionerror Bad option.
381 \def\@unknownoptionerror{%
382 \@latex@error
383  {Unknown option `\CurrentOption' for \@cls@pkg\space`\@currname'}%
384  {The option `\CurrentOption' was not declared in
385  \@cls@pkg\space`\@currname', perhaps you\MessageBreak
386  misspelled its name.
387  Try typing \space <return>
388  \space to proceed.}}
389 \@onlypreamble\@unknownoptionerror

\@@unprocessedoptions Declare an error for each option, unless a \ProcessOptions occured.

390 \def\@@unprocessedoptions{%
391 \ifx\@currext\@pkgextension
392  \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
393  \@for\CurrentOption:=\@curroptions\do{%
394  \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
395 \fi}
396 \@onlypreamble\@unprocessedoptions
397 \@onlypreamble\@@unprocessedoptions
\@badrequireerror  \RequirePackage or \LoadClass occurs in the options section.
398 \def\@badrequireerror#1[#2]#3[#4]{%
399 \@latex@error
400  {\noexpand\RequirePackage or \noexpand\LoadClass
401  in Options Section}%
402  {The \@cls@pkg\space `\@currname' is defective.\MessageBreak
403  It attempts to load `#3' in the options section, i.e.,\MessageBreak
404  between \noexpand\DeclareOption and \string\ProcessOptions.}}
405 \@onlypreamble\@badrequireerror
\@twoloadclasserror Two \LoadClass in a class.
406 \def\@twoloadclasserror{%
407 \@latex@error
408  {Two \noexpand\LoadClass commands}%
409  {You may only use one \noexpand\LoadClass in a class file}}
410 \@onlypreamble\@twoloadclasserror
\@twoclasseserror Two \documentclass or \documentstyle.
411 \def\@twoclasseserror#1#{%
412 \@latex@error
413  {Two \noexpand\documentclass or \noexpand\documentstyle commands}%
414  {The document may only declare one class.}\@gobble}
415 \@onlypreamble\@twoclasseserror

69.2 Providing shipment

\two@digits Prefix a number less than 10 with ‘0’.

416 \def\two@digits#1{\ifnum#1<10 0\fi\number#1}

\filecontents \endfilecontents This environment implements inline files. The star-form does not write extra comments into the file.

417 \begingroup%
418 \catcode`\*=11 %
419 \catcode`\^^M\active%
420 \catcode`\^^L\active\let^^L\relax%
421 \catcode`\^^I\active%
422 \gdef\filecontents{\@tempswatrue\filec@ntents}%
423 \gdef\filecontents*{\@tempswafalse\filec@ntents}%
424 \gdef\filec@ntents#1{%
425 \openin\@inputcheck#1 %
426 \ifeof\@inputcheck%
427  \@latex@warning@no@line%
428  {Writing file `\@currdir#1'}%
429  \chardef\reserved@c15 %
430  \ch@ck7\reserved@c\write%
431  \immediate\openout\reserved@c#1\relax%
432 \else%
433  \closein\@inputcheck%
434  \@latex@warning@no@line%
435  {File `#1' already exists on the system.\MessageBreak%
436  Not generating it from this source}%
437  \let\write\@gobbletwo%
438  \let\closeout\@gobble%
439 \fi%
440 \if@tempswa%
441  \immediate\write\reserved@c{%
442  \@percentchar\@percentchar\space%
443  \expandafter\@gobble\string\LaTeX2e file `#1'^^J%
444  \@percentchar\@percentchar\space  generated by the %
445  `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
446  \@percentchar\@percentchar\space from source `\jobname' on %
447  \number\year/\two@digits\month/\two@digits\day.^^J%
448  \@percentchar\@percentchar}%
449 \fi%
450 \let\do\@makeother\dospecials%
451 \edef\E{\@backslashchar end\string{\@currenvir\string}}%
452 \edef\reserved@b{%
453  \def\noexpand\reserved@b%
454  ####1\E####2\E####3\relax}%
455 \reserved@b{%
456  \ifx\relax##3\relax%
 There was no \end{filecontents}
457  \immediate\write\reserved@c{##1}%
458  \else%

There was a \end{filecontents}, so stop this time.

459  \edef^^M{\noexpand\end{\@currenvir}}%
460  \ifx\relax##1\relax%
461  \else%

Text before the \end, write it with a warning.

462  \@latex@warning{Writing text `##1' before %
463  \string\end{\@currenvir}\MessageBreak as last line of #1}%
464  \immediate\write\reserved@c{##1}%
465  \fi%
466  \ifx\relax##2\relax%
467  \else%

Text after the \end, ignore it with a warning.

468  \@latex@warning{%
469  Ignoring text `##2' after \string\end{\@currenvir}}%
470  \fi%
471  \fi%
472  ^^M}%
473 \catcode`\^^L\active%
474 \let\L\@undefined%
475 \def^^L{\@ifundefined L^^J^^J^^J}%
476 \catcode`\^^I\active%
477 \let\I\@undefined%
478 \def^^I{\@ifundefined I\space\space}%
479 \catcode`\^^M\active%
480 \edef^^M##1^^M{%
481  \noexpand\reserved@b##1\E\E\relax}}%
482 \endgroup%
483 \begingroup
484 \catcode`|=\catcode`\%
485 \catcode`\%=12
486 \catcode`\*=11
487 \gdef\@percentchar{%}
488 \gdef\endfilecontents{|
489 \immediate\closeout\reserved@c
490 \def\T##1##2##3{|
491 \ifx##1\@undefined\else
492  \@latex@warning@no@line{##2 has been converted to Blank ##3e}|
493 \fi}|
494 \T\L{Form Feed}{Lin}|
495 \T\I{Tab}{Spac}|
496 \immediate\write\@unused{}}
497 \global\let\endfilecontents*\endfilecontents
498 \@onlypreamble\filecontents
499 \@onlypreamble\endfilecontents
500 \@onlypreamble\filecontents*
501 \@onlypreamble\endfilecontents*
502 \endgroup
503 \@onlypreamble\filec@ntents

504 ⟨/2ekernel⟩

70 After Preamble

Finally we declare a package that allows all the commands declared above to be

 \@onlypreamble to be used after \begin{document}.

505 ⟨∗afterpreamble⟩

506 \NeedsTeXFormat{LaTeX2e}
507 \ProvidesPackage{pkgindoc}
508  [1994/10/20 v1.1 Package Interface in Document (DPC)]
509 \def\reserved@a#1\do\@clsextension#2\do\@vwrend#3\relax{%
510 \gdef\@preamblecmds{#1#3}}
511 \expandafter\reserved@a\@preamblecmds\relax

512 ⟨/afterpreamble⟩

File M

lthyphen.dtx

This file contains the code for loading hyphenation patterns into L^{A}TEX. Most of this will end up in a file called hyphen.ltx. If you wish to customize your L^{A}TEX system in respect of hyphenation patterns, write a file hyphen.cfg. If this file exists, it will be loaded instead of hyphen.ltx. See the comments below for additional information.

To produce the printed version of this file the following code is used. It can be extracted with the docstrip program, or one can run this file directly through L^{A}TEX 2ε.

1 ⟨∗driver⟩

 2 \documentclass{ltxdoc}
 3 \begin{document}
 4 \DocInput{lthyphen.dtx}
 5 \end{document}

6 ⟨/driver⟩

The default file hyphen.ltx loads hyphenation patterns for US english. If you want to load additional or other hyphenation patterns, you should create a file hyphen.cfg. This is best done by starting from hyphen.ltx.

For backward compatibility, the default file, hyphen.ltx, first tries to load the file hyphen.tex. If this file exists, an information message is issued and the appropriate defaults for TEX’s internal parameters are set: \language is initialized to 0, and \lefthyphenmin and \righthyphenmin to 2 and 3, respectively, to disallow x- or -xx breaks.

7 ⟨∗default⟩

 8 \InputIfFileExists{hyphen.tex}%
 9 {\message{Loading hyphenation patterns for US english.}%
10  \language=0
11  \lefthyphenmin=2 \righthyphenmin=3 }%

Otherwise, since we cannot do anything without any hyphenation patterns, an error message is printed and the IniTEX run is terminated by invoking \@@end (which is the L^{A}TEX 2ε name for TEX’s \end primitive).

12 {\errhelp{The configuration for hyphenation is incorrectly
13  installed.^^J%
14  If you don't understand this error message you need
15  to seek^^Jexpert advice.}%
16  \errmessage{OOPS! I can't find any hyphenation patterns for
17  US english.^^J \space Think of getting some or the
18  latex2e setup will never succeed}\@@end}

19 ⟨/default⟩

The following example describes the possible contents of a file hyphen.cfg that will load both US English and German hyphenation patterns, making the former the default. It sets \language to 0 for the US patterns and to 1 for the German patterns. Then \language is set to 0 to make this the default and the default

values of \lefthyphenmin and \righthyphenmin are set.
\language=0
\input hyphen % (or \input ushyphen1 if the file has been renamed)
\language=1
\input ghyph31
\language=0
\lefthyphenmin=2
\righthyphenmin=3
\endinput

Another possibility is to use the package babel, by Johannes Braams. That package is distributed with a suitable hyphen.cfg file.

File N

ltfinal.dtx

71 Final settings

This section contains the final settings for L^{A}TEX. It initialises some debugging and typesetting parameters, sets the default \catcodes and uc/lc codes, and inputs the hyphenation file.

71.1 Debugging

By default, L^{A}TEX shows statistics:

1 ⟨∗2ekernel⟩

 2 \tracingstats1

Empty the error help message, which may have some rubbish:

 3 \errhelp{}

71.2 Typesetting parameters

\@lowpenalty \@medpenalty \@highpenalty These are penalties used internally.
 4 \newcount\@lowpenalty
 5 \newcount\@medpenalty
 6 \newcount\@highpenalty

The default values of the picture and \fbox parameters:

 7 \unitlength = 1pt
 8 \fboxsep = 3pt
 9 \fboxrule = .4pt

The saved value of TEX’s \maxdepth:

10 \@maxdepth       = \maxdepth

\vsize initialized because a \clearpage with \vsize < \topskip causes trouble. \@colroom and \@colht also initialized because \vsize may be set to them if a

\clearpage is done before the \begin{document}
11 \vsize = 1000pt
12 \@colroom = \vsize
13 \@colht = \vsize

Initialise \textheight\textwidth and page style, to avoid internal errors if they are not set by the class.

14 \textheight=.5\maxdimen
15 \textwidth=\textheight
16 \ps@empty

71.3 Hyphenation

The following code will be compiled into the format file. It checks for the existance of hyphen.cfg in inputs that file if found. Otherwise it inputs hyphen.ltx. Note that these are loaded in before the \catcodes are set, so local hyphenation files can use 8-bit input.

We try to load the customized hyphenation description file.

17 \InputIfFileExists{hyphen.cfg}
18  {\typeout{===========================================^^J%
19  Local configuration file hyphen.cfg used^^J%
20  ===========================================}%
21  \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%

22 }

23  {\input{hyphen.ltx}}
24 \let\@addtofilelist\@gobble

71.4 Font loading

Fonts loaded during the formatting process might already have changed the \font@submax from 0pt to something higher. If so be put out a bold warning.

25 \ifdim \font@submax >\z@
26 \@font@warning{Size substitutions with differences\MessageBreak
27  up to \font@submax\space have occured.\MessageBreak
28  \MessageBreak
29  Please check the transcript file
30  carefully\MessageBreak
31  and redo the format generation if necessary!
32  \@gobbletwo}%
33 \errhelp{Only stopped, to give you time to
34  read the above message.}
35 \errmessage{}

We reset the macro. Otherwise every user will get a warning on every job.

36 \def\font@submax{0pt}
37 \fi

71.5 Input encoding

We temporarily define \reserved@a to apply \reserved@c to all the numbers in the range of its arguments.

38 \def\reserved@a#1#2{%
39 \@tempcnta#1\relax
40 \@tempcntb#2\relax
41 \reserved@b

42 }

43 \def\reserved@b{%
44 \ifnum\@tempcnta>\@tempcntb\else
45  \reserved@c\@tempcnta
46  \advance\@tempcnta\@ne

47  \expandafter\reserved@b
48 \fi

49 }

Set the special catcodes (although some of these are useless, since an error will have occurred if the catcodes have changed). Note that ^^J has catcode ‘other’ for use in warning messages.

50 \catcode`\ =10
51 \catcode`\#=6
52 \catcode`\$=3
53 \catcode`\%=14
54 \catcode`\&=4
55 \catcode`\\=0
56 \catcode`\^=7
57 \catcode`\_=8
58 \catcode`\{=1
59 \catcode`\}=2
60 \catcode`\~=13
61 \catcode`\@=11
62 \catcode`\^^I=10
63 \catcode`\^^J=12
64 \catcode`\^^L=13
65 \catcode`\^^M=5

Set the ‘other’ catcodes.

66 \def\reserved@c#1{\catcode#1=12\relax}
67 \reserved@c{`\!}
68 \reserved@c{`\"}
69 \reserved@a{`\'}{`\?}
70 \reserved@c{`\[}
71 \reserved@c{`\]}
72 \reserved@c{`\`}
73 \reserved@c{`\|}

Set the ‘letter’ catcodes.

74 \def\reserved@c#1{\catcode#1=11\relax}
75 \reserved@a{`\A}{`\Z}
76 \reserved@a{`\a}{`\z}

All the characters in the range 0–31 and 127–255 are illegal, except tab (^^I), nl (^^J), ff (^^L) and cr (^^M).

Now allow 8-bit characters, although their use in this way is strongly discouraged. See inputenc.dtx for a supported mechanism for 8-bit input.

77 \def\reserved@c#1{\catcode#1=15\relax}
78 \reserved@a{0}{`\^^H}
79 \reserved@c{`\^^K}
80 \reserved@a{`\^^N}{31}
81 %\ifnum\inputlineno=\m@ne
82 \catcode"7F=15
83 %\else
84 %  \reserved@a{"7F}{"FF}

85 %\fi

The lower case characters need their \uccode and \lccode values set. Depending on the TEX version, we might not be allowed to do this for non-ASCII characters.

86 \def\reserved@c#1{%
87 \count@=#1\advance\count@ by -"20
88 \uccode#1=\count@
89 \lccode#1=#1

90 }

91 \reserved@a{`\a}{`\z}
92 \ifnum\inputlineno=\m@ne\else
93 \reserved@a{"A0}{"BC}
94 \reserved@a{"E0}{"FF}
95 \fi

The upper case characters need their \uccode and \lccode values set, and their \sfcode set to 999.

96 \def\reserved@c#1{%
97 \count@=#1\advance\count@ by "20
98 \uccode#1=#1
99 \lccode#1=\count@
100 \sfcode#1=999

101 }

102 \reserved@a{`\A}{`\Z}
103 \ifnum\inputlineno=\m@ne\else
104 \reserved@a{"80}{"9C}
105 \reserved@a{"C0}{"DF}
106 \fi

Well, it would be nice if that were correct, but unfortunately, the Cork encoding contains some odd slots whose uccode or lccode isn’t quite what you’d expect.

107 \uccode`\^^Y=`\I     % dotless i
108 \lccode`\^^Y=`\^^Y   % dotless i
109 \uccode`\^^Z=`\J     % dotless j, ae in OT1
110 \lccode`\^^Z=`\^^Z   % dotless j, ae in OT1
111 \ifnum\inputlineno=\m@ne\else
112 \lccode`\^^9d=`\i    % dotted I
113 \uccode`\^^9d=`\^^9d % dotted I
114 \lccode`\^^9e=`\^^9e % d-bar
115 \uccode`\^^9e=`\^^d0 % d-bar
116 \fi

Finally here is one that helps hyphenation in the OT1 encoding.

117 \lccode`\^^[=`\^^[   % oe in OT1

\MakeUppercase \MakeUppercase \@uclclist And whilst we’re doing things with uc/lc tables, here are two commands to upper-

and lower-case a string.

Note that this implementation is subject to change! At the moment we’re not providing any way to extend the list of uc/lc commands, since finding a good interface is difficult. These commands have some nasty features, such as uppercasing mathematics, environment names, labels, etc. A much better long-term solution is to use all-caps fonts, but these aren’t generally available.

118 \DeclareRobustCommand{\MakeUppercase}[1]{{%
119  \def\i{I}\def\j{J}%
120  \def\reserved@a##1##2{\let##1##2\reserved@a}%
121  \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
122  \protected@edef\reserved@a{\uppercase{#1}}%
123  \reserved@a

124 }}

125 \DeclareRobustCommand{\MakeLowercase}[1]{{%
126  \def\reserved@a##1##2{\let##2##1\reserved@a}%
127  \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
128  \protected@edef\reserved@a{\lowercase{#1}}%
129  \reserved@a

130 }}

131 \def\@uclclist{\oe\OE\o\O\ae\AE
132  \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH}

The above code works, but has the nasty side-effect that if you say something like:

     \markboth{\MakeUppercase\contentsname}
              {\MakeUppercase\contentsname}

then the uppercasing is only done to the first letter of the contents name, since the mark expands out to:

     \mark{\protect\MakeUppercase Table of Contents}
          {\protect\MakeUppercase Table of Contents}

In order to get round this, we redefine \MakeUppercase and \MakeLowercase to grab their argument and brace it. This is a very low-level hack, and is not recommended practice! This is an instance of a general problem that makes it unsafe to grab arguments unbraced, and probably needs a more general solution. For the moment though, this hack will do:

133 \protected@edef\MakeUppercase#1{\MakeUppercase{#1}}
134 \protected@edef\MakeLowercase#1{\MakeLowercase{#1}}

71.6 Applying Patch files

Between major releases, small patches will be distributed in files ltpatch.ltx which must be added at this point.

135 \IfFileExists{ltpatch.ltx}
136 {\typeout{=================================^^J%
137  Applying patch file ltpatch.ltx^^J%
138  =================================}
139 \def\fmtversion@topatch{unknown}
140 \input{ltpatch.ltx}
141 \ifx\fmtversion\fmtversion@topatch
142  \ifx\patch@level\@undefined

143  \typeout{^^J^^J^^J%
144  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
145  !! Patch file `ltpatch.ltx' not suitable for this^^J%
146  !! version of LaTeX.^^J^^J%
147  !! Please check if initex found an old patch file:^^J%
148  !! --- if so, rename it or delete it, and redo the^^J%
149  !! initex run.^^J%
150  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
151  \batchmode \@@end
152  \else

The code below adds the ‘patch level’ string to the first \typeout in the startup banner.

153  \def\fmtversion@topatch{0}%
154  \ifx\fmtversion@topatch\patch@level\else
155  \def\reserved@a\typeout##1##2\reserved@a{%
156  \typeout{##1 patch level \patch@level}##2}
157  \everyjob\expandafter\expandafter\expandafter{%
158  \expandafter\reserved@a\the\everyjob\reserved@a}
159  \let\reserved@a\relax
160  \the\everyjob
161  \fi
162  \fi
163 \else
164  \typeout{^^J^^J^^J%
165  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
166  !! Patch file `ltpatch.ltx' (for version <\fmtversion@topatch>)^^J%
167  !! is not suitable for version <\fmtversion> of LaTeX.^^J^^J%
168  !! Please check if initex found an old patch file:^^J%
169  !! --- if so, rename it or delete it, and redo the^^J%
170  !!     initex run.^^J%
171  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
172  \batchmode \@@end
173 \fi
174 \let\fmtversion@topatch\relax
175 }{}

71.7 Freeing Memory

\reserved@a \reserved@b And just to make sure nobody relies on those definitions of \reserved@b and friends. These macros are reserved for use in the kernel. Do not use them as general scratch macros.

176 \let\reserved@a\@filelist
177 \let\reserved@b=\@undefined
178 \let\reserved@c=\@undefined
179 \let\reserved@d=\@undefined
180 \let\reserved@e=\@undefined
181 \let\reserved@f=\@undefined

\toks
182 \toks0{}
183 \toks2{}
184 \toks4{}
185 \toks6{}
186 \toks8{}

71.8 Initialise file list

\@providesfile Initialise for use in the document. During initex a modified version has been used which leaves debugging information for latexbug.tex.

187 \def\@providesfile#1[#2]{%
188  \wlog{File: #1 #2}%
189  \expandafter\xdef\csname ver@#1\endcsname{#2}%
190 \endgroup}

\@filelist \@addtofilelist Reset \@filelist so files input while making the format are not listed. The list built up so far may take up a lot of memory and so it is moved to \reserved@a where it will be overwritten as soon as almost any L^{A}TEX command is issued in a class file. However the latexbug.tex program will be able to access this information and insert it into a bug report.

191 \let\@filelist\@gobble
192 \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}%

71.9 Dumping the format

Finally we make @ into a letter, ensure the format will be in the ‘normal’ error mode, and dump everything into the format file.

193 \makeatother
194 \errorstopmode
195 \dump

196 ⟨/2ekernel⟩

File O

ltpatch

Things we did wrong…

 1 %%%%
 2 %%%% Patch file for the LaTeX2e kernel dated 1997/12/01
 3 %%%% (1998/01/12)

4

 5 \def\fmtversion@topatch{1997/12/01} % This patch will not work with
 6  % any other release.

7

 8 \def\patch@level{1}

9 10

11 % New EC font fd files (t1cm*.fd) will be loaded into the format
12 % by default.
13 % latex/2519
14 % latex/2543

15 16

17 \typeout{%
18 ^^J%
19 *********************************************^^J%
20 ltpatch.ltx has fixed certain problems with the `kernel' of LaTeX.^^J%
21 Certain other files in the LaTeX distribution have also been updated^^J%
22 since the `December' release (list correct as of 1998/01/12):^^J%
23 base/ltoutenc.dtx..................(patch 1)^^J%
24 unpacked/textcomp.sty..............(patch 1)^^J%
25 base/cmfonts.fdd...................(patch 1)^^J%
26 unpacked/t1cm*.fd..................(patch 1)^^J%
27 unpacked/ts1cm*.fd.................(patch 1)^^J%
28 base/multitex.txt..................(patch 1)^^J%
29 ^^J%
30 See the file patches.txt for more details.^^J%
31 *********************************************}

32 33 34

35 \endinput

36 37 38 39 40 41 42 43

File O: ltpatch.ltx  459

Change History 460

Change History

1985/11/04 ltmath.dtx LaTeX2.09

General: produce warning message if line extends into margin. Doesn’t warn about formula overprinting equation number. 248

1989/04/10 ltfssbas.dtx v1.0a

General: Starting with version numbers! \ifmmode added in \math@group . . . . . . . . . . . . 120

1989/04/10 ltfssbas.dtx v1.0b

General: \preload@sizes added. 120

\wrong@fontshape changed to

define substitution font/shape macro. . . . . . . . . . . . . . . . . 120

1989/04/10 ltfssini.dtx v1.0a

General: Starting with version num-

bers \newif for \@tempswa

added since this switch is unkown at the time when this file is read in. (latex.tex is loaded later.) \math@famname changed

to \math@version. . . . . . . . 194

1989/04/14 ltfssbas.dtx v1.0c

General: More documentation

added. . . . . . . . . . . . . . . . . 120 1989/04/15 ltfssini.dtx v1.0b

General: \mathfontset renamed to

\mathversion. . . . . . . . . . . 194

1989/04/19 ltfssbas.dtx v1.0d

General: Even more doc. . . . . . . 120 1989/04/21 ltfssbas.dtx v1.0e

General: Documentation is fun! Parameters of \de-

fine@mathalphabet changed. 120

1989/04/21 ltfssini.dtx v1.0c

General: Changed to conform to

fam.tex. . . . . . . . . . . . . . . . 194 1989/04/23 ltfssbas.dtx v1.0f

General: % in \getanddefinefonts

added. . . . . . . . . . . . . . . . . 120 1989/04/26 ltfssini.dtx v1.0d

General: \xpt added. . . . . . . . . . 194 1989/04/27 ltfssbas.dtx v1.0g

General: Documentation revised. 120 1989/04/27 ltfssini.dtx v1.0e

General: Definitions of L^{A}TEX sym-

bols corrected. . . . . . . . . . . 194 1989/04/29 ltfssbas.dtx v1.0h

General: Documented problem with

                                       \halign, and \noalign . . . . 120

\mathversion: Test if version de-

fined added. . . . . . . . . . . . . 129 1989/04/29 ltfssbas.dtx v1.0i

General: Removed the \halign \noalign correction (wasn’t bugfree) . . . . . . . . . . . . . . . 120

1989/04/29 ltfssini.dtx v1.0f

General: Corrections to L^{A}TEX tab-

ular env. added. . . . . . . . . . 194 1989/05/01 ltfssbas.dtx v1.0j

General: Default for \base-

linestretch added. . . . . . . 120 1989/05/22 ltfssbas.dtx v1.0k

General: Lines longer than 72 char-

acters folded. . . . . . . . . . . . 120 1989/05/22 ltfssini.dtx v1.0g

General: Lines shortened to 72 char-

acters . . . . . . . . . . . . . . . . . 194 1989/09/14 ltfssbas.dtx v1.0m

General: Global replacement:

                                       \group to \mathgroup . . . . . 120

\mathversion: Corrected typo:

                                       \endscname to \endcsname. . 129

1989/11/07 ltfssini.dtx v1.0i

General: All family, series, and

shape names abbreviated… 194 1989/11/08 ltfssbas.dtx v1.0o

General: First parameter of \de-

                                       fine@mathalphabet and \de-
                                       fine@mathgroup changed from

string to control sequence… 120 1989/11/14 ltfssbas.dtx v1.0p

\math@version: Math version pre-

fix ‘mv@’ added. . . . . . . . . . 129 1989/11/19 ltfssbas.dtx v1.0q

                                   \define@newfont: Group added. 131
                                   \wrong@fontshape: Instead of call-
                                       ing \family\default@family,

etc. we directly set \f@family, etc. . . . . . . . . . . . . . . . . . . 135 1989/11/22 ltfssbas.dtx v1.0r

\math@version: \def → \edef for
\math@version. . . . . . . . . . 129

1989/11/25 ltfssbas.dtx v1.0s

General: All \edef\font@name
changed to \xdef\font@name.

Necessary after introduction

of \begingroup/\endgroup in

v1.0q. . . . . . . . . . . . . . . . . . 120 extra// → + in \extra@def. . 120

1989/11/26 ltfssbas.dtx v1.0t

\select@group: \bgroup/\egroup

changed  to  \begin-

group/\endgroup to avoid

empty Ord atom on math list. 136 1989/12/02 ltfssini.dtx v1.1b

General: \rmmath renamed to

\mathrm . . . . . . . . . . . . . . . 194 1989/12/03 ltfssini.dtx v1.1c

General: Some internal macros renamed to make them inaccessible. . . . . . . . . . . . . . . . . . . 194

1989/12/05 ltfssbas.dtx v1.0u

\addto@hook: \addto@hook added. 140

1989/12/05 ltfsstrc.dtx v1.0u fam.dtx

\every@math@size: Hook \ev-

ery@size added. . . . . . . . . . 149 1989/12/13 ltfsstrc.dtx v1.0f

\use@mathgroup: \expandafter

added before final \fi. . . . . 152 1989/12/16 ltfssbas.dtx v1.1a

\select@group: \relax in front

added. . . . . . . . . . . . . . . . . 136 Now four arguments. . . . . . . . 136 Redefinition of alphabet now simpler. . . . . . . . . . . . . . . . 137 Usage of ‘=’ macro added. … 137

1989/12/16 ltfsstrc.dtx v1.1a

\selectfont: Changed order of

calls. . . . . . . . . . . . . . . . . . 145 \use@mathgroup: Redefinition of al-

phabet now simpler. . . . . . . 152 Usage of ‘=’ macro added. … 152

1990/01/18 ltfsstrc.dtx v1.0h

General: \tracingfonts meaning

changed. . . . . . . . . . . . . . . . 141 1990/01/20 ltfssbas.dtx v1.2a

\math@bgroup: Def. placed in this file. . . . . . . . . . . . . . . . . . . 139 \math@egroup: Def. placed in this

file. . . . . . . . . . . . . . . . . . . 139

                                   \select@group: Def for alph id

changed. . . . . . . . . . . . . . . . 137 1990/01/21 ltfssbas.dtx v1.2b

                                   \select@group: Code moved to
                                       \use@mathgroup. . . . . . . . . . 137

1990/01/21 ltfsstrc.dtx v1.2b

                                   \use@mathgroup: Macro added to

allow cleaner interface. . . . . 151 1990/01/23 ltfssbas.dtx v1.2c

                                   General: \no@version@warning re-
                                       named to \no@alphabet@error.

. . . . . . . . . . . . . . . . . . . . . . 120

                                      Macro  \no@alphabet@help

added . . . . . . . . . . . . . . . . . 120

                                   \no@alphabet@error: Changed to

error call . . . . . . . . . . . . . . 120 1990/01/25 ltfssini.dtx v1.1e

\nfss@text: Macro added. . . . . . 197 1990/01/27 ltfssbas.dtx v1.2d

                                   \DeclarePreloadSizes: Font iden-

tifier set to \relax. . . . . . . . 125 1990/01/28 ltfssbas.dtx v1.2e

                                   \mathgroup: \newfam let to
                                       \new@mathgroup. . . . . . . . . . 121

1990/01/28 ltfssbas.dtx v1.2f

                                   \define@newfont: Added call to
                                       \curr@fontshape macro to al-

low substitution. . . . . . . . . . 131

                                   \wrong@fontshape: Warning mes-

sage slightly changed. . . . . . 135 1990/01/28 ltfssini.dtx v1.2b

General: Call to ‘@nomath added. 195 1990/02/08 ltfssini.dtx v1.1g

General: Protected the commands

                                       \family, \series, \shape,
                                       \size, \selectfont, and

\mathversion. . . . . . . . . . . 194 1990/02/16 ltfssbas.dtx v1.2g

General: Support for changes of

                                       \baselineskip without chang-

ing the size. . . . . . . . . . . . . 120

                                   \math@version: \@nomath added. 129

1990/02/16 ltfsstrc.dtx v1.0i

                                   \selectfont: Changed \f@size to

\lcl@currsize (see fam file). 146 1990/02/18 ltfsstrc.dtx v1.0j

General: Redefine unprotected ver-

                                       sion \p@selectfont instead of

\selectfont. . . . . . . . . . . . 145 1990/03/14 ltfsstrc.dtx v1.0k

General: Added code for TeX3. . 141

\extract@font: Added code for

TeX3. . . . . . . . . . . . . . . . . . 144 \selectfont: Added code for

TeX3. . . . . . . . . . . . . . . . . . 146 1990/03/30 ltfssbas.dtx v1.2h

\math@egroup: Changed to have

one arg. . . . . . . . . . . . . . . . 139 1990/03/30 ltfsstrc.dtx v1.2h

\use@mathgroup: Third argument

removed (see \math@egroup). 151 1990/04/01 ltfssbas.dtx v1.2i

General: Code added from tracefnt.dtx. . . . . . . . . . . . . 120 Support for TeX3. . . . . . . . . . 120

1990/04/01 ltfsstrc.dtx v1.0l

General: Part of code moved to

fam.dtx. . . . . . . . . . . . . . . . 141

\tracingfonts: Check if \trac-

ingfonts already defined… 142 1990/04/01 ltfsstrc.dtx v1.0o

\tracingfonts: Check if \trac-

ingfonts defined removed again. . . . . . . . . . . . . . . . . . 142

1990/04/02 ltfssini.dtx v1.1i

General: \input of files now han-

dled by docstrip. . . . . . . . . . 194 1990/04/05 ltfsstrc.dtx v1.0m

\selectfont: Call \tracingon only
if \tracingfonts greater than

3. . . . . . . . . . . . . . . . . . . . . 145 1990/05/05 ltfsstrc.dtx v1.0n

\selectfont: \tracingon with new

syntax. . . . . . . . . . . . . . . . . 145 1990/06/23 ltfssini.dtx v1.1k

\nfss@text: Changed to ‘mbox. . 197 1990/06/24 ltfssbas.dtx v1.2j

\DeclarePreloadSizes: Missing

percent added. . . . . . . . . . . 125 1990/06/24 ltfsstrc.dtx v1.0o

\baselinestretch: Moved to

tracefnt.dtx. . . . . . . . . . . . . 149

\getanddefine@fonts: \Adding

tracing code. . . . . . . . . . . . . 153 \Macro moved from fam.dtx. . 153 Adding debug code. . . . . . . . . 153

\use@mathgroup: Tracing code

added. . . . . . . . . . . . . . . . . 152 1990/06/30 ltfssbas.dtx v1.2l

\showhyphens: Macro added. … 139 1990/06/30 ltfsstrc.dtx v1.0p

                                   \use@mathgroup: Added \relax af-

ter math group number. … 152 1990/07/07 ltfsstrc.dtx v1.0q

                                   \getanddefine@fonts:  Group

number added to tracing… 153

                                   \math@egroup: Tracing code

added. . . . . . . . . . . . . . . . . 152

                                   \use@mathgroup: Group number

added to tracing. . . . . . . . . 152 1990/08/27 ltfsstrc.dtx 1.0r

                                   \type@restoreinfo: Some extra

tracing info. . . . . . . . . . . . . 147 1990/08/27 ltfsstrc.dtx v1.0r

                                   \getanddefine@fonts: Correcting

missing name after \tracingon. . . . . . . . . . . . . . . . . . . 153

1991/03/28 ltfssini.dtx v1.1m

\copyright: Extra braces added. 197 1991/03/30 ltfssini.dtx v1.2g

\newfont: Definition added. . . . . 196 \symbol: Definition added. . . . . . 196

1991/07/24 ltmiscen.dtx LaTeX2.09

\@verbatim: Added ‘penalty‘interlinepenalty to definition of ‘par so that ‘samepage works . . . . . . . . . 239

1991/08/14 ltmath.dtx LaTeX2.09

\cases: (RmS) inserted extra

braces around entry for NFSS 245 1991/08/14 ltpictur.dtx LaTeX2.09

General: (RmS) inserted extra

braces around entry for NFSS 308 1991/08/14 ltthm.dtx LaTeX2.09

                                   \@endtheorem: Moved \itshape af-

ter \item to make it work with NFSS . . . . . . . . . . . . . . . . . 331

1991/08/26 ltfssini.dtx v1.1n

\p@reset@font: Macro introduced 197 1991/08/26 ltmiscen.dtx LaTeX2.09

                                   \@verbatim: \@@par added . . . . . 240

1991/08/26 ltpictur.dtx LaTeX2.09

\endpicture: (RmS & FMi) extra boxing level around \@picbox to guard against unboxing in math mode (proposed by John Hobby) . . . . . . . . . . . . . . . . 307 1991/08/26 ltplain.dtx LaTeX209

\tracingall: Added \errorcon-
textlines=\maxdimen, sug-

gested by J. Schrod . . . . . . . . 25 1991/09/29 ltboxes.dtx LaTeX2.09

\@mpfootnotetext: (RmS) added

\reset@font . . . . . . . . . . . . 278 1991/09/29 ltfloat.dtx LaTeX2.09

\@footnotetext: (RmS) added

\reset@font . . . . . . . . . . . . 359 1991/09/29 ltmath.dtx LaTeX2.09

\@eqnnum: RmS: \reset@font

added. . . . . . . . . . . . . . . . . 248 1991/09/29 ltsect.dtx LaTeX2.09

\@dottedtocline: (RmS) added

\reset@font for page number 342 1991/10/17 ltcntrl.dtx LaTeX209

\@tfor: (Rms) \xdef replaced by

\def (See FMi’s array.doc) . . 48 1991/10/25 ltbibl.dtx LaTeX2.09

\@citex: added \reset@font, sug-

gested by Bernd Raichle. … 365 1991/11/01 ltfloat.dtx LaTeX2.09

\footnote:  (RmS)  Added

\let\protect\noexpand  in
\footnote,  \footnotemark,
and \footnotetext, since

\xdef is used . . . . . . . . . . . 358 1991/11/04 ltlists.dtx LaTeX2.09

\makelabel: (RmS) added default definition for \makelabel, to produce an error message… 266

1991/11/04 ltplain.dtx RmS

General: Removed \itemitem since never needed/useful with L^{A}TEX. . . . . . . . . . . . . . . . . . 24

1991/11/06 ltbibl.dtx LaTeX2.09

\@citex: added code to remove a

leading blank . . . . . . . . . . . 365 1991/11/13 ltbibl.dtx LaTeX2.09

\@bibitem: Changed counter enumi to enumiv, as it says in the comment above . . . . . . . . . . . . . 365

1991/11/21 ltfssini.dtx v1.1o

\p@reset@font: Added extra

braces for robustness. . . . . . 197 Changed to protected version of macro. . . . . . . . . . . . . . . . . 197 1991/11/22 ltfloat.dtx LaTeX2.09

\footnote:  (RmS)  Added

\let\protect\noexpand  in
\@xfootnote,  \@xfoot-
notemark, and \@xfootnote-

text . . . . . . . . . . . . . . . . . . 358 1991/11/22 ltlists.dtx LaTeX2.09

\@item: (RmS) Changed second

call to \makelabel to \un-
hbox\@tempboxa. Avoids prob-

lems with side effects in \makelabel and is more efficient. . 266

1991/11/27 ltfssbas.dtx v1.3a

General: All \family, \shape etc.

renamed to \fontfamily etc. 120 1991/11/27 ltfssini.dtx v1.2a

General: All \family, \shape etc.

renamed to \fontfamily etc. 194 1992/01/06 ltfssini.dtx v1.2c

General: added slitex code . . . . . 194 1992/01/10 ltbibl.dtx LaTeX2.09

\@bibitem: Changed \c@enumiv to
\value of \@listctr . . . . . . 365

1992/01/10 ltmath.dtx LaTeX2.09

equation: RmS: put \hbox around \@eqnnum to typeset the equation number in text mode (as in the eqnarray env.) . . . . . . . . 247

1992/01/10 ltthm.dtx LaTeX2.09

\@othm: (RmS) Check for existence

of theorem environment …. 330 1992/01/14 ltbibl.dtx LaTeX2.09

\@biblabel: removed \hfill . . . 367

1992/01/14 ltsect.dtx 0.0

\@starttoc: (RmS) added \imme-
diate to \openout as all \write

commands are also executed \immediate . . . . . . . . . . . . 340

1992/02/26 ltbibl.dtx LaTeX2.09

\@lbibitem: Added \hfill to re-

store left-alignment of bibliography labels in alpha style . . 365

1992/03/18 ltdefns.dtx LaTeX209

General: (RMS) changed input channel from 0 to \@inputcheck to avoid conflicts with other channels allocated by \newread 30

1992/03/18 ltfloat.dtx LaTeX2.09

\@xympar:  (RmS)  added

\global\@ignorefalse . . . . 354

\end@float: (RmS) changed \@es-
   phack to \@Esphack . . . . . . 349

1992/03/18 ltlists.dtx 0.0

General: RmS: added \@nmbrlist-

false . . . . . . . . . . . . . . . . . 262 1992/03/18 ltmiscen.dtx LaTeX2.09

\begin: Changed \@ignoretrue
   to \@ignorefalse (as docu-

mented) . . . . . . . . . . . . . . . 237 1992/03/21 ltfssini.dtx v1.2d

General: Renamed \text to \nfss@text to make it internal. . . . . . . . . . . . . . . . . . . 194

1992/05/12 ltfssbas.dtx v1.3c

\extract@alph@from@version:

Macro added. . . . . . . . . . . . 137

\select@group: Added call to \ex-
   tract@alph@from@version. . 137

1992/07/26 ltfssbas.dtx v1.9a

\curr@fontshape: . . . . . . . . . . . 131
\DeclareFontShape: Introduced
   \DeclareFontShape . . . . . . 121
\define@newfont: . . . . . . . . . . . 131

\math@fonts: . . . . . . . . . . . . . . 136 \select@group: . . . . . . . . . 136, 137 \split@name: Added splitting into

\f@encoding. . . . . . . . . . . . 130

\wrong@fontshape: . . . . . . 134, 135

1992/07/26 ltfsstrc.dtx v2.0b \s@fct@: . . . . . . . . . . . . . . . . . . 162 \s@fct@sub: . . . . . . . . . . . . . . . 163 \selectfont: . . . . . . . . . . . . . . 146

\try@simple@size: . . . . . . . . . . 156
\try@size@range: . . . . . . . . . . . 159

\use@mathgroup: . . . . . . . . . . . . 152 1992/08/14 ltbibl.dtx LaTeX2.09

\@citex: added missing argument braces around \hbox, found by Ed Sznyter . . . . . . . . . . . . . 365

1992/08/14 ltboxes.dtx LaTeX209

\endminipage: (RmS) replaced

   \vskip-\lastskip by \unskip

(proposed by FMi) . . . . . . . 277 1992/08/17 ltbibl.dtx LaTeX2.09

\@citex: simplified code for removing leading blanks in citation key (proposed by Frank Jensen and Kresten Krab Thorup) . 365 1992/08/19 ltsect.dtx 0.0

\@xsect: (RmS) corrected bug: stretch and shrink in argument to \hskip previously not negated . . . . . . . . . . . . . . . 337

1992/08/19 ltthm.dtx LaTeX2.09

\@othm: (RmS) Changed error message to complain about undefined counter . . . . . . . . . . . 330

1992/08/20 ltfssini.dtx v1.4b

\@setsize: Added ‘@currsize… 196 1992/08/24 ltdefns.dtx LaTeX209

                                       \@ifnextchar: (Rms) \@ifnextchar

didn’t work if its first argument was an equal sign. . . . . . . . . . 40

1992/08/24 ltmiscen.dtx LaTeX2.09

\begin: Added code to \begin to remember line number. Used by \@badend to display position of non-matching \begin. . . . . . 237

                                       \verb: Changed \verb and \@sverb

to work correctly in math mode 241 1992/08/25 ltsect.dtx LaTeX2.09

\@sect: (FMi) replaced explicit setting of \@svsec by call to

                                          \@seccntformat . . . . . . . . . 335

1992/09/18 ltlists.dtx LaTeX2.09

General: (RmS) Added warning if

\item is used in math mode 263 1992/09/18 lttab.dtx LaTeX2.09

                                       \array: Changed \par to \@empty

to avoid starting new row e.g. after \hline . . . . . . . . . . . . 294

1992/09/19 ltfsstrc.dtx v2.0c

                                       \try@simple@size: . . . . . . . . . . 156

1992/09/21 ltfssini.dtx v1.4d

                                       \not@math@alphabet: Macro de-

fined. . . . . . . . . . . . . . . . . . 195 1992/09/22 ltfssbas.dtx v1.91a

General: Introduced \tf@size for

math size. . . . . . . . . . . . . . . 120 1992/09/22 ltfsstrc.dtx v2.1a

                                       \getanddefine@fonts: Introduced

\tf@size for math size. . . . . 153 1992/11/13 ltfssini.dtx v?

\hexnumber@: Made expandable. . 196 1992/11/23 ltcounts.dtx LaTeX209

\stepcounter: Replaced {} in

                                          \stepcounter by \begingroup

\endgroup to avoid adding an empty ord in math mode … 116

1992/11/26 ltboxes.dtx LaTeX2.09

\@mpfootnotetext: (RmS) added

protection for \edef . . . . . . 278 1992/11/26 ltfloat.dtx LaTeX2.09

\@footnotetext: (RmS) added pro-

tection for \edef . . . . . . . . . 359 \footnote: (RmS) Changed all to

‘def‘protect‘noexpand‘protect‘noexpand . . . . . . . . . . . . . . . . . . . . . . 358

1992/12/03 ltfssini.dtx v?

\hexnumber@: Make it accept coun-

ters. . . . . . . . . . . . . . . . . . . 196 1993/03/08 preload.dtx v2.0b

General: Added 12pt preloads . . 217 1993/03/18 ltfssbas.dtx v2.0c

General: Changed all \@tempdima in \@tempdimb to avoid killing \numberline . . . . . . . . . . . . 120

1993/03/18 ltfsstrc.dtx v2.1b

General: Changed all \@tempdima in \@tempdimb to avoid killing \numberline . . . . . . . . . . . . 141 Changed all \@tempdimb in \@tempdimx to avoid killing \numberline . . . . . . . . . . . . 141

1993/03/18 ltfsstrc.dtx v2.1c

\DeclareSizeFunction: Added all

args to avoid blanks problems 159 1993/04/09 lterror.dtx v1.0e

\@latexerr: Mention The Compan-

ion . . . . . . . . . . . . . . . . . . . . 54 1993/04/11 lterror.dtx v1.0f

\@latexerr: Remove setting of er-

rorcontextlines . . . . . . . . . . . 54 1993/05/05 ltfntcmd.dtx v2.0b

General: Removed all LaTeX re-

lated cmds . . . . . . . . . . . . . 221 1993/05/16 ltfssbas.dtx v2.0e

\showhyphens: Use \reset@font 139

1993/07/16 ltfsstrc.dtx v2.1h

General: Changed layout of info

messages . . . . . . . . . . . . . . 141 1993/07/17 ltoutenc.dtx 1.0d

General: changed \catcoding @ . 88 1993/08/03 ltmiscen.dtx LaTeX2.09

\enddocument: Changed redefinition of \global to redefinition of \@setckpt. . . . . . . . . . . . 234 1993/08/05 ltpictur.dtx LaTeX2.09

\circle: (RMS) Added error message if \circle is used in math mode. . . . . . . . . . . . . . . . . . 323

1993/08/05 ltsect.dtx LaTeX2.09

\@sect: (RmS) Made sure that \protect works correctly in expansion of \the counter … 335

1993/08/05 ltspace.dtx LaTeX2e

\@hspace: (RmS) Removed super-

fluous \leavevmode in \@hspace

and \@hspacer, as suggested by CAR. . . . . . . . . . . . . . . . . . . 72

1993/08/06 ltbibl.dtx LaTeX2.09

\@citex: Moved writing to .aux file in loop over citation keys so that leading blanks are removed there as well. . . . . . . . . . . . 365

1993/08/13 ltoutenc.dtx 1.0f

General: Protected against active @

sign. . . . . . . . . . . . . . . . . . . . 88 1993/08/13 preload.dtx v2.0c

General: Added ‘relax at end of font

names. . . . . . . . . . . . . . . . . 218 1993/08/16 ltoutenc.dtx 1.0g

General: Needs space after \string 88 1993/08/18 ltfssdcl.dtx v2.0e

\new@mathversion:  Exchanged

names of encodings in warning

message of \SetSymbolFont. 178

1993/09/02 ltfsstrc.dtx v2.1i

General: Corrected name of sgen

size function. . . . . . . . . . . . 141 1993/09/03 ltmiscen.dtx LaTeX2.09

\verbatim@nolig@list: Replaced

\@noligs by extensible list . 241 1993/09/07 ltmiscen.dtx LaTeX2.09

\verb@balance@group:  (RmS)

Changed definition of \verb so that it detects a missing second delimiter. . . . . . . . . . . . . . . 240

1993/09/08 ltmiscen.dtx LaTeX2.09

\enddocument: Added warning in

case of undefined references. 234 1993/09/15 ltfssbas.dtx v2.0g

\DeclareFontEncoding: Corrected:
\default@T to \default@M. . 123

1993/09/15 ltfsstrc.dtx v2.1j

General: Corrected spelling of \noxpand. . . . . . . . . . . . . . . 141 1993/09/19 lterror.dtx LaTeX2.09

\@invalidchar: (RmS) Error message for invalid input characters. . . . . . . . . . . . . . . . . . . . 58

1993/11/02 ltmath.dtx LaTeX2.09

General: RmS: Corrected description of \@eqnsel, moved \@eqnsel accordingly and removed extra \tabskip assignment. . . . . . . . . . . . . . . . . . 248

1993/11/03 ltmath.dtx LaTeX2e

General: RmS: Initialized \everycr

to empty . . . . . . . . . . . . . . 248 1993/11/03 ltpictur.dtx LaTeX2.09

General: (RmS) changed \halign to \ialign to initialize \tabskip and \everycr . . . . . . . 308

1993/11/11 ltfssini.dtx v2.1a

\normalfont: Macro added …. 197 1993/11/11 ltfsstrc.dtx v2.2a

General: Option concept added for

LaTeX2e . . . . . . . . . . . . . . 141 1993/11/14 ltclass.dtx v0.2a

\@currext: Name changed from

\@currextension . . . . . . . . 435
\@fileswithoptions: Moved reset-
ing of \default@ds, \ds@ and
\@declaredoptions here, from
the end of \ProcessOptions. 443

\@reset@ptions: macro added . . 445 \AtEndDocument: Included exten-

sion in the generated macro name for package and class hooks. . . . . . . . . . . . . . . . . 445

\documentstyle: Added \Re-
quirePackage    \@unusedop-

tionlist stuff. . . . . . . . . . . 440 \g@addto@macro: Made global . . 445

\NeedsTeXFormat: made more ro-

bust for alternative syntax for other formats. . . . . . . . . . . . 441

\ProcessOptions*:  Optimise

‘empty option’ code. . . . . . . 439 Stop adding the global option list inside class files. . . . . . . . . . 439

1993/11/15 ltclass.dtx v0.2b

\documentstyle: Modified to
match \ProcessOption* . . . 440
\ProcessOptions*: Star form

added. . . . . . . . . . . . . . . . . 439 1993/11/17 ltclass.dtx v0.2c

                                   \@@fileswith@pti@ns:  Macro

added . . . . . . . . . . . . . . . . . 444

                                   \@badrequireerror: Macro added 446
                                   \@fileswithoptions: Added trap

for two \LoadClass commands. 444

                                   \@twoloadclasserror:  Macro

added . . . . . . . . . . . . . . . . . 446

                                   \CurrentOption: Name changed

from \@curroption . . . . . . . 435

                                   \DeclareOption*: Error checking

added . . . . . . . . . . . . . . . . . 438

                                   \NeedsTeXFormat: Name changed

from \NeedsFormat . . . . . . . 441

                                   \ProcessOptions*:  restoring
                                       \@fileswith@pti@ns added. 439

1993/11/18 ltclass.dtx v0.2d

                                   \documentstyle: Modified \Re-

quirePackage stuff. . . . . . . . 440

                                   \ExecuteOptions: Use \Curren-
                                       tOption not\reserved@a . . . 440
                                   \NeedsTeXFormat:  \fmtname
                                       \fmtversion not \@. . . . . . . 441

1993/11/21 ltfiles.dtx LaTeX2e

                                   \@missingfileerror: Stop infinite

looping on \@er@ext . . . . . . . 83 1993/11/21 ltmiscen.dtx v0.9a

\@verbatim: use ‘verbatim@font in-

stead of ‘tt . . . . . . . . . . . . . 240

                                   \verb: Use \verbatim@font instead

of \tt. . . . . . . . . . . . . . . . . 241 \verbatim@font: Macro added . . 240

1993/11/22 ltclass.dtx v0.2f

                                   \@fileswithoptions: Made the de-
                                       fault [] not [\@unknownversion] 442

Made the initial version [] not

                                       [\@unknownversion] . . . . . . 443
                                   \@ifclasslater: Added //00 so

parsing never produces a runaway argument. . . . . . . . . . 436

                                   General: \@unknownversion re-

moved . . . . . . . . . . . . . . . . 449 1993/11/22 ltdefns.dtx LaTeX2e

\@minus: Macro added . . . . . . . . 29 \@plus: Macro added . . . . . . . . . 29 \CheckCommand: Macro added … 36

                                   \providecommand: Macro added . 35

1993/11/22 lterror.dtx LaTeX2e

                                   \c@errorcontextlines:  Macro

added . . . . . . . . . . . . . . . . . . 54 1993/11/22 ltfiles.dtx LaTeX2e

\listfiles: Removed checking for

   \@unknownversion . . . . . . . . 84

1993/11/22 ltlength.dtx LaTeX2e \@settodim: Macro added . . . . . 119 \@settopoint: Macro added …. 119 \settodepth: Macro added …. 119 \settoheight: Macro added …. 119

1993/11/22 ltlogos.dtx LaTeX2e

\LaTeXe: Macro added . . . . . . . . 74 1993/11/23 ltclass.dtx v0.2g

\@use@ption: Name changed from

   \@executeoption . . . . . . . . 440

General: Various macros now moved to latex.tex. . . . . . . . 434 Warnings and errors now directly coded. . . . . . . . . . . . . . . . . 434

1993/11/23 ltdefns.dtx LaTeX2e \@argdef: Macro added . . . . . . . 31 \@ifundefined: Redefined to re-

move a trailing \fi . . . . . . . . 40 \@newcommand: Macro added …. 31 \@newenv: Macro interface changed 35 \@xargdef: Macro interface

changed . . . . . . . . . . . . . . . . 31 \@yargdef: Avoid \@?@? token . . 33

Macro interface changed . . . . . 33 \newcommand: Macro reimple-

mented and extended . . . . . . 31 \renewcommand: Macro reimple-

mented and extended . . . . . . 33

\renewenvironment: Macro reim-

plemented and extended …. 34 \two@digits: Macro added …. 28

1993/11/23 ltoutput.dtx v0.1a \paperheight: Register added . . 384 \paperwidth: Register added … 384

1993/11/23 ltoutput.dtx v0.1c \@enlargepage: Command added 416 \@kludgeins: Insert added . . . . . 415 \@makecol: Command changed . . 393

\@specialoutput:  Command

changed . . . . . . . . . . . . . . . 388

\enlargethispage*: Commands

added . . . . . . . . . . . . . . . . . 415 1993/11/24 ltfntcmd.dtx v2.1a

\maybe@ic@: Use \t@st@ic . . . . . 226

\t@st@ic: Macro added . . . . . . . 226 1993/11/24 ltfssini.dtx v2.1a

General: Removed ‘xpt stuff …. 197 1993/11/24 ltlogos.dtx LaTeX2e

\LaTeX: Macro changed . . . . . . . 74 1993/11/28 ltclass.dtx v0.2h

                                       \@twoclasseserror: Macro added 446

General: Assorted commands now in the kernel removed. . . . . . 434 Directory syntax checing moved to dircheck.dtx . . . . . . . . . . 434 Primitive filenames now terminated by space not \relax. . 434

                                       \endfilecontents: Don’t globally

allocate a write stream (always use 15) . . . . . . . . . . . . . . . . 447

1993/11/28 ltfiles.dtx LaTeX2e

                                       \@missingfileerror: Use filename

parser from dircheck . . . . . . . 83 1993/11/29 ltoutput.dtx v1.0b

                                       \@makecol: \@makespecialcolbox

added . . . . . . . . . . . . . . . . . 393

                                       \@makespecialcolbox: Command

added . . . . . . . . . . . . . . . . . 395 1993/11/29 ltplain.dtx LaTeX2e

General: All accents in decimals;

suggested by Paul Taylor …. 24 1993/11/30 ltoutput.dtx v1.0c

                                       \@tracemessage:  Commands

added . . . . . . . . . . . . . . . . . 417 1993/12/01 fontdef.dtx v2.1a

General: Update for LaTeX2e … 200 1993/12/01 ltoutput.dtx v1.0e

\@reinserts: Command added . 394 1993/12/03 ltboxes.dtx v0.1a

\@argrsbox: macro removed …. 279

                                       \@begin@tempboxa: macro added 271

\@end@tempboxa: macro added . . 271 \@iirsbox: redefined to support

\height . . . . . . . . . . . . . . . 279 \@imakebox: macro modified … 271 \@irsbox: redefined to support

\height . . . . . . . . . . . . . . . 279 \@isavebox: color support . . . . . 273 extra group . . . . . . . . . . . . . . 273 \@isavepicbox: extra group …. 273 \@makebox: default changed from x

to c . . . . . . . . . . . . . . . . . . 271 \@makepicbox: macro modified . . 271 \@savebox: default c not x . . . . . 273 \bm@b: macros added . . . . . . . . . 271 \endlrbox: macro added . . . . . . 273 \fbox: extra group . . . . . . . . . . 274 \lrbox: color support . . . . . . . . 273

macro added . . . . . . . . . . . . . 273 \makebox: modified . . . . . . . . . . 271 \mbox: extra group . . . . . . . . . . 271 \minipage: Redefined to support

extra optional arguments … 277 \newsavebox: Pass the whole of arg

1 to \@ifdefinable . . . . . . 272

\parbox: Redefined to support ex-

tra optional arguments …. 275 \raisebox: redefined to support

\height . . . . . . . . . . . . . . . 278 \sbox: color support . . . . . . . . . 272

extra group . . . . . . . . . . . . . . 272 \set@color: color support . . . . . 272

macro added . . . . . . . . . . . . . 272 1993/12/03 ltclass.dtx v0.2i

\@cls@pkg: Name changed to avoid

clash with output routine… 445

General: \@onlypreamble: Many

commands declared. . . . . . . 434 Removed obsolete \@documentclass . . . . . . . . . . . . . . . . . 434

1993/12/03 lterror.dtx v1.0b

\@latexerr: Set \c@errorcontextlines

to -1 . . . . . . . . . . . . . . . . . . . 54 1993/12/03 ltfssini.dtx v2.1a

General: update for LaTeX2e … 194 1993/12/04 ltfiles.dtx v0.9b

\@iinput: Macro reimplemented . 82 \@input: Macro reimplemented . 83 \IfFileExists: Macro added … 82 \input: Macro reimplemented . . 82

\InputIfFileExists:  Macro

added . . . . . . . . . . . . . . . . . . 82 1993/12/05 ltfloat.dtx LaTeX2e

\@dblfloatplacement: Command

changed . . . . . . . . . . . . . . . 351 \@xfloat: Command changed . . 347

1993/12/05 ltoutput.dtx v1.0f \@addtobot: Command changed . 404

\@addtocurcol:  Command

changed . . . . . . . . . . . . . . . 406

\@addtodblcol:  Command

changed . . . . . . . . . . . . . . . 411

\@addtonextcol:  Command

changed . . . . . . . . . . . . . . . 410

\@addtotoporbot:  Command

changed . . . . . . . . . . . . . . . 405 \@boxfpsbit: Command added . 420 \@flcheckspace: Command added 421 \@flsetnum: Command added . . 421 \@flsettextmin: Command added 421 \@flstop: Commands added … 418 \@flupdates: Command added . 422

\@fpsadddefault:  Command

added . . . . . . . . . . . . . . . . . 418 \@getfpsbit: Command added . 419 \@opcol: Command changed … 392

Hook added . . . . . . . . . . . . . . 392 \@outputpage: Command changed 397 \@resethfps: Command added . 420

\@setfloattypecounts: Command

added . . . . . . . . . . . . . . . . . 419 \@setfpsbit: Command added . 420 \@shipoutsetup: Command added 397

\@startcolumn:  Command

changed . . . . . . . . . . . . . . . 401

\@startdblcolumn:  Command

changed . . . . . . . . . . . . . . . 401 \@testfp: Command added …. 420

\@textfloatsheight: Commands

added . . . . . . . . . . . . . . . . . 418

\@topnewpage:  Commands

changed . . . . . . . . . . . . . . . 386 \@tryfcolumn: Command changed 402

\@writesetup: \@startpagehook

added . . . . . . . . . . . . . . . . . 397 \output: Command changed … 388

1993/12/06 ltclass.dtx v0.2k

\ExecuteOptions: Preserve \Cur-

rentOption . . . . . . . . . . . . 440 1993/12/06 ltoutput.dtx v1.0f

\@specialoutput: Unboxing of 255

added to rescue writes . . . . . 388 1993/12/06 ltoutput.dtx v1.0g

\@topnewpage: \@floatplacement

placement bug fixed . . . . . . 386 1993/12/07 ltclass.dtx v0.2l

\ProvidesFile: Macro added … 437 1993/12/07 ltclass.dtx v0.2m

\@fileswithoptions: Reset \Cur-

rentOption . . . . . . . . . . . . 443 1993/12/07 ltoutenc.dtx 1.1

General: Protected all special char-

acters with \string. . . . . . . . 88 1993/12/07 ltoutenc.dtx v1.1

General: Made all character numbers decimal. . . . . . . . . . . . . 85 Removed a lot of equal signs and the like. . . . . . . . . . . . . . . . . 85

1993/12/08 ltboxes.dtx v0.1b

\@begin@tempboxa: Extra braces

for color support (braces removed from other macros) . . 271

\@irsbox: fix typo . . . . . . . . . . . 279

\@parboxto: \endgraf added

due to extra group in \@begin@tempboxa . . . . . . . . . . . 275

\lrbox: move \@endpefalse out of

the inner group . . . . . . . . . . 273 1993/12/08 ltfntcmd.dtx v2.1b

General: Macros \rm, \bf and \sf

moved to classes.dtx . . . . . . 228 1993/12/08 ltlists.dtx LaTeX2e

\@item: use \sbox to support

colour . . . . . . . . . . . . . . . . 265 1993/12/08 ltspace.dtx LaTeX2e

\@bsphack: Command reimplemented . . . . . . . . . . . . . . . . . 66 Command reimplemented; late birthday present for Chris … 66

\@vbsphack: Command added . . 68 1993/12/09 ltboxes.dtx v0.1c

\@irsbox: fix another typo . . . . . 279 1993/12/09 ltclass.dtx v0.2n

\documentstyle: input 209 com-

patibility file. . . . . . . . . . . . 440 1993/12/09 ltfiles.dtx v0.9e

\document: Hook added . . . . . . . 77 1993/12/09 ltmiscen.dtx v0.9e

\enddocument: Hook added …. 234 1993/12/10 ltoutenc.dtx v1.2

General: Added source code for

t1enc.sty. . . . . . . . . . . . . . . . 85 1993/12/11 ltfntcmd.dtx v3.0a

General: Complete reworking of all text commands, using just one creator function . . . . . . . . . 221 italic correction now put in front of penalty before glue . . . . . 221 newcommands replaced by defs 221 newfontswitch command corrected and changed . . . . . . . 221

\DeclareTextFontCommand: Macro

changed . . . . . . . . . . . . . . . 223 \emph: Macro changed . . . . . . . . 224 \fix@penalty: Macro added …. 226 \maybe@ic: Macro name changed 225 \maybe@ic@: Macro and name

changed . . . . . . . . . . . . . . . 225 \sw@slant: Macro changed . . . . . 226 \textup: Macros changed . . . . . . 224

1993/12/11 ltmath.dtx v0.9g

General: Added a group around the first argument of \frac to prevent changes (for example font changes) from modifying the contents of the second argument. . . . . . . . . . . . . . . . 248

1993/12/11 ltoutenc.dtx v1.2a

General: Corrected for t1enc,

math. . . . . . . . . . . . . . . . . . . 85 1993/12/11 ltsect.dtx LaTeX2e

\@author: Added default . . . . . . 332 \@title: Added default . . . . . . . 332

1993/12/11 ltxref.dtx LaTeX2e \@setref: Macro added . . . . . . . 231 \pageref: Macro reimplemented . 231 \ref: Macro reimplemented …. 231

1993/12/12 ltoutput.dtx v1.0h

\@cflb: boxmaxdepth setting moved . . . . . . . . . . . . . . . . 400 defs changed to lets . . . . . . . . 400

\@cflt: name changed . . . . . . . . 400 \@doclearpage: defs changed to

lets . . . . . . . . . . . . . . . . . . 392 \@makecol: defs changed to lets . 394 \@resethfps: Warnings added:

minimal . . . . . . . . . . . . . . . 420

\@startdblcolumn: defs changed to

lets . . . . . . . . . . . . . . . 401, 402 \@topnewpage: braces removed . . 387

\@tracemessage:  Commands

changed . . . . . . . . . . . . . . . 417 \@tryfcolumn: defs changed to lets 402

1993/12/13 ltclass.dtx v0.2o

General: Removed setting \errcon-

textlines (now in latex.tex) 434 \documentstyle: compatibility file

now latex209.sty. . . . . . . . . 440 \usepackage: Fixed error handling 441

1993/12/13 ltdirchk.dtx v0.2a

General: on the ‘docstrip’ pass, do

not check openin path . . . . . . 10 \IfFileExists: Removed interac-

tive prompting for current directory syntax . . . . . . . . . . . . 9

\strip@prefix: modified, name

changed from \stripmeaning . . 4 1993/12/13 ltlists.dtx latex2e

\trivlist: Initialised \@itemla-

bel . . . . . . . . . . . . . . . . . . 262 1993/12/13 ltmiscen.dtx v0.9h

\@noligs: Readded \@noligs . . . 241

\@verbatim: Readded ‘@noligs . . 240 Removed optional argument of ‘item . . . . . . . . . . . . . . . . . 239

center: Removed optional argu-

ment of \item . . . . . . . . . . 238 flushleft: Removed optional argu-

ment of \item . . . . . . . . . . 238 flushright: Removed optional ar-

gument of \item . . . . . . . . . 239 1993/12/13 ltoutenc.dtx v1.2b

General: Corrected file name in

driver code. . . . . . . . . . . . . . 85 1993/12/13 lttab.dtx latex2e

\tabbing: Removed optional argu-

ment of \item . . . . . . . . . . 288 1993/12/14 ltoutput.dtx v1.0i

General: Section added to declare

all parameters . . . . . . . . . . . 427 1993/12/15 ltboxes.dtx v0.1d

\@iminipage: Changed default

from ‘c’ to ‘s’ . . . . . . . . . . . 277 \@iparbox: Changed default from

‘c’ to ‘s’ . . . . . . . . . . . . . . . 275 \minipage: Changed default from

‘c’ to ‘s’ . . . . . . . . . . . . . . . 277 extra space removed. . . . . . . . 277

\parbox: Changed default from ‘c’

to ‘s’ . . . . . . . . . . . . . . . . . 275 1993/12/15 ltclass.dtx v0.2p

General: Removed extra ‘.’s from

\@@warnings . . . . . . . . . . . . 434 1993/12/16 ltlogos.dtx LaTeX2e

\LaTeXe: Extended logo by DPC 74 1993/12/16 ltmath.dtx v0.9i

\@@eqncr: use ‘refstepcounter in-

stead of shortcut . . . . . . . . . 249

General: use \refstepcounter in-

stead of shortcut . . . . . . . . . 248 1993/12/16 ltmiscen.dtx v0.9i

General: \literal added . . . . . . 241 1993/12/16 ltpage.dtx LaTeX2e

\mark: Init \mark at begin document . . . . . . . . . . . . . . . . . 369 1993/12/16 ltspace.dtx LaTeX2e

\@bsphack: Corrected optimisation

:-) . . . . . . . . . . . . . . . . . . . . 66 1993/12/16 lttab.dtx latex2e

\@xhline: Measure from middle of

vertical rules . . . . . . . . . . . . 303 1993/12/17 ltclass.dtx v0.2q

\@documentclasshook:  Macro

added . . . . . . . . . . . . . . . . . 434

\@fileswithoptions: Add \ompat-

ibility hook . . . . . . . . . . . 443 \documentstyle: Match Alan’s new

code. . . . . . . . . . . . . . . . . . 440 1993/12/17 ltoutenc.dtx 1.3

General: Added this section …. 88 Removed all the hackery for

use in \DeclareFontEncoding,

and redid everything using \DeclareTextFoo. . . . . . . . . 97, 99 Removed the catcode hackery, since the file is only read as a package in the preamble, and removed all the messages on the screen, which just confuse users. Replaced them by the appro-

priate \ProvidesPackage com-

mands. Added XXXenc. . . . . 88 1993/12/17 ltoutenc.dtx v1.3

General: Added \EncodingSpeci-
ficAccent, \EncodingSpeci-
ficAccentedLetter and \En-
codingSpecificCommand. . . . . 85

Made Rokicki’s encoding a proper encoding scheme rather than a variant of OT1. . . . . . 85

1993/12/17 ltoutput.dtx v1.0j \@opcol: Hook removed . . . . . . . 392

\@specialoutput: Page room test

added . . . . . . . . . . . . . . . . . 389 \@topnewpage: check for vsize too

small added . . . . . . . . . . . . 386 Page room test added . . . . . . 388

\@tracemessage:  tracefloatvals

made a document command 417

\@writesetup: —and then re-

moved . . . . . . . . . . . . . . . . 397 1993/12/17 ltpage.dtx LaTeX2e

\mark: Removed init \mark at begin document, since it doesn’t work. . . . . . . . . . . . . . . . . . 369 \rightmark: Stopgap solution to

mark \leftmark and \right-

mark work without initializing mark until the problem is solved. . . . . . . . . . . . . . . . . 369

1993/12/18 ltoutenc.dtx 1.3b

General: Fixed typos with \ProvidesPackage lines. Added the

\NeedsTeXFormat line. Added

the last argument to \DeclareEncoding. Moved the use of the encodings to after their declaration. . . . . . . . . . . . . . . . . 88 Replaced the missing last ar-

gument to \DeclareFontEncod-

ing. . . . . . . . . . . . . . . . . 97, 99 1993/12/18 ltoutenc.dtx 1.3c

General: Rewrote for the new syn-

tax of \EncodingSpecific. 97, 99
Split \EncodingSpecificAccent
up into \EncodingSpecific and
\DeclareAccent. . . . . . . . . . . 88

1993/12/18 ltoutenc.dtx v1.3a

General: Replaced OT3 by XXX 85 1993/12/18 ltoutenc.dtx v1.3b

General: Corrected typos. . . . . . 85 Replaced the missing last ar-

gument to \DeclareFontEncod-

ing. . . . . . . . . . . . . . . . . . . . 85 1993/12/18 ltoutenc.dtx v1.3c

General: A new syntax, separating accent-definitions from encoingspecific definitions, and allowing encoding-specific \chardef, \let, etc. . . . . . . . . . . . . . . . 85 Rewrote for the new syntax of

\EncodingSpecific. . . . . . . . 85

1993/12/18 ltoutenc.dtx v1.3d

General: Some T1 stuff had drifted

into the OT1 file. . . . . . . . . . 85 1993/12/18 ltpage.dtx LaTeX2e

\sloppy: Added \emergencys-

tretch . . . . . . . . . . . . . . . . 370 1993/12/19 ltclass.dtx v0.2r

\endfilecontents: Different mes-

sage when ignoring a file … 447 1993/12/19 ltfntcmd.dtx v3.0b

General: \@pdef comand added . 221 Added by ASAJ. . . . . . . . . . . 228

                                      Made \@newfontswitch produce

an error if command already exists, and added \@renewfontswitch, ASAJ . . . . . . . 221 Other tidying . . . . . . . . . . . . 221 Some more tidying done . . . . . 221 Untidying added, so this is now a TEMPORARY version… 221 Wording changes by CAR. … 228

                                   \DeclareOldFontCommand: Cor-

rected and tidied . . . . . . . . . 228

                                   \DeclareTextFontCommand: Cor-

rected and tidied . . . . . . . . . 223 1993/12/19 ltspace.dtx LaTeX2e

\@bsphack: There seem to be problems with selfmade birthday presents . . . . . . . . . . . . . . . . 67

1993/12/20 ltdefns.dtx LaTeX2e

\@reargdef: Kept old version of

\@reargdef, for array.sty …. 33 1993/12/20 ltfiles.dtx v0.9m

                                   \@obsoletefile: Added this com-

mand, removed @oldfilewarning . . . . . . . . . . . . . . . . . . . . 83

1994/01/05 fontdef.dtx v2.1d

General: Removed nf prefix from

file names. . . . . . . . . . . . . . 202 1994/01/13 ltmath.dtx v0.9o

\@@eqncr: correcting 0.9i . . . . . . 249 General: correcting 0.9i . . . . . . . 248

1994/01/14 ltdirchk.dtx v0.2d

                                   \IfFileExists:  Close  the

texsys.aux output stream … 10 1994/01/15 ltfiles.dtx v0.9o

                                   \document: move \@preamblecmds

after document hook . . . . . . . 79 1994/01/17 ltclass.dtx v0.2s

                                   \@fileswithoptions: Modify to re-

duce parameter stack usage . 443 General: Added many more \@on-

lypreamble commands …. 434 Wrapped long lines to column 72 434

1994/01/17 ltfiles.dtx LaTeX2e

\listfiles: New Version, adds ‘.tex’ if needed, and lines up columns . . . . . . . . . . . . . . . . 84

1994/01/17 ltfssbas.dtx v2.1a General: New math font setup . . 120

                                   \curr@math@size: New math font

setup . . . . . . . . . . . . . . . . . 130

\everydisplay: New math font

setup . . . . . . . . . . . . . . . . . 130 \everymath: New math font setup 130

\frozen@everydisplay: New math

font setup . . . . . . . . . . . . . . 130

\frozen@everymath: New math

font setup . . . . . . . . . . . . . . 130

\math@version: New math font

setup . . . . . . . . . . . . . . . . . 129 1994/01/17 ltfssini.dtx v2.1e

\not@math@alphabet:  Message

changed . . . . . . . . . . . . . . . 195 1994/01/17 ltfsstrc.dtx v2.3a

General: New math font setup . . 141

\check@mathfonts: New math font

setup . . . . . . . . . . . . . . . . . 150

\glb@currsize: New math font

setup . . . . . . . . . . . . . . . . . 148

\restglb@settings: New math

font setup . . . . . . . . . . . . . . 151 1994/01/18 ltbibl.dtx LaTeX2e

\bibliography: Use \@input@ so

include files are listed. . . . . . 366 1994/01/18 ltclass.dtx v0.2t

\@ifclassloaded:  Fix  typo
   \@pkgetension . . . . . . . . . . 436

1994/01/18 ltfiles.dtx v0.9p \@iffileonpath: Macro added . . 82 \@input: do not use a different def-

inition for \input@path . . . . . 83 \@input@: Macro added . . . . . . . 83 \IfFileExists: New Definition . 82

\include: Use \@input@ so include

files are listed. . . . . . . . . . . . 80

\InputIfFileExists: New Defini-

tion . . . . . . . . . . . . . . . . . . . 82 1994/01/18 ltfssini.dtx v2.1f

\not@math@alphabet: Message cor-

rected . . . . . . . . . . . . . . . . 195 1994/01/18 ltmiscen.dtx v0.9p

\@verbatim: Add \global\@inlabelfalse

. . . . . . . . . . . . . . . . . . . . . . 239 Only add \penalty if in hmode 240

1994/01/19 fontdef.dtx v2.1e

General: Added missing setting for

symbols in bold version. … 205 1994/01/19 ltdirchk.dtx v0.2e

\IfFileExists: name changed

from \test . . . . . . . . . . . . . . . 8 \input@path: No longer check that

an empty group is in the path 10

                                       \strip@prefix: name changed
                                          from \strip@meaning, to match

NFSS . . . . . . . . . . . . . . . . . . . 4 1994/01/19 ltmath.dtx v1.0n classes

\mathindent: Deferred setting of

\mathindent . . . . . . . . . . . . 250 1994/01/20 ltdirchk.dtx v0.2f

General: \@copytexsys and the texsys.new file removed . . . . . . 8 Modify all of ltxcheck . . . . . . . 13

                                       \IfFileExists: \@copytexsys re-

moved . . . . . . . . . . . . . . . . . . 9 1994/01/21 ltclass.dtx v0.2u

\documentstyle: compatibility file

now latex209.def. . . . . . . . . 440 1994/01/21 ltdirchk.dtx v0.2g

General: Improve documentation,

reorganise docstrip module … 1

                                       \filename@parse: Minor changes,

and add Mac version (:) …. 10 \today: Name changed from

\stamp, to save memory . . . . . 8 1994/01/21 ltfloat.dtx LaTeX2e

\@xfloat: Added missing percent

characters. . . . . . . . . . . . . . 347 1994/01/21 ltmiscen.dtx v0.9s

                                       \verbatim@font: Removed unnec-

essary category code hackery. 240 1994/01/24 ltdirchk.dtx v0.2h

\IfFileExists: Stop testing once

texsys.aux has been found …. 9 1994/01/24 ltpage.dtx LaTeX2e

\pagestyle: (DPC) Complain if

pagestyle is undefined. . . . . . 368 1994/01/25 ltdirchk.dtx v0.2i

General: Protect against looping on

                                          \@@input and \@@end . . . . . . . 3

1994/01/25 ltfssbas.dtx v2.1b

\math@version: Corrections for

math setup . . . . . . . . . . . . . 129 1994/01/25 ltmath.dtx LaTeX2e

                                       \bordermatrix:  Removed

\p@renwd. . . . . . . . . . . . . . . 245 1994/01/26 ltfsstrc.dtx v2.3c

                                       \check@mathfonts: Correct trace

info placement . . . . . . . . . . 150

                                       \restglb@settings: Correct trace

info placement . . . . . . . . . . 151 1994/01/27 ltfntcmd.dtx v3.1a

\nocorrlist: Only ., used as de-

fault for cm fonts . . . . . . . . 227 1994/01/29 ltclass.dtx v0.2v

\@@unprocessedoptions: Macro

added. . . . . . . . . . . . . . . . . 446

\@fileswithoptions: All options

raise error if no \ProcessOptions appears . . . . . . . . . . . 444

1994/01/31 ltclass.dtx v0.2w

\g@addto@macro: Use toks register

to avoid ‘hash’ problems … 445 1994/01/31 ltfiles.dtx v0.9t

\document: set \@normalsize or

\normalsize if necessary …. 78 1994/01/31 ltfntcmd.dtx v3.1b

General: \@normalsize no longer

defined . . . . . . . . . . . . . . . . 221 1994/02/01 ltpage.dtx LaTeX2e

\pagestyle: (DPC) Modify to get

nicer error message . . . . . . . 368

\thispagestyle: (DPC) Modify to

get nicer error message …. 369 1994/02/02 ltclass.dtx v0.2x

\@fileswithoptions: Only run the

hook and options check if the file was loaded. . . . . . . . . . . 444

1994/02/03 ltoutput.dtx v1.0k

\@makespecialcolbox: correct mis-

takes in the documentation . 396 1994/02/07 ltclass.dtx v0.2y

\@fileswithoptions: Run \@com-

patibility on the first class to start (not the first to finish) 443

\@ifclasswith: Add extra ,s so

‘two’ is not matched with ‘twocolumn’ . . . . . . . . . . . . 437

\ProcessOptions*: Add extra ,s

so ‘two’ is not matched with ‘twocolumn’ . . . . . . . . . . . . 439

1994/02/07 ltfssbas.dtx v2.1c

\DeclareFontEncoding: revert cat-

code settings earlier . . . . . . 123

\DeclareFontShape: revert catcode

settings earlier . . . . . . . . . . 121 1994/02/08 ltoutput.dtx v1.0k

\@makespecialcolbox:  box-

maxdepth setting added … 395 boxmaxdepth setting removed 395 General: Documentation and tasks

tidied. . . . . . . . . . . . . . . . . 371 1994/02/10 ltclass.dtx v0.2z

                                   \@documentclasshook: Changed
                                       the name from \@compatibil-
                                       ity to \@documentclasshook,

and added the check for whether \@normalsize has been defined. ASAJ. . . . . . . . . . . 434

                                   \@fileswithoptions: Renamed
                                       \@compatibility to \@docu-
                                       mentclasshook. ASAJ. . . . . 443

1994/02/10 ltfssbas.dtx v2.1d

                                   \addto@hook: Made \addto@hook

long. . . . . . . . . . . . . . . . . . 140 1994/02/10 ltfsscmp.dtx v2.1d

                                   \scan@@fontshape: scan away stuff

after pt . . . . . . . . . . . . . . . 167 1994/02/22 ltfssini.dtx v2.1g

General: Correct error mssage . . 197 1994/02/24 ltfssbas.dtx v2.1e

                                   \DeclareFontShape:  Separate

restoration of catcodes for fd cmds . . . . . . . . . . . . . . . . . 121

                                   \define@newfont:  Separate

restoration of catcodes for fd cmds . . . . . . . . . . . . . . . . . 133

\nfss@catcodes: Separate restora-

tion of catcodes for fd cmds . 133 1994/02/25 ltdirchk.dtx v0.2j

General: Remove need for drv file . 1 1994/03/01 ltdirchk.dtx v0.2k

General: Add unstripped module, so that dircheck.dtx may be used with initex . . . . . . . . . . . 1

1994/03/02 ltboxes.dtx v0.1e

General: Add 2ekernel module . . 270 Remove need for drv file . . . . . 270

1994/03/02 ltclass.dtx v0.3a

General: Remove need for driver

file . . . . . . . . . . . . . . . . . . . 434 1994/03/03 ltboxes.dtx v0.1f

\@irsbox: Replaced a missing

\else . . . . . . . . . . . . . . . . . 279 1994/03/04 ltfloat.dtx v1.0a

General: Initial version, split from

latex.dtx . . . . . . . . . . . . . . 343 1994/03/04 ltsect.dtx v1.0a

General: Initial version, split from latex.dtx . . . . . . . . . . . . . . 332 1994/03/04 lttab.dtx v1.0a

General: Initial version, split from

latex.dtx . . . . . . . . . . . . . . 281 1994/03/04 ltvers.dtx v1.0a

General: Initial version, split from

latex.dtx . . . . . . . . . . . . . . . 26 1994/03/07 ltboxes.dtx v0.1a

\@mpfootnotetext: Extra group for

colour . . . . . . . . . . . . . . . . 278 1994/03/07 ltboxes.dtx v1.0a

General: Unify format with other

Kernel files . . . . . . . . . . . . . 270 1994/03/07 ltdefns.dtx v1.0a

\@@italiccorr: Macro added … 29 1994/03/07 ltfiles.dtx v1.0a

General: Initial version, split from latex.dtx . . . . . . . . . . . . . . . 75 Long lines wrapped to 72 columns . . . . . . . . . . . . . . . . 75

1994/03/07 ltfinal.dtx v0.1a

General: Add code from the old dump.dtx . . . . . . . . . . . . . . 456 Initial version, split from latex.dtx . . . . . . . . . . . . . . . . 452 move code here from lhyphen.dtx . . . . . . . . . . . . . . . 453 Remove oldcomments environment . . . . . . . . . . . . . . . . . 452

use \InputIfFileExists not
\IfFileExists . . . . . . . . . . 453

1994/03/07 ltfloat.dtx v1.0a

\@endfloatbox: (DPC) Extra

group for colour . . . . . . . . . 350

\@footnotetext: (DPC) Extra

group for colour . . . . . . . . . 359 \@xfloat: (DPC) Extra group for

colour . . . . . . . . . . . . . . . . 348 1994/03/07 lthyphen.dtx v0.1c

General: move the 2ekernel code to

ltfinal.dtx . . . . . . . . . . . . . . 450 1994/03/07 ltlength.dtx v1.0a

\@settodim: (DPC) Extra group

for colour . . . . . . . . . . . . . . 119 1994/03/07 ltlists.dtx v1.0a

General: Initial version, split from latex.dtx . . . . . . . . . . . . . . 254 Long lines wrapped to 72 columns . . . . . . . . . . . . . . . 254 1994/03/07 ltpage.dtx v1.0a

General: Initial version, split from

ltherest.dtx . . . . . . . . . . . . . 368 1994/03/07 ltpictur.dtx v0.1a

General: Initial version, split from latex.dtx . . . . . . . . . . . . . . 305 Long lines wrapped to 72 columns . . . . . . . . . . . . . . . 305

1994/03/07 ltsect.dtx v1.0a

\@hangfrom: (DPC)Extra groups

for colour . . . . . . . . . . . . . . 339 1994/03/07 lttab.dtx v1.0a

General: Long lines wrapped to 72

columns . . . . . . . . . . . . . . . 281 1994/03/08 ltclass.dtx v0.3b

General: Modify driver code into

‘new style’ . . . . . . . . . . . . . 434 1994/03/08 ltdirchk.dtx v1.0a

General: Reorganise driver module

into ‘new style’ . . . . . . . . . . . . 1 1994/03/08 ltplain.dtx v1.0a

General: Remove need for a driver

file. . . . . . . . . . . . . . . . . . . . 14 1994/03/10 ltfssbas.dtx v2.2f

\math@egroup: Changed \be-
gingroup/\endgroup  to
\bgroup/\egroup. . . . . . . . . 139

1994/03/11 ltfssdcl.dtx v2.1b

\DeclareSymbolFontAlphabet@:

Added check against use of alphabet switch outside of math mode. . . . . . . . . . . . . . . . . . 192

\SetMathAlphabet@: Changed pa-

rameter template in temporary macro to catch check add below. . . . . . . . . . . . . . . . . . . 183

1994/03/12 ltclass.dtx v0.3c

\@fileswithoptions: Do not use
\@pr@videpackage to avoid

typeout . . . . . . . . . . . . . . . 444 General: Change name from doc-

class to ltclass . . . . . . . . . . . 434

\ProvidesFile: Add \wlog . . . . 437
\ProvidesPackage: Add \wlog . . 437

use \@gtempa . . . . . . . . . . . . . 437 1994/03/12 ltdefns.dtx v1.0b

\@reargdef: New defn, in terms of

\@yargdef . . . . . . . . . . . . . . 33 \@yargdef: Name changed from

\XXX@argdef . . . . . . . . . . . . . 33 1994/03/12 ltdirchk.dtx v1.0b

General: Change name from dircheck.dtx . . . . . . . . . . . . . . 1 Minor edits to the typeouts in ltxcheck . . . . . . . . . . . . . . . . . 1

1994/03/12 ltfloat.dtx v1.0b

\@savemarbox: (DPC) Extra group

for colour . . . . . . . . . . . . . . 353 \@xympar: (DPC) Extra bgroup for

colour . . . . . . . . . . . . . . . . 354 1994/03/12 ltplain.dtx v1.0b

General: Name changed from lplain.

The end of an era . . . . . . . . . 14 1994/03/12 ltplain.dtx v1.0e

General: Replaced remaining width, height, depth by L^{A}TEX macro names to save tokens. . 14

1994/03/13 ltcntrl.dtx v1.0c

\@tfor: (DPC) Add \@tf@r so

a single group is correctly treated. . . . . . . . . . . . . . . . . 48

1994/03/13 ltfiles.dtx LaTeX2e

\@addtofilelist: Macro added . 84
\listfiles:  Reset  \@ad-

dtofilelist at begin document . . . . . . . . . . . . . . . . . . 84

1994/03/13 ltfiles.dtx v0.3b

\InputIfFileExists: Use new cmd
\@addtofilelist . . . . . . . . . 82

1994/03/13 ltfssbas.dtx v2.1g

General: add 2ekernel module to

omit repeated code . . . . . . . 120 1994/03/13 ltfssdcl.dtx v2.1c

General: add 2ekernel module to

omit repeated code . . . . . . . 171 1994/03/14 ltboxes.dtx v1.0b

\@isavebox: Use \color@setgroup 273
\@isavepicbox: Use \color@setgroup

. . . . . . . . . . . . . . . . . . . . . . 273

\color@begingroup: macro added

for colour support . . . . . . . . 272

\color@endgroup: macro added for

colour support . . . . . . . . . . 272

\lrbox: Use \color@setgroup . . 273
\sbox: Use \color@setgroup . . . 272

1994/03/14 ltfloat.dtx 1.0c

\@xympar: (DPC) Use \color@begingroup

. . . . . . . . . . . . . . . . . . . . . . 354 1994/03/14 ltfloat.dtx v1.0c

\@endfloatbox:  (DPC)  Use
\color@endgroup . . . . . . . . 350
\@footnotetext: (DPC) Use
\color@begingroup, add \end-

graf . . . . . . . . . . . . . . . . . . 359

\@savemarbox:  (DPC)  Use
\color@begingroup . . . . . . 353
\@xfloat: (DPC) Use \color@begingroup

. . . . . . . . . . . . . . . . . . . . . . 348 1994/03/15 ltfiles.dtx LaTeX2e

\@missingfileerror: Quit on x or

X just like a real error . . . . . . 83 1994/03/15 ltfntcmd.dtx v3.2a

General: Adapted to mass formatting . . . . . . . . . . . . . . . . . . 221

Changed \/ to \@@italiccorr 221
Removed \@renewfontswitch . 221

Removed defs of short-forms and all sizes except \normalize . 221

1994/03/15 ltoutput.dtx v1.0l

\@addtocurcol: Changed \addvs-

pace to \vskip . . . . . . . . . . 408

\@combinedblfloats:  Removed

boxmaxdepth setting. . . . . . 401

\@makecol: \maxdepth changed to

\@maxdepth . . . . . . . . . . . . 393 Removed boxmaxdepth setting. 394

\@makespecialcolbox: Removed

boxmaxdepth setting. . . . . . 395 \@topnewpage: Corrected and

amended warning message . . 387 Warning added: it should be improved . . . . . . . . . . . . . . . . 388

General: Added some warnings when page gets full of top floats. . . . . . . . . . . . . . . . . . 371 Driver added and further tidying. . . . . . . . . . . . . . . . . . . 371 Removed duplicated code and corrected docstrip options… 371 Some boxmaxdepth settings removed. . . . . . . . . . . . . . . . . 371

1994/03/16 ltclass.dtx v0.3f

General: Add pkgindoc package . 449 1994/03/16 ltfiles.dtx LaTeX2e

\listfiles: Move this code directly into \document . . . . . . 84 1994/03/16 ltfiles.dtx v1.0c

\document: (DPC) directly add file

list settings . . . . . . . . . . . . . . 79 1994/03/16 ltmiscen.dtx v1.0b

\@verbatim: Remove \global\@inlabelfalse

again. . . . . . . . . . . . . . . . . . 239 1994/03/28 ltalloc.dtx v1.0d

General: Redefinition of ‘new’ allo-

cations removed. . . . . . . . . . . 43 1994/03/28 ltdirchk.dtx v1.0d

General: Improve documentation . 1 1994/03/28 lterror.dtx v1.0d

\@invalidchar: (DPC) Comment

out (use catcode15 instead) . . 58 General: Remove test for \input-

lineno undefined. . . . . . . . . . 54 1994/03/28 ltfiles.dtx v1.0d

\document: (DPC) Use \normal-
size not \@normalsize . . . . . 78
(DPC) remove \@normalsize

check . . . . . . . . . . . . . . . . . . 78 1994/03/28 ltfloat.dtx v1.0b

\@caption: Use \normalsize not

\@normalsize . . . . . . . . . . . 346 General: Split further from lther-

est.dtx . . . . . . . . . . . . . . . . 343 1994/03/28 ltlists.dtx v1.0b

General: Improve documentation 253 1994/03/28 ltmiscen.dtx v1.0c

General: Improve Documentation 233 1994/03/28 ltplain.dtx v1.0c

\newtoks: Remove some \outer

declarations. . . . . . . . . . . . . . 17 1994/03/28 ltsect.dtx v1.0b

General: Split further from lther-

est.dtx . . . . . . . . . . . . . . . . 332 1994/03/28 lttab.dtx v1.0b

General: Improve documentation 281 1994/03/28 ltthm.dtx v1.0a

General: Initial version, split from

latex.dtx . . . . . . . . . . . . . . 328 1994/03/29 ltcounts.dtx v1.0c

General: Create file from parts of lt-

miscen and ltherest. . . . . . . 115 1994/03/29 ltlength.dtx v1.0c

General: Create file ltcntlen from

parts of ltmiscen and ltherest. 119 1994/03/29 ltmiscen.dtx v1.0d

General: Remove counter macros to ltcntlen . . . . . . . . . . . . . . . 233 1994/03/29 ltpageno.dtx v1.0c

General: Create file ltcntlen from

parts of ltmiscen and ltherest. 229 1994/03/29 ltxref.dtx v1.0c

General: Create file ltcntlen from

parts of ltmiscen and ltherest. 230 1994/03/31 ltbibl.dtx v1.0a

General: Initial version of ltidxbib.dtx, split from ltherest.dtx . . . . . . . . . . . . . . . . 364

1994/03/31 ltidxglo.dtx v1.0a

General: Initial version of ltidxbib.dtx, split from ltherest.dtx . . . . . . . . . . . . . . . . 361

1994/04/09 ltcounts.dtx v1.0d

\@newctr: \@nocnterr now has

counter name argument …. 116

\addtocounter: \@nocnterr now

has counter name argument . 116

\setcounter: \@nocnterr now has

counter name argument …. 116

\stepcounter: Use \addtocounter

to have name checked . . . . . 116 1994/04/09 ltthm.dtx v1.0b

\@othm: Use standard counter error

message (FMi) . . . . . . . . . . 330 1994/04/11 ltclass.dtx v0.3g

\endfilecontents: Add star form,

dont write \endinput at the end of the file. . . . . . . . . . . . . . . 447

\ProvidesFile: Protect against

weird catcodes. . . . . . . . . . . 437 1994/04/11 ltfssbas.dtx v2.1h

General:  Added  \default-

scriptratio and \default-
scriptscriptratio. ASAJ. . 120
\defaultscriptratio:  Macro

added . . . . . . . . . . . . . . . . . 139

\defaultscriptscriptratio:

Macro added . . . . . . . . . . . 139 1994/04/12 ltboxes.dtx v1.0c

General: Remove \@acci, now defined in ltplain.dtx . . . . . . . 276 Remove \@dischyph, now defined in ltinit.dtx . . . . . . . . 276

1994/04/12 ltdefns.dtx v1.0g

\@dischyph: Define \@dischyph,

was previously in ltboxes.dtx . 29 1994/04/12 ltplain.dtx v1.0d

General: Define \@acci . . . . . . . 24 1994/04/12 ltvers.dtx v1.0b

General: Have version info gener-

ated automatically. . . . . . . . . 26 1994/04/14 ltfntcmd.dtx v3.2b

General: Macros renamed to non-

private forms, JB . . . . . . . . 221

\DeclareOldFontCommand:  Re-
named from \@newfontswitch 227
\DeclareTextFontCommand: Macro

renamed from \@newtextcmd 223 1994/04/15 ltboxes.dtx v1.0d

\@isavebox: Added missing precent

character. . . . . . . . . . . . . . . 273 1994/04/17 ltcounts.dtx v1.0e

\@newctr: Use \@nocounterr in-

stead of \@nocnterr . . . . . . 116

\addtocounter: Use \@nocounterr

instead of \@nocnterr . . . . . 116

\setcounter: Use \@nocounterr

instead of \@nocnterr . . . . . 116 1994/04/17 lterror.dtx v1.0h

\@nocounterr: New name for error message, old error message (without arg) kept . . . . . . . . 56

1994/04/17 ltthm.dtx v1.0c

\@othm: Use new std counter error

message (FMi) . . . . . . . . . . 330 1994/04/18 ltfinal.dtx v0.1b

General: Initialise \textheight,

\textwidth and page style . 452 1994/04/18 ltfloat.dtx v1.0d

\@footnotetext: (DPC) Remove

Colour support . . . . . . . . . . 359

\@savemarbox: (DPC) Remove

Colour support . . . . . . . . . . 353 1994/04/18 ltfssbas.dtx v2.1i

General: Macro \no@alphabet@help

removed again . . . . . . . . . . 120

\calculate@math@sizes: Changed

message to log only . . . . . . . 139

\no@alphabet@error: Use std La-

TeX error macro . . . . . . . . . 120 1994/04/18 ltfssdcl.dtx ???

\DeclareMathAlphabet: Pass cor-

rect arg (2 not 3) . . . . . . . . 181 1994/04/18 ltfssdcl.dtx v2.1d

General:  Removed  surplus

\no@alphabet@error  (see

fam.dtx) . . . . . . . . . . . . . . . 171 1994/04/18 ltfsstrc.dtx v2.3d

General: Changed to new er-

ror/warning scheme . . . . . . 141 \font@submax: Changed dimen to

macro . . . . . . . . . . . . . . . . 160 \fontsubfuzz: Changed dimen to

macro . . . . . . . . . . . . . . . . 160

                                   \subst@size: \font@submax and

\fontsubfuzz now macros . . 161 1994/04/19 ltpage.dtx v1.0b

General: Improve documentation 368 1994/04/20 ltfntcmd.dtx v3.3a

General: Documentation up-dated 221 New implementation of \ …. 221 \check@nocorr@: Macros added . 224

                                   \maybe@ic@: \nocorr etc removed

from list of tokens to check, leaving only punctuation characters . . . . . . . . . . . . . . . . . 226

1994/04/20 ltmiscen.dtx v1.0e

\enddocument: Changed logic for

producing warning messages 235 1994/04/21 ltboxes.dtx v1.0e

                                   \@iiiminipage: Extra \bgroup for

colour . . . . . . . . . . . . . . . . 277

                                   \@mpfootnotetext: Extra \end-

graf for colour . . . . . . . . . . 278

                                   \endminipage: Extra \egroup for

colour . . . . . . . . . . . . . . . . 277 1994/04/21 ltfinal.dtx v0.1c

General: Added comments, set the

catcodes of 128–255. . . . . . . 452 1994/04/22 ltfssini.dtx v2.1g

                                   \not@math@alphabet:  Message

changed again . . . . . . . . . . . 195 1994/04/23 ltfinal.dtx v0.1d

General: Check that \font@submax

is still zero . . . . . . . . . . . . . 452 1994/04/24 ltoutput.dtx v1.0m

\@resethfps: Number 2 changed to \tw@ . . . . . . . . . . . . . . . . . . 420 Warning changed . . . . . . . . . . 420

                                   \@specialoutput:  Message

changed to give more info and ‘top’ removed . . . . . . . . . . . 389

\@topnewpage: Message changed to give more info . . . . . . . . . . . 388 Warning message removed as it will be generated later . . . . . 387 General: Changed \@normalsize to

\normalsize. . . . . . . . . . . . 371 Corrected unverbed commands in documentation. . . . . . . . . 371 Removed some long lines and other aesthetic changes. . . . . 371 Warning messages changed/corrected. . . . . . . . . . . . . . . . . . . . . . . 371

1994/04/24 ltpictur.dtx v0.1b

General: Removed surplus spaces after \hbox to in several cases . . . . . . . . . . . . . . . . . . . . . . 305

1994/04/25 ltclass.dtx v0.3h

General: Removed spurious extra

‘.’s at the end of error messages 434 1994/04/25 ltfloat.dtx v1.0e

\@largefloatcheck:  Changed

warning message to give more info . . . . . . . . . . . . . . . . . . 350 Command added . . . . . . . . . . 350

General: Changed warning messages . . . . . . . . . . . . . . . . . 343 Removed obsolete tracing code 343

1994/04/27 ltfsstrc.dtx v2.3e

General: Corrected item that was

forgotten in last change. … 141 1994/04/28 lterror.dtx v1.0j

\@inmatherr: Macro added …. 58 1994/04/28 lterror.dtx v1.1c

\@inmatherr: Replaced \noexpand

with \protect. . . . . . . . . . . . 58 1994/04/28 ltfssdcl.dtx v2.1e

General: Removed all \uppercase

in hex num parsing macros . 171 1994/04/28 ltlists.dtx v1.0c

General: Replaced \@ltxnomath by

\@inmatherr . . . . . . . . . . . . 263 1994/04/28 ltpictur.dtx v0.1c

General: bezier curves added … 325 \multiput: (DPC) Ignore spaces

between )( . . . . . . . . . . . . . 307 (DPC) Macro added . . . . . . . 307

\picture: (DPC) Ignore spaces be-

fore ( . . . . . . . . . . . . . . . . . 307 1994/04/28 ltplain.dtx v1.0g

General: Turn off overfull box trac-

ing in log . . . . . . . . . . . . . . . 20 1994/04/29 ltclass.dtx v1.0a

General: Change version number to 1 (no other change) . . . . . . . 434 1994/04/29 ltmiscen.dtx v1.0f

\@verbatim: \leavevmode added 240

Change to \everypar added . . 240 1994/04/29 ltoutenc.dtx 1.4a

General: Removed \EncodingSpecific. Renamed all the com-

mands. Added \DeclareTextG-
lyph and \UndeclareTextCom-

mand. . . . . . . . . . . . . . . . . . . 88 Removed Rokicki’s OT1 variant encoding. Moved the driver to the top. . . . . . . . . . . . . . . . . 88

1994/04/30 ltfntcmd.dtx v3.3b

General: Documentation up-dated and tidied . . . . . . . . . . . . . . 221 Prefix frag@ changed to frag in

\@protecteddef . . . . . . . . . 221

Title changed . . . . . . . . . . . . 221 Warning changed to info message

in \@protecteddef . . . . . . . 221

1994/04/30 ltoutput.dtx v1.0n

\@activechar@info:  \@ac-
tivechar@warning changed to
\@activechar@info . . . . . . 396
\@combinedblfloats:  Removed

rule in topnewpage case …. 401 \@emptycol: Empty column action

added: \@emptycol . . . . . . . 386 \@flsetnum: Rogue space removed 421

\@specialoutput: Cut-off point

changed to 2\baselineskip . 389 Empty column action added: \@emptycol . . . . . . . . . . . . 389 Extra empty column added for twocolumn case . . . . . . . . . 389 Extra empty column added for twocolumn case (wrong, see below) . . . . . . . . . . . . . . . . . . 389

\@topnewpage: Added setting of \col@number . . . . . . . . . 386, 387 Cut-off point changed to

3\baselineskip . . . . . . . . . 388

Empty column action added: \@emptycol . . . . . . . . . . . . 388 Message changed for Frank … 388

General: \@activechar@warning

changed to an info message. . 371 Added \col@number. . . . . . . . 371 Documentation tidied. . . . . . . 371 Empty column action added. . 371 Fixed bug from \dblfigrule with \@topnewpage. . . . . . . 371 Full of floats action improved. . 371

\col@number: Added \col@number 384

\onecolumn: Added setting of

\col@number . . . . . . . . . . . . 386 1994/05/01 lterror.dtx v1.0k

\@latexerr: (CAR) Added draft

\@latexinfo. . . . . . . . . . . . . 54 1994/05/01 ltoutenc.dtx 1.4a

General: Added the \a command. 94

Added the \SaveAtCatcode
and \RestoreAtCatcode com-

mands. . . . . . . . . . . . . . . . . . 97 Removed the uc/lc table settings, since the T1 uc/lc table is now the default. . . . . . . . . . . . . . 104 Rewrote for the new syntax. 97, 99

1994/05/01 ltoutenc.dtx v1.4a

General: Removed Rokicki’s encoding. . . . . . . . . . . . . . . . . . . . 85 Renamed the commands, re-

moved the \EncodingSpecific

command. Turned all slots into decimal. Added \a. . . . . . . . . 85

1994/05/02 ltcntrl.dtx v1.0l

\@break@tfor: Macro added (from

ltfiles.dtx) . . . . . . . . . . . . . . 48 1994/05/02 ltfiles.dtx v1.0f

\@iffileonpath: \@break@loop re-

named to \@break@tfor …. 82

\@obsoletefile: Make \@on-

lypreamble . . . . . . . . . . . . . 83 1994/05/02 ltfinal.dtx v0.1e

General: Added setting the ‘letter’ catcodes. . . . . . . . . . . . . . . 454 Added setting the ‘other’ catcodes. . . . . . . . . . . . . . . . . . 454 Added setting the special catcodes. . . . . . . . . . . . . . . . . . 454 Made slot 127 illegal . . . . . . . 454 Set all the catcodes . . . . . . . . 452

1994/05/02 ltfinal.dtx v0.1f

General: Set the catcode of control-

J. . . . . . . . . . . . . . . . . . . . . 454 1994/05/02 ltmiscen.dtx v1.0g

General: Changed 91 to 1991 and

moved some bits . . . . . . . . . 233 1994/05/02 ltoutput.dtx v1.0o

\@resethfps: Code shortened … 420 General: Code of \@resethfps

shortened. . . . . . . . . . . . . . 371 1994/05/03 ltbibl.dtx v1.0b

\nocite: Make \nocite issue a

warning for an undefined citation key. . . . . . . . . . . . . . . . 366

1994/05/03 ltfinal.dtx v0.1f

General: Set the catcode of control-J to be ‘other’, for use in messages. . . . . . . . . . . . . . . . . . 452

1994/05/03 ltfloat.dtx v1.0f

General: (CAR) Added \@largefloatcheck . . . . . . . . . . . . 343 Removed unnecessary braces from arguments of \@ifnextchar . . . . . . . . . . . . . . . . . . . . . . 343

\end@dblfloat:  \@large-

floatcheck added . . . . . . . . 350

\end@float:  (CAR)  Added

\@largefloatcheck . . . . . . 349

1994/05/03 ltfssdcl.dtx v2.1f

General: Renamed \@@Declare-

MathDelimiter to \@Declare-
MathDelimiter . . . . . . . . . . 171

1994/05/03 ltlists.dtx v1.0d

\@item: \hskip changed to \kern 265

General: Removed superfluous

braces . . . . . . . . . . . . . . . . 263 1994/05/03 ltmiscen.dtx v1.0h

\@centercr: \@badcrerr replaced

by \@nolnerr . . . . . . . . . . . 238 1994/05/03 lttab.dtx v1.0d

\@endpbox: Use \@finalstrut

based on depth of \@arstrutbox . . . . . . . . . . . . . . . . . . 304

1994/05/04 ltclass.dtx v1.0b

\NeedsTeXFormat: Changed word-

ing of the warning . . . . . . . . 442 1994/05/04 lterror.dtx v1.0m

\@badcrerr: Error message re-

moved . . . . . . . . . . . . . . . . . 57 1994/05/05 ltbibl.dtx v1.0c

\@citex: Set switch for warning and

end of run. . . . . . . . . . . . . . 365 \nocite: Do not write page number

in \nocite warning message. 366 Set switch for warning and end of run. . . . . . . . . . . . . . . . . . . 366

1994/05/05 ltfinal.dtx v0.1g General: Added empty errhelp… 452

Set error help empty. . . . . . . . 452 1994/05/05 ltfntcmd.dtx v3.3c

\@@math@egroup:  Corrected

\@fontswitch and added saved versions . . . . . . . . . . . . . . . 228

General: Corrected \@fontswitch 221 1994/05/05 ltmiscen.dtx v1.0i

General: Removed braces from

ifnextchar and ifstar arguments 233 1994/05/07 lttab.dtx v1.0c

\@maxtab: Changed \@firsttab to

\chardef . . . . . . . . . . . . . . 286

Changed \@maxtab to \chardef 286

General: Removed definition of \+ 281 Removed surplus braces from \@ifnextchar constructs … 281

1994/05/08 ltfntcmd.dtx v3.3d

General: Removed \@undefined-

fonterror . . . . . . . . . . . . . 221

\normalsize: Removed \@unde-
finedfonterror . . . . . . . . . 228

1994/05/09 ltfntcmd.dtx v3.3f

General: Replaced all \next by \@let@token and undo change 3.3e, whatever that was. … 221

1994/05/10 ltdefns.dtx v1.0n

General: (ASAJ) Added \Declare-

ProtectedCommand. . . . . . . . . 28
Added \DeclareProtectedCom-

mand . . . . . . . . . . . . . . . . . . . 37

Added \makeatletter and

\makeatother ASAJ. . . . . . . 40 Removed braces around \@ifundefined argument. ASAJ. … 33

1994/05/10 lterror.dtx v1.0n

\@latexerr: (ASAJ) Added extra

blank lines to \@latexerr. … 54 1994/05/10 ltmiscen.dtx v1.0j

\@sverb: Slight change in error

message text. . . . . . . . . . . . 241 1994/05/11 ltboxes.dtx v1.0f

\@begin@tempboxa: Use new
\color@setgroup concept. . . 271
\@iiiminipage:  Use  new
\color@setgroup concept. . . 277
\@mpfootnotetext: Use new
\color@setgroup concept. . . 278
Use new \normalcolor and

\@finalstrut. . . . . . . . . . . 278 General: Superfluous braces re-

moved from several commands 270

\color@setgroup: macro added for

colour support . . . . . . . . . . 272

\endminipage:  Use  new
\color@setgroup concept. . . 277

1994/05/11 ltclass.dtx v1.0c

\endfilecontents: Add checks for

form feed and tab . . . . . . . . 447 1994/05/11 ltdirchk.dtx v1.0e

General: Add \ProvidesFile as

used in fd files. . . . . . . . . . . . . 3 1994/05/11 lterror.dtx v1.0o

\@latexerr: (ASAJ) Removed one of the extra blank lines to \@latexerr. . . . . . . . . . . . . . . . . 54

1994/05/11 ltlogos.dtx v1.0o

\LaTeX: Use \DeclareProtected-

Command. ASAJ. . . . . . . . . . . 74

\LaTeXe: Use \DeclareProtected-

Command. ASAJ. . . . . . . . . . . 74 1994/05/11 ltoutenc.dtx 1.5a

General: Made T1 and OT1 generate packages rather than def files. Renamed the ‘package’ module to ‘teststy’. . . . . . . . . 88

1994/05/11 ltoutenc.dtx v1.5a

General: Reimplemented \De-

clareTextCommand  using
\@changed@cmd and \Declare-
ProtectedCommand. . . . . . . . . 88

Renamed the commands again. Made the encoding part of the command syntax. Added

the \DeclareTextCommand in-
terface. Used \DeclarePro-
tectedCommand. . . . . . . . . . . 85
\DeclareTextAccent:  Reimple-

mented using \Declare-TextCommand. . . . . . . . . . . . . 91

1994/05/11 ltspace.dtx v1.0o

\,: Use \DeclareRobustCommand.

ASAJ. . . . . . . . . . . . . . . . . . 72

\hspace: Use \DeclareRobustCom-

mand. ASAJ. . . . . . . . . . . . . . 72 1994/05/12 ltboxes.dtx v1.0g

\@finalstrut: macro added …. 279 \fbox: New definition, merged with

\framebox . . . . . . . . . . . . . 274

\framebox: Merged \fbox and

\framebox . . . . . . . . . . . . . 274 \normalcolor: macro added for

colour support . . . . . . . . . . 272 1994/05/12 ltdefns.dtx v1.0p

General: (ASAJ) Fixed a bug with \relax which was using \@gobble before defining it. . . . . . . 28 Fixed a bug with \relax which was using \@gobble before defining it. . . . . . . . . . . . . . . 37

1994/05/12 ltfssbas.dtx v2.1j

General: New baselinestretch concept . . . . . . . . . . . . . . . . . . 120 Replaced hand-protected com-

mands by \DeclareRobustCom-

mand defs . . . . . . . . . . . . . . 120 \f@linespread: New macro …. 128

\fontencoding: Use \DeclareRo-

bustCommand . . . . . . . . . . . . 126

\fontfamily: Use \DeclareRo-

bustCommand . . . . . . . . . . . . 128

\fontseries: Use \DeclareRo-

bustCommand . . . . . . . . . . . . 128

\fontshape: Use \DeclareRobust-

Command . . . . . . . . . . . . . . . 128 \fontsize: Redefined to use

\set@fontsize . . . . . . . . . . 128

\linespread: New macro . . . . . . 128

\mathversion: Use \DeclareRo-

bustCommand . . . . . . . . . . . . 129 1994/05/12 ltfssdcl.dtx v2.1g

General: Allow \relax’ed cmds to be declared . . . . . . . . . . . . . 171 Allow as undefined command . 171

1994/05/12 ltfssini.dtx v2.1i

General: Moved \fontencoding to fam.dtx . . . . . . . . . . . . . . . 194 Moved \fontfamily to fam.dtx 194 Moved \fontseries to fam.dtx 194 Moved \fontshape to fam.dtx 194 Moved \fontsize to fam.dtx . 194 Moved \mathversion to fam.dtx 194

Moved  \selectfont  to

tracefnt.dtx . . . . . . . . . . . . 194 1994/05/12 ltfsstrc.dtx v2.3f

\selectfont: Use \DeclareRo-

bustCommand . . . . . . . . . . . . 145 1994/05/12 ltoutenc.dtx 1.5a

General: Removed the \SaveAtCat-

code and \RestoreAtCatcode

commands. . . . . . . . . . . . . . . 97 Rewrote for the new syntax. 97, 99

1994/05/12 ltoutput.dtx v1.0p

\@writesetup: \normalcoloradded

. . . . . . . . . . . . . . . . . . . . . . 397 General: \normalcoloradded in

various places (DPC). . . . . . 371 1994/05/13 ltboxes.dtx v1.0h

\@arrayparboxrestore: New ac-

cent system, use \let not \def 276 1994/05/13 ltcounts.dtx v1.0f

General: Removed \@Ialph …. 117

Removed \@ialph . . . . . . . . . 117 1994/05/13 ltdefns.dtx v1.0q

General: (ASAJ) Renamed \De-

clareProtectedCommand  to
\DeclareRobustCommand. Re-
moved \@if@short@command. . 28

(ASAJ) Replaces \space by ‘ ’ in \csname. . . . . . . . . . . . . . . . . 28

Renamed  \DeclareProtect-
edCommand to \DeclareR-
obustCommand.  Removed
\@if@short@command. Moved

to after the definition of \@gobble. . . . . . . . . . . . . . . . . . . . 37

1994/05/13 ltdefns.dtx v1.0r

General: (ASAJ) Added logging

message to \DeclareProtect-

edCommand. . . . . . . . . . . . . . . 28 Added logging message to \De-

clareProtectedCommand. . . . . 37

1994/05/13 ltdefns.dtx v1.0s

General: (ASAJ) Added \@backslashchar. . . . . . . . . . . . . . . 28

(ASAJ) Coded \@ifdefinable

more efficiently. . . . . . . . . . . . 28 Coded more efficiently, thanks to FMi. . . . . . . . . . . . . . . . . . . 33

1994/05/13 ltfiles.dtx LaTeX2e

\listfiles: Stop \listfiles be-

ing run twice . . . . . . . . . . . . 84 1994/05/13 ltfiles.dtx v1.0g

\document: Added execution of \every@size . . . . . . . . . . . . . 78 1994/05/13 ltfinal.dtx v0.1h

General: Added package ot1enc,

and defined \@acci, \@accii

and \@acciii. . . . . . . . . . . 452 1994/05/13 ltfinal.dtx v1.0h

General: Added output enc stuff . 456 1994/05/13 ltfloat.dtx v1.0g

\@footnotetext: (DPC) Add new

style colour support: \normalcolor . . . . . . . . . . . . . . . . . 359 (DPC) Use \@finalstrut …. 359

\@xfloat: (DPC) Use \normal-

color . . . . . . . . . . . . . . . . . 348 1994/05/13 ltfntcmd.dtx v3.3g

General: Replaced \@protecteddef

by \DeclareRobustCommand . 221

1994/05/13 ltfssbas.dtx v2.1k

General: Remove File identification

‘typeout’ . . . . . . . . . . . . . . 120 1994/05/13 ltfssbas.dtx v2.1l

\DeclareFontEncoding: Init encod-

ing change command . . . . . . 124

\define@newfont: Use \@input@

for fd files . . . . . . . . . . . . . . 133 1994/05/13 ltfssdcl.dtx v2.1h

General: Removed file identification

typeout . . . . . . . . . . . . . . . 171 1994/05/13 ltfssini.dtx v2.1j

General: Removed file identification

typeout . . . . . . . . . . . . . . . 194 1994/05/13 ltfsstrc.dtx v2.3g

General: Removed typeouts as

\ProvidesPackage writes to

log. . . . . . . . . . . . . . . . . . . 141 1994/05/13 ltoutenc.dtx v1.5b

General: Added \{, \} and \$… 85

Renamed \DeclareProtected-
Command to \DeclareRobust-

Command. . . . . . . . . . . . . . . . . 85 Replaces \space by ‘ ’ in \csname. . . . . . . . . . . . . . . . . 85

1994/05/13 ltpictur.dtx v0.1d

General: Removed surplus braces

from \@if.. constructions . . 305 1994/05/13 lttab.dtx v1.0d

\@contfield: Colour support … 287 \@startfield: Colour support . . 287 \@stopfield: Colour support … 287 \a: moved to ltoutenc . . . . . . . . 286 1994/05/14 fontdef.dtx v2.1f

General: Removed .def files. . . . . 202 1994/05/14 ltfssbas.dtx v2.1m

\enc@update: Macro added …. 128 1994/05/14 ltfssbas.dtx v2.1n

General: Set defaults for all \f@... 128

\DeclareErrorFont: Don’t set

\f@encoding . . . . . . . . . . . . 134

\DeclareFontEncoding: Log if en-

coding is redeclared . . . . . . . 124 Only init enc change cmd when new encoding . . . . . . . . . . . 124

1994/05/14 ltfssini.dtx v2.1k

General: Init error font just before

checking for fontdef.cfg …. 198 \p@reset@font: Remove surplus

braces . . . . . . . . . . . . . . . . 197 1994/05/14 ltfsstrc.dtx v2.3h

\selectfont: Added \enc@update 146

1994/05/14 ltoutenc.dtx 1.5d

General: Moved the driver to the

top. . . . . . . . . . . . . . . . . . . . 88 1994/05/14 ltoutenc.dtx v1.5c

General: Added the fontenc package . . . . . . . . . . . . . . . . . . . . 97 Added the fontenc package… 85 Fixed a bug which caused an infinite loop if \f@encoding was incorrectly set. . . . . . . . . 85, 88 Moved fontsmpl to its own dtx file. . . . . . . . . . . . . . . . . . . . 85

1994/05/14 ltoutenc.dtx v1.5d

General: Rewrote \Declare-TextCommand to define its argument to use the current encoding by default, rather than the encoding provided to \De-

clareTextCommand. . . . . . 85, 88

Tidied up the documentation. . 85 1994/05/14 ltoutenc.dtx v1.5e

General: Replaced \ENC@cmd by

\ENC-cmd. . . . . . . . . . . . . . . . 85 1994/05/15 ltfssbas.dtx v2.1o

General: encoding cmds changed to

enc-cmd . . . . . . . . . . . . . . . 120 1994/05/16 ltalloc.dtx v1.1a

General: (ASAJ) Split from ltinit.dtx. . . . . . . . . . . . . . . . 43 1994/05/16 ltcntrl.dtx v1.0a

General: (ASAJ) Split from

ltinit.dtx. . . . . . . . . . . . . . . . 45 1994/05/16 ltdefns.dtx v1.1a

General: (ASAJ) Split from

ltinit.dtx. . . . . . . . . . . . . . . . 28 1994/05/16 lterror.dtx v1.1a

General: (ASAJ) Completely new error interface. . . . . . . . . . . . 49 (ASAJ) Split from ltinit.dtx. . 49

1994/05/16 ltfinal.dtx v1.0i

General: moved output enc stuff to

lfonts . . . . . . . . . . . . . . . . . 456 1994/05/16 ltfssbas.dtx v2.1p

\fontsize: Pass \baselinstretch
not \f@linespread . . . . . . . 128

\linespread: Remove surplus

braces . . . . . . . . . . . . . . . . 128 1994/05/16 ltfssini.dtx v2.1m

\@acciii: Define saved versions of

accents . . . . . . . . . . . . . . . . 199 1994/05/16 ltlogos.dtx v1.1a

General: (ASAJ) Split from

ltinit.dtx. . . . . . . . . . . . . . . . 74 1994/05/16 ltmath.dtx v1.0k

\ensuremath: Use \DeclareRo-
bustCommand and add extra

braces in math mode . . . . . . 250 1994/05/16 ltoutenc.dtx 1.5h

General: \pounds was still using u

rather than ui shape. . . . . . . . 97 1994/05/16 ltoutenc.dtx v1.5f

General: enc files now have uc encoding name parts (FMi) …. 85 Revert code so that the encoding given is used in \Declare-TextCommand (FMi) . . . . . . . . 85

1994/05/16 ltoutenc.dtx v1.5g

General: Made fontenc.sty use the new mixed-case encoding files. 85 Removed the lowercasing of the filename. . . . . . . . . . . . . . . . 97

1994/05/16 ltoutenc.dtx v1.5h

General: Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj. . . . . . 85 Added \r (ring accent) and \k (ogonek) accents. . . . . . . . . . 85 Fixed a bug with \pounds. … 85 Removed \P from the OT1 definitions file. . . . . . . . . . . . . . . 85 1994/05/16 ltoutenc.dtx v1.5i

General: Fixed a bug with \d… 85 1994/05/16 ltoutput.dtx v1.0q

\@writesetup: Changed setting of accents (FMi): with the new encoding setup they can use \let. It could also use the new internal commands? . . . . . . . . . . 398

General: Changed setting of accents

(FMi). . . . . . . . . . . . . . . . . 371 1994/05/16 ltpar.dtx v1.1a

General: (ASAJ) Split from

ltinit.dtx. . . . . . . . . . . . . . . . 59 1994/05/16 ltplain.dtx v1.0h

General: Comment out encoding specific commands . . . . . . . . 24 Remove \@acci and friends again . . . . . . . . . . . . . . . . . . 24 Remove unnecessary def for \item . . . . . . . . . . . . . . . . . . 24

\loop: Use Kabelschacht method 22 \m@th: Remove unnecssary space 23

1994/05/16 ltspace.dtx v1.1a

General: (ASAJ) Split from

ltinit.dtx. . . . . . . . . . . . . . . . 61 1994/05/17 ltclass.dtx v1.0e

\@use@ption: Execute option after

removing from list, not before 440 1994/05/17 ltdefns.dtx 1.1b

General: (ASAJ) Added the \@pro-

tect@... commands. . . . . . . 37 1994/05/17 ltdefns.dtx v1.1b

General: (ASAJ) Added definitions for protect. . . . . . . . . . . . . . . 28 (ASAJ) Removed warnings and logging to lterror.dtx. . . . . . . 28 Added the discussion of protected commands, defined the values that \protect should have. . . . . . . . . . . . . . . . . . . 37

1994/05/17 ltdefns.dtx v1.1c

General: (ASAJ) Redid definitions

for protect. . . . . . . . . . . . . . . 28 1994/05/17 lterror.dtx v1.1b

General: (ASAJ) Moved error stuff

from ltdefns.dtx. . . . . . . . . . . 49 1994/05/17 ltfssini.dtx v2.1n

\copyright: Really add extra braces . . . . . . . . . . . . . . . . 197 \nfss@text: Added braces to allow

use in subscripts . . . . . . . . . 197 1994/05/17 ltmath.dtx v1.0i

General: Replaced \let by \gdef,

for indirect definition. . . . . . 247 1994/05/17 ltoutenc.dtx v1.5j

General: Added braces to \pounds

so it works as a subscript. … 85 1994/05/18 ltdefns.dtx 1.1c

General: (ASAJ) Renamed the commands, and removed one which is no longer needed. … 37

1994/05/18 ltdefns.dtx v1.1c

General: Redid the discussion and definitions, in line with the proposed new setting of \protect in the output routine. . . . . . . 37

1994/05/18 ltfinal.dtx v0.1j

General: Corrected the lccode for d-

bar. . . . . . . . . . . . . . . . . . . 452 1994/05/18 ltlogos.dtx v1.1b

General: (ASAJ) Added the TEX logo. . . . . . . . . . . . . . . . . . . . 74 (ASAJ) Made the L^{A}TEX 2ε logo use the text font ‘2’ rather than the math font ‘2’. . . . . . . . . . 74

1994/05/18 ltoutenc.dtx v1.5k

General: Made dotted-i produce ‘i’. 85 Removed braces from \pounds and \dollar. . . . . . . . . . . . . 85

Replaced  \defaultencoding
with \encodingdefault. . . . . 85

1994/05/19 ltbibl.dtx v1.1a

General: Initial version of ltbibl.dtx, split from ltidxbib.dtx . . . . . . . . . . . . . . . . . . . . . . 364

1994/05/19 ltcounts.dtx v1.1a

General: Extracted file from ltc-

ntlen. . . . . . . . . . . . . . . . . . 115 1994/05/19 ltdefns.dtx v1.1d

General: (RmS) Added definitions

for \@namedef and \@nameuse

again. . . . . . . . . . . . . . . . . . . 28 1994/05/19 ltfinal.dtx v0.1k

General: Removed \makeat... . . 452 1994/05/19 ltidxglo.dtx v1.1a

General: Initial version of ltidxglo.dtx, split from ltidxbib.dtx 361 1994/05/19 ltlength.dtx v1.1a

General: Extract file ltlength from

ltcntlen. . . . . . . . . . . . . . . . 119 1994/05/19 ltpageno.dtx v1.1a

General: Extract file ltpageno from

ltcntlen. . . . . . . . . . . . . . . . 229 1994/05/19 ltplain.dtx v0.1k ltfinal

                                   \showoutput: used \maxdimen not

99999 . . . . . . . . . . . . . . . . . . 25

                                   \showoverfull: used \@ne not 1 . 25

1994/05/19 ltxref.dtx v1.1a

General: Extract file ltxref from ltc-

ntlen. . . . . . . . . . . . . . . . . . 230 1994/05/1g fontdef.dtx v2.1g

General: Removed \Declare-

                                       FontEncoding for ot1 and t1

and input .def files instead . . 202 1994/05/2 ltdefns.dtx v1.1f

\renewcommand: Removed surplus

\space in error . . . . . . . . . . . 33

                                   \renewenvironment: Removed sur-

plus \space in error . . . . . . . 34 1994/05/20 ltdefns.dtx v1.1e

General: Changed command

                                       name from \@checkcommand to
                                       \CheckCommand. . . . . . . . . . . 28
                                   \CheckCommand: Changed name
                                       from \@checkcommand to
                                       \CheckCommand. . . . . . . . . . . 36

1994/05/20 lterror.dtx v1.1c

General: (ASAJ) Added \@la-

                                       tex@info@no@line. . . . . . . . . 49

(ASAJ) Added missing full stops. . . . . . . . . . . . . . . . . . . 49 (ASAJ) Fixed a bug with \@inmatherr. . . . . . . . . . . . . . . . . 49

1994/05/20 ltfinal.dtx v0.1l

General: Use new font warning

commands . . . . . . . . . . . . . 453 1994/05/20 ltfloat.dtx v1.0h

                                   \@endfloatbox: Restore outer

value of @nobreak switch… 350 1994/05/20 ltfntcmd.dtx v3.3h

General: Use new error commands 221 1994/05/20 ltfssbas.dtx v2.1q

General: Use new error commands 120 1994/05/20 ltfsstrc.dtx v2.3i

General: Use new error command names . . . . . . . . . . . . . . . . 141 1994/05/20 ltmiscen.dtx v1.0l

\@writefile: Added correct setting

of \protect. . . . . . . . . . . . . 236 1994/05/20 ltmiscen.dtx v1.0m

General: Use new warning com-

mands . . . . . . . . . . . . . . . . 233 1994/05/20 ltoutput.dtx v1.0s

\@writesetup: Added setting of

\protect during \shipout. . 397

General: Added setting of \protect

during \shipout. . . . . . . . . 371 1994/05/20 ltpage.dtx v1.0d

\markright: Changed setting for

\protect. . . . . . . . . . . . . . . 369 1994/05/20 ltsect.dtx v1.0c

General: Correct setting of \pro-

tect. . . . . . . . . . . . . . . . . . 341

\addcontentsline: Correct setting

of \protect. . . . . . . . . . . . . 341 1994/05/21 ltbibl.dtx v1.1b

General: Use new warning com-

mands . . . . . . . . . . . . . . . . 364 1994/05/21 lterror.dtx v1.1d

General: (ASAJ) Made the error

commands robust. . . . . . . . . . 49 1994/05/21 ltfiles.dtx v1.0h

General: Use new error commands 75 1994/05/21 ltlists.dtx v1.0f

General: Use new error commands 253 1994/05/21 ltmiscen.dtx v1.0n

General: Use new error commands 233 1994/05/21 ltsect.dtx v1.0d

General: Use new error commands 332 1994/05/21 lttab.dtx v1.0f

General: Use new error commands 281 1994/05/21 ltxref.dtx v1.1b

General: Use new warning com-

mands . . . . . . . . . . . . . . . . 230 \newlabel: Use new warning com-

mands . . . . . . . . . . . . . . . . 231 1994/05/22 ltclass.dtx v1.0f

General: Use new warning and error

commands . . . . . . . . . . . . . 430 1994/05/22 ltdefns.dtx v1.1f

General: Use new warning and error

cmds . . . . . . . . . . . . . . . . . . 28 1994/05/22 lterror.dtx v1.1e

General: (ASAJ) Replaced bgroup by begingroup in error messages, to stop extra mathords creeping into math mode. … 49

1994/05/22 lterror.dtx v1.2a

General: (ASAJ) Made \Gener-

icError, \GenericWarning and

\GenericInfo robust. . . . . . . 49

(ASAJ) Replaced \@generic@message
and \@generic@error by
\GenericError,  \Gener-
icWarning and \GenericInfo. 49

(ASAJ) Replaced \\ and tilde by

\MessageBreak and \space. . . 49

(ASAJ) Replaces \string by \protect in some messages. . 49

1994/05/22 lterror.dtx v1.2d

\GenericError: (DPC) Alternative version added for old TeXs . . 49 (DPC) New version using long command name. . . . . . . . . . . 49

1994/05/22 ltfloat.dtx v1.0i

General: Use new warning com-

mands . . . . . . . . . . . . . . . . 343 1994/05/22 ltoutput.dtx v1.0t

General: Changed warnings and in-

fos to new commands. . . . . . 371 1994/05/22 ltpictur.dtx v0.1e

General: Use new warning cmds . 305 1994/05/23 ltclass.dtx v1.0h

\NeedsTeXFormat: Don’t stop com-

pletely when format is wrong 442 \usepackage: Remove argument if

possible . . . . . . . . . . . . . . . 441 1994/05/23 ltdirchk.dtx v1.0f

General: Document \@TeXversion 2 1994/05/23 ltfsstrc.dtx v2.3j

General: Removed def of

\f@warn@break . . . . . . . . . . 159

1994/05/23 ltoutput.dtx v1.0u

\@activechar@info: Added \Mes-

sageBreak . . . . . . . . . . . . . 396 \@writesetup: Changed resetting

of \protect after shipout to use \aftergroup . . . . . . . . . . . . 397

General: Added \MessageBreak. . 371 Changed resetting of \protect after shipout. . . . . . . . . . . . 371

1994/05/24 lterror.dtx v1.2e

\@latex@info@no@line:  Macro

added . . . . . . . . . . . . . . . . . . 53 1994/05/24 lterror.dtx v1.2f

General: (DPC) wrap long lines . 49 1994/05/24 ltfntcmd.dtx v3.3i

General: Tidying and typos fixed 221 1994/05/24 ltmiscen.dtx v1.0q

\@currenvline: Use \@empty as

outer default . . . . . . . . . . . . 237 1994/05/25 ltdirchk.dtx v1.0g

\filename@parse: Mac parser had

” typo for : . . . . . . . . . . . . . . 11 1994/05/25 ltfntcmd.dtx v3.3j

General: Insertion of \aftergroups to implement \nocorr moved to the end of the group . . . . . . 221

\check@icr: Macros added . . . . . 224

\check@nocorr@: Insertion of \af-

tergroups moved and defaults set up for efficiency . . . . . . . 224

\DeclareTextFontCommand: \ex-

pandafter inserted . . . . . . . 223 Insertion of \aftergroups moved . . . . . . . . . . . . . . . . 223

1994/05/25 ltoutput.dtx v1.0v

General: Extra documentation… 371 1994/05/25 ltsect.dtx v1.0e

\@dottedtocline: Put braces

around argument 4 (the actual toc entry) to avoid font (and possibly other) changes leaking out to the leaders. . . . . . . . . 342

1994/05/25 ltthm.dtx v1.0c

General: Modify documentation . 328 1994/05/25 ltvers.dtx v1.0d

General: Remove PRELIMINARY TEST RELEASE from startup banner (spring is here) . . . . . 26

1994/05/25 ltxref.dtx v1.1c

General: Modify documentation . 230 1994/05/26 ltfiles.dtx LaTeX2e

\@missingfileerror: Modify mes-

sage format . . . . . . . . . . . . . 83 1994/05/26 ltlogos.dtx v1.1c

General: Remove \SLiTeX logo . . 74 1994/05/26 ltplain.dtx v1.1m

\iterate: (CAR) added \long . . 22 \underbar: (CAR/FMi) changed to

use box \tw@ . . . . . . . . . . . . 23 1994/05/26 ltplain.dtx v1.1p

\underbar: (DPC) changed to use \sbox . . . . . . . . . . . . . . . . . . 23 1994/05/26/16 ltmiscen.dtx v1.0r

General: \literal removed …. 241 1994/05/29 ltfssdcl.dtx v2.1j

General: Use new error commands 171 1994/05/31 ltfinal.dtx v1.0n

General: Renamed lthyphen.* to

lthyphen.*. . . . . . . . . . . . . . 452 1994/06/01 ltboxes.dtx v1.0i

\@frameb@x: Macro added. . . . . . 274 \@iframebox: New version, so

   \width is correct in \framebox 274

\fbox: New version, using

\@frameb@x . . . . . . . . . . . . 274

\framebox: New version, so \width

is correct in \framebox …. 274 1994/06/01 ltlogos.dtx v1.1d

\LaTeX: Add \m@th to force math

size calculations . . . . . . . . . . 74 1994/06/01 ltoutput.dtx v1.0w

General: Tidied up typesetting. . 371 1994/06/08 ltfinal.dtx v1.0m

General: Add patch file system . . 456 1994/06/09 ltfinal.dtx v1.0n

General: For TEX2, do not set codes for higher half of character table. . . . . . . . . . . . . . . . . . . 455

1994/06/09 ltfntcmd.dtx v3.3k

General: Tidying and typos fixed in

documentation . . . . . . . . . . 221 1994/06/18 ltfntcmd.dtx v3.3l

General: Added check for empty

text . . . . . . . . . . . . . . . . . . 221

\check@nocorr@: Added check for

empty text . . . . . . . . . . . . . 224 1994/06/22 ltfntcmd.dtx v3.3m

General: Removed space from \nfss@text . . . . . . . . . . . . 221 Renamed \check@nocorr …. 221

\check@nocorr@:  Renamed
   \check@nocorr to \text@command

to improve \long error message 224

\DeclareTextFontCommand: Re-

moved space from \nfss@text 223 1994/06/22 ltmath.dtx v1.2t classes

\mathindent: Set \mathindent at

the end of the class instead of at begin document . . . . . . . 250

1994/07/20 ltlogos.dtx v1.1e \LaTeX: Save a few tokens . . . . . 74 \LaTeXe: Save a few tokens …. 74 1994/07/20 ltpage.dtx v1.0h

\sloppy: Save a few tokens …. 370 1994/09/16 ltfssbas.dtx v2.1s

\nfss@catcodes: Reset [ and ] as

well, just in case . . . . . . . . . 134 1994/10/07 ltoutenc.dtx v1.5l

General: Moved the ogonek accent. 85 1994/10/11 ltdirchk.dtx v1.0h

\@TeXversion: Check for TeX3.14 12 General: Modify all of ltxcheck

again . . . . . . . . . . . . . . . . . . 13 1994/10/12 ltsect.dtx v1.0f

General: Doc. typos . . . . . . . . . . 332 1994/10/14 fontdef.dtx v2.2a

General: New coding . . . . . . . . . 200 1994/10/14 ltfssini.dtx v2.2a

General: New coding for cfg files . 194 1994/10/14 ltmiscen.dtx v1.0s

General: Move math to other file 233 1994/10/14 ltplain.dtx v1.1a

General: Moved code to other files. 14 1994/10/15 ltfssbas.dtx v2.1t

\extract@alph@from@version:

Warn if math alpha is used outside math . . . . . . . . . . . . . . 138

1994/10/18 ltboxes.dtx v1.0j

\@frameb@x: \leavevmode added 274
\@iframebox: \leavevmode moved

to \@frameb@x . . . . . . . . . . 274 \@parboxto: macro added to re-

move misuse of \@empty … 275 General: stuff from ltpatch done . 270 \fbox: \long added . . . . . . . . . . 274 \mbox: \long added . . . . . . . . . . 271 \sbox: \long added . . . . . . . . . . 272

1994/10/18 ltclass.dtx v1.0j

General: Move \listfiles to lt-

files.dtx . . . . . . . . . . . . . . . 449 1994/10/18 ltdefns.dtx v1.2a

\@star@or@long: macro added . . 31 General: Add extra test for \end-

graf . . . . . . . . . . . . . . . . . . . 28 Add star-forms for all commands 28

\renew@environment: reset end

command . . . . . . . . . . . . . . . 34 1994/10/18 ltfiles.dtx v1.0i

\listfiles: code moved here from ltclass . . . . . . . . . . . . . . . . . 84 1994/10/18 ltoutenc.dtx v1.5l

General: Added new definitions of

                                          \patterns and \hyphenation. 93

1994/10/18 ltoutenc.dtx v1.5m

General: Added new definitions of

                                          \patterns and \hyphenation. 85

1994/10/18 ltsect.dtx v1.0g

                                       \@dottedtocline: Added \normal-

color for page number …. 342 General: Added \normalcolor . . 332

1994/10/19 ltfssbas.dtx v2.1t

                                       \DeclareFontEncoding: add miss-

ing \relax . . . . . . . . . . . . . 123 1994/10/23 ltfsstrc.dtx v23.k

                                       \every@math@size: Renamed to
                                          \every@math@size . . . . . . . 149

1994/10/23 ltmath.dtx v1.0l

                                       \@eqnnum: Added \normalcolor

since \eqno introduces a subgroup of the displayed math group . . . . . . . . . . . . . . . . . 248

\ensuremath: Remove extra braces:

but see p 168 of Leslie’s book 250 1994/10/24 ltboxes.dtx v1.0k

\fbox: Inner braces added (to fix la-

tex/1061) . . . . . . . . . . . . . . 274 1994/10/25 fontdef.dtx v2.2c

General: Added OMSenc.def … 202 1994/10/25 ltboxes.dtx v1.0l

\@isavepicbox: missing percent

(moved from ltpatch) . . . . . 273 1994/10/25 ltdefns.dtx v1.2b

General: Documentation improve-

ments . . . . . . . . . . . . . . . . . . 28 1994/10/25 ltoutenc.dtx 1.6a

General: Added \textdollar,

                                          \textlbrace,  \textrbrace,
                                          \textsterling, \textunder-

line. . . . . . . . . . . . . . . . . . . 99

                                         Removed \textlbrace, \textr-
                                          brace, \textunderline to give

them their proper names. … 99 1994/10/25 ltoutenc.dtx v1.6a

General:  Added  \Provide-

                                          TextCommand, \UseTextSym-
                                          bol, \UseTextAccent, \De-
                                          clareTextSymbolDefault,
                                          \DeclareTextAccentDefault,
                                          \DeclareTextCommandDefault,

and \ProvideTextCommandDe-

fault. . . . . . . . . . . . . . . . . . 85 Added the \Provide commands, and the default definitions… 88 Added the defaults. . . . . . . . . 94 Added the files OT1enc.def, T1enc.def and OMSenc.def… 94 Added the OMS encoding. … 104

1994/10/27 ltoutenc.dtx 1.6b

General: Added \textasci-

icircum     \textasciitilde
\textbackslash     \textbar
\textbraceleft   \textbrac-
eright       \textcompword-
mark   \textemdash   \tex-
tendash     \textexclamdown
\textgreater   \texthyphen-
char   \texthyphen   \text-
less\textquestiondown\tex-
tquotedblleft  \textquoted-
blright \textquotedbl \tex-
tquoteleft  \textquoteright
\textunderscore  \textvisi-

blespace . . . . . . . . . . . . . . . 99

Added: \textemdash  \tex-
tendash     \textexclamdown
\texthyphenchar    \texthy-
phen\textquestiondown\tex-
tquotedblleft  \textquoted-
blright\textquoteleft\tex-

tquoteright . . . . . . . . . . . . . 97 1994/10/27 ltoutenc.dtx v1.5d

General: Rewrote \Declare-TextSymbol to define its argument to use the current encoding by default, to fit with

\DeclareTextCommand. . . . . . 88

1994/10/27 ltoutenc.dtx v1.6b

General: Added \textbackslash. 104 Added more defaults for OT1. 94 Removed the enc.def files …. 85 Removed the files OT1enc.def, T1enc.def and OMSenc.def… 94

Renamed \textlbrace to
\textbraceleft and \textr-
brace to \textbraceright. . 104

1994/10/29 ltmath.dtx 1.0m

General: ASAJ: Added \Declare-MathOperator. . . . . . . . . . . 242 ASAJ: Tidied up documentation. . . . . . . . . . . . . . . . . . . 247

1994/10/29 ltmath.dtx v1.0m

General: ASAJ: Added \math-

                                       ellipsis, \mathdollar and
                                       \mathsterling. . . . . . . . . . 247

ASAJ: Removed \dag, \ddag. . 247 ASAJ: Renamed \S and \P to

                                       \mathsection and \mathpara-
                                       graph and made them \math-

chardefs. . . . . . . . . . . . . . . 247 1994/10/29 ltoutenc.dtx v1.6c

General: Added commands like \dots for use in text and math. 94

                                      Renamed \P, \S, \dag and \ddag
                                       to \textparagraph, \text-
                                       section, \textdagger and
                                       \textdaggerdbl. . . . . . . . . . . 85

1994/10/30 ltdefns.dtx v1.2c

                                   \@onelevel@sanitize:  Macro

added . . . . . . . . . . . . . . . . . . 41

                                   General: (CAR)\@onelevel@sanitize

added . . . . . . . . . . . . . . . . . . 28 1994/10/30 ltdefns.dtx v1.2f

General: (DPC)\newwrite’s moved

to ltfiles . . . . . . . . . . . . . . . . 28 1994/10/30 ltmath.dtx v1.0n

General: ASAJ: Moved the new

commands to ltoutenc. . . . . 247 1994/10/30 ltoutenc.dtx v1.6d

                                   General: Added \DeclareTextCom-
                                       positeCommand. . . . . . . . . . . 85

Added \textcircled. 85, 96, 104 Added \t. . . . . . . . . . . . . . . . 96 Added math commands. . . . . . 85 Added OML encoding. . . . . 85, 96 Added the OML encoding. … 104

                                      Made  \textless  and
                                       \textgreater come from

OML. . . . . . . . . . . . . . . . . . . 96 Moved math commands here from ltmath. . . . . . . . . . . . . . 97

                                      Removed \textregistered. . . 96

Rewrote \copyright to use \textcircled. . . . . . . . . . . . 96

1994/10/31 fontdef.dtx v2.2d

General: Added OMLenc.def ... . 202 1994/10/31 fontdef.dtx v2.2e

General: ... and moved further down . . . . . . . . . . . . . . . . . 202 1994/10/31 ltfloat.dtx v1.1a

\@dblfloat: Major changes since two-column and one-column cases merged . . . . . . . . . . . 347

\@dblflset: Macro added . . . . . 347 Major changes to parameter parsing, setting of local variables, etc; two-column and onecolumn cases merged; space hacks moved . . . . . . . . . . . . 347

\@endfloatbox: (DPC/CAR) Ex-

tra box added to remove colour resetting from vmode . . . . . 350

\@floatboxreset: Macro added . 348
\@footnotetext:  (DPC/CAR)

Move colour setting to output routine . . . . . . . . . . . . . . . . 359

\@savemarbox: (DPC/CAR) Extra

box added for colour . . . . . . 353 \@setfps: Macro added . . . . . . . 347 \@xdblfloat: Macros removed:

\@dbflt, \@xdblfloat . . . . . 350

\@xfloat: (DPC/CAR) Extra box added to remove colour resetting from vmode . . . . . . . . . 348 Major changes, removing setting of local variables, space hacks etc; two-column and onecolumn cases merged . . . . . . 347 Reset hook added . . . . . . . . . 348

\@xympar: (DPC/CAR) Extra box

added since needed for floats 354 \fps@dbl: Macro added . . . . . . . 347

1994/10/31 ltoutput.dtx v1.1a

\@makecol: (DPC/CAR) Colour re-

setting moved to here . . . . . 393 \@topnewpage: (DPC/CAR) Extra

box added to remove colour resetting from vmode . . . . . . . 387

(DPC/CAR) Use \color@begingroup

for colour . . . . . . . . . . . . . . 387 (DPC/CAR) Use \normalcolor 387

1994/11/02 ltoutenc.dtx v1.6d

General: Wrapped lines longer than

70 characters. . . . . . . . . . . . . 85 1994/11/03 ltclass.dtx v1.0k

General: Move \@missingfileer-

ror to ltfiles . . . . . . . . . . . . 434 1994/11/03 ltdirchk.dtx v1.0i

General: Generate an error if latex.ltx not used with clean initex . . . . . . . . . . . . . . . . . . . . . 1

1994/11/03 ltfiles.dtx v1.0j

                                   \@missingfileerror: Move here

from ltclass . . . . . . . . . . . . . . 83 1994/11/04 ltboxes.dtx v1.0m

                                   \@mpfootnotetext: Added \pro-

tected@edef. ASAJ. . . . . . . 278 1994/11/04 ltdefns.dtx v1.2e

                                   General: Added \set@display@protect

to \typeout. ASAJ. . . . . . . . 28 Added commands for setting and restoring \protect. ASAJ… 39 Rewrote protected short commands using \x@protect. ASAJ. . . . . . . . . . . . . . . . . . 38

1994/11/04 lterror.dtx v1.2g

                                   General: Added \set@display@protect

to \Generic* commands. ASAJ. . . . . . . . . . . . . . . . . . 49

1994/11/04 ltfiles.dtx v1.0k

\nofiles: Added setting of \pro-

                                       tected@write, \makeindex and
                                       \makeglossary to \nofiles.

ASAJ. . . . . . . . . . . . . . . . . . 79

                                   \protected@write: Macro added

ASAJ. . . . . . . . . . . . . . . . . . 80 1994/11/04 ltfloat.dtx v1.1b

                                   \@footnotetext: (ASAJ) Added
                                       \protected@edef. . . . . . . . . 359
                                   \footnotemark: Added \pro-
                                       tected@xdef  to  \foot-

notemark. . . . . . . . . . . . . . . 359 1994/11/04 ltidxglo.dtx v1.1b

                                   \@wrglossary: Added \pro-
                                       tected@write to \@wrglos-

sary. . . . . . . . . . . . . . . . . . 362

                                   \@wrindex:  Added  \pro-
                                       tected@write to \@wrindex. 362

General: Removed \if@filesw

from \makeindex. . . . . . . . . 362

                                   \makeglossary:  Removed
                                       \if@filesw from \makeglos-

sary. . . . . . . . . . . . . . . . . . 362 1994/11/04 ltmiscen.dtx v1.0t

\@writefile: Removed setting of \protect. ASAJ. . . . . . . . . 236 1994/11/04 ltoutenc.dtx v1.6f

General: Added \_. . . . . . . . . . . 96

Added \mathunderscore. . . . . 97

1994/11/04 ltpage.dtx v1.0e

\markright: Added \@unexpand-

able@protect. ASAJ. . . . . . 369 1994/11/04 ltsect.dtx 1.0h

\@sect: (ASAJ) Added \pro-

tected@edef. . . . . . . . . . . . 335 General: (ASAJ) Added \pro-

tected@xdef to \thanks. . . . 332

1994/11/04 ltsect.dtx v1.0h

General: Added \protected@write
to \addtocontents. ASAJ. . 341
\addcontentsline: Added \pro-
tected@write to \addcon-

tentsline. ASAJ. . . . . . . . 341 1994/11/04 lttab.dtx v1.0h

\@mkpream:  (ASAJ)  Added

\@unexpandable@protect to

\@mkpream. . . . . . . . . . . . . . 300

\multicolumn: (ASAJ) added
\set@typeset@protect. . . . 295

1994/11/04 ltxref.dtx v1.1d

\label: (ASAJ)Added \pro-

tected@write . . . . . . . . . . . 232

\refstepcounter: (ASAJ)Added
\protected@edef . . . . . . . . 232

1994/11/05 ltboxes.dtx v1.0n

\@mpfootnotetext: Colour reset-

ting for footnotes moved to endminipage: as for main page. . 278

\color@endbox: macro added for

colour support . . . . . . . . . . 272 \color@hbox: macro added for

colour support . . . . . . . . . . 272 \endminipage: Colour resetting for

footnotes moved to here: as for main page. . . . . . . . . . . . . . 277

1994/11/05 ltboxes.dtx v1.0o

\@mpfootnotetext: Colour groups

restored here. . . . . . . . . . . . 278 1994/11/05 ltfloat.dtx v1.1c

\@dblflset: Add compatibility

with old version of \@xfloat. 347

\@endfloatbox:  Use  new

\color@hbox concept. . . . . . 350

\@footnotetext: Removed \nor-

malcolor (again) . . . . . . . . 359

                                   \@savemarbox:  Use  new

\color@hbox concept. . . . . . 353 \@setfps: Add compatibility with

old version of \@xfloat. … 347 \@xfloat: Add compatibility with old version of \@xfloat: but the arguments, provided at exorbitant cost, are now completely ignored . . . . . . . . . . 347 Use new \color@hbox concept. 348

                                   \@xympar: Use new \color@hbox

concept. . . . . . . . . . . . . . . . 354 1994/11/05 ltoutenc.dtx v1.6g

General: Added setting of \@type-

                                       set@protect to \patterns and

\hyphenation. . . . . . . . . . . . 93 1994/11/05 ltoutput.dtx v1.1b

                                   \@topnewpage:  Use  new

\color@hbox concept. . . . . . 387 \@writesetup: Change protect settings for new-style, protect-free aux-files. . . . . . . . . . . . . . . 397 Use new \color@hbox concept. 397

1994/11/05 ltoutput.dtx v1.1c \@begindvi: Added macro . . . . . 399 \@begindvibox: Added macro . . 384

                                   \@writesetup: Add new \AtBe-

ginDvi concept . . . . . . . . . . 397 \AtBeginDvi: Added macro …. 384

1994/11/06 ltfssbas.dtx v2.1u \cf@encoding: New macro . . . . . 128

                                   \DeclareFixedFont:  Renamed
                                       \every@size\every@math@size

. . . . . . . . . . . . . . . . . . . . . . 122 1994/11/06 ltfssini.dtx v2.2b

                                   \@setsize:  Use  \@type-

set@protect . . . . . . . . . . . . 196 1994/11/06 ltfsstrc.dtx v2.3k

\glb@currsize: New implementa-

tion . . . . . . . . . . . . . . . . . . 148 \try@simples: New implementa-

tion . . . . . . . . . . . . . . . . . . 160

                                   \try@size@substitution: New im-

plementation . . . . . . . . . . . 159 \tryis@simple: New implementa-

tion . . . . . . . . . . . . . . . . . . 160 1994/11/07 fontdef.dtx v2.2f

General: (DPC) Add \Declare-MathSizes declarations …. 206 (DPC) Updated to use \ProvidesFile . . . . . . . . . . . . . 202

1994/11/07 ltfiles.dtx v1.0l

\@unused: move here from ltdefns,

remove duplicate \@mainaux . 77 1994/11/07 ltfiles.dtx v1.0m

\document: Renamed \every@size
to \every@math@size. . . . . . . 78

1994/11/07 preload.dtx v2.1e

General: (DPC) Updated to use

\ProvidesFile . . . . . . . . . . 217

1994/11/09 ltboxes.dtx v1.0p

\@finalstrut: Revert \finalstrut

to 2.09 equivalent (from ltpatch) . . . . . . . . . . . . . . . . 279

General: more colour changes. … 270 1994/11/09 ltfssbas.dtx v2.1v

\@vpt: (DPC) macros added, from setsize.dtx . . . . . . . . . . . . . 140 (DPC) reduce save stack usage latex/1742 . . . . . . . . . . . . . 140

1994/11/10 ltbibl.dtx v1.1c General: Fix \nocite{*} . . . . . . 364

\nocite: Fix \nocite{*} . . . . . . 366

1994/11/10 ltmath.dtx v1.2v classes

eqnarray: Added value of \parskip
to \abovedisplayskip to com-

pensate for negative \topsep 251 1994/11/10 ltoutput.dtx v1.1e

\@writesetup: Modify \protect

setting . . . . . . . . . . . . . . . . 397 1994/11/10 ltplain.dtx v1.1b

General: (CAR) added patch to

\loop. . . . . . . . . . . . . . . . . . 14 \iterate: (CAR) added extra \re-

lax . . . . . . . . . . . . . . . . . . . 22 1994/11/11 ltspace.dtx v1.2a

\\: (DPC) Make robust . . . . . . . 65 1994/11/12 ltfntcmd.dtx v3.3o

\normalsize: Added \Message-

Break . . . . . . . . . . . . . . . . . 228 1994/11/12 ltlists.dtx v1.2b ltspace

\endtrivlist: Changed order of

tests to make \@noitemerror

correct: end of an era. . . . . . 263 1994/11/12 ltmiscen.dtx v1.0u

center: Changed end macro to

\def: safer and consistent . . 238 flushleft: Changed end macro to

\def: safer and consistent . . 238 flushright: Changed end macro to

\def: safer and consistent . . 239 1994/11/12 ltplain.dtx v1.1c

General: Comment out more encod-

ing specific commands . . . . . . 24 1994/11/12 ltspace.dtx v1.2b

\addpenalty: Corrected error mes-

sage . . . . . . . . . . . . . . . . . . . 70 \addvspace: Corrected error mes-

sage . . . . . . . . . . . . . . . . . . . 70 1994/11/13 ltspace.dtx v1.2c

\addpenalty: Recorrected error

message . . . . . . . . . . . . . . . . 70 \addvspace: Recorrected error mes-

sage . . . . . . . . . . . . . . . . . . . 70 1994/11/14 ltoutput.dtx v1.1f

\@begindvi: Use normal box regis-

ter: why a box? . . . . . . . . . 399

\@begindvibox: Use normal box

register: why a box? . . . . . . 384

\@writesetup: Modify new \AtBe-

ginDvi concept . . . . . . . . . . 397 General: Removed old definition of

\@testfp. . . . . . . . . . . . . . . 371 1994/11/14 ltspace.dtx v1.2d

\\: (DPC) Macro modified . . . . . 65 1994/11/14 lttab.dtx v1.0i

\tabularnewline: (DPC) Macro

added . . . . . . . . . . . . . . . . . 294 1994/11/16 fontdef.dtx v2.2h

General: (DPC) Removed \{ and

\} . . . . . . . . . . . . . . . . . . . 202 1994/11/17 ltboxes.dtx v1.0q

General: \@tempa to \reserved@a 270

1994/11/17 ltclass.dtx v1.0l

General: \@tempa to \reserved@a 430

1994/11/17 ltcntrl.dtx v1.0b

General: \@tempa to \reserved@a 45

1994/11/17 ltdefns.dtx v1.0g

General: \@tempa to \reserved@a 28

1994/11/17 ltdirchk.dtx v1.0j

General: \@tempa to \reserved@a . 1

1994/11/17 lterror.dtx v1.2h

General: \@tempa to \reserved@a 49

1994/11/17 ltfiles.dtx v1.0n

General: \@tempa to \reserved@a 75

1994/11/17 ltfinal.dtx v1.0o

General: \@tempa to \reserved@a 452

1994/11/17 ltfloat.dtx v1.1e

General: \@tempa to \reserved@a 343

1994/11/17 ltfntcmd.dtx v3.3p

General: \@tempa to \reserved@a 221

1994/11/17 ltfssbas.dtx v2.1w

General: \@tempa to \reserved@a 120

1994/11/17 ltfssdcl.dtx v2.1m

General: \@tempa to \reserved@a 171

1994/11/17 ltfsstrc.dtx v2.3l

General: \@tempa to \reserved@a 141

1994/11/17 ltmath.dtx v1.0o

General: \@tempa to \reserved@a 242

1994/11/17 ltmiscen.dtx v1.0v

General: \@tempa to \reserved@a 233

1994/11/17 ltoutenc.dtx v1.6h

General: (DPC) \@tempa to \re-

served@a . . . . . . . . . . . . . . . 85 1994/11/17 ltoutput.dtx v1.1h

General: \@tempa to \reserved@a. 371

1994/11/17 ltpictur.dtx v1.0f

General: \@tempa to \reserved@a 305

1994/11/17 ltsect.dtx v1.0i

General: \@tempa to \reserved@a 332

1994/11/17 lttab.dtx v1.0j

General: \@tempa to \reserved@a 281

1994/11/18 ltboxes.dtx v1.0r

\color@vbox: macro added for

colour support . . . . . . . . . . 272 1994/11/18 ltfinal.dtx v1.0n

General: re-allow slots 127–255 . . 454 1994/11/18 ltfssbas.dtx v2.1x

General: (DPC) use \reserved@f

not \next . . . . . . . . . . . . . . 120 1994/11/18 ltfssdcl.dtx v2.1m

\DeclareMathDelimiter: (DPC)
   \expandafter instead of \next 187

1994/11/18 ltfsstrc.dtx v2.3m

General: \next to \reserved@f . 141

1994/11/18 ltmath.dtx v1.0p

\phantom: (DPC) colour support 244 (DPC) use \expandafter instead of \next . . . . . . . . . . . . . . . 244

\prime@s: (DPC) use \@let@token

instead of \next and \expandafter instead of \nxt . . 246

\smash: (DPC) colour support . . 245 (DPC) use \expandafter instead of \next . . . . . . . . . . . . . . . 245

1994/11/21 ltfloat.dtx v1.1f

\@endfloatbox: Added reset of

minipage flag . . . . . . . . . . . 350

Corrected  position  of

                                          \outer@nobreak . . . . . . . . . 350
                                       \@marginparreset: Macro added 354
                                       \@savemarbox: Added \@setmini-

page etc . . . . . . . . . . . . . . . 353 Added resetting of size and font 353 Changed to \color@vbox …. 353 Use \@setnobreak etc . . . . . . 353 \@setminipage: Macro added … 349 \@setnobreak: Macro added …. 349

                                       \@xfloat: Added \@setminipage 348

Added resetting of size and font 348 Changed to \color@vbox so that large floats overflow at the bottom . . . . . . . . . . . . . . . . . . 348 Missing percents reinserted after 4, 8: these are not numbers. 347 Use \@setnobreak . . . . . . . . . 348

                                       \@xympar: Changed to \color@vbox

. . . . . . . . . . . . . . . . . . . . . . 354 1994/11/21 ltoutput.dtx v1.1i

                                       \@addtocurcol: Added \if@nobreak

test before float box . . . . . . 408

                                       \@specialoutput:  Added

\if@nobreak test . . . . . . . . 391

                                       \@topnewpage:  Changed  to

\color@vbox . . . . . . . . . . . . 387 1994/11/22 ltfssdcl.dtx v2.1o

General: wrap long lines . . . . . . . 171 1994/11/22 ltoutenc.dtx v1.6i

General: Corrected \dots so that there’s no kerning in monowidth fonts. . . . . . . . . . . . . . . . . . . 85 Corrected typo with \mathunderscore. . . . . . . . . . . . . . . . 85 Fixed empty accents. Again. . 85

1994/11/24 ltdefns.dtx v1.2h

                                       \@newenv: Added test for \endgraf 35

1994/11/25 ltplain.dtx v1.1f

General: (DPC) Comment out lots

of obsolete code . . . . . . . . . . 14 1994/11/26 ltfloat.dtx v1.1b

                                       \footnote: (ASAJ) Added \pro-

tected@xdef. . . . . . . . . . . . 358 1994/11/28 ltcntrl.dtx v1.0c

General: Documentation improve-

ments . . . . . . . . . . . . . . . . . . 45 1994/11/30 ltfiles.dtx v1.0o

\@dofilelist: Macro added …. 84

                                       \listfiles: Use \@dofilelist . 84

\nofiles: There is no \@gob-

blethree. . . . . . . . . . . . . . . . 79 1994/11/30 ltfssbas.dtx v2.1y

\fontshape: Use \@current@cmd in
\@@enc@update. ASAJ. . . . . 128

1994/11/30 ltmath.dtx 1.0q

General: ASAJ: \DeclareMathOp-

erator moved to AMSL^{A}TEX. 242 1994/11/30 ltmiscen.dtx v1.0w

\enddocument: (DPC) Do warnings even for \nofiles . . . . . . . . 235 (DPC) Use \@dofilelist …. 235

1994/11/30 ltoutenc.dtx 1.7a

General: Redefined \a for the new

scheme. . . . . . . . . . . . . . . . . 94 1994/11/30 ltoutenc.dtx v1.6g

General: Removed new definitions

of \patterns and \hyphen-

ation, since encoding-specific commands now expand in the mouth. . . . . . . . . . . . . . . . . . 93

1994/11/30 ltoutenc.dtx v1.7a

General: Added new code for encoding-specific commands. These now expand in the mouth, which means that ligaturing and kerning can happen. 85 Always load the enc.def file, so that the default encoding for the commands will change… 97

Redefined \@changed@cmd to ex-

pand in the mouth. . . . . . . . . 88

Removed \@changed@x@mouth

since \@changed@x now expands in the mouth. . . . . . . . . . . . . 88

Rewrote \@text@composite so it

allows an empty argument, or an argument containing lots of commands. . . . . . . . . . . . . . . 91

1994/12/01 ltfinal.dtx v1.0p

General: Renamed lthyphen.* to

hyphen.*. . . . . . . . . . . . . . . 452 1994/12/01 lthyphen.dtx v1.0g

General: Rename lthyphen.ltx/cfg

to hyphen.ltx/cfg . . . . . . . . 450 1994/12/01 ltplain.dtx v1.1g

General: (DPC) More doc changes 14 1994/12/02 fontdef.dtx v2.2i

General: Commented out \ldots. ASAJ. . . . . . . . . . . . . . . . . 200 1994/12/02 ltfssini.dtx v2.2c

                                   \copyright: \copyright is now in

ltoutenc. ASAJ . . . . . . . . . . 197 1994/12/02 ltlists.dtx v1.0e

\@trivlist: RmS: Added check for

looping . . . . . . . . . . . . . . . . 261 1994/12/02 ltoutenc.dtx 1.7b

General: Redefined \a properly. . 94 1994/12/02 ltoutenc.dtx v1.7b

General: Fixed a bug with \a… 85 1994/12/04 lthyphen.dtx v1.0h

General: Documentation edits for

/1989 . . . . . . . . . . . . . . . . . 450 1994/12/05 ltoutenc.dtx v1.7c

General: Added braces to

\textcircled. . . . . . . . . . . . 85 1994/12/06 ltfssbas.dtx v2.1z

                                   \DeclareFontEncoding:  use
                                       \nfss@catcodes . . . . . . . . . 123

\nfss@catcodes: Added tab char as

well . . . . . . . . . . . . . . . . . . 133 1994/12/08 ltoutenc.dtx v1.7d

General: Added \null and \sh@ft

to \b and \d. . . . . . . . . . . . . 85 1994/12/08 lttab.dtx v1.0k

                                   \array: Add \tabularnewline . . 294
                                   \tabularnewline: (DPC) Made it

\relax . . . . . . . . . . . . . . . . 294 1994/12/09 ltbibl.dtx v1.1d

                                   \bibliographystyle: (DPC) Allow

use in preamble. . . . . . . . . . 366 1994/12/10 ltfloat.dtx v1.1g

\@dblfloat: Old version reinstated

temporarily . . . . . . . . . . . . 347 \@dblflset: Macro removed tem-

porarily . . . . . . . . . . . . . . . 347 Old version reinstated temporarily . . . . . . . . . . . . . . . . . . . 347

\@setfps: Macro removed tem-

porarily . . . . . . . . . . . . . . . 347 \@xdblfloat: Macros reinserted

temporarily . . . . . . . . . . . . 350 \@xfloat: Old version reinstated

temporarily . . . . . . . . . . . . 347 Sanitisation added temporarily 347

General: Some temps reinserted

temporarily . . . . . . . . . . . . 343 \fps@dbl: Macro removed tem-

porarily . . . . . . . . . . . . . . . 347 1994/12/10 ltfntcmd.dtx v3.3q

\@@math@egroup: Don’t read argu-

ments . . . . . . . . . . . . . . . . . 228

\check@nocorr@: Use \space com-

mand for comparison . . . . . . 225 1994/12/10 ltfssdcl.dtx v2.1p

\document@select@group:  Sur-

round with braces (add fourth arg) . . . . . . . . . . . . . . . . . . 175

\select@group: Surround with

braces (add fourth arg) …. 173 1994/12/10 ltoutenc.dtx v1.7e

General: Added documentation for the OML encoding. . . . . . . . . 85 Replaced width with \@width and ditto height in vrules. … 85

1994/12/14 ltoutenc.dtx v1.7f

General: Added braces to \copyright so it works unbraced in subscripts. . . . . . . . . . . . . . . 85 Added check for math mode in

\@changed@cmd. . . . . . . . . . . 85

Commented out \textasci-

icircum,  \textasciitilde,
\textbackslash,  \textbar,
\textgreater, \texthyphen-
char, \texthyphen and \text-

less to save memory. . . . . . . 85 1995/01/12 ltmath.dtx v1.2y classes

\@eqnnum: Added \normalcolor . 250

1995/03/03 ltoutenc.dtx 1.7g

General: Corrected an error in documentation referring to the tabular rather than the tabbing environment. . . . . . . . . . . . . . . 94

1995/04/02 ltfntcmd.dtx v3.3r

\@@math@egroup: Read them again

to be able to add ‘relax …. 228 1995/04/02 ltfssdcl.dtx v2.1q

\document@select@group: fix prob-

lem for pr/1275 . . . . . . . . . . 175

\select@group: fix problem for

pr/1275 . . . . . . . . . . . . . . . 173

\set@mathdelimiter: fix pr/1329 189

1995/04/02 ltfssini.dtx v2.2d

\not@math@alphabet: add ‘noex-

pand to second part of message 195 1995/04/21 ltclass.dtx v1.0m

\DeclareOption*: Made long

/1498 . . . . . . . . . . . . . . . . . 438

                                   \endfilecontents: Close input

check stream: latex/1487 … 447 1995/04/21 ltfinal.dtx v1.0q

General: Allow initial patch level 0 457 1995/04/21 ltoutenc.dtx v1.7h

General: Added \null \k la-

tex/1274 . . . . . . . . . . . . . . . . 85 1995/04/22 ltfiles.dtx v1.0p

\includeonly: Allow blanks in ar-

gument . . . . . . . . . . . . . . . . . 80 1995/04/22 ltmiscen.dtx v1.0x

General: Removed extra def of

\@gobble . . . . . . . . . . . . . . 233 1995/04/23 ltsect.dtx v1.0j

                                   \addcontentsline: Use \con-

tentsline internally. . . . . . 341 1995/04/24 ltbibl.dtx v1.1e

\@citex: Add \mbox to undefined

case: latex/1239. . . . . . . . . . 365 1995/04/24 ltbibl.dtx v1.1f

                                   \bibcite: Make \@onlypreamble

/1388. . . . . . . . . . . . . . . . . 365 1995/04/24 ltcntrl.dtx v1.0d

\@for: Dont expand second argu-

ment with \edef: /1317 (DPC) 48 1995/04/24 ltoutput.dtx v1.1j

                                   \@tracemessage: Do not add to

kernel unless ‘trace’ specified 417 1995/04/24 ltoutput.dtx v1.1l

                                   \@begindvibox: Add \vbox la-

tex/1392 . . . . . . . . . . . . . . . 384 \@writesetup: Reset \\ latex/1451

(DPC) . . . . . . . . . . . . . . . . 398 1995/04/24 ltpage.dtx v1.0f

                                   \fussy: reset \emergencystretch

latex/1344 . . . . . . . . . . . . . 370 1995/04/24 ltplain.dtx v1.1h

\newtoks: Remove remaining

\outer declarations. . . . . . . . 17 1995/04/24 ltxref.dtx v1.1e

                                   \newlabel: Make \@onlypreamble

for /1388. . . . . . . . . . . . . . . 231 1995/04/25 ltdefns.dtx v1.2i

                                   \@check@c: Make \long for la-

tex/1346 . . . . . . . . . . . . . . . . 36

                                   \new@environment: Parse argu-

ments slowly but safely /1507 34 1995/04/25 ltfiles.dtx v1.0q

\document: Removed execution of \every@size latex/1407 …. 78 1995/04/25 ltsect.dtx v1.0k

\@dottedtocline: Added \hbox

around dots. . . . . . . . . . . . . 342 1995/04/27 ltboxes.dtx v1.0s

\@frameb@x: Move \leavevmode for

graphics/1512 . . . . . . . . . . . 274

\@iframebox: Move \leavevmode

for graphics/1512 . . . . . . . . 274

\@iirsbox: Move \leavevmode for

graphics/1512 . . . . . . . . . . . 279

\@irsbox: Move \leavevmode for

graphics/1512 . . . . . . . . . . . 279

\fbox: Move \leavevmode for

graphics/1512 . . . . . . . . . . . 274

\raisebox: Move \leavevmode for

graphics/1512 . . . . . . . . . . . 278 1995/04/27 ltfiles.dtx v1.0r

\document: Added \global to sup-

port groups in hook . . . . . . . 79 1995/04/27 ltmiscen.dtx v1.0y

\enddocument: \checkend moved

after hook . . . . . . . . . . . . . 234 1995/04/27 ltplain.dtx v1.1i

General: Move \hang and \textin-

dent to latex209.def . . . . . . . 24 1995/04/29 ltcntrl.dtx v1.0e

General: Moved init of \protect to ltdefns.dtx . . . . . . . . . . . . . . 48 Removed unused defs for \@set-

   protect and \@resetprotect 48

1995/04/29 ltdefns.dtx v1.2j

\protect: Init \protect here . . . 39

1995/04/29 ltpar.dtx v1.1b

General: (TO) Comments clean-

up. . . . . . . . . . . . . . . . . . . . . 59 1995/05/02 ltsect.dtx v1.0l

\@dottedtocline: Don’t reset to

\rmfamily . . . . . . . . . . . . . 342 1995/05/03 ltsect.dtx v1.0m

General: TO: Promoted documen-

tation to doc.sty standard . . 332 1995/05/06 ltsect.dtx 1.0n

\@seccntformat: Use \quad instead

of \hskip . . . . . . . . . . . . . . 337

\@sect: Added \relax after \@sec-

cntformat just in case . . . . . 336 1995/05/07 ltboxes.dtx v1.0t

General: Use \hb@xt@ . . . . . . . . 270 1995/05/07 ltdefns.dtx v1.2k

\hb@xt@: Macro added . . . . . . . . 29 1995/05/07 ltmath.dtx v1.0r

General: Use \hb@xt@ . . . . . . . . 242 1995/05/07 ltoutput.dtx v1.1m

General: Use \hb@xt@. . . . . . . . . 371 1995/05/07 ltpictur.dtx v1.0g

General: Use \hb@xt@ . . . . . . . . 305 1995/05/07 ltplain.dtx v1.1j

General: Use \hb@xt@ . . . . . . . . 14 1995/05/07 ltsect.dtx v1.0o

General: Use \hb@xt@ . . . . . . . . 332 1995/05/07 lttab.dtx v1.0l

General: Use \hb@xt@ . . . . . . . . 281 1995/05/08 ltbibl.dtx v1.1g

                                       \@citex: Use \@firstofone . . . . 365

\bibitem: Removed unnecessary

braces . . . . . . . . . . . . . . . . 365

                                       \nocite: Use \@firstofone . . . . 366

1995/05/08 ltdefns.dtx v1.2k

                                       \typein: Use \@firstofone . . . . 30

1995/05/08 ltdefns.dtx v1.2l

\typein: Remove unnecessary braces . . . . . . . . . . . . . . . . . 30 Replace \def by \let . . . . . . . 30

1995/05/08 ltfsstrc.dtx v2.3n

                                       \ifnot@nil: Use \@firstofone . 153

1995/05/11 fontdef.dtx v2.2j

General: Updates to some plain

macros . . . . . . . . . . . . . . . . 200 1995/05/12 ltclass.dtx v1.0n

                                       \DeclareOption*: Use \toks@ to

remove need to double hash /1557 . . . . . . . . . . . . . . . . . 438

1995/05/12 ltfloat.dtx v1.1h

                                       \@footnotemark: Add \nobreak to

allow hyphenation. latex/1605 359 1995/05/12 ltpictur.dtx v1.0h

\pictur@: Macro added for la-

tex/1355 . . . . . . . . . . . . . . . 307 1995/05/12 ltvers.dtx v1.0e

General: Add autoload docstrip guards . . . . . . . . . . . . . . . . . 26 Check for format older than 1 year . . . . . . . . . . . . . . . . . . . 26

1995/05/13 ltfsstrc.dtx v2.3o

General: Use single hash mark in

                                          \DeclareOption . . . . . . . . . 143

1995/05/16 ltfloat.dtx v1.1i

                                       \@makefnmark: Now use \textsu-

perscript. . . . . . . . . . . . . . 358

\textsuperscript:  Command

added./pr1503 . . . . . . . . . . 358 \thefootnote: Streamlined parts of

code. . . . . . . . . . . . . . . . . . 358 1995/05/17 ltboxes.dtx v1.0u

\@irsbox: Removed surplus braces 279 1995/05/17 ltclass.dtx v1.0o

\g@addto@macro: Make long for la-

tex/1522 . . . . . . . . . . . . . . . 445 1995/05/17 ltlists.dtx v1.0g

\@item: Removed surplus braces . 265 \@nbitem: Removed surplus braces 266

enumerate: Use \thr@@ and remove

surplus braces . . . . . . . . . . . 267 itemize: Use \thr@@ . . . . . . . . . 268

1995/05/18 ltfloat.dtx v1.1j

\@makefnmark: Added \normal-

font. . . . . . . . . . . . . . . . . . 358

\thempfootnote: Added \itshape.

. . . . . . . . . . . . . . . . . . . . . . 358 1995/05/19 ltpictur.dtx v1.1a

General: Support autoloading fea-

ture . . . . . . . . . . . . . . . . . . 305 1995/05/20 ltcounts.dtx v1.1b

\@definecounter:  Streamlined

code . . . . . . . . . . . . . . . . . . 117 \@fnsymbol: Allowing both text

and math . . . . . . . . . . . . . . 118 \fnsymbol: Streamlined code … 117

1995/05/20 ltcounts.dtx v1.1c

\@definecounter: And do it right 117 1995/05/20 ltfloat.dtx v1.1k

\@makefnmark: Moved \normalfont
   back and use \@textsuper-

script . . . . . . . . . . . . . . . . 358

  Moved \normalfont to \textsu-

perscript . . . . . . . . . . . . . 358

\textsuperscript: Use \normal-

font. . . . . . . . . . . . . . . . . . 358 1995/05/21 ltfssdcl.dtx v2.1t

\DeclareMathRadical: Allow for

undefined cs names . . . . . . . 189 1995/05/21 ltlists.dtx v1.0f

General: Moved to doc.sty stan-

dard . . . . . . . . . . . . . . . . . . 253 1995/05/21 ltmath.dtx v1.0r

\@sqrt: Use \sqrtsign . . . . . . . 248

General: Remove \mathhexbox from this file . . . . . . . . . . . . 246 Update some plain macros … 242 \lefteqn: Use \rlap . . . . . . . . . 249

                                       \mathpalette: Use \sqrtsign in-

stead of \sqrt . . . . . . . . . . 244 1995/05/21 ltoutenc.dtx v1.7h

\@inmathwarn: Added several

                                          \@onlypreamble . . . . . . . . . . 89

1995/05/21 ltoutenc.dtx v1.7j

General: Updated some plain

macros . . . . . . . . . . . . . . . . . 98 1995/05/21 ltplain.dtx v1.1j

General: Moved some code to other

files . . . . . . . . . . . . . . . . . . . 14 1995/05/22 ltplain.dtx v1.1k

General: Definitions of \footins

                                          and \footnoterule moved to

ltfloat. . . . . . . . . . . . . . . . . . 25 1995/05/22 lttab.dtx v1.1a

General: Support autoloading fea-

ture . . . . . . . . . . . . . . . . . . 281 1995/05/23 ltfssini.dtx v2.2e

\newfont: Font assignment made

local again. . . . . . . . . . . . . . 196 1995/05/24 ltdefns.dtx v1.1l

\newif: (DPC) New implementa-

tion . . . . . . . . . . . . . . . . . . . 35 1995/05/24 ltdefns.dtx v1.2m

\typein: (DPC) New implementa-

tion . . . . . . . . . . . . . . . . . . . 30 1995/05/24 ltfloat.dtx v1.1l

                                       \@textsuperscript: Command

added. . . . . . . . . . . . . . . . . 358 General: Moved definition of

                                          \footins and \footnoterule

from ltplain. . . . . . . . . . . . . 357

                                       \textsuperscript: Use \@textsu-

perscript . . . . . . . . . . . . . 358 1995/05/24 ltfssbas.dtx v3.0a

General: (DPC) Make file from previous file, fam.dtx 1995/05/20 v2.2d . . . . . . . . . . . . . . . . . 120

\mathgroup: (DPC) No need to re-

define \newfam as not outer . 121 1995/05/24 ltfsscmp.dtx v3.0a

General: (DPC) Make file from previous file, fam.dtx 1995/05/20 v2.2d . . . . . . . . . . . . . . . . . 166

1995/05/24 ltfssdcl.dtx v3.0a

General: (DPC) Make file from previous file, latint.dtx 1995/05/21 v2.1t . . . . . . . . . . . . . . . . . 171 1995/05/24 ltfssini.dtx v3.0a

General: (DPC) Make file from previous file, lfonts.dtx 1995/05/23 v2.2e . . . . . . . . . . . . . . . . . 194

\cal: (DPC) Remove definition . 199 \mit: (DPC) Remove definition . 199

1995/05/24 ltfsstrc.dtx v3.0a

General: (DPC) Make file from previous file, tracefnt 1995/05/16 v2.3o . . . . . . . . . . . . . . . . . 141

1995/05/24 ltfsstrc.dtx v3.0b

General: (DPC) Fix \ProvidesFile

usage . . . . . . . . . . . . . . . . . 141 1995/05/25 ltclass.dtx v1.0p

\endfilecontents:  Delete

\filec@ntents after preamble 447 1995/05/25 ltfiles.dtx v1.0s

\document: Added check for \top-

skip zero . . . . . . . . . . . . . . . 79 1995/05/25 ltfiles.dtx v1.0t

\@iffileonpath: (CAR) added

\long . . . . . . . . . . . . . . . . . . 82 \document: Corrected typo . . . . . 79

\IfFileExists: (CAR) added

\long . . . . . . . . . . . . . . . . . . 82

\InputIfFileExists:  (CAR)

added \long . . . . . . . . . . . . . 82 \nofiles: (CAR) added \long . . 79

\protected@write: (CAR) added

\long . . . . . . . . . . . . . . . . . . 80 1995/05/25 ltfloat.dtx v1.1m

\@savemarbox: (CAR) Resettings

moved to hook . . . . . . . . . . 353 \@xfloat: (CAR) Resettings moved

to hook . . . . . . . . . . . . . . . 348 1995/05/25 ltlists.dtx v1.0i

\endtrivlist: Macros moved from

ltspace.dtx . . . . . . . . . . . . . 263 1995/05/25 ltmath.dtx v1.3c classes

\@eqnnum: replace \reset@font\rmfamily

with \normalfont (PR 1578) 250 1995/05/25 ltspace.dtx v1.2f

\@vbsphack: (CAR) not used so ‘re-

moved’. . . . . . . . . . . . . . . . . 68

\@vspacer: (CAR) \@restorepar

added to avoid possible infinite tail recursion caused by a typo in the argument. . . . . . . . . . . 70 (CAR) macros modified to be more efficient . . . . . . . . . . . . 70 General: Macros moved to

ltlists.dtx . . . . . . . . . . . . . . . 61 1995/05/26 ltdefns.dtx v1.2n

\@gobblefour: (CAR) Added

\longs . . . . . . . . . . . . . . . . . 36 1995/05/26 ltmath.dtx v1.0s

\@eqnnum: Removed \rmfamily

(PR 1578), replaced \re-

set@font with \normalfont 248

1995/05/26 ltpage.dtx v1.0g

\ps@plain: removed \rmfamily

(PR 1578) . . . . . . . . . . . . . 369 1995/05/27 ltfssbas.dtx v3.0b

\mathgroup: (FMi) But a need to

define \new@mathgroup . . . . 121

1995/06/05 fontdef.dtx v2.2k

General: Moved math commands

from ltoutenc.dtx. . . . . . . . . 216 1995/06/05 ltfinal.dtx v1.0r

General: Added \MakeUppercase
and \MakeLowercase. . . . . . 452

1995/06/05 ltoutenc.dtx v1.7k

\@inmathwarn: Removed \pro-

tected@cmd and replaced with explicit \noexpand. . . . . . . . . 89

General: Allowed \Provide-

TextCommandDefault after the

preamble. . . . . . . . . . . . . . . . 90 Commented out \textless and \textgreater. . . . . . . . . . . . 96 Moved math commands to fontdef.dtx. . . . . . . . . . . . . . . . . 97 Save some tokens in \textvis-

iblespace and \textunder-

score. . . . . . . . . . . . . . . . . . 96 1995/06/06 ltfinal.dtx v1.0s

General: Made \MakeUppercase
and \MakeLowercase brace

their argument. . . . . . . . . . . 452 1995/06/09 ltoutenc.dtx v1.7l

\DeclareTextComposite: Rewrote
\DeclareTextComposite to de-

fine the composite as a noargument command rather than a two-argument command… 91

1995/06/11 ltspace.dtx v1.2g

\restorecr: (CAR) \relax added

to stop silent eating of *. . . . . 73 1995/06/13 ltfinal.dtx v1.0t

General: Add patch level string more carefully . . . . . . . . . . . 457

Call \errorstopmode . . . . . . . 458

1995/06/13 ltpictur.dtx v1.1b

General: Use \ProvidesFile in au-

toload . . . . . . . . . . . . . . . . 305 1995/06/14 lttab.dtx v1.1b

General: Use \ProvidesFile in au-

toload . . . . . . . . . . . . . . . . 281 1995/06/15 ltfssbas.dtx v3.0c

General: (DPC) minor documenta-

tion changes . . . . . . . . . . . . 120 1995/06/15 ltfsscmp.dtx v3.0b

General: (DPC) minor documenta-

tion edits . . . . . . . . . . . . . . 166 1995/06/15 ltfssdcl.dtx v3.0b

General: (DPC) minor documenta-

tion changes . . . . . . . . . . . . 171 1995/06/19 ltbibl.dtx v1.1h

\bibcite: Call \@newl@bel so re-

peated keys produce better warning. . . . . . . . . . . . . . . . 365

1995/06/19 ltclass.dtx v1.0q

\documentclass: Dont redefine

\usepackage in compat mode for /1634 . . . . . . . . . . . . . . 440

1995/06/19 ltxref.dtx v1.1e

\newlabel: Use \@newl@bel to

share code with \bibcite . . 231 1995/06/28 ltfssini.dtx v3.0b

General: (DPC) Fix documentation

typos . . . . . . . . . . . . . . . . . 194 1995/06/28 ltmath.dtx v1.0t

General: minor doc edits . . . . . . 242 1995/07/02 ltplain.dtx v1.1n

General: Removed surplus ‘by’ and

‘=’ in various places . . . . . . . 14

\offinterlineskip: Replaced 1000

by \@m . . . . . . . . . . . . . . . . . 23

\showoutput: Use \showoverfull

to save space . . . . . . . . . . . . 25

\tracingall: Use \showoutput to

save space . . . . . . . . . . . . . . 25 1995/07/03 ltdefns.dtx v1.2o

\set@typeset@protect:  Use
\@typeset@protect for init . . 39

1995/07/03 ltfntcmd.dtx v3.3s

\t@st@ic: Use clean interface for jump . . . . . . . . . . . . . . . . . 226 1995/07/05 ltfntcmd.dtx v3.3s

\t@st@ic: Renamed from

\test@next . . . . . . . . . . . . 226 1995/07/05 ltspace.dtx v1.2h

\@gnewline: Use \break . . . . . . 66
\@no@pgbk: Macro replaces \@pgbk

and \@nopgbk . . . . . . . . . . . . 64 \nopagebreak: Reimplemented

both using \@no@pgbk . . . . . . 64 1995/07/09 ltcntrl.dtx v1.0f

\@iforloop: Reimplemented using

Kabelschacht method . . . . . . 48 \@iwhiledim: Reimplemented using

Kabelschacht method . . . . . . 46 \@iwhilenum: Reimplemented using

Kabelschacht method . . . . . . 46 \@iwhilesw: Reimplemented using

Kabelschacht method . . . . . . 46 \@tfor: Reimplemented using Ka-

belschacht method . . . . . . . . 48 1995/07/09 ltlists.dtx v1.0j

enumerate: Use \expandafter . . 267
itemize: Use \expandafter . . . . 268

1995/07/12 ltpictur.dtx v1.1d

General: allow 2e commands in 209

mode. latex/1737 . . . . . . . . 305 1995/07/13 ltdefns.dtx v1.0p

General: Updates to documenta-

tion . . . . . . . . . . . . . . . . . . . 28 1995/07/13 ltfiles.dtx v1.0u

General: Updates to docu . . . . . 75 1995/07/13 ltfssbas.dtx v3.0d

\@@defaultsubs: macro added . . 136 \@defaultsubs: macro added … 136 General: minor documentation

changes . . . . . . . . . . . . . . . 120

\wrong@fontshape: Change a

macro not a switch to flag default font substitutions …. 135

1995/07/13 ltmiscen.dtx v1.0z

\@centercr: Use \nobreak . . . . . 238

\@writefile: Added missing percent and use \relax in the THEN case . . . . . . . . . . . . . 236

\@xobeysp: Use \nobreak . . . . . . 239

General: Improve Documentation 233

\enddocument: Set \@setckpt to

\@gobbletwo instead of defining it by hand . . . . . . . . . . . . . 234 Sorten redefinition of \bibcite and \newlabel . . . . . . . . . . 235

Use \defaultsubs instead of

switch . . . . . . . . . . . . . . . . 235 1995/07/14 ltbibl.dtx v1.1i

\bibcite: Remove \@onlypreamble

so still defined in new \enddocument . . . . . . . . . . . . . . . . . 365

1995/07/14 ltxref.dtx v1.1g

\newlabel: Remove \@onlypream-

ble so still defined in new \enddocument . . . . . . . . . . . . . . 231

1995/07/19 ltfssini.dtx v3.0d

General: (DPC) TeX2 support . . 198 1995/07/20 ltboxes.dtx v1.0v

\@isavebox: Use \sbox . . . . . . . 273
\@isavepicbox: Use \sbox . . . . . 273

1995/07/21 ltoutput.dtx v1.1o

\@writesetup: Command added . 397 New, experimental, versions: need in-lining . . . . . . . . . . . 397

1995/08/09 ltmath.dtx v1.0u

General: Added code for class op-

tions leqno and fleqn . . . . . . 250 1995/08/11 ltlength.dtx v1.1b

General: Doc typos fixed for la-

tex/753 . . . . . . . . . . . . . . . 119 1995/08/16 ltcntrl.dtx v1.0g

\@break@tfor: Made long . . . . . 48 \@forloop: Made defs long . . . . . 48 \@fornoop: Made defs long . . . . . 48 \@iforloop: Made defs long …. 48 \@iwhiledim: Made defs long … 46

Removed \@whilenoop . . . . . . 46 \@iwhilenum: Made defs long … 46

Removed \@whilenoop . . . . . . 46

\@iwhilesw: Removed \@whileswnoop

. . . . . . . . . . . . . . . . . . . . . . . 46 \@tfor: Made defs long . . . . . . . 48

1995/08/16 ltfiles.dtx v1.0v

\document: set \@maxdepth . . . . 79

set \do globally . . . . . . . . . . . 79 set \topskip globally . . . . . . . 79

1995/08/24 ltfssbas.dtx v3.0f

General: Added autoload code . . 120 1995/08/24 ltfsstrc.dtx v3.0c

General: Macro \gobble@font@spec

removed . . . . . . . . . . . . . . . 154 \tryis@simple: . . . . . . . . . . . . . 161 1995/08/25 ltoutput.dtx v1.1p

General: Support autoloading fea-

ture (FMi). . . . . . . . . . . . . . 371 1995/09/01 lterror.dtx v1.2i

General: Add autoload support . 49 1995/09/01 ltplain.dtx v1.1m

\empty: Use \let to save space . 22 \I: Use \let to save space . . . . . 21

1995/09/14 ltplain.dtx v1.1o

General: Moved \multispan to lt-

tab.dtx . . . . . . . . . . . . . . . . . 14 1995/09/14 lttab.dtx v1.1c

\cline: (DPC) New implementa-

tion . . . . . . . . . . . . . . . . . . 303 1995/09/15 ltfssini.dtx v3.0e

General: (DPC) Modify TeX2 mes-

sage . . . . . . . . . . . . . . . . . . 198 1995/09/19 ltmiscen.dtx v1.1a

\verb: Put \@noligs after \verba-

tim@font where it belongs. . 241 1995/10/01 ltfiles.dtx LaTeX2e

\@addtofilelist: Macro added . 84

1995/10/02 ltdefns.dtx v1.2q \@autoload: Macro added . . . . . 41

\@if: Add \aut@global in autoload

version . . . . . . . . . . . . . . . . . 35

\@ifnch: Use \@let@token for in-

ternal/924, save \reserved@e 40

\@ifnextchar: Use \@let@token 40
\@newenv: Add \aut@global in au-

toload version . . . . . . . . . . . . 35

\@protected@testopt:  Macro

added . . . . . . . . . . . . . . . . . . 32 \@testopt: Macro added . . . . . . 32

\@xargdef: Add \aut@global in

autoload version . . . . . . . . . . 32 New implementation, using \@test@opt . . . . . . . . . . . . . 32

\@yargdef: Add \aut@global in

autoload version . . . . . . . . . . 33 \aut@global: Macro added …. 41

\newif: Add \aut@global in au-

toload version . . . . . . . . . . . . 35

\renew@environment:  Add

\aut@global in autoload version . . . . . . . . . . . . . . . . . . . 34

1995/10/02 ltplain.dtx v1.1p General: Move \newif to ltdefns . 18 1995/10/03 fontdef.dtx v2.2l

General: \@@sqrt from patch file for

/1701 . . . . . . . . . . . . . . . . . 200 1995/10/03 ltdefns.dtx v1.2r

\typein: Add missing \@typein for

/1710 (from patch file) . . . . . 30 1995/10/03 ltpictur.dtx v1.1e

General: New autoload code …. 305 1995/10/04 ltfssbas.dtx v3.0g

General: Modify autoload code . . 120 1995/10/04 ltfsstrc.dtx v3.0d

General: (DPC) Modify autoload

code . . . . . . . . . . . . . . . . . . 141 1995/10/04 lttab.dtx v1.1d

General: Modify autoload support 281 1995/10/06 ltdefns.dtx v1.2s

\declare@robustcommand:  Add

\aut@global in autoload version . . . . . . . . . . . . . . . . . . . 38

1995/10/06 ltfiles.dtx v1.0w

\@missingfileerror: Autoload er-

ror . . . . . . . . . . . . . . . . . . . . 83 1995/10/09 ltdefns.dtx v1.2t

\@autoload: Use \@@input not

\input to save string space and stops autoload files appearing in \listfiles . . . . . . . . . . . . . 41

1995/10/09 lterror.dtx v1.2j

General: Modify autoload support 49 1995/10/09 ltoutenc.dtx v1.7m

\@inmathwarn: Autoload error . . 90 1995/10/10 ltfssbas.dtx v3.0h

\showhyphens: Use \normalfont

and make colour safe, and autoloadable . . . . . . . . . . . . . 139

1995/10/10 ltfssdcl.dtx v3.0c

\non@alpherr: (DPC) autoload er-

ror message . . . . . . . . . . . . 174 1995/10/10 ltplain.dtx v1.1r

General: Autoload tracing code . 14 1995/10/10 ltthm.dtx v1.0f

General: Make \newtheorem ‘only

preamble’ . . . . . . . . . . . . . . 328 1995/10/11 ltoutput.dtx v1.1r

\clearpage: Added a check so that it does not lose the argument of

\twocolumn[...] . . . . . . . . 385

1995/10/16 ltbibl.dtx v1.1j \cite: (DPC) Make robust …. 365 1995/10/16 ltboxes.dtx v1.0w

General: Clarify makebox descrip-

tion . . . . . . . . . . . . . . . . . . 270 1995/10/16 ltdefns.dtx v1.2u

\@ifstar: (DPC) New implementa-

tion, for /1910 . . . . . . . . . . . 41

\new@command:  (DPC)  Use

\@testopt /1911 . . . . . . . . . . 31

\new@environment: (DPC) Use

\@testopt /1911 . . . . . . . . . . 34

\typein: (DPC) Use \@testopt

/1911 . . . . . . . . . . . . . . . . . . 30 1995/10/16 ltfssini.dtx v3.0f

\p@reset@font: Added \relax af-

ter \usefont, as the latter eats up spaces. . . . . . . . . . . . . . . 197

1995/10/16 ltmath.dtx v1.0y

\@yeqncr: (DPC) Use \@testopt

/1911 . . . . . . . . . . . . . . . . . 249 \sqrt: (DPC) Make robust /1808 248

1995/10/16 ltspace.dtx v1.2j

\nolinebreak:  (DPC)  Use

\@testopt /1911 . . . . . . . . . . 64

\nopagebreak:  (DPC)  Use

\@testopt /1911 . . . . . . . . . . 64 1995/10/16 ltthm.dtx v1.0g

General: Revert to previous

\newtheorem behaviour …. 328 1995/10/17 ltclass.dtx v1.0r

\@providesfile: Delay definition

of \ProvidesFile till ltfinal 437

\ProcessOptions*: Reset \Curren-

tOption for graphics/1873 . . 440 1995/10/17 ltdirchk.dtx v1.0l

General: Modify initex version of

   \ProvidesFile . . . . . . . . . . . . 3

1995/10/17 ltfinal.dtx v1.0v \@providesfile: reset macro … 458 \reserved@b: reset here after the

\input above . . . . . . . . . . . 457 1995/10/17 ltplain.dtx v1.1s

\eject: Move \supereject to com-

pat file . . . . . . . . . . . . . . . . . 23 1995/10/17 lttab.dtx v1.1e

\@cline: (DPC) Use \@multicnt 303

\@multispan: (DPC) Macro added.

. . . . . . . . . . . . . . . . . . . . . . 303 1995/10/19 ltfinal.dtx v1.0w

\@filelist: Move after \re-

served@a setting:-) . . . . . . . 458 1995/10/20 ltbibl.dtx v1.1k

\@citex: Removed refundefined

flag . . . . . . . . . . . . . . . . . . 365 \nocite: Removed refundefined

flag . . . . . . . . . . . . . . . . . . 366 1995/10/20 ltclass.dtx v1.0s

\@begindocumenthook: Make set-

ting conditional, for autoload version . . . . . . . . . . . . . . . . 445

1995/10/20 ltfssbas.dtx v3.0i

General: (DPC) Modify autoload

code, change \undefined … 120 1995/10/20 ltfsstrc.dtx v3.0e

General: (DPC) Modify autoload

code . . . . . . . . . . . . . . . . . . 141 1995/10/22 ltfssbas.dtx v3.0j

General: (RmS) New size function macro \genb@sfcnt needs to be disabled at \document. . . . . 120

1995/10/22 ltfsstrc.dtx v3.0f

General: Added ‘genb’ and ‘sgenb’ size functions to support new DC font naming scheme. … 141

1995/10/23 lttab.dtx v1.1f

\@settab: (CAR)Ensure that \@hightab increases by at most one . . . . . . . . . . . . . . . . . . 288

\@startline: (CAR)Ensure that \@nxttabmar is never larger than \@hightab . . . . . . . . . 286

\poptabs: (CAR)Ensure that \@curtab is never larger than \@hightab . . . . . . . . . . . . . 289

\tabbing: (CAR)Make \@hightab

consistently a local variable . 288 1995/10/24 ltdefns.dtx v1.2v

\@autoload: ignore end-of-line . . 41 1995/10/24 lterror.dtx v1.2k

\@preamerr: Modify autoload sup-

port . . . . . . . . . . . . . . . . . . . 57 1995/10/24 ltfiles.dtx v1.1a

\document: Removed multiplelabels switch . . . . . . . . . . . . . . . . . 78 Removed refundefined switch . 78

1995/10/24 ltfssbas.dtx v3.0k \@@defaultsubs: macro removed 136

\wrong@fontshape: Make this code

inline since it happens only here . . . . . . . . . . . . . . . . . . 135 1995/10/24 ltmiscen.dtx v1.1b

\enddocument: Changed logic for producing warning messages and removed switch . . . . . . 235

                                      Use \refundefined instead of

switch . . . . . . . . . . . . . . . . 235 1995/10/24 ltxref.dtx v1.1h

                                   \@multiplelabels: Switch for mul-

tiplelabels removed . . . . . . . 232 \@newl@bel: Switch for multiplela-

bels replaced by inline code . 231 \@refundefined: Switch for refun-

defined replaced . . . . . . . . . 231 \@setref: Switch for refundefined

renamed . . . . . . . . . . . . . . . 231

                                   \if@multiplelabels: Macro re-

moved . . . . . . . . . . . . . . . . 232 1995/10/25 ltalloc.dtx v1.1b

General: General doc improve-

ments . . . . . . . . . . . . . . . . . . 43 1995/10/25 ltfloat.dtx v1.1n

                                   \@endfloatbox: (CAR) macro

added: to unify code for double and single versions . . . . . . . 350

\end@dblfloat: (CAR) unify code

for double and single versions 350 \end@float: (CAR) unify code for

double and single versions . . 349 1995/10/25 ltidxglo.dtx v1.1d

General: Doc cleanup . . . . . . . . . 361 1995/10/25 ltsect.dtx v1.0q

                                   \subparagraphmark: Use \let not

\def to save space. . . . . . . . 339 1995/10/26 ltfssbas.dtx v3.0l

                                   \define@newfont: (DPC) disable

autofss2 for now . . . . . . . . . 132 1995/10/27 ltpictur.dtx v1.1f

General: Move initialisation to ker-

nel from autoload file . . . . . 325 1995/10/31 ltboxes.dtx v1.0x

                                   \@finalstrut: Add \nobreak in

horiz mode to allow hyphenation. internal/1931 . . . . . . 279

1995/11/01 fontdef.dtx v2.2m

                                   General: add \nfss@catcodes for

internal/1932 . . . . . . . . . . . 203 1995/11/01 ltdirchk.dtx v1.0n

General:  Initialise  \@ad-

                                       dtofilelist to \@gobble . . . . 3

1995/11/01 ltfinal.dtx v1.0x

General: (DPC) Switch meaning of

\@addtofilelist for cfg files 453

1995/11/01 ltfssbas.dtx v3.0m

\DeclareFontShape: (DPC) Test
for \relax not \undefined, in-

ternal/1933 . . . . . . . . . . . . . 121 1995/11/01 ltfssini.dtx v3.0g

General: (DPC) Switch meaning of

\@addtofilelist for cfg files 198

1995/11/02 ltfssbas.dtx v3.0n

\wrong@fontshape: (DPC) Remove

extra space with \string for latex/1676 . . . . . . . . . . . . . . . 135

1995/11/02 ltoutenc.dtx v1.7n

General: Changed internal name \a

to \@tabacckludge to protect

against redefinition by malicicous users. . . . . . . . . . . . . . . 94

1995/11/07 ltlists.dtx v1.0k

\@doendpe: Enclosed \setbox0 as-

signment by a group so that it leaves the contents of box 0 intact. . . . . . . . . . . . . . . . . . . 263

1995/11/07 ltoutenc.dtx v1.7o

General: Added \leavevmode at start of \c, otherwise the output routine might be invoked within the macro. . . . . . . . . . 98

Changed \char32 to \@xxxii

(two tokens less). . . . . . . . . . 98 Replaced octal number 27 by decimal number 23 to protect against the quote character being active. . . . . . . . . . . . . . . 98 Replaced some 0’s by \z@ (faster). . . . . . . . . . . . . . . . . 98

1995/11/10 ltoutput.dtx v1.1s

\@shipoutsetup: Command re-

moved . . . . . . . . . . . . . . . . 397 \@writesetup: Command removed 397

In-lined . . . . . . . . . . . . . . . . . 397 1995/11/14 ltclass.dtx v1.0t

\@@unprocessedoptions: Allow

empty option . . . . . . . . . . . 446

\@loadwithoptions: macro added 441
\LoadClassWithOptions: macro

added . . . . . . . . . . . . . . . . . 441

\RequirePackageWithOptions:

macro added . . . . . . . . . . . . 441 1995/11/17 ltfssbas.dtx v3.0m

                                   \@wrong@font@char: (DPC) Macro

added. latex/1676 . . . . . . . . 136

                                   \define@newfont: Redefine \type-

out latex/1676 . . . . . . . . . . 131

                                   \wrong@fontshape:  Support
                                       \@wrong@font@char latex/1676

. . . . . . . . . . . . . . . . . . . . . . 135 1995/11/17 ltoutenc.dtx v1.7p

                                   \UseTextSymbol:  Support
                                       \@wrong@font@char latex/1676 93

1995/11/18 ltoutenc.dtx v1.7q

                                   \UseTextSymbol: Modify message

slightly . . . . . . . . . . . . . . . . . 93 1995/11/21 fontdef.dtx v2.2n

General: Incorporate changed fig-

ures, as in plain.tex . . . . . . . 214 1995/11/27 ltfssbas.dtx v3.0n

                                   \nfss@catcodes: Reset hash, for

definitions in fd files . . . . . . 133 1995/11/28 lterror.dtx v1.2l

\ClassInfo: Typo in autoload code

/1985 . . . . . . . . . . . . . . . . . . 52 1995/11/28 ltfloat.dtx v1.1n

General: documentation fixes … 343 1995/11/28 ltfsstrc.dtx v3.0g

General: documentation fixes … 141 1995/11/28 ltoutenc.dtx v1.7r

General: Added math mode checks to text commands. . . . . . . . . 88 doc fixes . . . . . . . . . . . . . . . . 85

                                      Renamed \@changed@x@err to
                                       \TextSymbolUnavailable. . . . 88

1995/11/29 ltoutenc.dtx v1.7t

General: Added \textasci-

                                       icircum,  \textasciitilde,
                                       \textbackslash,  \textbar,
                                       \textgreater and \textless. 100
                                      Added  \textasciicircum,
                                       \textasciitilde, \textreg-
                                       istered and \texttrademark. 96
                                      Added \textbackslash and

\textbar. . . . . . . . . . . . 95, 104

                                      Added  \textless  and

\textgreater. . . . . . . . 96, 104 1995/12/01 ltoutenc.dtx v1.7u

General: Made \SS a Default, rather than having the default point to the OT1 definition. . 96 1995/12/04 ltspace.dtx v1.2k

\nobreakspace: (Macro added . . 71 1995/12/04 ltspace.dtx v1.2l

\@xobeysp: (braces added to defini-

tion of tilde . . . . . . . . . . . . . 72 1995/12/04 preload.dtx v2.4e

General: Ulrik Vieth. added 12pt

OMS and OML preloads /1989 219 1995/12/05 ltdefns.dtx 1.2w

\@unexpandable@noexpand: Re-

moved as never used. internal/1733 . . . . . . . . . . . . . . . . 37

1995/12/05 ltfiles.dtx v1.1c

\document: \ignorespaces added

for latex/1933 . . . . . . . . . . . . 79 1995/12/05 ltfloat.dtx v1.1n

\@textsuperscript: Use \ensure-

math for latex/1984. . . . . . . 358 1995/12/05 ltoutenc.dtx v1.7v

\@inmathwarn: Changed \TextSym-
   bolUnavailable text . . . . . . . 90

1995/12/06 ltfssbas.dtx v3.00

\nfss@catcodes: Reset hat, for

typeouts etc in fd files . . . . . 133 1995/12/07 ltbibl.dtx v1.1l

\@citex: Restored name of

   \G@refundefinedtrue . . . . . 365

1995/12/07 ltfloat.dtx v1.1m

\@textsuperscript: Move \m@th

out of the \ensuremath for latex/1984. . . . . . . . . . . . . . . 358

1995/12/07 ltxref.dtx v1.1i

\@setref: Switch for refundefined

restored . . . . . . . . . . . . . . . 231

\G@refundefinedtrue: Renamed
   (back) from \G@refundefined 231

1995/12/11 ltoutenc.dtx v1.7w

General: Modified \copyright . . 96 1995/12/13 ltdefns.dtx 1.2x

\-: Documentation changed. … 28 1996/01/10 ltfiles.dtx v1.1d

\@iffileonpath: Change argument handling to not require doubled hash. latex/2024 . . . . . . . . . . 82

1996/01/20 ltidxglo.dtx v1.1e

\makeglossary: Make no-op after

use pr/2048 . . . . . . . . . . . . 362 \makeindex: Make no-op after use

pr/2048 . . . . . . . . . . . . . . . 362 1996/01/20 ltspace.dtx v1.2m

\vspace: Made robust . . . . . . . . 70 1996/03/25 ltmath.dtx v1.1a

\@ensuredmath: Macro added for

amslatex/2104 . . . . . . . . . . 250 \ensuremath: Reimplement for am-

slatex/2104 . . . . . . . . . . . . . 250 1996/04/18 ltpage.dtx v1.0i

General: Improve documentation 368 1996/04/22 ltmiscen.dtx v1.1c

General: Improve Documentation 233 1996/04/22 ltspace.dtx v1.2n

General: Documentation Improve-

ments . . . . . . . . . . . . . . . . . . 61 1996/04/22 lttab.dtx v1.1g

                                       \@tabclassz: (DPC) Extra \hskip

keeps tabcolsep in empty columns internal/2122 . . . . . 301

1996/04/23 ltcounts.dtx v1.1d

General: Documentation improve-

ments . . . . . . . . . . . . . . . . . 115 1996/04/24 ltfiles.dtx v1.1e

                                       \document: (DPC) Reset \AtBe-

ginDocument eg for latex/1297 78 1996/05/08 ltfsstrc.dtx v3.0h

                                       \math@egroup: Use \bgroup instead

of \begingroup to match a kernel change made in 1994!! . . 152

1996/05/09 ltfntcmd.dtx v3.3t

\check@icr: Default definitions

added . . . . . . . . . . . . . . . . . 224 1996/05/17 fontdef.dtx v2.2o

General: \@@sqrt removed, at last

. . . . . . . . . . . . . . . . . . . 200, 214 1996/05/17 ltfiles.dtx v1.1f

                                       \nofiles: added \write to \pro-

tected@write for latex/2146 . 79 1996/05/18 ltoutenc.dtx v1.7x

General: Produce error if encoding

not found. pr/2054 . . . . . . . . 97 1996/05/21 ltoutenc.dtx v1.7y

General: Corrected error message

(CAR) . . . . . . . . . . . . . . . . . 97 1996/05/21 ltsect.dtx v1.0s

\@sect: (DPC) Added extra braces for internal/2148 . . . . . . . . . 336 (DPC) Moved brace to allow

                                          commands like \MakeUppercase

in 6th argument. Changed \par to \endgraf to allow non-long commands. internal/2148 . . 336

\@ssect: (DPC) Added extra braces for internal/2148 …. 338 (DPC) Moved brace to allow

commands like \MakeUppercase

in 4th argument. Changed \par to \endgraf to allow non-long commands. internal/2148 . . 338

1996/05/23 ltoutenc.dtx v1.7z

\@strip@args:  \expandafter

added to match other changes for latex/2133 . . . . . . . . . . . . 92

\@use@text@encoding: \select-

font removed (fossil code) latex/2133 . . . . . . . . . . . . . . . . 93

\add@accent: macro added. la-

tex/2133 . . . . . . . . . . . . . . . . 91

\DeclareTextAccent:  Reimple-

mented using \add@accent to save space latex/2133 . . . . . . 91

\DeclareTextCompositeCommand:

Modified to cope with new

\add@accent command: re-

quired removal of check for one argument-command . . . . . . . 91

1996/05/24 ltoutput.dtx v1.1t

\@specialoutput: Check that
\@colroom is less than \vsize,

indicating that a float has been added . . . . . . . . . . . . . . . . . 389 Cut-off point changed to 1.5\baselineskip . . . . . . . . 389

\@topnewpage: Cut-off point

changed to 2.5\baselineskip 388 1996/05/25 ltoutput.dtx v1.1u

\@specialoutput: Correct the

above check . . . . . . . . . . . . 389 1996/06/03 ltmiscen.dtx v1.1d

\@verbatim: Exchanged the following two code lines so that \dospecials cannot reset the category code of characters handled by \@noligs. . . . . . . . . 240

General: Move setting of verbatim

font and \@noligs. . . . . . . . 233 \verb: Put setting of verbatim

font after \dospecials so that \dospecials cannot reset the category code of characters handled by \@noligs. . . . . . . . . 241

1996/06/10 ltboxes.dtx v1.0y

                                   \@parboxto: (DPC) Changed \end-

graf to \@@par . . . . . . . . . . 275 1996/06/10 ltsect.dtx v1.0t

                                   \@sect: (DPC) Changed \endgraf

to \@@par . . . . . . . . . . . . . . 336

                                   \@ssect: (DPC) Changed \endgraf

to \@@par . . . . . . . . . . . . . . 338 1996/06/13 ltdirchk.dtx v1.0r

General: documentation improvements mainly from internal/2174 . . . . . . . . . . . . . . . . . 1

1996/06/14 lttab.dtx v1.1h

\@tabclassz: (DPC) Change both\z@skip to 1sp for latex/2160 . . . . . . . . . . . . . . . 301

1996/06/22 ltspace.dtx v1.2o

General: Documentation of prob-

lems added . . . . . . . . . . . . . . 61 1996/07/10 ltfinal.dtx v1.0y

\toks: Free up memory from

scratch registers /2213 …. 457 1996/07/19 ltoutenc.dtx v1.8a

\@strip@args: Use char 0 not @ as

carrier for \lowercase /2197 . 92 1996/07/26 ltboxes.dtx v1.0z

                                   \if@minipage: put \global into

definition . . . . . . . . . . . . . . 276 1996/07/26 ltclass.dtx v1.0u

                                   \@classoptionslist: made only

preamble . . . . . . . . . . . . . . 435

                                   \@unusedoptionlist: made only

preamble . . . . . . . . . . . . . . 435 1996/07/26 ltdefns.dtx v1.2y

\@reargdef: third arg picked up by

\@yargdef . . . . . . . . . . . . . . 33

                                   \renew@command: use \noexpand in-

stead of \string . . . . . . . . . . 33 use \relax in place of empty arg 33

                                   \renew@environment: use \relax

in place of empty arg . . . . . . 34 1996/07/26 ltfloat.dtx v1.1n

\@endfloatbox: remove unecessary

                                       \global before \@minipage... 350

\@savemarbox: remove unecessary

                                       \global before \@minipage... 353

\@setminipage: remove unecessary

                                       \global before \@minipage... 349

\@setnobreak: remove unecessary

\global before \@nobreak... 349

1996/07/26 ltfssbas.dtx v3.0p

\@DeclareMathSizes: use faster

\if test . . . . . . . . . . . . . . . 126

\nfss@catcodes: omit \relax as

not needed . . . . . . . . . . . . . 133 1996/07/26 ltfssdcl.dtx v3.0e

\init@restore@version:  Re-
moved \ifrestore@version

switch and replaced by

\init@restore@version . . . 174

1996/07/26 ltfsstrc.dtx v3.0i

\init@restore@glb@settings:

macro  added  replacing

\if@inmath switch . . . . . . . 151 1996/07/26 ltlists.dtx v1.0l

\@item:  Remove  unecessary

\global before \@minipage... 264

Remove unecessary \global before \@nobreak... . . . . . . . 265

1996/07/26 ltmath.dtx v1.1b

General: removed \global before

\@ignoretrue in various places 242 1996/07/26 ltmiscen.dtx v1.1e

\@ignorefalse: put \global into

definition . . . . . . . . . . . . . . 234

\begin: remove \global before

\@ignore... . . . . . . . . . . . . 237

\end: remove \global before \@ig-

nore... . . . . . . . . . . . . . . . 237

\ignorespacesafterend: user level

macro added . . . . . . . . . . . . 234 1996/07/26 ltoutput.dtx v1.1v

\@testfp: remove \global before

\@test... . . . . . . . . . . . . . 420

\@xtryfc: remove \global before

\@test... . . . . . . . . . . . . . 403

\@ztryfc: remove \global before

\@test... . . . . . . . . . . . . . 404 \clearpage: add number of missing

percents . . . . . . . . . . . . . . . 385 1996/07/26 ltplain.dtx v1.1t

\sh@ft: replace \dimen\z@ by \di-

men@ . . . . . . . . . . . . . . . . . . . 24 1996/07/26 ltsect.dtx v1.0u

\@starttoc: removed \global be-

fore \@nobreak... . . . . . . . 340

\@xsect: Removed \global before

\@nobreak... . . . . . . . . . . . 337 1996/07/26 ltspace.dtx v1.2p

                                   \if@nobreak: put \global inside

definition . . . . . . . . . . . . . . . 66 1996/07/27 ltfssbas.dtx v3.0q

General: \if@inmath switch re-

moved . . . . . . . . . . . . . . . . 130 1996/07/27 ltspace.dtx v1.2q

General: Further documentation of

problems . . . . . . . . . . . . . . . 61 1996/07/27 ltspace.dtx v1.2r

General: Correct documentation of

problems . . . . . . . . . . . . . . . 61 1996/08/02 ltfloat.dtx v1.1o

                                   \@xympar: Remove \global before

\@ignore... . . . . . . . . . . . . 354 1996/08/02 ltsect.dtx v1.0v

                                   \@afterheading:  Removed
                                       \global before \@nobreak... 339

1996/08/02 ltspace.dtx v1.2s

                                   \@Esphack: Remove \global before

\@ignore... . . . . . . . . . . . . . 68 1996/08/25 ltfssbas.dtx v3.0r

\nfss@catcodes: Reset the acute, grave and double quote chars as well . . . . . . . . . . . . . . . . . . 134

1996/09/21 ltoutput.dtx v1.1w

                                   \@writesetup: Added \@parboxre-

store and made consequent deletions: wait for the howls of protest . . . . . . . . . . . . . . . . 397

1996/09/25 ltdirchk.dtx v1.0t

General: Move ltxcheck to separate

file . . . . . . . . . . . . . . . . . . . . 13 1996/09/28 ltmiscen.dtx v1.1f

\@xobeysp: Moved to ltspace.dtx 239 1996/09/28 ltspace.dtx v1.2t

\@xobeysp: Moved from ltmiscen.dtx and redefined to use

                                       \nobreakspace . . . . . . . . . . . 71

1996/09/29 ltfiles.dtx v1.1g

\document: Added disabling of

\@nodocument . . . . . . . . . . . . 79 1996/09/29 ltoutput.dtx v1.1x

\newpage: Checks for noskipsec and

inlabel added . . . . . . . . . . . 386 1996/09/29 ltsect.dtx 1.0w

                                   \@noskipsectrue: Added docu-

mentation . . . . . . . . . . . . . . 333 1996/09/30 ltoutput.dtx v1.1y

\newpage: Checks for noskipsec and inlabel removed pending further tests . . . . . . . . . . . . . . . . . . 386

1996/10/04 ltclass.dtx v1.0v

\RequirePackageWithOptions: Re-
set \@unprocessedoptions for

/2269 . . . . . . . . . . . . . . . . . 441 1996/10/05 ltfiles.dtx v1.1h

\@clubpenalty: Added setting its

value . . . . . . . . . . . . . . . . . . 77 1996/10/08 ltfntcmd.dtx v3.3u

\DeclareTextFontCommand: Re-

moved \check@icr when in vmode since it causes various errors (see pr/2157) . . . . . . 223

1996/10/21 lttab.dtx v1.1i

General: Moved the code associated with \@mkpream into the group provided by the box, for robustness (latex/2183) . . . . . . . . 294

\array: Use \set@typeset@protect

. . . . . . . . . . . . . . . . . . . . . . 294

\multicolumn: Make \multicolumn

long (latex/2180) . . . . . . . . 295

\tabbing: Moved the \indent so

that the \everypar can remove it when necessary; this is needed because the code for items in lists has changed (see pr/22111) . . . . . . . . . . . . . . 288

1996/10/23 ltlists.dtx v1.0m

\@item: \@nobreak... moved into

the \everypar and not executed unconditionally, see above . . 265

\kern... changed to \set-

box... . . . . . . . . . . . . . . . . 265 Added setting of \clubpenalty

and set \@nobreakfalse only

when necessary . . . . . . . . . . 265 1996/10/23 ltsect.dtx v1.0x

\@xsect: Replaced \hskip... with
\setbox... as used in \@af-

terheading . . . . . . . . . . . . 337 1996/10/24 ltboxes.dtx v1.1a

\@arrayparboxrestore: Added lo-

cal settings of flags: dangerous! 276 \@iiiminipage: Use it or lose it

(@setminpage): Frank will want to lose it . . . . . . . . . . . . . . . 277 1996/10/24 ltfloat.dtx v1.1p

                                   \@floatboxreset: Added local set-

tings of flags: dangerous! … 349

                                   \@marginparreset: Added local

settings of flags: dangerous! . 354

                                   \@xfloat: Added \@nodocument to

trap floats in the preamble . 347 1996/10/24 ltoutput.dtx v1.1z

                                   \@addtocurcol: Added \nobreak,

etc as appropriate . . . . . . . . 408

                                   \@specialoutput: Added \nobreak

as appropriate . . . . . . . . . . 391

                                   \@topnewpage: Added \@nodocu-
                                       ment to trap \twocolumn in the

preamble . . . . . . . . . . . . . . 387 \newpage: Better checks for noskipsec and inlabel added, plus nobreak . . . . . . . . . . . . 386

1996/10/25 ltlists.dtx v1.0n

                                   \endtrivlist: Change \indent to

\leavevmode . . . . . . . . . . . . 263 Reset flags explicitly . . . . . . . 263

1996/10/25 ltoutput.dtx v1.2a

\newpage: Reset all flags explicitly 386 1996/10/26 ltlists.dtx v1.0o

\endtrivlist: Correct typo …. 263 1996/10/27 ltoutenc.dtx v1.8c

\@strip@args: Removed macro . 91 General: Added \r A . . . . . . . . . 98

                                      Added \textasteriskcentered

. . . . . . . . . . . . . . . . . . . 95, 104 Corrected syntax descriptions . 86 Removed \aa and \AA 95, 98, 100

1996/10/28 ltplain.dtx v1.1u General: (CAR) More doc changes 14 \dotfill: Removed math mode . 25

1996/10/29 ltplain.dtx v1.1v

\dotfill: Got arithmetic correct

(CAR) . . . . . . . . . . . . . . . . . 25 1996/10/29 ltspace.dtx v1.2u

\@gnewline: Added macro . . . . . 66

                                   \@no@lnbk: Macro replaces \@lnbk

and \@nolnbk . . . . . . . . . . . . 65 \\: Corrected and rationalised code 65 \nolinebreak: Reimplemented

both using \@no@lnbk . . . . . . 64 1996/10/31 ltfinal.dtx v1.0z

General: Added extra \lcode, hoping it does no harm in T1 (pr/1969) . . . . . . . . . . . . . . 455 1996/10/31 ltlists.dtx v1.0p

\@trivlist: Added check for miss-

ing item in outer list . . . . . . 261 1996/10/31 ltsect.dtx v1.0y

General: Corrected and tidied doc-

umentation; removed long lines 332 1996/11/03 ltplain.dtx v1.1w

\dotfill: Saved tokens by using

\hb@xt@ . . . . . . . . . . . . . . . . 25 1996/11/04 lterror.dtx v1.2m

\@nodocument: Always define

\@nodocument in kernel, so that it can be cleared by \document. 56

1996/11/04 ltlists.dtx v1.0q

\@trivlist: Moved check for missing item: only checked when not inlabel flag is false . . . . . . . 261

1996/11/05 ltfiles.dtx v1.1i

\nofiles: Standard \if@nobreak

test added . . . . . . . . . . . . . . 79 1996/11/09 ltmath.dtx v1.1c

\@ensuredmath: Made long, as it

was before. /2104 . . . . . . . . 250 1996/11/18 ltfssbas.dtx v3.0s

\define@newfont: (DPC) lowercase

fd file names. internal/1044 . 133 1996/11/18 ltoutenc.dtx v1.8d

General: (DPC) lowercase external

file names. internal/1044 …. 97 1996/11/20 fontdef.dtx v2.2p

General: lowercase fd and enc.def

file names /1044 . . . . . . . . . 200 1996/11/20 ltvers.dtx v1.0f

General: Check for old format mod-

ified /2319 . . . . . . . . . . . . . . 26 1996/11/23 ltoutenc.dtx v1.8e

General: Corrected description . . 86

Extended description . . . . . . . 87 1996/11/28 ltvers.dtx v1.0g

General: Check for old format mod-

ified /2319 . . . . . . . . . . . . . . 26 1996/12/06 ltdirchk.dtx v1.0u

\IfFileExists: *** removed from various messages for GNU Make. internal/2338 . . . . . . . . 9

1996/12/06 ltfloat.dtx v1.1r

\@caption: Call \@setminpage if

needed. latex/2318 . . . . . . . 346 1996/12/06 ltfssini.dtx v3.0h

General: (DPC) Remove *** from

messages internal/2338 …. 198 1996/12/17 ltclass.dtx v1.0w

\g@addto@macro: Use \begingroup

to save making a mathord . . 445 1996/12/20 ltsect.dtx v1.0z

\@dottedtocline: Added \nobreak

for latex/2343 . . . . . . . . . . . 342 1997/01/08 fontdef.dtx v2.2q

General: Use \DeclareMathDelim-

iter to set delimiter codes . 208

\mathparagraph: Define using \De-
clareMathSymbol . . . . . . . . 216

1997/01/08 ltfiles.dtx v1.1j

\@include: reset \deadcycles la-

tex/2365 . . . . . . . . . . . . . . . . 81 1997/01/08 ltmath.dtx v1.1d

\root: (DPC) Remove spurious space tokens from plain TEX definition /2359 . . . . . . . . . 244

1997/02/05 ltclass.dtx v1.0x

\g@addto@macro: missing percent

/2402 . . . . . . . . . . . . . . . . . 445 1997/02/21 ltlists.dtx v1.0r

\@item: \ifvoid check added for

\noindent. latex/2414 …. 265 1997/03/21 ltcounts.dtx v1.1e

\fnsymbol: Use \mathsection and
\mathparagraph. latex/2445 117

1997/04/14 ltfiles.dtx v1.1k

\document: Set the document space

factor defaults. latex/2404 … 78

\normalsfcodes: Macro added

(from patch file) latex/2404 . . 79 1997/04/14 ltoutput.dtx v1.2b

\@writesetup: Call \normalsf-

codes (from patch file) latex/2404 . . . . . . . . . . . . . . . 399

Move \label and \index (from

patch file) . . . . . . . . . . . . . . 399 1997/04/24 ltbibl.dtx v1.1m

\@citex: \empty to avoid primitive error on empty cite keys. latex/2432 . . . . . . . . . . . . . . . 365

1997/04/30 ltoutenc.dtx v1.9a

General: Changed \textsc to \scshape . . . . . . . . . . . . . . . . . . 96

Introduced \textcopyright and

modified \copyright . . . . . . . 96

Introduced \textcopyright and

modify \copyright . . . . . . . . 96

Modified \textunderscore, re-
moving \mathunderscore . . . 96

Modified \underscore, removing

\mathunderscore . . . . . . . . . 96

1997/04/30 ltoutenc.dtx v1.9b

General: Added \leavevmode to

\textunderscore . . . . . . . . . 96

1997/05/04 ltoutenc.dtx v1.9c

General: Added ‘hex index tabs’ . 101

Added TS1 encoding v2.2.beta 107 1997/05/07 ltoutenc.dtx v1.9d

General: Added \leavevmode to

\textcompwordmark . . . . . . . 96

1997/05/07 ltspace.dtx v1.2v

\newline: Made completely robust 66 1997/05/29 ltfsstrc.dtx v3.0j

General: Replaced \\ by \Message-Break, as suggested by Donald Arseneau. . . . . . . . . . . . . . . 143

1997/05/29 ltlogos.dtx v1.1f

\LaTeXe: Added \m@th so that the L^{A}TEX 2ε logo works with nonzero values of \mathsurround. 74

1997/06/16 ltdirchk.dtx v1.0v

General: documentation improvements mainly from internal/2520 . . . . . . . . . . . . . . . . . 1

1997/06/16 ltfloat.dtx v1.1s

General: documentation fixes … 343 1997/06/16 ltfntcmd.dtx v3.3v

General: Fix typo in documenta-

tion. . . . . . . . . . . . . . . . . . . 221 1997/08/05 ltoutenc.dtx v1.9e

General: Corrected order of argu-

ments in \UseTextSymbol ex-

ample. . . . . . . . . . . . . . . . . . 86 1997/08/29 ltoutenc.dtx v1.9f

General: Added OT4 encoding, pro-

vided by Marcin Woliński. … 85 1997/09/09 ltdefns.dtx v1.2z

\provide@command: Use \begin-

group to avoid generating math ords if used in math mode. pr/2573 . . . . . . . . . . . . . . . . 35

1997/09/15 ltpictur.dtx v1.1g

\@getcirc: Warn if lines become invisible pr/2524 . . . . . . . . . . 322

\@picture@warn: Macro added

pr/2524 . . . . . . . . . . . . . . . 322 \@sline: Warn if lines become in-

visible pr/2524 . . . . . . . . . . 313 1997/10/06 ltcounts.dtx v1.1f

\@Roman: Change \@Roman to be

fully expandable, so that the result is written properly to files. 118

\@slowromancap: Macro added. . 118 1997/10/08 ltlogos.dtx v1.1h

\LaTeX: Simplify macro (force loading of suitable math fonts once). . . . . . . . . . . . . . . . . . . 74

1997/10/10 ltclass.dtx v1.0y

\endfilecontents: \@currenvir in

banner . . . . . . . . . . . . . . . . 447

\reserved@c not \verbatim@out

to save a csname . . . . . . . . . 447 Check for text before or after \end environment. latex/2636 447 Use \@gobbletwo . . . . . . . . . . 447

1997/10/17 ltfntcmd.dtx v3.3w

\check@nocorr@: Check for vertical mode moved here, from

\DeclareTextFontCommand (see

PR/2646). . . . . . . . . . . . . . 225

\DeclareTextFontCommand: Rein-

stalled \check@icr as check is

now done in \check@nocorr@

(see PR/2646). . . . . . . . . . . 223 1997/10/20 ltfinal.dtx v1.0z1

\@uclclist: Removed \aa and \AA

from \@uclclist as these are macros. . . . . . . . . . . . . . . . 455

1997/10/21 ltdefns.dtx v1.2z1

\renew@command: Use \begin-
group/\endgroup rather than

braces for grouping, to avoid generating empty math atom. 33

1997/10/21 ltfssbas.dtx v3.0t

\define@newfont: Move \makeatlet-
ter to \nfss@catcodes. . . . 133
\nfss@catcodes: Moved \makeatlet-
ter from \try@load@font@shape.

. . . . . . . . . . . . . . . . . . . . . . 133 1997/11/09 ltoutput.dtx v1.2c

\@specialoutput: Remove incor-

rect code: only one \@emptycol is needed here . . . . . . . . . . . 389 \@topnewpage: Documentation of

vsize check enhanced . . . . . . 386 1997/11/13 ltfssdcl.dtx v3.0f

\DeclareSymbolFont: (DPC) Re-

ally update \group@list dont leave new version in \toks@. latex/2661 . . . . . . . . . . . . . . . 178

\stepcounter: (DPC) Remove as never used. (Re)defined in ltcounts . . . . . . . . . . . . . . . . 173

1997/11/19 ltfloat.dtx v1.1t

\@footnotetext: Missing percent,

again . . . . . . . . . . . . . . . . . 359 1997/11/19 ltoutput.dtx v1.2d

\@vtryfc: Reindent code, to be un-

derstandable(DPC). . . . . . . 403 1997/11/20 ltfssdcl.dtx v3.0g

\document@select@group: (DPC)
inline use of \stepcounter

(faster, and saves a csname per math version as no reset list) 175

\select@group: (DPC) inline use of \stepcounter (faster, and saves a csname per math version as no reset list) . . . . . . . . . . . . . . 173

1997/11/23 ltoutenc.dtx v1.9g

General: Use \textperthousand,
\textpertenthousand  and
\textfractionsolidus  not
\textpermill, \textperten-
mill and \textfraction.

/2673 . . . . . . . . . . . . . . . . . 107 1997/12/17 ltoutenc.dtx v1.9h

General: Added \textperthousand

                                       and \textpertenthousand 99, 100

Added code for textcomp.sty. . 111 Added section. . . . . . . . . . . . . 111 Added textcomp.sty. . . . . . . . 85 As in OT1, Added \leavevmode at start of \c, otherwise the output routine might be invoked within the macro. . . . . . . . . . 99 Changed to decimal codes in \ooalign. . . . . . . . . . . . . . . 109 Changed to decimal codes. … 104 Documentation changes and additions. . . . . . . . . . . . . . . . . . 85 Example corrected, braces removed. . . . . . . . . . . . . . . . . . 86 Removed default settings, see next section. . . . . . . . . . . . . 107

1997/12/19 ltoutenc.dtx v1.9i

General: Documentation correc-

tions. . . . . . . . . . . . . . . . . . . 85 1997/12/20 fontdef.dtx v2.2s

General: Added documentation . 202 1997/12/31 ltoutenc.dtx v1.9k

General: Further correction …. 86 1998/01/06 ltoutenc.dtx v3.0b

General: Adding missing braces and

\ushape. . . . . . . . . . . . . . . . 109 1998/01/12 ltoutenc.dtx v1.9k

                                   General: Added \ProvidesPackage

for textcomp.sty . . . . . . . . . . 85 1998/01/16 ltoutenc.dtx v1.9m

General: fixed decimal codes. latex/2734 . . . . . . . . . . . . . . . 104

Index 510

Index

The italic numbers denote the pages where the corresponding entry is described, numbers underlined point to the definition, all others indicate the places where it is used.

Symbols

\! . . . . . . . . . . . b152, b154, z147, N67 \" . . . . . . . . . l150, l261, l296, l332,

l399, l430, l457, l465, l471, l475, l481, l485, l491, l497, l504, l505, l511, l515, l547, l589, o365, N68

\# . . . . . . . . . . . . . . . . a9, a22, b6,

b14, b219, d272, o304, o352, N51 \$ . . . . . . . a21, b4, b13, d271, l223,

l317, l324, l388, l601, l608, N52 \% a22, a47, a49, a69, b14, b217, d272,

l351, l353, o354, L484, L485, N53 \& . . . . . a21, b5, b13, b218, d271, N54 \' . . . . . . . . . . . . . . . . b234, l151,

l262, l298, l329, l401, l410, l416, l418, l421, l423, l431, l437, l443, l445, l448, l450, l458, l462, l469, l473, l478, l483, l486, l488, l495, l500, l501, l508, l513, l516, l548, l591, l610, l612–l614, l617, l619– l621, l623, l624, o364, s154, t172, y143, z150, B181, C63, N69

\( . . . . . . . . . . . . . . . z167, \underline{z167}, z192 \) . . . . . . . . . . . b234, \underline{z167}, z168, z193 \* . . . . . . o357, z148, \underline{z148}, L418, L486 \+ . . . . . . . . . . . . . . . . . . . . . . . . C63 \, . b153, b155, \underline{i173}, t394, y143, z7,

z8, z40, z108, z110, z113, z127, z144 \- . . . . . . . . . . . . . . . . . . b121, d9,

\underline{d9}, d10, d11, l292, l293, l394, l585, l586, o359, y143, B180, C63

\. . . . . . . . . . . . . . . . . b152, b154, k39, l152, l263, l338, l407, l433, l434, l460, l549, l615, l622, o358

\/ . . . . . . . . a39, d12, o272, o360, L105 \: . . b153, b155, d264, d265, z149, \underline{z149} \; . . b153, b155, t388, z128, \underline{z144}, z146 \< … l395, l540, o355, y143, C62, C100 \= l153, l264, l337, l550, s154, B181, C62 =\! . . . . . . . . . . . . . . . . . . . . . . . \underline{z144} \> l392, l541, o356, y143, z145, z149, C62 \? . . . . . . . . . . . . . . . b152, b154, N69 \@ . . . . . . . . . . . . . . . . . a12, d266,

d267, g22, \underline{i176}, j2, L24, L32, N61 \@@ . . . . . . . . . . . . . . . . . . . . a249,

a250, f15, f19–f22, f24, f27, f28, f30, f31, k208, k224, p494, p498, p499, C205–C207, C217, K10, K11

\@@defaultsubs . . . . . . . . . . . . . . \underline{o412} \@@enc@update . . . . . . l123, o205, \underline{o209} \@@end . . a16, a164, d8, k186, k187,

s121, y38, y48, M18, N151, N172 \@@endpbox . . . . . . . C173, C203, \underline{C351} \@@eqncr . . . . . . z227, z245, \underline{z248}, z328

\@@fileswith@pti@ns . . . . . L178, \underline{L346}

\@@hyph . . . . . . . . . . . . . . . . . . . . . \underline{d9} \@@hyphenation . . . . . . . . . . . . . . \underline{l130} \@@ifdefinable . . . . . . . . . . . . . . \underline{d98} \@@input . . . . . . . . . . . . . . . . a15,

d7, d287, k162, k163, k172, o305 \@@italiccorr . . . . . . . . \underline{d12}, v94, v98 \@@line . . . . . . . . . . . . . . . . . . . \underline{B285} \@@math@bgroup . . . . . . . . . v112, v119 \@@math@egroup . . . . . . . . . . . . . . \underline{v109} \@@par . . . . . . . . . . . . . . . . 59, \underline{d6},

h4, y48, y103, y107, y110, A82, A85, B162, B179, F50, F101, K205

\@@patterns . . . . . . . . . . . . . . . . . \underline{l130} \@@protect . . . . . . . . d224, d230, d239 \@@sqrt . . . . . . . . . . . . . . . . . . . . t414 \@@startpbox . . . . . . C173, C203, \underline{C351} \@@underline . . . . . . \underline{B255}, B258, B259

\@@unprocessedoptions . . . L328, \underline{L390}

\@@warning . . . . . . . . . . . . . . . . . \underline{g188} \@Alph . . . . . . . . . . . . . . . . . m38, \underline{m54}

\@DeclareMathDelimiter . . . r595, \underline{r601}
\@DeclareMathSizes . . o179, o180, \underline{o182}

\@Esphack . . . . . . . . . \underline{i77}, G120, G131 \@M …. \underline{b21}, b196, b197, d23, d25,

i27–i34, i57, p401, p424, z237, A181, C58, F50, F83, F101, F113, F154, K145, K146, K206

\@MM . . . . . . . . . . . . . . \underline{b21}, G269, K249 \@Mi . . . . . . . . . . . . . . . . . . . . \underline{e3}, K117

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@Mii . . . . . . . . . . . . . . . . \underline{e3}, G40,

G113, G131, G184, K245, K882 \@Miii . . . . . . . . . \underline{e3}, G42, G186, K248 \@Miv . . . . . . . . . e6, G114, G120, K220 \@Roman . . . . . . . . . . . . . . . . m36, \underline{m42} \@TeXversion . . . . . . . . 2, 5, \underline{a244}, g31 \@acci . . . . . . . . . . . . . . . . \underline{s154}, B181 \@accii . . . . . . . . . . . . . . . \underline{s154}, B181 \@acciii . . . . . . . . . . . . . . \underline{s154}, B181 \@acol . . . . . . . . . . . . . . . . . C150,

C158, C227, C228, C240, C241, C244, C261, C274, C282, C292

\@acolampacol . . . . . . \underline{C225}, C242,

C244, C251, C259, C291, C294

\@activechar@info . . . . . . . . . . \underline{K445}

\@addamp . . . . . . . . . . \underline{C218}, C227,

C228, C243, C257, C292, C293 \@addfield . . . . . . . . . . . . . . C45,

\underline{C55}, C77, C84, C116, C127, C129 \@addmarginpar . . . . . . . . K283, \underline{K1133} \@addtobot . . \underline{K701}, K788, K852, K904 \@addtocurcol . . . . . . . . . K280, \underline{K792} \@addtodblcol . . . . . . . . . K633, \underline{K1016} \@addtofilelist a43, a45, k54, k162,

\underline{k205}, s111, s129, s133, s140,

s143, s150, s153, N21, N24, \underline{N191}

\@addtonextcol . . . . . . . . K632, \underline{K939}

\@addtopreamble . . . . . . . . . C276,

C289, C295–C297, \underline{C299}, C311 \@addtoreset . . . . . . . . m16, m28, \underline{m33} \@addtotoporbot … \underline{K738}, K898, K985 \@afterheading . . . . . . . . . . F75, \underline{F108}

\@afterindentfalse . . . . . . . . . . . F28
\@afterindenttrue . . F26, \underline{F107}, F153

\@alph . . . . . . . . . . . . m37, \underline{m50}, G248 \@ampacol … \underline{C225}, C242, C253, C294 \@arabic . . . . . . m32, m34, \underline{m40}, G246 \@argarraycr . . . . . . . . . . . C182, \underline{C183} \@argdef . . . . . . . . . . . . . . . . . . . \underline{d47} \@argrsbox . . . . . . . . . . . . . . . . \underline{B265} \@argtabularcr . . . . . . . . . C189, \underline{C190} \@array . . . . . . . . . . . . . . . C161, C162 \@arrayacol . . . . . . . . . . . . C150, \underline{C225} \@arrayclassiv . . . . . . . . . C151, \underline{C296} \@arrayclassz . . . . . . . . . . C150, \underline{C242} \@arraycr . . . . . . . . C152, \underline{C180}, \underline{C182}

\@arrayparboxrestore \underline{B176}, B190, C349

\@arrayrule . . . . . . . . . . . . . C274,

C276, C280, C282, C284, \underline{C311} \@arstrut . . . . . . . . C172, C204, \underline{C308} \@arstrutbox . C165, C197, \underline{C308}, C350 \@author . . . . . . . . . . . . . . . . . . . . \underline{F5} \@autoerr . . . . . . b75, b242, b249,

g19, g88, g119, g150, \underline{g213}, g218, g221, g224, g228, g234, g237, g240, g244, g247, g256, g262, g265, g268, g271, g276, g279, g284, k174, l51, o480, r78

\@autoload . . . . . . . . . . . . . \underline{d280},

g213, p417, C146, D15, K1196 \@auxout …. k81, k87, k103, k118,

x33, F145, I7, I8, I19, I29, I37, I42 \@backslashchar \underline{d187}, g216, t182, L451 \@badcrerr . . . . . . . . . . . . . . . . . \underline{g272} \@badend . . . . . . . . . . . . . . . \underline{g231}, y64

\@badlinearg . . . . . . . . . . . . . \underline{g258},

D79, D88, D89, D130, D135, D146 \@badmath . . . . . . . . . . \underline{g235}, z167,

z168, z171, z183, z188, z276, z290 \@badpoptabs . . . . . . . \underline{g241}, C76, C138

                                       \@badrequireerror . . . . . . L118, \underline{L398}

\@badtab . . . . . . . . . . . . . . . . \underline{g245},

C24, C78, C99, C105, C112, C135

                                       \@begin@tempboxa . . . . . . . . . . . . .

\underline{B11}, B26, B114, B162, B266, B274

                                       \@begindocumenthook . . . . . . . . . . .

. . k48, k51, o299, \underline{L357}, L371, I33 \@begindvi . . . . . . . . . . . K486, \underline{K512} \@begindvibox . . . . . . . . . . \underline{K67}, K513

                                       \@beginparpenalty . . . . . . . . . . . .

. . . . . i30, z279, z293, \underline{A23}, A157 \@begintheorem . . . . . . . . . . E30, \underline{E35} \@bezier . . . . . . . . . . . . . D329, \underline{D330} \@bibitem . . . . . . . . . . . . . . . . . I3, \underline{I8} \@biblabel . . . . . . . . . . . . . . . I4, \underline{I48} \@bitor . . . . . . . K15, K656, K686,

K753, K835, K844, K973, K1078 \@botlist . . . . . K46, K302, K304,

K519, K540, K549, K550, K715, K718, K753, K755, K844, K846

\@botnum . . . . . . . . . . . G166, K90, K712, K713, K718, K722, K729, K1008, K1013, K1241, K1263

\@botroom G167, K91, K715, K718, K1242 \@boxfpsbit …. K1311, \underline{K1313}, K1318 \@break@tfor . . . . . . . . . \underline{f31}, k157, v79 \@bsphack . . . . . . . . . . . . . . . . . i9,

\underline{i63}, i138, i154, x32, G39, G183, H6, H18, H23, H35, K1213, I39

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@caption . . . . . . . . . . . . . . . . G4, \underline{G5} \@captype . . . . . G4, G27, G75, K1275 \@car . . . . . . . . . . . . . 30, \underline{d30}, j14, l73 \@carcube . . . . . . . . . . . . . . \underline{d32}, d101 \@cclv . . . . . . . . . \underline{b16}, K250, K254,

K300, K301, K329, K353, K357 \@cclvi . . . . . . . . . . \underline{b21}, b50, b53, b56 \@cdr . . . . . . . . . . . 30, \underline{d30}, d247, d248 \@centercr . . . . . . . \underline{y67}, y75, y82, y88 \@centering . . . . . . . . . . . . . . z207,

z208, z215, z218, z221, z321, z325 \@cflb . . . . . . . . . . . . . . . . . . . . \underline{K516} \@cflt . . . . . . . . . . . . . . . . . . . . \underline{K516} \@changed@cmd . \underline{l3}, l63, l148, o106, o213 \@changed@x . . . . . . . . . . . \underline{l3}, l136, l144

\@changed@x@mouth . . . . . . . l136, l144

\@charlb . . . . . . . . . . . . . . k121, \underline{k129} \@charrb . . . . . . . . . . . . . . k123, \underline{k129} \@chclass C238, C239, \underline{C300}, C313, C318 \@check@c . . . . . . . . . . . . . d159, \underline{d161} \@check@eq . . . . . . . . d165, d166, \underline{d170} \@checkend . . . . . . . . . . y10, y60, \underline{y63} \@chnum . C246, C265, \underline{C300}, C315–C317 \@circ . . . . . . . . . . . D295, D296, \underline{D297} \@circle . . . . . . . . . . . . . D283, \underline{D284} \@circlefnt . . . . . . . . . . D47, D49,

D244, D262, D288, D303, D320 \@cite . . . . . . . . . . . . . . . . . . I16, \underline{I47} \@citea . . . . . . . . . . . . . . . . . I15, I17 \@citeb . I16, I18–I20, I23, I24, I40–I44 \@citex . . . . . . . . . . . . . . . . . I13, \underline{I14} \@classi . . . . . . . . . . . . . . C238, \underline{C272} \@classii . . . . . . . . . . . . . C238, \underline{C286} \@classiii . . . . . . . . . . . . C238, \underline{C291} \@classiv . . . . . . . . C151, C160, C239

\@classoptionslist . . . . . . . . . . . .

. . . . . \underline{L9}, L147, L158, L275, L276 \@classv . . . . . . . . . . . . . . C239, \underline{C297} \@classz . . . . . . . . . C150, C159, C238 \@cline . . . . . . . . . . . . . . . . . . . \underline{C332} \@clnht … D91, D92, D100, D102,

D104, D114, D118, D144, \underline{D314} \@clnwd . . . . . . . . . . . . . . . . . D93,

D99, D103, D105, D106, \underline{D314} \@cls@pkg . . . . . . . . . . . L87, L88,

L309, L337, \underline{L374}, L383, L385, L402 \@clsextension . . . . . . . . . . . . . . .

\underline{L16}, L41, L52, L70, L94, L114, L131, L147, L157, L197, L212, L220, L274, L341, L349, L375, L509

\@clubpenalty \underline{k9}, k19, A183, F89, F118 \@colht … k16, G165, G167, G170,

G173, G174, K95, K179, K190, K199, K200, K305, K317, K344, K374, K408, K414, K418, K428, K433, K508, K579, K596, K638, K658, K691, K1092, K1376, N13

\@colnum . . . . . . G168, K92, K721, K766, K833, K834, K861, K869, K911, K971, K972, K1008, K1013, K1237, K1256, K1430

\@colroom . . . . . . . . . . . . . . . k17, K96, K200, K221, K222, K233, K236, K305, K579, K720, K765, K829, K832, K860, K967, K970, K1238, K1386, K1390, K1435, N12

                                       \@combinedblfloats . . . . . \underline{K552}, K1476

\@combinefloats . . . . . . . K368, \underline{K516} \@comdblflelt . . . . . . . . . . . . . . \underline{K552} \@comflelt . . . . . . . K522, K538, \underline{K552} \@cons . . . . . . . . . . . . . . . . . . . 30,

\underline{d29}, m33, G112, G129, G228, K185, K662, K676, K695, K697, K864, K932, K1001, K1094, K1117, K1134, K1135, K1436

\@contfield . . . . . . . . \underline{C52}, C128, C140 \@ctrerr . . . . . . \underline{g226}, m53, m57, m60

\@curfield . . . . . . . . . . \underline{C16}, C43,

C49, C53, C54, C56, C121, C122 \@curline \underline{C16}, C29, C41, C46, C55–

C57, C81, C82, C94, C119, C120 \@curr@enc . l107, l111, l113, l115, l116 \@currbox . . . . . . . . . . . . . . . G47,

G78, G82, G112, G129, G149, G151, G153, G192, G195, G200, G204, K161, K162, K173, K174, K176, K177, K185, K261, K262, K632, K633, K826, K828, K858, K862, K864, K879, K920, K932, K961, K990, K1001, K1032, K1036, K1047, K1053, K1055, K1059, K1064, K1073, K1087, K1094, K1117, K1135, K1144, K1281, K1282, K1311, K1341, K1346, K1391, K1394, K1406, K1414, K1431, K1436

\@currdir . . . . . 1, 5, a50, a72, a74,

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

a80, a82, a88, a90, a95, a97, a107, \underline{a120}, a185, a198, a211, L428

\@current@cmd . . . . . . . . . . . . l20, o217 \@currentlabel . . . . . . . . . . . x34,

x37, \underline{x40}, z211, z306, B243, G271 \@currenvir …. g232, \underline{y3}, y54, y64,

B74, L445, L451, L459, L463, L469 \@currenvline …. g232, y55, \underline{y65}, B75 \@currext \underline{L15}, L23, L31, L93, L94,

L131, L140, L147, L157, L207, L216, L300, L301, L306, L307, L312, L318, L321, L323, L325, L327, L329, L330, L333, L339, L341, L349, L367, L375, L391, L392

\@currlist . . . . . . . . G112, G228,

K48, K261, K306, K309, K1134 \@currname . . . . . . . . . . . . . . . . . .

k216, k217, \underline{L14}, L22, L30, L85, L87, L93, L140, L216, L299, L301, L323, L325, L327, L329, L330, L367, L383, L385, L392, L402

\@currnamestack . . . . . . . . . . . . . \underline{L20} \@curroptions . . . . . . . . . . . . . . . .

… L140, L148, L170, L392, L393 \@currsize . . . . . . . . . . . . . . . . . . s58 \@currtype K100, K653–K656, K753,

K835, K844, K973, K1078, K1281, K1283, K1284, K1287

\@curtab . . . . . . . . . . . . . . . . . . . .

\underline{C11}, C28, C77–C79, C85, C86, C89, C93, C94, C98, C133, C134

\@curtabmar . . . . . . . . . . \underline{C11}, C27,

C28, C40, C46, C80, C93, C97, C98 \@d@r . . . . . . . . . . . . . . . . . a103, a104 \@dashbox . . . . . D186–D190, D193,

D196, D198, D207, D209– D212, D215, D218, D221, \underline{D316}

\@dashcnt . . . . . . . . . . . . . . D180– D185, D195, D197, D200–D203, D205, D206, D217, D220, \underline{D316}

\@dashdim . . . . . . . . . D179–D182, D184, D187, D189–D191, D195, D197, D199–D202, D205, D209, D211–D213, D219, D222, \underline{D316}

\@date . . . . . . . . . . . . . . . . . . . . . . \underline{F7} \@dbflt . . . . . . . . . . . . . . . G23, \underline{G156} \@dblarg …. 30, \underline{d269}, F37, F125, G4 \@dbldeferlist . G129, K51, K315,

K320, K322, K597, K604, K605,

K1078, K1080, K1117, K1119 \@dblfloat . . . . . . . . . . . . . . . . . \underline{G22}

\@dblfloatplacement . . . . . . . . . . .

. k25, \underline{G171}, K319, K1235, K1482 \@dblflset . . . . . . . . . . . . . . . . . \underline{G17} \@dblfpbot . . . . . . . . . . . G179, \underline{K1525} \@dblfpsep . . . . . . . . . . . G178, \underline{K1525} \@dblfptop . . . . . . . . . . . G177, \underline{K1525} \@dbltoplist . . . . . . . . K50, K180,

K183, K185, K315, K316, K557, K561, K563, K564, K1089, K1094

\@dbltopnum . . . . . . . . . . . . . G172, K88, K108, K186, K188, K568, K1029, K1030, K1093, K1096, K1104, K1124, K1129, K1245

\@dbltoproom . . . . . . . . . . . . G173, G175, K89, K1032, K1035, K1036, K1045, K1046, K1049, K1052, K1055, K1058, K1063, K1067, K1072, K1091, K1246

\@dec@text@cmd . . . . . . . . . . . . . . . . \underline{l3}

\@declaredoptions . . . . . . . . . . . .

\underline{L8}, L121, L144, L160, L175, L355 \@declareoption … L119, L120, L128 \@defaultsubs . . . . . . . o402, \underline{o412}, y25 \@defaultunits o183, \underline{o243}, p133, p135 \@defdefault@ds … L119, L124, L129 \@deferlist . . . . . . . . . . . . . . . . . .

K49, K302, K311, K312, K580, K588, K589, K835, K837, K932, K934, K973, K975, K1001, K1003

\@definecounter . m12, \underline{m25}, z196,

A214–A217, E8, E16, G245, G247 \@depth . . . . . . . . . . . . . \underline{d13}, p145,

t441, t442, t444, t445, B254, B284, C167, C198, D120, D169, D172, D186, D193, D361, K1173

\@dir …. a102, a105, a107, a109, a110 \@dischyph . . . . . . . . . . . . . \underline{d11}, B180 \@doclearpage . . . . . . . . . K246, \underline{K297}

\@documentclasshook . . . . . . . \underline{L3}, L279

\@doendpe . . . . . . . . . . . . . . y61, \underline{A120} \@dofilelist . . . . . . . . k214, \underline{k230}, y20 \@donoparitem . . . . . . . . . . \underline{A131}, A145 \@dot . . . . . . . . . . . . . . . . D283, \underline{D296} \@dotsep . . . . . . . . . . . . . . . . . . F160 \@dottedtocline . . . . . . . . . . . . \underline{F149} \@downline . . . . . . . D166, \underline{D170}, D175 \@downvector . . . . . . . . . . D139, \underline{D175}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@eha . . . . . . . . . . . . . . \underline{g195}, g217, g220, g223, g233, g236, g278, k88, l49, o33, o77, o117, o160, o199, o254, p106, r16, r57, r118, r233, r265, r306, r351, r356, r411, r519, r523, r527, r561, r571, r642, r647, r650, r682, r685, r739, r742, r745, r812, r818, v127, y53, K1207, K1223

\@ehb . . . . . . . . . . . . . . . . . . . \underline{g195},

g227, g261, g264, g267, K182, K308 \@ehc . . . . . . . . . . . . . . . . . . . d94,

d121, \underline{g195}, g272, g275, g283, g286, y128, y139, z252, A207, F4

\@ehd . . . . . \underline{g195}, g230, g239, g243,

g246, g254, r76, C91, C100, L245 \@elt . . . . . . . . . . . . . . . d29, k122,

m20, m24, K8, K11, K15, K41– K44, K522, K533, K538, K548, K560, K562, K590, K606, K623, K636, K643, K668, K671, K680

\@empty . . . . . . . . . . . . . . . . . . . . . \underline{f14} \@emptycol . . . . . . . . . . . . . . . . . .

. . \underline{K146}, K193, K196, K225, K229 \@end@tempboxa . . . . . . . . . . . . . . .

\underline{B20}, B29, B119, B175, B272, B282

\@enddocumenthook . . . y9, \underline{L357}, L372

\@endfloatbox . . . . . G109, G126, \underline{G136} \@endparenv . . . . . . . . . . . . A117, \underline{A120}

\@endparpenalty . . . . . . . . . . . . . .

. . . . . i31, z280, z294, \underline{A23}, A121 \@endpbox . . . . . . . . . . . . . . C173,

C203, C233, C298, \underline{C349}, C352 \@endpefalse y58, A123, A124, \underline{A125}, B77 \@endpeltrue . . . . . . . . . . . . . . . \underline{A125} \@endpetrue . . . . . . . . . . . . A121, A122 \@endtheorem . . . . . E13, E19, E25, \underline{E35} \@enlargepage . . K1187, K1192, \underline{K1198} \@ensuredmath . . . . . . . . . . . z263, \underline{z265} \@enumctr . . . . . . . . A221, A224, A225 \@enumdepth . . . . . . . \underline{A213}, A219–A221 \@eqcnt . . . . . . . . . . . . . . . . . \underline{z204},

z249, z254, z308, z323, z324, z326 \@eqncr … z216, \underline{z234}, z255, z256, z310 \@eqnnum . . z198, \underline{z199}, z253, \underline{z267}, z301 \@eqnsel . . . . . . . . . . . . . . . \underline{z204}, z322 \@eqnswfalse . . . . . . . . . . . . . . . . z233 \@eqnswtrue …. z206, z212, z254, z307 \@eqpen . . . . . . . \underline{z204}, z237, z239, z246 \@err@ . . . . . . . . . . . . . . . . . . g40,

g44, g47, g55, g67, g71, g74, g82 \@esphack . i11, \underline{i69}, i143, i160, x35,

G234, H17, H19, H34, K1215, I45 \@evenfoot . . . . . . . . . J12, J15, K476 \@evenhead . . . . . . . . . J12, J15, K475

\@expandtwoargs . . . . . . . . . . . . . .

…. \underline{d185}, L74, L146, L160, L184 \@expast . . . . . . . . . . . . . . \underline{C206}, C234 \@failedlist . . . . . . . . . . . . K621,

K644, K656, K662, K676, K686 \@fcolmadefalse . . . . . . . . . . . . K612 \@fcolmadetrue . . . . . . . . . . . . . K674 \@filef@und … k144, k154, k162, k172 \@filelist . . . . . . . . . . . . . . . . . .

. . k53, \underline{k204}, k205, k216, s111, s129, s140, s150, N21, N176, \underline{N191}

\@fileswfalse . . . . . . . . . . . . . . . k64

\@fileswith@pti@ns . . . . . . . L118,

L178, L270, L271, L273, L296, L346

\@fileswith@ptions . . . . . . . . . . . .

. . . . . . . L265, L266, L268, L272

\@fileswithoptions . . . . . . . . . . . .

. . . . . . . L197, L204, L212, \underline{L263} \@fileswtrue . . . . . . . . . . . . . . . . . k7 \@finalstrut . B247, \underline{B283}, C350, G276 \@firstampfalse … C221, C244, C261 \@firstamptrue . . . . . . . . . . . . . C229

\@firstcolumnfalse . . . . . . . . . K1455
\@firstcolumntrue . . . . . . . . . . . .

. . . . . . . . k22, K79, K155, K1461 \@firstofone . . . . . . . . . \underline{d181}, k47,

p300, r40, r99, z261, C337, I18, I41 \@firstoftwo a34, \underline{d181}, d243, d268,

k155, r76, x19, J16, L48, L64, L77 \@firsttab . . \underline{C2}, C65–C67, C97, C109 \@flcheckspace … K715, K751, \underline{K1382} \@flfail …. K644, K669, K686, K695 \@float . . . . . . . . . . . . . . . . \underline{G17}, G23 \@floatboxreset . . . . . . . . . G88, \underline{G90} \@floatpenalty . . . . . . . . . . . . \underline{G3},

G40, G42, G45, G110, G113, G118, G120, G127, G131, G184, G186, G190, G194, G228

\@floatplacement . . . . k25, G163,

K130, K157, K201, K347, K1236 \@flsetnum . . . . . . . . . . . . . K712,

K748, K833, K971, K1029, \underline{K1350} \@flsettextmin … K809, K957, \underline{K1366} \@flstop . . . . . . . . . . . . . . . . . \underline{K1252}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@flsucceed . . K637, K645, K668, K697 \@fltovf . . . . . . . . . . \underline{g266}, G80, G195 \@flupdates . . . . . . K718, K763, \underline{K1427} \@flushglue . . . . . . . . . . . . . . . . . .

\underline{e17}, y76, y82, y89, y102, A76, B187 \@fnsymbol . . . . . . . . . . . . . m39, \underline{m58} \@font@info . . . . . . . . . o108, o144,

o150, o283, o332, o450, p30, p38, p46, p74, p87, p126, p154, p168, p179, p193, p209, p215, p228, p235, p242, p247, p257, p269, p281, p465, p481, p490, p503, p532, p544, r126, r141, r175, r216, r291, r335, r348, r431, r510, r552, r632, r780, r809

\@font@warning … o4, o398, o403, p19, p33, p41, p49, p61, p77, p448, p464, p480, p489, p502, p531, p543, q20, r285, y22, N26

\@fontswitch . . . . . . . . . . . v107, \underline{v109} \@footnotemark . . . . . . . . . . . . . . .

. . G258, G264, G282, G288, \underline{G289} \@footnotetext . . . . . . . . . . B217,

G258, G264, \underline{G265}, G298, G304 \@for \underline{f16}, k99, k216, L78, L144, L158,

L170, L175, L190, L393, I16, I40 \@forloop . . . . . . . . . . . . . . . . f19, \underline{f20} \@fornoop . . . . . . . . . . . . \underline{f15}, f23, f29 \@fortmp . . . . . . . . . . . . . f17, f18, f26 \@fpbot . . . . . . . . . G179, K642, \underline{K1519} \@fpmin . . . . . . . . . . . . . . . . G170,

G176, K94, K673, K1243, K1442 \@fps . . . . . . . . . . . G28, G29, G31,

G34, G51, K1273, K1275, K1278 \@fpsadddefault … G32, G35, \underline{K1270} \@fpsep G178, K640, K649, K690, \underline{K1519} \@fpstype K709, K730, K731, K745,

K776, K777, K799, K801, K804, K806, K856, K912, K913, K947, K949, K952, K954, K1026, K1041, K1043, K1061, K1070, K1105, K1106, \underline{K1266}, K1282, K1284, K1286, K1289–K1291, K1293, K1294, K1298, K1299, K1301, K1302, K1336, K1338, K1340, K1352, K1354, K1368, K1370, K1399, K1402, K1413

\@fptop . . . . . . . . . G177, K639, \underline{K1519} \@frameb@x . . . . . . . B104, B118, \underline{B120} \@framebox . . . . . . . . . . . . B107, \underline{B108} \@framepicbox . . . . . . . . . . B107, \underline{B141} \@freelist . . . . . . . . . G47, G192,

G193, K41, K161, K366, K534, K549, K563, K645, K1134, K1135

\@getcirc . . . . . . . . \underline{D237}, D258, D286 \@getfpsbit K706, K742, K1023, \underline{K1309} \@getlarrow . . . . . . . D137, D145, \underline{D147} \@getlinechar . . . . . . . . . . D90, D122 \@getpen . . . . . . . . . . . i7, i10, i21, \underline{i55} \@getrarrow . . . . . . . D138, D145, \underline{D153} \@glossaryfile . . . . . . H21, H22, H31 \@gnewline . . . . . . . . . . . . i46, i48, \underline{i49} \@gobble . . . . . . . d99, \underline{d178}, d187,

d206, d210, d286, f6, f9, g109, g140, g171, g180, i42, i193, k54, k204, l24, o399, p299, q16, r19, r21, r179, r190, r249, r296, r297, r326, r332, r340, r345, r363, r377, r387, r396, r409, r426, r435, r513, r555, r635, r698, r771, r802, s133, s143, s153, F126–F130, F146, K482– K484, K680, K1231, K1443, L233, L414, L438, L443, N24, N121, N127, N191, I11, I25, I26

\@gobblecr . . . . . . . . . . . . . i191, i192 \@gobblefour . . . . . . . . . . . . \underline{d178},

r15, r176, r287, r289, r293, r295, r305, r309, r433, r485, L445

\@gobbletwo . . . . . . . . . . . . . d145, d146, \underline{d178}, f12, k26, o404, r93, y15, y23, J11, J13, L437, N32

\@gtempa . . . . . . . . d92, d93, d151, d153, k183, k184, k186–k188, C3, C5–C8, L84, L85, L95, L97

\@halfwidth . . . . . . . . . . . . . . . \underline{D2}, D48, D50, D57, D120, D168, D171, D186, D193, D207, D217, D220, D322, D348, D360, D361

\@halignto . . C152, C156, C157, C171 \@hangfrom . . . . . . . . F49, F100, \underline{F121} \@hash@ . . . . . . . . . . d78, d79, d83, d85 \@height . . . . . . . . . . . . . . . b190,

\underline{d13}, i148, i156, l213, l215, p144, t243, t441, t442, t444, t445, B88, B93, B127, B137, B254, B284, C166, C198, C324, C341, D120, D169, D172, D186, D193, D209, D216, D280, D360, K1173

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@highpenalty . . . . . . . . . . . . . i56, \underline{N4} \@hightab … \underline{C11}, C23, C25, C65,

C77, C86, C87, C102, C133, C134 \@hline . . . . . . . . . . . D81, \underline{D119}, D136 \@holdpg . . . . . . . . . . . . . . . K103,

K250, K252, K253, K258–K260 \@hspace . . . . . . . . . . . . . . . i177, \underline{i178} \@hspacer . . . . . . . . . . . . . . i177, \underline{i179} \@hvector . . . . . . . . . . . . D132, \underline{D136} \@icentercr . . . . . . . . . . . . . . y70, \underline{y71} \@iden . . . . . . . . . . . . . . . . . . . . . \underline{d184} \@if . . . . . . . . . . . . . . d140, d141, \underline{d143} \@if@pti@ns . . . . . . . . . . L74, L76, L82 \@if@ptions . . L69, L70, L73, L75, L307 \@ifatmargin . . . . . . . . . . . . \underline{C57}, C97 \@ifclasslater . . . . . . . . . . . 433, \underline{L51} \@ifclassloaded . . . . . . . . . . 433, \underline{L40} \@ifclasswith . . . . . . . . . . . . 433, \underline{L69} \@ifdefinable . . . . . . . . . . . . . 30,

d51, d53, d96, \underline{d98}, d208, l16, m11, n3, s54, B54, E7, E15, E22

\@iffileonpath . . . . . . . . . k140, \underline{k148} \@ifl@aded . . L40, L41, L44, L50, L306 \@ifl@t@r . . . . . . L56, L59, L66, L254 \@ifl@ter … L51, L52, L55, L58, L333 \@ifnch . . . . . . . . . . . d252, \underline{d253}, d265 \@ifnextchar 29, a40, d48, d68, d116,

\underline{d249}, d268, d269, i44, i192, k163, m13, p371, y69, z202, A130, B5, B7, B10, B31, B56, B57, B61, B65, B106, B107, B109, B142, B146, B150, B154, B195, B199, B203, B250, B262, B264, C59, C161, C182, C189, D12, D63, D74, D250, E3, E5, E28, G18, G156, G197, G256, G279, G296, K157, K1254, L90, L106, L249, L264, L269, I3, I13

\@iforloop . . . . . . . . . . . . . . . f21, \underline{f22}

\@ifpackagelater . . . . . . . . . 433, \underline{L51}
\@ifpackageloaded . . . . . . . . 433, \underline{L40}

\@ifpackagewith . . . . . . . . . . 433, \underline{L69} \@iframebox . . . . . . . B110, B111, \underline{B112} \@iframepicbox . . . . . . . . . B142, \underline{B143} \@ifstar 29, d40, \underline{d268}, i38, i132, i177,

o179, q111, y68, y134, z236, C58, C181, C188, D73, D283, F35, F125, K1182, L119, L141 \@ifundefined . 30, d93, d100, d120,

d128, d153, d164, \underline{d241}, m3, m7, m16, o75, o159, p384, r211, x23, y43, y52, E21, J3, J7, L38, L109, L171, L475, L478, I20, I43

\@ignorefalse …. \underline{y4}, y57, y62, G233 \@ignoretrue . . . . . . . . . . . . . . . . .

i82, \underline{y4}, y7, z195, z198, z230, z331 \@iiiminipage . . . . . . . . . . . . . . . .

. . B197, B201, B204, B205, \underline{B206} \@iiiparbox . . . . . . . . . . . . . B148,

B152, B155, B156, \underline{B157}, B234 \@iiminipage . . . . . . . . . . . B200, \underline{B202} \@iinput . . . . . . . . . . . . . . k163, \underline{k164} \@iiparbox . . . . . . . . . . . . B151, \underline{B153} \@iirsbox . . . . . . . . . . . . . B264, \underline{B273} \@imakebox . . . . . . . . . B10, \underline{B25}, B63 \@imakepicbox … B31, \underline{B32}, B68, B144 \@iminipage . . . . . . . . . . . . B196, \underline{B198} \@include . . . . . . . . . . . . . . . k89, \underline{k90} \@index . . . . . . . . . . . . H18, \underline{H19}, H35 \@indexfile . . . . . . . . . . . H4, H5, H14 \@inlabelfalse \underline{A28}, A104, A171, K140 \@inlabeltrue . . . . . . . . . . \underline{A28}, A165 \@inmatherr . . . . . . . \underline{g280}, A129, D283 \@inmathwarn . . . . . . . . . . . . . . . . . . \underline{l3} \@input . . . . . . . . k28, k93, \underline{k171}, F135 \@input@ . . . . . . . k108, \underline{k173}, o342, I31 \@inputcheck a17, a133, a134, a137,

a145, d24, \underline{k3}, k135, k136, k143, k152, k153, k156, L425, L426, L433

\@insertfalse …. K797, K945, K1021 \@inserttrue K725, K770, K884, K1099 \@invalidchar . . . . . . . . . . . . . . . \underline{g286} \@iparbox . . . . . . . . . . . . . B147, \underline{B149} \@irsbox . . . . . . . . . B262, B264, \underline{B265} \@isavebox . . . . . . . . . . . . . B61, \underline{B62} \@isavepicbox . . . . . . . . . . . B66, \underline{B67} \@ishortstack . . . . . . . . . . . \underline{D64}, \underline{D72} \@istackcr . . . . . . . . . . . . . D74, \underline{D75} \@itabcr . . . . . . . . . . . . . . . C59, \underline{C60} \@item . . . . . . . . . . . . . . . . A130, \underline{A143} \@itemdepth . . . . . . . \underline{A228}, A230–A232 \@itemfudge . . . . . . . . . C40, C46, C73 \@itemitem . . . . . . . . . . . . A232, A235 \@itemlabel . . . . . . . . A44, A96, A130 \@itempenalty . . . . . . . i32, \underline{A23}, A162 \@iwhiledim . . . . . . . . . . . . . . . . . . . \underline{f7} \@iwhilenum . . . . . . . . . . . . . . . . . . . \underline{f3}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@iwhilesw . . . . . . . . . . . . . . . . . . \underline{f10} \@ixpt . . . . . . . . . . . . . . . . . . . . . \underline{o487} \@ixstackcr . . . . . . . . . . . . . . . . . \underline{D73} \@killglue . . . . . . . . . D30, D38, \underline{D44} \@kludgeins K270–K272, K274, K370,

K391, K392, K398–K400, K409, K425, K429, K439, \underline{K1175}, K1214

\@labels . . . . . . . . . . . . . . . . \underline{A27},

A133, A134, A176, A193, A194

\@largefloatcheck . G111, G128, \underline{G148}

\@lastchclass . . . . . . . . . . . C229, C239, C240, C242, C250, C273, C287, C291, \underline{C300}, C313, C314

\@latex@e@error . . . . . . . . . . . . . d286 \@latex@error . . . . . . . . . . . . . . . .

. d94, d121, \underline{g150}, g191, g215, g220, g223, g227, g230, g232, g236, g239, g242, g246, g252, g259, g264, g267, g270, g272, g274, g278, g283, g286, k88, l47, o8, o33, o77, o117, o160, o199, o254, p105, q90, q101, r14, r55, r75, r116, r137, r153, r233, r265, r305, r309, r351, r356, r411, r479, r485, r519, r523, r527, r561, r571, r642, r647, r650, r682, r685, r739, r742, r745, r812, r818, s36, s86, v124, y53, y127, y139, z252, A206, C91, C100, F4, L208, L227, L240, L308, L382, L399, L407, L412

\@latex@info . . . . . . . . . . . d193, \underline{g150}

\@latex@info@no@line . . . . \underline{g150}, K446
\@latex@warning . . . . . . . . . . . . . .

. . \underline{g150}, g188, l55, x14, D246, G152, K1276, L462, L468, I22, I44

\@latex@warning@no@line . . . . . . .

. . . . . . . . . d172, \underline{g150}, g189, k13, k202, x8, x26, x27, y30, F6, K191, K223, K1149, K1342, L86, L255, L334, L427, L434, L492

\@latexbug . . . . . . \underline{g269}, K285, K1135 \@latexerr . . . . . . . . . . . . . . . . . .

\underline{g188}, K182, K308, K1205, K1222

\@lbibitem . . . . . . . . . . . . . . . . I3, \underline{I4} \@ldots . . . . . . . . . . . . . . . . t392, t394 \@leftcolumn …. K102, K1456, K1465 \@leftmark . . . . . . . . . . . . . . \underline{J16}, J27 \@let@token . . . . . d252, d254, d257,

d265, v64, v77, z152, z154, z157 \@lign . . . . . . . . . . . . . . . . . z138, z140 \@linechar . . . . . . . . . . . . . . . . . .

. . D90, D92, D93, D95, D100, D102–D105, D107, D111, D112, D115, D116, D118, D143, \underline{D312}

\@linefnt . . . . . . . D47, D49, D90,

D136, D144, D173, D176, D319 \@linelen . . D78, D79, D99, D106,

D115, D119–D121, D129, D130, D169, D172, D174, D175, \underline{D313}

\@listctr . . . . . . . . . . A189, A212, I9 \@listdepth . . . . . . . . . . . . . . . . . .

. \underline{A23}, A35, A38, A43, A99, B218 \@listfiles . . . . . . . . . k52, k208, k223

\@loadwithoptions . \underline{L214}, L220, L224

\@lowpenalty . . . . . . . . . . . . . . i55, \underline{N4} \@ltab . . . . . . . . . . . . . . . . . C62, \underline{C97} \@m . . . . . . . . . . . . . . . . . . . . \underline{b21},

b150, b152, b153, b186, b187, i176, k39, A80, D109, D113, I17

\@mainaux . . . . . . . . . . . . . . . . . . .

. \underline{k5}, k31, k32, k81, k93, k118, y14 \@makebox . . . . . . . . . . . . . . . . B7, \underline{B9} \@makecaption . . . . . . . . . . . . . . . G15 \@makecol . . . . . . . . K209, K330, \underline{K350} \@makefcolumn . . . . . . . . . . . . . . . .

. K311, K312, K320, K322, K1440 \@makefnmark . . . . . . . . . . \underline{G249}, G292 \@makefntext . . . . . . . . . . . B246, G275 \@makeother . . . . . . . . . . . . . . a23,

a39, a68, d271, d272, o355– o365, y112, \underline{y121}, y132, L105, L450

\@makepicbox . . . . . . . . B6, \underline{B30}, D222

\@makespecialcolbox . . . . K371, \underline{K395}

\@marbox . . . . . G193, G195, G199, G203, G204, G228, K1134, K1144, K1147, K1155, K1157, K1158, K1160–K1162, K1171

\@marginparreset . . . . . . G212, \underline{G219}

\@markright . . . . . . . . . . . . . . J24, \underline{J26} \@maxdepth k50, \underline{K72}, K356, K385, N10 \@maxtab . . . . . . . . . . . . . . . . \underline{C2}, C85 \@medpenalty . . . . . . . . . . . . . . i56, \underline{N4} \@midlist . . . . . . . . . . . . . . . K47,

K366, K367, K753, K755, K864

\@minipagefalse . . . . A168, B191,

B193, B231, G106, G138, G214

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@minipagerestore . . . . . . B219, \underline{B221}

\@minipagetrue . . . . . . . . . B192, G105 \@minus . . . . . . . . . . . . . . . . . . . . .

\underline{d13}, K1512–K1514, K1517, K1518

\@missingfileerror . . . . . . . . . . . .

. . . . . . . . . 434, k167, \underline{k174}, L327 \@miv . . . . . . . . . . . . . . . . . . . . . . . \underline{e3} \@mkboth . . . . . . . . . . . . . . . . J11, J13 \@mklab . . . . . . . . . . . . . . . A45, \underline{A127} \@mkpream . . . . . . . . C169, C201, \underline{C229} \@mparbottom . . . . . . . G236, G237,

K99, K346, K1145, K1153–K1156 \@mpargs . . . . . . . . . . . . . . B210, B234

\@mparswitchfalse . . . . . . . . . . . K83

\@mpfn . B216, G256, G261, G301, \underline{G305} \@mpfootins . . . . . . . . . . . . . B225,

B226, B229, \underline{B235}, B238, B239

\@mpfootnotetext . . . . . . . B217, \underline{B237}

\@mplistdepth . . . . . . . . . . B218, \underline{B235} \@multicnt . . . . . . . . . . . . . C335,

C337–C339, C346–C348, D38, D39, D41, \underline{D309}, D346, D348– D351, D355, D359, D368, D372

\@multiplelabels k27, x25, \underline{x31}, y28, y34 \@multiput . . . . . . . . . . . . . D36, D37 \@multispan . . . . . . . C336, C340, \underline{C344} \@namedef . . . . . . . . . . . . . 29, \underline{d27},

k128, o110, o111, o133, p378, x28, y119, z256, z257, C157, E12, E13, E18, E19, E23–E25

\@nameuse . . . . . . . . . . . . . . . . . . .

29, \underline{d28}, k116, k127, E23, J5, K470 \@nbitem . . . . . . . . . . . . . . A155, \underline{A208} \@ne . . . . . . . . . . . . . . . . . . . . . . . \underline{b16} \@needsf@rmat . . . . . L250, L253, L258 \@needsformat . . . . . L238, L248, L252 \@negargfalse . . . . . . . . . . . . . . . D86 \@negargtrue . . . . . . . . . . . . . . . . D85 \@newcommand . . . . . . . . . . . . . d46, \underline{d47} \@newctr . . . . . . . . . . . . m13, \underline{m15}, E8 \@newenv . . . . . . . . . . d116, d117, \underline{d127} \@newenva . . . . . . . . . . . . . d114, d115 \@newenvb . . . . . . . . . . . . . d116, d117 \@newl@bel . . . . . . . . . . . \underline{x22}, y16, I10 \@newline . . . . . . . . . . . . . . . . i45, \underline{i47} \@newlistfalse . \underline{A29}, \underline{A33}, A108, A169 \@newlisttrue . . . . . . . \underline{A29}, \underline{A33}, A87 \@next . . . . . . . . G47, G192, G193,

K9, K161, K261, K652, K1134 \@nextchar . . C236, C237, C295–C297 \@nil . a103, a104, c4, c10, d30–d32,

d101, d247, d248, f13, f19, f27, j14, l73, o273, o286, o371, o431, o434, o435, o443, p306, p307, p309, p322, p328, p332, p333, p373, p394, p401, p509, p523, q16, q34, q43, q47, r31, r275, r283, r316, r823, r825, v40, v44, C332, C333, L27, L29, L60, L61, L67, L189, L192, L286, L293

\@nmbrlistfalse . . . . . A33, A46, A91 \@nmbrlisttrue . . . . . . . . . . . . . A212 \@nnil . . . . . . . . . \underline{f13}, f20–f22, f28,

o183, p133, p135, p299, p301, p315, p317, p322, p336, p338, p345, p360, p361, p363, p394, p401

                                       \@no@font@optfalse . . . . . . . . . . . \underline{q119}

\@no@lnbk . . . . . . . . . . . . . i13, i14, \underline{i15} \@no@pgbk . . . . . . . . . . . . . . . i3, i4, \underline{i5} \@nobreakfalse i58, i60, A180, F77,

F112, F140, G101, K142, K873 \@nobreaktrue . . . . . . i59, F109, G100 \@nocnterr . . . . . . . . . . . . . . . . . \underline{g222} \@nocounterr . \underline{g222}, m4, m8, m16, E21 \@nodocument . . . . . . . . . . . . . . . . .

. \underline{g229}, k58, y49, G26, K133, K160

                                       \@noitemargfalse . . . . . . . \underline{A32}, A187

\@noitemargtrue . . . . . . . . \underline{A32}, A130 \@noitemerr . . . . . . . . . . . . . . . . . .

. \underline{g273}, i111, i130, A69, A81, A107 \@noligs . . . . . . . . . . y113, y133, \underline{y149} \@nolnerr . . . . . . . . \underline{g219}, i17, i51, y67 \@nomath … \underline{o2}, o252, s31, s49, s51, s56

                                       \@noparitemfalse . . . . . . . \underline{A30}, A132

\@noparitemtrue . . . . . . . . . \underline{A30}, A66

                                       \@noparlistfalse . . . . . . . . \underline{A31}, A70

\@noparlisttrue . . . . . . . . . \underline{A31}, A67 \@normalcr . . . . . . . . . . \underline{i35}, i43, B190 \@normalsize . . . . . . . . . . . . . . L4, L5

                                       \@noskipsecfalse . . . . k45, F81, K135

\@noskipsectrue . . . . . . . . . \underline{F21}, F78 \@notdefinable d102, d103, d107, \underline{g214} \@notprerr . . . . . . . . . . . . . \underline{g277}, k56 \@nthm . . . . . . . . . . . . . . . . . . . E3, \underline{E4} \@nxttabmar . . . . . . \underline{C11}, C23, C25,

C27, C66, C102, C103, C109, C110 \@obsoletefile . . . . . . . . . . . . . . \underline{k201} \@oddfoot . . J11, J14, J15, K105, K473 \@oddhead . . . . . J11, J14, K104, K473

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@onefilewithoptions . . . . . . . . . .

… L278, L282, L288, L297, L345

\@onelevel@sanitize . . . . . . \underline{d273}, G29

\@onlypreamble . . . . . . . . . . . . . . .

. \underline{d33}, d158, d160, d169, d177, k61, k70, k85, k203, k229, l18, l19, l61, l62, l66, l85, l104, l128, l129, o26, o90, o92, o98, o113, o140, o155, o176, o181, o196, o382, p379, q18, q26, q32, q69, q73, q78, q83, q88, q98, q116– q118, q124, q128, q133, r8, r10, r35, r37, r63, r72, r97, r167, r168, r171, r203, r236, r238, r240, r253, r268, r315, r317, r359, r398, r414, r491, r530, r533, r574, r577, r580, r600, r653, r688, r692, r695, r748, r768, r772, r836, v121, v122, x30, H12, H29, L10, L12, L18, L19, L26, L28, L34, L36, L39, L42, L43, L50, L53, L54, L58, L66, L68, L71, L72, L75, L82, L91, L99, L101, L112, L115, L116, L127–L129, L136, L142, L155, L168, L180, L182, L187, L193, L198, L202, L205, L213, L218, L221, L225, L234, L247, L252, L258, L267, L272, L296, L345, L347, L356, L369, L370, L373, L380, L389, L396, L397, L405, L410, L415, L498–L501, L503

\@opargbegintheorem . . . . . . E32, \underline{E35}

\@opcol K210, K218, K312, K330, \underline{K335} \@options . . . . . . . . . . . . . . . . . \underline{L181} \@othm . . . . . . . . . . . . . . . . . . E3, \underline{E20} \@outerparskip . . . . . . . . . . . . . . .

…. A8, A88, A114, A139, A209 \@outputbox . . . . . . . . . . . . . K101,

K353, K355, K374, K377, K378, K402, K404, K405, K410, K413, K418, K420, K427, K433, K435, K499, K525, K531, K541, K542, K565, K572, K635, K638, K641, K647, K648, K1456, K1462, K1470

\@outputdblcol . . . . . . . . K338, K1453 \@outputpage . . . . . . . . . . . . . . . . .

K321, K340, \underline{K458}, K1477, K1485 \@oval . . . . . . . . . . . . . . . D250, \underline{D251} \@ovbtrue . . . . . . . . . . . . . . . . . D252

\@ovdx . . . . . . . . \underline{D229}, D260, D266,

D268, D279, D281, D335– D338, D352, D353, D355, D367

\@ovdy . . . . . . . . \underline{D229}, D261, D267, D268, D273, D277, D342– D345, D356, D357, D359, D371

\@ovhorz . . . . . . . . . D265, D266, \underline{D278} \@ovltrue . . . . . . . . . . . . . . . . . D252 \@ovri . . B17, \underline{D229}, D259, D273, D282 \@ovro … \underline{D229}, D259, D266, D267,

D272, D277, D278, D287, D294 \@ovrtrue . . . . . . . . . . . . . . . . . D252 \@ovttrue . . . . . . . . . . . . . . . . . D252 \@ovvert . . . . . . . . . D263, D264, \underline{D270} \@ovxx . . . . . . . . . . . . . . . . . \underline{D229},

D254, D256, D260, D264, D265, D278, D332–D334, D338, D347, D348, D354, D355, D366

\@ovyy . . . . . . . . \underline{D229}, D255, D256, D261, D266, D270, D339–D341, D345, D347, D358, D359, D370

\@p@pfilename . . . . . . . . L27, L29, L34 \@pagedp . . . . . . . . . . . . . . . . K98,

K258, K263, K815, K1163, K1173 \@pageht . K97, K259, K263, K265–

K267, K272, K814, K1146, K1153 \@par . . . . . . . . . . . . . . . . . . . . \underline{h3}, h6

                                \@parboxrestore . . . . . . . . . . . . . .

…. B162, B190, B215, B242, G10, G87, G211, G270, K167, K462

\@parboxto . . . . . . . . . . . . . . . . \underline{B157} \@parmoderr . . . . . . . . \underline{g263}, G45, G189 \@parse@version . . L60, L61, L67, L68 \@partaux . . . . . . . . \underline{k5}, k87, k103,

k105, k106, k112, k121, k123, k126 \@partlist . . . . . . . . . . . . . . k84, k99 \@partswfalse . . . . . . . . . . . . . . . . k8 \@partswtrue . . . . . . . . . . . . . . . . k83 \@pass@ptions . L107, L112–L114, L321 \@pboxswfalse . . . . . . . . . . B160, B208 \@pboxswtrue . . . . . . . . . . . . . . . B170 \@penup . . . . . . . . . . . . . . . . z129, z130 \@percentchar . . . . . . . . . . . . . . . .

a48, L442, L444, L446, L448, L487 \@picbox . . . . . . . . \underline{D6}, D21, D27, D28 \@picht . . . . . . . . . . . . . \underline{D6}, D20, D27 \@picture . . . . . . . . . . . . . . D12, \underline{D18} \@picture@warn …. D117, D242, \underline{D246}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@pkgextension \underline{L16}, L40, L51, L69,

L113, L204, L207, L224, L288, L391 \@plus . . \underline{d13}, i183, F16, F151, J31,

K1512–K1514, K1517, K1518, K1522–K1524, K1528–K1530

\@pnumwidth . . . . . . . . . . . . . . . . F163 \@popfilename . . . . . . . . . . . \underline{L20}, L342

\@pr@videpackage . . . . . L90, L92, L99

\@preamble . . . . . . . . C170, C172, C179, C204, C223, C225, C226, C230, C245, C263, C264, C299

\@preamblecmds . . \underline{d33}, k57, L510, L511 \@preamerr . . . . . . . \underline{g248}, C241, C320

\@process@pti@ns . . . . . . . . . . . . .

. . . . . . . L154, L167, L169, L180

\@process@ptions . . L141, L143, L155
\@protected@testopt . . . . . . . d57, \underline{d69}

\@providesfile . . a40, a41, \underline{L102}, \underline{N187} \@ptionlist . . . . . . . . . . . . . . . . . .

\underline{L37}, L74, L140, L312, L318, L392 \@pushfilename . . . . . . . . . . \underline{L20}, L298 \@put . . . . . . . . . . . . \underline{D249}, D268, D294 \@qend . . . . . . . . . . . . . . . . d102, \underline{d247} \@qrelax . . . . . . . . . . . . . . d103, \underline{d247} \@rc@ifdefinable . d96, \underline{d98}, d208, l16 \@reargdef . . . . . . . . . . . . . . . . . \underline{d88} \@refundefined . . . . . . . . k46, \underline{x3}, y26 \@reinserts . . . . . . . K279, K282, \underline{K388} \@removeelement . . . . . . . . . \underline{f32}, L184 \@reqcolroom . . . . . . . . . . . . K814,

K815, K818, K820, K821, K826, K830, K832, K859, K860, K961, K963, K965, K968, K970, \underline{K1266}, K1383, K1387, K1390

\@reset@ptions …. L303, L343, \underline{L348}

\@resetactivechars . . . . . \underline{K445}, K461

\@resethfps . . . . . . . . . . . K928, \underline{K1333} \@restorepar . . 59, \underline{h6}, i139, i155, A123

\@reversemarginfalse . . . . G237, K82
\@reversemargintrue . . . . . . . . . G236

\@rightmark . . . . . . . . . . . . . . \underline{J16}, J28 \@rightskip . . . . . \underline{y78}, y82, A75, B186 \@rjfieldfalse . . . . . . . . . . C36, C68 \@rjfieldtrue . . . . . . . . . . . . . . C116 \@roman . . . . . . . . . . . . . . . . m35, \underline{m41} \@rsbox . . . . . . . . . . . . . . . B262, \underline{B263} \@rtab . . . . . . . . . . . . . . . . . C62, \underline{C77} \@rule . . . . . . . . . . . . . . . . B250, \underline{B251} \@sanitize . . \underline{d271}, H7, H18, H24, H35 \@savebox . . . . . . . . . . . . . . B57, \underline{B60} \@savemarbox . G199, G200, G203, \underline{G206} \@savepicbox . . . . . . . . . . . . B57, \underline{B64} \@savsf . . . . . . . . . . . \underline{i61}, i67, i72, i80 \@savsk . . . . . . . . . . . \underline{i61}, i66, i73, i81 \@scolelt . . . . . . . . . . . . K590, \underline{K632} \@sdblcolelt . . . . . . . . . . K606, \underline{K633} \@seccntformat . . . . . . . . . . F43, \underline{F94} \@secondoftwo . . . . . . . . a35, \underline{d181},

d245, k149, x21, J17, L46, L62, L80 \@secpenalty . . . . . . . . . i33, \underline{F19}, F33 \@sect . . . . . . . . . . . . . . . . . F37, \underline{F38} \@seqncr . . . . . . . . . . . . . . . . . . . \underline{z255} \@setckpt . . . . . . . . . . k121, \underline{k128}, y15

\@setfloattypecounts . . . . . . . . . .

. . . . . K798, K946, K1022, \underline{K1280} \@setfontsize . . . . . . . . . . . . . . . . \underline{s56} \@setfps . . . . . . . . . . . . . . . . . . . \underline{G25} \@setfpsbit … G61, G64, G67, \underline{K1324} \@setminipage . . . . . . . . . . . . . . . .

… B220, G12, G96, \underline{G104}, G225 \@setnobreak . . . . . . . G95, \underline{G98}, G224 \@setpar . . . . . . . . . . . . . . 59, \underline{h3}, A78 \@setref . . . . . . . . . . . . . . . . . . . \underline{x10} \@setsize . . . . . . . . . . . . . . . . . . . \underline{s56} \@settab . . . . . . . . . . . . . . . C62, \underline{C84} \@settodim . . . . . . . . . . . . . . . . . . \underline{n6} \@settopoint . . . . . . . . . . . . . . . . \underline{n11} \@sharp . . C176, C202, C232, C247,

C248, C266, C268, C270, C298 \@shipoutsetup . . . . . . . . . . . . . \underline{K458} \@shortstack . . . . . . . . . . . . D63, D64 \@sline . . . . . . . . . . . D81, \underline{D84}, D140 \@slowromancap . . . . . . . . . . m42, \underline{m43} \@spaces . . . . . . . . . . . . . . . . . . . \underline{g192} \@specialoutput . . . . . . . . . . . . \underline{K204}

\@specialpagefalse . . . . . . K78, K470
\@specialpagetrue . . . . . . . . . . . . J9

\@specialstyle . . . . . . . . . . . J9, K470 \@sptoken . . . . . . . . . . . . . d254, \underline{d264} \@sqrt . . . . . . . . . . . . . . . . . . . . . \underline{z202} \@ssect . . . . . . . . . . . . . . . . F36, \underline{F95} \@stackcr . . . . . . . . . . . . . . D70, \underline{D73} \@star@or@long . . . . . . . . \underline{d39}, d44,

d90, d112, d118, d148, d157, d190 \@startcolumn . . . . . K211, K218, \underline{K577}

\@startdblcolumn   \underline{K577}, K1483, K1489

\@startfield . . . . . . . . . . . . . . . . .

. C30, \underline{C48}, C83, C95, C116, C124

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@startline . . . . . . \underline{C22}, C59–C61, C74 \@startpbox . . . . . . . . . . . . . C173,

C203, C233, C297, \underline{C349}, C351 \@startsection . . . . . . . . . . . . . . \underline{F22} \@starttoc . . . . . . . . . . . . . . . . \underline{F132} \@stopfield . . . . . . C34, \underline{C50}, C61,

C77, C84, C116, C118, C127, C129 \@stopline . . . . . . . . . \underline{C32}, C58, C76 \@stpelt . . . . . . . . . . . . . . . m20, \underline{m23} \@strip@args . . . . . . . . . . . . . . . . . \underline{l70} \@svector . . . . . . . . . . . . D132, \underline{D140} \@sverb . . . . . . . . . . . y134, \underline{y135}, y142 \@svsec . . . . . . . . . F40, F43, F49, F61 \@svsechd . . . . . . . . . . F59, F84, F104 \@sxverbatim . . . . . . . . . . . . \underline{y94}, y119 \@tabacckludge . . . . . . . . . . l148, l149 \@tabacol . . . . . . . . . . . . . C158, \underline{C225} \@tabarray . . . . . . . C152, C160, \underline{C161} \@tabclassiv . . . . . . . . . . . C160, \underline{C295} \@tabclassz . . . . . . . . . . . . C159, \underline{C249} \@tabcr . . . . . . . . . . . . . . . . \underline{C58}, C64 \@tabfbox . . . . . . . . . . \underline{C16}, C71, C73 \@tablab . . . . . . . . . . . . . . C63, \underline{C117} \@tabminus . . . . . . . . . . . . C63, \underline{C108} \@tabplus . . . . . . . . . . . . . C63, \underline{C101} \@tabpush . . . . . . . . . . . . . . . . . . .

\underline{C11}, C68, C76, C127, C130, C132 \@tabrj . . . . . . . . . . . . . . . C63, \underline{C115} \@tabular . . . . . . . . C156, C157, \underline{C158} \@tabularcr . . . . . . . . . . . . C160, \underline{C187} \@tempboxa . \underline{e13}, l68, n6, n7, A192,

A198, A199, A201, B13–B16, B21–B24, B100, B116, B123, B133, B211, B234, B269–B271, B278–B281, D173, D174, D244, D245, D259, D262, D267, D268, D287, D288, D293, D294, D360, D376, F121, F122, G195, G229, K255, K300, K301, K439, K489, K496, K497, K523, K527, K539, K545, K552–K555, K559, K567

\@tempcnta . . . . . . . . . . . d76, d77, d81, \underline{e7}, r582–r585, r589, C209– C212, D87, D88, D110–D112, D122–D125, D127, D128, D141, D142, D147, D148, D150– D152, D155–D165, D194–D198, D216–D221, D238–D241, D243, D245, D271, D275, D289–D292, D298–D303, D351, D365, G49, G55, G57, G70, G71, G77, G78, K16, K18, K20, K683– K686, K708, K711, K744, K747, K855, K1025, K1028, K1135, K1137, K1140, K1142, K1144, K1166, K1314, K1315, K1319, K1325, K1329, N39, N44–N46

\@tempcntb . . . . . . . d80, d81, d83, d84, \underline{e7}, r583, r587, r589, D149– D151, D153–D155, D271, D272, D275, D276, G75–G77, K17, K20, K21, K1325–K1327, N40, N44

\@tempdima . . . . . . \underline{e10}, z116, z119, z125, B27, B28, B115, B116, B121–B123, B125, B161, B162, B209, B213, B252, B254, B267, B269, B275, B278, C37–C39, C79–C82, C197, C198, D106, D107, D109–D114, D237–D239, D245, D260, D261, D263, D264, D290, D292, D297– D299, F156, F157, F166, G115, G117, G150–G152, K177–K179, K408, K410, K411, K416, K421, K425, K430, K434, K670, K673, K688, K698, K1087, K1088, K1091, K1092, K1145–K1148, K1151, K1154, K1157, K1159, K1431, K1432, K1434, K1435

\@tempdimb . . . . . . . . . . \underline{e10}, o453, o457, p133, p134, p399, p432, p433, p442, p443, p447, p469, p472, p475, p477, B164, B165, B268, B270, B276, B279, D107, D108, D256–D258, D285, D286, D295, D296, K688–K691, K698

\@tempdimc . . . . . . . . . . . . . . \underline{e10},

p426, p427, p429, p430, p432, p433 \@tempskipa . . . . . . . . \underline{e14}, i19, i22,

i23, p135, p136, A113–A115, A137, A139–A141, A209–A211, F25, F27, F28, F33, F45, F46, F71, F72, F74, F86, F87, F96, F97, K1203, K1204, K1206, K1214

\@tempskipb . . . . . . . . . . . . . . \underline{e14},

i87, i89, i91, i94, i96, i106, i122, i125 \@tempswafalse . . . . . . . . . . . . . . .

a25, k97, o69, r205, r255, r319,

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

r400, r811, r817, v78, y17, y104, K714, K750, K1031, L423, I13

\@tempswatrue …. a26, k95, k100, o72, r208, r258, r322, r403, r774, v68, y41, y109, K1033, K1056, K1392, K1409, L422, I13

\@temptokena . . . . . . . . . \underline{e16}, y44, y45 \@testdef . . . . . . . . . . . . . . . y16, \underline{y39} \@testfalse . . . . . . . . . K12, K14, K15 \@testfp . . K657, K687, \underline{K1317}, K1443 \@testopt . . . . . . . . . . . . d20, d46,

\underline{d67}, d71, d114, i3, i4, i13, i14, z242 \@testpach . . . . . . . . . . . . C237, C313 \@testpatch . . . . . . . . . . . . . . . . \underline{C313} \@testtrue K13, K21, K659, K692, K1321

\@text@composite . . . . . . . . . . . . . \underline{l70}
\@text@composite@x . . . . . . . . . . . . \underline{l70}

\@textbottom . . . . . . . . . . . . . . . . .

J31, J33, K380, K422, K436, \underline{K442}

\@textfloatsheight . . K346, K811,

K813, K862, K863, K868, \underline{K1266} \@textmin . . . . . . . . . . . . . . G174,

G175, K93, K813, K817, K820, K821, K965, K1049, K1051, K1067, K1374, K1376, K1378

\@textsuperscript . G250, G252, \underline{G253}

\@texttop . J31, J33, K376, K403, \underline{K442} \@tf@r . . . . . . . . . . . . . . . . . . . f25, f26 \@tfor . . . . . . . . . . . . . . \underline{f25}, k150,

k210, v69, B36, C235, D253, G50 \@tforloop . . . . . . . . . . . f27, f28, f30 \@thanks . . . . . . . . . . . . . . . F10, \underline{F13} \@thefnmark . . . . . . . . . . . . . B244,

G249, G250, G257, G262, G272, G281, G286, G297, G302

\@thefoot … K105, K473, K476, K503 \@thehead … K104, K473, K475, K493 \@themargin … K55, K474, K476, K488 \@themark . . . . . J18, J21, J24–J26, \underline{J29} \@thm . . . . . . . . . . . E12, E18, E24, \underline{E26} \@thmcounter . . . . . . . . . E11, E17, \underline{E33} \@thmcountersep . . . . . . . . . E10, \underline{E33} \@title . . . . . . . . . . . . . . . . . . . . . \underline{F3} \@tocrmarg . . . . . . . . . . . . . . . . F152 \@toodeep …. \underline{g238}, A36, A219, A230 \@toplist K45, K302, K303, K518,

K524, K534, K535, K751, K763 \@topnewpage . . . . . . . . . . . . . . . \underline{K147} \@topnum . . . . . . . . . . . G163, K86,

K748, K749, K763, K767, K775, K1008, K1013, K1239, K1260

\@toproom G165, K87, K751, K763, K1240 \@topsep . . . . . . . \underline{A1}, A71, A73, A158 \@topsepadd . \underline{A1}, A59, A61, A71, A121

\@totalleftmargin . . . . . . . y101,

\underline{A9}, A53, A54, B185, C37, C67, C72 \@tracemessage . . . . . . . . . . . . \underline{K1228} \@traceval . . . . . . . . . . . . . . . \underline{K1228} \@trivlist . . . . . . . . . A48, \underline{A57}, A92 \@tryfcolumn K580, K597, \underline{K611}, K1444 \@trylist … K620, K623, K652, K672

\@twoclasseserror . . . . . . L195, \underline{L411}
\@twocolumnfalse . . . . . . . K80, K128

\@twocolumntrue . . . . . . . . . . . . K154

\@twoloadclasserror . . . . . L341, \underline{L406}

\@twosidefalse . . . . . . . . . . . . . . K81 \@typein . . . . . . . . . . . . d19, d20, d26

\@typeset@protect . . . . d70, d213,

\underline{d220}, d222, l21, l27, l135, l143, s57 \@uclclist . . . . . . . . . . . . . . . . \underline{N118} \@undefined . . . . . . . a15, a16, a50–

a52, a73, a81, a89, a96, a147, a151, a177, a184, a244, a245, b86, b89, d192, g31, k51, k52, k137, o308, o399, o467, v103, D325, L4, L331, L357, L474, L477, L491, N142, N177–N181, I33

\@unexpandable@noexpand . . . . . . \underline{d188}
\@unexpandable@protect  \underline{d188}, d225,

d231, d236, k75, C231, J19, J22

\@unknownoptionerror L352, \underline{L381}, L394
\@unprocessedoptions . . . . . . . . . .

… L179, L223, L328, L332, L396 \@unused . . d4, g15, g35, g62, \underline{k3}, L496

\@unusedoptionlist . . . . . . . . . . . .

. k12, k14, \underline{L11}, L132, L133, L185 \@upline . . . . . . . . . D166, \underline{D167}, D173 \@upordown D91, D92, D100, D118, D144 \@upvector . . . . . . . . . . . D139, \underline{D173} \@use@ption . . . . . . . . . . . . . . . . . .

… L150, L162, L172, L174, \underline{L183}

\@use@text@encoding . . . . . . . . . . \underline{l105}

\@vbsphack . . . . . . . . . . . . . . . . . . \underline{i86} \@verb . . . . . . . . . . . . . . . . y134, \underline{y142} \@verbatim . . . . . . . . . \underline{y99}, y116, y119 \@vereq . . . . . . . . . . . . . . . . t359, t360 \@viiipt . . . . . . . . . . . . . . . . . . . \underline{o486}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\@viipt . . . . . . . . . . . . . . . . . . . . \underline{o485} \@vipt . . . . . . . . . . . . . . . . . . . . . \underline{o484} \@vline . . . . . . . . . . . . . . . D80, \underline{D166} \@vobeyspaces . . . . . . . \underline{y92}, y116, y142 \@vpt . . . . . . . . . . . . . . . . . . . . . . \underline{o483} \@vspace . . . . . . . . . . . . . . . . . . . \underline{i132} \@vspacer . . . . . . . . . . . . . . . . . . \underline{i132} \@vtryfc . . . . . . . . . . . . . K626, \underline{K634} \@vvector . . . . . . . . . . . . D131, \underline{D139} \@vwrend . . . . . . . . . . . . . . . . . . L509 \@warning . . . . . . . . . . . . . . . . . . \underline{g188} \@wckptelt . . . . . . . . . . . . k122, \underline{k125} \@whiledim . . . . . . . . . . . \underline{f7}, D44, D99 \@whilenoop . . . . . . . . . . . . . . . . . . . \underline{f3} \@whilenum … d81, \underline{f3}, C211, D39,

D195, D197, D217, D220, D365 \@whilesw \underline{f10}, K212, K312, K321, K1484 \@whileswnoop . . . . . . . . . . . . . . . . \underline{f10} \@wholewidth . . . . . B85, B87, B88,

B90, B92–B95, \underline{D2}, D48, D50, D57, D168, D171, D208, D215, D274, D280, D321, D322, D362

\@width . . . . . b193, \underline{d13}, i179, l211, l214, p146, t499, B90, B92, B129, B136, B254, B284, C168, C198, C312, C331, D120, D168, D171, D187, D194, D208, D215, D274, D362, G244, K1173, K1467

\@wrglossary . . . . . . . . . . . . H25, \underline{H30} \@wrindex . . . . . . . . . . . . . . . H8, \underline{H13} \@writeckpt . . . . . . . . . . . . k110, \underline{k119} \@writefile . . . . . . . . . k26, \underline{y42}, F147 \@writesetup . . . . . . . . . . . . . . . \underline{K458} \@wrong@font@char l106, l110, o400, \underline{o411} \@wtryfc . . . . . . . . . . . . . K636, \underline{K646} \@x@protect . . . . . . . . . . . . . d73, \underline{d212} \@x@sf . . . . . . . . . . . . . . . G291, G293

\@xDeclareMathDelimiter . . r597, \underline{r654}

\@xaddvskip . . . . . . . . . . . . . . \underline{i86}, i107 \@xarg . . . . . . . . . . D77, D80, D85,

D89, D90, D119, D121, D126, D127, D131, D137, D145, \underline{D306}

\@xargarraycr . . . . . C184, C193, \underline{C197} \@xargdef . . . . . . . . . . . . . . . . . . \underline{d47} \@xarraycr . . . . . . . . . . . . C181, C182 \@xbitor . . . . . . . . . . . . . . . K15, K17 \@xcentercr . . . . . . . . . . . . . . y68, \underline{y69} \@xdblarg . . . . . . . . . . . . . . . . . . \underline{d269} \@xdblfloat . . . . . . . . . . . . . . . . \underline{G156} \@xdim . . . . . . . . . . . . . . . . . . D34,

D40, D42, \underline{D310}, D366–D369, D375 \@xeqncr . . . . . . . . . . . . . . . . . . . \underline{z234} \@xexnoop . . . . . . . . . . . . . \underline{C205}, C215 \@xexpast . . . . . . . . . . . . . C206, \underline{C207} \@xfloat . . . . . . G19, G20, \underline{G25}, G158 \@xfootnote . . . . . . . . . . . G256, \underline{G259} \@xfootnotemark . . . . . . . G279, \underline{G283} \@xfootnotenext . . . . . . . G296, \underline{G299} \@xhline . . . . . . . . . . . . . . C325, \underline{C326} \@xifnch . . . . . . . . . . . . . . d255, \underline{d265} \@xiipt . . . . . . . . . . \underline{o490}, t83, t85, t86 \@xipt . . . . . . . . . . . . . . . . . \underline{o489}, t82 \@xivpt . . . . . . . . . . . . . \underline{o491}, t84, t86 \@xmpar . . . . . . . . . . . . . . G197, \underline{G198} \@xnewline . . . . . . . . . . . . i39, i40, \underline{i44} \@xnext . . . . . . . . . . . . . . . . K10, K11 \@xnthm . . . . . . . . . . . . . . . . . . E5, \underline{E6} \@xobeysp . . . . . . . . . . . \underline{i168}, y93, \underline{y94}

\@xprocess@ptions . L141, L156, L168

\@xpt . . . . . . . . . . . . \underline{o488}, t81, t84, t85 \@xsect . . . . . . . . . . . . F69, \underline{F70}, F106 \@xtabcr . . . . . . . . . . . . . . . C58, \underline{C59} \@xtabularcr . . . . . . . . . . . C188, \underline{C189} \@xthm . . . . . . . . . . . . . . . . . E28, \underline{E29} \@xtryfc . . . . . . . . . . . . . K623, \underline{K651} \@xtypein . . . . . . . . . . . . . . . d20, d21 \@xverbatim . . . . . . . . . . . . . \underline{y94}, y116 \@xviipt . . . . . . . . . . . . \underline{o492}, t85, t87 \@xxpt . . . . . . . . . . . . . . \underline{o493}, t86, t87 \@xxvpt . . . . . . . . . . . . . . . . \underline{o494}, t87 \@xxxii . . . . . . \underline{e2}, l302, l304, G76,

K654, K655, K684, K685, K1283 \@xympar . . . . . . . . . G201, G205, \underline{G227} \@yarg . . . . . . . . . . . . . . . . . . D77,

D81, D85, D86, D91, D126, D132, D139, D141, D166, \underline{D306}

\@yargarraycr . . . . . C185, C195, \underline{C199} \@yargdef . . . . . . . . d51, d62, \underline{d75}, d89 \@ydim D35, D40, D42, D311, D370–D374 \@yeqncr . . . . . . . . . . . . . . . . . . . \underline{z234} \@ympar . . . . . . . . . . . . . . G197, \underline{G202} \@ynthm . . . . . . . . . . . . . . . . . E5, \underline{E14} \@ythm . . . . . . . . . . . . . . . . . E28, \underline{E29} \@ytryfc . . . . . . . . . . . . . K664, \underline{K666} \@yyarg … D85–D87, D90, D145, \underline{D306} \@ztryfc . . . . . . . . . . . . . K671, \underline{K682} \[ o361, z169, \underline{z169}, z194, z275, \underline{z275}, N70

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\\ . . . . . . . . . . 61, a21, a189–a192, a195, a202–a205, a208, a215– a218, a221, a228, a230, a231, a234, a237, b13, d187, d271, g272, \underline{i35}, i190, k209, k224, l383, o349, t170, y75, y82, y88, y96, z216, z310, B190, B268, B270, C64, C152, C160, C174, D70, N55

\{ a3, a7, a21, b2, b13, g25, l224, l385,

o350, t168, y95, z59, z108, N58 \} . . . . . . . . . a8, a21, b3, b13, g24,

l225, l386, o351, t169, y95, z59, N59 \] . . . . . . . . . . . . . . . . b234, o362,

\underline{z169}, z180, z195, z285, \underline{z285}, N71 \^. . . . . . . . . . . a10, a19, a22, a61,

a248, b7, b9, b11, b14, b158, b159, b173, b174, d5, d272, i190, i192, i194, l155, l207, l265, l330, l381, l463, l470, l474, l479, l484, l489, l496, l502, l503, l509, l514, l551, o347, o348, o353, L419–L421, L473, L476, L479, N56, N62–N65, N78–N80, N107–N110, N112–N115, N117

\_. . . . . . . . . . . . . . . a22, b8, b14,

d272, l230, t173, z165, z166, N57 \` . l156, l266, l297, l328, l400, l461,

l468, l472, l477, l482, l487, l494, l498, l499, l507, l512, l552, l590, o363, s154, y143, B181, C63, N72

\| . . . . . . . . . . . . l384, m59, t456, N73 \~ . . . . . . . . . . . . . . a22, b10, b14,

d272, g23, i170, l163, l208, l267, l331, l382, l464, l476, l480, l490, l506, l510, l553, y137, y147, N60

\␣ . . . . . . . . . . a21, a38, b13, b158, b176, d271, d285, g22–g25, g28, i169, o346, o477, q11, t171, y92, y93, E36, E38, L104, N50, I17

A

\A . . . . . . . . . . . . . . . . . . . N75, N102 \a . . . . . . . . . . . . . \underline{l148}, \underline{C1}, N76, N91 \AA . . . . . . . . . . . \underline{b164}, l164, l305, l354 \aa . . . . . . . . . . . \underline{b164}, l169, l299, l364

\abovedisplayshortskip . . b139, z318
\abovedisplayskip . . . . . . . . . . . .

…. b138, z311, z313, z315–z318 \accent . . . . . l69, l276, l300, l343, l564 \active . . . . . . . . . a11, a61, a248,

b10, b11, b173, b174, b176, y92, y93, y136, y145, z150, z165, L419–L421, L473, L476, L479

\acute . . . . . . . . . . . . . . . . . . . . . t401 \add@accent . . . . . . . . . . . . . . . l65, \underline{l67}

\addcontentsline . F53, F63, \underline{F142}, G7

\addpenalty . . . . . . . . . \underline{i113}, A121,

A157, A162, F33, K290, K876 \addto@hook . . . . . . . . . . . . . . . . . .

. o125, o127, \underline{o482}, r187, r278, r282, r299, r423, r429, r437, r453, r456, r459, r783, r790, r793

\addtocontents . . . . . . . . . F143, \underline{F144} \addtocounter . . . . . . . . . . . . \underline{m6}, m18 \addtolength . . . . . 119, \underline{n5}, z313, z315 \addtotcounter . . . . . . . . . . . . . . 115 \addtoversion . . . . . . . . . . . . . . . \underline{q130} \addvspace . . . . . . \underline{i100}, y69, A121,

A158, A159, A163, A211, F33 \adjdemerits . . . . . . . . . . . . . . . . b118 \AE . . . . . . l165, l280, l355, l568, N131 \ae . . . . . . l170, l283, l365, l572, N131

\afterassignment . . . . b189, b192,

d226, d232, l137, l145, o243, z129 \aftergroup . . . . . . o66, o257, p156,

p222, r70, r82, r90, v46, y140, B73, K459, K465, K466, K507

\aleph . . . . . . . . . . . . . . . . . . . . . t224 \alloc@ … b47–b51, b53–b56, \underline{b57}, o23

\allocationnumber . . . . . . . . . . . .

. . \underline{b37}, b59–b61, b67–b69, C4, C9 \allowbreak . . . . . . . . . . . . . \underline{b196}, z40 \Alph . . . . . . . . . . . . . . . . . . 115, \underline{m38} \alph . . . . . . . . . . . . . . . . . . 115, \underline{m37} \alpha . . . . . . . . . . . . . . . . . . . . . t184 \alpha@elt . . . . . . . . . . . . . . . . . .

. \underline{r36}, r191, r373, r475, r782, r783 \alpha@list r32, \underline{r34}, r200, r361, r373,

r418, r473, r474, r778, r784, r785 \amalg . . . . . . . . . . . . . . . . . . . . . t288 \and . . . . . . . . . . . . . . . . . . . . 332, \underline{F14} \angle . . . . . . . . . . . . . . . . . . . . . t240 \approx . . . . . . . . . . . . . . . . . . . . t328 \arabic . . . . . . . . . . . . . 115, \underline{m34}, E33 \arccos . . . . . . . . . . . . . . . . . . . . . z13 \arcsin . . . . . . . . . . . . . . . . . . . . . z10 \arctan . . . . . . . . . . . . . . . . . . . . . z16

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\arg . . . . . . . . . . . . . . . . . . . . . . . . z26 \array . . . . . . . . . . . . . . . . \underline{C150}, \underline{C162} \arraycolsep . . . . . . . . . . . . . . . . .

z219, z220, z323, z324, C225, \underline{C303}

\arrayrulewidth . . . . . . . . . . . . . .

…. C289, \underline{C303}, C311, C312, C324, C328, C331, C341, C343

\arraystretch . . . . . C166, C167, \underline{C307} \Arrowvert . . . . . . . . . . . . . . . . . t452 \arrowvert . . . . . . . . . . . . . . . . . t450 \ast . . . . . . . . . . . . . . . . . . . t153, t304 \asymp . . . . . . . . . . . . . . . . . . . . . t352 \AtBeginDocument . . . . . k47, \underline{L366}, I34 \AtBeginDvi . . . . . . . . . . . . . . . . . \underline{K67} \AtEndDocument . . . . . . . . . . . . . \underline{L366} \AtEndOfClass . . . . . . . . . . z274, \underline{L366} \AtEndOfPackage … L179, L223, \underline{L366} \atopwithdelims . . . . . . . z57, \underline{z58}, z59 \aut@global . . . . . . d54, d86, d124,

d134, d138, d144, d198, \underline{d279}, d283 \author . . . . . . . . . . . . . . . . . . 332, \underline{F5}

B

\b . . . . . . . . . . . . l157, l272, l339, l560 \backslash . . . . . . . . . . . . . t170, t471 \badness . . . . . . . . . . . . . . . . . . . b97 \bar . . . . . . . . . . . . . . . . . . . . . . . t405 \baselineskip . . . . . . . . . . . b157,

b187, b223, p140–p142, p144, p145, t396, z112, z113, z121, z127, z131, B188, C178, D67, D177, K190, K221, K485, K500

\baselinestretch . . . . . . . . . . . . .

…. o234, p118, p119, p138, \underline{p199} \batchmode . . . . . . . . . . . . . . . . . .

k186, k187, q96, s121, N151, N172 \begin . . . . . . . . . . . . . . . . . . g230,

g232, p7, t4, u4, y50, \underline{y51}, z278, F14, F17, G144, G146, L232, M3

\belowdisplayshortskip . . b141, z317
\belowdisplayskip . . . . . . b140, z316

\best@size … p400, p434, p440, p446 \beta . . . . . . . . . . . . . . . . . . . . . . t185 \bezier . . . . . . . . . . . 305, D328, \underline{D329} \bfdefault . . . . . . . . . . . . . . s14, \underline{t32} \bfseries . . . . . . . . . . . . . . . . . . .

. s12, s13, v18, x13, E36, E38, I20 \bgroup . . . . . . . . . . . . . . . . . . . . \underline{b171} \bibcite . . . . . . . . . . . . . . . I7, I9, \underline{I10} \bibdata . . . . . . . . . . . . . . . . \underline{I25}, I29 \bibitem . . . . . . . . . . . . . . . . . . . . . \underline{I3} \bibliography . . . . . . . . . . . . 364, \underline{I27}

\bibliographystyle . . . . . . . . 364, \underline{I32}

\bibstyle . . . . . . . . . . . . . . . \underline{I25}, I37 \Big . . . . . . . . . . . . . . . . t502, z44–z46 \big . . . . . . . . . . . . . . . . . . . t501, \underline{z41} \bigbreak . . . . . . . . . . . . . . . . . . \underline{b203} \bigcap . . . . . . . . . . . . . . . . . . . . t260 \bigcirc . . . . . . . . . . . . . . . . . . . t301 \bigcup . . . . . . . . . . . . . . . . . . . . t261 \Bigg . . . . . . . . . . . . . . . t504, z50–z52 \bigg . . . . . . . . . . . . . . . t503, z47–z49 \Biggl . . . . . . . . . . . . . . . . . . . . . . z50 \biggl . . . . . . . . . . . . . . . . . . . . . . z47 \Biggm . . . . . . . . . . . . . . . . . . . . . . z51 \biggm . . . . . . . . . . . . . . . . . . . . . . z48 \Biggr . . . . . . . . . . . . . . . . . . . . . . z52 \biggr . . . . . . . . . . . . . . . . . . . . . . z49 \Bigl . . . . . . . . . . . . . . . . . . . . . . . z44 \bigl . . . . . . . . . . . . . . . . . . . . . . . z41 \Bigm . . . . . . . . . . . . . . . . . . . . . . . z45 \bigm . . . . . . . . . . . . . . . . . . . . . . . z42 \bigodot . . . . . . . . . . . . . . . . . . . t268 \bigoplus . . . . . . . . . . . . . . . . . . t267 \bigotimes . . . . . . . . . . . . . . . . . t266 \Bigr . . . . . . . . . . . . . . . . . . . . . . . z46 \bigr . . . . . . . . . . . . . . . . . . . . . . . z43 \bigskip . . . . . . . . . . . . . . . b208, \underline{i162} \bigskipamount . b207, i164, \underline{i165}, G240 \bigsqcup . . . . . . . . . . . . . . . . . . t271

\bigtriangledown . . . . . . . . . . . . t276

\bigtriangleup . . . . . . . . . . . . . . t275 \biguplus . . . . . . . . . . . . . . . . . . t259 \bigvee . . . . . . . . . . . . . . . . . . . . t257 \bigwedge . . . . . . . . . . . . . . . . . . t258 \binoppenalty . . . . . . . . . . . . . . . b109 \bm@b . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bm@c . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bm@l . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bm@r . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bm@s . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bm@t . . . . . . . . . . . . . . . . . . . . . . \underline{B21} \bmod . . . . . . . . . . . . . . . . . . . . . . . \underline{z35} \boldmath . . . . . . . . . . . . . . . . j14, s49 \bordermatrix . . . . . . . . . . . . . . . \underline{z115} \bot . . . . . . . . . . . . . . . . . . . . . . . t239 \botfigrule . . . . . . . . . . . K544, \underline{K1531} \botmark . . . . . . . . . . . . . . . J27, K510 \bottomfraction . . . . . . . G167, \underline{K1500} \bowtie . . . . . . . . . . . . . . . . . . . . t377

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\Box . . . . . . . . . . . . . . . . . . . . . . . . s92 \boxmaxdepth . . . . . . . . . . . . . . . . .

…. b132, D251, D285, K356, K375, K419, K517, K526, K566

\brace . . . . . . . . . . . . . . . . . . . . . . \underline{z59} \braceld . . t436, t440, t441, t443, t445 \bracelu . . . . . . . . . . . t438, t442, t444 \bracerd . . . . . . . . . . . t437, t442, t444 \braceru . . . . . . . . . . . t439, t441, t445 \bracevert . . . . . . . . . . . . . . . . . \underline{t489} \brack . . . . . . . . . . . . . . . . . . . . . . z58 \break . . . . . . . . . . . . . \underline{b196}, b201, i53 \breve . . . . . . . . . . . . . . . . . . . . . t406 \brokenpenalty . . . . . . . . . . . . . . b114 \buildrel . . . . . . . . . . . . . . t368, \underline{z107} \bullet . . . . . . . . . . . . . . . . . . . . t290 \bx@A . . . . . . . . . . . . . . . . . . K23, K41 \bx@B . . . . . . . . . . . . . . . . . . K24, K41 \bx@C . . . . . . . . . . . . . . . . . . K25, K41 \bx@D . . . . . . . . . . . . . . . . . . K26, K41 \bx@E . . . . . . . . . . . . . . . . . . K27, K41 \bx@F . . . . . . . . . . . . . . . . . . K28, K42 \bx@G . . . . . . . . . . . . . . . . . . K29, K42 \bx@H . . . . . . . . . . . . . . . . . . K30, K42 \bx@I . . . . . . . . . . . . . . . . . . K31, K42 \bx@J . . . . . . . . . . . . . . . . . . K32, K42 \bx@K . . . . . . . . . . . . . . . . . . K33, K43 \bx@L . . . . . . . . . . . . . . . . . . K34, K43 \bx@M . . . . . . . . . . . . . . . . . . K35, K43 \bx@N . . . . . . . . . . . . . . . . . . K36, K43 \bx@O . . . . . . . . . . . . . . . . . . K37, K44 \bx@P . . . . . . . . . . . . . . . . . . K38, K44 \bx@Q . . . . . . . . . . . . . . . . . . K39, K44 \bx@R . . . . . . . . . . . . . . . . . . K40, K44

C

\c . . . . . . . . . l158, l275, l342, l425,

l427, l452, l454, l467, l493, l563 \c@bottomnumber . . G161, G166, \underline{K1498} \c@dbltopnumber . . G160, G172, \underline{K1505} \c@enumi . . . . . . . . . . . . . . . . . . \underline{A214} \c@enumii . . . . . . . . . . . . . . . . . \underline{A214} \c@enumiv . . . . . . . . . . . . . . . . . \underline{A214} \c@equation . . . . . . . . \underline{z196}, z229, z330

\c@errorcontextlines . . . . . . . . . \underline{g181}

\c@footnote . . . . . . . . F11, G246, G285 \c@mpfootnote . . . . . . . . . . B216, G248 \c@ncel . . . . . . . . . . . . . . . . t362, t363 \c@page …. w3, w6, w7, K119, K1140 \c@secnumdepth . . F39, F54, F64, \underline{F123} \c@tocdepth . . . . . . . . . . . . \underline{F123}, F150 \c@topnumber . . . . . G159, G163, \underline{K1494} \c@totalnumber … G162, G168, \underline{K1501} \cal . . . . . . . . . . . . . . . . . . . . . . . \underline{s155}

                                       \calculate@math@sizes . . . \underline{o448}, p173

\cap . . . . . . . . . . . . . . . . . . . . . . . t281 \capitalacute . . . . . . . . . . . l634, l770 \capitalbreve . . . . . . . . . . . l641, l777 \capitalcaron . . . . . . . . . . . l640, l776 \capitalcedilla . . . . . . . . . l629, l767

                                       \capitalcircumflex . . . . . . . l635, l771

\capitaldieresis . . . . . . . . l637, l773

                                       \capitaldotaccent . . . . . . . l643, l779

\capitalgrave . . . . . . . . . . . l633, l769

                                       \capitalhungarumlaut . . . . . l638, l774

\capitalmacron . . . . . . . . . . l642, l778 \capitalnewtie . . . . . . . . . . l647, l783 \capitalogonek . . . . . . . . . . l631, l768 \capitalring . . . . . . . . . . . . l639, l775 \capitaltie . . . . . . . . . . . . . l645, l781 \capitaltilde . . . . . . . . . . . l636, l772 \caption . . . . . . . . . . . . . . . . . . . . \underline{G4} \cases . . . . . . . . . . . . . . . . . . . . . \underline{z108} \cdot . . . . . . . . . . . . . . . . . . . . . . t303 \cdotp . . . . . . . . . . . . . . . . . t390, t395 \cdots . . . . . . . . . . . . . . . . . . . . . t395 \cdp@elt . . . . . . . . . . . . . . . . o71,

\underline{o91}, o102, o103, o122, o125, o127, r125, r207, r257, r321, r402

\cdp@list … o73, \underline{o89}, o103, o129,

o130, r143, r209, r259, r323, r404 \center . . . . . . . . . . . . . . . . . . . . y72 center (environment) . . . . . . . . . . \underline{y72} \centering . . . . . . . . . . . . . . y72, \underline{y74} \centerline . . . . . . . . . . . . . . . . \underline{B285} \cf@encoding …. l29, l36, l39, l48,

l107, l113, o202, o212, o222, \underline{o241} \ch@ck . . . . . . b58, b63–b66, \underline{b70}, L430 \changes . . . . . . . . . . . . . . . . . . G145 \char . . . . . . . . . . . . . . . l274, l277,

l307, l310, l317, l324, l341, l344, l349, l351, l353, l534, l562, l565, l594, l601, l608, l630, l632, l680, s55, y148, z148, D125, D152, D165, D173, D176, D245, D272, D276, D289, D290, D292, D303

\chardef . . a11, a17, a18, b10, b16– b20, b51, b54–b56, b68, b217– b219, e2, l8, o23, C4, C9, L429

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\check . . . . . . . . . . . . . . . . . . . . . t407 \check@command . . . . . . . . . d157, \underline{d159} \check@icl . . . . . . . . . . . . . . . . . .

. . v9, \underline{v26}, v31, v37, v45, v52, v54 \check@icr . . . . . . . . . . . . . . . . . .

. . v9, \underline{v26}, v32, v38, v46, v55, v60 \check@mathfonts . j5, o263, o265, \underline{p204} \check@nocorr@ . . . . . . . . . . . . . . \underline{v28} \check@range . . . . . . . o314, p335, \underline{p336} \check@single . . . . . . o315, p334, \underline{p359} \CheckCommand . . . . . . . . . . . . . . . \underline{d157} \chi . . . . . . . . . . . . . . . . . . . . . . . t204 \choose . . . . . . . . . . . . . . . . . . . . . \underline{z57} \circ . . . . . . . . . . . . . . . . . . . . . . t300 \circle . . . . . . . . . . . . . . D247, \underline{D283} \citation . . . . . . . . . . . . \underline{I11}, I19, I42 \cite . . . . . . . . . . . . . . . . . . . 364, \underline{I12} \cl@@ckpt . . . . . . . . . . . . . . k122, \underline{m24} \cl@page . . . . . . . . . . . . . . . . . . . . w4 \ClassError . . . . . . . . . . . . . . . . . . \underline{g88} \ClassInfo . . . . . . . . . . . . . . . . . . \underline{g88} \ClassWarning . . . . . . . . . . . . . . . . \underline{g88}

\ClassWarningNoLine . . . . . . . . . . . \underline{g88}

\cleaders . . . . . . . . . b232, t431, t434

\cleardoublepage . . . . . . . . . . . \underline{K119}

\clearpage . . . . . . . . . . . . . . k91, k109, y11, y48, \underline{K106}, K119, K124, K148, K325, K331, K1448

\cline . . . . . . . . . . . . . . . . . . . . \underline{C332} \clubpenalty . . . . . b111, k10, k19,

A181, A183, F83, F89, F113, F118 \clubsuit . . . . . . . . . . . . . . . . . . t252 \col@number … \underline{K76}, K129, K156, K168 \colon . . . . . . . . . . . . . . . . . . . . . t391

\color@begingroup . . . . . . . . o474,

z87, z103, B13, \underline{B47}, B101, B212, B245, C49, C53, G274, K359

\color@endbox . . . . . . . . . . . . \underline{B47},

G141, G217, K172, K494, K504 \color@endgroup . . o478, z87, z103,

B13, \underline{B47}, B59, B80, B103, B232, B248, C51, G277, K363

\color@hbox . . . . . . . . \underline{B47}, K491, K501 \color@setgroup . . . . . \underline{B47}, B59, B78 \color@vbox \underline{B47}, G83, G208, G230, K163 \columnsep . . . . . . . . . k21, K62, K150 \columnseprule . . . . . . . . K63, K1467 \columnwidth . . . . . . k18, k21, k22,

k24, B214, B241, G86, G270, K61, K125–K127, K149–K153, K1165, K1167, K1464, K1469

\cong . . . . . . . . . . . . . . . . . . . . . . t359 \contentsline . . . . . . . . . . F143, \underline{F148} \coprod . . . . . . . . . . . . . . . . . . . . t256 \copyright . . . . . . . . . . l206, l232, \underline{s75} \cos . . . . . . . . . . . . . . . . . . . . . . . . z12 \cosh . . . . . . . . . . . . . . . . . . . . . . . z14 \cot . . . . . . . . . . . . . . . . . . . . . . . . z18 \coth . . . . . . . . . . . . . . . . . . . . . . . z19 \count@ . . . . . . . . . . . . . a13, a121–

a123, a128, \underline{b41}, b193, b194, c5– c9, c11, d137, d142, p22, p256, p258, p280, p281, r184, r186, r190, r500–r502, r542–r544, r585–r587, r612–r614, r620– r622, r665–r667, r673–r675, r715–r717, r723–r725, v96, v99, D364–D366, D369, D370, D373, D377, N87, N88, N97, N99

\countdef . a13, b37–b39, b41, b47, w3 \cr . . . . . . . b167, z118, z122, z224,

z254, z327, C172, C182, C189, C198, C199, C342, D72, D74, D75

\crcr . . . . . . . . . . . . . . b224, l273, l277, l279, l340, l345, l347, l349, l533, l561, l565, l567, l630, l632, l679, s77, t240, t241, t243, t361, t363, t366, t415–t425, t427, z109, z111–z113, z118, z120– z122, z140, z141, C153, C154, D72

\csc . . . . . . . . . . . . . . . . . . . . . . . . z21 \cup . . . . . . . . . . . . . . . . . . . . . . . t282

                                       \curr@fontshape . . . . . . . . . . . . . .

. . l120, o63, \underline{o278}, o288, o292, o294, o385, o391, o394, o400, o407, o409, p92, p100, p121, p449, p473, p519, p536, r147, r152

                                       \curr@math@size . . . . . . . . . . . . . .

…. \underline{o267}, p210, p216, p221, p238 \CurrentOption . . . . . . . l242, l244,

\underline{L13}, L134, L144–L146, L151, L158–L160, L163, L170, L171, L175–L177, L184, L186, L190– L192, L302, L383, L384, L393, L394

D \d . . . . . . . . . . . . l159, l278, l346, l566 \dag . . . . . . . . . . . . . . . . . . . . . . . l228 \dagger . . . . . . . . l228, m58, m59, t284

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\dashbox . . . . . . . . . . . . . . . . . . \underline{D177} \dashv . . . . . . . . . . . . . . . . . . . . . t312 \date . . . . . . . . . . . . . . . . . . . . 332, \underline{F7} \day . . . . . . . . . . . . . . . . . . a127, L447 \dblfigrule . . . . . . . . . . . K569, \underline{K1531}

\dblfloatpagefraction . . G176, \underline{K1508}

\dblfloatsep K555, K567, K1090, \underline{K1515}

\dbltextfloatsep . . . . . . . . . . . . .

K170, K178, K571, K1089, \underline{K1515} \dbltopfraction . . . . . . . G173, \underline{K1507} \ddag . . . . . . . . . . . . . . . . . . . . . . l229 \ddagger . . . . . . . l229, m58, m60, t283 \ddot . . . . . . . . . . . . . . . . . . . . . . t403 \ddots . . . . . . . . . . . . . . . . . . . . . t398 \deadcycles . . . . . k115, y38, y48, K249

\declare@robustcommand . . . . . . . \underline{d190}

\DeclareErrorFont \underline{o367}, r156, s101, t28

\DeclareFixedFont . . . . . . . . . . . . \underline{o48}
\DeclareFontEncoding . . l260, l327,

l519, l539, l545, l627, \underline{o93}, t45–t48

\DeclareFontEncoding@ . o97, o99, o113
\DeclareFontEncodingDefaults . . .

. . . . . . . . . . . \underline{o141}, q80, q81, t15

\DeclareFontFamily . . . . \underline{o68}, q75, q76
\DeclareFontShape . . . . . . . . . . . .

…. \underline{o27}, \underline{o29}, q15, q17, q71, q72

\DeclareFontShape@ . . . . . . . . o30, o31
\DeclareFontSubstitution . . . . . . .

l546, l628, \underline{o114}, t16, t17, t49–t52

\DeclareMathAccent . . . . . . . . . . . .

. . . . . . . . . r492, r530, t401–t412

\DeclareMathAlphabet . . . . . . . . . .

. . . . . . . . . q109, q113, q115, q122, \underline{r318}, r481, \underline{r492}, t70–t73

\DeclareMathAlphabetCharacter . r591
\DeclareMathDelimiter . . . . . \underline{r593},

t174–t182, t446, t448, t450, t452, t454, t457, t459, t461, t463, t465, t467, t469, t471, t473, t475, t477, t479, t481, t483, t485, t487, t489, t491, t493

\DeclareMathRadical . . . . . . \underline{r696}, t413
\DeclareMathSizes . . . . \underline{o178}, t76–t87
\DeclareMathSizes* . . . . . . . . . . . \underline{o178}
\DeclareMathSymbol . . . . \underline{r534}, r592,

t88–t170, t184–t224, t226–t236, t238, t239, t244–t247, t249– t262, t264–t269, t271–t277, t279, t281–t320, t322, t324, t326–t336, t338–t342, t344, t346, t348–t358, t373, t375, t389–t391, t436–t439, t495–t497

                                       \DeclareMathVersion . . . . . \underline{r169}, s1, s2
                                       \DeclareOldFontCommand . . \underline{v106}, v122

\DeclareOption …. 433, l241, p29,

p37, p45, p53, p56, p60, \underline{L117}, L404 \DeclareOption* . . . . . . . . . 433, \underline{L117}

                                       \DeclarePreloadSizes . . . . . . . . . .

\underline{o158}, q85, q86, u19, u21–u23, u25–u30, u34, u38, u43, u45, u49, u50, u53, u54, u57, u58, u64

                                       \DeclareRobustCommand . . . . . . . . .

. . \underline{d190}, g4, g11, g33, g60, i35, i43, i132, i168, i173, i177, j3, j13, l223–l230, l232, l234, l236, o197, o225–o227, o231, o233, o251, p113, s3, s6, s9, s12, s15, s18, s21, s24, s27, s30, s75, s79, t380, t382, t393, v3, v107, z202, z259, G251, N118, N125, I12

                                       \DeclareSizeFunction . \underline{p377}, p464,

p465, p480, p481, p489, p490, p502, p503, p531, p532, p543, p544

                                       \DeclareSymbolFont q126, \underline{r204}, t60–t63
                                       \DeclareSymbolFontAlphabet . . . . .

. . . . . . . . . . . . . . . \underline{r769}, t67–t69

                                       \DeclareSymbolFontAlphabet@ r770, \underline{r773}
                                       \DeclareTextAccent . . . . . . . . . . . .

. . . . . . . \underline{l64}, l261–l271, l328– l338, l542, l547–l557, l633–l647

                                       \DeclareTextAccentDefault . . \underline{l124},

l150–l163, l200, l203, l766–l783

                                       \DeclareTextCommand . . . . . . . . . . .

. . . . . . . . . . \underline{l3}, l58, l65, l272, l275, l278, l299, l301, l303, l305, l311, l318, l339, l342, l346, l348, l350, l352, l531, l558, l560, l563, l566, l595, l602, l629, l631, l677

                                       \DeclareTextCommandDefault . . . . .

. . . . . . . \underline{l57}, l125, l127, l204, l207–l210, l212, l216, l220–l222

                                       \DeclareTextComposite . . . . . . . . .

. . . . . . . \underline{l70}, l407–l516, l609–l624

                                       \DeclareTextCompositeCommand . . .

. . . . . . . . . . . . . . . \underline{l70}, l308, l592

                                       \DeclareTextFontCommand . . . . . . .

. . . . . . . . . . . . \underline{v1}, v14–v24, v121

                                       \DeclareTextSymbol . . \underline{l3}, l280–l298,

l354–l406, l520–l530, l540, l541, l568–l591, l648–l676, l683–l762

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\DeclareTextSymbolDefault . . \underline{l124},

l164–l199, l201, l202, l784–l892 \default@ds . . . . . . . . . . . . . . . . . .

… L126, \underline{L137}, L173, L350, L352

\default@family . . . . . . . . . . . . . .

…. o104, o134, o373, o376, o395 \default@M …. o111, o149, o152, \underline{o156} \default@mextra . . . . . . . . . . . \underline{q1}, \underline{q79}

\default@series . . . . . . . . . . . . . .

…. o104, o135, o374, o377, o392 \default@shape . . . . . . . . . . . . . . .

…. o105, o136, o375, o378, o390 \default@T …. o143, o146, \underline{o156}, o218

\defaulthyphenchar . . . . . . . . . . . b121
\defaultscriptratio . . . . . o453, \underline{o464}
\defaultscriptscriptratio o454, \underline{o464}
\defaultskewchar . . . . . . . . . . . . b122
\define@mathalphabet . . . . . . \underline{q1}, \underline{q121}
\define@mathgroup . . . . . . . . \underline{q1}, \underline{q125}

\define@newfont . . . . . . . . o270, \underline{o280} \deg . . . . . . . . . . . . . . . . . . . . . . . . z34 \delcode . . . . . . . . . . . . . . . . . . . r694 \delimiter . . . . . . . . . . . . . r625, r690

\delimiterfactor . . . . . . . . . . . . b123
\delimitershortfall . . . . . . . . . . b133

\Delta . . . . . . . . . . . . . . . . . . . . . t214 \delta . . . . . . . . . . . . . . . . . . . . . t187 \depth . . . . . . . . . . . . . . . . . B16, B19 \det . . . . . . . . . . . . . . . . . . . . . . . . z30 \DH . . . . . . . . . . . . . . . . . . l356, N132 \dh . . . . . . . . . . . . . . . . . . l366, N132 \Diamond . . . . . . . . . . . . . . . . . . . . s93 \diamond . . . . . . . . . . . . . . . . . . . t289 \diamondsuit . . . . . . . . . . . . . . . . t253 \dim . . . . . . . . . . . . . . . . . . . . . . . . z28 \dimen@ . . . . . . . . \underline{b41}, b190, b191,

b227, b228, g31, g32, i147, i152, l306, l307, l309, l310, l593, l594, o183, o186, o190, o452– o454, o458, p423–p426, p430, z72, z73, z129–z132, B277, B280, K377, K379, K404, K406

\dimen@i . . . . . . . . . . . . . . . . . . . \underline{b41} \dimen@ii . . . . . . . . . . . . . . . . . . \underline{b41} \dimendef . . . . . . . . . . . b42–b44, b48 \discretionary . . . . . . . . . . d10, z148 \displ@y . . . . . . . . . . z134, z138, z139 \displaylines . . . . . . . . . . . . . . . \underline{z133} \displaymath . . . . . . . . . . . . . . . . z194 displaymath (environment) . . . . . . \underline{z192} \displaystyle . . . . . . . . t417, t420,

t423, t425, z62, z140, z218, z221, z258, z282, z298, z322, z325

                                       \displaywidowpenalty . . . . . . . . . b113

\displaywidth . . z140, z217, z270, z301 \div . . . . . . . . . . . . . . . . . . . . . . . t292 \DJ . . . . . . . . . . . . . . . . . . l357, N132 \dj . . . . . . . . . . . . . . . . . . l367, N132 \do . . . . . . . . . . a21, a22, a68, b13,

b14, d36, d82, f3, f7, f16, f26, k56, k59, k99, k151, k210, k216, o308–o324, v71, y112, y132, y143, y149, B36, C211, C236, D39, D44, D99, D196, D198, D218, D221, D253, D365, G52, L78, L144, L158, L170, L175, L190, L393, L450, L509, I16, I40

\do@noligs . . . . . . . . . . . . \underline{y144}, y149

                                       \do@subst@correction . \underline{o58}, p454, p527

\DocInput . . . . . . . . . . . p8, t5, u5, M4 \document . . . . . . . . . . . . . . . . 75, \underline{k11}

                                       \document@select@group . . . . \underline{r98}, r160

\documentclass . . . . . . . p2, t2, u2,

\underline{L194}, L201, L228, L231, L413, M2 \documentstyle . . . . . . . . . \underline{L199}, L413

                                       \dorestore@version . . . . . . . . r70, \underline{r80}

\dospecials . . . . . . . . . . . . . . . . . .

. . a21, a68, b13, y112, y132, L450 \dot . . . . . . . . . . . . . . . . . . . . . . . t410 \doteq . . . . . . . . . . . . . . . . . . . . . t368 \dotfill . . . . . . . . . . . . . . . . . . . \underline{b229} \dots . . . . . . . . . . . . . . . . . . l236, l238

                                       \doublehyphendemerits . . . . . . . . b116

\doublerulesep …. C276, \underline{C303}, C327 \Downarrow . . . . . . . . . . . . . . . . . t467 \downarrow . . . . . . . . . . . . . . . . . t461 \downbracefill . . . . . . . . . . t422, t440 \ds@ . . . . . . . . . . . . . . . . . . L139, L354 \dt@pfalse . . . . . . . . . . . . . . . . . z135 \dt@ptrue . . . . . . . . . . . . . . . . . . z134 \dump . . . . . . . . . . . . . . . . . . . . . N195

E \E . . . . . . . . . . . . . . L451, L454, L481 \egroup . . . . . . . . . . . . . . . . . . . . \underline{b171} \eject . . . . . . . . . . . . . . . . . . . . . \underline{b201} \ell . . . . . . . . . . . . . . . . . . . . . . . t228 \em . . . . . . . . . . . . . . . . . s30, s31, v24

                                       \emergencystretch . . . . b96, J36, J42
File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\emph . . . . . . . . . . . . . . . . . . . . . . \underline{v24} \empty . . . . . . . . . . . . . . . . . . . . . \underline{b169} \empty@sfcnt . . . . . . . . . . . . . o319,

p464, p465, p468, p486, p495, p539 \emptyset . . . . . . . . . . . . . . . . . . t235 \enc@update o203, o205, o221, \underline{o224}, p129

\encodingdefault . . . . . . . . . . . . .

. . . . . . . l242, l257, r161, s80, \underline{t38} \end . . . . . . . . . a16, d8, d247, g233,

p9, t6, u6, \underline{y59}, y96, y97, z289, F15, F17, L459, L463, L469, M5

\end@dblfloat . . . . . . . . . . . . . . \underline{G124} \end@float . . . . . . . \underline{G108}, G133, G232 \endarray . . . . . . . . . . . . . . . . . \underline{C153} \endcenter . . . . . . . . . . . . . . . . . y73 \enddisplaymath . . . . . . . . . . . . . z195 \enddocument . . . . . . . . . . . . . . . . . \underline{y8} \endenumerate . . . . . . . . . . . . . . A227 \endeqnarray . . . . . . . . . . . . z226, z257 \endequation . . . . . . . . . . . . . . . . z198

\endfilecontents . . . . . . . . . . . \underline{L417}

\endflushleft . . . . . . . . . . . . . . . y80 \endflushright . . . . . . . . . . . . . . y86 \endgraf . . . . . . . . . . . . . . . . . . . \underline{b166} \enditemize . . . . . . . . . . . . . . . . A238 \endline . . . . . . . . . . . . . . \underline{b166}, z118 \endlinechar …. a146, d23, d25, k182 \endlist . . . . . . . . . . \underline{A98}, A227, A238 \endlrbox . . . . . . . . . . . . . . . . . . \underline{B80} \endmath . . . . . . . . . . . . . . . . . . . z193 \endminipage . . . . . . . . . . . . . . . \underline{B222} \endpicture . . . . . . . . . . . . . . . . . \underline{D25} \endsloppypar . . . . . . . . . . . . . . . . J40 \endtabbing . . . . . . . . . . . . . . . . . \underline{C75} \endtabular . . . . . . . . . . . . . . . . \underline{C153} \endtabular* . . . . . . . . . . . . . . . \underline{C153} \endtrivlist . . . . . . y73, y80, y86,

y117, z303, A100, \underline{A101}, C76, E39 \endverbatim . . . . . . . . . . . \underline{y116}, y120

\enlargethispage . . . . . . . . . . \underline{K1180}
\enlargethispage* . . . . . . . . . \underline{K1180}

\enskip . . . . . . . . . . . . . . . . . . . . \underline{i187} \enspace . . . . . . . . . . . . . . . . . . . \underline{i184} \ensuremath . . . . . . . . m58, \underline{z259}, G254 \enumerate . . . . . . . . . . . . . . . . A218 enumerate (environment) . . . . . . \underline{A218} environments:

center . . . . . . . . . . . . . . . . . . . \underline{238}

displaymath . . . . . . . . . . . . . . . \underline{247}

enumerate . . . . . . . . . . . . . . . . . \underline{267} eqnarray* . . . . . . . . . . . . . . . . . \underline{249} eqnarray . . . . . . . . . . . . . \underline{248}, \underline{251} equation . . . . . . . . . . . . . \underline{247}, \underline{251} filecontents . . . . . . . . . . . . . 431 flushleft . . . . . . . . . . . . . . . . . \underline{238} flushright . . . . . . . . . . . . . . . . \underline{239} itemize . . . . . . . . . . . . . . . . . . \underline{268} lrbox . . . . . . . . . . . . . . . . . . . 269 math . . . . . . . . . . . . . . . . . . . . . \underline{247} minipage . . . . . . . . . . . . . . . . 270 sloppypar . . . . . . . . . . . . . . . . . \underline{370}

                                          thebibliography . . . . . . . . . . 364

verbatim* . . . . . . . . . . . . . . . . . \underline{240} \epsilon . . . . . . . . . . . . . . . . . . . t188 \eqnarray . . . . . . . . . . . . . . z209, z256 eqnarray (environment) …. \underline{z204}, \underline{z304} eqnarray* (environment) . . . . . . . \underline{z255} \eqno . . . . . . . . . . . . . . . . . . . . . . z198 \equation . . . . . . . . . . . . . . . . . . z197 equation (environment) …. \underline{z196}, \underline{z292} \equiv . . . . . . . . . . . . . . . . . . . . . t351 \err@rel@i . . . . . . . . . \underline{q89}, q122, q126 \errhelp . . . . . . . . . . . . . . . . . . . .

a159, c24, g42, g69, M12, N3, N33 \errmessage . . . . . . . . . . . . . . . . . .

. a4, a164, b74, c25, g50, g75, o387, p385, p515, q55, M16, N35

                                       \error@fontshape . . . . . . . . . . . . .

…. o368, o388, p107, p517, r146

                                       \errorcontextlines . . . . . . . . . . . .

. . . . . . . . . b94, b126, b247, g181 \errorstopmode . . . . . . . . . b239, N194 \escapechar . d92, d137, d142, d151,

o284, o418, p183, r45, r104, r145 \eta . . . . . . . . . . . . . . . . . . . . . . . t190 \evensidemargin . . . . . . . . K54, K476 \every@math@size …. o51, p189, \underline{p201} \everycr . . b222, z135, z138, z217, z319 \everydisplay . . . . . . o260, \underline{o261}, o266 \everyjob c28, r165, N157, N158, N160 \everymath . . . . . . . . o259, \underline{o261}, o264 \everypar . . . . . . . . . 59, k37, y49,

y114, A123, A124, A167, A184, B183, C72, F31, F79, F90, F110, F119, G106, K142, K874

                                       \execute@size@function . . . . . . . .

. . . . . . . . p318, p346, p364, \underline{p381} \ExecuteOptions . . . . . p57, p70, \underline{L188}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\exhyphenpenalty . . . . . . . b108, b195

\exists . . . . . . . . . . . . . . . . . . . . t246 \exp . . . . . . . . . . . . . . . . . . . . . . . . z31 \external@font . . . . . . . . . . . p84,

p87, p98, p102, p104, p347, p365, p439, p477, p549, p551, p553

\extra@def . . . . . . . . . . . . . . . \underline{q1}, \underline{q74} \extracolsep . . . . . . . . . . . . . . . \underline{C149}

\extract@alph@from@version . . . . .

. . . . . . . . . . . . . o424, \underline{o430}, r108 \extract@font . . . . . . . . . . . o295, \underline{p81}

\extract@fontinfo . . . . . . p314, p321
\extract@rangefontinfo . . . . . . . .

…. o312, \underline{p331}, p338, p361, p394 \extract@sizefn …. o309, \underline{p305}, p328

F

\f@baselineskip . . . . . . . . . . . . . .

. . . . . o232, o239, o380, p119, p136, p140, p155, p169, p180, p194

\f@encoding . l118, \underline{o197}, o216, o219, o220, o222, o241, o273, o278, o331, o333, o335, o340, o342, o372, o384, p91, p261, p507, r131

\f@family . . . . . . . . . . \underline{o225}, o235, o274, o278, o331, o333, o335, o340, o342, o376, o395, p91, r131

\f@linespread … \underline{o235}, p118, p137,

p138, p141, p149, p152, p163, p166 \f@series . . . . . . . . . . . j14, \underline{o225},

o236, o275, o278, o377, o392, s67 \f@shape . . . . . . . . . . . . . . . . . . . .

\underline{o225}, o237, o276, o278, o378, o390 \f@size . . . . . . . . . . . . . l120, o63,

o232, o238, o277, o379, o409, o451, o452, o455, o456, p119, p121, p134, p154, p169, p172, p175, p180, p187, p194, p206, p209, p215, p221, p238, p239, p242, p247, p315, p322, p341, p343, p362, p425, p427, p429, p445, p446, p451, p469, p485, p494, p512, p520, p525, p537, p555

\f@user@size . . p445, p450, p512, p525 \fam . . . . . . . . . . . . . . . . . . . . . . . . o24 \familydefault . . . . . . . r162, s81, \underline{t38} \fbox . . . . . . . . . . . . . . 269, \underline{B98}, B107 \fboxrule . . . . . . . . . . \underline{B96}, B118,

B121, B127, B129, B136, B137, N9 \fboxsep . . . . . . . . . . . . . . . . \underline{B96},

B102, B117, B122, B132, B134, N8 \filbreak . . . . . . . . . . . . . . . . . . \underline{b199} \filec@ntents . . . . . . L422–L424, L503 \filecontents . . . . . . . . . . . . . . \underline{L417} filecontents (environment) . . . . . 431 \filename@area . . . . . . a188, a194,

a201, a207, a214, a220, a227, k168, k193, k196, k212, k224, k226

\filename@base . . . . . . . . . . . . . . .

a236, k168, k193, k196, k219, k224 \filename@dot . . . . . . . . . . a234, a237 \filename@ext . . . . . . . a232, a234,

k169, k189, k190, k193, k196, k220

\filename@parse . . . . . . . . . . . . . .

. 1, 5, a52, \underline{a184}, k166, k188, k217 \filename@path . . a189, a190, a195,

a202, a203, a208, a215, a216, a221

\filename@simple . . . . . . . . . . . . .

…. a192, a205, a218, a228, a230 \fill . . . . . . . . . . . . . . . . . . . . . . \underline{i181}

\finalhyphendemerits . . . . . . . . . b117

\finph@nt . . . . . . . . . . . . z87, z89, z90 \finsm@sh . . . . . . . . . z103, z105, z106 \firstmark . . . . . . . . . . . . . J28, K510 \fix@penalty . . . . . . . . . . . . . . . . \underline{v82} \fixed@sfcnt . . o324, p543, p544, p547 \flat . . . . . . . . . . . . . . . . . . . . . . t249

\floatingpenalty . . . . . . . . . . . G269
\floatpagefraction . . . . . G170, \underline{K1504}

\floatsep . . . . . . . . . . . . . . K528,

K546, K553, K1384, K1433, \underline{K1509} \flushbottom . . . . . . . . . . . . . . . . . \underline{J32} \flushleft . . . . . . . . . . . . . . . . . y79 flushleft (environment) . . . . . . . \underline{y79} \flushright . . . . . . . . . . . . . . . . . y85 flushright (environment) . . . . . . . \underline{y85} \fmtname …. \underline{c1}, c28, c31, L237, L241 \fmtversion . . . . . . . . . . . . . . . . . .

. \underline{c1}, c10, c30, c33, g1, o1, C1, D1, K4, L254, L257, N141, N167

\fmtversion@topatch . . . . . . N139,

N141, N153, N154, N166, N174, O5 \fnsymbol . . . . . . . . . . . . . . 115, \underline{m39} \font . . . . . . . . . . . b227, l217–l219,

l312, l319, l596, l603, o54, o62, o64, p84, s31, s54, s66, u8–u10, v66

\font@info …. p99, p321, p394, p401

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\font@name . . . . . . . . . . . . . . l119, l122, o61, o167, o169, o269, o286, o408, p84, p88, p90, p105, p120, p123, p126, p284–p288, p293

\font@submax . . . . . . . . \underline{p407}, p442,

p443, y21, y23, N25, N27, N36 \fontdimen . . . . . . . . . . . . . b227,

l217–l219, l312, l319, l596, l603, s31, s66, v66, D48, D50, D321

\fontencoding l257, \underline{o197}, o228, r161, t14 \fontfamily …. \underline{o225}, r162, s5, s8, s11 \fontname . . . . . . . . . . . . . . . . . . . o64 \fontseries . . . . . . \underline{o225}, r163, s14, s17 \fontshape . . . . . . . . . . . . . . l322,

l606, \underline{o225}, r164, s20, s23, s26, s29 \fontsize …. j6, o52, \underline{o233}, s60, G254 \fontsubfuzz . . . . . . . . \underline{p407}, p447, y21 \footins . \underline{G239}, G265, K264–K267,

K299, K352, K358, K362, K390 \footnote . . . . . . . . . . . . . . . . . \underline{G256} \footnotemark . . . . . . . . . . . F9, \underline{G278} \footnoterule . . . . . B228, \underline{G243}, K361 \footnotesep . B247, \underline{G255}, G268, G276 \footnotesize . . . . . . . . . . B240, G266 \footnotetext . . . . . . . . . . F11, \underline{G295} \footskip . . . . . . . . . . . . . K58, K500 \forall . . . . . . . . . . . . . . . . . . . . t245 \fps@dbl . . . . . . . . . . . . . . . . . . . \underline{G25} \frac . . . . . . . . . . . . . . . . . . . . . . \underline{z201} \frame . . . . . . . . . . . . . . . . \underline{B82}, B144 \framebox . . . . . . . . . . . . . . 269, \underline{B105} \frenchspacing . \underline{b152}, k40, y116, y142 \frown . . . . . . . . . . . . . . . . . . . . . t354

\frozen@everydisplay . . . . \underline{o259}, \underline{o265}
\frozen@everymath . . . . . . \underline{o259}, \underline{o263}

\fussy . . . . . . . . . . . . . . . . . . . . . . \underline{J41} \futurelet d252, d265, v64, z152, C324

G

\g@addto@macro \underline{L361}, L367, L371, L372

\G@refundefinedfalse . . . . . . . . . . x5
\G@refundefinedtrue . \underline{x3}, x12, I21, I43

\Gamma . . . . . . . . . . . . . . . . . . . . . t213 \gamma . . . . . . . . . . . . . . . . . . . . . t186 \gcd . . . . . . . . . . . . . . . . . . . . . . . . z33 \ge . . . . . . . . . . . . . . . . . . . . . . . t325 \gen@sfcnt … o320, p480, p481, p484 \genb@sfcnt … o321, p489, p490, p493 \genb@x . . . . . . . . . . . . . . . p494, \underline{p497} \genb@y . . . . . . . . . . . . . . . . . . . . \underline{p497} \GenericError \underline{g19}, g91, g122, g153, p62

\GenericInfo . . . . . . . . . . . . . . \underline{g4},

g112, g143, g173, p31, p34, p39, p75

                                       \GenericWarning . . . . . . . . . . \underline{g11},

g102, g133, g164, p42, p47, p50, p78 \geq . . . . . . . . . . . . . . . . . . . t324, t325 \get@cdp . . . . . . . . . . . r275, r283, \underline{r316}

                                       \get@external@font . . . p83, \underline{p96}, p526
                                       \getanddefine@fonts . . . . . . . o419,

o437, \underline{p274}, r46, r93, r105, r187, r246, r280, r282, r299, r422, r423, r455, r456, r789, r790

\GetFileInfo . . . . . . . . . . . . . . . . . . t3 \getlinechar . . . . . . . . . . . . . . . \underline{D122} \gets . . . . . . . . . . . . . . . . . . . . . . t343 \gg . . . . . . . . . . . . . . . . . . . . . . . t338 \glb@currsize . . . . . . . . . . . . k35,

o256, \underline{p171}, p206, p210, p216, p239 \glb@settings . o257, \underline{p171}, p218, p249 \globaldefs . . . . . o420, p185, r47, r106 \glossary . . . . . . . . . . . . . . . 361,

F146, H23, \underline{H35}, J20, J23, K484 \glossaryentry . . . . . . . . . . . . . . H32 \goodbreak . . . . . . . . . . . . . . . . . \underline{b199} \grave . . . . . . . . . . . . . . . . . . . . . t402 \group@elt . . . . . . . . . . . . . . . r26,

r185, r217, r218, \underline{r239}, r243, r821 \group@list . . . . . . . . . . . . . . . . . .

. . r189, r224, \underline{r237}, r242, r243, r272, r494, r536, r603, r606, r656, r659, r706, r709, r776, r827

\guillemotleft . . . . . . . . . . l368, l573 \guillemotright . . . . . . . . . l369, l574 \guilsinglleft . . . . . . . . . . . . . . l370 \guilsinglright . . . . . . . . . . . . . l371

H \H . . . . . . . . . . . . . g27, l154, l268,

l333, l420, l428, l447, l455, l554 \h@false . . . . . . . . . . . . . . . . . . . . z77 \h@true . . . . . . . . . . . . . . . . . z78, z79 \halign … b222, z96, z140, z217, z319 \hangindent . . . . . . . . . . . . . . . . F122 \hat . . . . . . . . . . . . . . . . . . . . . . . t408 \hb@xt@ . . . . . . . . . . . . . b232, \underline{d16},

l302, z140, z222, z268, z282, z297, z327, B28, B43, B116, B285, B289, B290, C39, D21,

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

D31, D40, D136, D168, D171, D174, D176, D177, D249, D278, D375, F163, F166, K493, K503, K1165, K1463, K1464, K1469

\hbadness . . . . . . . . . . . . . b104, o477 \hbar . . . . . . . . . . . . . . . . . . . . . . t225 \headheight . . . . . . . . . . . . K56, K489 \headsep . . . . . . . . . . . . . . K57, K498 \heartsuit . . . . . . . . . . . . . . . . . t254 \height . . . . . . . . . . . . . . . . B15, B18 \hexnumber@ . . . . . . . . . . . . . . r509,

r517, r532, r551, r559, r567, r576, r579, r588, r589, r615, r623, r668, r676, r690, r691, r694, r719, r727, r732, r734, \underline{s71}

\hfuzz . . . . . . b127, J37, J38, J44, J45 \hgl@ . . . . . . . . . . . . . . . . . b192, b193 \hglue . . . . . . . . . . . . . . . . . . . . . \underline{b189} \hideskip . . . . . . . . . . . . . . \underline{b79}, b213 \hidewidth . \underline{b213}, l273, l274, l277,

l279, l340, l341, l344, l347, l349, l561, l562, l565, l567, l630, l632

\hline . . . . . . . . . . . . . . . . \underline{C323}, C326 \holdinginserts . . . . . . . . . . . . . b95 \hom . . . . . . . . . . . . . . . . . . . . . . . . z29 \hookleftarrow . . . . . . . . . . . . . . t376 \hookrightarrow . . . . . . . . . . . . . t374 \hphantom . . . . . . . . . . . . . . . . . . . \underline{z75} \hrule . . . . . . . . . . . . . . . . . b190,

b229, i148, i156, l211, l214, t243, t499, B88, B93, B127, B137, C324, C341, D280, G244

\hrulefill . . . . . . . . . . . . . . . . . \underline{b229} \hspace . . . . . . . . . . . . . . . . . . . . \underline{i177} \hyphenation . . . . . . . . . . . . . . . . \underline{l130} \hyphenpenalty . . . . . . . . . . . . . . b107

I

\I . . . . . . . . . . \underline{b158}, L477, L495, N107 \i . . . . . l171, l284, l372, l407, l499,

l501, l503, l505, l575, N112, N119 \ialign . . . . . . . . . . . . \underline{b222}, b224,

t240, t361, t415, t418, t421, t424, z109, z111, z119, C171, D72

\if@afterindent . . . . . . . . \underline{F107}, F114

\if@compatibility . . . . . . . . \underline{L2}, L196

\if@endpe . . . . . . . . . . . . . . y61, \underline{A125} \if@eqnsw . . . . . . . . . . . . . . \underline{z204}, z253 \if@fcolmade . . . . . . . . . . . . . . . . .

\underline{K76}, K212, K312, K321, K581, K598, K625, K679, K1447, K1484

\if@filesw . . . . . . . . . . . . . . . \underline{k7}, k30, k92, k104, k111, k120, y13, y27, F136, I4, I8, I19, I28, I36, I42

\if@firstamp . . . . . . . . . . . . . . . \underline{C218}

\if@firstcolumn . . . . . . . . . . \underline{K76},

K194, K227, K314, K1137, K1454 \if@ignore . . . . . . . . . . . . . . . \underline{y4}, y62 \if@inlabel . . . . . . . . . . . . . . . . . .

\underline{A28}, A65, A102, A147, A170, K138 \if@insert . . . . . . . . . . . . . . \underline{K76},

K783, K892, K926, K996, K1112 \if@minipage . . . . . . . . . . . . . i102,

i115, y100, A136, \underline{B191}, C70, G11 \if@mparswitch . . . . . . . . \underline{K76}, K1139

\if@multiplelabels . . . . . . . . . . . \underline{x31}

\if@negarg …. \underline{D76}, D94, D108, D144 \if@newlist . . . . . . . . . . . . . y117,

\underline{A29}, \underline{A33}, A69, A78, A106, A153 \if@nmbrlist . . . . . . . . . . . A33, A188 \if@no@font@opt . . . . . . . . q100, \underline{q119} \if@nobreak . . . . . . . . . . . . . . . . . .

\underline{i58}, i117, k67, k79, A154, A179, B177, F30, F111, G93, G99, G222, J21, J25, K142, K287, K871

\if@noitemarg . . . . . . . . . . \underline{A32}, A186 \if@noparitem . . . . . . . . . . \underline{A30}, A144 \if@noparlist . . . . . . . . . . \underline{A31}, A111 \if@noskipsec . . . . . . . A58, B178,

\underline{F21}, F23, F80, G94, G223, K132 \if@ovb . . . . . . . . . . \underline{D223}, D266, D271 \if@ovl . . . . . . . . . . \underline{D223}, D264, D281 \if@ovr . . . . . . . . . . \underline{D223}, D263, D279 \if@ovt . . . . . . . . . . \underline{D223}, D265, D275 \if@partsw . . . . . . . . . . . . . . . \underline{k7}, k96 \if@pboxsw . . . . . . . . . . . . B174, B249

\if@reversemargin . . . . . K82, K1142
\if@reversemarginpar . . . . . . . . . \underline{K76}

\if@rjfield . . . . . . . . . . . . . \underline{C21}, C35 \if@specialpage . . . . . . . . \underline{K76}, K469 \if@tempswa . . . . . . . . . . . . . . a25–

a27, \underline{e9}, k102, o74, r210, r260, r324, r405, r820, v72, y29, y106, K716, K752, K1077, L440, I47

\if@test . . K12, K13, K661, K694,

K758, K839, K848, K977, K1082

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\if@twocolumn … k20, G23, G125, \underline{K76}, K120, K215, K226, K313, K337, K583, K616, K1136, K1448

\if@twoside . . . . . . . \underline{K76}, K119, K472 \ifdt@p . . . . . . . . . . . . . . . . z133, z135 \iff . . . . . . . . . . . . . . . . . . . . . . . t388 \IfFileExists . . . . . . . . . . . . . 75,

434, \underline{a120}, \underline{k134}, k161, k172, N135

\ifG@refundefined . . . . . . . . . . x3–x5

\ifh@ . . . . . . . . . . . . . . . . . . . z76, z93 \ifin@ . . . . . . . . . . . . q40, q42, \underline{r1},

r13, r174, r271, r273, r334, r347, r417, r419, r447, r495, r506, r537, r548, r604, r607, r627, r657, r660, r704, r707, r710, r777, r779, r808, L80, L149, L161

\ifinner . . . . . . z168, z182, G44, G188 \ifmath@fonts . . . . . . . . . . \underline{o177}, p176 \ifnot@nil . . . . . . . . \underline{p297}, p316, p337 \ifodd r751, D182, D202, G55, K21,

K119, K473, K708, K711, K744, K747, K855, K858, K1025, K1028, K1140, K1319, K1327

\ifv@ . . . . . . . . . . . . . . . . . . . z75, z92 \ifvbox . . . . . . . . . . K270, K370, K391 \ignorespaces . . . . . . . . . . . . . i24,

i74, i83, i193, k60, o230, y62, y70, y71, z190, A55, A204, B79, B247, C59–C61, C74, C83, C96, C100, C107, C114, C116, C125, C204, C266, C268, C270, C297, D24, D32, D43, D74, D75, E30, E32, F93, G8, G15, G276, I7, I9

\ignorespacesafterend . . . . . . . . . \underline{y7}

\Im . . . . . . . . . . . . . . . . . . . . . . . t231 \imath . . . . . . . . . . . . . . . . . . . . . t226 \in . . . . . . . . . . . . . . . . . . . t335, t362 \in@ . . . . . . . . . . . . . . q39, q41, \underline{r1},

r12, r173, r270, r272, r330, r343, r416, r418, r445, r493, r504, r535, r546, r602, r605, r625, r655, r658, r702, r705, r708, r775, r778, r806, L79, L146, L160

\in@@ . . . . . . . . . . . . . . . . . . . . . r3, r5 \in@false . . . . . . . . . . . . . . . . . . . . r4 \in@true . . . . . . . . . . . . . . . . . . . . . r4 \include . . . . . . . . . . . . . . . . . 75, \underline{k86} \includeonly . . . . . . . . . . . . . . 75, \underline{k82} \indent . . . . . . . . . . . . . . . A148, C72 \index 361, F146, H6, \underline{H18}, J20, J23, K483 \indexentry . . . . . . . . . . . . . . . . . H15 \inf . . . . . . . . . . . . . . . . . . . . . . . . z25 \infty . . . . . . . . . . . . . . . . . . . . . t233

\init@restore@glb@settings . . . . .

. . . . . . . . . . . . p219, p222, \underline{p224}

\init@restore@version r49, \underline{r64}, r84, r85

\input . . . . . . . . . . . . . . . . 75, 434, a15, a116, a119, a176, d7, \underline{k163}, l765, p16, q8, q96, s131, s142, s152, t10–t13, t20, t21, t25, t26, t55–t58, y18, L200, N23, N140

\input@path . . . . . . . . . . . 1, 5, a51, a73, a75, a81, a83, a89, a91, a96, a98, a108, \underline{a175}, k137, k151

\InputIfFileExists . . . . . . . . . . . .

. . . . . . . 75, 434, \underline{k160}, k165, k173, k192, l246, o340, s105, s123, s134, s144, L324, M8, N17

\inputlineno . a245, b86–b88, g183,

g186, s104, N81, N92, N103, N111 \insc@unt . \underline{b37}, b47–b49, b51, b62–b67 \insert b69, G265, K390, K391, K1214

\install@mathalphabet . . . . . . . . .

. \underline{o414}, o431, o438, r193, r196, r277, r278, r375, r427, r430, r437, r452, r453, r460, r791, r793

\int . . . . . . . . . . . . . . . . . . . . . . . t263

\interdisplaylinepenalty . . . . . . .

. . . . . . . . . . . i29, \underline{z55}, z137, z239

\interfootlinepenalty . . . . . . . . \underline{b148}
\interfootnotelinepenalty . . . . . .

. . . . . . . . . . . . . b148, i34, G267

\interlinepenalty . . . . . . . . . . . .

. . i27, y107, y110, F50, F101, F154, G267, K290, K876, K880

\intextsep . . . . . . . . . . . . . K859,

K863, K878, K881, K888, \underline{K1509} \intop . . . . . . . . . . . . . . . . . t262, t263 \iota . . . . . . . . . . . . . . . . . . . . . . t192 \is@range . . . . . . . . . o313, p332, \underline{p333} \ishortstack . . . . . . . . . . . . . . . . \underline{D62} \itdefault . . . . . . . . . . . . . . s29, \underline{t34} \item . . . . . . . . . . . . . . . . . . . g275,

y72, y79, y85, y99, z281, z296, \underline{A128}, A206, C69, E36, E38, I4, I8

\itemindent . \underline{A9}, A42, A95, A174, A195 \itemize . . . . . . . . . . . . . . . . . . A229 itemize (environment) . . . . . . . . \underline{A229}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\itemsep . . . . . . . . . . . . . . . \underline{A1}, A163 \iterate . . . . . . . . . . . . a28, a29, \underline{b178} \itshape . . . . . . . . . . . . l320, l604,

s27, s28, s32, v20, E36, E38, G248

J

\J . . . . . . . . . . . . . . . . . . . . . . . N109 \j . . . . . . . l172, l285, l373, l576, N119 \jmath . . . . . . . . . . . . . . . . . . . . . t227 \Join . . . . . . . . . . . . . . . . . . . . . . . s91 \joinrel . . . . . . . t369, t374, t376–

t379, t381, t383, t384, t386, t387 \jot . . . . . . . . . . . . . . . \underline{z53}, z134, z246

K

\k . . . . . l348, l409, l414, l436, l441,

l558, l559, l609, l611, l616, l618 \kappa . . . . . . . . . . . . . . . . . . . . . t193 \ker . . . . . . . . . . . . . . . . . . . . . . . . z27 \kill . . . . . . . . . . . . . . . . . . . . . . C61

L

\L l166, l301, l358, l571, L474, L494, N132 \l . . . . . . . l173, l303, l374, l577, N132 \l@ngrel@x . . d41, d42, \underline{d43}, d87, d135 \label . . . . . \underline{x32}, F146, J20, J23, K482 \labelsep . . \underline{A9}, A197, A203, E36, E38 \labelwidth \underline{A9}, A93, A196, A198, A201 \Lambda . . . . . . . . . . . . . . . . . . . . t216 \lambda . . . . . . . . . . . . . . . . . . . . t194 \land . . . . . . . . . . . . . . . . . . . . . . t278 \langle . . . . . . . . . . . . . . . . . . . . t475 \language … b35, b56, b89, b90, M10 \last@fontshape . . . . . . . . o386, o401 \lastbox . . . . . . . . . . . . . . . . z123,

z124, A124, A172, F82, F115, K255 \lastpenalty . . . . . . . . . . . . . v93, v96 \lastskip . . . . . . b202, b203, b205,

b207, i19, i66, i87, i88, i92, i94, i95, i103, i119, i122, i123, v83, v86, A112, A113, A137, A138, D44

\LaTeX . . . . . . . . . . . . . . . \underline{j3}, j15, L443 \LaTeXe . . . . . . . . . . . . . . . . . . . . . \underline{j13} \lbrace . . . . . . . . . . . . . . . . l224, t479 \lbrack . . . . . . . . . . . . . . . . . . . . \underline{b162} \lccode . . . . . . . . . . . . . . . . . g22–

g27, l99, y137, y147, N89, N99, N108, N110, N112, N114, N117

\lceil . . . . . . . . . . . . . . . . . . . . . t483 \ldotp . . . . . . . . . . . . . t389, t392, t500 \ldots . . . . . . . . . . . . . . . . . l238, t393 \le . . . . . . . . . . . . . . . . . . . . . . . t323 \leaders … b229, t243, t441, t442,

t444, t445, C341, D274, D280, F159 \leadsto . . . . . . . . . . . . . . . . . . . . s94 \leavevmode . . . . . . . . . . . . . . . . . .

b193, \underline{b220}, b223, b229, b231, i169, l209, l211, l276, l302, l306, l309, l343, l564, l593, v7, v104, y107, y117, y130, y148, z281, z296, A58, A103, B4, B8, B81, B83, B99, B113, B159, B207, B253, B261, C158, D65, D177, F23, F155, G290, K134, K139

\left . . . . . t501–t504, z108, z114, z125 \Leftarrow . . . . . . . . . t319, t384, t387 \leftarrow . . . . . . . . . . . . . . . . . .

. t342, t343, t376, t383, t386, t433 \leftarrowfill . . . . . . . . . . t419, t433 \lefteqn . . . . . . . . . . . . . . . . . . . \underline{z258} \leftharpoondown . . . . . . . . t356, t367 \leftharpoonup . . . . . . . . . . . . . . t355 \lefthyphenmin . . . . . . . . . . b92, M11 \leftline . . . . . . . . . . . . . . . . . \underline{B285} \leftmargin . . . . . . . . . . . . . . . . . .

. \underline{A9}, A52, A53, A94, A133, A135 \leftmargini . . . . . . . . . . . . z274, \underline{A17} \leftmarginii . . . . . . . . . . . . . . . \underline{A17} \leftmarginiii . . . . . . . . . . . . . . \underline{A17} \leftmarginiv . . . . . . . . . . . . . . . \underline{A17} \leftmarginv . . . . . . . . . . . . . . . . \underline{A17} \leftmarginvi . . . . . . . . . . . . . . . \underline{A17} \leftmark . . . . . . . . . . . . . . . . . . . \underline{J26} \Leftrightarrow . . . . . . . . . . . . . t318 \leftrightarrow . . . . . . . . . . . . . t341 \leftskip . . . . . . . b215, y76, y83,

y89, y101, A74, B186, F152, F157 \leq . . . . . . . . . . . . . . . . . . . t322, t323 \lfloor . . . . . . . . . . . . . . . . . . . . t487 \lg . . . . . . . . . . . . . . . . . . . . . . . . z4 \lgroup . . . . . . . . . . . . . . . . . . . . \underline{t489} \lhd . . . . . . . . . . . . . . . . . . . . . . . . s97 \lhook . . . . . . . . . . . . . . . . . t373, t374 \lim . . . . . . . . . . . . . . . . . . . . . . . . z6 \liminf . . . . . . . . . . . . . . . . . . . . . z8 \limits . . . . . . . t423, t427, z107, z200 \limsup . . . . . . . . . . . . . . . . . . . . . z7 \line . . . . . . . . . . . . . g260, \underline{D77}, D247 \linebreak . . . . . . . . . . . . . . . 61, \underline{i13} \linepenalty . . . . . . . . . . . . . . . . b106

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\lineskip . . . . . . . . . . . . . . . . . . .

. b156, b188, b223, t360, z130, B187, C62, C178, D67, D178, K485

\lineskiplimit . . b157, b188, b225,

b226, t360, t396, z132, z136, K485 \linespread . . . . . . . . . . . . . . . . . \underline{o231} \linethickness . . . . . . . . . . . . . . \underline{D56} \linewidth . . k24, z175, z282, z297,

z301, z319, A15, A51, A52, A54, B184, C38, G158, K127, K153

\list . . . . . . . . . . . . . \underline{A34}, A223, A234 \listfiles . . . . . . . . . . . . . 434, \underline{k206} \listparindent . . . . . . . \underline{A9}, A41, A50 \ll . . . . . . . . . . . . . . . . . . . . . . . t339 \llap . . . . . . . A225, A236, \underline{B289}, B290 \lmoustache . . . . . . . . . . . . . . . . . t446 \ln . . . . . . . . . . . . . . . . . . . . . . . . z5 \lnot . . . . . . . . . . . . . . . . . . . . . . t248 \LoadClass . . . . . . . . . . . . . . 432,

\underline{L206}, L220, L341, L400, L408, L409

\LoadClassWithOptions . . . . 432, \underline{L219}

\log . . . . . . . . . . . . . . . . . . . . . . . . \underline{z3} \Longleftarrow . . . . . . . . . . . . . . t384 \longleftarrow . . . . . . . . . . . . . . t382

\Longleftrightarrow . . . . . . t387, t388
\longleftrightarrow . . . . . . . . . . t386

\longmapsto . . . . . . . . . . . . . . . . . t385 \Longrightarrow . . . . . . . . . . . . . t379 \longrightarrow . . . . . . . . . t380, t385 \loop . . . . . . . . . . . . . a28, \underline{b178}, C347 \lor . . . . . . . . . . . . . . . . . . . . . . . t280 \lower . . . . . . . . . . . j2, t360, B125,

D23, D92, D174, D175, D211, D212 \lower@bound . . . . . . . p342, p343, \underline{p355} \lowercase . . . . . . . . . . g29, l100,

l244, o247, o339, y141, y148, N128 \lq . . . . . . . . . . . . . . . . . . . . . . . \underline{b160} \lrbox . . . . . . . . . . . . . . . . . . . . . \underline{B69} lrbox (environment) . . . . . . . . . . . 269

M

\M . . . . . . . . . . . . . . . . . . . . . . . . \underline{b158} \m@ne . . . . . . . . . . . . . . . . . . . . . . \underline{b39} \m@th . . . . . . . \underline{b209}, b221, j13, t240,

t361–t363, t365, t394, t415, t418, t421, t424, t430, t433, t440, t443, t505, z68, z71, z89, z105, z108, z110, z115, z134, z213, z282, z297, z307, B174, B259, C161, F159, G249, G254 \magstep . . . . . . . . . . . . . . . . . . . \underline{b149} \magstephalf . . . . . . . . . . . . . . . . \underline{b149} \makeatletter \underline{d266}, d282, k26, o303,

o345, y18, F134, K2, L200, L304 \makeatother . . . . . . \underline{d266}, L200, N193 \makebox . . . . . . . . . . . . 269, z175, \underline{B3} \makeglossary . . . . . . . . 361, k69, \underline{H20} \makeindex . . . . . . . . . . . 361, k68, \underline{H3} \makelabel . . . . . . . . . . . . . . . . . .

A45, A97, A192, \underline{A205}, A225, A236 \MakeLowercase . . . . . . . . . N125, N134 \makeph@nt . . . . . . . . . . . . . . z84, z86 \makesm@sh . . . . . . . . . . . . . z100, z102 \maketitle . . . . . . . . . . . . . . . . . 332 \MakeUppercase . . . . . . . . . . . . . \underline{N118} \mandatory@arg . . . . . . p374, p477,

p485, p494, p507, p509, p514, p516, p521, p523, p538, p549, p551

\mapsto . . . . . . . . . . . . . . . . . . . . t347 \mapstochar . . . . . . . . . t346, t347, t385 \marginpar . . . . . . . . . . . . . . . . \underline{G181} \marginparpush . . . . . . . . K66, K1156 \marginparsep …. K65, K1167, K1169 \marginparwidth … G210, K64, K1169 \mark . . . . . . . . . . . . . . . J21, J25, \underline{J30} \markboth . . . . . . . . . . . . . . . . . . . \underline{J18} \markright . . . . . . . . . . . . . . . . . . \underline{J18} \math . . . . . . . . . . . . . . . . . . . . . . z192 math (environment) . . . . . . . . . . . . \underline{z192} \math@bgroup . . . . . . . . \underline{o445}, p260,

p266, r40, r99, v111, v112, v119 \math@egroup . . . . . . . . . . . . . . . . .

\underline{o445}, p264, \underline{p265}, v112, v113, v120 \math@fonts . . . . . . . . . . . . . . . . . .

. \underline{o415}, o420, p186, p290, r47, r106 \math@fontsfalse . j7, o50, o179, o187 \math@fontstrue . . . . . . . . o177, o459 \math@version . . . . . . . . . . . . . . . .

. . o10, \underline{o251}, o419, o423, o425, o426, o428, p184, r43, r46, r51, r52, r56, r67–r69, r87–r89, r102, r105, r109, r111, r113, r117, s53

\mathaccent . . . . . . . . . . . . . r504, r532 \mathalpha . . . . . . . . . . \underline{r749}, t88–

t149, t213–t223, t401–t408, t410 \mathbf . . . . . . . . . . . . . . . . . s13, t70 \mathbin … r754, t153, t154, t156,

t273–t277, t279, t281–t306, z37 \mathcal . . . . . . . . . . . . . . . . . . . . t69

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\mathchar . . . . . . . . . . . . . . . . . . .

b221, r546, r588, t225, t237, t498

\mathchar@type . . . . . . . . . . . . . . .

. r532, r576, r579, r588, r690, \underline{r750} \mathchardef …. b21–b24, e3–e6, r579 \mathchoice . . . . . . . . . . . . . . . . . . z61 \mathclose . r757, t150, t152, t164,

t166, t169, t449, t474, t478, t482, t486, t492, z43, z46, z49, z52

\mathcode . . . . . . . . . . r576, t171–t173 \mathdollar . . . . . . . . . . . . . l223, \underline{t495} \mathellipsis . . . . . . . . . . . l237, \underline{t500} \mathgroup . . . . . . . . . . \underline{o22}, p257,

p263, p269, p270, p281, s68, t506 \mathhexbox . . . . . . . . . . . . . \underline{b221}, s78 \mathindent …. \underline{z272}, z283, z299, z309 \mathinner …. t392, t395, t398, t500 \mathit . . . . . . . . . . s28, t72, t75, t498 \mathnormal . . . . . . . . . . . . . . . . . . t68 \mathop . . . . . . . . . . . . r753, t256–

t262, t264–t269, t271, t272, t421, t424, z3–z34, z107, z200

\mathopen . . . . . . . . . . . r756, t151, t165, t168, t447, t476, t480, t484, t488, t490, z41, z44, z47, z50

\mathord … r752, t157, t158, t167, t170, t184–t212, t224, t226– t236, t238, t239, t244–t247, t249–t255, t409, t411, t412, t432, t433, t436–t439, t451, t453, t455, t458, t472, t494–t497

\mathpalette . . . . . . . . . . . . . . . . .

t359, t362, t364, \underline{z60}, z69, z82, z98 \mathparagraph . . . . . . l226, m59, \underline{t495} \mathph@nt . . . . . . . . . . . . . . z82, z88 \mathpunct r758, t155, t160, t389–t391 \mathrel . . . . . . . . . . . . . . . . r755,

t159, t161–t163, t241, t307– t320, t322, t324, t326–t336, t338–t342, t344, t346, t348– t359, t362, t364, t369, t370, t372, t373, t375, t377, t378, t460, t462, t464, t466, t468, t470, z42, z45, z48, z51, z107, z200

\mathrm . . . . . . . . . . . . . . . . . . s4, t67 \mathsection . . . . . . . . l227, m59, \underline{t495} \mathsf . . . . . . . . . . . . . . . s7, t71, t74 \mathsm@sh . . . . . . . . . . . . . z98, z104 \mathsterling . . . . . . . . . . . l235, \underline{t495} \mathstrut . . . . . . . . . \underline{z94}, z112, z113 \mathsurround . . . . . . . . . . . . . . . b209 \mathsymbol . . . . . . . . . . . . . . . . . r581 \mathtt . . . . . . . . . . . . . . . . . s10, t73 \mathunderscore . . . . . . . . . . . . . \underline{t495} \mathversion . . . . . . . . . \underline{o251}, s50, s52 \matrix . . . . . . . . . . . . . . . . \underline{z110}, z114 \max . . . . . . . . . . . . . . . . . . . . . . . . z22 \maxdeadcycles . . . . . . . . . . . . . . . K7 \maxdepth . . . . . . . . . . . . . . b130,

k50, K73, K375, K385, K419, K517, K526, K566, K717, N10

\maxdimen . . . . . . \underline{b79}, b131, b132, b188, b226, b239, b247, o475, p340, p399, t360, D251, D285, K239, K1177, K1204, K1209, N14

\maybe@ic . . . . . . . . . . . v45, v46, \underline{v64} \maybe@ic@ . . . . . . . . . . . . . . . . . \underline{v64} \mb@b . . . . . . . . . . . . . . . . . . B34, B44 \mb@l . . . . . . . B34, B38, B43, D68, D72 \mb@r . . . . . . . B34, B38, B43, D68, D72 \mb@t . . . . . . . . . . . . . . . . . . B35, B42 \mbox . . . . . . . . 269, b221, j13, l213,

s74, t394, B7, \underline{B8}, D28, G254, I20 \mddefault . . . . . . . . . . . s17, \underline{t32}, t40 \mdseries . . . . . . . . s15, s16, s77, v19 \meaning . . . . . . . . . . . a161, a170,

a241, d197, d275, r331, r344, r445, r504, r546, r625, r702, r806

\medbreak . . . . . . . . . . . . . . . . . . \underline{b203} \medmuskip . . . . . . t508, z36, z38, z145 \medskip . . . . . . . . . . . . . . . b206, \underline{i162} \medskipamount . . . . . . b205, i163, \underline{i165} \MessageBreak . . . . . . . . . . . d174,

\underline{g3}, g6, g13, g36, g49, g63, g76, g197, g199, g205, l106, l249, l252, o399, p20, p21, p67, p88, p281, p450, p474, p520, p537, p554, q21, q23, r286, r295, r433, v125, y22, K448, K1277, L87, L230, L241, L243, L245, L256, L311, L312, L314–L316, L318, L319, L336–L339, L385, L402, L403, L435, L463, N26–N28, N30

\mho . . . . . . . . . . . . . . . . . . . . . . . . s90 \mid . . . . . . . . . . . . . . . . . . . . . . . t311 \min . . . . . . . . . . . . . . . . . . . . . . . . z23 \minipage . . . . . . . . . . . . . . . . . \underline{B194} minipage (environment) . . . . . . . . 270 \mit . . . . . . . . . . . . . . . . . . . . . . . \underline{s155}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\mkern . . . . . . . . . t225, t241, t243, t363, t369, t398–t400, t428– t435, z36, z37, z40, z73, z74, F160

\models . . . . . . . . . . . . . . . . . . . . t378 \month . . . . . . . . . . . . . . a127, c8, L447 \moveright . . . . . . . . . . . . . . . . K488 \mp . . . . . . . . . . . . . . . . . . . . . . . t298 \mscount . . . . . . . . . . . . . . . . . . \underline{C344} \mskip . . . . . . i174, z36, z38, z144–z147 \mu . . . . . . . . . . . . . . . . . . . . . . . t195 \multicolumn . . . . . . . . . . . . . . . \underline{C200} \multiput . . . . . . . . . . . . . . \underline{D33}, \underline{D37} \multispan . . . . . . . . . . . . C200, \underline{C344} \muskip . . . . . . . . b29, b50, t428, t429 \muskipdef . . . . . . . . . . . . . . . . . b50

N

\n@space . . . . . . . . . . . . . . . t501–t505 \nabla . . . . . . . . . . . . . . . . . . . . . t236 \narrower . . . . . . . . . . . . . . . . . . \underline{b214} \natural . . . . . . . . . . . . . . . . . . . t250 \ne . . . . . . . . . . . . . . . . . . . . . . . t321 \nearrow . . . . . . . . . . . . . . . . . . . t314 \NeedsTeXFormat …. p12, \underline{L235}, L506 \neg . . . . . . . . . . . . . . . . . . . t247, t248 \negthinspace . . . . . . . . . . . . . . . \underline{i184} \neq . . . . . . . . . . . . . . . . . . . . . . . t321 \new@command . . . . . . . . . . . . . . . . .

. d44, \underline{d45}, d97, d132, d154, d209 \new@environment … d112, \underline{d113}, d126 \new@fontshape . . . . . . . . . . . . \underline{q1}, \underline{q14}

\new@mathalphabet . . . r328, r349, \underline{r360}

\new@mathgroup . . . . . . . . . . \underline{o22}, r212 \new@mathversion …. \underline{r11}, r170, \underline{r172} \new@symbolfont . . . . . . . . . r213, \underline{r241} \newbox . . . . . . \underline{b47}, b84, b211, e13,

z66, A27, B54, C16–C18, C308, D6, D312, D317, K67, K101–K103

\newcommand . . . . . . . . . 30, \underline{d44}, l4, t29–t41, D328, K1497, K1500, K1503, K1504, K1507, K1508

\newcount . . . . . . . . . . . . \underline{b47}, b87, b90, b92–b95, b97, b99, b148, e7, e8, i62, k9, m25, p25, r18, r178, z55, z204, z205, A23–A26, A56, A213, A228, B235, C11– C15, C300–C302, D306–D309, D318, F19, F123, F124, G3, G159–G162, K84, K86, K88, K90, K92, K100, K1266, K1495, K1498, K1501, K1505, N4–N6

\newcounter . . . . . . . . . . . . . 115, \underline{m10}

\newdimen . . . . . . . . . . . . . . . \underline{b47},

b79, b81, b82, b96, b147, e10– e12, i61, p356, p357, z53, z273, A9–A22, B96, B97, C3, C5– C8, C143, C303–C306, D3–D5, D7, D229–D234, D310, D311, D313–D316, G255, K52–K54, K56–K66, K72, K74, K75, K87, K89, K91, K93–K99, K1267, K1268

\newenvironment . . . . . 30, \underline{d112}, L445 \newfam . . . . . . . . . . . . . . . . . . . . . o25 \newfont . . . . . . . . . . . . . . . . . . . . \underline{s54} \newgroup . . . . . . . . . . . . . . . . . . . \underline{r38} \newhelp . . . . . . . . . . . . . . . . . . . \underline{b47} \newif . . . . . . . . . . . . . . . \underline{d136}, e9,

k7, k8, o177, r6, x3, z75, z76, z133, z206, A28–A33, A125, B249, C21, C218, D76, D223– D226, F21, F107, K76–K83, L2

\newinsert . . . . . . . . . . . . . . . . . .

\underline{b62}, B236, G239, K23–K40, K1176 \newlabel . . . . . . . . . . . . . . . \underline{x22}, x34 \newlanguage . . . . . . . . . . . . . . . . \underline{b56} \newlength . . . . . . . . . . . . . . . 119, \underline{n3} \newline . . . . . . . . . . . . . . . . . . . . \underline{i43} \newlinechar . . . . . . . . . . . . . . a19, \underline{d5}

                                       \newmathalphabet . . . . . . . . . . . . \underline{q99}
                                       \newmathalphabet@@ . . . . . . . . . . . \underline{q99}
                                       \newmathalphabet@@@ . . . . . . . . . . \underline{q99}

\newmuskip . . . . . . . . . . . . . . . . . \underline{b47} \newpage . . . . . . . . . K114, K120, \underline{K131} \newread . . . . . . . . . . . . . . . . . \underline{b54}, k3 \newsavebox . . . . . . . . . . . . . . 269, \underline{B54} \newskip . . . . . \underline{b47}, b80, b83, b145,

b146, e14, e15, e17, i165–i167, i181, n3, y78, z207, A2–A8, K1509–K1511, K1515, K1516, K1519–K1521, K1525–K1527

\newtheorem . . . . . . . . . . . . . . . . . . \underline{E1} \newtie . . . . . . . . . . . . . . . . l646, l782 \newtoks … \underline{b47}, e16, o261, o262, p201 \newwrite . . \underline{b54}, k4–k6, F137, H4, H21 \nfss@catcodes . . . . . . . . . . . . . . .

. . d284, o28, o95, o303, o336, o337, \underline{o344}, q10, t19, t24, t54, K3

\nfss@text l231, l233, \underline{s74}, v5, \underline{v103}, x13

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\NG . . . . . . . . . . . . . . . . . . l359, N132 \ng . . . . . . . . . . . . . . . . . . l375, N132 \ni . . . . . . . . . . . . . . . . . . . t336, t337

\no@alphabet@error . \underline{o6}, r192, r194,

r365, r366, r380, r389, r475, r476 \noaccents@ . . . . . . . . . . . . . \underline{o467}, t48 \noalign . . . . . . . . . . . . . . . . t242,

t416, t419, t421, t422, t426, t427, z112, z113, z118, z121, z135, z246, C199, C324, C343, D75

\noboundary . . . . . . . . . . . . . . . . . b98 \nobreak b191, b194, \underline{b196}, i38, i53,

i149, i157, i169, i179, k67, k79, y68, B284, F73, F157, F158, F162, G291, J21, J25, K288, K872

\nobreakspace . . . . . . . . . . . . . . . \underline{i168} \nocite . . . . . . . . . . . . . . . . . 364, \underline{I39} \nocorr . . . . . . . . . . \underline{v25}, v40, v44, v47 \nocorrlist . . . . . . . . . . . . . v70, \underline{v102} \nofiles . . . . . . . . . . . . . . . . . 75, \underline{k63} \noindent . . . . . . . . . . . . . . . . . F122

\nointerlineskip . . . . . . . . \underline{b186},

t242, t416, t419, t422, t426, z174, D272, D274, K1164, K1172

\nolimits . . . . . . . . . . . t263, t270,

z3–z5, z9–z21, z26–z29, z31, z34 \nolinebreak . . . . . . . . . . . . . . 61, \underline{i13} \non@alpherr . . . . . . . . . . . . . . . . .

. . o439, o441, r59, \underline{r73}, r120, r828

\nonfrenchspacing . . . \underline{b152}, b251, k42

\nonscript . . . . . . . . . . . . . . z36, z38 \nonumber . . . . . . . . . \underline{z233}, z256, z257 \nopagebreak . . . . . . . . . . . . . . . 61, \underline{i3} \normalbaselines … \underline{b156}, z108, z110

\normalbaselineskip . . . . . . . . . . .

. . . . . . . . \underline{b145}, b157, p142, B188 \normalcolor . . . . . . . . . . . . . . . . .

. z199, z269, \underline{B47}, B227, F163, G84, K164, K360, K492, K502

\normalfont . . . . . . . . . . o476, \underline{s79},

v17, y118, z199, z269, F163, G250 \normallineskip … \underline{b145}, b156, B187

\normallineskiplimit  \underline{b145}, b157, z136
\normalmarginpar . . . . . . . . . . . \underline{G236}

\normalsfcodes k38, k40, k42, \underline{k62}, K481 \normalsize . . . . . . . . . . . . . . k36,

\underline{v123}, G14, G92, G221, K480, L5 \not . . . . . . . . . . . . . . . t241, t321, t340 \not@base . . . . . . . . . . . s86, s90–s100

\not@math@alphabet . . . . . . . s4, s7,

s10, s13, s16, s19, s22, s25, s28, \underline{s33} \notin . . . . . . . . . . . . . . . . . . . . . t362 \notrace . . . . . . . . . . . . . . . . . \underline{K1228} \nu . . . . . . . . . . . . . . . . . . . . . . . t196 \null … \underline{b170}, l349, l630, l632, x17,

y107, y130, z91, z110, z128, F157

\nulldelimiterspace . . . . . b134, t505

\nullfont . . . . . . . . . . . . . . . . . . y50 \number . . . . . . . . . . . . . . . . . . . . .

a33, d2, m40, o423, o426, p401, r51, r69, r89, r110, s71, L416, L447

\numberline . . . . . . F55, F65, \underline{F166}, G8 \nwarrow . . . . . . . . . . . . . . . . . . . t316

O

\O . . . . . . . l168, l282, l361, l570, N131 \o . . . . . . . l175, l287, l377, l578, N131 \o@lign . . . . . . . . . . . . . . . . \underline{b223},

l273, l279, l340, l347, l561, l567 \oalign . . . . . . . . . . . . . . . . \underline{b223}, l349 \obeycr . . . . . . . . . . . . . . . . . . . . \underline{i190} \obeylines \underline{b173}, y113, y125, y126, K453 \obeyspaces . . . . . . . . . . . . \underline{b173}, K453 \oddsidemargin . . . . . K53, K55, K474 \odot . . . . . . . . . . . . . . . . . . . . . . t293 \OE . . . . . . l167, l281, l360, l569, N131 \oe . . . . . . l174, l286, l376, l579, N131 \of . . . . . . . . . . . . . . . . . . . z67, z203

\offinterlineskip . . . . . . . . . . . \underline{b186}

\oint . . . . . . . . . . . . . . . . . . . . . . t270 \ointop . . . . . . . . . . . . . . . . t269, t270 \oldstylenums . . . . . . . . . . . . . . . . \underline{s64} \Omega . . . . . . . . . . . . . . . . . . . . . t223 \omega . . . . . . . . . . . . . . . . . . . . . t206 \ominus . . . . . . . . . . . . . . . . . . . . t296 \omit z121, z122, C334, C337, C344, C348 \on@line g8, g15, \underline{g183}, y55, B75, L335 \onecolumn . . . . . . . . . . . . . . . . \underline{K122}

\OnlyDescription . . . . . . . . . . p5, u3

\ooalign \underline{b223}, l277, l344, l532, l565,

l630, l632, l678, s76, t363, t365 \openup . . . . . . . . . . . . . . . . \underline{z129}, z134 \operator@font . \underline{t506}, z3–z34, z37, z40 \oplus . . . . . . . . . . . . . . . . . . . . . t297 \optional@arg . . . . . . . . . . . . . . . .

… p375, p470, p472, p548, p551 \OptionNotUsed …. \underline{L130}, L137, L350 \oslash . . . . . . . . . . . . . . . . . . . . t294 \otimes . . . . . . . . . . . . . . . . . . . . t295

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\outer . . . . . . . . . . . . . . . . . . . . . b11 \outer@nobreak . . . . . . . . . . . . . . .

. . G100, G139, G144, G147, G215 \outerparskip . . . . . . . . . . . . . . . . \underline{A1} \output . . . . . . . . . . . . . . . . . . . \underline{K204} \outputpenalty K206, K220, K245,

K248, K249, K286, K882, K883 \oval . . . . . . . . . . . . . . . . D247, \underline{D250} \over . . . . . . . . . . . . . t368, z107, z201 \overbrace . . . . . . . . . . . . . . . . . t421 \overfullrule . . . . . . . . . . . b129, \underline{J46} \overleftarrow . . . . . . . . . . . . . . t418 \overrightarrow . . . . . . . . . . . . . t415 \owns . . . . . . . . . . . . . . . . . . . . . . t337

P

\P . . . . . . . . . . . . . . . . . . . . . . . . l226 \p@ . . . . . . . . . . . . . . . . . . . . . . . \underline{b81} \p@equation . . . . . . . . . . . . . z211, z306 \p@reset@font . . . . . . . . . . . . . . . . \underline{s79} \p@selectfont . . . . . . . . . . . . . . . p117 \PackageError . . . . . . . . . . . . \underline{g88}, l247 \PackageInfo . . . . . . . . . . . . . . . . . \underline{g88} \PackageWarning . . . . . . . . . . . . . . \underline{g88}

\PackageWarningNoLine . . . . . . . . . \underline{g88}

\pagebreak . . . . . . . . . . . . . . . . 61, \underline{i3} \pagegoal . . . . . . . . . . . K1211, K1218 \pagenumbering . . . . . . . . . . . 229, w5 \pageref . . . . . . . . . . . . . . . . . . . \underline{x10} \pageshrink . . . . . . . K411, K415, K431 \pagestyle . . . . . . . . . . . . . . . . . . \underline{J2} \pagetotal . . . . . . . . . . . . . . . . K109 \paperheight . . . . . . . . . . . . . . . . \underline{K74} \paperwidth . . . . . . . . . . . . . . . . . \underline{K74} \par . . . . . . . . a62, b11, b166, b174,

b175, b190, b199–b201, b203, b205, b207, d6, h3, h4, h6, y48, y68, y105, A63, A110, A123, A148, A151, B179, B223, C175, C350, F24, F73, F164, G6, G15, G137, J39, J40, K143, K205, K1217

\par@deathcycles   \underline{A56}, A77, A79, A80

\paragraphmark . . . . . . . . . . . . . \underline{F126} \parallel . . . . . . . . . . . . . . . . . . t310 \parbox . . . . . . . . . . . . . . . . 269, \underline{B145} \parboxrestore . . . . . . . . . . . . . \underline{B190} \parfillskip . . . . . . . . b144, o475,

y77, y90, y102, A76, B187, F152 \parindent . b136, b215, b216, y77,

y84, y90, y102, A50, B182, F153 \parsep . . . . . . . . . . . . . \underline{A1}, A49, A90 \parshape . . . . . . . . . . . . . . . . . . A54 \parskip . . . . . . . . . . . . . . . b137,

y69, y100, y102, z315, A49, A73, A88, A90, A114, A140, A159, A210, B182, C70, K882

\partial . . . . . . . . . . . . . . . . . . . t232 \partopsep . . . . . . . . . . z313, \underline{A1}, A61

\PassOptionsToClass . . . . . . 432, \underline{L107}
\PassOptionsToPackage . . . . 432, \underline{L107}

\patch@level … N142, N154, N156, O8 \patterns . . . . . . . . . . . . . . . . . . \underline{l130} \penalty . . . . . . . b195–b200, b204,

b206, b208, i7, i10, i21, i120, i124, v99, y107, y110, z37, z137, z246, A177, C58, G114, G118, G120, K117, K145, K146, K880, I17

\perp . . . . . . . . . . . . . . . . . . . . . . t350 \ph@nt . . . . . . . . . . . . . . . . . . z77–z80 \phantom . . . . . . . . . . . . . . . . . . . . \underline{z75} \Phi . . . . . . . . . . . . . . . . . . . . . . . t221 \phi . . . . . . . . . . . . . . . . . . . . . . . t203 \Pi . . . . . . . . . . . . . . . . . . . . . . . t218 \pi . . . . . . . . . . . . . . . . . . . . . . . t198 \pickup@font . . . . . . . . . l121, o168,

\underline{o268}, o410, p122, p285, p287, p289 \pictur@ . . . . . . . . \underline{D9}, D53, D54, D60 \picture . . . . . . . . . . . . . . . . . . . . \underline{D9} \pm . . . . . . . . . . . . . . . . . . . . . . . t299 \pmatrix . . . . . . . . . . . . . . . . . . . \underline{z114} \pmod . . . . . . . . . . . . . . . . . . . . . . . \underline{z39} \poptabs . . . . . . . . . . . . . . g242, \underline{C129} \poptracing . . . . . . . . . . . . p130, p294

\postdisplaypenalty . . i28, z280, z294

\pounds . . . . . . . . . . . . . . . . . . . . l234 \Pr . . . . . . . . . . . . . . . . . . . . . . . . z32 \pr@@@s . . . . . . . . . . . . . . . . z155, z163 \pr@@@t . . . . . . . . . . . . . . . . z158, z164 \pr@m@s . . . . . . . . . . . . . . . . z152, z153 \prec . . . . . . . . . . . . . . . . . . . . . . t327 \preceq . . . . . . . . . . . . . . . . . . . . t330

\predisplaypenalty . . b115, z279, z293

\preload@sizes . . . . . . . . . . . . . . \underline{q84} \pretolerance . . . . . . . . . . b102, o477 \prevdepth . . . . . . . . . b186, b190,

b191, i147, i152, z135, G115, G117 \prim@s . . . . . . . . . . . z150, z151, z163

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\prime . . . . . . . . . . . . t172, t234, z152 \prime@s . . . . . . . . . . . . . . . . . . . \underline{z150} \process@table . . . . . . . . . . k34, \underline{r124}

\ProcessOptions . . . . . . . . . . . . . .

…. l256, p71, \underline{L138}, L181, L404

\ProcessOptions* . . . . . . . . . . . \underline{L138}

\prod . . . . . . . . . . . . . . . . . . . . . . t264 \propto . . . . . . . . . . . . . . . . . . . . t307 \protect . . . . . . . . . . . . . . . . d70,

d188, d204, d213, d218, d221, d222, d224, d225, d230, d231, d236, d239, \underline{d240}, g213, g230, g232, g233, g242, g250, g260, g272, g275, g283, k75, l21, l27, l48, l55, l134, l142, r394, r833, s57, v124, x12, C231, F11, F55, F65, F143, G8, J19, J22, K460, I5

\protected@edef . . . . . . . . . . . . . .

. . . . . . \underline{d223}, x37, B243, F43, G271, N122, N128, N133, N134

\protected@write . . . . . . . . . . . . .

. . k66, \underline{k71}, x33, F145, H14, H31

\protected@xdef . . . . . . . . . . . . . .

… \underline{d223}, F10, G257, G281, G297

\provide@command . . . . . . . d148, \underline{d149}

\providecommand . . . . . \underline{d148}, l6, K1250 \ProvidesClass . . . . . . . . . . 432, \underline{L100} \ProvidesFile . . . . . . . . . . . a36, \underline{L102}

\ProvidesPackage . . . . . . . . . . . . .

. . . . . . 432, p13, \underline{L83}, L100, L507

\ProvideTextCommand . . . . . . . . . \underline{l3}, l60
\ProvideTextCommandDefault . . . . . \underline{l57}

\ps@empty . . . . . . . . . . . . . . . \underline{J10}, N16 \ps@plain . . . . . . . . . . . . . . . . . . . \underline{J13} \Psi . . . . . . . . . . . . . . . . . . . . . . . t222 \psi . . . . . . . . . . . . . . . . . . . . . . . t205 \pushtabs . . . . . . . . . . . . . g242, \underline{C126} \pushtracing . . . . . . . . . . . p115, p275 \put . D29, D187–D190, D195, D197,

D209–D212, D217, D220, D363

Q

\qbezier . . . . . . . . . . . . . . . 305, \underline{D328} \qbeziermax . . . . . . . . . . . \underline{D324}, D349 \qquad . . . . . . . . . . . . . . . . . . . . . \underline{i187} \quad . . . . . . \underline{i187}, z109, z111, z120, F94 \quotedblbase . . . . . . . . . . . l378, l580 \quotesinglbase . . . . . . . . . . . . . l379

R

\r b164, b165, l160, l271, l308, l334,

l429, l456, l466, l492, l557, l592 \r@@t . . . . . . . . . . . . . . . . . . . . . . . \underline{z66} \radical . . . . . . . . . . . r700, r702, r732 \raggedbottom . . . . . . . . . . . . . . . . \underline{J30} \raggedleft . . . . . . . . . . . . . . y85, \underline{y87} \raggedright . . . . . . . . . . . . . y79, \underline{y81} \raise . . . . . . l307, l310, l533, l594,

l679, s77, t365, t398, t400, z73, B269, B278, D30, D40, D91, D173, D249, D266, D292, D374

\raisebox . . . . . . . . . . . . . . 270, \underline{B260} \rangle . . . . . . . . . . . . . . . . . . . . t473 \rbrace . . . . . . . . . . . . . . . . l225, t477 \rbrack . . . . . . . . . . . . . . . . . . . . \underline{b162} \rceil . . . . . . . . . . . . . . . . . . . . . t481 \Re . . . . . . . . . . . . . . . . . . . . . . . t230 \ref . . . . . . . . . . . . . . . . . . . . . . . \underline{x10}

\refstepcounter . . . . . . . . . . \underline{x32},

z197, z295, A189, E27, F42, G4

\refsteptcounter . . . . . . . . . . . . 115

\Relbar . . . . . . . . . . . . t372, t379, t384 \relbar . . . . . . . . . . . . t370, t381, t383 \relpenalty . . . . . . . . . . . . . . . . . b110 \rem@pt . . . . . . . . . . . . . . . . . . . . \underline{o244} \remove@angles . . . . . . . . . \underline{p301}, p326 \remove@nil . . . . . . . . . . . . . . . . . . r27 \remove@star . . . . . . . . . . . \underline{p301}, p309 \remove@to@nnil o243, \underline{p301}, p329, p458 \removelastskip \underline{b202}, b204, b206, b208 \renew@command . . d90, \underline{d91}, d155, d163

\renew@environment . . . . . . d118, \underline{d119}

\renewcommand 30, \underline{d90}, z268, z275, z285

\renewenvironment 30, \underline{d118}, z292, z304

\repeat . . . . . . . . a28, a30, \underline{b178}, C347

\RequirePackage . . . . . . . . . . . . . .

…. 432, L196, \underline{L203}, L224, L400

\RequirePackageWithOptions 432, \underline{L222}

\reserved@a … a63, a67, a68, a137, a138, a141, a159, a163, a185, a192, a195, a197, a198, a205, a208, a210, a211, a218, a221, a223, a249–a251, c4, c10, c27, d79, d83, d87, d99–d101, d103, d154–d156, d162–d165, d168, d186, d195, d200, d251, d258, f33, f37, g216, k76, k77, k99, k100, k138, k140, k145, k147,

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

k149, k155, k159, k167, k170, k186, k187, k191, k197, k218, k222, k226, l71, l73, l81, l97, l102, o38, o41, o44, o80, o83, o85, o120, o124, o338, o341, o385, o386, o398, o401, o406, o431, o434, o435, o443, p150, p152, p154, p164, p166, p169, p298, p299, p314, p315, q43, q47, r275, r284, r286, r330, r333, r343, r346, r444, r446, r504, r505, r546, r547, r625, r626, r702, r703, r805, r807, r823, r825, r826, r831, v29, v30, v35, v36, v47, v50, v69, v76, y40, y41, y53, y54, y58, y63, y64, z248–z251, z253, B36, B37, B40, B70, B76, C208, C212, C217, C236, C325, C326, D95, D97, D101, D253, G20, G21, G23, G24, G50, G54, G60, G63, G66, G69, K652, K1335, K1337, K1343, K1346, L77, L80, L81, L189, L192, L236, L237, L240, L277, L281, L292, L293, L295, L305, L344, L509, L511, N38, N69, N75, N76, N78, N80, N84, N91, N93, N94, N102, N104, N105, N120–N123, N126– N129, N155, N158, N159, \underline{N176}

\reserved@b . . a64, a65, d101, d102, d196, d197, d200, d251, d260, f33, f34, f37, k98, k100, k150, k152, k154, k221, k227, l74, l81, o70, o72, o123, o124, o432, o443, q37, q44, q61, q63, r206, r208, r256, r258, r283–r285, r320, r322, r401, r403, r448– r450, r457, v34, v35, v48, v50, v76, v77, C213, C215, C217, G30, G31, K588, K591, K604, K607, L78, L79, L285, L290, L293, L452, L453, L455, L481, N41, N43, N47, N121, N127, \underline{N176}

\reserved@c . . . . . . a65, a70, d255, d258, d260, d263, k210, k211, o71, o72, o433, o436, q38, q45, q51, q58, r24, r28, r207, r208, r257, r258, r321, r322, r402, r403, r425, r434, r449, r463, r615, r631, r640, r668, r679, r718, r731, r733, v49, v51, v58, L429–L431, L441, L457, L464, L489, N45, N66–N68, N70– N74, N77, N79, N86, N96, N178

\reserved@d . . . . . . . . . . . a68, a71, d250, d257, k209, k211, q51, q58, q60, q64, r623, r631, r640, r676, r679, r726, r731, r735, N179

\reserved@e . . i36, i38, i47, i53, q29,

q35, q60, q63, q64, r25, r30, N180 \reserved@f …. i37, i38, i53, l243–

l246, l248, l255, o163, o165, o171, o172, p338, p349, p353, p361, p367, p370, p421, p458, p461, q17, q28, q35, q61, q63, N181

\reset@font . . . . . . \underline{s79}, x13, B240,

G91, G220, G266, J14, K479, I20

                                \restglb@settings . . . . . . p222, \underline{p232}
                                \restore@mathversion r63, r66, r86, r94
                                \restore@protect . . . . . . . . . . . . \underline{d223}

\restorecr . . . . . . . . . . . . . . . . . \underline{i190}

                                \reversemarginpar . . . . . . . . . . \underline{G236}

\rfloor . . . . . . . . . . . . . . . . . . . . t485 \rgroup . . . . . . . . . . . . . . . . . . . . \underline{t489} \rhd . . . . . . . . . . . . . . . . . . . . . . . . s99 \rho . . . . . . . . . . . . . . . . . . . . . . . t199 \rhook . . . . . . . . . . . . . . . . . t375, t376 \right …. t501–t504, z109, z114, z127 \Rightarrow . . . . . . . . . t320, t379, t387 \rightarrow . . . . . . . . . . . . . . t344,

t345, t347, t374, t381, t386, t432 \rightarrowfill . . . . . . . . . t416, t430

                                \rightharpoondown . . . . . . . . . . . t358

\rightharpoonup . . . . . . . . . t357, t366 \righthyphenmin . . . . . . . . . b93, M11

                                \rightleftharpoons . . . . . . . . . . . t364

\rightline . . . . . . . . . . . . . . . . \underline{B285} \rightmargin . . . . . . . . . \underline{A9}, A40, A51 \rightmark . . . . . . . . . . . . . . . . . . \underline{J26} \rightskip . . . . . . . . . . b216, y76,

y82, y89, y101, A75, B186, F152 \rlap . . . . . . . . . . . . . . . . . . . l307,

l310, l594, z258, z269, \underline{B289}, C72 \rlh@ . . . . . . . . . . . . . . . . . . t364, t365 \rmdefault . . . . . . . . . . . . s5, \underline{t29}, t39 \rmfamily . . . . . . . . . . . . . s3, s4, v14 \rmoustache . . . . . . . . . . . . . . . . . t448 \Roman . . . . . . . . . . . . . . . . . 115, \underline{m36}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\roman . . . . . . . . . . . . . . . . . 115, \underline{m35} \romannumeral . . . . . . . . . . . . . . . .

…. m41, m42, A43, A221, A232 \root . . . . . . . . . . . . . . . . . . \underline{z66}, z203 \rootbox . . . . . . . . . . . . . . . . . . . . \underline{z66} \rq . . . . . . . . . . . . . . . . . . . . . . . \underline{b160} \rule . . . . . . . . 270, B247, \underline{B250}, G276

S

\S . . . . . . . . . . . . . . . . . . . . . . . . l227 \s@fct@ . . . . . . . . . . . . . . . p386, \underline{p463} \s@fct@fixed . . . . . . . . . . . . . . . . \underline{p542} \s@fct@gen . . . . . . . . . . . . . . . . . \underline{p479} \s@fct@genb . . . . . . . . . . . . . . . . . \underline{p488} \s@fct@sgen . . . . . . . . . . . . . . . . . \underline{p479} \s@fct@sgenb . . . . . . . . . . . . . . . . \underline{p488} \s@fct@sub . . . . . . . . . . . . . . . . . \underline{p501} \s@fct@subf . . . . . . . . . . . . . . . . . \underline{p530} \samepage . . . . . . . . . . . . . . . . 61, \underline{i27} \savebox . . . . . . . . . . . . . . . . 269, \underline{B55} \sb . . . . . . . . . . . . . . . . . . . . . . . \underline{z142} \sbox . . . . . . . . . . . . . . . . . . . 269,

b210, j4, A192, B57, \underline{B58}, B63, B68

\scan@@fontshape . . . . . . . . . q30, \underline{q33}

\scan@fontshape . . q2–q7, \underline{q8}, q16, \underline{q27} \scdefault . . . . . . . . . . . . . . s26, \underline{t34} \scriptfont . . . . . . . . . . . . . . . . . p292

\scriptfont@name . . . . . . . p287, p292
\scriptscriptfont . . . . . . . . . . . p293
\scriptscriptstyle . . . . . . . . z65, z68

\scriptspace . . . . . . . . . . . . . . . . b135 \scriptstyle . . . . . . . . . . . . t240, z64 \scshape . . . . . . . . . l220, s24, s25, v22 \searrow . . . . . . . . . . . . . . . . . . . t315 \sec . . . . . . . . . . . . . . . . . . . . . . . . z20 \secdef . . . . . . . . . . . . . . . . . . . \underline{F125} \sectionmark . . . . . . . . . . . . . . . \underline{F126} \select@group \underline{o416}, o435, \underline{r39}, r160,

r197, r330, r383, r392, r430, r462 \selectfont …. j7, l257, l322, l606,

o229, \underline{p112}, s5, s8, s11, s14, s17, s20, s23, s26, s29, s60, G252

\seriesdefault . . . . . . . r163, s82, \underline{t38}

\set@@mathdelimiter . . . . . . r677, \underline{r693}

\set@color . . . . . . . . . . . . . . . . . \underline{B46}

\set@display@protect . . . . . . . . . .

. . . . . d3, \underline{d221}, g7, g14, g37, g64 \set@fontsize . o232, o234, p119, \underline{p132} \set@mathaccent . . . . . r507, r515, \underline{r531} \set@mathchar . . . . . . . . . . . r565, \underline{r575}

                                       \set@mathdelimiter . . . r628, r637, \underline{r689}

\set@mathradical . . . . . . . . r168, r728 \set@mathsymbol . . . . . r549, r557, \underline{r578}

                                       \set@simple@size@args . . . . . . . . .

o311, p302, p317, \underline{p324}, p345, p363

                                       \set@size@funct@args . . . . . . . . . .

. . . . . . . . o316, p307, p309, \underline{p371}

                                       \set@size@funct@args@ . . . o317, \underline{p371}
                                       \set@typeset@protect . . . . . \underline{d221},

d240, C177, C202, K464, K466 \setcounter . . . . . . . . . . . . . . . . . .

. . 115, k127, \underline{m2}, m26, A212, K1496, K1499, K1502, K1506

\setlanguage . . . . . . . . . . . . . . . . b99 \setlength … 119, \underline{n4}, z311, z316–

z318, B27, B115, B161, B164, B209, B267, B268, B275–B277, K1512–K1514, K1517, K1518, K1522–K1524, K1528–K1530

                                       \SetMathAlphabet . . . . . . . . . . . . .

. . o14, q131, q132, \underline{r399}, t74, t75

                                       \SetMathAlphabet@ . . . r337, r406, \underline{r415}

\setminus . . . . . . . . . . . . . . . . . . t302 \SetSymbolFont . . . . . . . \underline{r254}, t64–t66 \SetSymbolFont@ . . . . . r227, r261, \underline{r269} \settodepth . . . . . . . . . . . . . . . 119, \underline{n6} \settoheight . . . . . . . . . . . . . . 119, \underline{n6} \settowidth . . . . . . . . . . . . . . . 119, \underline{n6} \sf@size j6, o191, o457, p282, p286, G254 \sfcode … b152–b155, b234, k39, N100 \sfdefault . . . . . . . . . . . . . . . s8, \underline{t29} \sffamily . . . . . . . . . . . . . s6, s7, v15 \sh@ft . . . . . . . . . . . . . . . . . \underline{b227},

l273, l279, l340, l347, l561, l567 \shapedefault . . . . . . . . r164, s83, \underline{t38} \sharp . . . . . . . . . . . . . . . . . . . . . t251 \shipout . . . . . . . . . . . . . . . . . . K463 \shortstack . . . . . . . . . . . . . . . . . D63 \showboxbreadth . . . . . . . . b124, b239 \showboxdepth . . . . . . b125, b239, o477 \showhyphens . . . . . . . . . . . . . . . . \underline{o470} \showoutput . . . . . . . . . . . . \underline{b236}, b247 \showoverfull . . . . . . . . . . \underline{b235}, b240 \Sigma . . . . . . . . . . . . . . . . . . . . . t219 \sigma . . . . . . . . . . . . . . . . . . . . . t200 \sim . . . . . . . . . . . . . . . . . . . t348, t359 \simeq . . . . . . . . . . . . . . . . . . . . . t349

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\sin . . . . . . . . . . . . . . . . . . . . . . . . z9 \sinh . . . . . . . . . . . . . . . . . . . . . . . z11 \sixt@@n . . . . . . . . . . . . . . . . a18,

\underline{b16}, b54, b55, o23, r43, r102, r499, r501, r541, r543, r584, r586, r611, r613, r619, r621, r664, r666, r672, r674, r714, r716, r722, r724, D148, D162, D164, G49, G71, K731, K777, K913, K1043, K1106, K1289, K1298, K1354, K1370, K1402

\size@update . . p128, p139, p158, \underline{p160} \sizefn@info . . . . . . . . . . . . . . . . .

… p308, p310, p318, p346, p364 \skew . . . . . . . . . . . . . . . . . . . . . . t428 \skip . . . . . . . . . . . . . . . . . . . b28,

b49, b65, B226, G240, K266, K358 \skip@ . . . . . . . . . . . . . . . . . . \underline{b41},

b189, b191, b192, b194, v86, v89 \skipdef . . . . . . . . . . . . . . . . b45, b49 \slash . . . . . . . . . . . . . . . . . . . . . \underline{b195} \sldefault . . . . . . . . . . . . . . s23, \underline{t34} \sloppy . . . . . . . . . . . . B189, \underline{J34}, J39 \sloppypar . . . . . . . . . . . . . . . . . . J39 sloppypar (environment) . . . . . . . . \underline{J39} \slshape . . . . . l313, l597, s21, s22, v21 \smallbreak . . . . . . . . . . . . . . . . . \underline{b203} \smallint . . . . . . . . . . . . . . . . . . t272 \smallskip . . . . . . . . . . . . . b204, \underline{i162} \smallskipamount …. b203, i162, \underline{i165} \smash . t370, t430, t431, t434, t435, \underline{z95} \smile . . . . . . . . . . . . . . . . . . . . . t353 \sp . . . . . . . . . . . . . . . . . . . . . . . \underline{z142} \sp@n . . . . . . . . . . . . . . . . . . . . . \underline{C344} \space . . . . . . . . . . . . . . . . . . . . . \underline{b168} \spacefactor . . . . . . . . . . . . b193,

b194, i67, i72, i80, i176, G291, G293 \spaceskip . . . . . . . . . . . . . . . . . . s66 \spadesuit . . . . . . . . . . . . . . . . . t255 \span . . . . . . . . . . . . . . . . . . . . . C348 \split@name \underline{o272}, o286, o369, p509, p523 \splitmaxdepth . . . . . . . . . b131, G269 \splittopskip . . . . . . . . . . b143, G268 \sqcap . . . . . . . . . . . . . . . . . . . . . t285 \sqcup . . . . . . . . . . . . . . . . . . . . . t286 \sqrt . . . . . . . . . . . . . . . . . . . . . . \underline{z202} \sqrtsign . . . . . . t413, t414, z71, z202 \sqsubset . . . . . . . . . . . . . . . . . . . s95 \sqsubseteq . . . . . . . . . . . . . . . . . t308 \sqsupset . . . . . . . . . . . . . . . . . . . s96 \sqsupseteq . . . . . . . . . . . . . . . . . t309 \SS . . . . . . . . . . . . . . l222, l362, N132 \ss . . . . . . l176, l288, l380, l581, N132 \ssf@size …. o192, o458, p282, p288 \stackrel . . . . . . . . . . . . . . . . . . \underline{z200} \star . . . . . . . . . . . . . . . . . . . . . . t306 \stepcounter . . \underline{m17}, o428, \underline{r39}, x36,

z210, z253, z305, G256, G280, K509 \steptcounter . . . . . . . . . . . . . . . 115 \stop . . . . . . . . . . . . . . . . . . . . . . \underline{y48} \stretch . . . . . . . . . . . . . . . . . . . \underline{i183} \strip@prefix . . . . . . . . . . . . . . . .

\underline{a53}, a170, a241, d197, d274, \underline{o413}

\strip@pt . . . . . . . . . . . . . . . . . . .

o186, o190, \underline{o244}, o457, o458, p134 \strut . . . . . . . . \underline{b211}, z121, z122, C31 \strutbox . . . . . . . . . . \underline{b211}, p143,

B247, C166, C167, G269, G276 \sub@sfcnt … o322, p502, p503, p506 \subf@sfcnt … o323, p531, p532, p535

\subparagraphmark . . . . . . . . . . \underline{F126}

\subsectionmark . . . . . . . . . . . . \underline{F126} \subset . . . . . . . . . . . . . . . . . . . . t332 \subseteq . . . . . . . . . . . . . . . . . . t334

\subst@correction . . . . . . . . o60, o66
\subst@fontshape . . . . . . . . . . \underline{q1}, \underline{q70}

\subst@size . . . . . . . . . . . . . . . . . \underline{p437}

\subsubsectionmark . . . . . . . . . . \underline{F126}

\succ . . . . . . . . . . . . . . . . . . . . . . t326 \succeq . . . . . . . . . . . . . . . . . . . . t329 \sum . . . . . . . . . . . . . . . . . . . . . . . t265 \sup . . . . . . . . . . . . . . . . . . . . . . . . z24 \suppressfloats . . . . . . . . . . . \underline{K1252} \supset . . . . . . . . . . . . . . . . . . . . t331 \supseteq . . . . . . . . . . . . . . . . . . t333 \surd . . . . . . . . . . . . . . . . . . . . . . t237 \sw@slant . . . . . . . . . . . . . . . v72, \underline{v82} \swarrow . . . . . . . . . . . . . . . . . . . t317 \symbol . . . . . . . . . . . . . . . . . l106, \underline{s54} \symletters . . . . . . . . . . . . . . . . . . s68 \symoperators . . . . . . . . . . . . . . . t506

T

\T . . . . . . . . . . . g26, L490, L494, L495 \t . . . . . . . . . . . . l203, l542, l644, l780 \t@st@ic . . . . . . . . . . . . . . . . v71, \underline{v75} \tabbing . . . . . . . . . . . . . . \underline{C62}, \underline{C145} \tabbingsep . . . . . . . C121, C123, \underline{C142} \tabcolsep . . . . . . . . . . . . C226, \underline{C303}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\tabskip . . . . . . . . . . . b222, z138, z139, z215, z218, z221, z223, z309, z322, z325, z327, C149, C172

\tabular . . . . . . . . . . . . . . . . . . \underline{C156} \tabular* . . . . . . . . . . . . . . . . . \underline{C157} \tabularnewline . . . . . . . . C174, \underline{C186} \tan . . . . . . . . . . . . . . . . . . . . . . . . z15 \tanh . . . . . . . . . . . . . . . . . . . . . . . z17 \tau . . . . . . . . . . . . . . . . . . . . . . . t201 \tencirc . . . . . . . . . . . u10, D47, D320 \tencircw . . . . . . . . . . . . . . u10, D49 \tenln . . . . . u9, D47, D48, D319, D321 \tenlnw . . . . . . . . . . . . . u9, D49, D50 \TeX . . . . . . . . . . . . . . . . . . . . . \underline{j1}, j12 \text@command . . . . . . . . . . . . . v8, \underline{v28} \textacutedbl . . . . . . . . . . . l700, l830

\textascendercompwordmark . l649, l785

\textasciiacute . . . . . . . . . l749, l879 \textasciibreve . . . . . . . . . l697, l827 \textasciicaron . . . . . . . . . l698, l828 \textasciicircum . . . . . . . . l207, l381

\textasciidieresis . . . . . . . l737, l867

\textasciigrave . . . . . . . . . l688, l818 \textasciitilde . . . . . . . . . l208, l382

\textasteriskcentered . . . . . . . . .

. . . . . . . . . . l189, l520, l659, l795 \textbackslash . . . . . . l190, l383, l521 \textbaht . . . . . . . . . . . . . . l723, l853 \textbar . . . . . . . . . . . l191, l384, l522 \textbardbl . . . . . . . . . . . . . l703, l833 \textbf . . . . . . . . . . . . . . . . . . . . \underline{v18} \textbigcircle . . . . . . . . . . l676, l812 \textblank . . . . . . . . . . . . . l656, l792 \textborn . . . . . . . . . . . . . . l689, l819 \textbraceleft . . l192, l224, l385, l523 \textbraceright . l193, l225, l386, l524 \textbrokenbar . . . . . . . . . . l735, l865 \textbullet . . . . . l194, l525, l705, l835

\textcapitalcompwordmark . . l648, l784

\textcelsius . . . . . . . . . . . . l706, l836 \textcent . . . . . . . . . . . . . . l731, l861

\textcentoldstyle . . . . . . . l708, l838

\textcircled . . . . . . . . . . . . . . . . .

. . l200, l204, l220, l531, l677, l766 \textcircledP . . . . . . . . . . . l742, l872

\textcolonmonetary . . . . . . . l710, l840
\textcompwordmark . . . . . . . l209, l387

\textcopyleft . . . . . . . . . . . l740, l870 \textcopyright . . l204, l233, l738, l868 \textcurrency . . . . . . . . . . . l733, l863 \textdagger . l196, l228, l527, l701, l831 \textdaggerdbl l195, l229, l526, l702, l832 \textdblhyphen . . . . . . . . . . l660, l796

                                       \textdblhyphenchar . . . . . . . l696, l826

\textdegree . . . . . . . . . . . . . l745, l875 \textdied . . . . . . . . . . . . . . l691, l821 \textdiscount . . . . . . . . . . . l725, l855 \textdiv . . . . . . . . . . . . . . . l762, l892 \textdivorced . . . . . . . . . . . l690, l820 \textdollar . . . . . . . . . . . . . . l177,

l223, l311, l388, l595, l657, l793

                                       \textdollaroldstyle . . . . . . l707, l837

\textdong . . . . . . . . . . . . . . l719, l849 \textdownarrow . . . . . . . . . . l687, l817

                                       \texteightoldstyle . . . . . . . l670, l806

\textellipsis . . . . . . . . . . . l216, l237 \textemdash . . . . . l178, l289, l389, l582 \textendash . . . . . l179, l290, l390, l583 \textestimated . . . . . . . . . . l726, l856 \texteuro . . . . . . . . . . . . . . l760, l890 \textexclamdown . l180, l291, l391, l584

                                       \textfiveoldstyle . . . . . . . l667, l803

\textfloatsep . . . . . . . . . . . . . . . .

K530, K543, K1384, K1433, \underline{K1509} \textflorin . . . . . . . . . . . . . l709, l839 \textfont . . . . . . . . . . . . . p291, z148 \textfont@name . . . . . . . . . p285, p291

                                       \textfouroldstyle . . . . . . . l666, l802

\textfraction . . K1244, K1376, \underline{K1503}

                                       \textfractionsolidus . . . . . l661, l797

\textgravedbl . . . . . . . . . . . l699, l829 \textgreater . . . . . . . . l202, l392, l541 \textguarani . . . . . . . . . . . . l713, l843 \textheight . . . . . . . . . . . . . . k16,

k17, G149, G150, G153, G176, K59, K173, K174, K222, K317, K344, K508, K565, K596, N14, N15

\texthyphen . . . . . l182, l293, l394, l586 \texthyphenchar . l181, l292, l393, l585 \textinterrobang . . . . . . . . l717, l847

                                       \textinterrobangdown . . . . . l718, l848

\textit . . . . . . . . . . . . . . . . . . . . \underline{v20} \textlangle . . . . . . . . . . . . . l672, l808 \textlbrackdbl . . . . . . . . . . l684, l814 \textleaf . . . . . . . . . . . . . . l692, l822 \textleftarrow . . . . . . . . . . l654, l790 \textless . . . . . . . . . . l201, l395, l540 \textlira . . . . . . . . . . . . . . l715, l845 \textlnot . . . . . . . . . . . . . . l741, l871

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\textlquill . . . . . . . . . . . . . l729, l859 \textmacron . . . . . . . . . . . . . l744, l874 \textmarried . . . . . . . . . . . . l693, l823 \textmd . . . . . . . . . . . . . . . . . . . . \underline{v18} \textmho . . . . . . . . . . . . . . . l675, l811 \textminus . . . . . . . . . . . . . l673, l809 \textmu . . . . . . . . . . . . . . . . l750, l880 \textmusicalnote . . . . . . . . l694, l824 \textnaira . . . . . . . . . . . . . l712, l842

\textnineoldstyle . . . . . . . l671, l807

\textnormal . . . . . . . . . . . . . . . . . \underline{v14} \textnumero . . . . . . . . . . . . . l724, l854 \textohm . . . . . . . . . . . . . . . l683, l813 \textonehalf . . . . . . . . . . . . l758, l888 \textoneoldstyle . . . . . . . . l663, l799 \textonequarter . . . . . . . . . l757, l887 \textonesuperior . . . . . . . . l754, l884 \textopenbullet . . . . . . . . . l727, l857 \textordfeminine . . . . . . . . l739, l869

\textordmasculine . . . . . . . l755, l885

\textparagraph l197, l226, l528, l751, l881

\textperiodcentered . . . . . . . . . . .

. . . . . . . . . . l198, l529, l752, l882

\textpertenthousand . . l352, l721, l851

\textperthousand …. l350, l704, l834 \textpeso . . . . . . . . . . . . . . l714, l844 \textpilcrow . . . . . . . . . . . . l722, l852 \textpm . . . . . . . . . . . . . . . . l746, l876 \textquestiondown l183, l294, l396, l587 \textquotedbl . . . . . . . . . . . . . . . l399 \textquotedblleft l184, l295, l397, l588 \textquotedblright l185, l296, l398, l589 \textquoteleft . . l186, l297, l400, l590 \textquoteright . l187, l298, l401, l591 \textquotesingle . . . . . . . . l658, l794

\textquotestraightbase . . . l650, l786
\textquotestraightdblbase . l651, l787

\textrangle . . . . . . . . . . . . . l674, l810 \textrbrackdbl . . . . . . . . . . l685, l815 \textrecipe . . . . . . . . . . . . . l716, l846

\textreferencemark . . . . . . . l753, l883

\textregistered . . . . . l220, l743, l873 \textrightarrow . . . . . . . . . l655, l791 \textrm . . . . . . . . . . . . . . . . . . . . \underline{v14} \textrquill . . . . . . . . . . . . . l730, l860 \textsc . . . . . . . . . . . . . . . . . . . . \underline{v20} \textsection . . . . . . . . . . . . . . . . .

. . l199, l227, l402, l530, l736, l866 \textservicemark . . . . . . . . l728, l858

\textsevenoldstyle . . . . . . . l669, l805

\textsf . . . . . . . . . . . . . . . . . . . . \underline{v14} \textsixoldstyle . . . . . . . . l668, l804 \textsl . . . . . . . . . . . . . . . . . . . . \underline{v20} \textsterling . . . . . . . . . . . . l188,

l235, l318, l403, l602, l732, l862 \textstyle . . . . . . . . . . j15, t368, z63

                                       \textsuperscript . . . . . . . l221, \underline{G251}

\textsurd . . . . . . . . . . . . . . l756, l886

                                       \TextSymbolUnavailable . . . . . \underline{l3}, l559
                                       \textthreeoldstyle . . . . . . . l665, l801
                                       \textthreequarters . . . . . . . l759, l889
                                       \textthreequartersemdash . . l653, l789
                                       \textthreesuperior . . . . . . . l748, l878

\texttildelow . . . . . . . . . . . l695, l825 \texttimes . . . . . . . . . . . . . l761, l891 \texttrademark . . . . . . l221, l720, l850 \texttt . . . . . . . . . . . . . . . . . . . . \underline{v14} \texttwelveudash . . . . . . . . l652, l788 \texttwooldstyle . . . . . . . . l664, l800 \texttwosuperior . . . . . . . . l747, l877 \textunderscore . . . . . l210, l231, l404 \textup . . . . . . . . . . . . . . . . . . . . \underline{v20} \textuparrow . . . . . . . . . . . . l686, l816

                                       \textvisiblespace . . . . . . . l212, l405

\textwidth . . . . . . . . . . . . . . k18, B214, G158, K60, K125, K149, K166, K493, K503, K1463, N15

\textwon . . . . . . . . . . . . . . . l711, l841 \textyen . . . . . . . . . . . . . . . l734, l864

                                       \textzerooldstyle . . . . . . . l662, l798

\tf@size . . . . . o191, o456, p282, p284 \TH . . . . . . . . . . . . . . . . . . l363, N132 \th . . . . . . . . . . . . . . . . . . l406, N132 \thanks . . . . . . . . . . . . . . . . . . 332, \underline{F9} thebibliography (environment) . . 364 \theequation … z199, z211, z270, z306 \thefootnote . \underline{G245}, G281, G286, G306 \thempfn . . . . . . . . . . . . . . . B216,

G257, G262, G297, G302, \underline{G305} \thempfootnote . . . . . . . . . B216, \underline{G247} \thepage . . . . . . . . . . . . . . . . . . . .

k73, w6, x14, x34, F143, H15, H32, J14, K192, K223, K1149, I23

\Theta . . . . . . . . . . . . . . . . . . . . . t215 \theta . . . . . . . . . . . . . . . . . . . . . t191 \thicklines . . . . . . . . . . . . . . . . . \underline{D46} \thickmuskip . . . . . . . . . . . . t509, z146 \thinlines . . . . . . . . . . . . . . . . . \underline{D46} \thinmuskip …. i174, t507, z144, z147 \thinspace . . . . . i174, \underline{i184}, z119, z148

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\thispagestyle . . . . . . . . . . . . . . . \underline{J6} \thr@@ . . . . . . . . . . \underline{b16}, p58, p208,

p214, p227, p234, p241, p246, z222, z326, A219, A230, D156, D157, D159, D160, D191, D213

\tilde . . . . . . . . . . . . . . . . . . . . . t404 \time . . . . . . . . . . . . . . . . . a121, a125 \times . . . . . . . . . . . . . . . . . . . . . t305 \title . . . . . . . . . . . . . . . . . . . 332, \underline{F3} \to . . . . . . . . . . . . . . . . . . . . . . . t345 \today . . . . . \underline{a126}, a130, a138, a141, F8 \toks . . . . . . . . . . . . . . . . . . . b31,

b53, r372, r373, r383, r392, \underline{N182} \toks@ . . . . . . . . . . . . . . . . . . \underline{b41},

o121, o125, o127, o130, r183, r187, r193, r196, r201, r242, r243, r245, r246, r276, r278, r282, r299, r302, r361, r373– r375, r421, r423, r429, r437, r441, r453, r456, r459, r467, r469, r781, r783, r785, r788, r790, r793, r796, r828, r829, L122, L123, L125, L126, L363, L364

\toksdef . . . . . . . . . . . . . . . . b46, b53 \tolerance . . . . . b103, o477, J35, J43 \top . . . . . . . . . . . . . . . . . . . . . . . t238 \topfigrule . . . . . . . . . . . K529, \underline{K1531} \topfraction . . . . . . . . . . G165, \underline{K1497} \topmargin . . . . . . . . . . . . K52, K487 \topsep . . . . . . . . . . . . . z311, A2, A59 \topskip . . . . . . . b142, k49, \underline{A1}, K109 \totalheight . . . . . . . . . . . . B17–B19 \tr@ce . . . . . . . . . . . . . . . . . K188,

K215, K274, K342, K398, K413–K416, K427–K431, K583, K600, K616, K618, K704, K708, K720–K723, K729, K732, K740, K744, K755, K760, K765– K768, K775, K778, K786, K795, K801, K806, K811, K817, K818, K823, K828–K830, K837, K841, K846, K850, K855, K866, K867, K869, K887, K896, K902, K911, K914, K920, K930, K934, K943, K949, K954, K959, K963, K967, K968, K975, K979, K983, K990, K999, K1003, K1007, K1008, K1012, K1013, K1019, K1025, K1035, K1041, K1045, K1046, K1051, K1052, K1058, K1061– K1063, K1070–K1072, K1080, K1084, K1096, K1097, K1104, K1107, K1115, K1119, K1123, K1124, K1128, K1129, K1185, K1190, K1201, K1211, K1218, \underline{K1228}, K1273, K1286, K1287, K1291, K1294, K1296, K1299, K1302, K1304, K1345, K1352, K1357, K1363, K1368, K1372, K1378, K1386, K1387, K1394, K1399, K1404, K1406, K1412, K1414, K1421, K1448, K1449, K1458, K1474, K1479, K1487

\tracefloats . . . . . . . . . . . . . . \underline{K1228} \tracefloatvals . . . . . . . . . . . \underline{K1228} \tracingall . . . . . . . . . . . . . . . . . \underline{b243}

\tracingcommands . . . . . . . . . . . . b244

\tracingfonts . . . . . \underline{p17}, p54, p58, p86, p116, p125, p148, p178, p192, p208, p214, p227, p234, p241, p246, p255, p268, p276, p279

\tracinglostchars . . . . . . b119, b245

\tracingmacros . . . . . . . . . . . . . . b246 \tracingoff . . . . . . . . . . . . p116, p276 \tracingon . . . . . . . . . . . . p117, p277 \tracingonline . . . . . . . . . . . . . . b235 \tracingoutput . . . . . . . . . . . . . . b238 \tracingpages . . . . . . . . . . . . . . . b245

\tracingparagraphs . . . . . . . . . . . b246
\tracingrestores . . . . . . . . . . . . b246

\tracingstats . . . . . . . . . . . b244, N2 \triangle . . . . . . . . . . . . . . . . . . t244 \triangleleft . . . . . . . . . . . t273, t377 \triangleright . . . . . . . . . . t274, t377 \trivlist . . . . . . . . . . . . y72, y79,

y85, y99, z296, \underline{A89}, C69, E35, E37

\try@load@fontshape . . . . . . . . . . .

…. o289, o329, p510, r132, r149 \try@simple@size … o310, \underline{p312}, p453 \try@simples . . p401, p405, \underline{p412}, p421 \try@size@range o318, p101, p312, \underline{p392}

\try@size@substitution . . p103, \underline{p397}

\try@sizes . . . . . . . . . . . . . o20, o462 \tryif@simple . . . . . . . . . . p414, p420 \tryis@simple . . . . . . . . . . . . . . . \underline{p419} \ttdefault . . . . . . . . . . . . . . s11, \underline{t29} \ttfamily . . . . . . . . s9, s10, v16, y118 \tw@ . . . . . . . . . . . . . . . . . . . . . . . \underline{b16}

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\two@digits . . . . . . . . . . . . . . a33,

a127, a128, \underline{d2}, p498, \underline{L416}, L447 \twocolumn . . . . . . . . . . . . . . . . \underline{K147}

\type@restoreinfo . . . . . . p156, \underline{p161}

\typein . . . . . . . . . . . . . . . . . . 30, \underline{d18} \typeout . . . . . . . . . . 30, a20, a58,

a114, a139, a141, a153, a168, a175, a186, a199, a212, a225, a239, c12, c28, \underline{d3}, d22, g77, k65, k172, k173, k178, k215, k225, k228, o283, s106, s113, s124, s135, s145, t9, t44, H8, H25, K1229, L95, N18, N136, N143, N155, N156, N164, O17

U

\u . . . . . . . . . . . . . . . . . l161, l269,

l336, l408, l415, l435, l442, l555 \uccode . . . . . . . . . . . . . . . . . . . . .

N88, N98, N107, N109, N113, N115 \uchyph . . . . . . . . . . . . . . . . . . . . b120 \unboldmath . . . . . . . . . . . . . . . . . . s51

\undefinedpagestyle . . . . . . . . . J4, J8

\underbar . . . . . . . . . . . . . . . . . . \underline{b210} \underbrace . . . . . . . . . . . . . . . . . t424 \underline …. 270, b210, B255, \underline{B256} \unhcopy . . . . . . . . . b212, C310, D376 \unitlength … B33, B43, \underline{D5}, D20–

D23, D30, D31, D34, D35, D42, D78, D129, D179, D181, D194, D199, D201, D216, D218, D221, D255, D285, D296, D332, D333, D335, D336, D339, D340, D342, D343, D352, D354, D356, D358, N7

\unlhd . . . . . . . . . . . . . . . . . . . . . . s98 \unpenalty . . . . . . . . . . . . . v97, y114

\unrestored@protected@xdef . . . . .

. . . . . . . \underline{d223}, G262, G286, G302 \unrhd . . . . . . . . . . . . . . . . . . . . . s100 \unvcopy . . . . . . . . . . . . . . . . . . . z123 \Uparrow . . . . . . . . . . . . . . . . . . . t465 \uparrow . . . . . . . . . . . . . . . . . . . t459 \upbracefill . . . . . . . . . . . . t427, t443 \updefault . . . . . . . . . . . s20, \underline{t34}, t41 \Updownarrow . . . . . . . . . . . . . . . . t469 \updownarrow . . . . . . . . . . . . . . . . t463 \uplus . . . . . . . . . . . . . . . . . . . . . t287 \upper@bound . . . . . . . p339–p341, \underline{p355} \uppercase . . . . . . . . . . . . . . . . N122 \upshape . . . . . . . . . . . . l315, l533,

l599, l679, s18, s19, s32, s77, v23 \Upsilon . . . . . . . . . . . . . . . . . . . t220 \upsilon . . . . . . . . . . . . . . . . . . . t202 \use@mathgroup . . . . . . . . . . . . . . .

. . . . . o422, o440, o442, \underline{p253}, r50, r343, r445, r448, r806, r830

\usebox . . . . . . . . . . . . . . . . . . . . \underline{B81} \usecounter . . . . . . . . . . . . \underline{A212}, A225 \usefont . . . . . . . . o53, o228, s67, s80 \usepackage . . . . . . . L196, \underline{L226}, L317 \UseTextAccent . . . . . . . . . . \underline{l105}, l127 \UseTextSymbol . . . . . . . . . . \underline{l105}, l125

V

\v . . . . . . . . . . . . . . . . . l162, l270, l335, l411–l413, l417, l419, l422, l424, l426, l432, l438–l440, l444, l446, l449, l451, l453, l459, l556

\v@false . . . . . . . . . . . . . . . . . . . . z78 \v@true . . . . . . . . . . . . . . . . . z77, z79 \vadjust . i10, i38, i47, i139, i155, G120 \value . . . . . . . . . . . . . . . 115, \underline{m14}, I9 \varepsilon . . . . . . . . . . . . . . j15, t207 \varphi . . . . . . . . . . . . . . . . . . . . t212 \varpi . . . . . . . . . . . . . . . . . . . . . t209 \varrho . . . . . . . . . . . . . . . . . . . . t210 \varsigma . . . . . . . . . . . . . . . . . . t211 \vartheta . . . . . . . . . . . . . . . . . . t208 \vbadness . . . . . . . . . . . . . . . . . . b105 \vdash . . . . . . . . . . . . . . . . . . . . . t313 \vdots . . . . . . . . . . . . . . . . . . . . . t396 \vec . . . . . . . . . . . . . . . . . . . . . . . t409 \vector . . . . . . . . . . . . . . . g260, \underline{D126} \vee . . . . . . . . . . . . . . . . . . . t279, t280 \verb . . . . . . . . . . . . . y128, \underline{y130}, y139

\verb@balance@group . . . . . . . . . . .

. . . . . . . . \underline{y122}, y123, y138, y140 \verb@egroup . . \underline{y123}, y127, y138, y141 \verb@eol@error . . . . . . . . \underline{y124}, y132 \verbatim . . . . . . . . . . . . . . . . . . \underline{y116} verbatim* (environment) . . . . . . . \underline{y119} \verbatim@font . . . . . y113, \underline{y118}, y133

\verbatim@nolig@list . . . . \underline{y143}, y149

\version@elt \underline{r9}, r22, r23, r180, r181,

r225, r245, r336, r374, r466, r786 \version@list . . . . . . . . . . . . . \underline{r7},

r12, r23, r173, r181, r230, r251, r270, r341, r386, r416, r471, r799

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx

\Vert . . . . . . . . . . . . . . . . . . t454, t456 \vert . . . . . . . . . . . . . . . . . . . . . . t457 \vfil . . b199, D274, K144, K329, K490 \vfilneg . . . . . . . . . . . . . . . . . . . b199 \vfuzz . . . . . . . . . . . . . . b128, J38, J45 \vgl@ . . . . . . . . . . . . . . . . . b189, b190 \vglue . . . . . . . . . . . . . . . . . . . . . \underline{b189} \vline . . . . . . . . . . . . . . . . . . . . \underline{C331} \voidb@x . . . . . . . . . . . . \underline{b81}, b220, n7 \vphantom . . . . . . . . . . . . . . . \underline{z75}, z94 \vrule . b193, i179, l213, l215, p144,

t441, t442, t444, t445, B90, B92, B129, B136, B254, B284, C166, C198, C312, C331, D120, D168, D171, D186, D193, D208, D215, D274, D360, K1173, K1467

\vspace . . . . . . . . . . . . \underline{i132}, i162–i164 \vsplit . . . . . . . . . . . . . . . . . . . K300

W

\warn@rel@i . . . . . . . . . . . . . . q15,

\underline{q19}, q71, q75, q80, q85, q109, q131 \wedge . . . . . . . . . . . . . . . . . t277, t278 \widehat . . . . . . . . . . . . . . . . . . . t412 \widetilde . . . . . . . . . . . . . . . . . t411 \widowpenalty . . . . . . . . . . . . . . . b112 \width . . . . . . . . . . . . . . . . . . . . . B14 \wlog … a42, \underline{b40}, b61, b69, L97, N188 \wp . . . . . . . . . . . . . . . . . . . . . . . t229 \wr . . . . . . . . . . . . . . . . . . . . . . . t291

\wrong@fontshape . . . . . . . o293, \underline{o383}

X

\x . . . . . . . . . . . . . . . . . . . o248, o249 \x@protect . . . . . . . . . . . . d201, \underline{d212} \Xi . . . . . . . . . . . . . . . . . . . . . . . t217 \xi . . . . . . . . . . . . . . . . . . . . . . . t197

Y

\year . . . . . . . . . . . . . . . a127, c5, L447 \yxdim . . . . . . . . . . . . . . . . . . . . \underline{D310}

Z

\Z . . . . . . . . . . . . . . . . . . . N75, N102 \z . . . . . . . . . . . . . . . . . . . . N76, N91 \z@ . . . . . . . . . . . . . . . . . . . . . . . \underline{b81} \z@skip . . . . . . . . . . . . . . . . . . . . \underline{b81} \zap@space k84, L111, \underline{L259}, L276, L292 \zeta . . . . . . . . . . . . . . . . . . . . . . t189

File Key: a=ltdirchk.dtx, b=ltplain.dtx, c=ltvers.dtx, d=ltdefns.dtx,
e=ltalloc.dtx, f=ltcntrl.dtx, g=lterror.dtx, h=ltpar.dtx, i=ltspace.dtx,
j=ltlogos.dtx, k=ltfiles.dtx, l=ltoutenc.dtx, m=ltcounts.dtx, n=ltlength.dtx,
o=ltfssbas.dtx, p=ltfsstrc.dtx, q=ltfsscmp.dtx, r=ltfssdcl.dtx, s=ltfssini.dtx,
t=fontdef.dtx, u=preload.dtx, v=ltfntcmd.dtx, w=ltpageno.dtx, x=ltxref.dtx,
y=ltmiscen.dtx, z=ltmath.dtx, A=ltlists.dtx, B=ltboxes.dtx, C=lttab.dtx,
D=ltpictur.dtx, E=ltthm.dtx, F=ltsect.dtx, G=ltfloat.dtx, H=ltidxglo.dtx,
I=ltbibl.dtx, J=ltpage.dtx, K=ltoutput.dtx, L=ltclass.dtx, M=lthyphen.dtx,
N=ltfinal.dtx, O=ltpatch.ltx