LaTeX 有一种不同于普通正文的特殊状态,称为 数学模式。数学内容会使用专门的字体、间距和排版规则来排版,所以即使只是一个 x,也会被当作不同于句子中 x 的东西来处理。本页将整理进入数学模式的两个入口:放在一行文字中的 行内公式,以及单独成行排版的 陈列公式;并说明其中生效的规则:空格会被忽略,字母会成为变量,函数名需要使用专门命令。
什么是数学模式
LaTeX 排版文档时,会在几种 模式(内部状态) 之间切换。平时读写普通正文的状态是 文本模式;排版数学内容的状态是 数学模式。两者不只是外观不同,内部的排版规则本身也会切换。在数学模式中,字母会以数学用斜体(数学斜体)排版,字距不是按一串字母来计算,而是根据公式结构来确定;像 + 和 = 这样的符号两侧,也会作为运算符或关系符自动得到合适的间距。
为什么需要专门的模式呢?因为数学排版有大量普通文章中没有的约定。变量用斜体,常数和函数名用正体,下标要缩小,分数和根号会超出字母高度,符号之间的间距也有细致规则。逐项手动指定这些内容并不现实。因此只要声明“从这里开始是数学”,之后 LaTeX 就会按数学的方式统一处理;这就是数学模式的思路。在正文中写 $x$,即使前后都是中文,只有这个 x 也会被正确排成数学变量。
数学模式大致有两种形式:嵌入句子流中的 行内公式(正文公式),以及从段落中分离出来、单独成行并给出更大空间的 陈列公式(另起一行公式)。同一个公式会根据所选形式改变符号大小和摆放方式。下面依次来看。
行内公式
行内公式就是把公式插入正在书写的正文中。LaTeX 推荐的写法是用 \( 和 \) 包住;源自 TeX 的简短写法 $ … $ 也被广泛使用。两者结果相同,主要是个人偏好的问题。(也有 \begin{math} … \end{math} 这样的环境形式,作用相同,但对行内使用来说太长,所以较少使用。)
アインシュタインの関係式は \( E = mc^2 \) である。
The mass--energy relation is $E = mc^2$.无论哪种写法,公式都会以较克制的大小放在行内,尽量不大幅改变正文行高。E、m、c 会作为变量排成斜体,2 会作为上标指数缩小。注意 $ 的开始和结束使用同一个字符,所以如果忘记关闭 $,后面的正文会整个被吞进数学模式,常常导致难以定位的错误。\( … \) 能区分开始和结束,因此更容易发现配对错误。
由于行内公式受到行高限制,分数、求和等会被紧凑地排版。细节会在后面的“行内与陈列样式的差异”中说明。
陈列公式
重要或较大的公式会从段落中提出来,单独放在一行上,这就是陈列公式。LaTeX 推荐的写法是 \[ … \],它是 displaymath 环境(\begin{displaymath} … \end{displaymath})的简写,行为完全相同。两者都 不会添加公式编号。默认情况下公式居中;若给整个文档使用 fleqn 选项,则会左对齐。
次の等式が成り立つ。
\[
\int_0^1 x^2 \, dx = \frac{1}{3}
\]
これは基本的な積分である。输出结果是一条居中的独立公式:积分号会大到超出字母高度,0 到 1 的范围放在积分号下方和上方,分数 1/3 则隔着横线纵向排成较大的形式。它与前后的正文之间会留出少量垂直空白。
如果想给公式编号以便之后引用,请使用 equation 环境,而不是 \[ … \]。它会把公式另起一行排版,并自动在右端(横排默认)添加连续编号。配合 \label{…} 和 \ref{…},就可以在正文中写出类似“由式 (3)”这样的引用(编号和对齐的详细处理留到其他页面说明)。
\begin{equation}
e^{i\pi} + 1 = 0
\end{equation}如果需要不编号的陈列公式,可以使用 \[ … \],也可以使用 amsmath 包提供的 equation* 环境(它等同于 displaymath,同时可以配合 amsmath 的各种功能)。下表整理了陈列公式的主要写法。
| 写法 | 编号 | 备注 |
|---|---|---|
\[ … \] | 无 | LaTeX 推荐;displaymath 的简写 |
displaymath | 无 | 环境形式,与 \[ \] 相同 |
equation | 有 | 自动连续编号;可通过 \label 引用 |
equation* | 无 | 需要 amsmath;等同于 displaymath |
$$ … $$ | 无 | 不推荐(见下一节) |
为什么不要使用 $$ … $$
有时会看到用 $$ … $$ 包住陈列公式的写法,但这是 plain TeX 时代的习惯,在 LaTeX 中不推荐使用。虽然外观看起来类似 \[ … \],但它不是 LaTeX 官方支持的记法,并且会带来一些实际问题。
- 得不到
\[…\]插入的 合适上下间距,因此陈列公式前后的垂直间距会发生变化。 - 文档级的
fleqn选项不起作用。 - LaTeX 的 一致性检查(开闭配对等)不会运行。
\[…\]是可以重新定义的宏,必要时能改变行为;$$没有这种灵活性。- amsthm 的
proof环境中 QED 符号(证明结束符号)的位置会出错:如果最后的公式用$$…$$排版,证明结束符号会掉到单独一行,而不是按预期位于右端。
AMS 的 “Short Math Guide for LaTeX” 也强烈警告不要使用 $$ … $$。陈列公式请使用 \[ … \](无编号)或 equation 环境(有编号)。
行内与陈列样式的差异
同一个公式会根据行内还是陈列而采用不同的样式(排版方式)。行内公式为了不明显改变行高,会以 文本样式 紧凑排版;陈列公式则有更多空间,以 陈列样式 排版。差异最明显的地方是求和、积分的 范围(极限)位置,以及 分数和上下标的大小。
- 求和/积分范围:在陈列样式中,
\sum的范围位于符号的 上方和下方;而在文本样式(行内)中,它位于符号 右侧。\int的积分范围也会以同样方式改变位置。 - 分数:
\frac在陈列样式中较大,在文本样式中则小而紧凑。 - 上标/下标:上下标的大小和位置也会随样式改变,嵌套越深就会逐级缩小。
这种样式可以用命令覆盖。\displaystyle 会从当前位置起应用“独立成行排版时的样式”,\textstyle 会应用“正文中排版时的样式”。此外还有用于下一级上下标的 \scriptstyle,以及用于第二级上下标的 \scriptscriptstyle;文字会按这个顺序变小。例如,如果想让正文中的求和范围显示在上下方,就在行内公式中使用 \displaystyle。
インライン: $\sum_{i=1}^{n} i$ では範囲が右脇に付く。
強制ディスプレイ: $\displaystyle\sum_{i=1}^{n} i$ では範囲が上下に付く。在上面的例子中,前者把 i=1 和 n 小小地放在求和符号右侧,后者则把同样的范围放在求和符号正下方和正上方。不过,在正文中过多使用 \displaystyle 容易拉大行距,所以最好只在必要处使用。
数学模式中的规则
进入数学模式后,会有三条不同于正文的规则生效。如果不了解它们,就会对“明明输入了空格却挤在一起”“英文单词变成斜体并分散开来”感到困惑。
第一,源文件中输入的空格会被忽略。公式中的所有间距都由 LaTeX 根据公式结构决定,因此写成 a+b 或 a + b 输出相同。如果想有意加入空隙,请使用 \,(细空格)或 \quad、\qquad(较宽空格)等专用命令。换行也同样会被忽略,所以可以为了便于阅读而在源码中换行。
第二,所有英文字母都会被视为变量名,并以数学斜体排版。因此在公式中写 area,得到的不是“area”这个词,而是 a、r、e、a 四个变量的乘积,字距也会按变量序列来处理。
第三,如果想在公式中放入 普通词句(正体、正确字距),要使用专用命令。标准做法是使用 amsmath 包的 \text{…},它会把其中的文字按正文相同的字体和间距排版。不使用 amsmath 时,\mbox{…} 也能做类似的事,但它存在一些问题,例如在下标中大小不会跟随变化,而且名称也不能说明用途。
\[
V = \frac{4}{3}\pi r^3 \quad \text{(半径 $r$ の球)}
\]在这个例子中,球体体积公式右侧放了一个 \quad 间隔,\text{…} 中的“(半径 r 的球)”会以正文正体排版。还要注意,在 \text{…} 内再写 $r$,可以只把那一部分切回数学模式。
运算符和函数名
根据上一节的规则可以知道,直接输入 sin x 会看起来像三个变量 s、i、n 的乘积。正确做法是使用 \sin 这样的 专用命令。LaTeX 预先定义了常用函数和运算符的名称,它们都会以 正体(罗马体) 排版,并在前后带有合适间距。
- 三角与双曲:
\sin\cos\tan\cot\sec\csc;\sinh\cosh\tanh\coth;反函数\arcsin\arccos\arctan。 - 对数与指数:
\log\ln\lg\exp。 - 极限与上下界:
\lim\limsup\liminf\sup\inf\max\min。 - 代数及其他:
\arg\det\dim\gcd\ker\hom\deg\Pr;取模\bmod\pmod。
其中一些(如 \lim、\max、\sup 等)在陈列样式中会把下标放在 正下方。例如 \lim_{n\to\infty} 在另起一行时会把 n→∞ 排在 lim 正下方(行内时则位于右下方)。
\[
\lim_{n \to \infty} \left(1 + \frac{1}{n}\right)^{n} = e,
\qquad \sin^2\theta + \cos^2\theta = 1.
\]如果想把列表中没有的函数名排成正体,请使用 amsmath 包的 \operatorname{…}。例如写 \operatorname{rank} A,rank 就会以正体并带合适间距排版。如果同一个算子会反复使用,可以在导言区用 \DeclareMathOperator{\rank}{rank} 定义一次,正文中再写 \rank。若某个算子的下标要像 \lim 一样放在正下方,请用带星号的 \DeclareMathOperator*{\argmax}{arg\,max} 来定义。