矩阵、向量以及任何按网格排布的数学内容,可以用 amsmath 包的矩阵环境(pmatrix 等)来排,也可以用更通用的 array 环境。二者写法相近:元素用 & 横向分隔,用 \\ 换到下一行;区别在于是否自动加定界符,以及能否自由控制列对齐。本页依次介绍矩阵环境家族及其适用场景、可自行指定列对齐和竖线的 array、增广矩阵的写法,以及矩阵中表示“依此类推”的点号 \cdots、\vdots、\ddots。
amsmath 的矩阵环境
排矩阵最简单的方法,是使用 amsmath 包提供的一组矩阵环境;在导言区写上 \usepackage{amsmath} 即可使用。它们都在数学模式中使用,元素在同一行内用 &(ampersand)分隔,行末用 \\(两个反斜杠)换行。不同环境之间唯一的区别,是包围矩阵的定界符;内部内容的写法完全相同。
这些名称有固定规律。开头字母表示定界符:p 是 parentheses(圆括号),b 是 brackets(方括号),v 是 vertical bar(竖线)。以大写开头的 Bmatrix 和 Vmatrix 分别对应“更强”的花括号和双竖线。普通的 matrix 不添加任何定界符。
| 环境 | 添加的定界符 | 典型用途 |
|---|---|---|
matrix | 无 | 要自行添加定界符时的基础 |
pmatrix | 圆括号 ( ) | 最常见的矩阵和列向量 |
bmatrix | 方括号 [ ] | 矩阵(偏好方括号的写法) |
Bmatrix | 花括号 { } | 需要表示集合式整体时 |
vmatrix | 单竖线 | | | 行列式 |
Vmatrix | 双竖线 ‖ ‖ | 范数 |
smallmatrix | 无(紧凑) | 嵌入正文中的小矩阵 |
下面的例子用 pmatrix、bmatrix 和 vmatrix 排同一个 2×2 内容。\\ 前后的空格和换行不会影响输出,因此源码可以按易读的方式排版。
\[
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
\quad
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
\quad
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
\]输出结果是在单独一行居中放置三个 2×2 矩阵,并用 \quad 拉开间距:第一个用圆括号包围,第二个用方括号,第三个左右为竖线,表示行列式。元素居中对齐,a、b、c、d 作为变量以斜体排出。
注意,矩阵环境中的元素始终居中;不能要求列右对齐或左对齐。需要自行选择对齐方式时,可以使用后文的 array 环境,或使用 mathtools 包提供的星号版本(pmatrix*、bmatrix* 等)。星号版本接受 [r]、[c]、[l] 可选参数,使所有列按该方向对齐,例如 \begin{pmatrix*}[r] … \end{pmatrix*}。
列数上限(MaxMatrixCols)
amsmath 的矩阵环境默认最多只能排 10 列。这是因为名为 MaxMatrixCols 的计数器初值设为 10。如果尝试排 11 列或更多列的矩阵,就会得到列数过多的错误。
需要更多列时,用 \setcounter{MaxMatrixCols}{n} 提高这个上限。例如要允许最多 20 列,可以如下书写。更大的值会让 LaTeX 做更多处理,但在现代 TeX 环境中,20 左右通常几乎没有实际影响。若要恢复原状,把值重新设为 10 即可。
\setcounter{MaxMatrixCols}{20}
\[
\begin{pmatrix}
a_{1} & a_{2} & \cdots & a_{12}
\end{pmatrix}
\]这个上限只影响 amsmath 的矩阵环境,不适用于下面要讲的 array 环境;在 array 中,只要在列说明里写出所需数量的列即可。
array 环境
array 环境是一种通用网格,可以自行指定对齐方式和线条。它是正文表格环境 tabular 的数学模式版本,只能在数学模式中使用(放在 \[ \] 或 equation 环境内)。元素和 tabular 一样用 & 与 \\ 分隔,但每个元素都会作为数学内容(以文本样式)排出。
array 有一个必需参数,称为列说明。像 {ccc} 这样,每一列写一个表示对齐方式的字母:l 表示左对齐,c 表示居中,r 表示右对齐。在字母之间放入 |,就会在该位置画出竖线。因此 {l|c|r} 表示三列:左对齐、竖线、居中、竖线、右对齐。
array 本身不会添加定界符。若要把它作为矩阵用括号包围,需要手动写成 \left( … \right)(或 \left[ … \right] 等)。\left 与 \right 会根据内容高度自动伸缩定界符,因此即使矩阵有很多行,括号也能整齐覆盖整块内容。这相当于把 amsmath 矩阵环境在内部自动完成的事手动写出来。
\[
\left(\begin{array}{rrr}
1 & -2 & 3 \\
0 & 5 & -1 \\
4 & 0 & 2
\end{array}\right)
\]这个例子输出一个用圆括号包围的 3×3 矩阵。由于列说明是 {rrr},各列都右对齐,因此 -2、-1 这样的负数也能在右侧对齐,读起来更整齐。重点在于,pmatrix 总是居中,而 array 可以选择对齐方式。
增广矩阵(带竖线)
像表示线性方程组的增广矩阵那样,有时需要在矩阵中间加入竖线。amsmath 的 bmatrix 等环境不接受列说明,因此无法画出竖线;但 array 列说明中的 | 可以做到。在系数列和常数列之间放入 | 的列说明(例如 {cc|c}),再用 \left[ … \right] 包住整体即可。
\[
\left[\begin{array}{cc|c}
1 & 2 & 5 \\
3 & 4 & 6
\end{array}\right]
\]这会输出一个用方括号包围的两行增广矩阵,在第 2 列和第 3 列之间画出一条竖线。左侧的 1 2 / 3 4 是系数矩阵,竖线右侧的 5 / 6 是常数列。由于 \left[ 和 \right] 会按内容高度伸展方括号,即使增加行数也不会破坏外观。
若要用圆括号做同样的事,只需改成 \left( … \right);若要用花括号,则改成 \left\{ … \right\}。(mathtools 包也提供了更简洁书写这类增广矩阵的方法。)
矩阵中的点号(…、⋮、⋱)
写一般的 n×n 矩阵时,表示“依此类推”的省略点不可缺少。LaTeX 提供四种方向不同的点号,需要根据它们在矩阵中的位置来选择。它们都是数学模式命令。
\cdots— 位于中线高度的横向三点(⋯),用于省略同一行中的若干元素。它们与+、=处在相近高度,适合横向连续内容。\vdots— 竖向三点(⋮),用于省略列方向的内容。\ddots— 向右下延伸的对角三点(⋱),用于省略主对角线方向的内容。\ldots(以及会随上下文选择的\dots)— 位于基线上的横向三点(…),用于数字或下标序列。矩阵中通常\cdots更好看。
标准用法是把 \cdots 作为横向省略、\vdots 作为纵向省略、\ddots 作为对角线省略,分别当作矩阵元素来放置。下面是用 pmatrix 写一般 n×n 矩阵的典型例子。
\[
A =
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]这会输出一个用圆括号包围的 m×n 矩阵。在第一行、第二行和最后一行中,第 3 列的 \cdots 用中线高度的横向点填补 a_{12} 与 a_{1n} 之间的间隔;第三行中,各列的 \vdots 是竖向点,对角位置的 \ddots 是向右下的斜向点,共同表示“行和列都按同样方式继续”。a_{11} 这样的下标通过 _ 排成下标。
如果想用点线填满整行,可以使用 amsmath 的 \hdotsfor{n},它会用一排横向点跨过指定的 n 列。
正文中的小矩阵(smallmatrix)
把 pmatrix 等放进行内公式(正文中的 $ … $)会大幅撑高该行,打乱前后行距。若要在正文流中嵌入一个小矩阵,使用 amsmath 的 smallmatrix 环境。它会把元素排得小而紧凑,几乎不破坏行高。
smallmatrix 本身不加定界符,因此需要括号时要手动包住,例如 \bigl( … \bigr)。(也可以用 \left( \right),但在行内公式中,固定尺寸的 \bigl、\bigr 往往更不容易扰乱行距。)
回転行列 $\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$ を考える。这会在正文的一行中放入一个用圆括号包围的小型 2×2 旋转矩阵,几乎不扰乱行高。\cos 和 \sin 会作为正体函数名排出。