---
title: "Word 样式"
description: "Word 段落样式和字符样式在导入期间如何解析并在导出期间应用。"
canonical_url: "https://tiptap.zhcndoc.com/conversion/content-types/structures-and-media/word-styles"
---

# Word 样式

Word 段落样式和字符样式在导入期间如何解析并在导出期间应用。

Word 文档使用一种样式系统，其中每个段落和文本运行都引用一个命名样式。转换流水线会将已知的段落样式名称解析为它们对应的 Tiptap 样式，并对其他所有内容回退为普通段落。`basedOn` 继承链仅用于解析运行级格式。

导入时的样式解析通过 [编辑器扩展](https://tiptap.zhcndoc.com/conversion/import/docx/editor-extension.md) 和 [REST API](https://tiptap.zhcndoc.com/conversion/import/docx/rest-api.md) 的行为完全一致。导出时，这两条路径都支持 [`styleOverrides`](https://tiptap.zhcndoc.com/conversion/export/docx/styles.md) 以自定义文档级样式定义。扩展还额外支持 [元素覆盖](https://tiptap.zhcndoc.com/conversion/export/docx/styles.md#element-overrides)，可对单个元素进行控制，而 REST API 不接受这种方式。

## 可识别的段落样式

导入服务会识别这些段落样式名称（不区分大小写）。当某个段落的规范样式名称与其中之一匹配时，它会被转换为相应的 Tiptap 节点：

| Word 样式名                                           | Tiptap 节点          | 备注                                                                                                    |
| -------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------- |
| `heading 1` 到 `heading 9`（正则 `/^heading\s*\d+$/i`） | `heading`（1 到 9 级） | 参见 [标题](https://tiptap.zhcndoc.com/conversion/content-types/text-and-formatting/headings.md)          |
| `quote`（不区分大小写的精确匹配）                               | `blockquote`       | 参见 [块级元素](https://tiptap.zhcndoc.com/conversion/content-types/structures-and-media/block-elements.md) |
| 其他所有内容                                             | `paragraph`        | 参见 [段落](https://tiptap.zhcndoc.com/conversion/content-types/text-and-formatting/paragraphs.md)        |

## 样式继承

Word 样式可以像类继承一样继承自其他样式。自定义样式“Company Heading”可能基于“Heading 2”，而“Heading 2”又基于“Normal”。这会形成一个父样式链。

导入时，转换器会沿着这条链收集每个祖先的文本格式（字体、字号、粗体、斜体、颜色）。不过，这条链不会用于决定段落最终变成什么类型的节点。节点类型只基于段落自身的样式名称是否匹配已知模式（标题正则或“Quote”）。

这意味着，一个样式为“Company Heading”的段落会变成普通段落节点，即使它从“Heading 2”继承了标题格式。要让转换器生成标题，样式名称本身必须匹配标题模式（例如“Heading 2”）。

## 字符样式

Word 也支持应用于单个文本运行的字符样式。导入时不会保留字符样式名称。取而代之的是，解析时已解析出的格式（粗体、斜体、颜色、字号等）已经体现在运行的 CSS 属性中，并会映射为 Tiptap 标记。

这意味着，一个样式为“Strong”且解析为粗体的运行，会生成 `bold` 标记，因为其格式包含 `font-weight: bold`。样式名“Strong”本身会被丢弃。

具有非标准格式（小型大写、字母间距、文本效果）的自定义字符样式，如果渲染器不支持这些格式，将会丢失这些格式。

## 编辑器

Tiptap 中没有样式扩展。编辑器没有 Word 段落样式或字符样式的概念。每种内容类型都有各自的扩展（Heading、Blockquote、CodeBlock、Paragraph），格式则通过标记来处理。

若要将文档中命名样式的排版（如 `Heading 1`、`Normal`、`Quote` 等的视觉定义）以级联 CSS 的形式带入编辑器，而不是作为逐节点属性，请使用实验性的 [CSS 注入](https://tiptap.zhcndoc.com/conversion/import/docx/css-injection.md) 功能。它会提取样式目录，并将其作为作用域限定的 `<style>` 标签注入，或交由你以 `cssStyles` 对象的形式处理。该页面记录了它覆盖的 16 个选择器和 11 个属性（仅排版；不包含按边设置的边框，也不包含字母间距）。

## 导出

每种 Tiptap 节点类型都映射到固定的 Word 样式：

| Tiptap 节点          | 导出的 Word 样式           |
| ------------------ | --------------------- |
| `paragraph`        | Normal                |
| `heading`（1 到 6 级） | Heading 1 到 Heading 6 |
| `blockquote` 的子元素  | Quote                 |
| 列表项                | List Paragraph        |

原始文档中的自定义样式不会被双向无损保留。从“Legal Disclaimer”样式导入的段落，导出时会变成“Normal”。

### 默认导出样式定义

| 样式        | 字体          | 大小   | 其他                |
| --------- | ----------- | ---- | ----------------- |
| Normal    | Aptos       | 11pt | 之后间距 10pt，行高 1.15 |
| Heading 1 | Aptos Light | 16pt | 粗体，颜色 #2E74B5     |
| Heading 2 | Aptos Light | 14pt | 粗体，颜色 #2E74B5     |
| Heading 3 | Aptos       | 13pt | 粗体，颜色 #2E74B5     |
| Heading 4 | Aptos       | 12pt | 粗体，颜色 #2E74B5     |
| Heading 5 | Aptos       | 11pt | 粗体，颜色 #2E74B5     |
| Title     | Aptos Light | 22pt | 粗体，黑色，居中          |
| Subtitle  | Aptos Light | 16pt | 斜体，灰色，居中          |
| Quote     | Aptos       | （继承） | 斜体，居中             |
| Hyperlink | （继承）        | （继承） | 颜色 #0563C1，下划线    |

### 自定义导出样式

可使用 `styleOverrides` 覆盖任意默认样式或添加新样式。你的覆盖项会与默认值进行深度合并：匹配的 `id` 值会递归合并，新的 `id` 值会追加。

```ts
ExportDocx.configure({
  styleOverrides: {
    paragraphStyles: [
      {
        id: 'Normal',
        name: 'Normal',
        run: {
          font: 'Calibri',
          size: 24,        // 半磅（24 = 12pt）
        },
        paragraph: {
          spacing: {
            after: 200,    // twips（200 = 10pt）
            line: 276,     // 一行的 240 分之一（276 = 1.15）
          },
        },
      },
    ],
  },
})
```

> **样式定义中的单位:**
>
> 字体大小以半磅为单位（24 = 12pt）。间距值以 twips 为单位（20 twips = 1pt）。行距使用一行的 240 分之一来表示（240 = 单倍行距，276 = 1.15）。这些单位来自 `docx` 库，并与 OOXML 规范一致。
