分页优化
五条规则决定内容落在哪一页:画廊行不拆页、页末单图贴底、浮动图与旁文同进退、标题另起或不留在页脚、末页孤行回收。
分页并非按高度将连续长栏切分为多个页面。插件先切出配置要求的页边界,再将无法容纳的图片压缩至贴底,最后回收仅剩一两行的末页。所有调整只发生在导出时的临时打印树上,导出结束即回退,不写回笔记。
分页预览中切换“标题分页”后,右侧页面会重新分页;关闭后标题不再强制另起一页。
未启用分页优化的表现
- 一行五张图被页边界切开:上半页三张,下半页两张。
- 一张竖图差几厘米无法容纳,整张跳到下一页,上一页底部留下大块空白。
- 标题停在页脚最后一行,正文从下一页开始。
- 末页仅有一行文字,而前面各页排版已满。
这四种页脚就是下面五条规则要解决的问题。
规则一:整行画廊不拆页
一行画廊是一个整体:要么整行在这一页,要么整行移到下一页,避免出现「上半页三张、下半页两张」。
无法容纳时,三格图片按同一比例缩小,各自在固定栏位内居中,栏宽不变。缩到上限仍无法容纳,整行换页。它不会被当作 donor 去救同页其他图片,孤行修复也不会压缩它。

左:关闭「图片分页优化」,整行到下一页,页尾留白;右:开启后整行按同一比例缩小,栏宽不变,贴住页脚。
相关设置:图片最大压缩高度(默认 15%)。
规则二:页末单图缩到贴底
页末一张图无法容纳时,插件只量这张图(含图注)的底边与页底的距离,把这一张缩到刚好贴底的最小比例,不牵动同页其他图片,也不额外插入分页。
- 目标图自己的上限用完后,才按「优先使用裕度」动同页其他图片(最多 4 张)或行距。
- 与图片同段的正文会被拆成独立块;图片贴底后,正文自然从下一页开始。
- 任何失败都整体回滚,不会留下「缩了一半、还是被切断」的中间状态。

左:关闭优化,单图整体到下一页,页尾留白;右:开启后只缩这一张,贴住页脚。
相关设置:图片分页优化、优先使用裕度、图片最大压缩高度、行距最大压缩高度。
规则三:浮动图与旁边正文同进退
只有在「浮动空间策略 = 按行文顺序对齐」时,浮动图才会与紧邻它、且在图片高度内结束的那段正文绑成一块:无法容纳就一起换页。
- 正文比图片长时,绑定自动解除;超出的行照常续排到下一页,不会把整段文字一起推走。
- 「共享浮动空间」模式下不绑定:正文留在本页就近填空,图片按自身规则换页。
- 判断只看图片底边,不看绕排正文延伸到哪里;图片本身不会被页边切成两半。

左:浮动空间按行文顺序,图与旁文同在第 2 页;右:共享浮动空间,旁文留在第 1 页,只把图换到第 2 页。
相关设置:浮动空间策略。
规则四:标题要么另起一页,要么不留在页脚
打开「标题分页」并设定起始等级后,命中等级的标题另起一页。等级选 h2 时,h1 与 h2 都参与分页。
即使关闭标题分页,落在页脚、正文却要翻页的标题也会被带到下一页。相邻的两个标题(例如 h1 紧跟 h2)算作一个标题块,只切一次,不会切出空白页。

左:关闭标题分页,第 1 页连续排到第三节;右:开启「标题分页、起始等级 h2」后,第 1 页只保留第一节,后续内容整体后移。
相关设置:标题分页、标题分页起始等级。
规则五:末页孤行回收
末页只剩 1–2 行时,插件压缩上一页的图片或行距,把这几行收回去;中间页页首只剩一行时同样处理。
- 先压图片(每步 1%),再压行距(每步 2%,上限 10%),顺序由「优先使用裕度」决定。
- 标题分页故意打开的页不按「页首孤行」处理,两条规则不叠加。
- 一次导出最多修三处;末页无图可压时,去掉残留段落的外边距再试。

左:关闭孤行控制,末页 3 行;右:开启后把 1 行带回上一页,末页只剩 2 行。
相关设置:孤行控制、末页允许行数(默认 2,可设 1–5)。
五条规则怎么排队
- 先按标题分页切出强制页边界。
- 再处理画廊行:整行换页或整行缩小。
- 再处理页末单图:缩到贴底。
- 再做标题页尾保护:压得下就把标题留在本页。
- 最后修孤行:把末页过少的行回收。
顺序不可颠倒:先压缩图片再切页,会将已压缩的图片重新推下。每次压缩都会改变后续页码,因此每轮结束后需重新测量;默认最多 4 轮。
设置项
| 设置 | 默认 | 范围 | 作用 | 生效范围 |
|---|---|---|---|---|
| 标题分页 | 关 | 开 / 关 | 命中等级的标题另起一页 | 设置页 + 导出窗口(仅当次) |
| 标题分页起始等级 | h1 | h1–h6 | 选 h2 时 h1 与 h2 都参与 | 同上 |
| 图片分页优化 | 开 | 开 / 关 | 页末压缩总开关 | 设置页 + 导出窗口(写回) |
| 优先使用裕度 | 图片高度 | 图片高度 / 行距 | 目标图上限用完后先压谁 | 仅设置页 |
| 图片最大压缩高度 | 15% | 0–50% | 单图与整行的压缩上限 | 仅设置页 |
| 行距最大压缩高度 | 10% | 0–20% | 压行距的上限 | 仅设置页 |
| 孤行控制 | 开 | 开 / 关 | 末页回收总开关 | 设置页 + 导出窗口(写回) |
| 末页允许行数 | 2 | 1–5 | 回收阈值 | 仅设置页 |
| 浮动空间策略 | 按行文顺序 | 有序 / 共享 | 决定规则三是否绑定 | 仅设置页 |
导出窗口里只有三个分页控件:标题分页(含等级)、图片分页优化、孤行控制。标题分页的改动只对当次导出有效;图片优化与孤行控制的改动会写回设置页,下次导出和设置页显示的都是新值。压缩上限、末页行数、优先裕度、浮动空间策略只能在设置页改。
功能边界
- 只缩不放:不会为了填满页脚放大图片或字号。
- 有硬上限:单图或整行最多缩「图片最大压缩高度」;到顶就整块换页,页脚留白是预期结果。
- 不重排列宽:整行缩小时三格同比例缩、槽位不变,行宽与对齐都不变。
- 不压表格、代码块、数学块的内部:它们按整体计算页码;超出一页时仍可能在内部断开。
- 不均衡页面:只处理末页与「页首恰好一行」的中间页,一次导出最多修三处。
- 图片高度不随宽度变化时直接放弃:固定高容器里缩宽不会变矮,插件探测一次就回退。
- 原生导出兜底不跑完整分页:隐藏打印文档的几何退化,整行保护、几何压缩、孤行回收可能不生效;能保证的是 CSS 级规则。
- 页码占页边距:页尾页码需要下边距至少 11mm,否则会被裁掉。
- 共享浮动空间下规则三不成立:正文会留在本页就近填空。
- 不改笔记:所有写入只发生在临时打印树,导出结束即回退。
自己复现
- 打开演示库的
18-PDF分页笔记,执行「导出 PDF (AutoGallery)」。 - 在导出窗口切到「分页预览」,找到第一个页边界。
- 关闭「图片分页优化」,再切一次「分页预览」,对比同一页的页脚。
- 打开「标题分页」并设起始等级为 h2,观察每个二级标题是否另起一页。
- 把「末页允许行数」从 2 改为 1 或 3,观察总页数是否变化。
仓库内可用一条命令复核所有分页对照图是否仍然成立(只断言,不写文件):
node tools/capture/pdf-stills.mjs --all --lang zh --verify-only