| name | document-formatting |
| version | 1.0.0 |
| description | 诉讼文书 Word 排版强制闸门——法院提交的诉讼文书(主诉诉状、被诉答辩状、质证意见、代理词、程序性文书系列)转 Word 前,必须经本技能核验格式合规性。10 项内容硬规则 + 10 项文本清洗 + 6 项结构规范 + 12 项 Word 后验校验。排版参数由 `format-spec.md` 提供,DOCX 转换按 4 级降级链执行。不通过则退回修正,不可跳过。触发词:排版核验、格式检查、转 Word、排版、docx。 |
文书排版(document-formatting)· 输出侧格式合规闸门
本技能是本套件正式 Word 文件输出前的格式合规围栏。法院提交的 5 个诉讼文书技能——主诉诉状、被诉答辩状、质证意见、代理词、程序性文书系列——在将 Markdown 草稿转换为 Word(.docx)之前,必须先经本技能核验内容规范、执行文本清洗与结构规范化,转换后再执行 Word 后验校验。全部通过方可交付;不通过则退回修正或自动修复。
与法律核验对称:法律核验守"引用真实性"(输出侧闸门·内容合规),本技能守"格式合规性"(输出侧闸门·格式合规)。两道闸门并列,均为强制不可跳过。
0 | 定位与适用范围
适用
本技能仅适用于法院提交的诉讼文书,即以下 5 个技能的 Word 输出:
| 序号 | 文书技能 | 典型文书 |
|---|
| 1 | 主诉诉状 | 起诉状、上诉状、再审申请书、仲裁申请书、仲裁反申请书 |
| 2 | 被诉答辩状 | 答辩状、上诉答辩状、再审答辩状、仲裁答辩状、仲裁反请求答辩状 |
| 3 | 质证意见 | 质证意见书 |
| 4 | 代理词 | 代理意见、补充代理意见 |
| 5 | 程序性文书系列 | 保全申请书、调查取证申请书、管辖权异议申请书等四十余种 |
不适用
以下技能/场景不经过本闸门:
- 新法解读(纯研究报告,不提交法院)
- 法律研究报告(内部参考)
- 庭审提纲(庭前准备材料,非正式提交件)
- 证据目录(逻辑层编排,非排版对象)
- 证据装册(物理装订顺序,不走排版流程)
- 要件攻防分析(内部分析文件)
- 财产线索调查(内部尽调报告)
- 案件事实梳理(内部工作底稿)
闸门地位
起草 md 草稿 → 【法律核验闸门】→ 引用全部准确?
├─ 否 → 退回修正
└─ 是 ↓
【文书排版闸门】→ 格式合规?
├─ 否 → 退回修正 / 自动修复
└─ 是 → 交付 .docx + 排版核验报告
两道闸门并列、顺序执行,均强制不可跳过。
0.5 | 两种调用模式
模式一:输出前自动闸门(其他技能调用,默认)
文书生成技能在转 Word 前,把 Markdown 草稿交给本技能核验:
md 草稿 → 【文书排版闸门】→ 10 项硬规则 + 清洗 + 结构规范 + 转换 + 后验
├─ 全部通过 → 交付 .docx + 排版核验报告
└─ 不通过 → 退回修正(硬规则)/ 自动修复(后验偏差)→ 重新核验 → 直至放行
闸门为强制、不可跳过。文书生成技能不得绕过本闸门直接输出 .docx。
模式二:独立排版核验(用户直接调用)
用户粘贴 Markdown 文本或给出文件路径,本技能执行完整核验流程并输出排版核验报告。用户可选择是否继续执行 Word 转换。
1 | 闸门工作流(6 步)
Markdown 草稿输入
↓
Step 1:内容规范检查(10 项硬规则,R1-R10)
↓ 不通过 → 退回修正(逐条列出违规项与修正建议)
Step 2:文本清洗(10 项清洗规则,C1-C10)
↓ 自动执行,不需人工干预
Step 3:结构规范化(6 项规范,S1-S6)
↓ 自动执行
Step 4:调用 md2docx_legal.py 转换
↓
Step 5:Word 后验校验(12 项参数比对,V1-V12)
↓ 不通过 → 自动修复(1-2 项偏差)或退回(3+ 项失败)
Step 6:交付 .docx + 排版核验报告
2 | Step 1:内容规范检查(10 项硬规则,R1-R10)
本步骤对 Markdown 草稿执行 10 项硬规则检查。任一项不通过即退回修正,不得带病进入下一步。
| # | 规则 | 检查方法 | 违规示例 |
|---|
| R1 | 禁止"法律依据"独立章节 | 正则匹配 ^#{1,3}\s*(法律依据|法律适用) | ### 七、法律依据 |
| R2 | 禁止正文引用被屏蔽的书籍/作者 | 从 format-spec.md §9.1 读取 blocked_authors / blocked_books 清单(默认为空)进行匹配;用户按需填入 | 视用户清单而定 |
| R3 | 附件区域禁止列证据 | 检查 ## 附 下是否含 证据|笔录|合同|截图 | 1. 行政处罚决定书;2. 谈话笔录 |
| R4 | 主体信息禁止冗余工商字段 | 检查当事人板块是否含 企业类型|成立日期|注册资本|经营范围 | - 企业类型:有限责任公司 |
| R5 | 来源标记仅用白名单格式 | 从 format-spec.md §9.2 读取 citation_tags 白名单进行匹配,其他格式一律报错 | [参见 X 教授 X 书第 X 章](未列入白名单) |
| R6 | 禁止 HTML 标签残留 | 正则匹配 <(sup|sub|br|div|span|p|!--) | <sup>[1]</sup> |
| R7 | 禁止 Markdown 语法残留 | 检测正文行内残留 ^#{1,6}\s|^\*{1,2}|^\-{3}|^>\s(标题行、加粗、分割线、引用块不应出现在正文段落内部) | ### 一、原告主体介绍(作为正文行时) |
| R8 | 同一主体仅允许一个住所地 | 检测当事人板块内"住所地"/"地址"/"住址"出现次数,>1 则报错 | 法人同时写"注册地址:XX"和"办公地址:YY" |
| R9 | 自然人主体禁止写入职务信息 | 检测自然人板块内"职务"/"职位"/"岗位"/"担任"等字段 | - 职务:总经理(自然人被告) |
| R10 | 法人主体仅允许法定代表人附带职务 | 检测法人板块内除"法定代表人"外是否出现其他职务描述 | - 总经理:张三(法人原告的高管列表) |
硬规则检查结果输出
━━━ Step 1:内容规范检查 ━━━
R1 禁止"法律依据"独立章节 ✅ 通过
R2 禁止正文引用特定书籍/作者 ✅ 通过
R3 附件区域禁止列证据 ❌ 不通过 → "## 附件"下发现"1. 谈话笔录",应删除或移至证据目录
R4 主体信息禁止冗余工商字段 ✅ 通过
R5 来源标记仅用两种格式 ✅ 通过
R6 禁止 HTML 标签残留 ✅ 通过
R7 禁止 Markdown 语法残留 ✅ 通过
R8 同一主体仅允许一个住所地 ✅ 通过
R9 自然人主体禁止写入职务信息 ✅ 通过
R10 法人主体仅允许法定代表人附带职务 ✅ 通过
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
结论:⛔ 拦截(1 项不通过),请修正后重新提交
全部通过后方可进入 Step 2。
3 | Step 2:文本清洗(10 项清洗规则,C1-C10)
通过硬规则检查后,自动执行以下 10 项文本清洗,无需人工干预:
| # | 清洗规则 | 操作 | 示例 |
|---|
| C1 | Markdown 标题标记清除 | 移除行首 #{1,6}\s,保留标题文字 | ## 事实与理由 → 事实与理由 |
| C2 | 加粗标记清除 | 移除 **...** 和 __...__,保留内部文字 | **事实与理由** → 事实与理由 |
| C3 | 列表标记规范化 | 统一 - / * / + 为编号或圆点,按上下文判定 | - 第一项 → 1. 第一项(有序上下文) |
| C4 | HTML 上标清除 | 移除 <sup>...</sup> 标签,保留内容 | <sup>[1]</sup> → [1] |
| C5 | HTML 标签清除 | 移除所有残余 HTML 标签 <...> | <br/> → 换行符 |
| C6 | Markdown 引用标记清除 | 移除行首 >\s,保留正文 | > 综上 → 综上 |
| C7 | 水平分割线清除 | 移除 --- / *** / ___ 分割线 | --- → 删除 |
| C8 | 直双引号转中文 | "..." → "…" | "违约" → "违约" |
| C9 | 直单引号转中文 | '...' → '…' | '善意' → '善意' |
| C10 | 连续空行压缩 | 连续 3 行及以上空行压缩为 2 行 | \n\n\n\n → \n\n |
4 | Step 3:结构规范化(6 项规范,S1-S6)
清洗完成后,执行以下 6 项结构规范化:
| # | 规范 | 说明 |
|---|
| S1 | 当事人板块分隔 | 原告、被告、第三人各板块之间插入一个空行分隔,板块内部不插入多余空行 |
| S2 | 事实与理由大标题格式 | "事实与理由"作为一级大标题,不加粗,宋体四号 |
| S3 | 附件净化 | "## 附件"/"## 附"区域仅保留"附件:本起诉状副本 X 份"等非证据性内容,证据类条目在 Step 1(R3)已拦截 |
| S4 | 签名区右对齐 | 落款人行("具状人:/答辩人:/申请人:/上诉人:/提交人:/落款人:")及紧随其后的日期行右对齐;日期支持"YYYY年 M 月 D 日"或"YYYY年 月 日"(月/日留白)两种模板 |
| S5 | 此致格式 | "此致"独占一行,首行缩进2字符 |
| S6 | 法院名称格式 | "此致"下一行法院全称,左对齐无缩进(顶格),不加书名号 |
4.1 落款识别规则(S4 落款细则)
签名区落款采用两条互补路径识别,均由 md2docx_legal.py 内置:
-
通用落款关键词白名单:以下 6 个关键词后紧跟中文冒号/英文冒号视为落款起始,命中即置 in_signature_area=True 并写入右对齐段落。
- 具状人、答辩人、申请人、上诉人(诉状/答辩状/上诉状本体落款)
- 提交人、落款人(证据目录、质证意见、庭前证据交换记录等辅助文书落款)
正则:^(具状人|答辩人|申请人|上诉人|提交人|落款人)[::]
-
落款前瞻判定(避免与文书开头"答辩人:/被答辩人:"当事人板块冲突):当行首命中 PARTY_KEYWORDS(原告/被告/答辩人/被答辩人/申请人/被申请人/上诉人/被上诉人)时,向下跳过空行前瞻一行——若前瞻行匹配日期行正则 ^\d{4}\s*年\s*\d{0,2}\s*月\s*\d{0,2}\s*日,则本行为落款而非当事人板块,直接右对齐并置 in_signature_area=True,跳过 process_party_block 分支。
-
日期行留白兼容:签名区日期行支持完整日期与模板留白两种写法,均命中同一正则 \d{0,2}:
- 完整:
2026年 7 月 15 日
- 留白:
2026年 月 日(月/日字段留空供手工填写,交付前常见)
两种写法均在 in_signature_area=True 状态下右对齐。
违规示例:
- ❌ 结尾"答辩人:[公司全称] / 2026年 月 日"若未命中前瞻,会被误当当事人板块处理,写出左对齐段落——V10 校验会拦截。
5 | 排版规范参数(来源:format-spec.md)
参数源:本套件所有排版参数——字体、字号、行距、边距、对齐、缩进、颜色——统一在套件根目录的 format-spec.md 集中定义。md2docx_legal.py 与 verify_docx.py 均以此文件为参数源。
默认值来源:中国最高人民法院诉讼文书样式模版 v2020(6 份 .docx 实测提取,5/6 一致为准)。
用户覆写:用户可直接编辑 format-spec.md,或复制为 format-spec.<court-name>.md 并在 profile.md 的 format_spec_path 字段指向该文件;md2docx_legal.py 会优先读取指向的文件,未覆写字段沿用默认值。
核心规范速查(详见 format-spec.md):
| 元素 | 字体 | 字号 | 对齐 | 其他 |
|---|
| 文书标题 | 宋体 | 二号 (22pt, sz=44) | 居中 | 不加粗 |
| 正文段落 | 宋体 | 四号 (14pt, sz=28) | 左对齐 | 首行缩进 2 字符,行距固定 25 磅 |
| 段落标题 | 宋体 | 四号 | 左对齐 + 首行缩进 | 不加粗,冒号结尾 |
| "此致" | 宋体 | 四号 | 左对齐 + 首行缩进 | — |
| 法院名称 | 宋体 | 四号 | 左对齐(顶格) | — |
| 签名/日期 | 宋体 | 四号 | 右对齐 | 落款人白名单+日期模板兼容见 §4.1;日期支持月/日留白 |
| 附件 | 宋体 | 四号 | 左对齐 + 首行缩进 | — |
页面设置:A4(11906×16838 twips),上/下 1440 twips,左/右 1800 twips。
如需为特定法域/法院定制样式,请编辑或衍生 format-spec.md,本 SKILL 无需改动。
6 | Step 4:Markdown → Word 转换(DOCX.* 4 级降级链)
结构规范化完成后,按 *DOCX. 能力槽**执行 4 级降级链。所有层级共用 format-spec.md 参数源,确保输出一致。
Tier 1 —— md2docx_legal.py(内置,首选)
└── python-docx 精确控制段落样式,读取 format-spec.md
├── 成功 → 进入 Step 5 后验校验
└── 失败 ↓
Tier 2 —— 外部 DOCX MCP(外置转换服务,如 docx-mcp / doc-generator)
└── 通过 MCP 协议调用外部转换器,传入 format-spec.md 参数
├── 成功 → 进入 Step 5 后验校验(标注"外部 MCP 转换")
└── 失败 ↓
Tier 3 —— pandoc + templates/reference.docx(通用工具降级)
└── pandoc --reference-doc=templates/reference.docx
├── 成功 → 进入 Step 5 后验校验(标注"pandoc 降级转换")
└── 失败 ↓
Tier 4 —— 纯 Markdown 兜底交付
└── 交付清洗后的 .md,告知用户 Word 转换失败与恢复步骤
首选命令:
python3 scripts/md2docx_legal.py --spec format-spec.md input.md output.docx
脚本内置 clean_text() 覆盖 C1-C10 清洗 + verify_docx() 覆盖 V1-V12 后验,转换完成后自动执行校验。
为什么要 4 级降级:本套件跨平台运行(Agent 运行时 / Claude Code / Cursor / Gemini CLI / OpenCode),不同环境的 Python / pandoc / MCP 可用性差异极大。4 级降级保证在最恶劣的环境下仍能交付。
7 | Step 5:Word 后验校验(12 项参数比对,V1-V12)
转换完成后,md2docx_legal.py 内置的 verify_docx() 自动执行 12 项参数比对;亦可独立调用 scripts/verify_docx.py:
python3 scripts/verify_docx.py --spec format-spec.md output.docx
参数(如 sz=28、line=500、firstLine=560)均从 format-spec.md 读取,用户覆写后校验自动跟随。
| # | 校验项 | 期望值(默认,可通过 format-spec.md 覆写) |
|---|
| V1 | 页面尺寸 | A4 (11906×16838 twips) |
| V2 | 页边距 | 上/下 1440, 左/右 1800 twips |
| V3 | 标题字体+字号 | 宋体, sz=44 (二号) |
| V4 | 标题对齐 | 居中 (center) |
| V5 | 正文字体+字号 | 宋体, sz=28 (四号) |
| V6 | 正文行距 | 固定值 25 磅 (line=500, lineRule=exact) |
| V7 | 正文首行缩进 | 560 twips (2 字符) |
| V8 | 当事人间空段落 | 每个当事人板块前有空段落 |
| V9 | 事实与理由标题加粗 | 节标题(一、二、…)加粗 |
| V10 | 签名区右对齐 | jc=right |
| V11 | 无 Markdown 残留 | 全文无 ###/**/<sup> 等 |
| V12 | 无直引号 | 全文无 " / ' |
后验校验结果输出
━━━ Step 5:Word 后验校验 ━━━
V1 页面尺寸 ✅ A4
V2 页边距 ✅ 标准
V3 标题字体+字号 ✅ 宋体 sz=44
V4 标题对齐 ✅ center
V5 正文字体+字号 ✅ 宋体 sz=28
V6 正文行距 ✅ 固定值 25 磅
V7 正文首行缩进 ✅ 560 twips
V8 当事人间空段落 ✅ 分隔正确
V9 事实与理由标题加粗 ✅ b=true
V10 签名区右对齐 ✅ jc=right
V11 无 Markdown 残留 ✅ 无残留
V12 无直引号 ✅ 无直引号
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
结论:✅ 全部通过(12/12)
8 | 降级与错误恢复
8.1 转换失败降级(DOCX.* 4 级)
见 §6 中的 4 级降级链。任一层失败自动降级到下一层,直到 Tier 4 交付纯 Markdown 兜底。每次降级须在最终交付报告中标注实际使用的转换器。
8.2 后验校验失败处理
阈值来自 format-spec.md §9.3 的 verify_thresholds 字段(默认 auto_fix_max: 2 / reject_min: 3):
| 失败项数 | 处理策略 |
|---|
| 0 项 | 直接交付 |
1 ≤ 项 ≤ auto_fix_max | 自动修复:针对偏差项调用 python-docx 定向修正 → 重新校验 → 通过则交付 |
项 ≥ reject_min | 退回人工检查:输出差异报告(逐项列出期望值 vs 实际值),不自动修复 |
8.3 自动修复范围
自动修复仅覆盖以下可精确定向修正的偏差:
- 字体名/字号偏差(V3-V5):直接写入正确的
run.font.name / run.font.size
- 行距偏差(V6):直接写入
paragraph_format.line_spacing
- 缩进偏差(V7):直接写入
paragraph_format.first_line_indent
- 页边距偏差(V1-V2):直接写入
section.*_margin
签名对齐(V10)和 Markdown 残留(V11)涉及内容结构,不自动修复,失败即退回。
9 | 与其他技能的关系
9.1 与法律核验:并列闸门
md 草稿 → 【法律核验闸门】→ 引用真实性 ✅
↓
【文书排版闸门】→ 格式合规性 ✅
↓
交付 .docx
- 法律核验先过(守输入侧——引用是否真实、现行有效)
- 排版闸门后过(守输出侧——格式是否符合法院提交标准)
- 两道闸门独立运行,互不替代
9.2 与文书生成技能:强制调用
以下 5 个技能在转 Word 前必须调用本闸门:
| 技能 | 调用时机 |
|---|
| 主诉诉状 | 起诉状/上诉状/再审申请书/仲裁申请书 md 完成后、交付 .docx 前 |
| 被诉答辩状 | 答辩状 md 完成后、交付 .docx 前 |
| 质证意见 | 质证意见书 md 完成后、交付 .docx 前 |
| 代理词 | 代理意见/补充代理意见 md 完成后、交付 .docx 前 |
| 程序性文书系列 | 各类程序性文书 md 完成后、交付 .docx 前 |
文书生成技能不得绕过本闸门直接输出 .docx,也不得在闸门未通过时带病交付。
9.3 与 md2docx_legal.py:转换执行器
本闸门在 Step 4(Tier 1)调用 scripts/md2docx_legal.py 执行 Markdown → Word 转换。脚本基于 python-docx 实现,运行时读取 format-spec.md 精确设置段落样式,且内置 verify_docx() 函数自动完成后验。
9.4 与 verify_docx.py:独立后验校验器
scripts/verify_docx.py 为独立命令行工具,可对任何已生成的 .docx 执行 12 项后验校验。既可被本闸门 Step 5 调用,也可由用户手动执行。校验期望值同样从 format-spec.md 读取,输出 JSON 格式校验报告,退出码:0=全通过, 1=有警告, 2=有错误。
9.5 与 format-spec.md:参数单点源
format-spec.md 是本套件排版规范的唯一权威源。SKILL(本文件)定义方法学与流程,format-spec.md 定义参数,md2docx_legal.py / verify_docx.py 是执行器。三层解耦:改参数不改 SKILL 与脚本,改流程不改参数与脚本,换执行器不改流程与参数。
10 | 排版核验报告模板
Step 6 交付时附带的排版核验报告格式如下:
╔══════════════════════════════════════════╗
║ 排版核验报告 ║
╠══════════════════════════════════════════╣
║ 文书类型:民事起诉状 ║
║ 生成技能:plaintiff-complaint v1.2.0 ║
║ 核验时间:2026-07-15 14:32:08 ║
╠══════════════════════════════════════════╣
║ Step 1 内容规范检查 10/10 通过 ✅ ║
║ Step 2 文本清洗 10/10 执行 ✅ ║
║ Step 3 结构规范化 6/6 执行 ✅ ║
║ Step 4 转换 md2docx_legal ✅ ║
║ Step 5 后验校验 12/12 通过 ✅ ║
╠══════════════════════════════════════════╣
║ 闸门结论:✅ 放行 ║
║ 交付文件:民事起诉状.docx ║
╚══════════════════════════════════════════╝
如有退回/修复项,报告中逐项列出:
━━━ 退回/修复记录 ━━━
Step 1 R3:附件区域发现证据列表 → 已退回,删除后重新提交
Step 5 V3:正文字体偏差(实际:Arial,期望:宋体)→ 已自动修复
━━━━━━━━━━━━━━━━━━━━