## 问题描述
在使用`mkdocs`编写博客的时候,可以使用`katex`等插件进行Latex公式渲染。但有时使用该插件时会出现渲染错误问题。如输入
```markdown
这是一个矩阵
$$
\begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix}
$$
```
会显示为

可见换行全部失效。而当输入
```markdown
这是一个多行的公式
$$
\begin{cases}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \\
\nabla \cdot \mathbf{B} &= 0 \\
\nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \\
\nabla \times \mathbf{B} &= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}
\end{cases}
$$
```
会显示为

假如通过添加空行进行换行,即输入
```markdown
这是一个多行的公式
$$
\begin{cases}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \\
\nabla \cdot \mathbf{B} &= 0 \\
\nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \\
\nabla \times \mathbf{B} &= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}
\end{cases}
$$
```
就会直接失效,渲染为

## 解决方案
解决方案十分简单,只要在公式前后添加空行即可。例如
```markdown
这是一个多行的公式
$$
\begin{cases}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \\
\nabla \cdot \mathbf{B} &= 0 \\
\nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \\
\nabla \times \mathbf{B} &= \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}
\end{cases}
$$
```
就能正常编译和渲染。

## 原因分析
问题的关键在于:MkDocs 并不是直接把 Markdown 交给 KaTeX/MathJax,而是先用 Python-Markdown 把 Markdown 转成 HTML。Markdown 在语法层面是按块来组织内容的:一段文字是一个段落块,空行用来分隔不同的块。
显示公式在 MkDocs 常见配置里(比如 Material 推荐的 pymdownx.arithmatex)只有在它被识别成一个独立块时,才会被“保护”起来——也就是把这段 TeX 从 Markdown 的进一步解析中隔离出去,变成带特定标记的占位节点(例如带 `class` 的 `<span>`/`<div>` 或通用的占位结构)。等页面加载后,KaTeX 的 auto-render 或 MathJax 再去扫描这些占位节点,把其中的 TeX 排版成数学公式。
如果公式块前后没有空行,Markdown 往往会把它当作仍然属于上一段落的一部分,于是整段 TeX 会被塞进普通的 HTML 段落(例如 `<p>...</p>`)里。此时 HTML 会折叠源码里的换行,`\\` 所在的结构也可能不再以“显示数学块”的方式交给渲染器,最终看起来就是“换行全部失效/挤在一起”。
同样地,在公式内部插入空行也会触发另一层问题:在 Markdown 里,空行意味着一个新的块。`arithmatex` 这类插件为了避免一个公式被 Markdown 分裂成多个段落块,通常要求块公式内部不能出现空行。一旦插了空白行,Markdown 解析器很可能会把一个公式拆成多个块,于是这段 TeX 就不会被正确保护,最后要么直接原样输出成文本,要么被 Markdown/HTML 的规则破坏掉,渲染器也就无法识别为一段完整数学公式,因此表现为“直接失效”。
评论
留下评论
邮箱仅用于识别,不会公开
$...$行内 ·$$...$$独立公式