# 自动目录不靠手敲：标题和页码分别从哪里来

目录是 TOC 域现算出来的：标题按大纲级别收集，页码靠 PAGEREF 查隐藏书签，两种更新模式的分工也由此决定

> Word 排版 · 自动目录 · 域与交叉引用 · 约 8 分钟 · 09 月 23 日

## 本篇要点

1. 自动目录不是一段排好的文字，而是一段 TOC 域（形如 `{ TOC \o "1-3" \h \z \u }`），你看到的条目是 Word 按这条指令现算出来的，不是快照。
2. 目录里的标题文字按“大纲级别”收集，不看外观：套用内置标题样式会自带级别，也可以只在段落属性里把大纲级别从“正文文本”改成 1 级到 9 级，这样外观不变也能被收集。
3. 用加粗、大字号、居中手工做出来的标题没有大纲级别，Word 扫描时会跳过，这是目录缺条目或为空的最常见原因。
4. 目录里的页码是一条独立的 PAGEREF 域，指向 Word 自动插在标题处的隐藏书签，含义是“这个书签现在在第几页”，所以它是可重算的，不是写死的数字。
5. TOC 域管条目文字和结构，PAGEREF 域管页码，这两层结构决定了两种更新模式的分工：只更新页码只重算 PAGEREF；更新整个目录会重新扫描全文、重抄标题、重建书签。
6. 选择更新模式的判断标准是条目内容本身有没有变：标题文字、章节增删或层级变化必须用“更新整个目录”，只是位置挪动用“只更新页码”。
7. 正确顺序是先定好标题样式或大纲级别并用导航窗格核对结构，再插入自动目录，再在“自定义目录”里确认“显示级别”（对应 `\o "1-3"`）。
8. 手动改目录条目的文字或格式属于直接格式，下次“更新整个目录”会被重建覆盖；要改目录外观应改内置的 `TOC 1`／`TOC 2` 样式。
9. 目录本身会占页并改变后续分页，所以插入后要再更新一次，通常更新两次页码才稳定。

---

上一篇说了一个关键结论：样式里藏着“大纲级别”，Word 靠它认出哪些段落是标题。这一篇把它落到一个最具体的场景上——**自动目录**。

很多人做目录还是老办法：手打一遍标题，对着屏幕数页码敲上去，再用点线连起来。代价你大概体会过：正文里改一句话，后面所有页码集体漂移，目录就得从头再数一遍。

自动目录解决的正是这件事。但它有两个容易让人困惑的地方：**目录里的标题文字从哪来？页码又是从哪来？** 搞清楚这两个来源，你就知道为什么它能自己更新，也知道为什么它有时候不认你的标题。

## 目录不是一段文字，是一个域

先把最基本的事实说清楚：Word 插入的自动目录，**本质上不是一个排好版的快照，而是一段“域”（field）**。

“域”可以理解成一小段指令：你写下的不是结果，而是一个让 Word 现算现填的规则。目录用的这条指令叫 TOC 域。你可以验证：把光标点进目录区域，按 `Alt+F9`，目录会变成类似这样一行代码：

```
{ TOC \o "1-3" \h \z \u }
```

再按一次 `Alt+F9` 就切回来。这行代码里，`\o "1-3"` 说的是“收集大纲 1 到 3 级的标题”，`\u` 说的是“也按段落自己设的大纲级别来收集”。

**你看到的目录条目，是 Word 按这条指令现算出来的。** 既然是现算的，它每次计算都要回正文里重新取一遍内容，也就不难理解了。

## 标题文字从哪来：按大纲级别收集，不看外观

Word 生成目录时做的事像这样：从头到尾扫一遍文档，把每一个“大纲级别是 1 到 3 级的段落”挑出来，抄下它的文字，作为一条目录条目。抄的是文字本身，不是字体字号——所以目录条目长什么样，跟正文标题的字体没关系。

那哪些段落有大纲级别？两种途径：

一种是**套用了内置标题样式**。`标题 1` 到 `标题 9` 这些样式的定义里，就强制写好了对应的大纲级别 1 到 9，你不用另外设。这也是上一篇反复强调标题要套样式的原因：套上 `标题 1` 的那一刻，段落就带着“我是一级标题”这个身份进入文档了。

另一种是**在段落属性里直接设大纲级别**。打开“开始”选项卡“段落”组右下角的小箭头，在“常规”里有一个“大纲级别”下拉框，默认是“正文文本”，可以改成 1 级到 9 级。上面代码里的 `\u` 开关，就是让这类段落也能进目录。

第二种途径解决了一个很实际的矛盾。你的论文或标书里可能有一批标题，格式早就定死了——黑体、三号、居中，跟内置 `标题 1` 的默认外观不一样，改了反而违反格式要求。这时**不必改外观，只要把它们的“大纲级别”从“正文文本”改成 1 级**：格式一点没变，但它们在结构层变成了标题，导航窗格里会出现，目录也会收集到。

反过来，这也解释了最常见的故障：**目录里少了几条，或者干脆是空的。** 原因基本都是那些标题用加粗、加大字号、居中手工做出来的——看上去很像标题，但大纲级别仍然是“正文文本”，Word 扫描时直接跳过。修的办法不是去动目录，而是回到那几段，套上 `标题 1`／`标题 2`，或者手动把大纲级别设成对应级别，然后更新目录。

```mermaid
flowchart LR
  A["正文段落"] --> B{"有大纲级别吗？"}
  B -->|"套了内置标题样式"| C["级别 1-9"]
  B -->|"段落属性里手动设"| C
  B -->|"只有加粗和大字号"| D["仍是正文本，被跳过"]
  C --> E["TOC 域扫描并抄录文字"]
  E --> F["目录条目"]
```

## 页码从哪来：一条指向隐藏书签的引用

第二个来源更隐蔽，但恰恰是理解“为什么要更新”的关键。

Word 在收集标题时，会顺手在每个被收录的标题处**插入一个隐藏书签**，名字形如 `_Toc123456789`，你平时看不到它。目录条目末尾那个页码，实际上是一条独立的域：

```
{ PAGEREF _Toc123456789 \h }
```

`PAGEREF` 的意思是“查出某个书签所在位置的页码”。所以目录里的页码**不是** Word 数一遍然后写死的数字，而是一条实时查询指令：这条内容的书签现在在第几页，就填几号。

理解这一点，三件事就顺了。

第一，**页码是“上次更新那一刻的结果”**。你在正文前面加了半页内容，所有标题都往后挪了，但目录里的 `PAGEREF` 还没重算，显示的仍是旧值。这就是“目录页码对不上”的根本原因——不是 Word 算错了，是它还没被叫去重算。

第二，**TOC 域和 PAGEREF 域是两层结构**。TOC 负责“有哪些条目、条目文字是什么、每个条目配哪个书签”；PAGEREF 负责“这个书签现在在第几页”。这直接对应了下文两种更新方式的分工。

第三，**页码查的是书签的位置**。如果你绕开制度手工改页码，或者直接删掉目录内部的隐藏书签，这条链就断了。

## 更新：两种模式，别选错

更新目录最快的方式是把光标点进目录区域按 `F9`，或者右键点目录选“更新域”。弹出的对话框只有两个选项，它们的分工就来自上面那两层结构：

- **只更新页码**：只把每个 `PAGEREF` 重算一遍，条目文字和结构不动。
- **更新整个目录**：扔掉现有条目，重新扫描全文，重抄标题文字、重建隐藏书签、重算页码。

什么时候用哪个，判断标准只有一句：**目录里的条目内容本身有没有变？**

- 只是正文段落增减、行距调整、图片大小变化，让标题位置挪动了，而标题文字和层级没变 → 用“只更新页码”，快，也不会动你已经调好的条目格式。
- 新增或删除了章节、改了标题文字、动了某个标题的级别、改了目录的“显示级别” → 必须用“更新整个目录”，否则新增的章节根本不会出现。

这里有个具体提醒：对话框上写的是“只更新页码”，它**不会**把新章节加进来，也不会把改过名的标题同步过来。很多人改了标题文字后只更新了页码，发现目录里还是旧标题，以为 Word 坏了，其实只是选错了模式。

如果你怕忘，可以让 Word 在打印前自动更新全文的域：“文件 → 选项 → 显示”，在“打印选项”里勾上“打印前更新字段”。这样最后一次打印或导出 PDF 时，它会把域重算一遍。

## 一次做对：顺序和设置

明白了原理，操作顺序就很清楚：

1. **先把标题的样式或大纲级别定好**，用导航窗格（`Ctrl+F` 打开，切到“标题”页）确认整棵标题树完整、层级正确。导航窗格和目录读的是同一套大纲级别，导航窗格正常，目录一定正常——但它跟有没有插入目录无关。
2. **把光标放在要放目录的位置**（通常单独占一页），到“引用 → 目录”，选“自动目录”那一个。注意别选“手动目录”，那是静态文字，不会更新。
3. **在“自定义目录”里确认“显示级别”**。它通常默认是 3 级，对应 `\o "1-3"`。文档里有四级五级标题也要进目录，就把这个数字调大；不需要那么细，就调小。

最后一个容易踩的坑：**不要手动去改目录里某一条的文字和格式。**

你可能会觉得目录第一级字号太大，就选中几行改小；或者觉得点线碍眼，用手删掉。这些改动属于“直接格式”，下一次“更新整个目录”会按 TOC 样式重建条目，你的手工改动全部消失。正确做法是改样式——目录各级分别对应内置的 `TOC 1`、`TOC 2`、`TOC 3` 样式，改它们的字体、缩进、段前段后距，更新之后不会被打回原形。这和上一篇的结论是同一条：**格式要改在名字上，不要改在单个段落上。**

还有一个边界要提一句：目录本身会占掉一到两页，插进去之后，正文所有页码都可能往后推。也就是说，**你第一次更新目录得出的页码，有可能在目录把版面撑开之后就不再成立了。** 处理办法很朴素：插入目录后，再更新一次，通常更新两次页码才稳定。

至于目录页要不要单独编号（正文从 1 重新开始，目录用罗马数字），那牵涉到分节符怎样断开页码的连续性，是下一篇的事。

## 术语表

- 域（field）：一小段让 Word 现算现填的指令，你看到的是计算结果而不是固定内容；目录、页码、交叉引用都是域。
- TOC 域：生成目录的那条指令，决定收集哪些段落作为条目，开关里写明级别范围。
- 大纲级别：段落的一项属性，说明这段在文档结构里算第几级；“正文文本”表示不是标题，1 到 9 级才会被目录和导航窗格收进来。
- PAGEREF 域：查某个书签所在页码的指令，目录条目末尾的页码就是它算出来的结果。
- 隐藏书签：Word 在为目录收集标题时插在标题处的标记，名字形如 `_Toc123456789`，PAGEREF 靠它定位。
- TOC 1／TOC 2 样式：控制目录里各级条目外观的内置样式，改目录样子要改它，而不是手动改条目文字。

## 来源

1. [Microsoft 官方：插入自动目录、更新域，以及条目缺失通常是因为标题没有套用标题样式](https://support.microsoft.com/en-us/office/insert-a-table-of-contents-882e8564-0edb-435e-84b5-1d8552ccf0c0)
2. [Microsoft 官方中文页：更新字段、“仅更新页码”与“更新整个表”的区别、打印前更新字段](https://support.microsoft.com/zh-cn/office/%E6%9B%B4%E6%96%B0%E5%AD%97%E6%AE%B5-7339a049-cb0d-4d5a-8679-97c20c643d4e)
3. [TOC 域各开关（\o、\t、\u、\z、\n、\s）的含义，以及目录影响分页时需再次更新域的说明](https://www.bettersolutions.com/word/fields/toc-field.htm)
4. [Office Watch：TOC 域开关清单，\o "levels" 与段落大纲级别的关系](https://office-watch.com/2023/all-word-table-of-contents-options/)
5. [ECMA-376 规范中 TOC 域的定义：条目来源包括 TC 域、标题级别与指定样式](http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/TOC.html)
6. [PAGEREF 域：插入某个书签所在位置的页码，即目录页码的来源](https://www.bettersolutions.com/word/fields/pageref-field.htm)

---

原文：https://pangzhengboyin.com/articles/how-word-table-of-contents-gets-headings-and-page-numbers-4ec72ec2

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
