LaTeX 数学公式进阶
上一篇解决了单行公式,这一篇处理「大块头」:矩阵、方程组、多行推导和公式编号。
它们全部来自 amsmath 宏包——这也是为什么所有数学文档的导言区都该有一行 \usepackage{amsmath}。
矩阵:matrix 家族
矩阵用环境表示:& 分隔列,\\ 换行,环境名决定外层的括号样式。
| 环境 | 外层样式 | 典型用途 |
|---|---|---|
| matrix | 无括号 | 拼接数据块 |
| pmatrix | 圆括号 ( ) | 普通矩阵 |
| bmatrix | 方括号 [ ] | 系数矩阵、线性代数 |
| Bmatrix | 大括号 { } | 集合表示 |
| vmatrix | 单竖线 | | | 行列式 |
| Vmatrix | 双竖线 ‖ ‖ | 范数 |
pmatrix(圆括号矩阵)
bmatrix(方括号矩阵)
vmatrix(行列式)
实例:带省略号的 n 阶矩阵
\begin{pmatrix}
a_{11} & \cdots & a_{1n} \\
\vdots & \ddots & \vdots \\
a_{n1} & \cdots & a_{nn}
\end{pmatrix}
\]
三种省略号各司其职:\cdots 横向、\vdots 纵向、\ddots 斜向。矩阵元素多时,务必用省略号而不是把几十个元素全部敲进去。
行内公式中放不下大矩阵时,可以用 smallmatrix 环境,它会压缩行距与字号。
多行推导:align 环境
align 是数学推导的主力环境:多行公式按 & 标记的位置对齐,每行自动编号。
实例:两行推导
(a+b)^2 &= a^2 + 2ab + b^2 \\
&= a^2 + b^2 + 2ab
\end{align}
规则只有两条:& 放在「对齐锚点」处(通常是等号前),它会把前后分成两列;\\ 换行。每行都会自动获得编号。
实例:定积分计算
\int_0^1 x^2 \,\mathrm{d}x
&= \left[ \frac{x^3}{3} \right]_0^1 \notag \\[2pt]
&= \frac{1}{3}
\end{align}
这里出现了两个新写法:\notag 让某一行不编号(推导中间行不需要编号时用它);\\ 后面的 [2pt] 微调行距,可省略。
不需要任何编号时,用带星号的 align* 环境——这与章节命令 \section* 的逻辑一致:星号等于「不编号、不进目录」。
方程组与分段函数:cases 环境
cases 环境专门生成左侧一个大括号的分组结构,方程组和分段函数的标准写法。
实例:二元一次方程组
\begin{cases}
x + y = 5 \\
2x - y = 1
\end{cases}
\]
实例:分段函数
f(x) =
\begin{cases}
-x, & x < 0 \\
x, & x \geq 0
\end{cases}
\]
分段函数里 & 的作用变了:把「函数值」和「成立条件」分成两列,第二列条件会自动与右侧对齐。
公式编号与引用
行间公式 \[...\] 不编号;需要被引用的公式,用 equation 环境,它会自动编号。
实例:编号与引用
\usepackage{amsmath} % align、equation、cases 都需要它
\begin{document}
由式 \eqref{eq:pyth} 可知,直角三角形的斜边满足
\begin{equation} \label{eq:pyth} % \label 打上标签,供 \eqref 引用
a^2 + b^2 = c^2,
\end{equation}
而等差数列的前 $n$ 项和为
\begin{equation}
S_n = \frac{n(a_1 + a_n)}{2}.
\end{equation}
\end{document}

三步记住:equation 负责编号,\label{key} 打标签,\eqref{key} 引用(自动带括号)。
标签的取名建议「类型:内容」,如 eq:pyth、eq:sum——公式多了以后,eq:3 这种名字会让你自己都认不出来。
引用显示成 (??) 说明 .aux 还没更新,再编译一遍(老朋友了)。
超长公式折行:split 环境
一个公式长得超过版心宽度时,放进 equation 里再用 split 折行——整段保持同一个编号。
实例:长公式折行
\begin{split}
\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})
&= \sum_{i=1}^{n} x_i y_i - n\bar{x}\bar{y} \\
&= \frac{1}{n}\sum_{i=1}^{n} x_i y_i - \bar{x}\bar{y}
\end{split}
\end{equation}
split 与 align 的区别:align 是「多个公式」各编号各的;split 是「一个公式」折成几行,共享一个编号。嵌套关系也说明问题——split 必须住在 equation(或 \[...\])里面。
常见公式错误排查
数学模式的报错占了新手报错的一大半,高频错误如下。
| 错误写法 | 问题 | 正确写法 |
|---|---|---|
| 文本中直接用 \alpha | 数学命令只能用于数学模式 | $\alpha$ |
| $a_1 + b_$ | _ 或 ^ 后面缺内容 | 补上:$a_1 + b_2$ |
| \[ x = \frac{1}{2} \] | 没加载 amsmath 却用 \dfrac 等 | 导言区 \usepackage{amsmath} |
| \[ a & b \\ c & d \] | 普通行间公式里用 & | & 只属于 matrix、align 等环境 |
| 公式里夹中文说明 | 字体与断行全乱 | 说明文字放到 $ 外,或用 \text{中文} |
| align 里忘了 \\ | 多行挤成一行 | 每行末尾(最后一行除外)加 \\ |
其中 \text{...}(amsmath 提供)值得多说一句:偶尔需要在公式里嵌一小段文字(如「当 x > 0 时」的条件、单位),用 \text 包住即可保持正体与正常间距。
小结
| 需求 | 环境 / 命令 |
|---|---|
| 矩阵 | pmatrix / bmatrix / vmatrix(& 分列,\\ 换行) |
| 多行推导(每行编号) | align,星号版不编号 |
| 方程组 / 分段函数 | cases |
| 单个编号公式 | equation + \label |
| 引用公式编号 | \eqref{key} |
| 长公式折行 | equation 内嵌 split |
