如果你做 Web 开发或移动端开发,一定遇到过数学公式渲染的需求。传统方案要么用 KaTeX(280KB JS),要么用 MathJax(500KB JS),都需要在浏览器里跑 JavaScript。现在有了一个新选择:RaTeX——用纯 Rust 实现的 LaTeX 渲染引擎,通过 WebAssembly 运行,核心 0KB JS 包体积。
RaTeX 是什么
RaTeX 是一个用纯 Rust 编写的 LaTeX 数学公式渲染引擎,兼容 99.5% 的 KaTeX 语法。它的核心特点是:
- 纯 Rust 实现:没有 JavaScript、没有 WebView、没有 DOM、没有 GC 参与热路径
- 跨平台:同一个 Rust 核心可以编译到 iOS、Android、Flutter、React Native、Web(WASM)、服务端、SVG、PDF
- 字节级一致性:所有平台输出完全相同
- KaTeX 兼容:CI 运行大量 golden test,与 KaTeX 参考图像做像素级对比
- 内置化学公式:支持
\ce和\pu宏(mhchem 兼容)
与 KaTeX 和 MathJax 的对比
| KaTeX | MathJax | RaTeX | |
|---|---|---|---|
| 运行时 | JS (V8) | JS (V8) | 纯 Rust |
| 支持平台 | 仅 Web | 仅 Web | iOS/Android/Flutter/RN/Web/服务端/SVG/PDF |
| 移动端 | WebView 包装 | WebView 包装 | 原生 |
| 服务端 | headless Chrome | mathjax-node | 单二进制,无需 JS 运行时 |
| 输出格式 | DOM (span 树) | DOM / SVG | Display list → Canvas/PNG/SVG/PDF |
| 内存管理 | GC / heap | GC / heap | 可预测,无 GC |
| 语法覆盖率 | 100% | ~100% | ~99.5% |
安装和使用
Web(WASM)
npm install ratex-wasm
在 HTML 中使用 Web Component:
<link rel="stylesheet" href="node_modules/ratex-wasm/fonts.css" />
<script type="module" src="node_modules/ratex-wasm/dist/ratex-formula.js"></script>
<ratex-formula latex="\frac{-b \pm \sqrt{b^2-4ac}}{2a}" font-size="48" color="#1E88E5"></ratex-formula>
Flutter
# pubspec.yaml
dependencies:
ratex_flutter: ^latest
Android
// build.gradle
dependencies {
implementation 'io.github.erweixin:ratex-android:latest'
}
iOS
通过 Swift Package Manager 集成,提供 XCFramework。
React Native
npm install ratex-react-native
服务端(CLI)
git clone https://github.com/erweixin/RaTeX.git
cd RaTeX
cargo build --release
# 渲染为 PNG
echo '\frac{1}{2} + \sqrt{x}' | cargo run --release -p ratex-render -- --color '#1E88E5'
# 渲染为 SVG
echo '\frac{1}{2} + \sqrt{x}' | cargo run --release -p ratex-svg --features cli -- --color '#1E88E5'
# 渲染为 PDF
echo '\frac{1}{2} + \sqrt{x}' | cargo run --release -p ratex-pdf --features cli -- --output-dir ./out
架构设计
RaTeX 的 Rust 代码组织非常清晰,分为多个 crate:
ratex-types— 共享类型(DisplayItem、DisplayList、Color、MathStyle)ratex-font— KaTeX 兼容字体度量和符号表ratex-lexer— LaTeX → token 流ratex-parser— Token 流 → AST(抽象语法树),包含 mhchem 支持ratex-layout— AST → LayoutBox 树 → DisplayListratex-ffi— C ABI,供原生平台调用ratex-wasm— WebAssembly 管线ratex-render— 服务端 PNG 渲染(tiny-skia)ratex-svg— SVG 导出ratex-pdf— PDF 导出(pdf-writer,嵌入 CID 字体)ratex-unicode-font— 系统 Unicode/CJK 字体发现
适合什么场景
- 教育类 App:需要在移动端显示数学公式的 App,原生渲染比 WebView 快得多
- 在线文档/笔记:类似 Notion、Obsidian 这样的工具,需要嵌入数学公式
- 论文/报告生成:服务端直接生成 PDF,不需要 headless 浏览器
- 科学计算可视化:SVG 输出适合嵌入到论文和报告中
- 化学公式:内置 mhchem 支持,化学方程式渲染开箱即用
实际体验
RaTeX 提供了在线 Demo:ratex.lites.dev/demo.html。你可以在浏览器里直接输入 LaTeX 代码,实时查看渲染效果。还有支持表可以查看对各种 LaTeX 命令的支持情况。
注意事项
- 语法覆盖率为 99.5%,极少数 KaTeX 特性可能不支持
- 项目仍在活跃开发中,API 可能有变化
- WASM 版本需要下载字体文件,首次加载有一定延迟
- PDF 导出功能依赖 KaTeX 字体,需要确保字体文件可访问
本文参考来源:
© 版权声明
THE END
















暂无评论内容