数学与公式

Beta

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 中遇到数学标记时,它不会识别这些元素,并会完全跳过它们。不会生成任何 inlineMathblockMath 节点。

如果你的工作流需要从 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。

导出转换器会读取 inlineMathblockMath 节点中的 latex 属性,并将 LaTeX 转换为与 OMML 兼容的数学组件,以用于 DOCX 文件。

支持的 LaTeX 特性:

LaTeXOMML 输出
\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 节点会作为父段落中的数学元素与普通文本运行一起导出。