KaTeX/KaTeX · 上手攻略

  • 仓库:KaTeX/KaTeX
  • 链接:https://github.com/KaTeX/KaTeX
  • 分类:academic-writing
  • 作者:Tom
  • 更新:2026-07-14

这是什么

KaTeX 是一个 JavaScript 库,用于在网页上高速渲染 TeX 数学公式。与传统方案(最典型的是 MathJax)不同,KaTeX 采用同步渲染策略,无需等待页面重排,在浏览器端几乎瞬间输出印刷级数学排版效果。

它的数学排版内核基于 Donald Knuth 的 TeX——这意味着输出质量有保障,是学术写作场景下的「黄金标准」。

核心特性: - 速度快:同步渲染,不需要页面 reflow,保守估计比 MathJax 快 2–5 倍 - 无依赖:零第三方依赖,可直接打包进任何 Web 资源 - 服务端渲染:Node.js 下可预渲染 HTML 字符串,输出结果跨浏览器一致 - 支持主流浏览器:Chrome、Safari、Firefox、Opera、Edge 全兼容 - 部分 LaTeX 支持:覆盖大部分常用数学命令和宏,但不是 100% 完整(这点需注意)


解决什么问题

在网页中嵌入数学公式,传统方案要么慢(MathJax 需要加载大量 JS 并异步渲染),要么依赖后端服务(Codecogs 等外部 API 有延迟和可用性风险)。

KaTeX 解决的是「学术博客、文档、在线笔记、论文网站」中既要好速度,又要好质量的根本矛盾。

典型场景: - 静态网站博客(Hexo、Jekyll、Next.js 文档站) - 在线教育平台(数学、物理、机器学习课程) - 论文预印本网站(arXiv 类平台) - API 文档中嵌入数学说明


快速安装

CDN 引入(最快,无需构建)

<!-- HTML5 doctype 必须,否则可能渲染异常 -->
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.17.0/dist/katex.min.css"
    integrity="sha384-AtrdNsnxl/75rvBneBVH7DtOvCxSVahR2zWqle1coBKd8DEmLoviqNeJSx64gNAs"
    crossorigin="anonymous">
</head>
<body>
  <!-- 加载 KaTeX 主库(延迟加载以加速页面渲染) -->
  <script defer src="https://cdn.jsdelivr.net/npm/katex@0.17.0/dist/katex.min.js"
    integrity="sha384-AtrdNsnxl/75rvBneBVH7DtOvCxSVahR2zWqle1coBKd8DEmLoviqNeJSx64gNAs"
    crossorigin="anonymous"></script>

  <!-- 如需自动渲染页面内所有 math 元素,引入 auto-render 扩展 -->
  <script defer src="https://cdn.jsdelivr.net/npm/katex@0.17.0/dist/contrib/auto-render.min.js"
    integrity="sha384-bjyGPfbij8/NDKJhSGZNP/khQVgtHUE5exjm4Ydllo42FwIgYsdLO2lXGmRBf5Mz"
    crossorigin="anonymous"
    onload="renderMathInElement(document.body);"></script>
</body>
</html>

⚠️ 版本说明:当前 CDN 可见版本为 0.17.0(jsDelivr 记录),建议通过 npm 安装以获取最新版本。

npm 安装

npm install katex
# 或
yarn add katex

Python 端预渲染(服务端)

npm install -g katex  # Node.js 环境

核心用法

1. 直接渲染到 DOM 元素

import katex from 'katex';

// 渲染到指定 DOM 元素
const element = document.getElementById('math-target');
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, {
  throwOnError: false  // 渲染失败时显示源码而非抛出异常
});

2. 生成 HTML 字符串(服务端渲染)

import katex from 'katex';

// 生成字符串,可直接嵌入 HTML
const html = katex.renderToString("E = mc^2", {
  throwOnError: false
});
// 输出: '<span class="katex">...</span>'

3. 行内公式与行间公式

// 行内公式(display: false)
katex.render("\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}",
  element, { displayMode: false });

// 行间公式(display: true,居中显示)
katex.render("\\sum_{n=1}^{\\infty} \\frac{1}{n^2} = \\frac{\\pi^2}{6}",
  element, { displayMode: true });

4. 自动渲染页面内所有 LaTeX 表达式

// 页面加载完成后执行
document.addEventListener("DOMContentLoaded", function() {
  renderMathInElement(document.body, {
    delimiters: [
      { left: "$$", right: "$$", display: true },   // 行间公式
      { left: "$",  right: "$",  display: false },   // 行内公式
      { left: "\\[", right: "\\]", display: true },
      { left: "\\(", right: "\\)", display: false }
    ],
    throwOnError: false
  });
});

5. 常用配置项

katex.render(expr, element, {
  displayMode: true,          // true=行间公式,false=行内公式
  throwOnError: true,          // 错误时抛出异常;设为 false 显示源码
  errorColor: '#cc0000',       // 错误时显示的文本颜色
  macros: {                    // 自定义宏
    "\\RR": "\\mathbb{R}",
    "\\f": "#1f(#2)"          // \\f{a}{b} 展开为 #1f(#2)
  },
  output: 'html',              // 或 'mathml'、'htmlAndMathml'
  strict: false               // 处理未知 LaTeX 命令的严格程度
});

典型适用场景

场景一:静态博客快速嵌入数学

在 Hugo/Next.js 文档站等静态站点中,直接引入 CDN 版本最省事。配合 auto-render 扩展,页面内所有 $...$$$...$$ 自动渲染,无需额外构建步骤。

场景二:学术论文预印本网站

自托管时,用 Node.js 预渲染公式为静态 HTML,绕过浏览器端 JS 加载慢的问题。预渲染结果天然 SEO 友好。

场景三:在线 Jupyter 风格笔记(悬停查看源码)

利用 throwOnError: false 在公式错误时显示源码,配合自定义 tooltip 实现「悬停查看原始 LaTeX」的教学效果。


坑与注意

坑点 说明
HTML5 doctype 必须 否则 KaTeX 布局可能错乱,页面顶部必须加 <!DOCTYPE html>
不是 100% LaTeX 兼容 某些高级宏包(如 tikz)不支持;复杂自定义命令需参考 Supported Functions 列表
字体需单独引入 CSS 和字体文件(woff2)必须与 JS 同目录引入,离线使用时注意打包
版本差异 不同版本支持的 LaTeX 命令集有差异,生产环境建议锁定版本(通过 hash)
auto-render 分隔符冲突 $ 在正文中出现频率高,容易误触发,建议优先使用 $$\\( \\) 分隔符
长公式换行 KaTeX 目前对公式换行支持有限,长公式建议在设计阶段就拆成多行

与同类对比

特性 KaTeX MathJax 3 MathJax 2
渲染速度 ⚡ 极快(同步) 较慢(异步) 最慢
输出质量 TeX 标准 TeX 标准 TeX 标准
包大小 ~200KB(精简) ~500KB+ ~500KB+
LaTeX 覆盖率 ~90% ~95% ~95%
服务端渲染 ✅ 支持 ✅ 支持 ✅ 支持
无依赖 ❌ 需要 ❌ 需要
活跃维护 ✅ 活跃 ✅ 活跃 ⚠️ 维护减少
许可 MIT Apache 2.0 Apache 2.0

结论:对学术写作/文档类站点,优先选 KaTeX(速度快、无依赖);如果遇到 KaTeX 不支持的 LaTeX 特性,退到 MathJax 3。


一句话推荐结论

需要在网页中快速、高质量渲染数学公式?选 KaTeX——速度快、包体积小、服务端渲染零门槛,是目前学术写作类站点的最优解。