数学公式排版:PlantUML 与 Mermaid 混排公式
简介
架构图里出现公式并不罕见:求根公式、折扣公式、SLA 的百分比、队列的期望等待时间。传统做法是把公式写成纯文本(x = (-b +- sqrt(b^2-4ac)) / (2a)),可读性直接归零;另一个极端是把公式截图贴进图里,改一个数字就要重画。
两个引擎都原生支持 LaTeX 风格公式。PlantUML 走 MathJax 路线:用 <math>...</math> 标签嵌进类图注释,或用 @startmath / @startlatex 单独画一张公式图;Mermaid 走 KaTeX 路线:在节点标签里写 $$...$$,渲染时自动排版成分式、根号和上下标。本文用同一个二次方程求根公式画出两版,说明各自能写什么、以及最容易踩的坑。
PlantUML 版
PlantUML 的 <math> 标签可以放进任何能写文字的地方,最常用的是 note。写一个带求根公式的类图:
1 | @startuml |
渲染后公式不是文字,而是一张内嵌的矢量图:分式的横线、根号的钩子、± 符号都是真正的路径。
要点:
必须用
<math>标签,且内容是 LaTeX:写$x^2$或裸文本都只会被当成普通字符串原样显示——$不会触发任何排版。反斜杠要成对:LaTeX 命令如
\frac、\sqrt、\pm都以反斜杠开头。花括号是分组,不是字面量:
b^2 - 4ac里的^只作用于紧跟其后的一个字符;要给整个表达式上标,写b^{2 - 4ac}。单独的公式图:把
@startuml换成@startmath(或@startlatex)起头、结尾,公式独占一张图,适合公式本身就是要讲的内容时:1
2
3@startmath
sum_(i=1)^n i = n(n+1)/2
@endmath注意:
@startmath与@startuml不能混在同一个文件里互相嵌套,一个文件只渲染其中一种块。@startmath与@startlatex的差别:@startmath走 AsciiMath 风格,sqrt(4)、text(hello)、root(2)这类函数式写法能被解析;@startlatex只认 LaTeX 语法(\sqrt{4}、\frac{a}{b})。两者的\frac{a}{b}、\sqrt{4}都能用,所以默认用@startlatex更保险。
Mermaid 版
Mermaid 节点标签里的公式用 KaTeX 渲染,规则和 Markdown 里写数学公式一致:单美元符号 $...$ 用于行内公式,双美元符号 $$...$$ 用于独立公式。在 Mermaid 中要用 $$,因为节点标签本身已经处在引号里。
1 | flowchart LR |
要点:
- 用
$$而不是$:实测单$...$在节点标签里不会触发 KaTeX,公式会以字面量$\frac{...}$显示;$$...$$才会真正排版。 - 标签必须加引号:
R["$$...$$"]里含空格、反斜杠和花括号,不加引号会被 Mermaid 的语法解析器截断或报错。 - 反斜杠在 Mermaid 里不用转义:
\frac直接写。但要注意 Markdown 渲染器处理代码块时不会改写反斜杠,所以博客正文里也是原样保留。 - KaTeX 能力边界:KaTeX 支持分式、根号、上下标、矩阵、对齐等常用结构,但不支持
\begin{equation}这类需要完整 LaTeX 编译环境的宏包,也不支持 TikZ 绘图。 - 节点尺寸会随公式变化:KaTeX 渲染进
foreignObject后,节点宽度按公式实际宽度计算,含长分式的标签会把相邻节点推得更远——这是正常的排版行为,不是渲染失败。
对比
| 维度 | PlantUML | Mermaid |
|---|---|---|
| 公式引擎 | MathJax | KaTeX |
| 内嵌写法 | <math>...</math> 标签,可放进 note、类名等任意文本位置 |
$$...$$,仅限节点标签与边标签 |
| 独立公式图 | @startmath(AsciiMath)或 @startlatex(LaTeX) |
无对应指令,需用节点承载 |
| 纯 LaTeX 语法 | @startlatex 下完整支持,\frac / \sqrt / \pm 均可 |
支持 KaTeX 子集,常见公式足够 |
| 公式修改成本 | 改文字后重新渲染即可 | 改文字后重新渲染即可 |
| 输出体积 | 公式转成内嵌矢量图,SVG 体积明显增大 | 公式以 HTML + MathML 形式嵌入,SVG 更大 |
选择建议:需要把公式当主角——单独一张公式图、或公式里用到 AsciiMath 风格的函数式写法——用 PlantUML 的 @startlatex / @startmath。需要公式只是图上的一个注解、并且要和流程箭头混排,用 Mermaid 的 $$...$$ 更省事,因为 Mermaid 本身就是围绕流程关系设计的。
小结
公式排版的关键不是”能不能写”,而是”写在哪、用哪种方言”。PlantUML 把公式当一等公民:<math> 标签能嵌进任何文字位置,@startmath / @startlatex 还能单独成图。Mermaid 把公式当标签内容:$$...$$ 在节点里排版,但受限于 KaTeX 子集与标签语法。两者共同的红线只有一条——别忘了标签或公式环境本身:PlantUML 忘了写 <math>,Mermaid 忘了写 $$,结果都只是屏幕上一串没人看得懂的字符。
- 标题: 数学公式排版:PlantUML 与 Mermaid 混排公式
- 作者: puml.online
- 创建于 : 2026-10-24 01:10:00
- 更新于 : 2026-10-24 01:08:22
- 链接: https://puml.online/blog/ascii-math-typesetting/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。