Skill: zhangxue1985122219/official-document (version 1.0.5)

# official-document - 通用机关公文技能 基于 **GB/T 9704-2012** 党政机关公文格式标准，适用于各级机关单位生成正式公文。 ## 适用场景 - 生成党政机关公文（通知、请示、报告、函等） - 按国家标准排版的正式文档 - 需要规范格式的红头文件 ## 技术方案 - **语言**: Python 3 - **库**: python-docx - **编码**: UTF-8（文件头声明 `# -*- coding: utf-8 -*-`） ## 核心格式参数（GB/T 9704-2012） | 项目 | 标准值 | |------|--------| | 纸张 | A4 | | 上边距 | 3.7cm | | 下边距 | 3.5cm | | 左边距 | 2.8cm | | 右边距 | 2.6cm | | 页眉距纸边 | 1.5cm | | 页脚距纸边 | 2.5cm | | 公文标题 | 方正小标宋简体 22pt，不加粗，居中 | | 正文 | 仿宋_GB2312 16pt，首行缩进0.85cm | | 一级标题 | 黑体 16pt，不加粗 | | 二级标题 | 楷体_GB2312 16pt，不加粗 | | 行距 | 固定28.5磅 | | 页码 | 半角宋体（宋体）14pt，格式"— N —"，单页右空一字，双页左空一字 | ## 公文结构规范 ### 发文字号格式 - 年份必须使用**六角括号** `〔〕`，格式：`机关代字〔年份〕顺序号` - 示例：`陕XX〔2026〕28号`、`中XX〔2026〕28号` - **严禁**使用方括号 `【】` 或其他括号代替 - 对齐方式：支持 `left`（左对齐）、`center`（居中）、`right`（右对齐），默认 `center` ### 各部分间距 | 位置 | 间距要求 | |------|----------| | 发文字号 → 标题 | 空2行 | | 标题 → 主送机关 | 空1行 | | 主送机关 → 正文 | 直接连接，正常行距 | | 正文段落之间 | 正常行距，无额外段前段后 | | 附件前 | 空1行 | | 落款前 | 空3行 | | 落款 → 日期 | 同一行或相邻行，**右对齐，右侧空4汉字** | | 日期 → 联系方式 | 空1行 | ### 标题字体规范 | 要素 | 字体 | 字号 | 加粗 | 说明 | |------|------|------|------|------| | 发文字号 | 仿宋_GB2312 | 16pt | 否 | 左对齐/居中/右对齐，年份用六角括号 `〔〕`，如 `陕XX〔2026〕28号`，**不得**用方括号 `【】` | | 公文标题 | 方正小标宋简体 | 22pt | 否 | 居中 | | 主送机关 | 仿宋_GB2312 | 16pt | 否 | 顶格 | | 正文 | 仿宋_GB2312 | 16pt | 否 | 首行缩进0.85cm | | 一级标题 | 黑体 | 16pt | 否 | 首行缩进0.85cm | | 二级标题 | 楷体_GB2312 | 16pt | 否 | 首行缩进0.85cm | | 落款 | 仿宋_GB2312 | 16pt | 否 | 右对齐，右侧空4汉字 | | 日期 | 仿宋_GB2312 | 16pt | 否 | 右对齐，右侧空4汉字 | | 联系方式 | 仿宋_GB2312 | 16pt | 否 | 首行缩进0.85cm | | 页码 | 宋体（半角） | 14pt | 否 | 见页码格式规范 | ### 落款格式规范（GB/T 9704-2012 §7.3.5） | 项目 | 规定 | |------|------| | 发文机关全称 | 右对齐，右侧空4汉字 | | 成文日期 | 右对齐，右侧空4汉字 | | 日期写法 | 年月日写全，如 `2026年3月31日` | | 字体字号 | 仿宋_GB2312，3号（16pt） | **实现说明**：脚本通过设置段落右对齐 + 右缩进 `Twips(1280)`（约4个汉字宽度）实现落款距右4汉字的效果。 ### 联系方式格式规范 **位置**：落款日期下方空1行 **字体字号**：仿宋_GB2312，3号（16pt），首行缩进0.85cm **配置方式**：支持三种输入模式 1. **字符串模式**（直接使用，自动用中文括号包裹） ```python "contact": "联系人：张三 电话：029-XXXXXXXX，地址：陕西省西安市XXX" ``` 2. **结构化字典模式**（自动格式化，字段间用指定分隔符连接） ```python "contact": { "联系人": "张三", "电话": "029-XXXXXXXX", "地址": "陕西省西安市XXX" } ``` 3. **None**（不显示联系方式） ```python "contact": None ``` **格式选项**（通过 `contactFormat` 配置） | 选项 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `bracket` | bool | `True` | 是否用中文括号 `（ ）` 包裹整段联系方式 | | `separator` | str | `" "` | 结构化模式下的字段间分隔符 | **配置示例** ```python CONFIG = { # 简单字符串模式 "contact": "联系人：张三 电话：029-XXXXXX/181XXXXXXXX", # 或结构化字典模式 "contact": { "联系人": "赵传洪", "电话": "029-XXXXXX/181XXXXXXXX" }, # 格式选项 "contactFormat": { "bracket": True, # 用中文括号包裹 "separator": " " # 字段间用两个空格分隔 } } ``` **输出示例**（字符串模式，bracket=True） ``` （联系人：张三 电话：029-XXXXXX/181XXXXXXXX） ``` **输出示例**（结构化模式，bracket=True） ``` （联系人：张三 电话：029-XXXXXX/181XXXXXXXX） ``` **输出示例**（bracket=False） ``` 联系人：张三 电话：029-XXXXXX/181XXXXXXXX ``` ### 页码格式规范 依据 GB/T 9704-2012 §6.7，页码规则如下： | 项目 | 规定 | |------|------| | 格式 | `— N —`（半角破折号，中间为阿拉伯数字） | | 字体 | 宋体（半角），4号（14pt） | | 位置 | 版心下边缘之下（页脚区域） | | 单页（奇数页） | **右对齐**，右侧空一个全角字符 | | 双页（偶数页） | **左对齐**，左侧空一个全角字符 | **实现说明**：脚本中通过 Word 的奇偶页不同页脚功能实现，奇数页页脚右对齐并在末尾添加全角空格，偶数页页脚左对齐并在开头添加全角空格。配置项 `showPageNumber: True` 即可启用。 ### 二级标题与正文字体隔离规范 **问题背景**：python-docx 在同一段落中设置不同 run 的字体时，Word 渲染可能因样式继承导致二级标题（楷体_GB2312）的字体"溢出"到紧随的正文部分，使整段都变成楷体。 **解决方案**：脚本对 h2 类型自动执行字体拆分，将标题部分和正文部分创建为**独立 run**，各自强制声明 `ascii` + `hAnsi` + `eastAsia` 三个字体槽位，实现 100% 字体隔离。 **支持三种 CONTENTS 写法：** | 模式 | 写法示例 | 识别规则 | 渲染效果 | |------|---------|----------|---------| | 纯标题 | `("h2", "（一）创新学习机制，激发内生动力")` | 无句号，或句号在末尾且后面无内容 | 整段楷体（向后兼容） | | 同段落 | `("h2", "（一）创新学习机制，激发内生动力。改变以往……")` | 第一个句号后有文字 | 楷体 run + 仿宋 run，同一段落 | | 换行 | `("h2", "（一）创新学习机制\n改变以往……")` | 文本含 `\n` | 标题段落（楷体）+ 正文段落（仿宋） | **识别优先级**：`\n` 换行符 → 第一个句号分界 → 纯标题兜底 **AI 生成脚本时的注意事项**： - 当用户给的二级标题文本中包含正文内容时，应原样写入 CONTENTS，脚本会自动拆分 - 不要手动拆分成多条 `("h2", ...)` + `("normal", ...)` —— 脚本内部处理即可 - 如果正文内容本身较短、适合紧跟标题，优先使用**同段落模式**（用句号分隔） - 如果正文内容较长或多段落，优先使用**换行模式**（用 `\n` 分隔第一条，后续正文用 `("normal", ...)` 单独写） ### 附件格式 - 单个附件：`附件：文件名` - 多个附件： ``` 附件：1.文件名1 2.文件名2 ``` （编号左对齐） ## 使用方法 1. 加载技能：`use_skill("official-document")` 2. 复制 `scripts/generate_docx.py` 到工作目录 3. 修改 CONFIG 配置和 CONTENTS 正文内容 4. 运行 `python generate_docx.py` ## Python 编码注意事项 **重要**：所有字符串使用三引号 `"""..."""` 包裹，避免文本内容中的引号与字符串分隔符冲突。 ```python # 正确示例：正文内容含中文弯引号时，必须用三引号包裹 text = """切实发挥中文弯引号的作用""" # 错误示例 contact = "联系人：XX.." # 文本中有逗号可能没问题，但引号会有问题 ``` ### 中文引号必须原样保留 中文排版引号为弯引号字符，**区分左右**（左引号和右引号不同）。生成脚本时必须原样保留用户输入的引号，不得替换为英文直引号。 > 注意：Markdown 无法正确显示中文弯引号，因此严禁在 SKILL.md 或代码示例中展示引号字符来"示范正确用法"。 ## 文件结构 ``` official-document/ ├── SKILL.md # 本文档 ├── scripts/ │ └── generate_docx.py # Python生成脚本（含页码实现） ├── references/ │ └── gbt9704-2012.md # GB/T 9704-2012 标准全文 └── assets/ └── template_docx.js # JavaScript模板示例 ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)