gongwen-format
按 GB/T 9704-2012 把公文正文排成 Word,有红头、信函、纪要、命令(令)、白头、材料、简报七种版式,支持联合行文版头、附件另面、预印红头纸套打;检查、修复 docx 的页边距、字体、行距、页码;把核稿意见写成 Word 批注;无 Python 时给手动设置清单。用户说“排版”“套红头”“转成 Word”“按国标调格式”“格式乱了帮我改”“页码怎么设”时使用。只管格式不改内容:起草
Files66
View on GitHubSKILL.mdskills/gongwen-format/SKILL.md
GitHub国标排版(gongwen-format)
把公文正文排成符合 GB/T 9704-2012《党政机关公文格式》的 docx,检查、修复已有 docx 格式,把 gongwen-review 的核稿意见写成 Word 批注。参数一律来自 references/_shared/rules/gbt9704.md。
适用范围
- 适用:
- 正文(.txt、.md 或粘贴文字)排成 docx:红头(文件格式)、信函、纪要、命令(令)、白头(无版头的公文)、材料(总结、讲话稿等,只有标题和正文)、简报(报头、各篇、报尾);另有联合行文版头、附件另面、预印红头纸套打(第二步第 10 款)。
- 检查已有 docx 是否符合国标,输出 P0/P1/P2 问题清单;轻度问题修复页面、字体字号、行距、缩进、页码,结构问题抽取全文后重排。
- 把“核稿意见.json”写成 Word 批注;指导用户在 WPS、Word 中手动设置。
- 行业包起草的专用文书,排版也归本 skill。
- 不适用:
- 起草法定公文转 gongwen-draft,讲话稿转 gongwen-speech,总结、汇报等转 gongwen-report,其他按文种转对应起草 skill;装有行业包时,行业专用文书交对应行业包。只起标题、搭提纲转 gongwen-title。
- 压缩篇幅、改写内容,转 gongwen-polish;去 AI 腔,转 gongwen-humanize;去免责、对冲、态度不明,转 gongwen-direct。
- 查错别字、提法、标点数字、行文规则等内容问题,转 gongwen-review;本 skill 只把 review 的结论写成批注,不自己核稿。
- 用户要求排版时顺便改文字的,说明不改内容,建议先改完再排。
- 转交方式:能调用其他 skill 的环境直接调用;未安装或网页环境的,按 output-format.md 第四部分转交(交接卡、新开对话粘贴说明、安装命令)。
开工检查
- 保密:按
references/_shared/guardrails.md第一条执行。材料或版式信息有密级标识(绝密、机密、秘密、★)或“内部资料”“工作秘密”等字样时立即停止,建议在内网自行运行脚本。- 有 Python 时,先运行
python scripts/secret_check.py <文件>检查保密标识(含页眉页脚),命中即停。
- 有 Python 时,先运行
- 单位画像:先读
.gongwen/单位画像.md(没有则查~/.gongwen/单位画像.md),取发文机关标志、发文字号格式、红头或白头、党政代字、单位规定字体、写作角色和默认模式;都没有时按 roles.md 第九节“无画像降级”,版式按第二步第2款先排,末尾问一句要红头、白头还是材料;画像没红头设置的,按第二步第3款说明。 - 运行环境:能执行命令时先运行
python -c "import docx; print(docx.__version__)";报错或低于 1.2.0 时提示pip install -U python-docx;不能安装的,走“没有 Python 环境时”。 - 首轮交付:材料在手直接排版交付,不先问版式细节。不改内容、不补内容:原稿没有的要素一律不写进文档(不补版记、不插【待补】),只在报告和回复中列出,由用户决定;用户明确要求“缺的要素留出位置”才加
--placeholders写占位。提问不超过 3 个,放回复末尾(roles.md 第十节)。 - 【起草说明】之后的内容不排版,脚本读到这行自动停止。
- 交接卡:用户粘贴了交接卡的,按卡上的单位画像、模式、任务和已确认事项开工,已有的不再问。
工作流程
第一步 判断任务,选脚本
| 用户要什么 | 用哪个脚本 |
|---|---|
| 把正文排成 Word、套红头、出信函、纪要或简报 | scripts/build_docx.py,随后自动检查 |
| 看看这个 docx 格式对不对 | scripts/check_docx.py |
| 这个 docx 格式乱了,帮我改 | 先 check_docx.py 判路线(第四步):轻度问题 fix_docx.py,结构问题 extract_docx.py 抽取后 build_docx.py 重排 |
| 用户说“内容别动”“一个字都别改”“只调格式” | build、fix 都加 --keep-text(第四步第 5 款) |
| 把核稿意见写进文档 | 先把送审稿 build 成 docx,再 scripts/annotate_docx.py;终稿不加批注(第五步) |
| 我自己在 WPS 里改,告诉我怎么设 | 不用脚本,按 references/manual-setup.md 给步骤 |
| 想先看看排出来的样子 | 本机有 LibreOffice 且标准字体齐全时用 scripts/preview_docx.py 转图片 |
| 想知道本机标准字体装齐没有、缺的怎么装 | scripts/gw_fonts.py |
scripts/gw_*.py 是公共模块,不单独运行(gw_fonts.py 除外);用法可加 --help 查看。
第二步 整理版式信息(生成 docx 时)
- 按 meta-fields.md 整理“版式信息.json”,放正文同目录。
- 版式按顺序定:用户本轮指定 → 单位画像 → 文种默认(函用信函;纪要有纪要版头的用纪要格式;其他法定公文用白头;总结、讲话稿等用材料版式;工作、专题、会议简报用简报版式)。
- 按文种默认排白头的,写一句:“如需红头,请提供:发文机关标志、发文字号;请示、报告另提供签发人姓名。”教学模式附依据 7.2.4~7.2.6;一般不用红头的单位(如社区)不写。
- 发文机关标志、代字从画像取;党委发文和行政发文分开,不能混用。
- 用户要求把应发红头的正式文件改成白头或便笺、以减少发文数量的,按
references/_shared/guardrails.md第六条第 3 款说明不可,仍按正式文件排。 - 发文字号序号、成文日期、签发人、印发日期只用用户给的,缺的不写(留占位模式才写“代字〔年份〕【待补:序号】号”“【待补:具体日期】”),不编号码、不以当天日期充当成文日期、不推算“周五”“月底”等相对时间。
- 本单位制度与国标不一致的写法,按本单位制度排,检查加
--allow(第六步第3款)。 - 用户没提供版式信息时可不写 JSON,脚本自动识别标题、主送机关、附件说明、署名和成文日期。
- 简报:无国家标准格式,以下为常见做法,以单位往期样式为准。报头、各篇、报尾按
references/manual-setup.md第十四部分,字段见 meta-fields.md;简报名称、期号、编印单位、印发日期缺的不写,报送范围、印数没给的不排。篇目标题认不带句末标点的短行,请用户核对。 - v1.1 版式(参数、用法、条款见 layouts.md;“实践值”非标准原文):命令(令)写
"版式": "命令"及令号、签发人职务;附件另面在落款后用“【附件1】标题”行引出;联合行文的发文机关标志写成数组,主办机关在前;套打加--overprint;上行文红头的发文字号居左空一字,与最后一个签发人同行。
第三步 生成 docx
python scripts/build_docx.py <正文文件> --meta <版式信息.json> -o 公文/<YYYYMMDD>-<简短标题>/成稿.docx [--layout 红头] [--allow DOCX-050]
- 用户粘贴正文的,先存为
公文/<YYYYMMDD>-<简短标题>/正文.txt(已存在加 -v2),再运行脚本。 - 成稿一律用
-o写到上述目录(日期取当天),不得省略(输出规范第2条)。 - 读脚本报告:
- “识别结果”:标题、主送、附件、署名、日期是否认对;认错的,在版式信息写明字段后重新生成。一级标题与正文同段的,脚本按正文排,告知用户拆成独占一行后重排,不自行改字。
- “缺失要素”:原稿没有、未写入的要素,逐条转告(留占位模式为“待补事项”)。
- “字体”:本机是否装齐标准字体;缺失或无法检测时,报告开头有“字体缺失”区块(第 4 款)。
- “回读检查”:P0、P1 清单。
- 缺字体(严格模式,不降级):文件中一律写入标准字体名(脚本无降级开关),严禁改用或建议任何替代字体(仿宋、楷体、华文中宋、宋体加粗等都不行)。报告出现“字体缺失”或“无法检测”区块时,回复开头先醒目告知缺哪些字体;在本机用 Word/WPS 打开会被自动换字体显示,不是正式效果,不能据此核对版式或打印;再逐款转告报告中的获取途径和安装方法(或运行
python scripts/gw_fonts.py),请用户自行下载安装后重新打开核对。检测的是运行脚本的电脑,用户在别的电脑打开的,请在那台核对。方正小标宋简体是商业字体,需单位授权;本工具不提供、不打包字体。 - 单位规定字体:画像记有“单位规定字体”,或用户明确说明本单位制度规定了字体时,各脚本加
--unit-fonts "仿宋=方正仿宋_GBK"(build 的版式信息可写"unit_fonts": {"仿宋": "方正仿宋_GBK"},命令行优先)。严格模式不变:没装同样报“字体缺失”并引导安装(向单位信息中心或办公室索取),不回退;报告写明“按单位规定使用 X(国标为 Y)”。用户只是没装字体想换的,不得用该参数。
第四步 修复已有 docx
先运行 python scripts/check_docx.py <原文件.docx> --json 判路线,再动手:
- 版头(发文机关标志、发文字号、签发人、红线,DOCX-055、056、160~162)、版记(DOCX-163)、附件另面(DOCX-13x)、标题、落款有缺失或错误的,走抽取—重排:
抽取不改文字,识别不出的要素不写(列入缺失要素);应排红头的加python scripts/extract_docx.py <原文件.docx> [--layout 红头] python scripts/build_docx.py <正文-原名.txt> --meta <版式信息-原名.json> -o <成稿.docx> [--keep-text]--layout 红头;识别要素见 layouts.md 第八部分。 - 只有页面、字体、行距、缩进、页码的轻度问题用
python scripts/fix_docx.py <原文件.docx> [-o <输出.docx>] [--layout 白头] [--seal 是|否] [--allow DOCX-050]:按段落文字识别角色(check-items.md 第二节),输出“原名-修复.docx”和修复报告,原文件不动。不重建版头、版记、附件;清除原页眉、页脚中的旧页码和杂项并重设页脚页码;1.、1.1、(1)等非标准序号按层级套用标题字体,序号文字不改,报告建议改为标准序号。 - 两条路线交付前都要回读(build、fix 已自动运行 check_docx),回复如实报告仍存在的问题,不得声称“已按国标做好”而成品不符;缺字体按第三步第 4 款在回复开头提示。识别有误的,用
--layout指定。 - 发文字号括号、日期虚位这类要改文字才能消除的问题,脚本不改,列入报告;逐条向用户确认后在 Word 中改,或改正文后重新生成。
- 用户说“内容别动”“一个字都别改”“只调格式”等时,build_docx.py、fix_docx.py 都必须加
--keep-text:空格、标点、数字、写法一个字不动(不补冒号、不加括号,保留空格缩进),文字类问题只在报告“文字类问题”中列出,由用户决定;保存前双向、按顺序比对输入与文档全文(多字、少字、乱序、重复都中止),通过才报告“文字核对”;未核对不得声称“已逐字核对”。
第五步 写入核稿批注
python scripts/annotate_docx.py <送审稿.docx> <核稿意见.json> [--author gongwen-review]
- 批注加在由送审稿排出的 docx 上(JSON 的
source_file指明哪份):先用 build_docx.py 按成稿相同的版式信息把送审稿排成 docx(默认输出“送审稿.docx”),再运行上面的命令。按意见改过的终稿不加批注,excerpt 多已改掉,定位不到。 - 核稿意见.json 由 gongwen-review 输出(
source_file和issues,每条含 level、gate、category、excerpt、message、suggestion、basis),excerpt是原文中逐字一致的连续片段,脚本靠它定位。check_docx.py 的--json输出也可直接写成批注。 - 脚本按 excerpt 定位,输出“原名-批注.docx”和批注报告;“未定位”的条目逐条告知原因,请用户手工处理。
- 只写批注,不改正文,不写修订。
第六步 交付前检查
- 运行
python scripts/check_docx.py <成稿.docx> --json(build、fix 已自动运行的看报告)。 - P0 为 0 才能交付。否则:格式类问题改版式信息或用 fix_docx.py 修好后重查;文字类问题(发文字号、成文日期写法)向用户确认后改正文重排。
- 例外:画像或用户说明本单位制度规定了与国标不同的写法的,回读和自检加
--allow DOCX-050,命中项降为 P2、注明“按本单位制度保留”;交付说明逐条写明差异和检查项号。有单位规定字体的同样加--unit-fonts。 - P1 逐条告知。正文残留的【待补】【待核实】排版照做,报 P2(DOCX-080)单独计数并提醒补齐,不替补;文档中有【起草说明】报 P1(DOCX-082),交付前删去其及之后的内容;残留 Markdown 表格行报 P1(DOCX-100),用 build_docx.py 重新生成。其余 P2 汇总一句。
- 有条件时目检:运行
python scripts/preview_docx.py <成稿.docx>(需 LibreOffice)逐页看图,核对版头红线、层次标题是否落页末、附件页、版记位置,并读“版面核对”(落款与正文末段是否同页、首页留白)。回复中的处理结果(如“落款与正文同页”)以 check_docx 和渲染结果为准,没核对到的不写。无 LibreOffice 时只提示;缺任一标准字体时拒绝渲染(退出码 3),先装字体;以打印核对为准。
没有 Python 环境时
网页版大模型、内网无 Python 的电脑,或用户不愿安装时,按文字流程完成:
- 逐行判断正文中的标题、主送机关、各级层次标题、表格、附件说明、署名、成文日期、附注、版记。
- 规则:首行以“关于”开头或以文种结尾的是标题;标题后以冒号结尾的是主送机关;“一、”“(一)”“1.”“(1)”开头的是一至四级标题,二至四级标题与正文同段时,第一个句号及以前是标题;“附件:”开头的是附件说明;末尾的单位名称行和日期行是署名和成文日期,日期下一行的括号行是附注。
- 输出“本文排版清单”,逐项写明:选用版式;各要素原文(层次标题列出各级几处)及其字体、字号、对齐、缩进;署名和日期按盖章与否的排法和缩进字数;版头、版记要填的内容,缺的只列出、不写。
- 清单后附
references/manual-setup.md中用得上的步骤(页面设置、正文样式、文档网格、页码、字体准备与安装必附;红头、信函、纪要、版记、表格按版式和正文附)。 - 注明“未运行脚本检查,请按手动设置清单第十三部分打印核对”。
- 排版一般是路线最后一站,写“路线已完成”;还有下一站的,按 output-format.md 第四部分输出交接卡。
输出规范
- 正文排版遵守 output-format.md,输入是按它写的纯文本。
- 交付文件放在
公文/<YYYYMMDD>-<简短标题>/,同名加 -v2、-v3,不覆盖。默认文件名:输入“正文.txt”输出“成稿.docx”;输入“正文-××.txt”输出“成稿-××.docx”;其他输入输出“<输入文件名>.docx”(不与终稿重名)。批注版由送审稿排出,名为“送审稿-批注.docx”一类。 - 对话中的交付说明:缺字体或无法检测字体时,字体缺失提示放最前(第三步第4款);其后依次写:文件位置;版式和是否按盖章排;识别结果(请用户核对);待补事项;检查结论(P0、P1 条数,每条一行写问题和条款号,转译模式按“角色适配”);相关的已知限制。没有内容的省略,不复述全文。
- 默认不改动任何文字(逐字保真),例外:去掉段首缩进空格;Markdown 表格转 Word 表格(去掉竖线和加粗记号,文字不变);抄送数组连成一句加句号。以下格式性文字问题默认只在报告中提示,不自动修正:主送机关末尾补全角冒号、附注加圆括号、日期写法转换(如 2026-10-16 → 2026年10月16日);用户可加
--auto-fix-text开启自动修正。加引号的提法、做法名称原样保留。其他文字问题只报告,不动手;用户要求内容别动的,一律不做(第四步第 5 款)。
自检清单
- 已按保密红线检查,未处理涉密内容。
- 版式与画像、文种一致;党委、行政标志和代字未混用;排白头的,已说明改红头要补的要素。
- 发文字号、日期、签发人、印发机关都来自用户或画像,缺的未写进文档(无【待补】、无补出的版记)并已在回复列出;相对时间未推算成具体日期。
- 识别结果已逐项核对,认错的已用版式信息纠正。
- check_docx.py 结果 P0 为 0;按本单位制度保留的项已加
--allow并在交付说明写明差异。 - 缺字体或无法检测时,已在回复开头告知并附获取、安装方法,未建议替代字体;原文件未覆盖。
- 正文与输入逐字一致:默认只有输出规范第4条列的例外,补冒号、加括号、日期转换仅在
--auto-fix-text时执行;没有重复行;要求“内容别动”的,已加--keep-text且“文字核对”通过;回复如实报告成品仍有的问题。
有 Python 时运行 python scripts/check_docx.py <文件.docx> --strict(保留项加 --allow,见第六步第3款);不能运行脚本时,按 references/manual-setup.md 第十三部分人工核对,写明“未运行机检”。
已知限制
- 版记、版头位置误差、签章预留、标题分行、落款留白等限制见 layouts.md 第七节;印发前打印核对。
- 缺标准字体的处理见第三步第4款;仿宋_GB2312 缺生僻字时,该字需单独换字体并打印核对。
- 正文表格只支持简单管道表格,fix_docx.py 不调整已有表格;批注按 excerpt 定位。
- 段落角色靠文字模式识别,非常规标题或编号可能认错,须看识别结果。
角色适配
- 教学模式:每次交付附“这次用到的国标要素”3~5 条,写清条款号和 Word、WPS 默认设置哪里不符国标;用户自己操作时按
references/manual-setup.md带着做。 - 高效模式:不展开讲解,直接出 docx;只报告识别存疑项、待补事项和 P0、P1(每条一行写问题和条款号);多份材料汇总一张表。
- 转译模式:接受直接粘贴的文字或 Word 文件,不要求先整理格式;交付时附在 WPS、Word 打开、套用格式和另存的步骤,检查结论用业务人员听得懂的话写。默认不写条款号;有 P0、P1 时才在句末括注一处。
- 审稿模式:只运行 check_docx.py,输出一页纸格式问题清单(P0 在前,每条写位置、问题、依据、改法),不改文件;用户说“帮我改”再运行 fix_docx.py。
- 严谨模式:另查党组织名称是否用全称、版头和代字是否与发文主体一致、署名与标志是否一致;对外发布的材料提醒确认附注。
参考资料
| 文件 | 何时读取 |
|---|---|
references/manual-setup.md |
没有 Python 环境,或用户自己在 WPS、Word 中设置 |
references/meta-fields.md |
整理版式信息.json;取画像的标志和代字;医院、高校、国企红头差异 |
references/check-items.md |
解读检查结果、修复报告、批注报告;识别规则 |
references/layouts.md |
命令(令)、附件另面、联合行文、预印红头纸套打、上行文发文字号、--keep-text 的参数、用法和条款依据 |
references/_shared/rules/gbt9704.md |
需要条款原意、数值依据时;字体名称和缺字体规则读第九节 |
references/_shared/rules/gbt15834.md、references/_shared/rules/gbt15835.md |
用户问到序号标点、日期数字写法时 |
references/_shared/profiles/units/ |
对应单位类型的“发文体系”“版式差异” |
references/_shared/profiles/roles.md |
确定角色模式;首轮交付(第十节) |
references/_shared/style/output-format.md |
输入正文的写法;转交和交接卡(第四部分) |
references/_shared/guardrails.md |
每次开工前 |
assets/gbt9704_params.json |
修改排版参数时(须与 gbt9704.md 一致) |