数学模式基础

LaTeX 有一种不同于普通正文的特殊状态,称为 数学模式。数学内容会使用专门的字体、间距和排版规则来排版,所以即使只是一个 x,也会被当作不同于句子中 x 的东西来处理。本页将整理进入数学模式的两个入口:放在一行文字中的 行内公式,以及单独成行排版的 陈列公式;并说明其中生效的规则:空格会被忽略,字母会成为变量,函数名需要使用专门命令。

什么是数学模式

LaTeX 排版文档时,会在几种 模式(内部状态) 之间切换。平时读写普通正文的状态是 文本模式;排版数学内容的状态是 数学模式。两者不只是外观不同,内部的排版规则本身也会切换。在数学模式中,字母会以数学用斜体(数学斜体)排版,字距不是按一串字母来计算,而是根据公式结构来确定;像 += 这样的符号两侧,也会作为运算符或关系符自动得到合适的间距。

为什么需要专门的模式呢?因为数学排版有大量普通文章中没有的约定。变量用斜体,常数和函数名用正体,下标要缩小,分数和根号会超出字母高度,符号之间的间距也有细致规则。逐项手动指定这些内容并不现实。因此只要声明“从这里开始是数学”,之后 LaTeX 就会按数学的方式统一处理;这就是数学模式的思路。在正文中写 $x$,即使前后都是中文,只有这个 x 也会被正确排成数学变量。

数学模式大致有两种形式:嵌入句子流中的 行内公式(正文公式),以及从段落中分离出来、单独成行并给出更大空间的 陈列公式(另起一行公式)。同一个公式会根据所选形式改变符号大小和摆放方式。下面依次来看。

行内公式

行内公式就是把公式插入正在书写的正文中。LaTeX 推荐的写法是用 \(\) 包住;源自 TeX 的简短写法 $$ 也被广泛使用。两者结果相同,主要是个人偏好的问题。(也有 \begin{math}\end{math} 这样的环境形式,作用相同,但对行内使用来说太长,所以较少使用。)

latex
アインシュタインの関係式は \( E = mc^2 \) である。

The mass--energy relation is $E = mc^2$.

无论哪种写法,公式都会以较克制的大小放在行内,尽量不大幅改变正文行高。Emc 会作为变量排成斜体,2 会作为上标指数缩小。注意 $ 的开始和结束使用同一个字符,所以如果忘记关闭 $,后面的正文会整个被吞进数学模式,常常导致难以定位的错误。\(\) 能区分开始和结束,因此更容易发现配对错误。

由于行内公式受到行高限制,分数、求和等会被紧凑地排版。细节会在后面的“行内与陈列样式的差异”中说明。

陈列公式

重要或较大的公式会从段落中提出来,单独放在一行上,这就是陈列公式。LaTeX 推荐的写法是 \[\],它是 displaymath 环境\begin{displaymath}\end{displaymath})的简写,行为完全相同。两者都 不会添加公式编号。默认情况下公式居中;若给整个文档使用 fleqn 选项,则会左对齐。

latex
次の等式が成り立つ。
\[
  \int_0^1 x^2 \, dx = \frac{1}{3}
\]
これは基本的な積分である。

输出结果是一条居中的独立公式:积分号会大到超出字母高度,01 的范围放在积分号下方和上方,分数 1/3 则隔着横线纵向排成较大的形式。它与前后的正文之间会留出少量垂直空白。

如果想给公式编号以便之后引用,请使用 equation 环境,而不是 \[\]。它会把公式另起一行排版,并自动在右端(横排默认)添加连续编号。配合 \label{…}\ref{…},就可以在正文中写出类似“由式 (3)”这样的引用(编号和对齐的详细处理留到其他页面说明)。

latex
\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

latex
インライン: $\sum_{i=1}^{n} i$ では範囲が右脇に付く。

強制ディスプレイ: $\displaystyle\sum_{i=1}^{n} i$ では範囲が上下に付く。

在上面的例子中,前者把 i=1n 小小地放在求和符号右侧,后者则把同样的范围放在求和符号正下方和正上方。不过,在正文中过多使用 \displaystyle 容易拉大行距,所以最好只在必要处使用。

数学模式中的规则

进入数学模式后,会有三条不同于正文的规则生效。如果不了解它们,就会对“明明输入了空格却挤在一起”“英文单词变成斜体并分散开来”感到困惑。

第一,源文件中输入的空格会被忽略。公式中的所有间距都由 LaTeX 根据公式结构决定,因此写成 a+ba + b 输出相同。如果想有意加入空隙,请使用 \,(细空格)或 \quad\qquad(较宽空格)等专用命令。换行也同样会被忽略,所以可以为了便于阅读而在源码中换行。

第二,所有英文字母都会被视为变量名,并以数学斜体排版。因此在公式中写 area,得到的不是“area”这个词,而是 area 四个变量的乘积,字距也会按变量序列来处理。

第三,如果想在公式中放入 普通词句(正体、正确字距),要使用专用命令。标准做法是使用 amsmath 包的 \text{…},它会把其中的文字按正文相同的字体和间距排版。不使用 amsmath 时,\mbox{…} 也能做类似的事,但它存在一些问题,例如在下标中大小不会跟随变化,而且名称也不能说明用途。

latex
\[
  V = \frac{4}{3}\pi r^3 \quad \text{(半径 $r$ の球)}
\]

在这个例子中,球体体积公式右侧放了一个 \quad 间隔,\text{…} 中的“(半径 r 的球)”会以正文正体排版。还要注意,在 \text{…} 内再写 $r$,可以只把那一部分切回数学模式。

运算符和函数名

根据上一节的规则可以知道,直接输入 sin x 会看起来像三个变量 sin 的乘积。正确做法是使用 \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 正下方(行内时则位于右下方)。

latex
\[
  \lim_{n \to \infty} \left(1 + \frac{1}{n}\right)^{n} = e,
  \qquad \sin^2\theta + \cos^2\theta = 1.
\]

如果想把列表中没有的函数名排成正体,请使用 amsmath 包的 \operatorname{…}。例如写 \operatorname{rank} Arank 就会以正体并带合适间距排版。如果同一个算子会反复使用,可以在导言区用 \DeclareMathOperator{\rank}{rank} 定义一次,正文中再写 \rank。若某个算子的下标要像 \lim 一样放在正下方,请用带星号的 \DeclareMathOperator*{\argmax}{arg\,max} 来定义。