RaTeX:纯 Rust 实现的 KaTeX 兼容 LaTeX 渲染引擎,跨平台 0 依赖

如果你做 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 树 → DisplayList
  • ratex-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
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容