起因是前几天在做线性代数的博客笔记时,碰到了许多用Katex写矩阵的需要。因为许多功能尝试了不少时间才完成实现,于是准备及时做一个备忘录,以便于以后的公式写作。 Katex的官方手册参照
基本
有两种方法来实现矩阵的拼写,一种是使用 matrix环境(矩阵),另一种是使用array环境(数组)。array 的灵活性比matrix要更高一些。
方法 | 展示 |
---|---|
\begin{matrix} a & b \\ c & d \end{matrix} |
a b c d \begin{matrix} a & b \\ c & d \end{matrix} acbd |
\begin{array}{cc} a & b \\ c & d \end{array} |
a b c d \begin{array}{cc} a & b \\ c & d \end{array} acbd |
两种方式均以 & 作为同一行列元素的分割,用 \ \ 作为不同行的分割。 array的第二个大括号填入需要的列数,如有两列就填入cc,也可不填。
括号
可在matrix前加上不同的 前缀 来匹配不同的括号,无前缀时无括号。
前缀 | 展示 |
---|---|
\begin{bmatrix} & \end{bmatrix} |
方括号 [ ] \begin{bmatrix} & \end{bmatrix} [] |
\begin{Bmatrix} & \end{Bmatrix} |
大括号 { } \begin{Bmatrix} & \end{Bmatrix} { } |
\begin{pmatrix} & \end{pmatrix} |
圆括号 ( ) \begin{pmatrix} & \end{pmatrix} () |
\begin{vmatrix} & \end{vmatrix} |
行列式 ∣ ∣ \begin{vmatrix} & \end{vmatrix} ∣ ∣∣ ∣ |
\begin{Vmatrix} & \end{Vmatrix} |
范数 ∥ ∥ \begin{Vmatrix} & \end{Vmatrix} ∥ ∥∥ ∥ |
对于array而言,则需另在其两侧添加相应的 标记符号\left 和 \right ,来匹配相应的括号形式。如
\left[ \begin{
array}{
cc} a & b \\ c & d \end{
array}\right]
[ a b c d ] \left[ \begin{array}{cc} a & b \\ c & d \end{array} \right] [acbd]
由此可见,灵活性的提高也以复杂度的提高为代价。对于一般性的矩阵,matrix 能更简便地满足使用需求。如果不想使用标记符号来添加括号,也可以把array视为matix环境下的一个元素。即
\begin{
bmatrix} \begin{
array}{
cc} a & b \\ c & d \end{
array}\end{
bmatrix}
[ a b c d ] \begin{bmatrix} \begin{array}{cc} a & b \\ c & d \end{array}\end{bmatrix} [acbd]
分割线
在array环境中,能方便地添加水平分割线和竖直分割线。
[ 1 2 3 4 5 6 7 8 9 ] \left[ \begin{array}{c:c|c} 1 & 2 & 3 \\ \hline 4 & 5 & 6 \\ \hdashline 7 & 8 & 9 \end{array} \right] ⎣
⎡147258369⎦
⎤
其中c表示列之间的分隔,用 :来表示竖虚线, 用 | 来表示竖实线。\ \ 表示行之间的分隔, 用 \hline 来表示横实线,用 \hdashline 来表示虚横线。
\left[
\begin{
array}{
c:c|c}
1 & 2 & 3 \\
\hline
4 & 5 & 6 \\
\hdashline
7 & 8 & 9
\end{
array}
\right]
省略号
对于大型矩阵,经常有用省略号去略写矩阵元素的需求,如这样一个循环矩阵的例子
\begin{
bmatrix}
c_{
0}&c_{
n-1}&c_{
n-2}&\cdots &c_{
1}\\
c_{
1}&c_{
0}&c_{
n-1} & \cdots &c_{
2}\\
c_{
2}&c_{
1}&c_{
0}&\cdots &c_3 \\
\vdots &\vdots& \vdots&\ddots &\vdots \\
c_{
n-1}&c_{
n-2}&c_{
n-3}&\dots &c_{
0}
\end{
bmatrix}
[ c 0 c n − 1 c n − 2 … c 1 c 1 c 0 c n − 1 ⋯ c 2 c 2 c 1 c 0 ⋯ c 3 ⋮ ⋮ ⋮ ⋱ ⋮ c n − 1 c n − 2 c n − 3 … c 0 ] \begin{bmatrix} c_{0}&c_{n-1}&c_{n-2}&\dots &c_{1}\\ c_{1}&c_{0}&c_{n-1} & \cdots &c_{2}\\ c_{2}&c_{1}&c_{0}&\cdots &c_3 \\ \vdots &\vdots& \vdots&\ddots &\vdots \\ c_{n-1}&c_{n-2}&c_{n-3}&\dots &c_{0} \end{bmatrix} ⎣
⎡c0c1c2⋮cn−1cn−1c0c1⋮cn−2cn−2cn−1c0⋮cn−3…⋯⋯⋱…c1c2c3⋮c0⎦
⎤
列出常用的四种省略号,注意反斜向方向无一般性的命令支持(\iddots命令需相应宏包支持),可直接复制相应的Unicode字符 ⋰ 实现。
省略号 | 展示 |
---|---|
水平方向 \cdots |
⋯ \cdots ⋯ |
竖直方向 \vdots |
⋮ \vdots ⋮ |
斜向方向 \ddots |
⋱ \ddots ⋱ |
(特)反斜向方向 直接复制⋰ |
⋰ ⋰ ⋰ |
进阶
学会括号、分割线、省略号后基本就能处理大多数的矩阵拼写,但有时还会面临一些特殊的应用,如分块和标注。
分块
利用 矩阵嵌套 的想法,我们能打出矩阵与其子矩阵间的层级关系。
[ a 11 a 22 I 0 b 11 b 12 b 21 b 22 ] 4 × 4 \begin{bmatrix} \begin{matrix} a_{11} & \\ & a_{22} \end{matrix} & \LARGE{I} \\ \LARGE{0} & \begin{matrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{matrix} \\ \end{bmatrix}_{4 \times 4} ⎣
⎡a11a220Ib11b21b12b22⎦
⎤4×4
对于这个 4 × 4 4 \times 4 4×4的矩阵而言,左上角是一个对角阵,左下角是一个 0 0 0矩阵,右上角是一个单位阵 I I I,右下角是一个普通的矩阵。
\begin{
bmatrix}
\begin{
matrix} a_{
11} & \\ & a_{
22} \end{
matrix} & \Large{
I} \\
\Large{
0} & \begin{
matrix} b_{
11} & b_{
12} \\ b_{
21} & b_{
22} \end{
matrix} \\
\end{
bmatrix}_{
4 \times 4}
由于用了放大的字母来表示子矩阵,故索引常见放大字体的层次关系(从最大到正常)如下
大小 | 展示 |
---|---|
\Huge{AB} |
A B \Huge{AB} AB |
\huge{AB} |
A B \huge{AB} AB |
\LARGE{AB} |
A B \LARGE{AB} AB |
\Large{AB} |
A B \Large{AB} AB |
\large{AB} |
A B \large{AB} AB |
\normalsize{AB} |
A B \normalsize{AB} AB |
标注
可以用 \textcolor 来区别颜色,或用 \colorbox 来区别高亮色彩,两者可以彼此嵌套使用。也可以用 \boxed 命令框选一个元素。
\begin{
bmatrix}
\textcolor{
red}{
a} & \colorbox{
aqua}{
b} \\
\textcolor{
lime}{
\colorbox{
yellow}{
c}} &\boxed{
d}
\end{
bmatrix}
[ a b c d ] \begin{bmatrix} \textcolor{red}{a} & \colorbox{aqua}{b} \\ \textcolor{lime}{\colorbox{yellow}{c}} &\boxed{d} \end{bmatrix} [acbd]
这些命令应该足够完成 矩阵中特定元素彼此的标记区分。其中完整的颜色关键词参见 Color keywords,将一些常用的颜色截图如下
还有一种场景需要我们在矩阵的旁边加上必要的注记。左右的注记是比较简单的,继续沿用 \left 和 \right 即可。
\left.\begin{
bmatrix}
a & b \\
c & d
\end{
bmatrix}\right\} \tiny{
这是一个在右边的注记}
[ a b c d ] } 这是一个在右边的注记 \left.\begin{bmatrix} a & b \\ c & d \end{bmatrix}\right\} \tiny{这是一个在右边的注记} [acbd]}这是一个在右边的注记
对于上下的标注,使用 /overbrace 和 /underbrace 即可。
\overbrace{
\begin{
bmatrix}
a & b \\
c & d
\end{
bmatrix}}^{
这是一个在上面的注记}
[ a b c d ] ⏞ 这是一个在上面的注记 \overbrace{\begin{bmatrix} a & b \\ c & d \end{bmatrix}}^{这是一个在上面的注记} [acbd]
这是一个在上面的注记
看得出来,注记是对整个矩阵进行的。因此对矩阵的部分进行标注时,可以借鉴分块矩阵的实现思路,将其类比成对子矩阵的标注。
\begin{
bmatrix}
\begin{
matrix} a_{
11} & \\ & a_{
22} \end{
matrix} & \LARGE{
I} \\
\LARGE{
0} & \begin{
matrix} b_{
11} & b_{
12} \\ b_{
21} & b_{
22} \end{
matrix} \\
\end{
bmatrix}
\begin{
matrix} \\ \\
\left.\begin{
matrix} \end{
matrix}\right\}\tiny{
这是个普通矩阵}
\end{
matrix}
[ a 11 a 22 I 0 b 11 b 12 b 21 b 22 ] } 这是个普通矩阵 \begin{bmatrix} \begin{matrix} a_{11} & \\ & a_{22} \end{matrix} & \LARGE{I} \\ \LARGE{0} & \begin{matrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{matrix} \\ \end{bmatrix} \begin{matrix} \\ \\ \left.\begin{matrix} \end{matrix}\right\}\tiny{这是个普通矩阵} \end{matrix} ⎣ ⎡a11a220Ib11b21b12b22⎦ ⎤}这是个普通矩阵