如果要排严肃的数学内容,首先应加载的包就是 amsmath。这是美国数学会(AMS)的数学排版包,也是事实上的标准,从对齐的陈列公式到精细的间距控制,都显著增强了 LaTeX 内建的数学功能。本页不讲对齐环境本身的用法(它们有单独页面),而是说明 为什么要加载 amsmath,以及跨环境通用的命令:\text、\operatorname、\DeclareMathOperator、\intertext、\substack 和 \numberwithin。同时也介绍 amsmath 的伙伴:提供黑板粗体、Fraktur 和数百个额外符号的 amssymb / AMSFonts,以及用于定理环境的 amsthm。
amsmath 是什么
amsmath 是 American Mathematical Society (AMS) 为排版自己的期刊而发展出的数学包。LaTeX 内建的数学功能很基础,不能充分处理多行公式对齐、公式编号的细致控制或函数名的正确排版。amsmath 一次性补上这些缺口,如今在数学和物理文档中被认为 几乎必不可少。加载它只需在导言区写一行。
\usepackage{amsmath}amsmath 与其说是单一包,不如说是一组小包的集合。正如官方 User’s Guide 明确说明的,amsmath incorporates amstext(数学中的文本命令 \text)、amsopn(用于定义算子的 \DeclareMathOperator 等)和 amsbsy(通过 \boldsymbol 得到数学粗体)。因此,一行 \usepackage{amsmath} 会把这些功能一起带进来。amsmath 被归类为 LaTeX 的 required 包,2016 年以后维护从 AMS 转交给 LaTeX Project(当前版本为 2.17z,2025 年 7 月发布)。
amsmath 最醒目的功能是 用于对齐多行公式的环境,包括 align、gather、multline、split、alignat,以及分段情况环境 cases 等。这些内容足够多,已在单独页面“Displayed, aligned & numbered equations”中讲解;这里仅点名它们,本页重点放在 可在任何环境中使用的横向命令。
amssymb 和 AMSFonts
与 amsmath 搭配的是提供符号和字体的 amssymb(AMSFonts 的一部分)。二者职责不同:amsmath 增加 排版机制(对齐、间距、编号),amssymb 则扩展可书写的 符号和数学字母表。在导言区这样加载 amssymb。
\usepackage{amssymb}amssymb 定义了 AMS 符号字体 msam 和 msbm 中的所有符号,从而提供标准 LaTeX 中没有的 数百个额外符号,例如 \leqslant 和 \geqslant(倾斜不等号)、\nleq 和 \subsetneq(否定与真子集关系)、\therefore 和 \because、\square 和 \blacksquare,以及 \varnothing(空集的另一种字形)。由于 amssymb 内部会加载 amsfonts,不需要另行写 amsfonts。
amssymb(更准确地说是 AMSFonts)还增加了两套数学字母表:通过 \mathbb{...} 使用的 blackboard bold,以及通过 \mathfrak{...} 使用的 Fraktur (Gothic)。\mathbb{R}、\mathbb{C}、\mathbb{Z} 分别给出表示实数、复数和整数的空心粗体 R、C、Z。不过要注意,blackboard bold 只有大写字母,没有小写字母或数字。Fraktur 则有大小写两套,因此可以用 \mathfrak{g} 表示李代数 g,用 \mathfrak{p} 表示素理想 p。
\[
\mathbb{R} \subset \mathbb{C}, \qquad
\mathfrak{g} = \operatorname{Lie}(G)
\]这个例子用空心粗体表示实数 R 包含于复数 C,然后把李群 G 的李代数写成 Fraktur 的 g。由于 \mathbb 和 \mathfrak 是 AMSFonts 功能,如果只需要字体而不需要符号,\usepackage{amsfonts} 就足够;但通常也会用到符号,因此加载 amssymb 更稳妥。
数学中的文本 — \text
在数学模式中,每个字母都会被当作变量,因此输入 area 会得到四个变量的乘积。若要在公式中放入 普通词语,并以直立体和正确字距排版,使用 amsmath(准确说是其包含的 amstext)提供的 \text{...}。括号内的字符串会按正文相同的字体和间距排版。
\text 的优点是 会感知大小。较旧的 \mbox{...} 也能把直立文本放入数学中,但即使在下标或上标里仍保持正文大小,与周围较小的字符不协调。\text 会按上下文缩小:在下标中变成脚本大小,在二级脚本中更小。它的名字也直接说明了用途。
\[
f(x) = x^2 \quad \text{for all } x \in \mathbb{R},
\qquad v_{\text{max}} = 3.
\]这里,公式右侧的 \text{for all } 以直立体和正文大小排版(末尾空格会生效),而 v 的下标 \text{max} 则以直立体 缩小到脚本大小。如果用 \mbox,后者会相对周围显得过大。注意,在 \text{...} 内再写 $...$,那一部分会切回数学模式。
命名算子 — \operatorname 和 \DeclareMathOperator
像 \sin、\log、\lim 这样的函数名在标准 LaTeX 中已预定义,会以直立体和适当间距排版。但不在列表中的算子,如 rank、Hom、ess sup 等,需要自己定义。amsmath(其包含的 amsopn)中的两个命令负责处理这件事。
如果只是临时排一次直立算子,使用 \operatorname{...}。例如写 \operatorname{rank} A,rank 会以直立体排版,并在后面带有正确的算子间距,不会与随后的 A 过近或过远。如果同一个算子会反复使用,更整洁的做法是在导言区用 \DeclareMathOperator{\rank}{rank} 定义一次,正文中写 \rank。\DeclareMathOperator 只能用于导言区,不能在正文中使用。
这两个命令都有 带星号形式,会改变脚本的位置。不带星号的 \operatorname / \DeclareMathOperator 会把下标放在算子的 右下方(与 \log 相同)。带星号的 \operatorname* / \DeclareMathOperator* 在 display style 中把下标放在算子 正下方,即与 \lim、\sup、\max 相同的“limits”位置。带下方指标的 argmax、argmin 等应使用带星号形式定义。
% プリアンブル / in the preamble
\DeclareMathOperator{\rank}{rank}
\DeclareMathOperator*{\argmax}{arg\,max}
% 本文 / in the body
\[
\rank A \le n, \qquad
\hat{x} = \argmax_{x \in S} f(x)
\]这里在导言区定义了两个算子。正文中的 \rank A 会把 rank 直立排版;而 \argmax 位于陈列公式中,因此 x ∈ S 会放在 arg max 正下方(因为它用带星号形式定义)。定义中的 \, 是 arg 和 max 之间的细空格,使 arg max 看起来像两个词。
对齐中的文本与堆叠下标
下面两个命令常与对齐环境和大型算子配合使用。首先,\intertext{...} 可以在 align 这样的多行陈列公式 中间插入一行文本,同时保持对齐。如果直接关闭环境、写文本、再重新打开,前后的对齐位置就会错开。使用 \intertext,即使插入文本,上下两行的 & 列仍会保持对齐。
\begin{align}
A &= B + C \\
\intertext{ここで $C$ を展開すると / expanding $C$ gives}
A &= B + D + E
\end{align}这个例子在两个等式之间插入一行说明“expanding C gives”,但 A &= 中的 = 在上下仍保持对齐。\intertext 只在 align 等对齐环境内部有意义(这些环境本身的细节见单独页面)。
另一个命令 \substack{...} 用于在求和、乘积等 大型算子下方堆叠多行条件,各行用 \\ 分隔。例如,要在求和号下方分两行放置“0 ≤ i ≤ m”和“0 < j < n”时使用它。subarray 环境功能类似,并且还可接受 l(左对齐)等对齐指定。
\[
\sum_{\substack{0 \le i \le m \\ 0 < j < n}} a_{ij}
\]这里,两个条件分两行堆叠在求和号下方,表示在该范围内对 a_{ij} 求和。\substack 内部仍是数学模式,因此 \le 等关系符号照常可用。
分数、二项系数与编号控制
分数命令 \frac 本身属于标准 LaTeX,但 amsmath 增加了 固定样式变体。\dfrac{...}{...} 无论上下文如何都以 display style(大分数)排版,\tfrac{...}{...} 则始终以 text style(小分数)排版。想让正文中的分数变大时用 \dfrac,想在陈列公式中把某一部分缩小时用 \tfrac 很方便。连分数可用 \cfrac{...}{...},无论嵌套多深,每一层都保持易读大小。
二项系数可用 \binom{n}{k},它会把 n 和 k 竖直排列在圆括号中,排成组合数符号。它也有固定样式形式:\dbinom(始终 display style)和 \tbinom(始终 text style)。
\[
\binom{n}{k} = \dfrac{n!}{k!\,(n-k)!}
\]这里左边是二项系数(圆括号中 n 在 k 上方),右边是用 \dfrac 放大的分数 n!/(k!(n−k)!)。分母中的 \, 是阶乘符号和括号之间的细空格。
在编号方面,\numberwithin{equation}{section} 很方便。把它写在导言区会 把公式编号绑定到节编号,每进入新节就重置公式计数器。例如第 2 节的第一个公式会编号为“(2.1)”。这是避免长文档中的公式编号增长到三位、四位的常用设置。
除此之外,amsmath 还提供许多功能:矩阵环境(pmatrix、bmatrix 等)、自动调整大小的定界符、陈列公式的对齐环境,以及通过 \boldsymbol 实现的数学粗体。矩阵见“Matrices & arrays”,对齐环境见“Displayed, aligned & numbered equations”,求和与大型算子见“Sums, integrals & big operators”。
导言区应写什么
实际使用中,任何包含数学内容的文档通常都会把下面三行一起放在导言区:amsmath(排版机制)、amssymb(符号以及 blackboard bold 和 Fraktur),以及用于定理和证明环境的 amsthm。加载顺序大体自由,只需注意 amsthm 应放在 amsmath 之后。
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\begin{document}
\[
\zeta(s) = \sum_{n=1}^{\infty} \frac{1}{n^{s}}, \qquad s \in \mathbb{C}
\]
\end{document}这个最小示例加载三个包,然后把黎曼 zeta 函数的定义排成陈列公式:求和号下方有 n=1,上方有 ∞,\mathbb{C} 会把复数域 C 渲染为空心粗体。amsthm 提供的 theorem、proof 等定理环境是独立主题,在“Theorems & proofs (amsthm)”页面中介绍。
| 包 | 作用 | 主要提供内容 |
|---|---|---|
amsmath | 数学排版机制 | 对齐环境、\text、\operatorname、\dfrac、\binom 等 |
amssymb | 符号和数学字母表 | 数百个 msam/msbm 符号、\mathbb、\mathfrak(内部加载 amsfonts) |
amsfonts | 仅字体 | \mathbb 和 \mathfrak(不含额外符号) |
amsthm | 定理和证明环境 | \newtheorem、proof 环境、\theoremstyle |