跳到主要内容

advanced-mathematical-formulas

数学公式进阶

上一篇解决了单行公式,这一篇处理「大块头」:矩阵、方程组、多行推导和公式编号。 它们全部来自 amsmath 宏包——这也是为什么所有数学文档的导言区都该有一行 \usepackage{amsmath}

矩阵:matrix 家族

矩阵用环境表示:& 分隔列,\\ 换行,环境名决定外层的括号样式。

环境外层样式典型用途
matrix无括号拼接数据块
pmatrix圆括号 ()普通矩阵
bmatrix方括号 []系数矩阵、线性代数
Bmatrix大括号 {}集合表示
vmatrix单竖线 | |行列式
Vmatrix双竖线 || ||范数

pmatrix(圆括号矩阵)

\[
\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\]
(1234)\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}

bmatrix(方括号矩阵)

\[
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\]
[1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}

vmatrix(行列式)

\[
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
= ad - bc
\]
abcd=adbc\begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc

实例:带省略号的 n 阶矩阵

\[
\begin{pmatrix}
a_{11} & \cdots & a_{1n} \\
\vdots & \ddots & \vdots \\
a_{n1} & \cdots & a_{nn}
\end{pmatrix}
\]
(a11a1nan1ann)\begin{pmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{n1} & \cdots & a_{nn} \end{pmatrix}

三种省略号各司其职:\cdots 横向、\vdots 纵向、\ddots 斜向。矩阵元素多时,务必用省略号而不是把几十个元素全部敲进去。 行内公式中放不下大矩阵时,可以用 smallmatrix 环境,它会压缩行距与字号。

多行推导:align 环境

align 是数学推导的主力环境:多行公式按 & 标记的位置对齐,每行自动编号。

实例:两行推导

\begin{align}
(a+b)^2 &= a^2 + 2ab + b^2 \\
&= a^2 + b^2 + 2ab
\end{align}
(a+b)2=a2+2ab+b2=a2+b2+2ab\begin{align} (a+b)^2 &= a^2 + 2ab + b^2 \\ &= a^2 + b^2 + 2ab \end{align}

规则只有两条:& 放在「对齐锚点」处(通常是等号前),它会把前后分成两列;\\ 换行。每行都会自动获得编号。

实例:定积分计算

\begin{align}
\int_0^1 x^2 \,\mathrm{d}x
&= \left[ \frac{x^3}{3} \right]_0^1 \notag \\[2pt]
&= \frac{1}{3}
\end{align}
01x2dx=[x33]01=13\begin{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}
\]
{x+y=52xy=1\begin{cases} x + y = 5 \\ 2x - y = 1 \end{cases}

实例:分段函数

\[
f(x) =
\begin{cases}
-x, & x < 0 \\
x, & x \ge 0
\end{cases}
\]
f(x)={x,x<0x,x0f(x) = \begin{cases} -x, & x < 0 \\ x, & x \ge 0 \end{cases}

分段函数里 & 的作用变了:把「函数值」和「成立条件」分成两列,第二列条件会自动与右侧对齐。

公式编号与引用

行间公式 \[...\] 不编号;需要被引用的公式,用 equation 环境,它会自动编号。

实例:编号与引用

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
由式 \eqref{eq:pyth} 可知,直角三角形的斜边满足
\begin{equation}\label{eq:pyth}
a^2 + b^2 = c^2,
\end{equation}
而等差数列的前 $n$ 项和为
\begin{equation}\label{eq:sum}
S_n = \frac{n(a_1 + a_n)}{2}.
\end{equation}
\end{document}

由式(1)可知,直角三角形的斜边满足

a2+b2=c2(1)a^2 + b^2 = c^2 \tag{1}

而等差数列的前 nn 项和为

Sn=n(a1+an)2(2)S_n = \frac{n(a_1 + a_n)}{2} \tag{2}

两个公式分别自动编号为 (1)、(2),引用时用 \eqref{key} 得到带括号的编号。

三步记住:equation 负责编号,\label{key} 打标签,\eqref{key} 引用(自动带括号)。 标签的取名建议【类型:内容】,如 eq:pytheq:sum——公式多了以后,eq:3 这种名字会降低文档的可读性。

引用显示 ?? 说明 aux 还没更新,再编译一遍。

超长公式折行:split 环境

一个公式长得超过版心宽度时,放进 equation 里再用 split 折行——整段保持同一个编号。

\begin{equation}
\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}
i=1n(xixˉ)(yiyˉ)=i=1nxiyinxˉyˉ=1ni=1nxiyixˉyˉ\begin{equation} \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}

splitalign 的区别:align多个公式,各编各的;split一个公式拆成几行,共享一个编号。split 必须住在 equation(或 \[...\])里面。

常见公式错误排查

数学模式的报错占了新手报错的一大半,高频错误如下:

错误写法问题正确写法
文本中直接用 \alpha数学命令只能用于数学模式α\alpha
a1+ba - 1 + b_^ 后面缺内容补上:a1+b2a_1 + b^2
\dfrac没加载 amsmath 却用 \dfrac导言区 \usepackage{amsmath}
\a & b \\ c & d普通行间公式里乱用 && 只属于 matrixalign 等环境
公式里中文说明字体与断行全乱说明文字放到 外,或用 \text{中文}
align 里忘了 \\多行挤成一行每行末尾(最后一行除外)加 \\

其中 \text{...}amsmath 宏包提供,这里单独说明:当需要在数学公式内部嵌入少量文本(例如条件说明「当 (x>0) 时」、物理单位等场景),使用 \text{} 包裹文本,可保持文字为正体,并维持合理字符间距。

小结

需求环境 / 命令
矩阵pmatrix / bmatrix / vmatrix&分列,\\换行)
多行推导(每行编号)align,星号版不编号
方程组 / 分段函数cases
单个编号公式equation + \label
引用公式编号\eqref{key}
长公式折行equation 内嵌 split