粗体、斜体、下划线、删除线
这些是应用于文本运行的内联标记。在 Word 中,它们来自运行属性(<w:rPr>)。在 Tiptap 中,它们是文本节点上的 mark。所有四种都已由 ConvertKit 开箱即用地注册。
你需要什么
- 扩展:
ConvertKit— 打包了 Bold、Italic、Underline 和 Strike。 - 配置: 无需配置。四种 mark 都可直接开箱即用。
支持概览
| Mark | 导入 | 编辑器 | 导出 | 备注 |
|---|---|---|---|---|
| Bold | 支持 | 支持(ConvertKit) | 支持 | 完整往返 |
| Italic | 支持 | 支持(ConvertKit) | 支持 | 完整往返 |
| Underline | 支持(仅 val="single") | 支持(ConvertKit) | 支持 | 不会转换其他下划线样式 |
| Strikethrough | 支持(存在已知的跨段落泄漏问题,见下文) | 支持(ConvertKit) | 支持 | 完整往返 |
| Double strikethrough | 不支持 | 不支持 | 不支持 | 不会转换 |
导入
使用 编辑器扩展 或 REST API 导入这些 mark。两者会产生相同的输出。
转换服务会读取 Word 的运行属性,并生成相应的 Tiptap mark:
| Word 元素 | Tiptap mark |
|---|---|
<w:b/> | bold |
<w:i/> | italic |
<w:u val="single"/> | underline(其他 val 值不会转换) |
<w:strike/> | strike |
<w:dstrike/> | 不处理 |
对于包含这些标记的文本运行,Bold、Italic 和 Strikethrough 都能干净地导入。Underline 仅在 Word 元素具有 val="single" 时才会被导入。其他下划线样式(double、wavy、dotted、dash)不会转换。组合标记(同一段文本上的 bold + italic)会被完整保留。已知有一个问题:导入时 strikethrough 可能会从一个段落泄漏到下一个段落;见下方的 Strikethrough。
编辑器渲染
所有四种 mark 都包含在 ConvertKit 中。无需单独安装。
| Mark | 扩展 | 渲染为 | 键盘快捷键 |
|---|---|---|---|
| bold | Bold | <strong> | Cmd+B |
| italic | Italic | <em> | Cmd+I |
| underline | Underline | <u> | Cmd+U |
| strike | Strike | <s> | Cmd+Shift+S |
所有四种 mark 都可以同时作用于同一段文本。
导出
使用 编辑器扩展 或 REST API 导出这些 mark。两者对它们的处理方式完全相同。
每个 mark 都映射到一个 DOCX 运行属性:
| Tiptap mark | DOCX 运行属性 |
|---|---|
bold | bold = true |
italic | italics = true |
underline | UnderlineType.SINGLE |
strike | strike = true |
Strikethrough 能正确往返。导入会生成正确的 strike mark 名称,因此不会丢失任何格式。
Strikethrough
已知问题:strikethrough 会跨段落泄漏
导入带有 strikethrough 格式的段落时,可能会导致后续段落也被渲染为 strikethrough,即使源 DOCX 并没有对第二个段落应用删除线。导入后的 JSON 看起来会将 strike mark 带到原始段落边界之外。如果遇到这种情况,请在将内容加载到编辑器之前,在 onImport 回调中检查 context.content,并在适当的位置清理多余的 strike mark。
不支持双删除线
双删除线(<w:dstrike/>)不受处理。导入时不会转换。
只导入单下划线
Word 支持多种下划线样式(double、wavy、dotted、dash 等)。在导入时,只有 val="single" 会生成 underline mark。其他所有样式都不会转换,也不会降级为普通下划线。在导出时,所有下划线都会变成 UnderlineType.SINGLE。文本内容会被保留,但非 single 样式的下划线格式会丢失。