LaTeX
字体家族
字体家族有成百上千种,常见的例如 Times、Courier 和 Helvetica。这些字体家族通常可以分为三大类:衬线体(serif)、无衬线体(sans serif)和等宽字体(monospaced)。LaTeX 命令通常用简写形式分别表示它们:rm
、sf
和 tt
。
默认情况下,LaTeX 使用 Computer Modern,这是 Donald Knuth 为 TeX 设计的字体家族。它包含衬线、无衬线和等宽字体,每种字体都有多种粗细和光学大小。
LaTeX 文档的正文默认使用罗马字体(衬线体),但你可以通过设置字体家族的默认值来更改:
\renewcommand{\familydefault}{<family>}
其中 <family>
可以是以下之一:
-
\rmdefault
-
\sfdefault
-
\ttdefault
强调文本
TeX 识别两种类型的标记命令:
-
语义:
\emph{text}
—— 默认会使文本变为斜体。可以通过\renewcommand\emph{\textbf}
来覆盖此行为,根据需要/偏好更换为加粗。 -
视觉:实际应用所需格式的命令:
-
字体家族:
\textrm{}
、\textsf{}
、\texttt{}
-
字重:
\textbf{}
(加粗)、\textmd{}
(中等粗细) -
字形:
\textup{}
(直立)、\textit{}
(斜体)、\textsl{}
(倾斜)
-
这些是常用的视觉标记元素。有关更多字体样式的参考,请参见“字体样式”部分。
要为某个单词或短语添加强调,可以使用 \emph{text}
命令,通常会使文本变为斜体。
I want to \emph{emphasize} a word.
命令是动态的:如果你强调一个已经在强调句子中的词,它会恢复为正常字体。
\emph{In this emphasized sentence, there is an emphasized \emph{word} which looks upright.}
你可以通过加粗文本来更强烈地强调某个词或短语,尤其是当读者在阅读文本时可能需要找到的关键词。由于加粗文本通常是段落或页面上最先被阅读的部分,因此应适度使用。加粗文本也可以替代斜体,在使用无衬线字体时提供更大的对比度。加粗文本可以通过 \textbf{text}
命令生成。
\textbf{Bold text} may be used to heavily emphasize very important words or phrases.
字体样式
字体通常有多种样式和粗细,例如斜体和加粗。以下表格列出了访问常见字体形状所需的命令。
注意:在命令形式中不允许段落换行。
LaTeX 命令 | 等效的切换 | 输出样式 | 备注 |
---|---|---|---|
\textnormal{...} |
{\normalfont ...} |
文档字体家族 | 这是默认或常规字体。 |
\emph{...} |
{\em ...} |
强调 | 通常是斜体。若在斜体文本中使用 emph{} ,会移除斜体效果。 |
\textrm{...} |
{\rmfamily ...} |
罗马字体家族 | |
\textsf{...} |
{\sffamily ...} |
无衬线字体家族 | |
\texttt{...} |
{\ttfamily ...} |
等宽字体家族 | 这是固定宽度字体,通常用于打字机文本。某些字体中,零会有一个短横线,以区别于字母“O”。 |
\textup{...} |
{\upshape ...} |
直立字体 | 与常规字体相同。 |
\textit{...} |
{\itshape ...} |
斜体字体 | |
\textsl{...} |
{\slshape ...} |
倾斜字体 | 相较于斜体略有不同的倾斜效果。 |
\textsc{...} |
{\scshape ...} |
小型大写字母 | |
\uppercase{...} |
大写字母(全大写) | 同样适用于 \lowercase ,但有一些注意事项,请参见相关文档。 |
|
\textbf{...} |
{\bfseries ...} |
加粗字体 | |
\textmd{...} |
{\mdseries ...} |
中等粗细字体 | 常规字体粗细。 |
\textlf{...} |
{\lfseries ...} |
轻型字体 | 比正常字体轻的字体粗细,并非所有字体都支持。 |
通常,推荐使用命令而不是其等效的切换,因为前者会自动修正紧接在所选样式后的空格问题。
你可能已经注意到 LaTeX 中缺少下划线,这主要是因为下划线是打字机时代的副产品,且不建议在有斜体和加粗字体可用时使用。然而,在某些情况下,如编辑过程中的变化突出,下划线可能仍然有用。虽然可以通过 \underline{...}
命令实现下划线,但这种方式下的文本不会正确换行。此时,使用 soul
包的 \ul{...}
或 ulem
包的 \uline{...}
命令会更好。默认情况下,后者会覆盖 \emph
,将其改为下划线而非斜体。如果这不是你的意图,可以使用 normalem
选项,即:
\usepackage[normalem]{ulem}
这两个包也提供了删除线文本,分别为 \st{...}
或 \sout{...}
。
调整文本大小
内置字体大小
要相对于默认的正文大小调整文本大小,可以使用以下命令:
命令 | 输出 |
---|---|
\tiny |
sample text |
\scriptsize |
sample text |
\footnotesize |
sample text |
\small |
sample text |
\normalsize |
sample text |
\large |
sample text |
\Large |
sample text |
\LARGE |
sample text |
\huge |
sample text |
\Huge |
sample text |
这些命令会在给定的范围内改变大小。例如,{\Large some words}
仅会改变部分文本的大小,并不会影响文档中其余部分的字体。它适用于文本的大部分部分。
{\Large\tableofcontents}
这些命令不能在数学模式中使用。不过,可以通过使用包含大小命令的 \mbox
命令,使公式的一部分设置为不同的大小。新的大小会立即生效;如果需要将整个段落或单位设置为某个特定大小,大小命令应包含空行或 \end{...}
来限定单位的范围。
默认情况下,\normalsize
是 10 磅,但可以在 \documentclass
声明中更改,例如 \documentclass[12pt]{article}
。请注意,并不是所有文档类都有唯一的尺寸来适配上述所有大小命令。
绝对点大小
字体大小 | 标准类(除了幻灯片) | beamer | AMS 类,memoir | 幻灯片 |
---|---|---|---|---|
\tiny |
5 | 6 | 6 | 6 |
\scriptsize |
7 | 8 | 8 | 7 |
\footnotesize |
8 | 9 | 10 | 8 |
\small |
9 | 10 | 10.95 | 9 |
\normalsize |
10 | 10.95 | 12 | 10 |
\large |
12 | 12 | 14.4 | 10.95 |
\Large |
14.4 | 14.4 | 17.28 | 12 |
\LARGE |
17.28 | 17.28 | 20.74 | 14.4 |
\huge |
20.74 | 20.74 | 24.88 | 17.28 |
\Huge |
24.88 | 24.88 | 24.88 | 20.74 |
在 TeX 中,1 磅大约等于 0.35136 毫米。大多数现代计算机程序使用的标准点大小(即桌面排版点或 PostScript 点)使 1 磅约等于 0.3527 毫米,而标准的欧洲点大小(即 Didot 点)使 1 磅约等于 0.37597151 毫米(参见:point (typography))。
任意大小
\tiny...\Huge
命令通常已足够满足需求,但有时你可能需要一个任意的字体大小。可以使用命令 \fontsize{<size>}{<line space>}\selectfont
来实现。例如:
\fontsize{5cm}{5.5cm}\selectfont
这会将当前字体大小设置为 5 厘米,行间距设置为 5.5 厘米。
如果你使用 latex
或 pdflatex
引擎,可能会收到类似以下的警告:
LaTeX Font Warning: Font shape `OT1/cmr/m/n' in size <142.26378> not available
(Font) size <24.88> substituted on input line 103.
这是因为这些较旧的引擎只支持固定的字体大小(在 5 到 17 磅之间)。当 Donald Knuth 设计 Computer Modern 字体时,他为这些大小分别创建了单独的字体文件,每个文件的笔画宽度和间距都针对特定的大小进行了优化。为了避免扭曲,默认情况下禁用了这些字体的缩放。
使用 lualatex
或 xelatex
时,这个问题会得到解决,因为它们使用 Latin Modern——Computer Modern 的矢量化版本——作为默认字体家族。这样,它仍然提供了每个原始光学大小的单独文件,但会自动缩放最接近的一个来满足任意大小要求。
使用替代字体
当 TeX 在 1970 年代末设计时,矢量字体在任何常见格式中都不存在——直到 1982 年 PostScript 才发布。因此,TeX 设计时使用了自己的字体系统 METAFONT。随着时间的推移,TeX(和 LaTeX)被扩展以支持 PostScript 字体,现代的 LaTeX 引擎还支持现代系统上常见的 TrueType(TTF)和 OpenType(OTF)字体。
使用 TTF 和 OTF 字体
如果你正在使用 lualatex
或 xelatex
,可以使用 fontspec
包来使用 TTF 和 OTF 字体:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Georgia}
\setsansfont[Ligatures=TeX]{Arial}
\begin{document}
Lorem ipsum...
\end{document}
[Ligatures=TeX]
选项允许你使用标准的 TeX 字形连接符,而不是一些不太可能在键盘上找到的 Unicode 字符。例如,---
可以用来创建 em 连字符(—),引号可以像这样输入 ``like this'',而不是 “like this”,依此类推。
fontspec
包非常可配置。详情请参考手册[3],下面将介绍一些基础内容。
选择字体文件
给定字体家族的不同粗细和样式通常会存储为单独的字体文件。例如,一个典型的字体可能提供四个文件来表示其常规粗细、斜体、加粗和加粗斜体。fontspec
通常可以推断出这些单独文件的名称。然而,许多字体有多个粗细版本——例如,Futura 的一些版本有 light、book、medium、demi、bold 和 extra bold 等多个粗细。有时,小型大写字母会被单独存储为文件。
我们可能需要手动选择某些粗细,以实现特定的外观或更好地匹配文档中其他字体的粗细。例如,使用 Futura 字体时,假设我们要使用 "book" 粗细作为默认粗细,"demi" 粗细作为加粗,那么这些字体文件可能如下所示:
-
Futura-Boo 表示正体书籍粗细
-
Futura-BooObl 表示倾斜书籍粗细
-
FuturaSC-Boo 表示小型大写字母,书籍粗细
-
Futura-Dem 表示正体半粗(加粗)
-
Futura-DemObl 表示倾斜半粗字
我们的字体设置可能如下所示:
\usepackage{fontspec}
\setmainfont[
Ligatures=TeX,
UprightFont = *-Boo,
ItalicFont = *-BooObl,
SmallCapsFont = *SC-Boo,
BoldFont = *-Dem,
BoldItalicFont = *-DemObl
]{Futura}
注意,不必输入完整的 Futura-Boo
,Futura-BooObl
等名称,我们可以使用 *
来插入基本名称。
控制字体特性
OpenType(OTF)格式允许字体设计师嵌入可以开启或关闭的字体特性,例如:
-
字形的替代版本
-
线性和“旧式”数字,分别具有表格和比例间距[4]
-
最多三组字形连接符:标准、上下文和历史
-
上标和下标字形
-
小型大写字母(与标准的大写和小写字符在同一文件中)
这些特性可以通过不同的 fontspec
选项开启或关闭。如果我们想设置正文文本为 Linux Libertine 字体并使用旧式比例数字,可以如下设置字体:
\setmainfont[
Ligatures=TeX,
Numbers={OldStyle, Proportional}
]{Linux Libertine}
可以使用 \addfontfeatures{...}
来开启或关闭特性。例如,如果你想设置表格为线性、表格数字,可以这样设置:
{\addfontfeatures{Numbers={Lining, Tabular}}
\begin{tabular}{l r}
Widgets: & 25 \\
Gadgets: & 6 \\
Whatsits & 24 \\
\end{tabular}
}
更改 latex
和 pdflatex
中的字体
如果你没有使用 Unicode 支持的引擎,字体选择会更复杂(见下面关于编码的讨论)。对于 latex
和 pdflatex
的字体配置,以下是一些有用的资源:
-
LaTeX 字体目录
-
LaTeX 字体命令
-
如何在 LaTeX 中更改字体
-
理解 TeX 字体的世界并掌握字体安装的基础
-
使用字体安装工具 "Fontinst" 进行字体安装:“对于一次性项目,你可以通过字体安装(即 Fontinst)来简化安装过程,从而得到更易管理的文件和更清洁的 TeX 安装。”
字体编码
数字化人类语言是一个复杂的话题,自 TeX 诞生以来已经有了显著的发展。
Unicode
如今,计算机系统通常使用 Unicode 来表示文本。简而言之:
-
一个 Unicode 文本文件由一系列代码点组成,每个代码点可以表示一个字符、一个重音符号或其他结合符号,或者一些非打印字符,如指示打印随后的文本时从右到左显示。
-
这些代码点中的一个或多个组合在一起表示一个字形集或字形(我们非正式地称之为“字符”)。
-
现代字体格式如 TrueType 和 OpenType 包含编码表,将代码点映射到字体文件中包含的字形。
-
LuaLaTeX 和 XeLaTeX 使用这些工具将 Unicode 编码的输入文件(LuaLaTeX 接受 UTF-8 文件,而 XeLaTeX 更为灵活,接受 UTF-16 和 UTF-32 文件)渲染为 PDF 文档。
TeX 编码
原始的 TeX 和 LaTeX 是在 Unicode 出现之前设计的,使用了一个非常不同的编码方案。当使用 latex
或 pdflatex
时,你必须选择一个输入编码,TeX 引擎使用该编码来解释你的文件,并选择一个输出编码,TeX 引擎用它来将输入映射到字形。默认的字体编码是 OT1,这是原始 Computer Modern 字体的编码。它仅包含 128 个字符,很多来自 ASCII,但也省略了一些字符,并包含了许多不在 ASCII 中的字符。当需要重音字符时,TeX 会通过将普通字符与重音符号结合来创建它们。虽然最终输出看起来正确,但与基于 Unicode 的方法相比,这种方法有一些缺陷:
-
它会导致包含重音字符的单词中的自动断词功能失效。
-
在 PDF 中搜索带有重音的单词将会失败。
-
通过 PDF 查看器提取(例如复制粘贴)"Ä" 这种变音符号,实际上提取的是两个字符
'"A'
。 -
一些拉丁字母无法使用这种方法创建,更不用说非拉丁字母的字母(例如希腊字母或西里尔字母)了。
为了克服这些不足,创建了几种其他的 8 位输出编码。T1 编码中的扩展 Cork(EC)字体包含了大多数使用拉丁字母的欧洲语言的字母和标点符号。LH 字体集包含了排版西里尔字母文档所需的字母。由于西里尔字形的数量众多,它们被安排为四种字体编码——T2A、T2B、T2C 和 X2。CB 套件包含了用于希腊文本排版的 LGR 编码的字体。通过使用这些字体,你可以改善/启用非英语文档中的断词功能。使用新的 CM 类似字体的另一个优点是,它们提供了 CM 字体家族的所有粗细、形状和光学大小的字体。
所有这些在 OT1 中是不可能实现的;这就是为什么你可能需要更改文档的字体编码。
注意,不同的字体支持不同的输出编码。例如,默认的 Computer Modern 字体不支持 T1。如果你没有这些字体,你可能会经常看到(取决于你的 TeX 安装)TeX 选择一种 Type3 字体,如 Type3 EC,这是一种位图字体。位图字体在放大或打印时看起来很难看。
如果在使用 T1 后,你发现字体质量非常低,那是因为系统中没有适当的字体。你需要安装 cm-super
或 lmodern
。这是一个非常常见的错误!
字体编码包
fontenc
包告诉 LaTeX 使用哪个字体编码。字体编码可以通过以下方式设置:
\usepackage['encoding']{fontenc}
其中 encoding
是字体编码。可以同时加载多个编码。
如果你使用 T1 编码(假设它已经安装),那么 CM Super
字体会自动加载。对于 lmodern
,你需要在设置 T1 编码后加载该包:
\usepackage[T1]{fontenc}
\usepackage{lmodern}
ae
包(几乎是欧洲的)已过时。它为带有特殊字符的单词的断词提供了一些解决方法。如今,像 lmodern
这样的字体已不再需要这些方法。使用 ae
包会导致使用 pdflatex
生成的 PDF 文件中的文本编码问题(例如文本提取和搜索),并且还会出现排版问题。
PDF 字体和属性
PDF 文档可以嵌入字体文件。这使得它们具有便携性,因此得名可移植文档格式(Portable Document Format)。
许多 PDF 查看器具有属性功能,用于列出嵌入的字体和文档元数据。
许多 Unix 系统使用 poppler 工具集,其中包括 pdfinfo
用于列出 PDF 元数据,pdffonts
用于列出嵌入的字体。
参考文献
-
Matthew Butterick. "Bold or italic". Practical Typography.
-
Matthew Butterick. "Underlining". Practical Typography.
-
Matthew Butterick. "Alternate figures". Practical Typography.