Latex
Latex
October 2023
Contents
1 Introduction                                                                                                                     2
  1.1 LATEX 2ε fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                     2
  1.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                       3
  1.3 Further information . . . . . . . . . . . . . . . . . . . . . . . . .                                                        3
2 Text fonts                                                                                                                        4
  2.1 Text font attributes . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
  2.2 Selection commands . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  2.3 Internals . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  2.4 Parameters for author commands .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  2.5 Special font declaration commands                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   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
   † Thisfile may be distributed and/or modified under the conditions of the LATEX Project
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 nested emphasis . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
  6.8 Providing font family substitutions . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
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 font-
loading 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 is
neither a user-guide nor a reference manual for fonts in LATEX 2ε .
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 de-
     scribes 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 your
     own 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 have
     different 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 sub-
     stitution, how to customize fonts that are preloaded in the LATEX format,
     and the naming conventions used in LATEX font selection.
                                            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 doc-
ument also includes an index of LATEX commands. It can be typeset from
the 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 can
be found at:
https://www.tug.org/lugs.html
2     Text fonts
This section describes the commands available to class and package writers for
specifying and selecting fonts.
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     TEX text
                T1     TEX extended text
               OML     TEX math italic
               OMS     TEX math symbols
               OMX     TEX math large symbols
                 U     Unknown
             L⟨xx ⟩    A local encoding
The ‘local’ encodings are intended for font encodings which are only locally
available, 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:
 The font series is denoting a combination of the weight (boldness) and the         New
width (amount of expansion). The standard supported for weights and widths          description
are:                                                                                2019/07/10
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:
                                       5
Note, that there are a large variety of names floating around like “regular”,            New
“black”, “demi-bold”, “thin”, “heavy” and many more. If at all possible they             description
should be matched into the standard naming scheme to allow for sensible default          2019/07/10
substitutions if necessary, e.g., “demi-bold” is normally just another name for
“semi-bold”, so should get sb assigned, etc.
The most common values for the font shape are:                                           New
                                                                                         description
                 n     Normal (that is ‘upright’ or ‘roman’)                             2020/02/02
                it     Italic
                sl     Slanted (or ‘oblique’)
                sc     Caps and small caps
              scit     Caps and small caps italic
              scsl     Caps and small caps slanted
                sw     Swash
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:
These five parameters are displayed whenever LATEX gives an overfull box warn-
ing, for example:
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. These
should 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                       cmr
                                     series                       m
                                    shape                         n
            \textrm{..}   or   \rmfamily family                  cmr
            \textsf{..}   or   \sffamily family                  cmss
            \texttt{..}   or   \ttfamily family                  cmtt
            \textmd{..}   or   \mdseries series                   m
            \textbf{..}   or   \bfseries series                   bx
             \textit{..} or \itshape      shape                  it
             \textsl{..} or \slshape      shape                  sl
             \textsc{..} or \scshape      shape                  sc
           \textssc{..} or \sscshape      shape                 ssc
             \textsw{..} or \swshape      shape                  sw
           \textulc{..} or \ulcshape      shape ulc (virtual)   → n, it, sl or ssc
             \textup{..} or \upshape      shape up (virtual)    → n or sc
                                \tiny       size                 5pt
                          \scriptsize       size                 7pt
                        \footnotesize       size                 8pt
                               \small       size                 9pt
                          \normalsize       size                 10pt
                               \large       size                 12pt
                               \Large       size                14.4pt
                               \LARGE       size               17.28pt
                                \huge       size               20.74pt
                                \Huge       size               24.88pt
\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;        New
    \fontsize also sets \baselineskip. The \linespread command prepares                 description
    to multiply the current (or newly defined) \baselineskip with ⟨factor ⟩ (e.g.,      1998/12/01
    spreads the lines apart for values greater one).
    The actual font in use is not altered by these commands, but the current at-
    tributes are used to determine which font and baseline skip to use after the next
    \selectfont command.
                                           7
\selectfont
    Selects a text font, based on the current values of the font attributes.
    Warning: There must be a \selectfont command immediately after any set-
    tings of the font parameters by (some of) the six commands above, before any
    following text. For example, it is legal to say:
    You may get unexpected results if you put text between a \font⟨parameter ⟩
    command (or \linespread) and a \selectfont.
    2.3    Internals
    The current values of the font attributes are held in internal macros.
    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 that
    loops.
                                            8
       \renewcommand{\rmdefault}{ptm}
       \renewcommand{\sfdefault}{phv}
       \renewcommand{\ttdefault}{pcr}
    The encoding, family, series and shape of the main body font. By default these
    are 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.
\bfdefault \mddefault
    The shapes selected by \textit, \itshape, \textsl, \slshape, \textsc,               New feature
    \scshape, \textssc, \sscshape, \textsw, \swshape, \textulc, \ulcshape,              2020/02/02
    \textup and \upshape. By default these are it, sl, sc, ssc, sw, ulc and
    up. 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 shape
    value 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, the
    command \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 is
    changed) can be found in classes.dtx the source documentation for the classes
    article, report, and book.
                                            9
    2.5    Special font declaration commands
    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 sur-
    rounding conditions.
    This example makes {\picturechar .} select a small dot very quickly:
\DeclareFixedFont{\picturechar}{OT1}{cmr}{m}{n}{5}
    Declares command ⟨cmd ⟩ to be a font command with one argument. The current
    font attributes are locally modified by ⟨font-switches⟩ and then the argument
    of ⟨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 the
    main document font you could declare:
\DeclareTextFontCommand{\normalit}{\normalfont\itshape}
    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 def-
    inition ⟨math-switch⟩ when used in a formula. Math alphabet commands, like
    \mathit, when used within ⟨math-switch⟩ should not have an argument. Their
    use in this argument causes their semantics to change so that they here act as
    a 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 doc-
ument 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}
3     Math fonts
This section describes the commands available to class and package writers for
specifying math fonts and math commands.
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. These
math alphabet commands affect only the font used for letters and symbols of
type \mathalpha (see Section 3.6); other symbols within the argument will be
left unchanged. The predefined math alphabets are:
Other 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 predefined
math symbol fonts are:
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 the
    attributes to be individually changed. Instead, the conversion from math fonts
    to these five attributes is controlled by the math version. For example, the
    normal math version maps:
    The bold math version is similar except that it contains bold fonts. The com-
    mand \boldmath selects the bold math version.
    Math versions can only be changed outside of math mode.
    The two predefined math versions are:
    Packages may define new math alphabets, math symbol fonts, and math ver-
    sions. This section describes the commands for writing such packages.
    There are no commands for selecting symbol fonts. Instead, these are selected
    indirectly through symbol commands like \oplus. Section 3.6 explains how to
    define symbol commands.
    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⟩}
\DeclareMathVersion{normal}
    If this is the first declaration for ⟨math-alph⟩ then a new math alphabet with         New
    this as its command name is created.                                                   description
                                                                                           1997/12/01
    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, these
    must 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 math
    version.
    Checks that the command ⟨math-alph⟩ is either already a math alphabet com-
    mand or is undefined; and that ⟨encoding⟩ is a known encoding scheme, i.e., has
    been previously declared.
    In these examples, \foo is defined for all math versions but \baz, by default, is
    defined nowhere.
        \DeclareMathAlphabet{\foo}{OT1}{cmtt}{m}{n}
        \DeclareMathAlphabet{\baz}{OT1}{}{}{}
    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 a
    known math version and ⟨encoding⟩ is a known encoding scheme.
                                                13
    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 de-
    scribes \DeclareSymbolFontAlphabet, which is used to set up math alphabets
    contained in fonts which have been declared as symbol fonts.
    If this is the first declaration for ⟨sym-font⟩ then a new symbol font with this   New
    name is created (i.e. this identifier is assigned to a new TEX math group).        description
                                                                                       1997/12/01
    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, these
    must be further reset later for a particular math version by a \SetSymbolFont
    command.
    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}
    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}
    Allows the previously declared symbol font ⟨sym-font⟩ to be the math alphabet      New
    with command ⟨math-alph⟩ in all math versions.                                     description
                                                                                       1997/12/01
    Checks that the command ⟨math-alph⟩ is either already a math alphabet com-
    mand or is undefined; and that ⟨sym-font⟩ is a symbol font.
                                               14
    Example:
       \DeclareSymbolFontAlphabet{\mathrm}{operators}
       \DeclareSymbolFontAlphabet{\mathcal}{symbols}
    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:
       \DeclareMathSymbol{\alpha}{0}{letters}{"0B}
       \DeclareMathSymbol{\lessdot}{\mathbin}{AMSb}{"0C}
       \DeclareMathSymbol{\alphld}{\mathalpha}{AMSb}{"0C}
                                             15
\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 automatically
    defines it as a math symbol.
    In case ⟨cmd ⟩ is a single character such as ‘[’, the same syntax is used. Previ-     New
    ously the {⟨type⟩} argument was not present (and thus the corresponding math          description
    symbol declaration had to be provided separately).                                    1998/06/01
Example:
        \DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}
                                                 {largesymbols}{"0A}
        \DeclareMathDelimiter{(}      {\mathopen}{operators}{"28}
                                                 {largesymbols}{"00}
        \DeclareMathAccent{\acute}{\mathalpha}{operators}{"13}
        \DeclareMathAccent{\vec}{\mathord}{letters}{"7E}
\DeclareMathRadical{\sqrt}{symbols}{"70}{largesymbols}{"70}
    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
    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 for
    the 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 not
    have available a ⟨mt-size⟩ for every ⟨t-size⟩.
    Example:
\DeclareMathSizes{13.82}{14.4}{10}{7}
    4     Font installation
    This section explains how LATEX’s font attributes are turned into TEX font spec-
    ifications.
    The description of how LATEX font attributes are turned into TEX fonts is usually      New
    kept in a font definition file (.fd). The file for family ⟨family⟩ in encoding         description
    ⟨ENC ⟩ must be called ⟨enc⟩⟨family⟩.fd: for example, ot1cmr.fd for Computer            1997/12/01
    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 of
    file names.
    Whenever LATEX encounters an encoding/family combination that it does not
    know (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 combina-
    tion. 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.
    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⟩]
                                             17
    For example:
    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. How-        New
    ever, note that this is only true if the declaration is made at top level! If used   description
    within the definition of another command, within \AtBeginDocument, option            2004/02/10
    code or in similar places, then spaces within the argument will remain and may
    result in incorrect table entries.
\DeclareFontFamily{T1}{cmtt}{\hyphenchar\font=-1}
    Each .fd file should contain exactly one \DeclareFontFamily command, and
    it should be for the appropriate encoding/family combination.
       \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
The file can contain any number of \DeclareFontShape commands, which
should 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=‘\-
The information which tells LATEX exactly which font (.tfm) files to load is
contained in the ⟨loading-info⟩ part of a \DeclareFontShape declaration. This
part consists of one or more ⟨fontshape-decl ⟩s, each of which has the following
form:
The ⟨number-or-range⟩ denotes the size or size-range for which this entry ap-
plies.
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, the
upper bound is not included in the range and the lower bound is.
Examples:
                                            19
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 font
shape 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 the
nearest simple size. If the entry contains only ranges an error is returned.
LATEX provides the following size functions, whose ‘inputs’ are ⟨fontarg⟩ and
⟨optarg⟩ (when present).
                                        20
    Examples for the use of most of the above size functions can be found in the file
    cmfonts.fdd—the source for the standard .fd files describing the Computer
    Modern fonts by Donald Knuth.
        \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.
    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 en-        New
    coding definition (⟨enc⟩enc.def, with an all lower-case name) file; it also sets    description
    \encodingdefault to be the last encoding in the option list.                        1997/12/01
                                           21
    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 then
    you 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 T1-
    encoded fonts from the ‘cmr’ family).
    Note: An encoding definition file should contain only commands from this sub-
    section.
    As an exception it may also contain a \DeclareFontSubstitution declaration                       New
    (described in 5.4) to specify how font substitution for this encoding should be                  description
    handled. In that case it is important that the values used point to a font that                  2019/07/10
    is guaranteed to be available on all LATEX installations.2
    As with the font definition file commands, it is also possible (although normally                New
    not necessary) to use these declarations directly within a class or package file.                description
                                                                                                     1997/12/01
    Warning: Some aspects of the contents of font definition files are still un-
    der development. Therefore, the current versions of the files ot1enc.def and
    t1enc.def are temporary versions and should not be used as models for pro-
    ducing further such files. For further information you should read the documen-
    tation in ltoutenc.dtx.
\ProvidesFile{⟨file-name⟩}[⟨release-info⟩]
        \ProvidesFile{ot2enc.def}
                     [1994/06/01 Washington University Cyrillic encoding]
                                                 22
    Example:
\DeclareFontEncoding{OT1}{}{}
    Fonts in encoding TS1 are usually not implementing the full encoding but only     New feature
    a subset. This subset should be declared with a \DeclareEncodingSubset            2021/06/01
    declaration:
    This should even be done if the font is implementing the full TS1 encoding; see
    page 33 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{\k}{T1}[1]
          {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}
    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
\DeclareTextAccent {⟨cmd ⟩} {⟨encoding⟩} {⟨slot⟩}
    This command declares a text accent, with the accent taken from slot ⟨slot⟩ in
    the 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.
    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{\’}{OT1}{i}{\’\i}
       \DeclareFontEncoding{T1}{}{}
       \DeclareTextAccent{\‘}{\LastDeclaredEncoding}{0}
       \DeclareTextAccent{\’}{\LastDeclaredEncoding}{1}
    This can be useful in cases where encoding files sharing common code are gen-
    erated from one source.
                                             24
    5.3    Default definitions
    The declarations used in encoding definition files define encoding-specific com-     New
    mands but they do not allow those commands to be used without explicitly             description
    changing the encoding. For some commands, such as symbols, this is not               1997/12/01
    enough. 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.
    To allow this, LATEX has commands that declare default definitions for com-          New
    mands; these defaults are used when the command is not defined in the current        description
    encoding. For example, the default encoding for \S is OMS, and so in an encoding     1997/12/01
    (such as OT1) which does not contain \S, the OMS encoding is selected in order
    to access this glyph. But in an encoding (such as T1) which does contain \S, the
    glyph in that encoding is used. The standard LATEX 2ε format sets up several
    such defaults using the following encodings: OT1, OMS and OML.
    Warning: These commands should not occur in encoding definition files, since
    those 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{\copyright}{\textcircled{c}}
       \DeclareTextAccentDefault{\"}{OT1}
       \DeclareTextSymbolDefault{\ae}{OT1}
                                           25
\ProvideTextCommandDefault {⟨cmd ⟩} {⟨definition⟩}                                        New feature
                                                                                          1994/12/01
    This command is the same as \DeclareTextCommandDefault, except that if the
    command already has a default definition, then the definition is ignored. This is
    useful 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$}
    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 the
    math settings:
\DeclareFontEncodingDefaults{\relax}{\def\accentclass@{7}}
    Declares the default values for font substitution which will be used when a font
    with encoding ⟨encoding⟩ should be loaded but no font can be found with the
    current 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       New
    can also be used in a class file or the document preamble to alter the default        description
    for a specific encoding.                                                              2019/07/10
\DeclareFontSubstitution{T1}{cmr}{m}{n}
                                            26
    5.5    Case changing
\MakeUppercase {⟨text⟩}
\MakeLowercase {⟨text⟩}
    TEX provides the two primitives \uppercase and \lowercase for changing the             New feature
    case of text. Unfortunately, these TEX primitives do not change the case of            1995/06/01
    characters accessed by commands like \ae or \aa. To overcome this problem,
    LATEX provides these two commands.
    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 to            New
    provide any correct hyphenation, LATEX 2ε must use, throughout a document,             description
    the same fixed table for changing case. The table used is designed for the font        1999/04/23
    encoding 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     Miscellanea
    This section covers the remaining font commands in LATEX and some other
    issues.
\DeclareErrorFont{OT1}{cmr}{m}{n}{10}
    This declaration is a system wide fallback and it should normally not be changed,      New
    in particular it does not belong into font encoding definition files but rather into   description
    the LATEX format. It is normally set up in fonttext.cfg. Adjustments on a per          2019/07/10
    encoding base should be made through \DeclareFontSubstitution instead!
                                            27
\fontsubfuzz
6.2 Preloading
    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 a
    configuration file.
    Example:
\DeclarePreloadSizes{OT1}{cmr}{m}{sl}{10,10.95,12}
    Preloading is really an artifact of the days when loading fonts while processing   New
    a document contributed substantially to the processing time. These days it is      description
    usually best not to use this mechanism any more.                                   2019/07/10
    Accented characters in LATEX can be produced using commands such as \"a etc.       New
    The precise effect of such commands depends on the font encoding being used.       description
    When using a font encoding that contains the accented characters as individual     1996/06/01
    glyphs (such as the T1 encoding, in the case of \"a) words that contain such
    accented characters can be automatically hyphenated. For font encodings that
    do not contain the requested individual glyph (such as the OT1 encoding) such a
    command invokes typesetting instructions that produce the accented character
    as a combination of character glyphs and diacritical marks in the font. In most
    cases 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 just
    a 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 depend
    on the encoding of the current font and so this decision is taken at the last
    minute. 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
appear in table of contents and in running heads; and each of these may use a
font with a different encoding.
For this reason the notation \"a is not equivalent to:
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 and
invokes the typesetting instructions that put the umlaut accent on top of the
expansion of \chara. Thus, even if the font actually contains ‘ä’ as an individual
glyph, it will not be used.
The low-level accent commands in LATEX are defined in such a way that it is
possible to combine a diacritical mark from one font with a glyph from another
font; for example, \"\textparagraph will produce ¶.  ¨ The umlaut here is taken
from the OT1 encoded font cmr10 whilst the paragraph sign is from the OMS
encoded font cmsy10. (This example may be typographically silly but better
ones 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 work
within the argument to such an accent command. These are TEXnical in the
sense that they follow from the way that TEX’s \accent primitive works, al-
lowing 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 argu-
ments (\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.
                                        29
      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 release
      of LATEX.
      Encoding schemes which are local to a site or a system should start with
      L, 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 and         New
     hyphen characters. Where possible, these should conform to the Filenames       description
     for fonts font naming scheme of the scheme implemented by autoinst             2019/10/15
     with suffixes such as -LF, -OsF, etc. to indicate different figure styles.
   • Font series names should contain up to four lower case letters. If at all      New
     possible standard names as suggested in Section 2.1 should be used. Font       description
     specific names such as regular or black, etc. should be at least aliased       2019/10/15
     to a corresponding standard name.
   • Font shapes should contain up to four letters lower case. Use the names        New
     suggested in Section 2.1.                                                      description
                                                                                    2019/10/15
   • Names for symbol fonts are built from lower and upper case letters with
     no 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 with
existing fonts.
Where possible, text symbols should be named as \text followed by the Adobe         New
glyph name: for example \textonequarter or \textsterling. Similarly, math           description
symbols should be named as \math followed by the glyph name, for example            1994/12/01
\mathonequarter or \mathsterling. Commands which can be used in text or
math can then be defined using \ifmmode, for example:
   \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.
NFSS forces you to give all declarations in a specific order so that it can check   New
whether you have specified all necessary information. If you declare objects in     description
the wrong order, it will complain. Here are the dependencies that you have to       2019/10/15
obey:
                                       30
       • \DeclareFontFamily checks that the encoding scheme was previously de-
         clared with \DeclareFontEncoding.
    With additional weights and widths being available in many font families nowa-   New feature
    days, it is more likely that somebody will want to match, say, a medium weight   2020/02/02
    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 another
    it should be bold (not extended) or semi-bold, etc. The default values can
    be altered using the \DeclareFontSeriesDefault declaration in packages or
    document preambles:
    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 combination
         of ⟨meta family⟩ and ⟨meta series⟩ is requested.
                                           31
    For example,
\DeclareFontSeriesDefault[rm]{bf}{sb}
    This declaration takes a comma separated list of font declarations each specify-       New feature
    ing how increasing levels of emphasis should be handled. For example:                  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.
    This declaration selects the font family ⟨new-family⟩ as replacement for ⟨family⟩      New feature
    in the font encoding ⟨encoding⟩. For example,                                          2020/02/02
        \DeclareFontFamilySubstitution{LGR}
                {Montserrat-LF}{IBMPlexSans-TLF}
    tells LATEX to substitute the sans serif font Montserrat-LF in the Greek encod-
    ing LGR with IBMPlexSans-TLF once requested in a document.
                                            32
    This is most noticeable with \oldstylenums which are now taken from TS1 so
    that you no longer get 1234 but 1234 when typesetting in sans serif fonts and
    1234 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 with
    the text font).
    The following tables show the macros available. The next commands are ‘con-
    structed’ accents and are built via TEX macros:
                 \capitalcedilla␣A         A̧         \textcircled␣a     ○
                                                                         a
                 \capitalogonek␣A          A˛
    These accents are available via font encoding. The numbers in third row show
    the slot number:
    \capitalgrave                 `    0             \capitalbreve               8
    \capitalacute                 ´    1             \capitalmacron          ¯    9
    \capitalcircumflex                2             \capitaldotaccent            10
    \capitaltilde                     3             \t                          26
    \capitaldieresis              ¨    4             \capitaltie                 27
    \capitalhungarumlaut          ˝    5             \newtie                     28
    \capitalring                      6             \capitalnewtie              29
    \capitalcaron                 ˇ    7
    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 sym-
    bols 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 implementa-
    tion. In reality, many existing fonts don’t provide a full set of glyphs defined in
    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                  New feature
    macro:                                                                                 2021/06/01
                                                33
\textcapitalcompwordmark           23     \textflorin            ƒ   140
\textascendercompwordmark          31     \textcolonmonetary     ₡   141
\textquotestraightbase      ‚       13     \textwon               ₩   142
\textquotestraightdblbase   „       18     \textnaira             ₦   143
\texttwelveudash                   21     \textguarani              144
\textthreequartersemdash           22     \textpeso                 145
\textleftarrow              ←       24     \textlira              ₤   146
\textrightarrow             →       25     \textrecipe               147
\textblank                  ␢       32     \textinterrobang       ‽   148
\textdollar                 $       36     \textinterrobangdown      149
\textquotesingle            '       39     \textdong              ₫   150
\textasteriskcentered       ∗       42     \texttrademark         ™   151
\textdblhyphen              -       45     \textpertenthousand    ‱   152
\textfractionsolidus        ⁄       47     \textpilcrow           ¶   153
\textzerooldstyle           0       48     \textbaht              ฿   154
\textoneoldstyle            1       49     \textnumero            №   155
\texttwooldstyle            2       50     \textdiscount             156
\textthreeoldstyle          3       51     \textestimated         ℮   157
\textfouroldstyle           4       52     \textopenbullet        ◦   158
\textfiveoldstyle           5       53     \textservicemark       ℠   159
\textsixoldstyle            6       54     \textlquill            ⁅   160
\textsevenoldstyle          7       55     \textrquill            ⁆   161
\texteightoldstyle          8       56     \textcent              ¢   162
\textnineoldstyle           9       57     \textsterling          £   163
\textlangle                 〈       60     \textcurrency          ¤   164
\textminus                  −       61     \textyen               ¥   165
\textrangle                 〉       62     \textbrokenbar         ¦   166
\textmho                    ℧       77     \textsection           §   167
\textbigcircle              ○       79     \textasciidieresis     ¨   168
\textohm                    Ω       87     \textcopyright         ©   169
\textlbrackdbl              〚       91     \textordfeminine       ª   170
\textrbrackdbl              〛       93     \textcopyleft          «   171
\textuparrow                ↑       94     \textlnot              ¬   172
\textdownarrow              ↓       95     \textcircledP          ℗   173
\textasciigrave             `       96     \textregistered        ®   174
\textborn                   b       98     \textasciimacron       ¯   175
\textdivorced               c       99     \textdegree            °   176
\textdied                   d       100    \textpm                ±   177
\textleaf                   l       108    \texttwosuperior       ²   178
\textmarried                m       109    \textthreesuperior     ³   179
\textmusicalnote            ♪       110    \textasciiacute        ´   180
\texttildelow               ~       126    \textmu                µ   181
\textdblhyphenchar                 127    \textparagraph         ¶   182
\textasciibreve             ˘       128    \textperiodcentered    ·   183
\textasciicaron             ˇ       129    \textreferencemark     ※   184
\textacutedbl               ˝       130    \textonesuperior       ¹   185
\textgravedbl                ̏      131    \textordmasculine      º   186
\textdagger                 †       132    \textsurd              √   187
\textdaggerdbl              ‡       133    \textonequarter        ¼   188
\textbardbl                 ‖       134    \textonehalf           ½   189
\textperthousand            ‰       135    \textthreequarters     ¾   190
\textbullet                 •       136    \texteuro              €   191
\textcelsius                ℃       137    \texttimes             ×   214
\textdollaroldstyle         $       138    \textdiv               ÷   246
\textcentoldstyle           ¢       139
                                      34
    \textquotestraightbase       ‚    13      \textsection          §    167
    \textquotestraightdblbase    „    18      \textcopyright        ©    169
    \textcapitalcompwordmark         23      \textordfeminine      ª    170
    \textascendercompwordmark        31      \textlnot             ¬    172
    \textdollar                  $    36      \textregistered       ®    174
    \textquotesingle             '    39      \textdegree           °    176
    \textasteriskcentered        ∗    42      \textpm               ±    177
    \textdagger                  †    132     \textparagraph        ¶    182
    \textdaggerdbl               ‡    133     \textperiodcentered   ·    183
    \textperthousand             ‰    135     \textordmasculine     º    186
    \textbullet                  •    136     \textonequarter       ¼    188
    \texttrademark               ™    151     \textonehalf          ½    189
    \textcent                    ¢    162     \textthreequarters    ¾    190
    \textsterling                £    163     \texttimes            ×    214
    \textyen                     ¥    165     \textdiv              ÷    246
    \textbrokenbar               ¦    166
\textcircled ○ acc
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 which
become 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 ta-
ble 3 (always available) and the symbols that only become unavailable in sub-
encodings > x. The tables 4 to 12 on pages 35–37 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 the
font 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 36–37.
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}
   \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.
                                       35
\capitalcedilla            ¸     acc        \textdivorced                  c          99
\capitalogonek             ˛     acc        \textdied                      d          100
\capitalgrave              `     0          \textleaf                      l          108
\capitalacute              ´     1          \textmarried                   m          109
\capitalcircumflex              2          \textmusicalnote               ♪          110
\capitaltilde                   3          \texttildelow                  ~          126
\capitaldieresis           ¨     4          \textdblhyphenchar                       127
\capitalhungarumlaut       ˝     5          \textasciibreve                ˘          128
\capitalring                    6          \textasciicaron                ˇ          129
\capitalcaron              ˇ     7          \textacutedbl                  ˝          130
\capitalbreve                   8          \textgravedbl                   ̏         131
\capitalmacron             ¯     9          \textdollaroldstyle            $          138
\capitaldotaccent                10         \textcentoldstyle              ¢          139
\capitaltie                     27         \textnaira                     ₦          143
\newtie                         28         \textguarani                             144
\capitalnewtie{}                29         \textpeso                                145
\textdblhyphen             -     45         \textrecipe                              147
\textzerooldstyle          0     48         \textpertenthousand            ‱          152
\textoneoldstyle           1     49         \textpilcrow                   ¶          153
\texttwooldstyle           2     50         \textbaht                      ฿          154
\textthreeoldstyle         3     51         \textdiscount                            156
\textfouroldstyle          4     52         \textopenbullet                ◦          158
\textfiveoldstyle          5     53         \textservicemark               ℠          159
\textsixoldstyle           6     54         \textlquill                    ⁅          160
\textsevenoldstyle         7     55         \textrquill                    ⁆          161
\texteightoldstyle         8     56         \textasciidieresis             ¨          168
\textnineoldstyle          9     57         \textcopyleft                  «          171
\textmho                   ℧     77         \textcircledP                  ℗          173
\textbigcircle             ○     79         \textasciimacron               ¯          175
\textlbrackdbl             〚     91         \textasciiacute                ´          180
\textrbrackdbl             〛     93         \textreferencemark             ※          184
\textasciigrave            `     96         \textsurd                      √          187
\textborn                  b     98
textlangle 〈 60 \textrangle 〉 62
     \textfractionsolidus        ⁄          47   \textohm         Ω        87
     \textminus                  −          61   \textmu          µ        181
                                       36
          \textblank           ␢      32      \textinterrobangdown             149
          \textinterrobang     ‽      148
Maintainers of font bundles that include TS1 encoded font files should add an
appropriate declaration into the corresponding ts1family.fd file, because other-
wise the default subencoding is assumed, which is probably disabling too many
glyphs that are actually available in the font.3
warningshow Show all font warnings on the terminal. This setting corre-
    sponds 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.
Warning: The actions of this package can change the layout of a document and
even, in rare cases, produce clearly wrong output, so it should not be used in
the final formatting of ‘real documents’.
   3 The L
         AT X format contains declarations for many font families already, but this is really
           E
the wrong place for the declarations. Thus for new fonts they should be placed into the
corresponding .fd file.
                                             37
References
[1] Frank Mittelbach and Michel Goossens. The LATEX Companion second edi-
    tion. With Johannes Braams, David Carlisle, and Chris Rowley. Addison-
    Wesley, Reading, Massachusetts, 2004.
38