           The fontdef.dtx file^{∗}

Frank Mittelbach  Rainer Schöpf

March 27, 1996

1 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.

2 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).

∗This file has version number v2.2n, dated 1995/11/21

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.

3 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}}

4 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⟩

5 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 ***}

5.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.

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 DC 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.

5.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⟩

6 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 ***}

6.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

6.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

65 \SetSymbolFont{operators}{bold}{OT1}{cmr} {bx}{n}
66 \SetSymbolFont{letters}  {bold}{OML}{cmm} {b}{it}
67 \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.

68 \DeclareSymbolFontAlphabet{\mathrm}    {operators}

69 \DeclareSymbolFontAlphabet{\mathnormal}{letters}
70 \DeclareSymbolFontAlphabet{\mathcal}   {symbols}
71 \DeclareMathAlphabet      {\mathbf}{OT1}{cmr}{bx}{n}
72 \DeclareMathAlphabet      {\mathsf}{OT1}{cmss}{m}{n}
73 \DeclareMathAlphabet      {\mathit}{OT1}{cmr}{m}{it}
74 \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.

75 \SetMathAlphabet\mathsf{bold}{OT1}{cmss}{bx}{n}
76 \SetMathAlphabet\mathit{bold}{OT1}{cmr}{bx}{it}

6.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).

77 \DeclareMathSizes{5}{5}{5}{5}
78 \DeclareMathSizes{6}{6}{5}{5}
79 \DeclareMathSizes{7}{7}{5}{5}
80 \DeclareMathSizes{8}{8}{6}{5}
81 \DeclareMathSizes{9}{9}{6}{5}
82 \DeclareMathSizes{\@xpt}{\@xpt}{7}{5}
83 \DeclareMathSizes{\@xipt}{\@xipt}{8}{6}
84 \DeclareMathSizes{\@xiipt}{\@xiipt}{8}{6}
85 \DeclareMathSizes{\@xivpt}{\@xivpt}{\@xpt}{7}
86 \DeclareMathSizes{\@xviipt}{\@xviipt}{\@xiipt}{\@xpt}
87 \DeclareMathSizes{\@xxpt}{\@xxpt}{\@xivpt}{\@xiipt}
88 \DeclareMathSizes{\@xxvpt}{\@xxvpt}{\@xxpt}{\@xviipt}

6.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.

6.3.1 The letters

89 \DeclareMathSymbol{a}{\mathalpha}{letters}{`a}
90 \DeclareMathSymbol{b}{\mathalpha}{letters}{`b}
91 \DeclareMathSymbol{c}{\mathalpha}{letters}{`c}
92 \DeclareMathSymbol{d}{\mathalpha}{letters}{`d}
93 \DeclareMathSymbol{e}{\mathalpha}{letters}{`e}
94 \DeclareMathSymbol{f}{\mathalpha}{letters}{`f}

 95 \DeclareMathSymbol{g}{\mathalpha}{letters}{`g}
 96 \DeclareMathSymbol{h}{\mathalpha}{letters}{`h}
 97 \DeclareMathSymbol{i}{\mathalpha}{letters}{`i}
 98 \DeclareMathSymbol{j}{\mathalpha}{letters}{`j}
 99 \DeclareMathSymbol{k}{\mathalpha}{letters}{`k}
100 \DeclareMathSymbol{l}{\mathalpha}{letters}{`l}
101 \DeclareMathSymbol{m}{\mathalpha}{letters}{`m}
102 \DeclareMathSymbol{n}{\mathalpha}{letters}{`n}
103 \DeclareMathSymbol{o}{\mathalpha}{letters}{`o}
104 \DeclareMathSymbol{p}{\mathalpha}{letters}{`p}
105 \DeclareMathSymbol{q}{\mathalpha}{letters}{`q}
106 \DeclareMathSymbol{r}{\mathalpha}{letters}{`r}
107 \DeclareMathSymbol{s}{\mathalpha}{letters}{`s}
108 \DeclareMathSymbol{t}{\mathalpha}{letters}{`t}
109 \DeclareMathSymbol{u}{\mathalpha}{letters}{`u}
110 \DeclareMathSymbol{v}{\mathalpha}{letters}{`v}
111 \DeclareMathSymbol{w}{\mathalpha}{letters}{`w}
112 \DeclareMathSymbol{x}{\mathalpha}{letters}{`x}
113 \DeclareMathSymbol{y}{\mathalpha}{letters}{`y}
114 \DeclareMathSymbol{z}{\mathalpha}{letters}{`z}

115

116 \DeclareMathSymbol{A}{\mathalpha}{letters}{`A}
117 \DeclareMathSymbol{B}{\mathalpha}{letters}{`B}
118 \DeclareMathSymbol{C}{\mathalpha}{letters}{`C}
119 \DeclareMathSymbol{D}{\mathalpha}{letters}{`D}
120 \DeclareMathSymbol{E}{\mathalpha}{letters}{`E}
121 \DeclareMathSymbol{F}{\mathalpha}{letters}{`F}
122 \DeclareMathSymbol{G}{\mathalpha}{letters}{`G}
123 \DeclareMathSymbol{H}{\mathalpha}{letters}{`H}
124 \DeclareMathSymbol{I}{\mathalpha}{letters}{`I}
125 \DeclareMathSymbol{J}{\mathalpha}{letters}{`J}
126 \DeclareMathSymbol{K}{\mathalpha}{letters}{`K}
127 \DeclareMathSymbol{L}{\mathalpha}{letters}{`L}
128 \DeclareMathSymbol{M}{\mathalpha}{letters}{`M}
129 \DeclareMathSymbol{N}{\mathalpha}{letters}{`N}
130 \DeclareMathSymbol{O}{\mathalpha}{letters}{`O}
131 \DeclareMathSymbol{P}{\mathalpha}{letters}{`P}
132 \DeclareMathSymbol{Q}{\mathalpha}{letters}{`Q}
133 \DeclareMathSymbol{R}{\mathalpha}{letters}{`R}
134 \DeclareMathSymbol{S}{\mathalpha}{letters}{`S}
135 \DeclareMathSymbol{T}{\mathalpha}{letters}{`T}
136 \DeclareMathSymbol{U}{\mathalpha}{letters}{`U}
137 \DeclareMathSymbol{V}{\mathalpha}{letters}{`V}
138 \DeclareMathSymbol{W}{\mathalpha}{letters}{`W}
139 \DeclareMathSymbol{X}{\mathalpha}{letters}{`X}
140 \DeclareMathSymbol{Y}{\mathalpha}{letters}{`Y}
141 \DeclareMathSymbol{Z}{\mathalpha}{letters}{`Z}

6.3.2 The digits

142 \DeclareMathSymbol{0}{\mathalpha}{operators}{`0}
143 \DeclareMathSymbol{1}{\mathalpha}{operators}{`1}
144 \DeclareMathSymbol{2}{\mathalpha}{operators}{`2}
145 \DeclareMathSymbol{3}{\mathalpha}{operators}{`3}
146 \DeclareMathSymbol{4}{\mathalpha}{operators}{`4}
147 \DeclareMathSymbol{5}{\mathalpha}{operators}{`5}
148 \DeclareMathSymbol{6}{\mathalpha}{operators}{`6}
149 \DeclareMathSymbol{7}{\mathalpha}{operators}{`7}
150 \DeclareMathSymbol{8}{\mathalpha}{operators}{`8}
151 \DeclareMathSymbol{9}{\mathalpha}{operators}{`9}

6.3.3 Punctuation, brace, etc. keys

152 \DeclareMathSymbol{!}{\mathclose}{operators}{"21}
153 \DeclareMathSymbol{(}{\mathopen}{operators}{"28}
154 \DeclareMathSymbol{)}{\mathclose}{operators}{"29}
155 \DeclareMathSymbol{*}{\mathbin}{symbols}{"03} % \ast
156 \DeclareMathSymbol{+}{\mathbin}{operators}{"2B}
157 \DeclareMathSymbol{,}{\mathpunct}{letters}{"3B}
158 \DeclareMathSymbol{-}{\mathbin}{symbols}{"00}
159 \DeclareMathSymbol{.}{\mathord}{letters}{"3A}
160 \DeclareMathSymbol{/}{\mathord}{letters}{"3D}
161 \DeclareMathSymbol{:}{\mathrel}{operators}{"3A}
162 \DeclareMathSymbol{;}{\mathpunct}{operators}{"3B}
163 \DeclareMathSymbol{<}{\mathrel}{letters}{"3C}
164 \DeclareMathSymbol{=}{\mathrel}{operators}{"3D}
165 \DeclareMathSymbol{>}{\mathrel}{letters}{"3E}
166 \DeclareMathSymbol{?}{\mathclose}{operators}{"3F}
167 \DeclareMathSymbol{[}{\mathopen}{operators}{"5B}
168 \DeclareMathSymbol{]}{\mathclose}{operators}{"5D}
169 \DeclareMathSymbol{|}{\mathord}{symbols}{"6A}

170

Should all of the following being activated by default? Probably not.

171 %\DeclareMathSymbol{`\{}{\mathopen}{symbols}{"66}
172 %\DeclareMathSymbol{`\}}{\mathclose}{symbols}{"67}
173 %\DeclareMathSymbol{`\\}{\mathord}{symbols}{"6E} % \backslash
174 \mathcode`\ ="8000 % \space
175 \mathcode`\'="8000 % ^\prime
176 \mathcode`\_="8000 % \_

6.3.4 Delimitercodes for characters

[to be completed]

Finally, IniTEX sets all \delcode values to -1, except \delcode`.=0

177 \delcode`\(="028300
178 \delcode`\)="029301
179 \delcode`\[="05B302
180 \delcode`\]="05D303
181 \delcode`\<="26830A

182 \delcode`\>="26930B
183 \delcode`\/="02F30E
184 \delcode`\|="26A30C
185 \delcode`\\="26E30F

N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!

6.4 Symbols accessed via control sequences

6.4.1 Greek letters

186 \DeclareMathSymbol{\alpha}{\mathord}{letters}{"0B}
187 \DeclareMathSymbol{\beta}{\mathord}{letters}{"0C}
188 \DeclareMathSymbol{\gamma}{\mathord}{letters}{"0D}
189 \DeclareMathSymbol{\delta}{\mathord}{letters}{"0E}
190 \DeclareMathSymbol{\epsilon}{\mathord}{letters}{"0F}
191 \DeclareMathSymbol{\zeta}{\mathord}{letters}{"10}
192 \DeclareMathSymbol{\eta}{\mathord}{letters}{"11}
193 \DeclareMathSymbol{\theta}{\mathord}{letters}{"12}
194 \DeclareMathSymbol{\iota}{\mathord}{letters}{"13}
195 \DeclareMathSymbol{\kappa}{\mathord}{letters}{"14}
196 \DeclareMathSymbol{\lambda}{\mathord}{letters}{"15}
197 \DeclareMathSymbol{\mu}{\mathord}{letters}{"16}
198 \DeclareMathSymbol{\nu}{\mathord}{letters}{"17}
199 \DeclareMathSymbol{\xi}{\mathord}{letters}{"18}
200 \DeclareMathSymbol{\pi}{\mathord}{letters}{"19}
201 \DeclareMathSymbol{\rho}{\mathord}{letters}{"1A}
202 \DeclareMathSymbol{\sigma}{\mathord}{letters}{"1B}
203 \DeclareMathSymbol{\tau}{\mathord}{letters}{"1C}
204 \DeclareMathSymbol{\upsilon}{\mathord}{letters}{"1D}
205 \DeclareMathSymbol{\phi}{\mathord}{letters}{"1E}
206 \DeclareMathSymbol{\chi}{\mathord}{letters}{"1F}
207 \DeclareMathSymbol{\psi}{\mathord}{letters}{"20}
208 \DeclareMathSymbol{\omega}{\mathord}{letters}{"21}
209 \DeclareMathSymbol{\varepsilon}{\mathord}{letters}{"22}
210 \DeclareMathSymbol{\vartheta}{\mathord}{letters}{"23}
211 \DeclareMathSymbol{\varpi}{\mathord}{letters}{"24}
212 \DeclareMathSymbol{\varrho}{\mathord}{letters}{"25}
213 \DeclareMathSymbol{\varsigma}{\mathord}{letters}{"26}
214 \DeclareMathSymbol{\varphi}{\mathord}{letters}{"27}
215 \DeclareMathSymbol{\Gamma}{\mathalpha}{operators}{"00}
216 \DeclareMathSymbol{\Delta}{\mathalpha}{operators}{"01}
217 \DeclareMathSymbol{\Theta}{\mathalpha}{operators}{"02}
218 \DeclareMathSymbol{\Lambda}{\mathalpha}{operators}{"03}
219 \DeclareMathSymbol{\Xi}{\mathalpha}{operators}{"04}
220 \DeclareMathSymbol{\Pi}{\mathalpha}{operators}{"05}
221 \DeclareMathSymbol{\Sigma}{\mathalpha}{operators}{"06}
222 \DeclareMathSymbol{\Upsilon}{\mathalpha}{operators}{"07}
223 \DeclareMathSymbol{\Phi}{\mathalpha}{operators}{"08}
224 \DeclareMathSymbol{\Psi}{\mathalpha}{operators}{"09}
225 \DeclareMathSymbol{\Omega}{\mathalpha}{operators}{"0A}

6.4.2 Ordinary symbols

226 \DeclareMathSymbol{\aleph}{\mathord}{symbols}{"40}
227 \def\hbar{{\mathchar'26\mkern-9muh}}
228 \DeclareMathSymbol{\imath}{\mathord}{letters}{"7B}
229 \DeclareMathSymbol{\jmath}{\mathord}{letters}{"7C}
230 \DeclareMathSymbol{\ell}{\mathord}{letters}{"60}
231 \DeclareMathSymbol{\wp}{\mathord}{letters}{"7D}
232 \DeclareMathSymbol{\Re}{\mathord}{symbols}{"3C}
233 \DeclareMathSymbol{\Im}{\mathord}{symbols}{"3D}
234 \DeclareMathSymbol{\partial}{\mathord}{letters}{"40}
235 \DeclareMathSymbol{\infty}{\mathord}{symbols}{"31}
236 \DeclareMathSymbol{\prime}{\mathord}{symbols}{"30}
237 \DeclareMathSymbol{\emptyset}{\mathord}{symbols}{"3B}
238 \DeclareMathSymbol{\nabla}{\mathord}{symbols}{"72}
239 \def\surd{{\mathchar"1270}}
240 \DeclareMathSymbol{\top}{\mathord}{symbols}{"3E}
241 \DeclareMathSymbol{\bot}{\mathord}{symbols}{"3F}
242 \def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
243  \not\mathrel{\mkern14mu}\crcr
244  \noalign{\nointerlineskip}
245  \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr}}}}
246 \DeclareMathSymbol{\triangle}{\mathord}{symbols}{"34}
247 \DeclareMathSymbol{\forall}{\mathord}{symbols}{"38}
248 \DeclareMathSymbol{\exists}{\mathord}{symbols}{"39}
249 \DeclareMathSymbol{\neg}{\mathord}{symbols}{"3A}
250  \let\lnot=\neg
251 \DeclareMathSymbol{\flat}{\mathord}{letters}{"5B}
252 \DeclareMathSymbol{\natural}{\mathord}{letters}{"5C}
253 \DeclareMathSymbol{\sharp}{\mathord}{letters}{"5D}
254 \DeclareMathSymbol{\clubsuit}{\mathord}{symbols}{"7C}
255 \DeclareMathSymbol{\diamondsuit}{\mathord}{symbols}{"7D}
256 \DeclareMathSymbol{\heartsuit}{\mathord}{symbols}{"7E}
257 \DeclareMathSymbol{\spadesuit}{\mathord}{symbols}{"7F}

6.4.3 Large Operators

258 \DeclareMathSymbol{\coprod}{\mathop}{largesymbols}{"60}
259 \DeclareMathSymbol{\bigvee}{\mathop}{largesymbols}{"57}
260 \DeclareMathSymbol{\bigwedge}{\mathop}{largesymbols}{"56}
261 \DeclareMathSymbol{\biguplus}{\mathop}{largesymbols}{"55}
262 \DeclareMathSymbol{\bigcap}{\mathop}{largesymbols}{"54}
263 \DeclareMathSymbol{\bigcup}{\mathop}{largesymbols}{"53}
264 \DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52}
265  \def\int{\intop\nolimits}
266 \DeclareMathSymbol{\prod}{\mathop}{largesymbols}{"51}
267 \DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50}
268 \DeclareMathSymbol{\bigotimes}{\mathop}{largesymbols}{"4E}
269 \DeclareMathSymbol{\bigoplus}{\mathop}{largesymbols}{"4C}
270 \DeclareMathSymbol{\bigodot}{\mathop}{largesymbols}{"4A}

271 \DeclareMathSymbol{\ointop}{\mathop}{largesymbols}{"48}
272  \def\oint{\ointop\nolimits}
273 \DeclareMathSymbol{\bigsqcup}{\mathop}{largesymbols}{"46}
274 \DeclareMathSymbol{\smallint}{\mathop}{symbols}{"73}

6.4.4 Binary symbols

275 \DeclareMathSymbol{\triangleleft}{\mathbin}{letters}{"2F}
276 \DeclareMathSymbol{\triangleright}{\mathbin}{letters}{"2E}
277 \DeclareMathSymbol{\bigtriangleup}{\mathbin}{symbols}{"34}
278 \DeclareMathSymbol{\bigtriangledown}{\mathbin}{symbols}{"35}
279 \DeclareMathSymbol{\wedge}{\mathbin}{symbols}{"5E}
280 \let\land=\wedge
281 \DeclareMathSymbol{\vee}{\mathbin}{symbols}{"5F}
282 \let\lor=\vee
283 \DeclareMathSymbol{\cap}{\mathbin}{symbols}{"5C}
284 \DeclareMathSymbol{\cup}{\mathbin}{symbols}{"5B}
285 \DeclareMathSymbol{\ddagger}{\mathbin}{symbols}{"7A}
286 \DeclareMathSymbol{\dagger}{\mathbin}{symbols}{"79}
287 \DeclareMathSymbol{\sqcap}{\mathbin}{symbols}{"75}
288 \DeclareMathSymbol{\sqcup}{\mathbin}{symbols}{"74}
289 \DeclareMathSymbol{\uplus}{\mathbin}{symbols}{"5D}
290 \DeclareMathSymbol{\amalg}{\mathbin}{symbols}{"71}
291 \DeclareMathSymbol{\diamond}{\mathbin}{symbols}{"05}
292 \DeclareMathSymbol{\bullet}{\mathbin}{symbols}{"0F}
293 \DeclareMathSymbol{\wr}{\mathbin}{symbols}{"6F}
294 \DeclareMathSymbol{\div}{\mathbin}{symbols}{"04}
295 \DeclareMathSymbol{\odot}{\mathbin}{symbols}{"0C}
296 \DeclareMathSymbol{\oslash}{\mathbin}{symbols}{"0B}
297 \DeclareMathSymbol{\otimes}{\mathbin}{symbols}{"0A}
298 \DeclareMathSymbol{\ominus}{\mathbin}{symbols}{"09}
299 \DeclareMathSymbol{\oplus}{\mathbin}{symbols}{"08}
300 \DeclareMathSymbol{\mp}{\mathbin}{symbols}{"07}
301 \DeclareMathSymbol{\pm}{\mathbin}{symbols}{"06}
302 \DeclareMathSymbol{\circ}{\mathbin}{symbols}{"0E}
303 \DeclareMathSymbol{\bigcirc}{\mathbin}{symbols}{"0D}
304 \DeclareMathSymbol{\setminus}{\mathbin}{symbols}{"6E}
305 \DeclareMathSymbol{\cdot}{\mathbin}{symbols}{"01}
306 \DeclareMathSymbol{\ast}{\mathbin}{symbols}{"03}
307 \DeclareMathSymbol{\times}{\mathbin}{symbols}{"02}
308 \DeclareMathSymbol{\star}{\mathbin}{letters}{"3F}

6.4.5 Relations

309 \DeclareMathSymbol{\propto}{\mathrel}{symbols}{"2F}
310 \DeclareMathSymbol{\sqsubseteq}{\mathrel}{symbols}{"76}
311 \DeclareMathSymbol{\sqsupseteq}{\mathrel}{symbols}{"77}
312 \DeclareMathSymbol{\parallel}{\mathrel}{symbols}{"6B}
313 \DeclareMathSymbol{\mid}{\mathrel}{symbols}{"6A}
314 \DeclareMathSymbol{\dashv}{\mathrel}{symbols}{"61}

315 \DeclareMathSymbol{\vdash}{\mathrel}{symbols}{"60}
316 \DeclareMathSymbol{\nearrow}{\mathrel}{symbols}{"25}
317 \DeclareMathSymbol{\searrow}{\mathrel}{symbols}{"26}
318 \DeclareMathSymbol{\nwarrow}{\mathrel}{symbols}{"2D}
319 \DeclareMathSymbol{\swarrow}{\mathrel}{symbols}{"2E}
320 \DeclareMathSymbol{\Leftrightarrow}{\mathrel}{symbols}{"2C}
321 \DeclareMathSymbol{\Leftarrow}{\mathrel}{symbols}{"28}
322 \DeclareMathSymbol{\Rightarrow}{\mathrel}{symbols}{"29}
323 \def\neq{\not=} \let\ne=\neq
324 \DeclareMathSymbol{\leq}{\mathrel}{symbols}{"14}
325 \let\le=\leq
326 \DeclareMathSymbol{\geq}{\mathrel}{symbols}{"15}
327 \let\ge=\geq
328 \DeclareMathSymbol{\succ}{\mathrel}{symbols}{"1F}
329 \DeclareMathSymbol{\prec}{\mathrel}{symbols}{"1E}
330 \DeclareMathSymbol{\approx}{\mathrel}{symbols}{"19}
331 \DeclareMathSymbol{\succeq}{\mathrel}{symbols}{"17}
332 \DeclareMathSymbol{\preceq}{\mathrel}{symbols}{"16}
333 \DeclareMathSymbol{\supset}{\mathrel}{symbols}{"1B}
334 \DeclareMathSymbol{\subset}{\mathrel}{symbols}{"1A}
335 \DeclareMathSymbol{\supseteq}{\mathrel}{symbols}{"13}
336 \DeclareMathSymbol{\subseteq}{\mathrel}{symbols}{"12}
337 \DeclareMathSymbol{\in}{\mathrel}{symbols}{"32}
338 \DeclareMathSymbol{\ni}{\mathrel}{symbols}{"33}
339  \let\owns=\ni
340 \DeclareMathSymbol{\gg}{\mathrel}{symbols}{"1D}
341 \DeclareMathSymbol{\ll}{\mathrel}{symbols}{"1C}
342 \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
343 \DeclareMathSymbol{\leftrightarrow}{\mathrel}{symbols}{"24}
344 \DeclareMathSymbol{\leftarrow}{\mathrel}{symbols}{"20}
345 \let\gets=\leftarrow
346 \DeclareMathSymbol{\rightarrow}{\mathrel}{symbols}{"21}
347 \let\to=\rightarrow
348 \DeclareMathSymbol{\mapstochar}{\mathrel}{symbols}{"37}
349 \def\mapsto{\mapstochar\rightarrow}
350 \DeclareMathSymbol{\sim}{\mathrel}{symbols}{"18}
351 \DeclareMathSymbol{\simeq}{\mathrel}{symbols}{"27}
352 \DeclareMathSymbol{\perp}{\mathrel}{symbols}{"3F}
353 \DeclareMathSymbol{\equiv}{\mathrel}{symbols}{"11}
354 \DeclareMathSymbol{\asymp}{\mathrel}{symbols}{"10}
355 \DeclareMathSymbol{\smile}{\mathrel}{letters}{"5E}
356 \DeclareMathSymbol{\frown}{\mathrel}{letters}{"5F}
357 \DeclareMathSymbol{\leftharpoonup}{\mathrel}{letters}{"28}
358 \DeclareMathSymbol{\leftharpoondown}{\mathrel}{letters}{"29}
359 \DeclareMathSymbol{\rightharpoonup}{\mathrel}{letters}{"2A}
360 \DeclareMathSymbol{\rightharpoondown}{\mathrel}{letters}{"2B}
361 \def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
362 \def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@
363  \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}

364 \def\notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
365 \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
366 \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
367 \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt
368  \hbox{$#1\rightharpoonup$}\crcr
369  $#1\leftharpoondown$}}}}
370 \def\doteq{\buildrel\textstyle.\over=}

6.4.6 Arrows

371 \def\joinrel{\mathrel{\mkern-3mu}}
372 \def\relbar{\mathrel{\smash-}} % \smash, because -
373  % has the same height as +
374 \def\Relbar{\mathrel=}
375 \DeclareMathSymbol{\lhook}{\mathrel}{letters}{"2C}
376 \def\hookrightarrow{\lhook\joinrel\rightarrow}
377 \DeclareMathSymbol{\rhook}{\mathrel}{letters}{"2D}
378 \def\hookleftarrow{\leftarrow\joinrel\rhook}
379 \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
380 \def\models{\mathrel|\joinrel=}
381 \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
    LaTeX Change: \longrightarrow and \longleftarrow redefined to make

then robust.

382 \DeclareRobustCommand\longrightarrow
383  {\relbar\joinrel\rightarrow}
384 \DeclareRobustCommand\longleftarrow
385  {\leftarrow\joinrel\relbar}
386 \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
387 \def\longmapsto{\mapstochar\longrightarrow}
388 \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
389 \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
390 \def\iff{\;\Longleftrightarrow\;}

6.4.7 Punctuation symbols

391 \DeclareMathSymbol{\ldotp}{\mathpunct}{letters}{"3A}
392 \DeclareMathSymbol{\cdotp}{\mathpunct}{symbols}{"01}
393 \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A}

This is commented out, since \ldots is now defined in ltoutenc.dtx.

394 %\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}}
395 %\DeclareRobustCommand\ldots
396 %          {\relax\ifmmode\@ldots\else\mbox{$\m@th\@ldots\,$}\fi}
397 \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
398 \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
399  \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
400 \def\ddots{\mathinner{\mkern1mu\raise7\p@
401  \vbox{\kern7\p@\hbox{.}}\mkern2mu
402  \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}

6.4.8 Math accents

403 \DeclareMathAccent{\acute}{\mathalpha}{operators}{"13}
404 \DeclareMathAccent{\grave}{\mathalpha}{operators}{"12}
405 \DeclareMathAccent{\ddot}{\mathalpha}{operators}{"7F}
406 \DeclareMathAccent{\tilde}{\mathalpha}{operators}{"7E}
407 \DeclareMathAccent{\bar}{\mathalpha}{operators}{"16}
408 \DeclareMathAccent{\breve}{\mathalpha}{operators}{"15}
409 \DeclareMathAccent{\check}{\mathalpha}{operators}{"14}
410 \DeclareMathAccent{\hat}{\mathalpha}{operators}{"5E}
411 \DeclareMathAccent{\vec}{\mathord}{letters}{"7E}
412 \DeclareMathAccent{\dot}{\mathalpha}{operators}{"5F}
413 \DeclareMathAccent{\widetilde}{\mathord}{largesymbols}{"65}
414 \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62}

415

6.4.9 Radicals

416 \DeclareMathRadical{\sqrtsign}{symbols}{"70}{largesymbols}{"70}
417 \let\@@sqrt\sqrtsign

6.4.10 Over and under something, etc

418 \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
419  \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
420  $\hfil\displaystyle{#1}\hfil$\crcr}}}
421 \def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
422  \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}%
423  $\hfil\displaystyle{#1}\hfil$\crcr}}}
424 \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}%
425  \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}%
426  $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
427 \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
428 $\hfil\displaystyle{#1}\hfil$\crcr
429 \noalign{\kern3\p@\nointerlineskip}%
430 \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}

(quite a waste of tokens, IMHO — Frank)

431 \def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@
432  #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}}
433 \def\rightarrowfill{$\m@th\smash-\mkern-6mu%
434 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
435 \mkern-6mu\mathord\rightarrow$}
436 \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
437 \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
438 \mkern-6mu\smash-$}
439 \DeclareMathSymbol{\braceld}{\mathord}{largesymbols}{"7A}
440 \DeclareMathSymbol{\bracerd}{\mathord}{largesymbols}{"7B}
441 \DeclareMathSymbol{\bracelu}{\mathord}{largesymbols}{"7C}
442 \DeclareMathSymbol{\braceru}{\mathord}{largesymbols}{"7D}

443 \def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
444 \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru
445 \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd$}
446 \def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}%
447 \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd
448 \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$}

6.4.11 Delimiters

449 \DeclareMathDelimiter{\lmoustache}   % top from (, bottom from )
450 {\mathopen}{largesymbols}{"7A}{largesymbols}{"40}
451 \DeclareMathDelimiter{\rmoustache}   % top from ), bottom from (
452 {\mathclose}{largesymbols}{"7B}{largesymbols}{"41}
453 \DeclareMathDelimiter{\arrowvert}    % arrow without arrowheads
454 {\mathord}{symbols}{"6A}{largesymbols}{"3C}
455 \DeclareMathDelimiter{\Arrowvert}    % double arrow without arrowheads
456 {\mathord}{symbols}{"6B}{largesymbols}{"3D}
457 \DeclareMathDelimiter{\Vert}
458 {\mathord}{symbols}{"6B}{largesymbols}{"0D}
459 \let\|=\Vert
460 \DeclareMathDelimiter{\vert}
461 {\mathord}{symbols}{"6A}{largesymbols}{"0C}
462 \DeclareMathDelimiter{\uparrow}
463 {\mathrel}{symbols}{"22}{largesymbols}{"78}
464 \DeclareMathDelimiter{\downarrow}
465 {\mathrel}{symbols}{"23}{largesymbols}{"79}
466 \DeclareMathDelimiter{\updownarrow}
467 {\mathrel}{symbols}{"6C}{largesymbols}{"3F}
468 \DeclareMathDelimiter{\Uparrow}
469 {\mathrel}{symbols}{"2A}{largesymbols}{"7E}
470 \DeclareMathDelimiter{\Downarrow}
471 {\mathrel}{symbols}{"2B}{largesymbols}{"7F}
472 \DeclareMathDelimiter{\Updownarrow}
473 {\mathrel}{symbols}{"6D}{largesymbols}{"77}
474 \DeclareMathDelimiter{\backslash}    % for double coset G\backslash H
475 {\mathord}{symbols}{"6E}{largesymbols}{"0F}
476 \DeclareMathDelimiter{\rangle}
477 {\mathclose}{symbols}{"69}{largesymbols}{"0B}
478 \DeclareMathDelimiter{\langle}
479 {\mathopen}{symbols}{"68}{largesymbols}{"0A}
480 \DeclareMathDelimiter{\rbrace}
481 {\mathclose}{symbols}{"67}{largesymbols}{"09}
482 \DeclareMathDelimiter{\lbrace}
483 {\mathopen}{symbols}{"66}{largesymbols}{"08}
484 \DeclareMathDelimiter{\rceil}
485 {\mathclose}{symbols}{"65}{largesymbols}{"07}
486 \DeclareMathDelimiter{\lceil}
487 {\mathopen}{symbols}{"64}{largesymbols}{"06}
488 \DeclareMathDelimiter{\rfloor}
489 {\mathclose}{symbols}{"63}{largesymbols}{"05}

490 \DeclareMathDelimiter{\lfloor}
491 {\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 but 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 a symbol fonts first) and modify the delimiter declarations to point to with their small variant to those symbol fonts. (This is done in oldlfont.dtx so look there for examples.)

492 \DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips
493  {\mathopen}{largesymbols}{"3A}{largesymbols}{"3A}
494 \DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips
495  {\mathclose}{largesymbols}{"3B}{largesymbols}{"3B}
496 \DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces
497  {\mathord}{largesymbols}{"3E}{largesymbols}{"3E}

6.5 Math versions of text commands

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.
498 \mathchardef\mathparagraph"027B
499 \mathchardef\mathsection"0278
500 \mathchardef\mathdollar"0024
501 \def\mathsterling{\mathit{\mathchar"7024}}
502 \def\mathunderscore{\kern0.06em \vbox{\hrule\@width.3em}}
\mathellipsis This is plain TEX’s \ldots.
503 \def\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}}%

6.6 Other special functions and parameters

6.6.1 Biggggg

504 \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
505 \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
506 \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
507 \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
508 \def\n@space{\nulldelimiterspace\z@ \m@th}

6.6.2 The log-like functions

\operator@font The \operator@font determines the symbol font used for log-like functions.

509 \def\operator@font{\mathgroup\symoperators}

6.6.3 Parameters

510 \thinmuskip=3mu
511 \medmuskip=4mu plus 2mu minus 4mu
512 \thickmuskip=5mu plus 5mu

This finishes the low-level setup in fontmath.ltx.

513 ⟨/math⟩