公文格式体检(GB/T 9704-2012)
把一份 .docx 公文拆成「版式」和「结构要素」两层,逐项对照国家标准,输出一份能直接照着改的体检报告:每条问题都带标准依据、实测值和修改路径。
体检的是格式,不是内容。政策表述、文字对错、数据真假不在此技能范围。
交付物
| 文件 | 内容 | 谁看 |
|---|---|---|
公文体检报告-<文件名>-<YYYYMMDD>.md |
分数 + 版式速览 + 问题清单(含依据/改法)+ 人工复核项 | 起草人、办公室核稿 |
findings.json |
机器可读的问题清单,便于批量汇总 | 需要二次处理时 |
只有一份文件也能跑;没有 .docx 时降级为「结构要素体检」,并在报告里明确标注版式未查。
何时使用
- 用户发来红头文件、通知、请示、函、纪要,问「格式对不对」「哪里要改」。
- 用户提到:公文格式、GB/T 9704、版式、版记、发文字号、成文日期、抄送、印发。
- 发文前自检、被上级退回后返工、办公室统一核稿。
不适用:
- 只问「这份文件写得好不好」——那是内容评审,不是格式体检。
- 扫描件、图片、PDF 转出来的乱版文档——先让用户提供可编辑的
.docx。 - 企业合同、标书、论文排版——版式规则不同,不要套用本标准。
前置检查
开始前确认三件事:
- 文件格式:只支持
.docx和.txt。.doc让用户另存为.docx;PDF/图片让用户导出 Word。 - 文件位置:拿到真实路径。文件名含空格或中文时,命令里加引号。
- 敏感信息:公文常含人名、电话、单位内部信息。只在本机读取,不把正文粘贴到外部服务;报告里保留必要摘录即可。
缺文件就直接要,不要凭文件名猜内容,更不要凭空生成一份「看起来像」的报告。
执行流程
第 1 步:跑脚本(默认路径)
python scripts/gongwen_lint.py "文件路径.docx" \
--out "公文体检报告-文件名-$(date +%Y%m%d).md" \
--json findings.json
Windows PowerShell 没有 $(date),直接写日期或用:
python scripts/gongwen_lint.py "文件路径.docx" --out "公文体检报告.md" --json findings.json
脚本退出码:0 无必改项;1 有必改项;2 文件无法解析。三种都要继续读报告,不要因为退出码 1 就停下。
第 2 步:读报告,先讲结论
按这个顺序汇报,不要一上来倒表格:
- 一句话结论:几分、什么等级、几处必改。
- 最值得先改的 3 处:报告第三节已经按影响排序。
- 完整清单:把报告文件给用户,正文只列必改项。
- 人工复核项:红头、印章、份号位置这类机器判断不了,明确说「需要看 PDF/打印稿」。
第 3 步:按用户意图补齐
- 用户说「帮我改」→ 逐条给出在 Word 里点哪里(页面设置 / 段落 / 字体),不要只给标准值。
- 用户说「为什么会这样」→ 引用
references/gbt9704-checklist.md里对应的条款说明。 - 用户要「以后不再犯」→ 给
templates/发文前自检卡.md,让他贴在工作台。
没有 Bash 工具时
按 references/manual-checklist.md 人工核对 18 项,把结果按同样格式写成报告。必须声明是人工核对,不是脚本结果。
判断规则
| 情况 | 处理 |
|---|---|
| 有必改项 | 先列必改,再列建议;不要用「建议」淹没必改 |
| 只有建议项 | 明确说「格式可用,以下是优化项」,不要制造焦虑 |
| 纯文本输入 | 只报结构要素,报告标题改为「结构分」,并提示版式未查 |
| 字体名读不到 | 标为「人工」,不要猜「应该是仿宋」 |
| 文档含多个节(横向页) | 以最后一节为主版式,其余节提示人工复核 |
| 用户只要某一项 | 只答该项,但提醒其余必改项仍存在 |
阈值口径:
- 页边距允许 ±1 mm;超过 2 mm 判必改。
- 正文字号以覆盖字数最多的字号为准。
- 字体名做包含匹配(
仿宋_GB2312视作仿宋),不做字体文件校验。 - 行距只认「固定值」;单倍/多倍行距判建议,因为无法保证每面 22 行。
输出格式
报告固定五节,顺序不要变:
一、版式速览 表格:项目 / 实测 / 标准 / 结论
二、问题清单 表格:# / 级别 / 要素 / 问题 / 依据 / 怎么改
三、先改这 3 件 按影响排序,去重到「要素」级
四、人工复核 红头、印章、图片、表格
五、边界 不查什么、什么情况会误判
正文回复用户时用这个骨架(不超过 12 行):
体检结果:82/100,C(需返工)。必改 4 项,建议 3 项。
先改:① 页边距上下反了 ② 发文字号用了 [] ③ 成文日期写了 05 日
完整清单见:公文体检报告-xxx.md
人工复核:红头位置、印章压日期——需要看 PDF。
常见错误 → 怎么改(反模式)
| 反模式 | 为什么错 | 正确做法 |
|---|---|---|
| 用 PDF 或截图让我「体检」 | 读不到字体、页边距、行距,只能瞎猜 | 提供 .docx;PDF 先导出 Word |
| 把「公告」也要求写主送机关 | 公告、通告可以没有主送机关 | 先看文种,再判断是否缺失 |
| 看到标题是宋体就说「全错」 | 有些单位实施细则允许华文中宋替代 | 报「与标准不一致」,并提示以本单位细则为准 |
| 把「第一时间」当成极限词 | 这是广告法场景,不是公文格式 | 本技能只查格式;不要跨技能误判 |
| 只报「字号不对」 | 用户不知道怎么改 | 给「全选正文 → 字号 → 三号(16 pt)」 |
| 声称能判断印章真假 | 脚本只看 XML,不看图像 | 印章、红头颜色列为人工复核 |
FAQ
Q:为什么我的文件明明是仿宋,却报「宋体」?
A:Word 里常见「中文字体」和「西文字体」分开设置;脚本读的是 eastAsia 字体。若正文 run 没显式设置,会继承样式或文档默认值,容易显示为宋体。以 Word 里选中文字后字体框显示的名字为准,必要时手动复核。
Q:行距 28 磅是怎么来的?
A:标准要求每面 22 行、每行 28 字。三号字(16 pt)配固定值 28 磅是通行做法;不同单位可能有 28.8 磅等细则,报告会标「建议」而不是「必改」。
Q:企业文件也要按 GB/T 9704 吗?
A:不是强制。但国企、事业单位、政府项目投标常参照执行。报告开头会写明依据,企业可把本单位细则作为最终口径。
Q:为什么日期 2026年11月5日 是对的,2026年11月05日 反而错?
A:标准要求月、日不编虚位,「5」不写成「05」。同理发文字号「5 号」不写「05 号」。
Q:能批量查 50 个文件吗?
A:可以。循环调用脚本,--json 输出汇总;但每个文件仍要单独看人工复核项。批量前先确认文件都是 .docx。
Q:报告里的分数怎么算的?
A:100 分起,每个必改扣 8 分(最多扣 70),每个建议扣 2 分(最多扣 20)。分数只用于排序优先级,不是官方评级。
验收清单
- [ ] 报告里每个「必改」都有标准条款、实测值、修改路径三要素。
- [ ] 没有把「建议」写成「必改」,也没有把「人工」写成确定结论。
- [ ] 纯文本输入时明确标注「版式未查」。
- [ ] 没有编造字体、页边距、印章状态。
- [ ] 报告文件名含原文件名和日期,能直接归档。
- [ ] 回复用户时先给结论,再给文件,不倒垃圾表格。
边界与免责
- 依据 GB/T 9704-2012《党政机关公文格式》;企业、事业单位以本单位现行实施细则为准。
- 只做格式与结构检查,不评价内容合规、政策依据、文字质量。
- 不判断印章真伪、红头颜色、份号位置、密级标注是否恰当。
- 字体缺失、PDF 转 Word、模板套用会造成误判;报告已把不确定项单列为「人工」。
- 本技能不替代办公室核稿人和文秘岗的最终审核。
参考资源
references/gbt9704-checklist.md—— 完整版式与 12 类结构要素对照表;用户追问「依据哪一条」时读它。references/manual-checklist.md—— 没有 Bash 时的人工 18 项核对表。references/sample-report.md—— 一份真实风格的体检报告样例,用于对齐输出格式。templates/发文前自检卡.md—— 一页纸自检卡,可直接发给起草人。templates/整改清单.md—— 多问题整改跟踪表,适合办公室批量核稿。scripts/gongwen_lint.py—— 体检脚本;参数与退出码见文件头注释。