公文格式审核与修订技能
> 基于 GB/T 9704《党政机关公文格式》及行业实践,对 .docx 公文做格式审核、修订与撰写指导。
工具
两个零依赖脚本(仅 Python 标准库直接解析 OOXML,无需 pip,不依赖 Office SDK)。
Windows 用 py -3,Linux/macOS 用 python3。
# 审核:输出 F1–F12 + C3/C6/C7 的结构化问题清单
py -3 scripts/check_format.py 文件.docx --out report.json
# 校验脚本的段落角色分类(复杂版式务必先看一眼)
py -3 scripts/check_format.py 文件.docx --dump
# 修订:默认 dry-run 只预演;--apply 才写出 文件.fixed.docx
py -3 scripts/fix_format.py 文件.docx
py -3 scripts/fix_format.py 文件.docx --apply --include-text
两个脚本共用 --baseline gb|finance。其余参数:check_format 有 --json;
fix_format 有 --in-place(自动备份 .bak.docx)、--only F2,F3、--skip、--out。
> ⚠️ Windows PowerShell 5.1 的进程间管道会给输出加 UTF-8 BOM,导致下游 JSON 解析失败。
> 在 PowerShell 下用 --out 写文件再读,不要用管道传 JSON。Bash / PowerShell 7+ 无此问题。
审核基线(必须在报告开头声明)
| 基线 | 参数 | 适用 |
|---|---|---|
| 严格国标 | --baseline gb(默认) |
党政机关公文、红头文件、要求严格执行国标 |
| 金融行业实践 | --baseline finance |
用户声明为银行/金融行业公文 |
finance 只把四项软性差异降为 P2(标题小二、行距 26pt、Word 默认页边距、附件标题黑体),
不放宽任何硬性错误。不声明基线则结论不可复现。
严重度分级
| 级别 | 含义 | 处理 |
|---|---|---|
| P0 | 硬性错误,违反国标强制要求 | 必须修改;有 P0 即判「不通过」 |
| P1 | 偏离规范但不属强制 | 建议修改 |
| P2 | 可接受的行业实践变体 | 仅提示 |
整体判定:有 P0 → 不通过;无 P0 有 P1 → 有建议项;全无 → 通过。
脚本边界与已知局限
不覆盖(须模型判断):C1 标题结构、C2 文种、C4 错别字与事实、C5 附件四处一致性、
F9 版记、印章、红色分隔线、"短实新"文风、版头要素字体。
必须核对而非盲信:
- 段落角色靠启发式判定,复杂版式可能误判 —— 用 --dump 核对后再采信受影响的结论。
- 页数取自 docProps/app.xml(Word 上次保存时写入),非 Word 编辑过则可能过期。
- 千分撇检查会把编号、电话号码误报。
- C6 只给字数,篇幅上限取决于文种,须由模型定档。
fix_format.py 拒绝自动修改的项(会列入「需人工处理」清单):层次序号重排、
成文日期补"日"、标题合并、页码新建、版头字体、版记位置。详见
references/docx-editing-recipes.md 第五节。
三种工作模式
模式一:审核(默认)
触发词:审核、检查、审阅、review、audit
- 跑
check_format.py取得全部可机械判定的问题。
不要用逐段读属性替代脚本 —— 长公文上模型只能抽样,必然漏报。 - 用
--dump核对段落角色分类。 - 在脚本结果之上补做内容类检查:C1 标题结构、C2 文种、C4 错别字与事实、
C5 附件一致性、C7 文风。 - 按「批注规则」插入批注。
- 呈现审核摘要表:基线 + P0/P1/P2 计数 + 整体判定 + 逐项清单。
模式二:修订(先审后改)
触发词:修订、修改、修正、fix
- 先完成模式一,把问题清单和
fix_format.py --apply之前的 dry-run 结果一并给用户。 - 请用户确认改动范围(默认只改 P0,P1 由用户选择)。
- 执行
fix_format.py --apply(默认写.fixed.docx,不覆盖原件)。
脚本未覆盖的项按references/docx-editing-recipes.md手工处理。 - 复跑
check_format.py验证:确认已修项消失、未引入新问题。 - 展示修改清单与修订前后的 P0/P1/P2 计数对比,并列出仍需人工处理的项。
模式三:撰写指导
触发词:撰写、起草、写作、怎么写、draft
- 确认文种(通知/请示/报告/函/纪要等)。
- 给出该文种的结构模板与写作要点,并说明格式规范。
- 如需生成文件:创建后必须跑
check_format.py自检,确保新文件本身合规
(注意 python-docx 默认纸张是 Letter,须显式设 A4)。
审核检查清单
19 项。🤖 = check_format.py 自动判定,👤 = 需模型判断。
A. 格式(F1–F12)
| 序号 | 检查项 | 检查要点 |
|---|---|---|
| F1 | 🤖 标题格式 | 二号方正小标宋简体、居中、回行词义完整、不得拆成多段 |
| F2 | 🤖 正文字体 | 仿宋_GB2312、小三、不加粗 |
| F3 | 🤖 正文间距 | 行距固定值30磅、段前段后0行、首行缩进2字、不得用空格模拟缩进 |
| F4 | 🤖 层次序号 | 不得跨层级、不得逆层级、不得跨序号,须自"一、"起逐层向下、连续编排;各层字体正确(权威口径见 references/gbt-9704-standard.md 第三章) |
| F5 | 🤖 附件列表 | 小三仿宋、左空二字、全角冒号、后无标点 |
| F6 | 🤖 落款署名 | 小三仿宋、以成文日期为准居中(非版心居中)、不得用空格模拟对齐 |
| F7 | 🤖 成文日期 | 小三仿宋、右空四字、阿拉伯数字、月日不编虚位、不得省略"日" |
| F8 | 🤖 附注 | 小三仿宋、左空两字、全角圆括号 |
| F9 | 👤 版记 | 四号仿宋、最后一页最下方、须落在偶数页(有附件或转发内容时落在空白偶数页) |
| F10 | 🤖 页码 | 四号宋体、PAGE 域自动编号、一字线"— 1 —"、单页右双页左 |
| F11 | 🤖 附件标识 | 小三黑体、顶格左上角第一行、无冒号 |
| F12 | 🤖 附件标题 | 小二方正小标宋简体加粗、第三行居中 |
B. 内容(C1–C7)
| 序号 | 检查项 | 检查要点 |
|---|---|---|
| C1 | 👤 标题结构 | "发文单位+关于+事由+的+文种"、事由不重复 |
| C2 | 👤 文种规范 | 法定15种之一、不自造、不并出、上行文仅请示/报告 |
| C3 | 🤖 标点符号 | 〔〕年份、千分撇、长横线年份范围、并列引号无顿号、主送全角冒号 |
| C4 | 👤 正文内容 | 无错别字/多字/漏字、人名地名时间准确、引文规范 |
| C5 | 👤 附件一致 | 正文/列表/外部标题/内部标题四处一致、顺序正确 |
| C6 | 🤖 篇幅控制 | 一般≤10页5000字、专项≤4000字、报告≤3000-5000字、签报≤6页3000字(文种定档需模型判断) |
| C7 | 🤖👤 文风要求 | 脚注/表格/图像由脚本检出;"短实新"由模型判断 |
批注规则
格式:【公文审核】[检查项编号] 问题描述 → 修改建议,作者 公文审核助手。
编号必须与上表一致,可直接取用脚本输出的 id 字段,不得臆造。
【公文审核】[F2] 正文字体为宋体,应为仿宋_GB2312
→ 修改建议:将正文所有段落字体修改为仿宋_GB2312
【公文审核】[F4] 层次序号由第一层"一、"直接跳到第三层"1.",跨层级
→ 修改建议:补齐第二层"(一)",或将该段降为第二层
【公文审核】[C2] 文种使用了"汇报",非法定文种
→ 修改建议:上行文文种应为"请示"或"报告",请根据行文目的选择
定位:
- 段落级问题插到脚本 where 指出的段落。
- 全局性问题(where 为「全局」/「节属性」:页边距、纸张、页码、篇幅)
合并为一条挂在标题段,或只进摘要表 —— 不得逐段重复插入。
- 分组问题(where 形如「第3、5、7等12段」)只在首个段落插一条,
在批注中说明影响范围。
- 幂等:插入前检查是否已存在「公文审核助手」的旧批注,有则先清理或跳过。
参考文档
| 文件 | 用途 |
|---|---|
references/gbt-9704-standard.md |
GB/T 9704 国标要点 —— 口径冲突时以此为准 |
references/format-quick-reference.md |
格式速查表(字体字号/位置/标点/XML属性换算/行业变体) |
references/format-ten-checks.md |
公文排版"十要看"(排版维度) |
references/review-ten-checks.md |
公文审核"十要看"(内容与流程维度,金融行业) |
references/real-document-format-sample.md |
真实金融行业样本分析(含不规范做法,勿照抄) |
references/docx-editing-recipes.md |
SDK / python-docx 修订手册与 OOXML 陷阱 |
各文件表述不一致时,以 gbt-9704-standard.md 为准并同步订正冲突处。
特殊处理
| 场景 | 处理要点 | 详见 |
|---|---|---|
| 金融行业公文 | 额外查发文流程、会签范围与流程、发文稿纸要素、发文说明、关联文件区分 | review-ten-checks.md 一/四/五/九/十 |
| 行业实践变体 | 用 --baseline finance,软性差异只提示不判错 |
real-document-format-sample.md 第三章 |
| 请示类公文 | 须有"妥否,请批示。"等结尾;可整体不用序号,但一旦用就须自"一、"起逐层向下;联合署名用顿号分隔 | format-quick-reference.md 第八节 |
| 附件格式 | 标识黑体小三顶格、标题居中、与正文空一行、表头加粗小四 | format-ten-checks.md 第九节 |
| 非标准文种 | 明确提示非法定文种并建议替代;用户坚持则报告中标注,不强制改 | gbt-9704-standard.md 第四章 |
执行约束
- 脚本优先:审核与修订都先跑脚本,不得用逐段读属性替代脚本已覆盖的检查
- 基线声明:报告开头写明所用基线(
gb/finance) - 先备份:任何写操作前先另存
.bak.docx(--in-place会自动备份;其他路径须手动) - 先审后改:修订必须先完成审核并经用户确认
- 不删除内容:审核模式只插批注,不改原文
- 预演优先:
fix_format.py先 dry-run 给用户看,确认后再--apply - 坐标实时获取:走 SDK 路径时每次写操作前重新取结构,不用缓存坐标
- 改后复验:修订后复跑
check_format.py,确认问题消除且未引入新问题 - 批注幂等:插入前检查是否已有「公文审核助手」的旧批注
- 诚实报告:脚本拒绝自动修改的项必须原样列给用户,不得声称已修