LaTeX (GitHub) 是一个完整的文档排版系统,包括页面布局、章节结构、引用、目录等一整套命令体系,其中数学公式是其中的一个子集。
KaTeX (GitHub) 是一个用于在网页上渲染 LaTeX 数学公式的 JavaScript 库。
Next.js + MDX + 静态导出,实现数学公式渲染,使用:remark-math + rehype-katex + katex。
这是一套标准、轻量的方案,KaTeX 可以在构建阶段直接生成公式 HTML,不依赖浏览器端 JS,适合 output: 'export' 静态导出站点。
Markdown/MDX 数学公式渲染流水线:
Markdown/MDX 文本 (含 $...$ 或 $$...$$)
│
▼
remark-math ← 在 remark(Markdown AST)阶段,识别数学公式语法
│ 把 $...$ / $$...$$ 标记为特殊的 AST 节点(math/inlineMath)
▼
(remark → rehype 转换,AST 从 mdast 转为 hast)
│
▼
rehype-katex ← 在 rehype(HTML AST)阶段,找到这些数学节点
│ 调用 katex 库把公式字符串编译成 HTML/CSS 结构
▼
katex ← 实际执行渲染计算的核心库
│ (生成对应的 HTML + KaTeX 自带的 CSS 样式)
▼
最终渲染出的数学公式(网页上可见)-
remark-math:remark是处理Markdown的插件生态,属于unified的一部分;- 该插件负责识别,扫描
md、mdx文件,找到$...$和$$...$$标记的数学公式,把它们标记成特殊节点,插入到 Markdown 的抽象语法树(AST)里。 - 不做什么渲染处理,仅仅负责识别和标记;
-
rehype-katex:rehype是处理HTML的插件生态,属于unified的一部分;- 该插件负责转换,在
HTML AST阶段,找到上一步的标记,调用katex库把公式字符串编译成HTML/CSS结构; - 是"胶水层",负责把
katex这个库接入到unified/remark/rehype的处理流水线里;
-
katex:- 实际执行渲染计算的核心库,接收
LaTeX语法的字符串(如\frac{1}{2}),生成对应的HTML + KaTeX自带的CSS样式; - 是"渲染层",负责把公式字符串编译成
HTML/CSS结构; - 本身跟
Markdown、MDX没有任何关系,是独立的库,可以脱离这套流水线单独使用;
- 实际执行渲染计算的核心库,接收
1. 安装依赖
pnpm add remark-math rehype-katex katexremark-math:让 Markdown / MDX 认识$...$和$$...$$rehype-katex:把数学表达式转换成 KaTeX HTMLkatex:提供公式渲染所需的 CSS / 字体等
2. 在 MDX 配置中加入插件
next.config.mjs 大致如下:
const withMDX = createMDX({
options: mdxOptions,
})
const mdxOptions = {
remarkPlugins: [
['remark-gfm', {}],
['remark-math', {}],
],
rehypePlugins: ['rehype-slug', ['rehype-pretty-code', rehypePrettyCodeOptions], 'rehype-katex'],
};3. 引入 KaText CSS
在:
app/layout.tsx里加入:
import 'katex/dist/katex.min.css'rehype-katex 负责生成 HTML,但公式的排版样式仍然需要 KaTeX CSS。
4. 基本语法
要掌握 LaTeX 数学语法。
行内公式
MDX:
模型的参数量可以表示为 $N = 27 \times 10^9$。显示:
模型的参数量可以表示为 。
独立公式
MDX:
$$
E = mc^2
$$会独占一行显示。
分数
例如:
$$
\frac{1}{2}
$$就是:
复杂一点:
$$
\frac{a+b}{c+d}
$$得到:
关键语法:
\frac{分子}{分母}其他
| 用途 | MDX / LaTeX |
|---|---|
| 分数 | \frac{a}{b} |
| 乘法 | a \times b |
| 除法 | a \div b |
| 次方 | x^2 |
| 下标 | x_i |
| 根号 | \sqrt{x} |
| 求和 | \sum_{i=1}^{n} x_i |
| 希腊字母 | \alpha \beta \theta |
| 无穷 | \infty |
| 大约等于 | \approx |
| 不等于 | \neq |
| 小于等于 | \leq |
| 大于等于 | \geq |
Softmax:
$$
P(x_i) =
\frac{e^{z_i}}
{\sum_{j=1}^{n} e^{z_j}}
$$平均值:
$$
\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i
$$得到: