现在位置: 首页 > LaTeX 教程 > 正文

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 是数学推导的主力环境:多行公式按 & 标记的位置对齐,每行自动编号。

实例:两行推导

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

这里出现了两个新写法:\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 环境,它会自动编号。

实例:编号与引用

\documentclass{ctexart}
\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{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
}

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