数学与公式
Word 将公式存储为 OMML(Office Math Markup Language)。Tiptap 使用由 KaTeX 渲染的 LaTeX 表示法。目前转换管道仅支持导出,不支持导入。
你需要什么
- 扩展:
@tiptap/extension-mathematics(不在 StarterKit 中) - 依赖:
katex(^0.16.4)用于渲染
npm install @tiptap/extension-mathematics katex支持概览
| 导入 | 编辑器 | 导出 | |
|---|---|---|---|
| 行内公式 | 不支持 | 支持(inlineMath) | 支持(LaTeX 转 OMML) |
| 块级公式 | 不支持 | 支持(blockMath) | 支持(LaTeX 转 OMML) |
导入
无论是在 编辑器扩展 还是在 REST API 中,公式都不会被导入。
公式不会从 DOCX 中导入
导入转换器没有 OMML 处理能力。DOCX XML 中的数学元素不会被解析器识别,也不会包含在输出中。输出里不会出现任何数学节点。如果你的文档包含公式,它们将在导入后的 Tiptap 文档中缺失。
DOCX 导入转换器不包含任何 OMML 解析。当解析器在文档 XML 中遇到数学标记时,它不会识别这些元素,并会完全跳过它们。不会生成任何 inlineMath 或 blockMath 节点。
如果你的工作流需要从 DOCX 导入公式,你需要从头构建 OMML 解析以及 OMML 到 LaTeX 的转换。导入转换器中没有现成的数学基础设施可供扩展。
编辑器渲染
Mathematics 扩展提供两种节点类型。它不包含在 StarterKit 中。
该扩展提供:
inlineMath在文本中渲染。输入$$E = mc^2$$可通过输入规则创建。blockMath作为独立块渲染。输入$$$\sum_{i=1}^{n} x_i$$$可通过输入规则创建。
二者都将内容作为 latex 属性中的 LaTeX 字符串存储,并使用 KaTeX 渲染。
import { Mathematics } from '@tiptap/extension-mathematics'
import 'katex/dist/katex.min.css'
const editor = new Editor({
extensions: [
StarterKit,
Mathematics,
],
})如果没有 Mathematics 扩展,数学节点不会被 schema 识别。请参见 无效 schema 指南。
导出
可使用 编辑器扩展 或 REST API 导出数学公式。两者处理数学的方式完全相同,都会将 LaTeX 转换为 OMML。
导出转换器会读取 inlineMath 和 blockMath 节点中的 latex 属性,并将 LaTeX 转换为与 OMML 兼容的数学组件,以用于 DOCX 文件。
支持的 LaTeX 特性:
| LaTeX | OMML 输出 |
|---|---|
\frac{a}{b} | 分数 |
\sqrt{x}, \sqrt[n]{x} | 根式 |
x^{2} | 上标 |
x_{i} | 下标 |
\begin{matrix}...\end{matrix} | 矩阵 |
| 希腊字母、运算符、箭头 | 通过 200+ 符号映射转换为 Unicode |
如果某个 LaTeX 字符串无法解析,转换器会回退为普通数学运行,并保留原始 LaTeX 文本。
LaTeX 覆盖范围并非穷尽
转换器支持常见的数学表示法。超出 matrix 的自定义环境、自定义宏或复杂对齐等高级 LaTeX 特性可能无法完美转换。在依赖导出用于生产工作流之前,请先测试你的具体公式。
blockMath 节点会导出为一个包含数学元素的独立段落。inlineMath 节点会作为父段落中的数学元素与普通文本运行一起导出。