Expand description
KaTeX 服务端数学公式渲染(server-only)。 KaTeX 服务端数学公式渲染。
用纯 Rust 的 katex crate 把 TeX 公式
渲染成 HTML span,供 pulldown-cmark 的 InlineMath / DisplayMath 事件调用。
仅在 feature = "server" 时编译——前端 WASM 不参与公式渲染(SSR 即终态)。
渲染策略:
OutputFormat::Html:只产出视觉层<span class="katex">…</span>,不含 MathML 语义层(<math>等)。这样 sanitizer 无需为 MathML 标签开白名单,XSS 面最小。 屏幕阅读器等无障碍场景的语义损失可接受(本站数学公式占比低)。throw_on_error = false:坏公式渲染成红色错误 span 而非中断整篇文章。
配套资源:前端必须加载 public/katex/katex.min.css + fonts/(见 Makefile
katex-css),否则只有裸 span、无数学字体排版。crate 本身不打包 CSS。
Constants§
- DISPLAY_
SETTINGS 🔒 - INLINE_
SETTINGS 🔒 - 每线程缓存的渲染配置,避免每次渲染都重建宏表 HashMap。
Settings同样因RefCell宏表非Sync。 - KATEX_
CTX 🔒 - KaTeX 上下文:含全部内置符号 / 宏表,应在多次渲染间复用(README 建议)。
用 thread_local 而非全局 static:
KatexContext内含RefCell<HashMap>宏表,非Sync,不能放LazyLock。tokio 多线程 runtime 下每线程各持一份。 - TEXT_
MODE_ 🔒CMDS - 参数按文本模式解析的
\text家族命令(对齐 KaTeXargTypes: ["text"])。 这些命令的{...}组内不应做数学宏展开。
Functions§
- display_
settings 🔒 - 块级公式(
$$...$$)渲染配置工厂:display_mode = true(居中独占一行),含物理宏表。 - expand_
chem 🔒 - 把公式中的
\ce{...}/\pu{...}预转译为标准 LaTeX(mhchem)。 - fix_
text_ 🔒mode_ middle_ dot - 修复 katex-rs 0.2 的上游缺陷:
·(U+00B7)被注册为内置宏\cdotp(macros/builtins.rs),宏展开不分模式——在\text{...}的文本模式里\cdotp是数学专用符号,解析失败渲染成红字\cdotp(issue #13,\text{m·K}→m\cdotp K)。KaTeX JS 无此问题:·在 JS 里是 math/text 双模式直接符号(glyph U+22C5),不走宏。 - inject_
physics_ 🔒macros - 把物理宏表注入到给定
Settings的宏表(覆盖同名内置宏)。 - inline_
settings 🔒 - 内联公式(
$...$)渲染配置工厂:display_mode = false,含物理宏表。 - physics_
macros 🔒 - 物理学常用宏表(对齐 LaTeX
physics宏包 + 项目文档 8.13 节「项目物理宏表」)。 - read_
braced 🔒 - 从
open(指向{)读取配对花括号内容,返回(内容, 闭括号后位置)。 不闭合返回None。嵌套{}正确计数。 - render_
display - 渲染块级公式
$$...$$(定界符由 pulldown-cmark 剥除)→ HTML 字符串。 - render_
inline - 渲染内联公式
$...$(定界符由 pulldown-cmark 剥除)→ HTML 字符串。