起因是前几天在做线性代数的博客笔记时,碰到了许多用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⎦ ⎤}这是个普通矩阵