罗马、粗体、斜体 — LaTeX 中切换字体的命令乍一看就像一个抓包,但实际上它们整齐地位于三个独立的轴上。一旦模型点击,诸如“粗体无衬线”和立即切换整个段落之类的组合就会变得显而易见,而不是繁琐。本页介绍了该模型,以及命令形式\textbf{...} 和声明形式{\bfseries ...} 之间的选择。
一个字体是三个独立的轴
在LaTeX2e的NFSS (New Font Selection Scheme)中,当前文本字体是三个独立属性的组合。 系列是底层字母形式,系列是重量,而形状是字母的倾斜或形式。关键是每个都可以单独切换,并且它们组成:将系列设置为无衬线,将系列设置为粗体,然后你就得到粗体无衬线。
- 家庭 — 罗马字体(衬线)
\textrm/\rmfamily、无衬线\textsf/\sffamily、打字机(等宽)\texttt/\ttfamily。 - 系列 — 中等(默认粗细)
\textmd/\mdseries,粗体\textbf/\bfseries。 - 形状 — 直立(默认)
\textup/\upshape、斜体\textit/\itshape、倾斜\textsl/\slshape、小型大写字母\textsc/\scshape。
切换一个轴而不影响其他两个轴 - 这就是 NFSS 核心的正交性。因此,如果您使用\textsf打开无衬线字体,然后在其中使用\textbf,您会得到粗体*并且仍然是无衬线*。请注意,系列实际上将“重量”和“宽度”组合到一个轴上,因此它还涵盖了压缩和扩展的面。自 2020 年起,LaTeX2e 智能地合并当前和请求的系列:如果字体当前为压缩字体 (c) 并且您要求粗体 (b),则当该字体存在时,它将尝试粗体压缩 (bc)。
命令形式与声明形式
每个开关都有两种形式。 命令形式,以 \text… 开头,接受一个参数并仅影响大括号内的内容。 声明形式,以 …family / …series / …shape 结尾,不带参数并保持有效 从该点开始直到封闭组 ({ }) 或环境结束。
% 命令形:短い範囲に / Command form: for short spans
ここは \textbf{太字} で、ここは \textit{イタリック} です。
% 宣言形:グループで範囲を区切る / Declaration form: a group limits the scope
ここは普通。{\bfseries ここから先はずっと太字。} ここで元に戻る。
% 環境全体に効かせる / Apply to a whole environment
\begin{quote}
\itshape この引用は段落全体がイタリックになります。
\end{quote}一个好的经验法则:对于最多几个单词的短跨度,使用命令形式 \textbf{...}; 对于整个段落或环境,请使用声明形式 \bfseries。当您希望声明仅在本地应用时,请记住将其包装在一个组中 - {\bfseries ...} - 否则它将继续适用于文档的其余部分。
命令形式还有一个安静但真正的优势:它为您插入斜体修正(请参阅下一节)。声明形式无需添加任何内容,可以保持嵌套和批量应用程序的可预测性,这就是为什么它在类和包代码中是首选的原因。
| 密钥 | 轴/效果 | 命令形式(短跨度) | 声明表(范围通过组) |
|---|---|---|---|
roman | 系列:罗马(衬线体) | \textrm{...} | {\rmfamily ...} |
sans | 系列:无衬线字体 | \textsf{...} | {\sffamily ...} |
tt | 系列:打字机(等宽) | \texttt{...} | {\ttfamily ...} |
bold | 系列:粗体 | \textbf{...} | {\bfseries ...} |
medium | 系列:中(默认) | \textmd{...} | {\mdseries ...} |
italic | 形状:斜体 | \textit{...} | {\itshape ...} |
slanted | 形状:倾斜 | \textsl{...} | {\slshape ...} |
smallcaps | 形状:小型大写字母 | \textsc{...} | {\scshape ...} |
reset | 将所有轴重置为默认值 | \textnormal{...} | {\normalfont ...} |
重置、斜体修正
要立即将所有三个轴重置为文档默认值,请使用\textnormal{...}(命令形式)或\normalfont(声明形式)——例如,当您想要在无衬线标题内使用默认字体的单个单词时,这很方便。要仅重置一个轴,请使用该轴的默认命令:\mdseries(恢复为中等粗细)、\upshape(恢复为直立)或 \rmfamily(恢复为罗马字体)。
斜体校正\/ 添加了一小段空间来弥补倾斜字母的悬垂,因此最后一个斜体字符不会撞到后面的直立文本中。这就是两种形式的分歧之处。 诸如 \textit{...} 之类的命令形式会在需要时自动插入更正(如果下一个字符位于 \nocorrlist 中,它们会跳过它 — 默认情况下是句点或逗号)。 声明形式 \itshape 不执行任何操作,因此您必须自己在倾斜跨度的末尾添加 \/。
% 命令形:補正は自動 / Command form: correction is automatic
He was \textit{very} clever.
% 宣言形:末尾に \/ を手で入れる / Declaration form: add \/ by hand
He was {\itshape very\/} clever.
% 自動挿入を止めたいとき / To suppress the automatic correction
\textit{\nocorr text}为了强调,请使用\emph(而不是\textit)
当你的意图是“强调这一点”时,惯用语不是固定外观的\textit,而是带有含义的\emph{...}。诀窍在于 \emph 是上下文感知:在直立的正文文本中它会显示斜体,但在已经是斜体的文本中使用它会切换*回直立*以脱颖而出。嵌套时,它会交替出现 — \emph{start \emph{middle} end} 给出斜体,然后直立,然后斜体。
这体现了 LaTeX 结构与外观的分离:在正文中只写*含义*“强调”,如果您稍后希望将强调呈现为粗体或彩色,您可以在一个地方更改 \emph 的定义(例如通过\DeclareTextFontCommand),它会传播到各处。专用页面更深入地涵盖了重点。
要避免的旧命令
您可能会在旧的网络帖子中看到两个字母的命令 \bf、\it、\rm、\sf、\tt、\sc、\sl,但这些是LaTeX 2.09(1994 年之前)的遗留物。它们仍然有效,但不使用它们。原因是它们不正交:每个都丢弃除大小之外的*每个*当前字体属性并覆盖它。
所以他们拒绝合并。 {\bf\it text} 忽略 \bf 并且仅显示斜体; {\it\bf text} 忽略\it 并以直立粗体显示;将旧的与新的混合在一起,\textbf{\tt text}会默默地删除\textbf。 LaTeX2e 在 1994 年用每轴可组合命令 — \bfseries、\itshape、\rmfamily 及其 \textbf{...} 风格的伙伴取代了它们。始终在新代码中使用现代命令。
组合轴:一个有效的示例
因为三个轴是独立的,所以可以自由堆叠。下面的示例同时应用无衬线、粗体和斜体 — 嵌套命令形式,或者简单地在同一组中列出声明。
\documentclass{article}
\begin{document}
% 命令形を入れ子に / Nest the command forms
\textsf{\textbf{\textit{Bold sans-serif italic}}}
% 宣言形を同じグループに並べる(等価)/ Declarations in one group (equivalent)
{\sffamily\bfseries\itshape Bold sans-serif italic\/}
% 一語だけ標準書体へ戻す / Reset one word to the default font
{\sffamily 見出し調のテキストの中の \textnormal{標準} という語}
\end{document}日语(和文)文本的工作方式略有不同。它的家族轴有两个成员 - mincho \textmc / \mcfamily 和哥特式 \textgt / \gtfamily - 一个与西方罗马/无衬线字体不同的系统。由于默认的日语字体没有独立的粗体系列,因此将 \textbf 应用于日语文本会使西方字母变为粗体,但将日语呈现为 gothic 作为替身(默认行为)。通过转换家族(民朝↔哥特式)来强调日式是传统方法,在概念上与西方的重量和倾斜观念不同。
结束语:\textbf 等高级命令在内部扩展为 NFSS 低级命令 — \fontfamily{...}、\fontseries{...}、\fontshape{...} 设置属性,\selectfont 提交它们。形状属性值为n(直立)、it(斜体)、sl(倾斜)和sc(小型大写字母)。你很少直接接触这一层,但它是你召唤特定命名字体的方式。
稿件工作政策
在论文或技术文档中,将字体命令分散为视觉修复的次数越多,手稿就越难维护。在正文中,将字体命令保留在具有含义的地方。诸如使标题加粗、标题变小或定义的术语一致无衬线之类的规则应该存在于类、包或您自己的语义宏中,而不是在整个散文中重复的 \textbf 命令中。
- 将重点放在
\emph。 将含义保留在正文中,以便稍后可以更改外观。 - 仅对短标签使用直接样式。
\textsf或\texttt等命令适用于外观本身很重要的 UI 名称、键名称和短警告标签。 - 对长跨度使用声明。 对于整个引用或旁注,请在环境开头声明
\itshape或\small并彻底关闭该组。 - 不要混合旧的两个字母命令。 在协作手稿中,将
\bf或\it替换为现代\bfseries/\itshape或\textbf/\textit。
读取日志中的字体警告
如果当前字体中不存在所请求的组合,LaTeX 将替换附近的字体并继续。这很方便,但在提交的 PDF 中,它可能意味着“我要求使用粗体小型大写字母,但它看起来像普通粗体。”当日志显示Font shape ... undefined或Font shape ... substituted时,不仅要检查命令的拼写;还要检查命令的拼写。检查所选字体是否确实具有该系列、系列和形状。即使替代是可以接受的,也要在 PDF 中进行检查,并将决定记录在手稿注释中。
- 在一个最小的示例中尝试组合。 在将它们散布到手稿中之前,请检查一个简短示例中的
\textsf{\textbf{...}}或\textsc{...}。 - 不要忽略替换。 如果单独放置,警告可能会使各章的重点看起来有所不同。更改字体或简化所需的形状。
- 将重复使用移至语义宏中。 对于术语、UI 名称和其他重复出现的角色,请在
\newcommand{\term}[1]{...}等命令中收集样式,而不是在散文中重复字体切换。