LATEX 2ε font selection© Copyright 1995–2024, LATEX Project Team.∗
All rights reserved.†
March 2024

Contents
1 Introduction
1.1 LATEX 2ε fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Further information . . . . . . . . . . . . . . . . . . . . . . . . .

2
2
3
3

2 Text fonts
2.1 Text font attributes . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Selection commands . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Parameters for author commands . . . . . . . . . . . . . . . . . .
2.5 Special font declaration commands . . . . . . . . . . . . . . . . .

4
4
7
8
8
10

3 Math fonts
11
3.1 Math font attributes . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Selection commands . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Declaring math versions . . . . . . . . . . . . . . . . . . . . . . . 13
3.4 Declaring math alphabets . . . . . . . . . . . . . . . . . . . . . . 13
3.5 Declaring symbol fonts . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Declaring math symbols . . . . . . . . . . . . . . . . . . . . . . . 15
3.7 Declaring math sizes . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Font installation
17
4.1 Font definition files . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Font definition file commands . . . . . . . . . . . . . . . . . . . . 17
4.3 Font file loading information . . . . . . . . . . . . . . . . . . . . . 19
4.4 Size functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
∗ Thanks to Arash Esbati for documenting the newer NFSS features of 2020

† This file may be distributed and/or modified under the conditions of the L
AT X ProjectE
Public License, either version 1.3c of this license or (at your option) any later version. See
the source fntguide.tex for full details.

15 Encodings
21
5.1 The fontenc package . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 Encoding definition file commands . . . . . . . . . . . . . . . . . 22
5.3 Default definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4 Encoding defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.5 Case changing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6 Miscellanea
27
6.1 Font substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 Preloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3 Accented characters . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4 Naming conventions . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.5 The order of declaration . . . . . . . . . . . . . . . . . . . . . . . 30
6.6 Font series defaults per document family . . . . . . . . . . . . . . 31
6.7 Handling of current and requested font series and shape . . . . . 32
6.8 Handling of nested emphasis . . . . . . . . . . . . . . . . . . . . . 33
6.9 Providing font family substitutions . . . . . . . . . . . . . . . . . 33
7 Additional text symbols – textcomp

34

8 If you need to know more . . .

38

1

Introduction

This document describes the new font selection features of the LATEX Document
Preparation System. It is intended for package writers who want to write fontloading packages similar to times or latexsym.
This document is only a brief introduction to the new facilities and is intended
for package writers who are familiar with TEX fonts and LATEX packages. It isneither a user-guide nor a reference manual for fonts in LATEX 2ε .

1.1

LATEX 2ε fonts

The most important difference between LATEX 2.09 and LATEX 2ε is the way that
fonts are selected. In LATEX 2.09, the Computer Modern fonts were built into
the LATEX format, and so customizing LATEX to use other fonts was a major
effort.
In LATEX 2ε , very few fonts are built into the format, and there are commands
to load new text and math fonts. Packages such as times or latexsym allow
authors to access these fonts. This document describes how to write similar
font-loading packages.
The LATEX 2ε font selection system was first released as the ‘New Font Selection
Scheme’ (NFSS) in 1989, and then in release 2 in 1993. LATEX 2ε includes NFSS
release 2 as standard.

2

1.2

Overview

This document contains an overview of the new font commands of LATEX.
Section 2 describes the commands for selecting fonts in classes and packages.
It lists the five LATEX font attributes, and lists the commands for selecting
fonts. It also describes how to customize the author commands such as\textrm and \textit to suit your document design.
Section 3 explains the commands for controlling LATEX math fonts. It describes how to specify new math fonts and new math symbols.
Section 4 explains how to install new fonts into LATEX. It shows how LATEX
font attributes are turned into TEX font names, and how to specify yourown fonts using font definition files.
Section 5 discusses text font encodings. It describes how to declare a new
encoding and how to define commands, such as \AE or \", which havedifferent definitions in different encodings, depending on whether ligatures,etc. are available in the encoding.
Section 6 covers font miscellanea. It describes how LATEX performs font substitution, how to customize fonts that are preloaded in the LATEX format,
and the naming conventions used in LATEX font selection.

1.3

Further information

For a general introduction to LATEX, including the new features of LATEX 2ε , you
should read LATEX: A Document Preparation System, Leslie Lamport, Addison
Wesley, 2nd ed, 1994.
A more detailed description of the LATEX font selection scheme is to be found in
The LATEX Companion, 2nd ed, by Mittelbach and Goossens, Addison Wesley,
2004.
The LATEX font selection scheme is based on TEX, which is described by its
developer in The TEXbook, Donald E. Knuth, Addison Wesley, 1986, revised in1991 to include the features of TEX 3.
Sebastian Rahtz’s psnfss software contains the software for using a large number of Type 1 fonts (including the Adobe Laser Writer 35 and the Monotype
CD-ROM fonts) in LATEX. It should be available from the same source as yourcopy of LATEX.
The psnfss software uses fonts generated by Alan Jeffrey’s fontinst software.
This can convert fonts from Adobe Font Metric format into a format readable by
LATEX, including the generation of the font definition files described in Section 4.
The fontinst software should be available from the same source as your copyof LATEX.
Whenever practical, LATEX uses the font naming scheme called ‘fontname’; thiswas described in Filenames for fonts,1 TUGboat 11(4), 1990.
1 An up-to-date electronic version of this document can be found on any CTAN server, inthe directory info/fontname.

3

The class-writer’s guide LATEX 2ε for Class and Package Writers describes the
new LATEX features for writers of document classes and packages and is kept
in clsguide.tex. Configuring LATEX is covered by the guide Configuration
options for LATEX 2ε in cfgguide.tex whilst the philosophy behind our policy
on modifying LATEX is described in Modifying LATEX in modguide.tex.
The documented source code (from the files used to produce the kernel format
via latex.ltx) is now available as The LATEX 2ε Sources. This very large document also includes an index of LATEX commands. It can be typeset fromthe LATEX file source2e.tex in the base directory; this uses the class file
ltxdoc.cls.
For more information about TEX and LATEX, please contact your local TEX Users
Group, or the international TEX Users Group. Addresses and other details canbe found at:https://www.tug.org/lugs.html

2

Text fontsThis section describes the commands available to class and package writers for
specifying and selecting fonts.

2.1

Text font attributes

Every text font in LATEX has five attributes:
encoding This specifies the order that characters appear in the font. The
two most common text encodings used in LATEX are Knuth’s ‘TEX text’
encoding, and the ‘TEX text extended’ encoding developed by the TEX
Users Group members during a TEX Conference at Cork in 1990 (hence
its informal name ‘Cork encoding’).
family The name for a collection of fonts, usually grouped under a common
name by the font foundry. For example, ‘Adobe Times’, ‘ITC Garamond’,
and Knuth’s ‘Computer Modern Roman’ are all font families.
series How heavy and/or expanded a font is. For example, ‘medium weight’,‘narrow’ and ‘bold extended’ are all series.
shape The form of the letters within a font family. For example, ‘italic’,‘oblique’ and ‘upright’ (sometimes called ‘roman’) are all font shapes.
size The design size of the font, for example ‘10pt’. If no dimension is specified,‘pt’ is assumed.
The possible values for these attributes are given short acronyms by LATEX. The
most common values for the font encoding are:

4

OT1
T1
OML
OMS
OMX
U
L⟨xx ⟩TEX text
TEX extended text
TEX math italic
TEX math symbols
TEX math large symbols
Unknown
A local encoding

The ‘local’ encodings are intended for font encodings which are only locallyavailable, for example a font containing an organization’s logo in various sizes.
There are far too many font families to list them all, but some common ones
are:
cmr
cmss
cmtt
cmm
cmsy
cmex
ptm
phv
pcr

Computer Modern Roman
Computer Modern Sans
Computer Modern TypewriterComputer Modern Math Italic
Computer Modern Math Symbols
Computer Modern Math Extensions
Adobe Times
Adobe Helvetica
Adobe Courier

The font series is denoting a combination of the weight (boldness) and thewidth (amount of expansion). The standard supported for weights and widths
are:
ul
el
l
sl
m
sb
b
eb
ub

Ultra Light
Extra Light
Light
Semi Light
Medium (normal)
Semi Bold
Bold
Extra Bold
Ultra Bold

uc
ec
c
sc
m
sx
x
ex
ux

Ultra Condensed
Extra Condensed
Condensed
Semi Condensed
MediumSemi Expanded
Expanded
Extra Expanded
Ultra Expanded

50%
62.5%
75%
87.5%
100%
112.5%
125%
150%
200%

These are concatenated to a single series value except that m is dropped unless
both weight and width are medium in which case a single m is used.
Examples for series values are then:
m
b
bx
sb
sbx
c

Medium weight and width
Bold weight, medium width
Bold extended
Semi-bold, medium width
Semi-bold extended
Medium weight, condensed width5

New
description
2019/07/10

Note, that there are a large variety of names floating around like “regular”,“black”, “demi-bold”, “thin”, “heavy” and many more. If at all possible theyshould be matched into the standard naming scheme to allow for sensible default
substitutions if necessary, e.g., “demi-bold” is normally just another name for“semi-bold”, so should get sb assigned, etc.

New
description
2019/07/10

The most common values for the font shape are:New
description
2020/02/02

Normal (that is ‘upright’ or ‘roman’)ItalicSlanted (or ‘oblique’)Caps and small caps
Caps and small caps italic
Caps and small caps slanted
Swash

n
it
sl
sc
scit
scsl
sw

A less common value for font shape is:sscSpaced caps and small caps

and there is also ui for upright italic, i.e., an italic shape but artificially turned
upright. This is sometimes useful and available in some fonts.
The font size is specified as a dimension, for example 10pt or 1.5in or 3mm; if
no unit is specified, pt is assumed. These five parameters specify every LATEX
font, for example:
LATEX specification
OT1 cmr m n 10
OT1 cmss m sl 1pc
OML cmm m it 10pt
T1 ptm b it 1in

Font
TEX font nameComputer Modern Roman 10 point
cmr10
Computer Modern Sans Oblique 1 pica
cmssi12
Computer Modern Math Italic 10 point
cmmi10Adobe Times Bold Italic 1 inch
ptmb8t at 1in

These five parameters are displayed whenever LATEX gives an overfull box warning, for example:
Overfull \hbox (3.80855pt too wide) in paragraph at lines 314--318[]\OT1/cmr/m/n/10 Normally [] and [] will be iden-ti-cal,

The author commands for fonts set the five attributes as shown in table 1 on
the following page. The values used by these commands are determined by the
document class, using the parameters defined in Section 2.4.
Note that there are no author commands for selecting new encodings. Theseshould be provided by packages, such as the fontenc package.
This section does not explain how LATEX font specifications are turned into TEX
font names. This is described in Section 4.

6

Author command

Attribute

Value in article class\textnormal{..} or \normalfont family
series
shape

cmr
m
n

\textrm{..} or \rmfamily family\textsf{..} or \sffamily family\texttt{..} or \ttfamily family\textmd{..} or \mdseries series\textbf{..} or \bfseries series

cmr
cmss
cmtt
m
bx

\textit{..} or \itshape\textsl{..} or \slshape\textsc{..} or \scshape\textssc{..} or \sscshape\textsw{..} or \swshape\textulc{..} or \ulcshape\textup{..} or \upshape\tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE
\huge
\Huge

shape
it
shape
sl
shape
sc
shape
ssc
shape
sw
shape ulc (virtual) → n, it, sl or ssc
shape up (virtual) → n or sc
size
size
size
size
size
size
size
size
size
size

5pt
7pt
8pt
9pt
10pt
12pt
14.4pt17.28pt
20.74pt
24.88pt

Table 1: Author font commands and their effects (article class)2.2

Selection commands

The low-level commands used to select a text font are as follows.
\fontencoding {⟨encoding⟩}\fontfamily {⟨family⟩}\fontseries {⟨series⟩}\fontshape {⟨shape⟩}\fontsize {⟨size⟩} {⟨baselineskip⟩}\linespread {⟨factor ⟩}Each of the commands starting with \font... sets one of the font attributes;\fontsize also sets \baselineskip. The \linespread command preparesto multiply the current (or newly defined) \baselineskip with ⟨factor ⟩ (e.g.,
spreads the lines apart for values greater one).
The actual font in use is not altered by these commands, but the current attributes are used to determine which font and baseline skip to use after the next\selectfont command.

7

New
description
1998/12/01

\selectfont

Selects a text font, based on the current values of the font attributes.
Warning: There must be a \selectfont command immediately after any settings of the font parameters by (some of) the six commands above, before any
following text. For example, it is legal to say:\fontfamily{ptm}\fontseries{b}\selectfont Some text.

but it is not legal to say:\fontfamily{ptm} Some \fontseries{b}\selectfont text.

You may get unexpected results if you put text between a \font⟨parameter ⟩command (or \linespread) and a \selectfont.
\usefont {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

A short hand for the equivalent \font... commands followed by a call to\selectfont.

2.3

Internals

The current values of the font attributes are held in internal macros.
\f@encoding \f@family \f@series\tf@size \sf@size \ssf@size\f@shape\f@size\f@baselineskip

These hold the current values of the encoding, the family, the series, the shape,
the size, the baseline skip, the main math size, the ‘script’ math size and the‘scriptscript’ math size. The last three are accessible only within a formula;outside of math they may contain arbitrary values.
For example, to set the size to 12 without changing the baseline skip:\fontsize{12}{\f@baselineskip}

However, you should never alter the values of the internal commands directly;
they must only be modified using the low-level commands like \fontfamily,\fontseries, etc. If you disobey this warning you might produce code thatloops.

2.4

Parameters for author commands

The parameter values set by author commands such as \textrm and \rmfamily,
etc. are not hard-wired into LATEX; instead these commands use the values ofa number of parameters set by the document class and packages. For example, \rmdefault is the name of the default family selected by \textrm and\rmfamily. Thus to set a document in Adobe Times, Helvetica and Courier,the document designer specifies:8

\renewcommand{\rmdefault}{ptm}\renewcommand{\sfdefault}{phv}\renewcommand{\ttdefault}{pcr}\encodingdefault\familydefault\seriesdefault\shapedefault

The encoding, family, series and shape of the main body font. By default theseare OT1, \rmdefault, m and n. Note that since the default family is \rmdefault,
this means that changing \rmdefault will change the main body font of the
document.
\rmdefault\sfdefault\ttdefault

The families selected by \textrm, \rmfamily, \textsf, \sffamily, \texttt
and \ttfamily. By default these are cmr, cmss and cmtt.
\bfdefault\mddefault

The series selected by \textbf, \bfseries, \textmd and \mdseries. By default
these are bx and m. These values are suitable for the default families used. Ifother fonts are used as standard document fonts (for example, certain PostScript
fonts) it might be necessary to adjust the value of \bfdefault to b since only
a few such families have a ‘bold extended’ series. An alternative (taken for thefonts provided by psnfss) is to define silent substitutions from bx series to bseries with special \DeclareFontShape declarations and the ssub size function,see Section 4.4.
\itdefault\ulcdefault\sldefault\updefault\scdefault\sscdefault\swdefault

The shapes selected by \textit, \itshape, \textsl, \slshape, \textsc,\scshape, \textssc, \sscshape, \textsw, \swshape, \textulc, \ulcshape,\textup and \upshape. By default these are it, sl, sc, ssc, sw, ulc andup. Note that ulc and up are special here because they are virtual shapes;
they don’t exist as real shape values. Instead they alter the existing shapevalue based on rules, i.e., the result depends on context. The respective macros\textulc or \ulcshape change small capitals back to upper/lower case but
will not change the font with respect to italics, slanted or swash. \upshape or\textup in contrast will switch italics or slanted back to upright but not alter
the state of upper/lower case, e.g., keep small capitals if present. Finally, thecommand \normalshape is provided to reset the shape back to normal which
is a shorthand for \upshape\ulcshape.
Note that there are no parameters for the size commands. These should be
defined directly in class files, for example:\renewcommand{\normalsize}{\fontsize{10}{12}\selectfont}More elaborate examples (setting additional parameters when the text size ischanged) can be found in classes.dtx the source documentation for the classes
article, report, and book.
9

New feature
2020/02/02

2.5

Special font declaration commands\DeclareFixedFont {⟨cmd ⟩} {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩} {⟨size⟩}

Declares command ⟨cmd ⟩ to be a font switch which selects the font that is
specified by the attributes ⟨encoding⟩, ⟨family⟩, ⟨series⟩, ⟨shape⟩, and ⟨size⟩.
The font is selected without any adjustments to baselineskip and other surrounding conditions.
This example makes {\picturechar .} select a small dot very quickly:\DeclareFixedFont{\picturechar}{OT1}{cmr}{m}{n}{5}\DeclareTextFontCommand {⟨cmd ⟩} {⟨font-switches⟩}

Declares command ⟨cmd ⟩ to be a font command with one argument. The current
font attributes are locally modified by ⟨font-switches⟩ and then the argumentof ⟨cmd ⟩ is typeset in the resulting new font.
Commands defined by \DeclareTextFontCommand automatically take care of
any necessary italic correction (on either side).
The following example shows how \textrm is defined by the kernel.
\DeclareTextFontCommand{\textrm}{\rmfamily}

To define a command that always typeset its argument in the italic shape of themain document font you could declare:\DeclareTextFontCommand{\normalit}{\normalfont\itshape}This declaration can be used to change the meaning of a command; if ⟨cmd ⟩ isalready defined, a log that it has been redefined is put in the transcript file.
\DeclareOldFontCommand {⟨cmd ⟩} {⟨text-switch⟩} {⟨math-switch⟩}

Declares command ⟨cmd ⟩ to be a font switch (i.e. used with the syntax{⟨cmd ⟩...}) having the definition ⟨text-switch⟩ when used in text and the definition ⟨math-switch⟩ when used in a formula. Math alphabet commands, like\mathit, when used within ⟨math-switch⟩ should not have an argument. Theiruse in this argument causes their semantics to change so that they here act asa font switch, as required by the usage of the ⟨cmd ⟩.
This declaration is useful for setting up commands like \rm to behave as they
did in LATEX 2.09. We strongly urge you not to misuse this declaration to invent
new font commands.

10The following example defines \it to produce the italic shape of the main document font if used in text and to switch to the font that would normally be
produced by the math alphabet \mathit if used in a formula.
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}

This declaration can be used to change the meaning of a command; if ⟨cmd ⟩ isalready defined, a log that it has been redefined is put in the transcript file.

3

Math fontsThis section describes the commands available to class and package writers for
specifying math fonts and math commands.

3.1

Math font attributes

The selection of fonts within math mode is quite different to that of text fonts.
Some math fonts are selected explicitly by one-argument commands such as\mathsf{max} or \mathbf{vec}; such fonts are called math alphabets. Thesemath alphabet commands affect only the font used for letters and symbols oftype \mathalpha (see Section 3.6); other symbols within the argument will beleft unchanged. The predefined math alphabets are:
Alphabet\mathnormal\mathrm\mathbf\mathsf\mathit\mathtt\mathcalDescription
defaultromanbold romansans serif
text italic
typewritercalligraphic

ExampleabcXY Z
abcXYZ
abcXYZ
abcXYZ
abcXYZ
abcXYZX YZOther math fonts are selected implicitly by TEX for symbols, with commands
such as \oplus (producing ⊕) or with straight characters like > or +. Fonts
containing such math symbols are called math symbol fonts. The predefinedmath symbol fonts are:Symbol font
operators
letterssymbolslargesymbols

Description
symbols from \mathrm
symbols from \mathnormal
most LATEX symbols
large symbols

Example[+]<< ⋆ >>≤Q∗ ≥R
P

Some math fonts are both math alphabets and math symbol fonts, for example\mathrm and operators are the same font, and \mathnormal and letters are
the same font.
11

Math fonts in LATEX have the same five attributes as text fonts: encoding,family, series, shape and size. However, there are no commands that allow theattributes to be individually changed. Instead, the conversion from math fonts
to these five attributes is controlled by the math version. For example, thenormal math version maps:
Math font
Alphabets Symbol fonts\mathnormal letters\mathrm operators\mathcal symbols
largesymbols\mathbf\mathsf\mathit\mathtt

External fontAttributes
OML cmm m it
OT1 cmr m n
OMS cmsy m n
OMX cmex m n
OT1 cmr bx n
OT1 cmss m n
OT1 cmr m it
OT1 cmtt m n

The bold math version is similar except that it contains bold fonts. The command \boldmath selects the bold math version.
Math versions can only be changed outside of math mode.
The two predefined math versions are:normalbold

the default math version
the bold math version

Packages may define new math alphabets, math symbol fonts, and math versions. This section describes the commands for writing such packages.

3.2

Selection commands

There are no commands for selecting symbol fonts. Instead, these are selectedindirectly through symbol commands like \oplus. Section 3.6 explains how todefine symbol commands.
\mathnormal{⟨math⟩} \mathcal{⟨math⟩} \mathbf{⟨math⟩}\mathrm{⟨math⟩}\mathsf{⟨math⟩}\mathtt{⟨math⟩}\mathit{⟨math⟩}

Each math alphabet is a command which can only be used inside math mode.
For example, $x + \mathsf{y} + \mathcal{Z}$ produces x + y + Z.
\mathversion{⟨version⟩}

This command selects a math version; it can only be used outside math mode.
For example, \boldmath is defined to be \mathversion{bold}.

12

3.3

Declaring math versions\DeclareMathVersion {⟨version⟩}

Defines ⟨version⟩ to be a math version.
The newly declared version is initialized with the defaults for all symbol fonts
and math alphabets declared so far (see the commands \DeclareSymbolFont
and \DeclareMathAlphabet).
If used on an already existing version, an information message is written to thetranscript file and all previous \SetSymbolFont or \SetMathAlphabet declarations for this version are overwritten by the math alphabet and symbol fontdefaults, i.e. one ends up with a virgin math version.
Example:\DeclareMathVersion{normal}

3.4

Declaring math alphabets\DeclareMathAlphabet {⟨math-alph⟩} {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

If this is the first declaration for ⟨math-alph⟩ then a new math alphabet withthis as its command name is created.
The arguments ⟨encoding⟩ ⟨family⟩ ⟨series⟩ ⟨shape⟩ are used to set, or reset,
the default values for this math alphabet in all math versions; if required, thesemust be further reset later for a particular math version by a \SetMathAlphabet
command.
If ⟨shape⟩ is empty then this ⟨math-alph⟩ is declared to be invalid in all versions,
unless it is set by a later \SetMathAlphabet command for a particular mathversion.
Checks that the command ⟨math-alph⟩ is either already a math alphabet command or is undefined; and that ⟨encoding⟩ is a known encoding scheme, i.e., hasbeen previously declared.
In these examples, \foo is defined for all math versions but \baz, by default, isdefined nowhere.
\DeclareMathAlphabet{\foo}{OT1}{cmtt}{m}{n}\DeclareMathAlphabet{\baz}{OT1}{}{}{}\SetMathAlphabet {⟨math-alph⟩} {⟨version⟩}{⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

Changes, or sets, the font for the math alphabet ⟨math-alph⟩ in math version⟨version⟩ to ⟨encoding⟩⟨family⟩⟨series⟩⟨shape⟩.
Checks that ⟨math-alph⟩ has been declared as a math alphabet, ⟨version⟩ is aknown math version and ⟨encoding⟩ is a known encoding scheme.
13New
description
1997/12/01

This example defines \baz for the ‘normal’ math version only:\SetMathAlphabet{\baz}{normal}{OT1}{cmss}{m}{n}Note that this declaration is not used for all math alphabets: Section 3.5 describes \DeclareSymbolFontAlphabet, which is used to set up math alphabets
contained in fonts which have been declared as symbol fonts.

3.5

Declaring symbol fonts\DeclareSymbolFont {⟨sym-font⟩} {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

If this is the first declaration for ⟨sym-font⟩ then a new symbol font with thisname is created (i.e. this identifier is assigned to a new TEX math group).
The arguments ⟨encoding⟩ ⟨family⟩ ⟨series⟩ ⟨shape⟩ are used to set, or reset.
the default values for this symbol font in all math versions; if required, thesemust be further reset later for a particular math version by a \SetSymbolFont
command.

New
description
1997/12/01

Checks that ⟨encoding⟩ is a declared encoding scheme.
For example, the following sets up the first four standard math symbol fonts:\DeclareSymbolFont{operators}{OT1}{cmr}{m}{n}\DeclareSymbolFont{letters}{OML}{cmm}{m}{it}\DeclareSymbolFont{symbols}{OMS}{cmsy}{m}{n}\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}\SetSymbolFont {⟨sym-font⟩} {⟨version⟩}{⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

Changes the symbol font ⟨sym-font⟩ for math version ⟨version⟩ to ⟨encoding⟩⟨family⟩ ⟨series⟩ ⟨shape⟩.
Checks that ⟨sym-font⟩ has been declared as a symbol font, ⟨version⟩ is a known
math version and ⟨encoding⟩ is a declared encoding scheme.
For example, the following come from the set up of the ‘bold’ math version:\SetSymbolFont{operators}{bold}{OT1}{cmr}{bx}{n}\SetSymbolFont{letters}{bold}{OML}{cmm}{b}{it}\DeclareSymbolFontAlphabet {⟨math-alph⟩} {⟨sym-font⟩}

Allows the previously declared symbol font ⟨sym-font⟩ to be the math alphabet
with command ⟨math-alph⟩ in all math versions.
Checks that the command ⟨math-alph⟩ is either already a math alphabet command or is undefined; and that ⟨sym-font⟩ is a symbol font.

14

New
description
1997/12/01

Example:\DeclareSymbolFontAlphabet{\mathrm}{operators}\DeclareSymbolFontAlphabet{\mathcal}{symbols}

This declaration should be used in preference to \DeclareMathAlphabet and\SetMathAlphabet when a math alphabet is the same as a symbol font; thisis because it makes better use of the limited number (only 16) of TEX’s mathgroups.
Note that, whereas a TEX math group is allocated to each symbol font when it isfirst declared, a math alphabet uses a TEX math group only when its commandis used within a math formula.

3.6

Declaring math symbols\DeclareMathSymbol {⟨symbol ⟩} {⟨type⟩} {⟨sym-font⟩} {⟨slot⟩}The ⟨symbol ⟩ can be either a single character such as ‘>’, or a macro name, such
as \sum.
Defines the ⟨symbol ⟩ to be a math symbol of type ⟨type⟩ in slot ⟨slot⟩ of symbol
font ⟨sym-font⟩. The ⟨type⟩ can be given as a number or as a command:Type
0 or \mathord
1 or \mathop
2 or \mathbin
3 or \mathrel
4 or \mathopen
5 or \mathclose
6 or \mathpunct
7 or \mathalphaMeaning
Ordinary
Large operator
Binary operation
Relation
Opening
Closing
Punctuation
Alphabet character

Example
α
P
×
≤
⟨
⟩
;
A

Only symbols of type \mathalpha will be affected by math alphabet commands:
within the argument of a math alphabet command they will produce the character in slot ⟨slot⟩ of that math alphabet’s font. Symbols of other types will
always produce the same symbol (within one math version).
\DeclareMathSymbol allows a macro ⟨symbol ⟩ to be redefined only if it waspreviously defined to be a math symbol. It also checks that the ⟨sym-font⟩ is a
declared symbol font.
Example:\DeclareMathSymbol{\alpha}{0}{letters}{"0B}\DeclareMathSymbol{\lessdot}{\mathbin}{AMSb}{"0C}\DeclareMathSymbol{\alphld}{\mathalpha}{AMSb}{"0C}

15

New
description
1997/12/01

\DeclareMathDelimiter {⟨cmd ⟩} {⟨type⟩} {⟨sym-font-1 ⟩} {⟨slot-1 ⟩}{⟨sym-font-2 ⟩} {⟨slot-2 ⟩}Defines ⟨cmd ⟩ to be a math delimiter where the small variant is in slot ⟨slot-1 ⟩of symbol font ⟨sym-font-1 ⟩ and the large variant is in slot ⟨slot-2 ⟩ of symbol
font ⟨sym-font-2 ⟩. Both symbol fonts must have been declared previously.
Checks that ⟨sym-font-i ⟩ are both declared symbol fonts.
If TEX is not looking for a delimiter, ⟨cmd ⟩ is treated just as if it had been
defined with \DeclareMathSymbol using ⟨type⟩, ⟨sym-font-1 ⟩ and ⟨slot-1 ⟩. In
other words, if a command is defined as a delimiter then this automaticallydefines it as a math symbol.
In case ⟨cmd ⟩ is a single character such as ‘[’, the same syntax is used. Previously the {⟨type⟩} argument was not present (and thus the corresponding mathsymbol declaration had to be provided separately).
Example:\DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}{largesymbols}{"0A}\DeclareMathDelimiter{(}{\mathopen}{operators}{"28}{largesymbols}{"00}\DeclareMathAccent {⟨cmd ⟩} {⟨type⟩} {⟨sym-font⟩} {⟨slot⟩}

Defines ⟨cmd ⟩ to act as a math accent.
The accent character comes from slot ⟨slot⟩ in ⟨sym-font⟩. The ⟨type⟩ can beeither \mathord or \mathalpha; in the latter case the accent character changes
font when used in a math alphabet.
Example:\DeclareMathAccent{\acute}{\mathalpha}{operators}{"13}\DeclareMathAccent{\vec}{\mathord}{letters}{"7E}\DeclareMathRadical {⟨cmd ⟩} {⟨sym-font-1 ⟩} {⟨slot-1 ⟩}{⟨sym-font-2 ⟩} {⟨slot-2 ⟩}Defines ⟨cmd ⟩ to be a radical where the small variant is in slot ⟨slot-1 ⟩ ofsymbol font ⟨sym-font-1 ⟩ and the large variant is in slot ⟨slot-2 ⟩ of symbol font
⟨sym-font-2 ⟩. Both symbol fonts must have been declared previously.
Example (probably the only use for it!):\DeclareMathRadical{\sqrt}{symbols}{"70}{largesymbols}{"70}3.7Declaring math sizes\DeclareMathSizes {⟨t-size⟩} {⟨mt-size⟩} {⟨s-size⟩} {⟨ss-size⟩}

Declares that ⟨mt-size⟩ is the (main) math text size, ⟨s-size⟩ is the ‘script’size and ⟨ss-size⟩ the ‘scriptscript’ size to be used in math, when ⟨t-size⟩ is
16

New
description
1998/06/01

the current text size. For text sizes for which no such declaration is given the‘script’ and ‘scriptscript’ size will be calculated and then fonts are loaded forthe calculated sizes or the best approximation (this may result in a warning
message).
Normally, ⟨t-size⟩ and ⟨mt-size⟩ will be identical; however, if, for example,
PostScript text fonts are mixed with bit-map math fonts then you may nothave available a ⟨mt-size⟩ for every ⟨t-size⟩.
Example:\DeclareMathSizes{13.82}{14.4}{10}{7}4Font installation

This section explains how LATEX’s font attributes are turned into TEX font specifications.

4.1

Font definition files

The description of how LATEX font attributes are turned into TEX fonts is usually
kept in a font definition file (.fd). The file for family ⟨family⟩ in encoding⟨ENC ⟩ must be called ⟨enc⟩⟨family⟩.fd: for example, ot1cmr.fd for Computer
Modern Roman with encoding OT1 or t1ptm.fd for Adobe Times with encoding
T1. Note that encoding names are converted to lowercase when used as part offile names.
Whenever LATEX encounters an encoding/family combination that it does notknow (e.g. if the document designer says \fontfamily{ptm}\selectfont) then
LATEX attempts to load the appropriate .fd file. “Not known” means: there was
no \DeclareFontFamily declaration issued for this encoding/family combination. If the .fd file could not be found, a warning is issued and font substitutions
are made.
The declarations in the font definition file are responsible for telling LATEX how
to load fonts for that encoding/family combination.

4.2

Font definition file commands

Note: A font definition file should contain only commands from this subsection.
Note that these commands can also be used outside a font definition file: they
can be put in package or class files, or even in the preamble of a document.
\ProvidesFile{⟨file-name⟩}[⟨release-info⟩]

The file should announce itself with a \ProvidesFile command, as describedin LATEX 2ε for Class and Package Writers.

17

New
description
1997/12/01

For example:\ProvidesFile{t1ptm.fd}[1994/06/01 Adobe Times font definitions]Spaces within the arguments specific to font definition files are ignored to avoid
surplus spaces in the document. If a real space is necessary use \space. However, note that this is only true if the declaration is made at top level! If usedwithin the definition of another command, within \AtBeginDocument, option
code or in similar places, then spaces within the argument will remain and may
result in incorrect table entries.
\DeclareFontFamily {⟨encoding⟩} {⟨family⟩} {⟨loading-settings⟩}

Declares a font family ⟨family⟩ to be available in encoding scheme ⟨encoding⟩.
The ⟨loading-settings⟩ are executed immediately after loading any font with thisencoding and family.
Checks that ⟨encoding⟩ was previously declared.
This example refers to the Computer Modern Typewriter font family in the
Cork encoding:\DeclareFontFamily{T1}{cmtt}{\hyphenchar\font=-1}

Each .fd file should contain exactly one \DeclareFontFamily command, andit should be for the appropriate encoding/family combination.
\DeclareFontShape {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}{⟨loading-info⟩} {⟨loading-settings⟩}

Declares a font shape combination; here ⟨loading-info⟩ contains the informationthat combines sizes with external fonts. The syntax is complex and is describedin Section 4.3 below.
The ⟨loading-settings⟩ are executed after loading any font with this font shape.
They are executed immediately after the ‘loading-settings’ which were declaredby \DeclareFontFamily and so they can be used to overwrite the settings madeat the family level.
Checks that the combination ⟨encoding⟩⟨family⟩ was previously declared via\DeclareFontFamily.
Example:\DeclareFontShape{OT1}{cmr}{m}{sl}{%<5-8> sub * cmr/m/n<8> cmsl8<9> cmsl9<10> <10.95> cmsl10<12> <14.4> <17.28> <20.74> <24.88> cmsl12
}{}

18

New
description
2004/02/10

The file can contain any number of \DeclareFontShape commands, whichshould be for the appropriate ⟨encoding⟩ and ⟨family⟩.
The font family declarations for the OT1-encoded fonts now all contain:

New feature
1996/06/01\hyphenchar\font=‘\-This enables the use of an alternative \hyphenchar in other encodings whilst
maintaining the correct value for all fonts.
According to NFSS conventions the series value should be a combination ofweight and width abbreviated each with one or two letters as described on
page 5. In particular it should not contain an “m” unless it consists of justone character. In the past incorrect values such as “cm” were simply accepted,
but since this now leads to problems with the extended mechanism, the correct
syntax is now enforced.
More exactly, if the series values is a member of a specific set of values (ulm,elm, lm, slm, mm, sbm, bm, ebm, ubm, muc, mec, mc, msc, msx, mx, mex or mux) it
is assumed to be in incorrect NFSS notation and so a warning is given and asurplus “m” is dropped. Other values are not touched to allow for the usage ofvalues like “semibold” or “medium” as used by the autoinst program.

4.3

Font file loading information

The information which tells LATEX exactly which font (.tfm) files to load iscontained in the ⟨loading-info⟩ part of a \DeclareFontShape declaration. Thispart consists of one or more ⟨fontshape-decl ⟩s, each of which has the following
form:⟨fontshape-decl ⟩ ::= ⟨size-infos⟩ ⟨font-info⟩⟨size-infos⟩ ::= ⟨size-infos⟩ ⟨size-info⟩ | ⟨size-info⟩⟨size-info⟩ ::= “<” ⟨number-or-range⟩ “>”⟨font-info⟩ ::= [ ⟨size-function⟩ “*” ] [ “[” ⟨optarg⟩ “]” ] ⟨fontarg⟩
The ⟨number-or-range⟩ denotes the size or size-range for which this entry applies.
If it contains a hyphen it is a range: lower bound on the left (if missing, zero
implied), upper bound on the right (if missing, ∞ implied). For ranges, theupper bound is not included in the range and the lower bound is.
Examples:<10><-8><8-14.4>

simple size
range
range

<14.4->

range

10pt only
all sizes less than 8pt
all sizes greater than or equal to 8pt
but less than 14.4pt
all sizes greater than or equal 14.4pt

19

New feature
2020/02/02

If more than one ⟨size-info⟩ entry follows without any intervening ⟨font-info⟩,
they all share the next ⟨font-info⟩.
The ⟨size-function⟩, if present, handles the use of ⟨font-info⟩. If not present,the ‘empty’ ⟨size-function⟩ is assumed.
All the ⟨size-info⟩s are inspected in the order in which they appear in the fontshape declaration. If a ⟨size-info⟩ matches the requested size, its ⟨size-function⟩is executed. If \external@font is non-empty afterwards this process stops,
otherwise the next ⟨size-info⟩ is inspected. (See also \DeclareSizeFunction.)If this process does not lead to a non-empty \external@font, LATEX tries thenearest simple size. If the entry contains only ranges an error is returned.

4.4

Size functions

LATEX provides the following size functions, whose ‘inputs’ are ⟨fontarg⟩ and⟨optarg⟩ (when present).
‘’ (empty) Load the external font ⟨fontarg⟩ at the user-requested size. If⟨optarg⟩ is present, it is used as the scale-factor.
s Like the empty function but without terminal warnings, only loggings.
gen Generates the external font from ⟨fontarg⟩ followed by the user-requested
size, e.g. <8> <9> <10> gen * cmttsgen Like the ‘gen’ function but without terminal warnings, only loggings.
genb Generates the external font from ⟨fontarg⟩ followed by the user-requested
size, using the conventions of the ‘ec’ fonts. e.g. <10.98> genb * dctt
produces dctt1098.

New feature
1995/12/01

sgenb Like the ‘genb’ function but without terminal warnings, only loggings.

New feature
1995/12/01

sub Tries to load a font from a different font shape declaration given by⟨fontarg⟩ in the form ⟨family⟩/⟨series⟩/⟨shape⟩.
ssub Silent variant of ‘sub’, only loggings.
alias Same as ‘ssub’ but with a different logging message. Intended for cases
where the substitution is only done to change the name, e.g., going from
regular series to the official name m. In that case given a warning thatsome shape is not found is not correct.
subf Like the empty function but issues a warning that it has to substitute theexternal font ⟨fontarg⟩ because the desired font shape was not available
in the requested size.
ssubf Silent variant of ‘subf’, only loggings.
fixed Load font ⟨fontarg⟩ as is, disregarding the user-requested size. If present,⟨optarg⟩ gives the “at . . . pt” size to be used.
sfixed Silent variant of ‘fixed’, only loggings.
20

New feature
2019/10/15

Examples for the use of most of the above size functions can be found in the filecmfonts.fdd—the source for the standard .fd files describing the Computer
Modern fonts by Donald Knuth.
\DeclareSizeFunction {⟨name⟩} {⟨code⟩}

Declares a size-function ⟨name⟩ for use in \DeclareFontShape commands. Theinterface is still under development but there should be no real need to a define
new size functions.
The ⟨code⟩ is executed when the size or size-range in \DeclareFontShapematches the user-requested size.
The arguments of the size-function are automatically parsed and placed into
\mandatory@arg and \optional@arg for use in ⟨code⟩. Also available, of course,is \f@size, which is the user-requested size.
To signal success ⟨code⟩ must define the command \external@font to containthe external name and any scaling options (if present) for the font to be loaded.
This example sets up the ‘empty’ size function (simplified):\DeclareSizeFunction{}{\edef\external@font{\mandatory@arg\space at\f@size}

5

Encodings

This section explains how to declare and use new font encodings and how to
declare commands for use with particular encodings.

5.1

The fontenc package

Users can select new font encodings using the fontenc package. The fontenc
package has options for encodings; the last option becomes the default encoding.
For example, to use the OT2 (Washington University Cyrillic encoding) and T1
encodings, with T1 as the default, an author types:\usepackage[OT2,T1]{fontenc}

For each font encoding ⟨ENC ⟩ given as an option, this package loads the encoding definition (⟨enc⟩enc.def, with an all lower-case name) file; it also sets\encodingdefault to be the last encoding in the option list.
The declarations in the encoding definition file ⟨enc⟩enc.def for encoding⟨ENC ⟩ are responsible for declaring this encoding and telling LATEX how to
produce characters in this encoding; this file should contain nothing else (seeSection 5.2.
The standard LATEX format declares the OT1 and T1 text encodings by inputting
the files ot1enc.def and t1enc.def; it also sets up various defaults which
21

New
description
1997/12/01

require that OT1-encoded fonts are available. Other encoding set-ups might be
added to the distribution at a later stage.
Thus the example above loads the files ot2enc.def and t1enc.def and sets\encodingdefault to T1.
Warning: If you wish to use T1-encoded fonts other than the ‘cmr’ family thenyou may need to load the package (e.g. times) that selects the fonts before
loading fontenc (this prevents the system from attempting to load any T1encoded fonts from the ‘cmr’ family).

5.2

Encoding definition file commands

Note: An encoding definition file should contain only commands from this subsection.
As an exception it may also contain a \DeclareFontSubstitution declaration(described in 5.4) to specify how font substitution for this encoding should be
handled. In that case it is important that the values used point to a font thatis guaranteed to be available on all LATEX installations.2

New
description
2019/07/10

As with the font definition file commands, it is also possible (although normallynot necessary) to use these declarations directly within a class or package file.

New
description
1997/12/01

Warning: Some aspects of the contents of font definition files are still under development. Therefore, the current versions of the files ot1enc.def andt1enc.def are temporary versions and should not be used as models for producing further such files. For further information you should read the documentation in ltoutenc.dtx.
\ProvidesFile{⟨file-name⟩}[⟨release-info⟩]

The file should announce itself with a \ProvidesFile command, described in
LATEX 2ε for Class and Package Writers. For example:\ProvidesFile{ot2enc.def}[1994/06/01 Washington University Cyrillic encoding]\DeclareFontEncoding {⟨encoding⟩} {⟨text-settings⟩} {⟨math-settings⟩}

Declares a new encoding scheme ⟨encoding⟩.
The ⟨text-settings⟩ are declarations which are executed every time \selectfontchanges the encoding to be ⟨encoding⟩.
The ⟨math-settings⟩ are similar but are for math alphabets. They are executed
whenever a math alphabet with this encoding is called.
It also saves the value of ⟨encoding⟩ in the macro \LastDeclaredEncoding.
2 If the font encoding file is made available as part of a CTAN bundle, that could be a fontthat is provided together with that bundle, but it should not point to font which requires
further installation steps and therefore may or may not be installed.

22

New feature
1998/12/01

Example:\DeclareFontEncoding{OT1}{}{}

Fonts in encoding TS1 are usually not implementing the full encoding but only
a subset. This subset should be declared with a \DeclareEncodingSubset
declaration:

New feature
2021/06/01\DeclareEncodingSubset {⟨encoding⟩} {⟨font family⟩} {⟨subset number ⟩}This should even be done if the font is implementing the full TS1 encoding; seepage 36 for further details.
Some author commands need to change their definition depending on which
encoding is currently in use. For example, in the OT1 encoding, the letter ‘Æ’is in slot "1D, whereas in the T1 encoding it is in slot "C6. So the definition
of \AE has to change depending on whether the current encoding is OT1 or T1.
The following commands allow this to happen.
\DeclareTextCommand {⟨cmd ⟩} {⟨encoding⟩} [⟨num⟩] [⟨default⟩] {⟨definition⟩}

This command is like \newcommand, except that it defines a command which is
specific to one encoding. For example, the definition of \k in the T1 encodingis:\DeclareTextCommand{\k}{T1}[1]{\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}\DeclareTextCommand takes the same optional arguments as \newcommand.
The resulting command is robust, even if the code in ⟨definition⟩ is fragile.
It does not produce an error if the command has already been defined but logs
the redefinition in the transcript file.
\ProvideTextCommand {⟨cmd ⟩} {⟨encoding⟩} [⟨num⟩] [⟨default⟩] {⟨definition⟩}

This command is the same as \DeclareTextCommand, except that if ⟨cmd ⟩ isalready defined in encoding ⟨encoding⟩, then the definition is ignored.
\DeclareTextSymbol {⟨cmd ⟩} {⟨encoding⟩} {⟨slot⟩}

This command defines a text symbol with slot ⟨slot⟩ in the encoding. For
example, the definition of \ss in the OT1 encoding is:\DeclareTextSymbol{\ss}{OT1}{25}

It does not produce an error if the command has already been defined but logs
the redefinition in the transcript file.

23

New feature
1994/12/01

\DeclareTextAccent {⟨cmd ⟩} {⟨encoding⟩} {⟨slot⟩}

This command declares a text accent, with the accent taken from slot ⟨slot⟩ inthe encoding. For example, the definition of \" in the OT1 encoding is:\DeclareTextAccent{\"}{OT1}{127}It does not produce an error if the command has already been defined but logs
the redefinition in the transcript file.
\DeclareTextComposite {⟨cmd ⟩} {⟨encoding⟩} {⟨letter ⟩} {⟨slot⟩}

This command declares that the composite letter formed from applying ⟨cmd ⟩to ⟨letter ⟩ is defined to be simply slot ⟨slot⟩ in the encoding. The ⟨letter ⟩ should
be a single letter (such as a) or a single command (such as \i).
For example, the definition of \’{a} in the T1 encoding could be declared like
this:\DeclareTextComposite{\’}{T1}{a}{225}The ⟨cmd ⟩ will normally have been previously declared for this encoding, either
by using \DeclareTextAccent, or as a one-argument \DeclareTextCommand.
\DeclareTextCompositeCommand {⟨cmd ⟩} {⟨encoding⟩} {⟨letter ⟩} {⟨definition⟩}

New feature
1994/12/01

This is a more general form of \DeclareTextComposite, which allows for an
arbitrary ⟨definition⟩, not just a ⟨slot⟩. The main use for this is to allow accentson i to act like accents on \i, for example:\DeclareTextCompositeCommand{\’}{OT1}{i}{\’\i}

It has the same restrictions as \DeclareTextComposite.
New feature
1998/12/01\LastDeclaredEncodingThis holds the name of the last encoding declared via \DeclareFontEncoding(this should also be the currently most efficient encoding). It can be used in the⟨encoding⟩ argument of the above declarations in place of explicitly mentioning
the encoding, e.g.
\DeclareFontEncoding{T1}{}{}\DeclareTextAccent{\‘}{\LastDeclaredEncoding}{0}\DeclareTextAccent{\’}{\LastDeclaredEncoding}{1}This can be useful in cases where encoding files sharing common code are generated from one source.

24

5.3

Default definitions

The declarations used in encoding definition files define encoding-specific commands but they do not allow those commands to be used without explicitlychanging the encoding. For some commands, such as symbols, this is notenough. For example, the OMS encoding contains the symbol ‘§’, but we need to
be able to use the command \S whatever the current encoding may be, without
explicitly selecting the encoding OMS.

New
description
1997/12/01

To allow this, LATEX has commands that declare default definitions for commands; these defaults are used when the command is not defined in the current
encoding. For example, the default encoding for \S is OMS, and so in an encoding(such as OT1) which does not contain \S, the OMS encoding is selected in orderto access this glyph. But in an encoding (such as T1) which does contain \S, theglyph in that encoding is used. The standard LATEX 2ε format sets up several
such defaults using the following encodings: OT1, OMS and OML.

New
description
1997/12/01

Warning: These commands should not occur in encoding definition files, sincethose files should declare only commands for use when that encoding has been
selected. They should instead be placed in packages; they must, of course,always refer to encodings that are known to be available.
\DeclareTextCommandDefault {⟨cmd ⟩} {⟨definition⟩}

New feature
1994/12/01

This command allows an encoding-specific command to be given a default definition. For example, the default definition for \copyright is defined be a circled‘c’ with:\DeclareTextCommandDefault{\copyright}{\textcircled{c}}\DeclareTextAccentDefault {⟨cmd ⟩} {⟨encoding⟩}\DeclareTextSymbolDefault {⟨cmd ⟩} {⟨encoding⟩}

These commands allow an encoding-specific command to be given a default
encoding. For example, the default encoding for \" and \ae is set to be OT1 by:\DeclareTextAccentDefault{\"}{OT1}\DeclareTextSymbolDefault{\ae}{OT1}

Note that \DeclareTextAccentDefault can be used on any one-argument
encoding-specific command, not just those defined with \DeclareTextAccent.
Similarly, \DeclareTextSymbolDefault can be used on any encoding-specificcommand with no arguments, not just those defined with \DeclareTextSymbol.
For more examples of these definitions, see ltoutenc.dtx.

25

New feature
1994/12/01

\ProvideTextCommandDefault {⟨cmd ⟩} {⟨definition⟩}

New feature
1994/12/01

This command is the same as \DeclareTextCommandDefault, except that if thecommand already has a default definition, then the definition is ignored. This isuseful to give ‘faked’ definitions of symbols which may be given ‘real’ definitions
by other packages. For example, a package might give a fake definition of\textonequarter by saying:\ProvideTextCommandDefault{\textonequarter}{$\m@th\frac14$}

5.4

Encoding defaults\DeclareFontEncodingDefaults {⟨text-settings⟩} {⟨math-settings⟩}

Declares ⟨text-settings⟩ and ⟨math-settings⟩ for all encoding schemes. These are
executed before the encoding scheme dependent ones are executed so that one
can use the defaults for the major cases and overwrite them if necessary using\DeclareFontEncoding.
If \relax is used as an argument, the current setting of this default is left
unchanged.
This example is used by amsfonts.sty for accent positioning; it changes only themath settings:\DeclareFontEncodingDefaults{\relax}{\def\accentclass@{7}}\DeclareFontSubstitution {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩}

Declares the default values for font substitution which will be used when a fontwith encoding ⟨encoding⟩ should be loaded but no font can be found with thecurrent attributes.
These substitutions are local to the encoding scheme because the encoding
scheme is never substituted! They are tried in the order ⟨shape⟩ then ⟨series⟩
and finally ⟨family⟩.
This declaration is normally done in an encoding definition file (see 5.2), but
can also be used in a class file or the document preamble to alter the default
for a specific encoding.
If no defaults are set up for an encoding, the values given by \DeclareErrorFont
are used.
The font specification for ⟨encoding⟩⟨family⟩⟨series⟩⟨shape⟩ must have been defined by \DeclareFontShape before the \begin{document} is reached.
Example:\DeclareFontSubstitution{T1}{cmr}{m}{n}26Newdescription
2019/07/10

5.5

Case changing\MakeUppercase {⟨text⟩}\MakeLowercase {⟨text⟩}

TEX provides the two primitives \uppercase and \lowercase for changing thecase of text. Unfortunately, these TEX primitives do not change the case ofcharacters accessed by commands like \ae or \aa. To overcome this problem,
LATEX provides these two commands.

New feature
1995/06/01

In the long run, we would like to use all-caps fonts rather than any command
like \MakeUppercase but this is not possible at the moment because such fonts
do not exist.
For further details, see clsguide.tex.
In order that upper/lower-casing will work reasonably well, and in order toprovide any correct hyphenation, LATEX 2ε must use, throughout a document,
the same fixed table for changing case. The table used is designed for the fontencoding T1; this works well with the standard TEX fonts for all Latin alphabets
but will cause problems when using other alphabets. As an experiment, it has
now been extended for use with some Cyrillic encodings.

6

New
description
1999/04/23

Miscellanea

This section covers the remaining font commands in LATEX and some otherissues.

6.1

Font substitution\DeclareErrorFont {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩} {⟨size⟩}

Declares ⟨encoding⟩⟨family⟩⟨series⟩⟨shape⟩ to be the font shape used in cases
where the standard substitution mechanism fails (i.e. would loop). For the
standard mechanism see the command \DeclareFontSubstitution above.
The font specification for ⟨encoding⟩⟨family⟩⟨series⟩⟨shape⟩ must have been defined by \DeclareFontShape before the \begin{document} is reached.
Example:\DeclareErrorFont{OT1}{cmr}{m}{n}{10}This declaration is a system wide fallback and it should normally not be changed,in particular it does not belong into font encoding definition files but rather into
the LATEX format. It is normally set up in fonttext.cfg. Adjustments on a per
encoding base should be made through \DeclareFontSubstitution instead!

27

New
description
2019/07/10

\fontsubfuzz

This parameter is used to decide whether or not to produce a terminal warning
if a font size substitution takes place. If the difference between the requested
and the chosen size is less than \fontsubfuzz the warning is only written to
the transcript file. The default value is 0.4pt. This can be redefined with\renewcommand, for example:\renewcommand{\fontsubfuzz}{0pt}

6.2% always warn

Preloading\DeclarePreloadSizes {⟨encoding⟩} {⟨family⟩} {⟨series⟩} {⟨shape⟩} {⟨size-list⟩}

Specifies the fonts that should be preloaded by the format. These commands
should be put in a preload.cfg file, which is read in when the LATEX format
is being built. Read preload.dtx for more information on how to built such aconfiguration file.
Example:\DeclarePreloadSizes{OT1}{cmr}{m}{sl}{10,10.95,12}Preloading is really an artifact of the days when loading fonts while processing
a document contributed substantially to the processing time. These days it isusually best not to use this mechanism any more.

6.3

New
description
2019/07/10

Accented characters

Accented characters in LATEX can be produced using commands such as \"a etc.
The precise effect of such commands depends on the font encoding being used.
When using a font encoding that contains the accented characters as individual
glyphs (such as the T1 encoding, in the case of \"a) words that contain suchaccented characters can be automatically hyphenated. For font encodings that
do not contain the requested individual glyph (such as the OT1 encoding) such acommand invokes typesetting instructions that produce the accented characteras a combination of character glyphs and diacritical marks in the font. In mostcases this involves a call to the TEX primitive \accent. Glyphs constructed
as composites in this way inhibit hyphenation of the current word; this is one
reason why the T1 encoding is preferable to the original TEX font encoding OT1.
It is important to understand that commands like \"a in LATEX 2ε represent justa name for a single glyph (in this case ‘umlaut a’) and contain no information
about how to typeset that glyph—thus it does not mean ‘put two dots on top of
the character a’. The decision as to what typesetting routine to use will dependon the encoding of the current font and so this decision is taken at the lastminute. Indeed, it is possible that the same input will be typeset in more than
one way in the same document; for example, text in section headings may also

28

New
description
1996/06/01

appear in table of contents and in running heads; and each of these may use afont with a different encoding.
For this reason the notation \"a is not equivalent to:\newcommand \chara {a}\"\chara

In the latter case, LATEX does not expand the macro \chara but simply compares
the notation (the string \"\chara) to its list of known composite notations in
the current encoding; when it fails to find \"\chara it does the best it can andinvokes the typesetting instructions that put the umlaut accent on top of the
expansion of \chara. Thus, even if the font actually contains ‘ä’ as an individual
glyph, it will not be used.
The low-level accent commands in LATEX are defined in such a way that it ispossible to combine a diacritical mark from one font with a glyph from another¨ The umlaut here is taken
font; for example, \"\textparagraph will produce ¶.
from the OT1 encoded font cmr10 whilst the paragraph sign is from the OMS
encoded font cmsy10. (This example may be typographically silly but betterones would involve font encodings like OT2 (Cyrillic) that might not be available
at every site.)
There are, however, restrictions on the font-changing commands that will workwithin the argument to such an accent command. These are TEXnical in thesense that they follow from the way that TEX’s \accent primitive works, allowing only a special class of commands between the accent and the accented
character.
The following are examples of commands that will not work correctly as
the accent will appear above a space: the font commands with text arguments (\textbf{...} and friends); all the font size declarations (\fontsize
and \Large, etc.); \usefont and declarations that depend on it, such as\normalfont; box commands (e.g. \mbox{...}).
The lower-level font declarations that set the attributes family, series and shape(such as \fontshape{sl}\selectfont) will produce correct typesetting, as will
the default declarations such as \bfseries.

6.4

Naming conventions• Math alphabet commands all start with \math...: examples are \mathbf,\mathcal, etc.
• The text font changing commands with arguments all start with \text...:e.g. \textbf and \textrm. The exception to this is \emph, since it occurs
very commonly in author documents and so deserves a shorter name.
• Names for encoding schemes are strings of up to three letters (all uppercase) plus digits.
The LATEX Project reserves the use of encodings starting with the following letters: T (standard 256-long text encodings), TS (symbols that aredesigned to extend a corresponding T encoding), X (text encodings that29

do not conform to the strict requirements for T encodings), M (standard
256-long math encodings), S (other symbol encodings), A (other special
applications), OT (standard 128-long text encodings) and OM (standard
128-long math encodings).
Please do not use the above starting letters for non-portable encodings. If
new standard encodings emerge then we shall add them in a later releaseof LATEX.
Encoding schemes which are local to a site or a system should start withL, experimental encodings intended for wide distribution will start with E,
whilst U is for Unknown or Unclassified encodings.
• Font family names should contain only upper and lower case letters andhyphen characters. Where possible, these should conform to the Filenames
for fonts font naming scheme of the scheme implemented by autoinstwith suffixes such as -LF, -OsF, etc. to indicate different figure styles.

New
description
2019/10/15• Font series names should contain up to four lower case letters. If at all
possible standard names as suggested in Section 2.1 should be used. Font
specific names such as regular or black, etc. should be at least aliased
to a corresponding standard name.

New
description
2019/10/15• Font shapes should contain up to four letters lower case. Use the names
suggested in Section 2.1.

New
description
2019/10/15• Names for symbol fonts are built from lower and upper case letters withno restriction.
Whenever possible, you should use the series and shape names suggested in
The LATEX Companion since this will make it easier to combine new fonts withexisting fonts.
Where possible, text symbols should be named as \text followed by the Adobe
glyph name: for example \textonequarter or \textsterling. Similarly, mathsymbols should be named as \math followed by the glyph name, for example\mathonequarter or \mathsterling. Commands which can be used in text ormath can then be defined using \ifmmode, for example:

New
description
1994/12/01\DeclareRobustCommand{\pounds}{%\ifmmode \mathsterling \else \textsterling \fi}Note that commands defined in this way must be robust, in case they get put
into a section title or other moving argument.

6.5

The order of declaration

NFSS forces you to give all declarations in a specific order so that it can check
whether you have specified all necessary information. If you declare objects inthe wrong order, it will complain. Here are the dependencies that you have to
obey:
30

New
description
2019/10/15

• \DeclareFontFamily checks that the encoding scheme was previously declared with \DeclareFontEncoding.
• \DeclareFontShape checks that the font family was declared to be available in the requested encoding (\DeclareFontFamily).
• \DeclareSymbolFont checks that the encoding scheme is valid.
• \SetSymbolFont additionally ensures that the requested math version was
declared (\DeclareMathVersion) and that the requested symbol font was
declared (\DeclareSymbolFont).
• \DeclareSymbolFontAlphabet checks that the command name for thealphabet identifier can be used and that the symbol font was declared.
• \DeclareMathAlphabet checks that the chosen command name can beused and that the encoding scheme was declared.
• \SetMathAlphabet checks that the alphabet identifier was previously
declared with \DeclareMathAlphabet or \DeclareSymbolFontAlphabet
and that the math version and the encoding scheme are known.
• \DeclareMathSymbol makes sure that the command name can be used
(i.e., is undefined or was previously declared to be a math symbol) andthat the symbol font was previously declared.
• When the \begin{document} command is reached, NFSS makes some
additional checks—for example, verifying that substitution defaults forevery encoding scheme point to known font shape group declarations.

6.6

Font series defaults per document familyWith additional weights and widths being available in many font families nowadays, it is more likely that somebody will want to match, say, a medium weight
serif family with a semi-light sans serif family, or that with one family one
wants to use the bold-extended face when \textbf is used, while with anotherit should be bold (not extended) or semi-bold, etc. The default values canbe altered using the \DeclareFontSeriesDefault declaration in packages ordocument preambles:\DeclareFontSeriesDefault [⟨meta family⟩] {⟨meta series⟩} {⟨series value⟩}

This declaration takes three arguments:
Meta family interface: Can be either rm, sf or tt. This is optional and if
not present the next two arguments apply to the overall default.
Meta series interface: Can be md or bf.
Series value: This is the value that is going to be used when the combinationof ⟨meta family⟩ and ⟨meta series⟩ is requested.

31

New feature
2020/02/02

For example,\DeclareFontSeriesDefault[rm]{bf}{sb}would use sb (semi-bold) when \rmfamily\bfseries is requested in document.

6.7

Handling of current and requested font series andshape

In the original NFSS implementation, the series was a single attribute stored in\f@series and so one always had to specify both weight and width together.
Hence, it was impossible to typeset a paragraph in a condensed font and inside have a few words in bold weight (but still condensed) without doing thismanually by requesting \fontseries{bc}\selectfont.
The new implementation now works differently by looking both at the current
value of \f@series and the requested new series and out of that combination
selects a resulting series value. Thus, if the current series is c and we ask for b,
we now get bc. This is done by consulting a simple lookup table where entries
can be added or changed with \DeclareFontSeriesChangeRule:\DeclareFontSeriesChangeRule {⟨current series⟩} {⟨requested series⟩}{⟨result⟩} {⟨alternative result⟩}

The ⟨current series⟩ is the value currently stored in \f@series, ⟨requested series⟩
is the new series requested, ⟨result⟩ is the combined value if it exists for the given
font family, and ⟨alternative result⟩ is a fallback in case ⟨result⟩ doesn’t exist.
The example above now looks like this:\DeclareFontSeriesChangeRule{c}{b}{bc}{}

which means: switch to the bc series if c is current and b is (additionally)
requested, and if the current font doesn’t have the combination, start the normal
font substitution, i.e., switch back shape to n and if this combination doesn’t
succeed, switch back series to m as well, ending up with m/n.
Another example is:\DeclareFontSeriesChangeRule{bc}{sc}{bsc}{bc}which means: if the current series is bold condensed (bc) and semi-condensed(sc) is requested (additionally), try bold semi-condensed (bsc) if available but
stay with bold condensed if not.
A special value is m which is used to reset both weight and width. In order toreset only one of them, the special values ?m (reset width) and m? (reset weight)
are provided, e.g.:\DeclareFontSeriesChangeRule{bc}{m?}{c}{}32

New feature
2020/02/02

The corresponding macro \DeclareFontShapeChangeRule is also provided forsetting database entries for font shapes:\DeclareFontShapeChangeRule {⟨current shape⟩} {⟨requested shape⟩}{⟨result⟩} {⟨alternative result⟩}

An example would be:\DeclareFontShapeChangeRule{it}{sc}{scit}{scsl}

If italics is the current shape and small caps is requested, switch to scit (small
caps italics) and if that doesn’t exist, try scsl (small caps slanted).
Finally, it is also possible to overrule the entries in the lookup tables and forcibly
select a series or shape with:\fontseriesforce {⟨series⟩}\fontshapeforce {⟨shape⟩}

With the example above for the c series, issuing \fontseriesforce{b} meansthat the series switches to b and not to bc. Same applies to \fontshapeforce.

6.8

Handling of nested emphasis\DeclareEmphSequence {⟨list of font declarations⟩}

This declaration takes a comma separated list of font declarations each specifying how increasing levels of emphasis should be handled. For example:

New feature
2020/02/02\DeclareEmphSequence{\itshape,%\upshape\scshape,%\itshape}

uses italics for the first, small capitals for the second, and italic small capitals
for the third level. If there are more nesting levels than provided, declarations
stored in \emreset (by default \ulcshape\upshape) are used for the next level
and then the list restarts.

6.9

Providing font family substitutions\DeclareFontFamilySubstitution {⟨encoding⟩} {⟨family⟩} {⟨new-family⟩}This declaration selects the font family ⟨new-family⟩ as replacement for ⟨family⟩in the font encoding ⟨encoding⟩. For example,\DeclareFontFamilySubstitution{LGR}{Montserrat-LF}{IBMPlexSans-TLF}

tells LATEX to substitute the sans serif font Montserrat-LF in the Greek encoding LGR with IBMPlexSans-TLF once requested in a document.
33

New feature
2020/02/02

7

Additional text symbols – textcomp

For a long time the interface to additional text symbols and the text companion
encoding TS1 in general was the textcomp package. All the symbols provided
by the textcomp package are now available in LATEX kernel. Furthermore, anintelligent substitution mechanism has been implemented so that glyphs missing
in some fonts are automatically substituted with default glyphs that are sansserif if you typeset in \textsf and monospaced if you typeset using \texttt. In
the past they were always taken from Computer Modern Roman if substitution
was necessary.
This is most noticeable with \oldstylenums which are now taken from TS1 sothat you no longer get 1234 but 1234 when typesetting in sans serif fonts and1234 when using typewriter fonts.
\legacyoldstylenums {⟨nums⟩}\UseLegacyTextSymbols

If there ever is a need to use the original (inferior) definition, then that remains
available as \legacyoldstylenums; and to fully revert to the old behavior there
is also \UseLegacyTextSymbols. The latter declaration reverts \oldstylenums
and also changes the footnote symbols, such as \textdagger, \textparagraph,etc., to pick up their glyphs from the math fonts instead of the current text font(this means they always keep the same shape and do not nicely blend in withthe text font).
The following tables show the macros available. The next commands are ‘constructed’ accents and are built via TEX macros:\capitalcedilla␣A\capitalogonek␣AA̧A˛\textcircled␣aa○These accents are available via font encoding. The numbers in third row show
the slot number:\capitalgrave\capitalacute\capitalcircumflex\capitaltilde\capitaldieresis\capitalhungarumlaut\capitalring\capitalcaron

`
´


¨
˝

ˇ

0
1
2
3
4
5
6
7

\capitalbreve\capitalmacron\capitaldotaccent\t\capitaltie\newtie\capitalnewtie


¯





8
9
10
26
27
28
29

Table 2 on the next page contains the full list of commands to access the text
symbols. Again, the numbers are the slots in the encoding.
The TS1 encoding contains a rich set of symbols which means that several symbols are only available in a few TEX fonts and some, such as the capital accents,
not available at all but developed as part of the reference font implementation. In reality, many existing fonts don’t provide a full set of glyphs defined in
34

New feature
2020/02/02

\textcapitalcompwordmark\textascendercompwordmark\textquotestraightbase\textquotestraightdblbase\texttwelveudash\textthreequartersemdash\textleftarrow\textrightarrow\textblank\textdollar\textquotesingle\textasteriskcentered\textdblhyphen\textfractionsolidus\textzerooldstyle\textoneoldstyle\texttwooldstyle\textthreeoldstyle\textfouroldstyle\textfiveoldstyle\textsixoldstyle\textsevenoldstyle\texteightoldstyle\textnineoldstyle\textlangle\textminus\textrangle\textmho\textbigcircle\textohm\textlbrackdbl\textrbrackdbl\textuparrow\textdownarrow\textasciigrave\textborn\textdivorced\textdied\textleaf\textmarried\textmusicalnote\texttildelow\textdblhyphenchar\textasciibreve\textasciicaron\textacutedbl\textgravedbl\textdagger\textdaggerdbl\textbardbl\textperthousand\textbullet\textcelsius\textdollaroldstyle\textcentoldstyle

‌
‌

‚
„


←
→
␢
$
'
∗
⁄
0
1
2
3
4
5
6
7
8
9
〈
−
〉
℧
○
Ω
〚
〛
↑
↓
`
b
c
d
l
m
♪
~

˘
ˇ
˝
 ̏
†
‡
‖
‰
•
℃
$
¢

23
31
13
18
21
22
24
25
32
36
39
42
45
47
48
49
50
51
52
53
54
55
56
57
60
61
62
77
79
87
91
93
94
95
96
98
99
100
108
109
110
126
127
128
129
130
131
132
133
134
135
136
137
138
139

\textflorin\textcolonmonetary\textwon\textnaira\textguarani\textpeso\textlira\textrecipe\textinterrobang\textinterrobangdown\textdong\texttrademark\textpertenthousand\textpilcrow\textbaht\textnumero\textdiscount\textestimated\textopenbullet\textservicemark\textlquill\textrquill\textcent\textsterling\textcurrency\textyen\textbrokenbar\textsection\textasciidieresis\textcopyright\textordfeminine\textcopyleft\textlnot\textcircledP\textregistered\textasciimacron\textdegree\textpm\texttwosuperior\textthreesuperior\textasciiacute\textmu\textparagraph\textperiodcentered\textreferencemark\textonesuperior\textordmasculine\textsurd\textonequarter\textonehalf\textthreequarters\texteuro\texttimes\textdiv

ƒ
₡
₩
₦


₤

‽

₫
™
‱
¶
฿
№

℮
◦
℠
⁅
⁆
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
℗
®
¯
°
±
²
³
´
µ
¶
·
※
¹
º
√
¼
½
¾
€
×
÷

Table 2: Text symbols formerly from the textcomp package

35

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
214
246

\textquotestraightbase\textquotestraightdblbase\textcapitalcompwordmark\textascendercompwordmark\textdollar\textquotesingle\textasteriskcentered\textdagger\textdaggerdbl\textperthousand\textbullet\texttrademark\textcent\textsterling\textyen\textbrokenbar

‚
„
‌

‌

$
'
∗
†
‡
‰
•
™
¢
£
¥
¦

13
18
23
31
36
39
42
132
133
135
136
151
162
163
165
166

\textsection\textcopyright\textordfeminine\textlnot\textregistered\textdegree\textpm\textparagraph\textperiodcentered\textordmasculine\textonequarter\textonehalf\textthreequarters\texttimes\textdiv

§
©
ª
¬
®
°
±
¶
·
º
¼
½
¾
×
÷

167
169
170
172
174
176
177
182
183
186
188
189
190
214
246

Table 3: Symbols available in all TS1 sub-encodings\textcircled○

acc

Table 4: Symbol unavailable in TS1 sub-encoding 1 and higher
TS1 encoding and the question arises: “Which glyphs of the TS1 encoding are
implemented by which font?”
Fonts can be ordered in sub-encodings with the \DeclareEncodingSubset
macro:\DeclareEncodingSubset {⟨encoding⟩} {⟨font family⟩} {⟨subset number ⟩}The macro takes 3 mandatory arguments: An ⟨encoding⟩ for which a subsetting
is wanted (currently only TS1), the ⟨font family⟩ for which we declare the subset
and finally the ⟨subset number ⟩ between 0 (all of the encoding is supported)and 9 (many glyphs are missing). Hence, it is assumed that some symbols
are always available by all fonts and each sub-encoding defines macros whichbecome unavailable (i.e., they are not provided in the sub-encoding with that
number and all sub-encodings with higher numbers.)
Thus, the symbols that are available in sub-encoding x are the symbols in table 3 (always available) and the symbols that only become unavailable in subencodings > x. The tables 4 to 12 on pages 36–38 show the symbols that become
unavailable in the different sub-encodings. Again, the numbers are the slots in
the TS1 encoding, acc indicates a ‘constructed’ accent.
As an example, \DeclareEncodingSubset{TS1}{foo}{5} indicates that thefont family foo contains the always available symbols (table 3) and the ones
disabled in sub-encodings 6–9, i.e., tables 9 to 12 on pages 37–38.
As these days many font families are set up to end in -LF (lining figures), -OsF
(oldstyle figures), etc. the declaration supports a shortcut: if the ⟨font family⟩name ends in -* then the star gets replaced by these common ending, e.g.,\DeclareEncodingSubset{TS1}{Alegreya-*}{2}36

New feature
2021/06/01

¸
˛
`
´


¨
˝

ˇ

¯

\capitalcedilla\capitalogonek\capitalgrave\capitalacute\capitalcircumflex\capitaltilde\capitaldieresis\capitalhungarumlaut\capitalring\capitalcaron\capitalbreve\capitalmacron\capitaldotaccent\capitaltie\newtie\capitalnewtie{}\textdblhyphen\textzerooldstyle\textoneoldstyle\texttwooldstyle\textthreeoldstyle\textfouroldstyle\textfiveoldstyle\textsixoldstyle\textsevenoldstyle\texteightoldstyle\textnineoldstyle\textmho\textbigcircle\textlbrackdbl\textrbrackdbl\textasciigrave\textborn




0
1
2
3
4
5
6
7
8
9
℧
○
〚
〛
`
b

acc
acc
0
1
2
3
4
5
6
7
8
9
10
27
28
29
45
48
49
50
51
52
53
54
55
56
57
77
79
91
93
96
98

c
d
l
m
♪
~

˘
ˇ
˝
 ̏
$
¢
₦



‱
¶
฿

◦
℠
⁅
⁆
¨
«
℗
¯
´
※
√

\textdivorced\textdied\textleaf\textmarried\textmusicalnote\texttildelow\textdblhyphenchar\textasciibreve\textasciicaron\textacutedbl\textgravedbl\textdollaroldstyle\textcentoldstyle\textnaira\textguarani\textpeso\textrecipe\textpertenthousand\textpilcrow\textbaht\textdiscount\textopenbullet\textservicemark\textlquill\textrquill\textasciidieresis\textcopyleft\textcircledP\textasciimacron\textasciiacute\textreferencemark\textsurd

99
100
108
109
110
126
127
128
129
130
131
138
139
143
144
145
147
152
153
154
156
158
159
160
161
168
171
173
175
180
184
187

Table 5: Symbols unavailable in TS1 sub-encoding 2 and higher〈

textlangle

60\textrangle〉

62

Table 6: Symbols unavailable in TS1 sub-encoding 3 and higher\textleftarrow\textrightarrow\textuparrow\textdownarrow

←
→
↑
↓

24
25
94
95

₡
₩
₤
₫

\textcolonmonetary\textwon\textlira\textdong

141
142
146
150

Table 7: Symbols unavailable in TS1 sub-encoding 4 and higher\textnumero№

155\textestimated℮157

Table 8: Symbols unavailable in TS1 sub-encoding 5 and higher\textflorinƒ

140\textcurrency¤

164

Table 9: Symbols unavailable in TS1 sub-encoding 6 and higher\textfractionsolidus\textminus

⁄
−

47
61

\textohm\textmu

Ω
µ

87
181

Table 10: Symbols unavailable in TS1 sub-encoding 7 and higher37\textblank\textinterrobang

␢
‽

32
148

\textinterrobangdown

149

Table 11: Symbols unavailable in TS1 sub-encoding 8 and higher\texttwelveudash\textthreequartersemdash\textbardbl\textcelsius



‖
℃

21
22
134
137

\texttwosuperior\textthreesuperior\textonesuperior

²
³
¹

178
179
185

Table 12: Symbols unavailable in TS1 sub-encoding 9
is the same as writing\DeclareEncodingSubset{TS1}{Alegreya-LF} {2}\DeclareEncodingSubset{TS1}{Alegreya-OsF} {2}\DeclareEncodingSubset{TS1}{Alegreya-TLF} {2}\DeclareEncodingSubset{TS1}{Alegreya-TOsF}{2}

If only some are needed then one can define them individually but in many cases
all four are wanted, hence the shortcut.
Maintainers of font bundles that include TS1 encoded font files should add anappropriate declaration into the corresponding ts1family.fd file, because otherwise the default subencoding is assumed, which is probably disabling too many
glyphs that are actually available in the font.3

8

If you need to know more . . .

The tracefnt package provides for tracing the actions concerned with loading,
substituting and using fonts. The package accepts the following options:errorshow Write all information about font changes, etc. but only to the transcript file unless an error occurs. This means that information about fontsubstitution will not be shown on the terminal.
warningshow Show all font warnings on the terminal. This setting corresponds to the default behavior when this tracefnt package is not used!
infoshow Show all font warnings and all font info messages (that are normally
only written to the transcript file) also on the terminal. This is the default
when this tracefnt package is loaded.
debugshow In addition to what is shown by infoshow, show also changes ofmath fonts (as far as possible): beware, this option can produce a large
amount of output.
3 The LAT X format contains declarations for many font families already, but this is reallyE
the wrong place for the declarations. Thus for new fonts they should be placed into thecorresponding .fd file.

38

New
description
1996/06/01

loading Show the names of external font files when they are loaded. This
option shows only ‘newly loaded’ fonts, not those already preloaded in theformat or the class file before this tracefnt package becomes active.
pausing Turn all font warnings into errors so that LATEX will stop.
Warning: The actions of this package can change the layout of a document andeven, in rare cases, produce clearly wrong output, so it should not be used in
the final formatting of ‘real documents’.

References[1] Frank Mittelbach and Michel Goossens. The LATEX Companion second edition. With Johannes Braams, David Carlisle, and Chris Rowley. AddisonWesley, Reading, Massachusetts, 2004.
[2] Donald E. Knuth. Typesetting concrete mathematics. TUGboat, 10(1):31–
36, April 1989.
[3] Leslie Lamport. LATEX: A Document Preparation System. Addison-Wesley,
Reading, Massachusetts, second edition, 1994.

39