Fontselection in Latex PDF
Fontselection in Latex PDF
27 November 2005
Contents
1 Introduction 2
1.1 LATEX 2ε fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Further information . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Text fonts 4
2.1 Text font attributes . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Selection commands . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Parameters for author commands . . . . . . . . . . . . . . . . . . 8
2.5 Special font declaration commands . . . . . . . . . . . . . . . . . 9
3 Math fonts 10
3.1 Math font attributes . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Selection commands . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Declaring math versions . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Declaring math alphabets . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Declaring symbol fonts . . . . . . . . . . . . . . . . . . . . . . . . 13
3.6 Declaring math symbols . . . . . . . . . . . . . . . . . . . . . . . 14
3.7 Declaring math sizes . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Font installation 16
4.1 Font definition files . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2 Font definition file commands . . . . . . . . . . . . . . . . . . . . 16
4.3 Font file loading information . . . . . . . . . . . . . . . . . . . . . 18
4.4 Size functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 Encodings 20
5.1 The fontenc package . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Encoding definition file commands . . . . . . . . . . . . . . . . . 20
5.3 Default definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.4 Encoding defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.5 Case changing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1
6 Miscellanea 25
6.1 Font substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2 Preloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3 Accented characters . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.4 Naming conventions . . . . . . . . . . . . . . . . . . . . . . . . . 27
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.
1.2 Overview
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.
2
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
http://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 or expanded a font is. For example, ‘medium weight’, ‘nar-
row’ 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:
The ‘local’ encodings are intended for font encodings which are only locally
available, for example a font containing an organisation’s logo in various sizes.
There are far too many font families to list them all, but some common ones
are:
4
cmr Computer Modern Roman
cmss Computer Modern Sans
cmtt Computer Modern Typewriter
cmm Computer Modern Math Italic
cmsy Computer Modern Math Symbols
cmex Computer Modern Math Extensions
ptm Adobe Times
phv Adobe Helvetica
pcr Adobe Courier
m Medium
b Bold
bx Bold extended
sb Semi-bold
c Condensed
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:
5
Author command Attribute Value in article class
\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
\textup{..} or \upshape shape n
\textit{..} or \itshape shape it
\textsl{..} or \slshape shape sl
\textsc{..} or \scshape shape 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
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.
\fontencoding {hencodingi}
\fontfamily {hfamilyi}
\fontseries {hseriesi}
\fontshape {hshapei}
\fontsize {hsizei} {hbaselineskipi}
\linespread {hfactor i}
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 hfactor i (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.
6
\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 \fonthparameter i
command (or \linespread) and a \selectfont.
2.3 Internals
The current values of the font attributes are held in internal macros.
\f@encoding
\f@family
\f@series
\f@shape
\f@size
\f@baselineskip
\tf@size
\sf@size
\ssf@size
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.
7
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 of
a number of parameters set by the document class and packages. For exam-
ple, \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:
\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 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.
\rmdefault
\sfdefault
\ttdefault
\bfdefault
\mddefault
\itdefault
\sldefault
\scdefault
\updefault
8
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.
Declares command hcmd i to be a font switch which selects the font that is
specified by the attributes hencodingi, hfamilyi, hseriesi, hshapei, and hsizei.
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 hcmd i to be a font command with one argument. The current
font attributes are locally modified by hfont-switchesi and then the argument
of hcmd i 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 hcmd i to be a font switch (i.e. used with the syntax
{hcmd i...}) having the definition htext-switchi when used in text and the def-
inition hmath-switchi when used in a formula. Math alphabet commands, like
9
\mathit, when used within hmath-switchi 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 hcmd i.
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.
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.
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:
10
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.
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.
\mathnormal{hmathi}
\mathcal{hmathi}
\mathrm{hmathi}
\mathbf{hmathi}
\mathsf{hmathi}
\mathit{hmathi}
\mathtt{hmathi}
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.
11
\mathversion{hversioni}
This command selects a math version; it can only be used outside math mode.
For example, \boldmath is defined to be \mathversion{bold}.
\DeclareMathVersion {hversioni}
\DeclareMathVersion{normal}
If this is the first declaration for hmath-alphi then a new math alphabet with New
this as its command name is created. description
1997/12/01
The arguments hencodingi hfamilyi hseriesi hshapei 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 hshapei is empty then this hmath-alphi 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 hmath-alphi is either already a math alphabet com-
mand or is undefined; and that hencodingi 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}{}{}{}
12
\SetMathAlphabet {hmath-alphi} {hversioni}
{hencodingi} {hfamilyi} {hseriesi} {hshapei}
Changes, or sets, the font for the math alphabet hmath-alphi in math version
hversioni to hencodingihfamilyihseriesihshapei.
Checks that hmath-alphi has been declared as a math alphabet, hversioni is a
known math version and hencodingi is a known encoding scheme.
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 hsym-fonti 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 hencodingi hfamilyi hseriesi hshapei 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 hencodingi 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 hsym-fonti for math version hversioni to hencodingi
hfamilyi hseriesi hshapei.
Checks that hsym-fonti has been declared as a symbol font, hversioni is a known
math version and hencodingi 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}
13
\DeclareSymbolFontAlphabet {hmath-alphi} {hsym-fonti}
Allows the previously declared symbol font hsym-fonti to be the math alphabet New
with command hmath-alphi in all math versions. description
1997/12/01
Checks that the command hmath-alphi is either already a math alphabet com-
mand or is undefined; and that hsym-fonti is a symbol font.
Example:
\DeclareSymbolFontAlphabet{\mathrm}{operators}
\DeclareSymbolFontAlphabet{\mathcal}{symbols}
The hsymbol i can be either a single character such as ‘>’, or a macro name, such
as \sum.
Defines the hsymbol i to be a math symbol of type htypei in slot hsloti of symbol
font hsym-fonti. The htypei can be given as a number or as a command:
14
\DeclareMathSymbol{\alpha}{0}{letters}{"0B}
\DeclareMathSymbol{\lessdot}{\mathbin}{AMSb}{"0C}
\DeclareMathSymbol{\alphld}{\mathalpha}{AMSb}{"0C}
Defines hcmd i to be a math delimiter where the small variant is in slot hslot-1 i
of symbol font hsym-font-1 i and the large variant is in slot hslot-2 i of symbol
font hsym-font-2 i. Both symbol fonts must have been declared previously.
Checks that hsym-font-i i are both declared symbol fonts.
If TEX is not looking for a delimiter, hcmd i is treated just as if it had been
defined with \DeclareMathSymbol using htypei, hsym-font-1 i and hslot-1 i. In
other words, if a command is defined as a delimiter then this automatically
defines it as a math symbol.
In case hcmd i is a single character such as ‘[’, the same syntax is used. Previ- New
ously the {htypei} argument was not present (and thus the corresponding math description
symbol declaration had to be provided seperately). 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}
15
3.7 Declaring math sizes
Declares that hmt-sizei is the (main) math text size, hs-sizei is the ‘script’
size and hss-sizei the ‘scriptscript’ size to be used in math, when ht-sizei is
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, ht-sizei and hmt-sizei will be identical; however, if, for example,
PostScript text fonts are mixed with bit-map math fonts then you may not
have available a hmt-sizei for every ht-sizei.
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 hfamilyi in encoding description
hENC i must be called hencihfamilyi.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.
16
\ProvidesFile{hfile-namei}[hrelease-infoi]
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
}{}
17
The file can contain any number of \DeclareFontShape commands, which
should be for the appropriate hencodingi and hfamilyi.
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 hloading-infoi part of a \DeclareFontShape declaration. This
part consists of one or more hfontshape-decl is, each of which has the following
form:
The hnumber-or-rangei 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:
If more than one hsize-infoi entry follows without any intervening hfont-infoi,
they all share the next hfont-infoi.
The hsize-functioni, if present, handles the use of hfont-infoi. If not present,
the ‘empty’ hsize-functioni is assumed.
All the hsize-infois are inspected in the order in which they appear in the font
shape declaration. If a hsize-infoi matches the requested size, its hsize-functioni
is executed. If \external@font is non-empty afterwards this process stops,
otherwise the next hsize-infoi 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.
18
4.4 Size functions
LATEX provides the following size functions, whose ‘inputs’ are hfontargi and
hoptargi (when present).
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
hfontargi in the form hfamilyi/hseriesi/hshapei.
ssub Silent variant of ‘sub’, only loggings.
subf Like the empty function but issues a warning that it has to substitute the
external font hfontargi because the desired font shape was not available
in the requested size.
ssubf Silent variant of ‘subf’, only loggings.
fixed Load font hfontargi as is, disregarding the user-requested size. If present,
hoptargi gives the “at . . . pt” size to be used.
sfixed Silent variant of ‘fixed’, only loggings.
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.
19
To signal success hcodei must define the command \external@font to contain
the 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.
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 hENC i given as an option, this package loads the en- New
coding definition (hencienc.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
Note: An encoding definition file should contain only commands from this sub-
section.
20
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{hfile-namei}[hrelease-infoi]
\ProvidesFile{ot2enc.def}
[1994/06/01 Washington University Cyrillic encoding]
\DeclareFontEncoding{OT1}{}{}
\DeclareTextCommand{\k}{T1}[1]
{\oalign{\null#1\crcr\hidewidth\char12}}
21
It does not produce an error if the command has already been defined but logs
the redefinition in the transcript file.
This command defines a text symbol with slot hsloti 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.
This command declares a text accent, with the accent taken from slot hsloti 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 hcmd i
to hletter i is defined to be simply slot hsloti in the encoding. The hletter i 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 hcmd i will normally have been previously declared for this encoding, either
by using \DeclareTextAccent, or as a one-argument \DeclareTextCommand.
\DeclareTextCompositeCommand{\’}{OT1}{i}{\’\i}
22
It has the same restrictions as \DeclareTextComposite.
\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.
\DeclareTextCommandDefault{\copyright}{\textcircled{c}}
23
\DeclareTextAccentDefault{\"}{OT1}
\DeclareTextSymbolDefault{\ae}{OT1}
\ProvideTextCommandDefault{\textonequarter}{$\m@th\frac14$}
Declares htext-settingsi and hmath-settingsi 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 hencodingi 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 hshapei then hseriesi
and finally hfamilyi.
If no defaults are set up for an encoding, the values given by \DeclareErrorFont
are used.
The font specification for hencodingihfamilyihseriesihshapei must have been de-
fined by \DeclareFontShape before the \begin{document} is reached.
Example:
24
\DeclareFontSubstitution{T1}{cmr}{m}{n}
\MakeUppercase {htexti}
\MakeLowercase {htexti}
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}
\fontsubfuzz
25
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:
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}
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
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
26
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.
27
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 up to five lower case letters. Where
possible, these should conform to the Filenames for fonts font naming
scheme.
• Font series names should contain up to four lower case letters.
• Font shapes should contain up to two letters lower case.
• 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.
28
loading Show the names of external font files when they are loaded. This
option shows only ‘newly loaded’ fonts, not those already preloaded in the
format 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 and
even, 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 edi-
tion. With Johannes Braams, David Carlisle, and Chris Rowley. Addison-
Wesley, 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.
29