【公式】KaTeX 使用指南(洛谷特供)
囧仙
·
·
个人记录
施工中。
说在前面
但是如今回望那篇文章,可以发现由于其出发点的错误(洛谷的 $\LaTeX$ 实际上由 $\KaTeX$ 支持,但是那篇文章实际使用的是维基百科的资料),导致了语法上,以及内容上的少量谬误,并由此可能产生一些误导。
这篇文章旨在系统地讲解在 $\KaTeX$ 所支持的部分里将会用到的部分。由于目标读者主要是洛谷用户,因此可能会加一些洛谷相关的说明。
**注**:本文资料来源于 [$\KaTeX$ 官网文档](https://katex.org/docs/supported.html#math-operators) ,以及[维基百科](https://zh.wikipedia.org/wiki/TeX)。也由此尽量减少了可能的错误。
## 概念辨析
- 有关 $\TeX$:
> $\TeX$ 是一个主要由美国计算机教授高德纳( $\text{Donald Ervin Knuth}$ )编写的排版系统。 $\rm TeX$ 被普遍认为是一个优秀的排版工具,尤其是对于复杂数学公式的处理。利用$\rm LaTeX$ 等终端软件,$\rm TeX$ 就能够排版出精美的文本以帮助人们辨认和查找。
- 有关 $\LaTeX$:
> $\rm LaTeX$ 是一种基于 $\rm TeX$ 的排版系统,由美国计算机科学家莱斯利·兰伯特在 $20$ 世纪 $80$ 年代初期开发,利用这种格式系统的处理,即使用户没有排版和程序设计的知识也可以充分发挥由 $\rm TeX$ 所提供的强大功能,不必一一亲自去设计或校对,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。
$\LaTeX$ 也是一种排板系统。但是其基于 $\TeX$ 系统。
- 有关 $\KaTeX$ 和 $\textrm{MathJax}$:
> $\rm KaTeX$ 是一个在 $\rm Web$ 浏览器上显示数学符号的跨浏览器的 $\rm JavaScript$ 库。它特别强调快速和易于使用。
> 它的布局基于 $\TeX$。
> 与 $\rm MathJax$ 相比,它只处理 $\LaTeX$ 的数学符号的一个更小的子集。
简而言之,为了在网页上可以渲染 $\LaTeX$ 公式,需要使用渲染引擎,这就包括 $\KaTeX$ 和 $\mathrm{MathJax}$。洛谷使用的是 $\KaTeX$,因此**一切语法应该以 $\textbf{ \KaTeX}$ 官网为准**。
- 有关 $\KaTeX$ 和 $\textrm{Markdown}$:
单从使用效果及其目的而言,这两个东西应该是风马牛不相及的。$\KaTeX$ 作为 $\LaTeX$ 的渲染引擎主要用于处理**数学公式**,而 $\textrm{Markdown}$ 作为轻量级标记语言主要用于处理网页上的文章结构及部分效果(比如说,斜体、粗体、标题行等都可以用 $\textrm{Markdown}$ 实现)。
---
**总结**:这三者都是排版系统。 $\TeX$ 是起点; $\LaTeX$ 功能与 $\TeX$ 类似,并且基于 $\TeX$ ,增加了些新的内容目标在于更容易书写;$\KaTeX$ 和 $\MathJax$ 类似,依赖于 $\LaTeX$ ,但它使用的语法是 $\LaTeX$ 的一个子集,并且主要运用于互联网上。洛谷就是使用 $\KaTeX$ 来支持数学公式。
## 一些特性
### 样式(style)
当你使用一对美元符号包裹公式时,就会自动渲染成行内样式,例如 $F=ma$(`$F=ma$`);当你使用一对双美元符号包裹公式(姑且这么称呼吧……),并且将它放在单独的一段内,就会渲染成行间样式,同时居中。例如:
$$F=ma$$
```latex
$$F=ma$$
```
但事实上,除了行内样式和行间样式,还有一些特别的样式用来处理角标。例如脚注样式($\textrm{scriptstyle}$)被用来渲染作为上标下标一类的公式,而子脚注样式($\textrm{scriptscriptstyle}$)则是脚注里使用的样式。例如下面这个例子:
$$e^{\color{red}e^{\color{blue}x}}$$
其中红色部分是 $\textrm{scriptstyle}$,而蓝色部分是 $\textrm{scriptscriptstyle}$。
我们可以使用一些指令进行样式间的转换,具体如下:
$$\begin{array}{|l|l|}
\verb!\textstyle! & \text{强制转换为行间模式}\cr
\verb!\displaystyle! & \text{强制转换为行内模式} \cr
\verb!\scriptstyle! & \text{强制转换为脚注模式} \cr
\verb!\scriptscriptstyle! & \text{强制转换为子脚注模式} \cr
\end{array}$$
当然对于一般用户,这种东西是不大用得到的,因为 $\KaTeX$ 的自动转换已经足够了。
### 模式(mode)
模式可以被分为两种,**文本模式**和**数学模式**。
当使用一对美元符号包裹一段 $\LaTeX$ 代码,就自动使用了数学模式;在 美元符号内使用 `\text{}` 语句,那么花括号内就会自动转换为文本模式。**文本模式也能被转换为数学模式**。具体而言,当你使用了一对双美元符号,并且在其中出现了 `\text{}` 语句,那么在 `\text{}` 语句里使用一对美元符号就能重新转换成数学模式。
正如字面意思,文本模式主要用于渲染解释说明性质的文字而非公式,因此相关语句的语法会略有差别。一些简要的区别如下:
- 部分语句只能在文本模式下使用,部分语句只能在数学模式下使用,也有一些可以混用。例如 `\textdollar` 仅能在文本模式下正确渲染,在数学模式下不行。这部分内容比较繁杂,不复详细列出。
- 一些符号在不同模式下渲染效果不同。例如英文字母数学模式下是意大利斜体,而文本模式下则是罗马体。例如 $text$ 和 $\text{}$(`text`,`\text{text}`)。前者的含义是 $t,e,x,t$ 四个字母所代表的值的乘积,后者代表一段文字。
### 作用域
不知道应该怎么称呼这种东西,姑且这么说吧。对于部分指令,它会作用于从它开始一直到这一层作用域结束的内容;有些指令会作用于整个所处的作用域;有些指令只会作用于紧跟着它的一个内容。例如,
$${123 \over 345}\qquad {\rm abc {\it def} ghi} \qquad {\rm \color{red}\textcolor{black} cmdysj}$$
```latex
{123 \over 345} {\rm abc {\it def} ghi} {\rm \color{red}\textcolor{black} cmdysj}
```
当使用一对花括号,它的内部就相当于一层作用域。由于不同指令的作用域不同,对于不同指令可能需要特殊考虑。对于作用于紧跟着的东西的指令,一种常见的做法就是在它其后加上一对花括号,那么该指令就将作用于这对花括号内。
$$\text{\color{red} \textcolor{black}{YSJ} AK IOI}$$
```latex
\text{\color{red} \textcolor{black}{YSJ} AK IOI}
```
### 断行
当使用数学模式时,有时由于公式过长可能会发生断行。一般而言,$\KaTeX$ 会进行自动断行。例如运算符连接处是被允许断行的,而数字内、连续的字母内是不允许断行的。例如下面这两个例子(这里有意使得第二个式子会超出这一行的宽度):
$1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25
(第一个例子是行内,第二个例子是行间(注意不同于行内模式和行间模式)。因此可以发现前者进行了自动断行,后者没有发生,而造成了溢出)
对于一连串的数字或者字母,它们会被认为是一个整体而不会发生断行:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
不过,我们可以通过人为地加入指令(\allowbreak 和 \nobreak)来允许此处允许/不允许发生自动断行。例如在第一个例子当中,插入一大堆的 \nobreak 可以做到不换行;第二个例子当中加入 \allowbreak 可以促成断行。此外,当你使用一对花括号将内容放在一起时,无论如何它们都不会发生断行了:
{1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \allowbreak aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
{1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \allowbreak aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
组合字
数量不同的减号(-)不同个数排列时的渲染效果不同。例如 \text{-,--,---}(-,--,---),它们的用途不同,例如连字符、减号、破折号等。这在 \textrm{\TeX Book} 内有说明,但我忘了。在 \TeX 里面,形如 \text{fi} 的组合同样会被认为是一个组合字,但由于 \KaTeX 并未实现,因此不再赘述。
字符集
为了保证通用性,在 \TeX 的设计之初就希望代码里仅使用 \text{ASCII} 字符集,同时很多字符是可以使用其他指令进行替代的(例如美元符号等),由此来避免可能的字符缺失、字符冲突等问题(因为当时的键盘并没有像现在这么标准)。\KaTeX 的文本模式允许使用 \text{Unicode} 字符集,数学模式部分受限。但是数学模式旧版本不支持的一些 \text{Unicode} 字符,在新版本中可以使用,并且正确渲染。
此外,\KaTeX 使用了 \char 指令让你使用字符的 \text{Unicode} 代码(\char 是十进制代码;\char" 则是十六进制)进行输入。
公式参考
角标/音标
a' & a^{\prime} & a'' & \acute{a} & \grave{a} & \check{a} & \hat{a} \cr
\bar{a} &\breve{a} & \dot{a} & \ddot{a} & \tilde{a} & \mathring{a} & \vec{a}
\end{gathered}
a' a^{\prime} a'' \acute{a} \grave{a} \check{a} \hat{a}
\bar{a} \breve{a} \dot{a} \ddot{a} \tilde{a} \mathring{a} \vec{a}
事实上,第一个 a' 和第二个 a^{\prime} 是一样的。这主要是防止可能的冲突。
\widehat{ABC} & \overleftarrow{ABC} &\underleftarrow{ABC} &\overleftharpoon{ABC} &\widetilde{ABC} \cr
\widecheck{ABC} & \overrightarrow{ABC} &\underrightarrow{ABC} &\overrightharpoon{ABC} &\utilde{ABC}
\end{gathered}
\widehat{ABC} \overleftarrow{ABC} \underleftarrow{ABC} \overleftharpoon{ABC} \widetilde{ABC}
\widecheck{ABC} \overrightarrow{ABC} \underrightarrow{ABC} \overrightharpoon{ABC} \utilde{ABC}
这些公式是存在加长版本的。\KaTeX 提供的这些箭头可以适配其内容的长度。
\Overrightarrow{AB}
\end{gathered}
\Overrightarrow{AB}
$$\begin{gathered}
\overgroup{AB} & \overleftrightarrow{AB} & \overline{AB} & \overbrace{AB} & \overlinesegment{AB} \cr
\undergroup{AB} & \underleftrightarrow{AB} & \underline{AB} & \underbrace{AB} & \underlinesegment{AB}
\end{gathered}$$
```latex
\overgroup{AB} \overleftrightarrow{AB} \overline{AB} \overbrace{AB} \overlinesegment{AB}
\undergroup{AB} \underleftrightarrow{AB} \underline{AB} \underbrace{AB} \underlinesegment{AB}
```
---
事实上,在文本模式里面你可以使用一些更加简单的方法用于描述音标。
$$\begin{gathered}
\text{\'{a}} & \text{\`{a}} & \text{\^{a}} & \text{\~{a}} & \text{\={a}} & \text{\u{a}} & \text{\.{a}} & \text{\"{a}} & \text{\r{a}} & \text{\H{a}} & \text{\v{a}}
\end{gathered}$$
```latex
\'{a} \`{a} \^{a} \~{a} \={a} \u{a} \.{a} \"{a} \r{a} \H{a} \v{a}
```
### 括号/上下箭头
$$\begin{gathered}
\lparen\cdots\rparen & \lbrack\cdots\rbrack & \lbrace\cdots\rbrace & \langle\cdots\rangle & \vert\cdots\vert & \Vert\cdots\Vert & \lVert\cdots\rVert
\end{gathered}$$
```latex
\lparen\rparen \lbrack\rbrack \lbrace\rbrace \langle\rangle \vert\vert \Vert\Vert \lVert\rVert
```
$$\begin{gathered}
\lceil\cdots\rceil & \lfloor\cdots\rfloor & \lmoustache\cdots\rmoustache & \lgroup\cdots\rgroup & \ulcorner\cdots\urcorner & \llcorner\cdots\lrcorner
\end{gathered}$$
```latex
\lceil\rceil \lfloor\rfloor \lmoustache\rmoustache \lgroup\rgroup \ulcorner\urcorner\llcorner\lrcorner
```
$$\begin{gathered}
\lBrace\cdots\rBrace & \left.\cdots\right. & \llbracket\rrbracket
\end{gathered}$$
```latex
\left.\cdots\left. \llbracket\rrbracket
```
**注**:`\left.\cdots\right.` 比较特殊,下文提到 `\left\right` 指令会用到。
$$\begin{gathered}
\uparrow & \downarrow & \updownarrow & \Uparrow & \Downarrow & \Updownarrow & \backslash
\end{gathered}$$
```latex
\uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow \backslash
```
$$\left(ABCD \middle|\Large 1234\right)$$
$$\left(ABCD \middle\{ \Large 1234\right]$$
$$\left(ABCD \middle| \Large 1234\right.$$
```latex
\left(ABCD \middle| \Large 1234\right)
\left(ABCD \middle\{ \Large 1234\right]
\left(ABCD \middle| \Large 1234\right.
```
你可以使用 `\left \middle \right` 指令进行括号的适配。特别地,如果只需要半边括号,你可以用 `\left.` 或者 `\right.` 以替代那一边的括号。不过实测 `\middle` 指令存在一定的 $\text{bug}$ ,例如不能根据 `\middle` 左侧内容进行适配……
$$\begin{gathered}
( &\big( &\Big( &\bigg( &\Bigg(
\end{gathered}$$
```latex
( \big( \Big( \bigg( \Bigg(
```
你可以使用这种方式进行手动调节。其他大小指令如下表:
```latex
\left \big \bigl \bigm \bigr
\middle \Big \Bigl \Bigm \Bigr
\right \bigg \biggl \biggm \biggr
\Bigg \Biggl \Biggm \Biggr
```
### 环境( $\textbf{Environment}$ )
这部分内容在 $\LaTeX$ 公式大全中**并不全面**(汗),所以最好参考下面资料。
#### 矩阵类
$$\begin{gathered}\begin{matrix}
a & b \cr
c & d
\end{matrix} & \begin{pmatrix}
a & b \cr
c & d
\end{pmatrix} & \begin{vmatrix}
a & b \cr
c & d
\end{vmatrix} & \begin{Bmatrix}
a & b \cr
c & d
\end{Bmatrix} & \begin{bmatrix}
a & b \cr
c & d
\end{bmatrix} & \begin{Vmatrix}
a & b \cr
c & d
\end{Vmatrix} & \begin{smallmatrix}
a & b \cr
c & d
\end{smallmatrix}\end{gathered}$$
其中,最原始的矩阵如下:
```latex
\begin{matrix}
a & b \cr
c & d
\end{matrix}
```
其余矩阵的环境,分别为:
```latex
pmatrix vmatrix Bmatrix bmatrix Vmatrix smallmatrix
```
直接将 `matrix` 替换成相应环境即可。
#### 排板类
$$\begin{gathered}
\begin{aligned}
a&=b+c \cr
d+e&=f
\end{aligned} & \begin{gathered}
a=b \\
e=b+c
\end{gathered} & \begin{alignedat}{2}
10&x+ &3&y = 2 \\
3&x+&13&y = 4
\end{alignedat}
\end{gathered}$$
```latex
\begin{aligned}
a&=b+c \cr
d+e&=f
\end{aligned}
\begin{gathered}
a=b \cr
e=b+c
\end{gathered}
\begin{alignedat}{2}
10&x+ &3&y = 2 \cr
3&x+&13&y = 4
\end{alignedat}
```
- 第一个环境是 `aligned` 。它会在每个 `&` 处进行对齐。左对齐和右对齐交替。
- 第二个环境是 `gathered` 。它的作用是,整个环境中每行内容居中。
- 第三个环境是 `alignedat` 。这和 `aligned` 略有不同。`alignedat` 列与列间不包含空格;并且 `alignedat` 需要你填写使用的列的数量。
(其实我也不是很懂 `aligned` 和 `alignedat` 的区别……建议实践出真知。)
#### 情况分类
$$\begin{gathered}
x = \begin{cases}
a &\text{if } b \cr
c &\text{if } d
\end{cases}
\end{gathered}$$
```latex
x = \begin{cases}
a &\text{if } b \cr
c &\text{if } d
\end{cases}
```
这是非常常见的大括号环境。同样地,其使用 `&` 进行对齐,效果如 `aligned` 。事实上, $\KaTeX$ 是支持 `rcases` 的,但由于你谷版本过旧不支持,所以暂且不表。
#### 数组
$$\begin{gathered}\begin{array}{cc}
a & b \cr
c & d
\end{array} &
\def\arraystretch{1.5}
\begin{array}{c:c|c}
a & b & c \cr \hline
d & e & f \cr
\hdashline
g & h & i
\end{array}\end{gathered}$$
```latex
\begin{array}{cc}
a & b \cr
c & d
\end{array}
\def\arraystretch{1.5}
\begin{array}{c:c|c}
a & b & c \cr \hline
d & e & f \cr
\hdashline
g & h & i
\end{array}
```
这是 $\KaTeX$ 中功能最丰富的环境。具体用法和 `matrix` 类似,但是支持以下功能:
- 在 `\begin{array}` 后面加上参数,其中 `l c r` 分别表示这一列**左对齐、居中、右对齐**; `: |` 分别表示这一列的线是虚线还是竖线(如果不写,就没有线;你也可以在两列之间加上多条线)。
- 你还可以使用 `\def\arraystrectch{XXX}` 指令调节行列间距。
- 你还可以在行之间插入 `\hline,\hdashline` ,分别表示实线、虚线。
- 由于技术原因, $\KaTeX$ 暂不支持单元格合并。
---
你可以使用 `\\,\cr,\\[XXX],\cr[XXX]` 用于换行。特别地, `[XXX]` 可以用来指定行高,使用 $\KaTeX$ 单位(下面会提到)。
此外, $\KaTeX$ 还支持 `darray,dcases` 环境。与 `array` 和 `cases` 的区别在于,前者环境内**使用数学模式**,而后者则为文本模式。例如以下例子:
$$\begin{gathered}
f(n)=\begin{cases} 1 & n = 1 \cr \sum_{i=1}^{n-1} f(i) & \text{Otherwise.}\end{cases} &
f(n)=\begin{dcases} 1 & n = 1 \cr \sum_{i=1}^{n-1} f(i) & \text{Otherwise.}\end{dcases}
\end{gathered}$$
```latex
f(n)=\begin{cases} 1 & n = 1 \cr \sum_{i=1}^{n-1} f(i) & \text{Otherwise.}\end{cases}
f(n)=\begin{dcases} 1 & n = 1 \cr \sum_{i=1}^{n-1} f(i) & \text{Otherwise.}\end{dcases}
```
### ~~HTML~~(你谷不支持,略过)
### 希腊字母
$$\def{\arraystretch}{1.5}
\begin{array}{l|c|c|c|c} \hline\hline
\textrm{alpha } & \alpha & & \Alpha & A \cr\hline
\textrm{beta } & \beta & & \Beta & B \cr\hline
\textrm{gamma } & \gamma & & \Gamma & \varGamma \cr\hline
\textrm{delta } & \delta & & \Delta & \varDelta \cr\hline
\textrm{epsilon} & \epsilon & \varepsilon & \Epsilon & E \cr\hline
\textrm{zeta } & \zeta & & \Zeta & Z \cr\hline
\textrm{eta } & \eta & & \Eta & E \cr\hline
\textrm{theta } & \theta & \vartheta & \Theta & \varTheta \cr\hline
\textrm{iota } & \iota & & \Iota & I \cr\hline
\textrm{kappa } & \kappa & \varkappa & \Kappa & K \cr\hline
\textrm{lambda } & \lambda & & \Lambda & \varLambda \cr\hline
\textrm{mu } & \mu & & \Mu & M \cr\hline
\textrm{nu } & \nu & & \Nu & N \cr\hline
\textrm{xi } & \xi & & \Xi & \varXi \cr\hline
\textrm{omicron} & \omicron & & \Omicron & O \cr\hline
\textrm{pi } & \pi & \varpi & \Pi & \varPi \cr\hline
\textrm{rho } & \rho & \varrho & \Rho & P \cr\hline
\textrm{sigma } & \sigma & \varsigma & \Sigma & \varSigma \cr\hline
\textrm{tau } & \tau & & \Tau & T \cr\hline
\textrm{upsilon} & \upsilon & & \Upsilon & \varUpsilon\cr\hline
\textrm{phi } & \phi & \varphi & \Phi & \varPhi \cr\hline
\textrm{chi } & \chi & & \Chi & X \cr\hline
\textrm{psi } & \psi & & \Psi & \varPsi \cr\hline
\textrm{omega } & \omega & & \Omega & \varOmega \cr\hline
& \kern{15pt}\mathclap{\thetasym}\kern{15pt} & \kern{15pt}\mathclap{\digamma}\kern{15pt} & \kern{30pt} & \kern{30pt}\cr\hline\hline
\end{array}$$
```latex
\alpha \Alpha A
\beta \Beta B
\gamma \Gamma \varGamma
\delta \Delta \varDelta
\epsilon \varepsilon \Epsilon E
\zeta \Zeta Z
\eta \Eta E
\theta \vartheta \Theta \varTheta
\iota \Iota I
\kappa \varkappa \Kappa K
\lambda \Lambda \varLambda
\mu \Mu M
\nu \Nu N
\xi \Xi \varXi
\omicron \Omicron O
\pi \varpi \Pi \varPi
\rho \varrho \Rho P
\sigma \varsigma \Sigma \varSigma
\tau \Tau T
\upsilon \Upsilon \varUpsilon
\phi \varphi \Phi \varPhi
\chi \Chi X
\psi \Psi \varPsi
\omega \Omega \varOmega
\thetasym \digamma
```
### 其他字母
$$\begin{gathered}
\imath & \jmath & \aleph & \alef & \alefsym & \beth & \gimel & \daleth
\end{gathered}$$
```latex
\imath \jmath \aleph \alef \alefsym \beth \gimel \daleth
```
$$\begin{gathered}
\eth & \nabla & \partial & \Game & \Finv & \ell & \hbar & \hslash
\end{gathered}$$
```latex
\eth \nabla \partial \Game \Finv \ell \hbar \hslash
```
$$\begin{gathered}
\Im & \image & \wp & \weierp & \Re & \real
\end{gathered}$$
```latex
\Im \image \wp \weierp \Re \real
```
$$\begin{gathered}
\Bbbk & \N & \natnums & \R & \reals & \Reals & \Z & \cnums & \Complex
\end{gathered}$$
```latex
\Bbbk \N \natnums \R \reals \Reals \Z \cnums \Complex
```
$$\begin{gathered}
\text{\aa} & \text{\AA} & \text{\ae} & \text{\AE} & \text{\oe} & \text{\OE}
\end{gathered}$$
```latex
\text{\aa} \text{\AA} \text{\ae} \text{\AE} \text{\oe} \text{\OE}
```
$$\begin{gathered}
\text{\o} & \text{\O} & \text{\ss} & \text{\i} & \text{\j}
\end{gathered}$$
```latex
\text{\o} \text{\O} \text{\ss} \text{\i} \text{\j}
```
### 布局
#### 注释类
$$\begin{gathered}
\cancel{5} & \bcancel{5} & \xcancel{ABC} & \sout{abc} & \not =
\end{gathered}$$
```latex
\cancel{5} \bcancel{5} \xcancel{ABC} \sout{abc} \not =
```
$$\begin{gathered}
\overbrace{a+b+c}^{\text{note}} & \underbrace{a+b+c}_{\text{note}} & \boxed{\pi=\frac c d}
\end{gathered}$$
```latex
\overbrace{a+b+c}^{\text{note}} \underbrace{a+b+c}_{\text{note}} \boxed{\pi=\frac c d}
```
$$\tag{hi} x+y^{2x}$$
$$\tag*{hi} x+y^{2x}$$
```latex
\tag{hi} x+y^{2x}
\tag*{hi} x+y^{2x}
```
#### 垂直布局
$$\begin{gathered}
x_n & e^x & a_u^o & a \atop b & a\raisebox{0.25em}{b}c
\end{gathered}$$
```latex
x_n e^x a_u^o a \atop b a\raisebox{0.25em}{b}c
```
$$\begin{gathered}
\stackrel{!}{=} & \overset{!}{=} & \underset{!}{=} & \sum_{\substack{0<i<m\cr 0<j<n}}
\end{gathered}$$
```latex
\stackrel{!}{=} \overset{!}{=} \underset{!}{=} \sum_{\substack{0<i<m\cr 0<j<n}}
```
### 重叠
$$\begin{gathered}
{=}\mathllap{/\,} & \mathrlap{\,/}{=} & \left(x^{\smash{2}}\right) & \sqrt{\smash[b]{y}}
\end{gathered}$$
```latex
{=}\mathllap{/\,} \mathrlap{\,/}{=} \left(x^{\smash{2}}\right) \sqrt{\smash[b]{y}}
```
这部分对于大多数用户而言可能些许生疏。它的用途是,让一部分字符在显示的时候**不产生碰撞体积**。`llap,clap,rlap` 分别对应着左对齐、右对齐、居中。它们之间的区别如下:
$$\begin{gathered}
\boxed{\mathllap{12345}\text{\_}} & \kern{40pt}
\boxed{\mathclap{12345}\text{\_}} & \kern{40pt}
\boxed{\mathrlap{12345}\text{\_}}
\end{gathered}$$
```latex
\boxed{\mathllap{12345}\text{\_}}
\boxed{\mathclap{12345}\text{\_}}
\boxed{\mathrlap{12345}\text{\_}}
```
这里用 `\boxed` 标出了实际的碰撞体积。
对于 `smash`,他主要可以用于消除竖直方向上的碰撞箱,例如下面这个例子:
$$\begin{gathered}
\begin{cases}
A \begin{cases}B \cr C \begin{cases} D \cr E\end{cases}\end{cases} \cr F
\end{cases} &
\begin{cases}
A \smash{\begin{cases}B \cr C \smash{\begin{cases} D \cr E\end{cases}}\end{cases}} \cr F
\end{cases} &
\begin{cases}
A \smash{\begin{cases}B \cr C \smash[b]{\begin{cases} D \cr E\end{cases}}\end{cases}} \cr F
\end{cases}
\end{gathered}$$
```latex
\begin{cases} A \begin{cases}B \cr C \begin{cases} D \cr E\end{cases}\end{cases} \cr F \end{cases}
\begin{cases} A \smash{\begin{cases}B \cr C \smash{\begin{cases} D \cr E\end{cases}}\end{cases}} \cr F \end{cases}
\begin{cases} A \smash{\begin{cases}B \cr C \smash[b]{\begin{cases} D \cr E\end{cases}}\end{cases}} \cr F \end{cases}
```
除了 `\mathllap,\mathclap,\mathrlap`,$\KaTeX$ 还提供了 `\llap,\clap,\rlap`,但是仅限于文本模式;前者则是数学模式与文本模式均可。
### 空格
$$\def{\arraystretch}{1.8}
\begin{array}{l|l|l||l|l|l}\hline\hline
\verb!\thinspace! & \verb!\,! & \frac{3}{18}\text{ em} & \verb!\negthinspace! & \verb!\!\texttt{!} & -\frac{3}{18}\text{ em}\cr\hline
\verb!\medspace! & \begin{gathered}\verb!\>! \cr[-4pt] \verb!\:!\end{gathered} & \frac{4}{18}\text{ em} & \verb!\negmedspace! & & -\frac{4}{18}\text{ em}\cr\hline
\verb!\thickspace! & \verb!\;! & \frac{5}{18}\text{ em} & \verb!\negthickspace! & & -\frac{5}{18}\text{ em}\cr\hline
\verb!\enspace! & & \frac{1}{2}\text{ em}\cr\hline\hline
\end{array}
$$
### 集合与逻辑
$$
\def\arraystretch{1.5}
\begin{array}{l|l|l|l|l|l|l|l|l|l}\hline\hline
\forall & \begin{aligned}\verb!\forall!\end{aligned} &
\exist & \begin{aligned}&\verb!\exists! \cr&\verb!\exist!\end{aligned} & \nexists & \verb!\nexists! & \empty & \begin{aligned}&\verb!\empty! \cr&\verb!\emptyset!\end{aligned} & \varnothing &\verb!varnothing! \cr\hline\hline
\in & \begin{aligned}&\verb!\in!\cr[-4pt]& \verb!\isin!\end{aligned} & \subset & \verb!\subset! & \to & \verb!\to! & \land & \verb!land! & \because & \verb!because!\cr\hline
\ni & \verb!\ni! & \supset & \verb!\subset! & \gets & \verb!\gets! & \lor & \verb!lor! & \therefore & \verb!therefore!\cr\hline\hline
\nexists & \verb!\nexists! & \notin & \verb!\notin! & \notni & \verb!\notni! & \neg & \begin{aligned}&\verb!neg!\cr[-4pt]&\verb!lnot!\end{aligned} & \complement & \verb!\complement!\cr\hline
\implies & \verb!\implies! & \impliedby & \verb!\impliedby! & \iff & \verb!\iff! & \mid & \verb!\mid! & \mapsto & \verb!\mapsto!\cr\hline\hline
\end{array}
$$
$$
\def\arraystretch{1.5}
\begin{array}{c|c}\hline\hline
\leftrightarrow & \verb!\leftrightarrow!
\cr\hline\hline
\end{array}
$$
### 大运算符
$$
\def{\arraystretch}{1.5}
\begin{array}{c|c|c|c|c}\hline\hline
\kern{15pt}\mathclap{\sum}\kern{15pt} & \kern{15pt}\mathclap{\prod}\kern{15pt} & \kern{15pt}\mathclap{\coprod}\kern{15pt} & \kern{30pt} & \kern{30pt} \cr\hline
\int & \iint & \iiint & \smallint & \intop\cr\hline
\oint & \oiint & \oiiint \cr\hline
\bigvee & \bigwedge & \bigcap & \bigcup & \bigsqcup \cr\hline\hline
\end{array}
$$
```latex
\sum \prod \coprod
\int \iint \iiint \smallint \intop
\oint \oiint \oiiint
\bigvee \bigwedge \bigcap \bigcup \bigsqcup
```
`\int,\intop,\smallint` 是存在区别的,主要体现在行内数学模式里。
$$\begin{gathered}\int _l^r &\intop_{l}^r &\smallint_{l}^r\end{gathered}$$
```latex
\int _l^r \intop_{l}^r \smallint_{l}^r
```