报告排版
面向 Word 报告、投标文件与各类交付材料(可研报告、项目建议书、评估报告等)的 Word(.docx)排版与体检工具。
引擎版本 1.4.4。本地处理,文件不出本机。
什么时候该用它
- 一份报告从多人手里汇总过来,字体、字号、行距、缩进、标题层级乱,手工统一要一整天
- 投标 / 申报 / 交付截止前要按单位的固定格式要求过一遍,还要能说清"改了哪儿"
- 已有成品需要证明"只动了格式"(内容一字未改)——本技能给出改前改后的内容不变量比对
- 单位有自己的排版规范(纸张、字体字号、页边距、标题层级、图表题注、页码),想固定下来重复使用
不要用它做这些事:写内容、润色行文、补齐论证、算投资、审法规、纠数据。发现疑似内容问题只会
提示 CONTENT_WARNING,绝不代改。
> 公文 / 论文 / 法律文书请用同账号的 word-paiban;本技能面向的是可研报告、项目建议书、
> 投标文件这类交付级报告,两者的版式规范与验收口径不同,不要混用。
这个技能解决什么
一份报告从多人手里汇总过来,字体字号行距缩进五花八门、标题层级对不齐、图表题注各写各的、
表格宽度冲出页面 —— 手工统一要一整天,而且越改越容易把内容改坏。
本技能只做一件事:把格式统一到一份明确的规范上,并把"改了什么、哪里还没法确认"逐条列出来。
和其他排版方式有什么不一样
| 手工调 / 通用排版工具 | 本技能 | |
|---|---|---|
| 会不会动到内容 | 不保证 | 逐字比对,内容变更 0 处,一个标点都不动 |
| 改了哪些地方 | 说不清 | 逐项写进 layout_change_log.json,可自查 |
| 能否证明"只改了格式" | 不能 | 改前 / 改后内容不变量比对,交付前拿得出证据 |
| 按谁的标准改 | 工具自带的通用默认 | 可用你自己的规范(YAML Profile),下载后也能直接用默认 |
| 表格表头与数值列对齐 | 同一张表常出现两种底色、两种对齐 | 表头按"块"处理、对齐按"列"决定,同列只有一种对齐 |
| 还没法自动确认的 | 不提,让你以为全过 | 明确列进 unverified_items,不假装全过 |
第一原则
FORMAT ONLY —— 一个标点都不动。
优先级固定为:内容安全 > 结构正确 > 规范符合 > 观感美观。
不改写、不增删实质文字,不改章节名称与顺序;数字、单位、小数位、表格数据、公式、
超链接目标、脚注尾注全部保留;不删除或重编码图片;不重建整份文档。
改了什么会逐条写进 layout_change_log.json,改前改后哈希都在,可以自查。
默认规范速查表
自带规范 profiles/general_report.yaml 是"教科书默认值"。它意味着下载后不用配任何东西,
以下这些就会被统一成一致格式(尺寸按中文习惯标注):
| 位置 | 默认要求 |
|---|---|
| 纸张 / 方向 | A4,纵向 |
| 页边距 | 上、下 2.54 cm;左、右 3.17 cm |
| 正文 | 宋体 小四(12 pt),两端对齐,首行缩进 2 字符,1.5 倍行距 |
| 章标题 | 黑体 三号(16 pt),居中 |
| 节标题 | 黑体 四号(14 pt),左对齐 |
| 小节标题 | 黑体 小四(12 pt),加粗 |
| 四级标题 | 黑体 小四(12 pt) |
| 图题 | 宋体 五号(10.5 pt),居中,置于图下方 |
| 表题 / 表号 | 黑体 五号(10.5 pt),居中,置于表上方 |
| 表格 | 宋体 小五(9 pt)居中;表头黑体加粗、跨页重复;宽度按可用区收敛,最小字号 8 pt |
| 页眉 | 宋体 小五(9 pt)居中,距上边界 1.5 cm |
| 页脚 | 宋体 小五(9 pt)居中,距下边界 1.75 cm |
| 页码 | 正文十进制、自 1 起;前置部分用罗马数字 |
| 中英文混排 | 西文与数字回退 Times New Roman |
| 目录 | 标题黑体 三号居中;条目按层级缩进(一级 0、二级 2 字符、三级 4 字符) |
这只是默认值。 你单位的规范(比如三号仿宋正文、2.8 cm 页边距、特定页眉文字)通常和它不同——
按下一节把它换成你自己的那份即可,改完不用改代码。
快速开始
前置体检(只读:不写文件、不建目录、不改原件):
python -m src.cli '报告.docx' --task SCAN # 相对规范差在哪
python -m src.no_dep_audit '报告.docx' # 零依赖版(不装任何第三方库也能跑)
python -m src.doctor # 环境自检:依赖 / 字体 / LibreOffice
正式排版:
python -m src.cli '报告.docx' --profile general_report --mode SMART --output '输出目录' --qa
只出诊断、不产出 DOCX:
python -m src.cli '报告.docx' --profile general_report --dry-run --output '输出目录'
改前 / 改后对比(只读,不改任何一份输入):
python -m src.cli '报告.docx' --compare '输出目录/formatted_document.docx'
改前 / 改后对比
排完版想知道"到底改善了多少、有没有动到内容",不用自己数:
偏离面(格式,只报面不改写)
段落文字格式不符 52 → 0 (段)
标题层级跳级 0 → 0 (处)
页码设置不符 1 → 0 (处)
表格宽度超出可用区 3 → 1 (个)
表格强制不换行 0 → 0 (个)
----------------------------------------
偏离合计 56 → 1
规范符合度(按文字块) 11.0% → 100.0%
内容不变量
段落文字:一致(变更 0 段)
数字与单位:一致(变更 0 个)
表格数据:一致;图片:一致;链接:一致
非空段落:832 → 832;字符数:6,808 → 6,808
数字随规范而变:以上是用自带 general_report 规范跑的真实结果;换成更贴近你单位的规范,偏离面会不同——
这也是为什么对比只允许同一份文档在自己的前后之间比。
- 只读:不写文件、不改两份输入中的任何一份(报告末尾的"零写自证"给出证明)。
加--report '对比结论.json'可把同样的结论存成文件;--format json输出机器可读版。 - 退出码:
0= 只动了格式;1= 检出内容差异(请先看报告);2= 用法或读文件失败。 - 口径:
偏离合计是把"段/处/个"三种单位直接相加的面数,不是分数,
只能在同一份文档的前后之间比较。它回答"还差多少处",不回答"排得好不好"。
用你自己的排版规范
本技能自带一份通用报告规范 profiles/general_report.yaml(教科书默认值:A4、宋体小四正文、
黑体标题、1.5 倍行距、首行缩进 2 字符)。它只是起点。
把 profiles/general_report.yaml 复制一份、按你的要求改值,然后先校验再使用:
python -m src.cli --task VALIDATE_PROFILE '我的规范.yaml' # 人类可读
python -m src.cli --task VALIDATE_PROFILE '我的规范.yaml' --format json
python -m src.cli '报告.docx' --profile '我的规范.yaml' --output '输出目录' --qa
--profile 既接受已注册的名字,也接受文件路径。校验器会检查字号窗口、表格可读字号层级、
颜色格式、行距、角色头值与解析值是否一致,并给出退出码:0 可用(可能有警告)/ 1 有错误会阻断 / 2 读不到文件。
模式
SMART(默认):执行规范,并做保守的分页、表格宽度与图片适配。STRICT:只执行规范里写明的规则,不以美观为由偏离。PRESERVE:保留现有版式,只安全修复超出页面的普通内嵌图片。
--document-output-mode 与上者独立:REVIEW 保留审阅标记 / FINAL 清理明确的高亮红字底纹 / CLEAN 更严格的证据化清理。
任何模式都不会自动接受或拒绝修订。
输出与报告
输出目录里除 formatted_document.docx 外,还有:
| 文件 | 作用 |
|---|---|
change_summary.json |
变更总览:共改了多少处、涉及哪些角色、内容变更几处、几条待人工确认 |
qa_report.json |
总报告:交付状态、内容完整性、结构 QA |
layout_change_log.json |
逐条变更记录与冲突 |
final_acceptance_report.json |
验收结论、模板符合度、未验证项 |
publishing_quality_report.json |
发布质量指标与未验证项分类 |
FORMAT_CLEANUP_SUMMARY.md |
上面这些数字的人类可读版,第一段就是变更总览 |
WORD_MANUAL_ACCEPTANCE_CHECKLIST.md |
需要你在 Word 里确认的清单 |
delivery_status 为 PASS / PASS_WITH_WARNINGS / BLOCKED。BLOCKED 时不会产出正式成品,
产物改名为 blocked_formatted_document.docx,并列出阻断原因。
承诺边界(请先读这一节)
静态分析看不见页面。以下项目本技能无法替你确认,会在报告里如实列出,而不是假装通过:
- 需要渲染才能核实:最终分页、空白页、标题折行、题注孤行、单行溢出、过量空白、
受保护表格的实际折行 ——final_acceptance_report.json的unverified_classification.requires_page_render - 只能人来确认:在 Word 里按 F9 刷新域后的显示、逐页目视验收 ——
unverified_classification.requires_human_step
这两类不是缺陷,是能力的固有边界。交付前请按 WORD_MANUAL_ACCEPTANCE_CHECKLIST.md 在 Word 中确认一遍。
本技能不提供"页面级定稿背书"。 它给的是:格式已按规范统一 + 改了什么逐条可查 + 哪里还没法确认如实告诉你。
不做什么
内容撰写、论证补充、投资测算、法规审查、数据纠错、语言润色。发现疑似内容问题只输出
CONTENT_WARNING,绝不代改。
依赖
Python 3.10+。核心依赖 lxml / PyYAML / jsonschema(见 requirements.txt)。
python -m src.doctor 与 python -m src.no_dep_audit 在不装任何第三方库的情况下也能运行。
许可
专有软件。见 LICENSE.txt。