# Cnipa Patent Writer

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-fnjialun-cnipa-patent-writer-cnipa-patent-writer`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [fnjialun](https://agentstack.voostack.com/s/fnjialun)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [fnjialun](https://github.com/fnjialun)
- **Source:** https://github.com/fnjialun/cnipa-patent-writer

## Install

```sh
agentstack add skill-fnjialun-cnipa-patent-writer-cnipa-patent-writer
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 中国发明专利撰写（套用模板格式 / 无模板按 CNIPA 标准）

帮助撰写一篇**新的**发明专利申请文档（`.docx`）：套用页眉/页脚、分节、字体字号、缩进行距、分页与附图编排
等**版式**，但**内容据待保护的技术方案重新写**——模板只提供格式与行文风格，**其技术内容一律不抄**。

## 何时用 / 输入
- 有模板：用户给一份模板专利 `.docx`（作格式参照）+ 一个要写成专利的"技术方案/系统/项目"（代码库、设计
  文档或口头描述）。→ 用克隆装配器 `build_patent.py`，版式 100% 继承模板。
- 无模板：用户只给技术方案。→ 用兜底装配器 `build_patent_cnipa.py`，按 CNIPA 标准版式生成。
- 目标产物：一篇排版规范的 `.docx`（含配图），可直接提交/继续打磨。

## 依赖（缺则先装；装包注意 proxy）
- 必装：`python-docx`、`matplotlib`、`Pillow`（`pip install python-docx matplotlib Pillow`）。
- 可选：`graphviz`（用 `gen_figures_graphviz.py` 画复杂流程/架构图时）——除 `pip install graphviz`（python 封装）
  外**还需系统二进制 `dot`**：`sudo apt-get install -y graphviz`，否则渲染报错。不画 graphviz 图则无需安装。
- **CJK 字体**：matplotlib/graphviz 画中文必须有中文字体（如 Noto Sans CJK / 宋体），否则中文渲染成豆腐块。
- **可视化校验工具**（强烈建议）：`libreoffice-writer`（提供 `soffice`，docx→pdf）+ `poppler-utils`
  （提供 `pdftoppm`，pdf→png）+ 中文字体（如 `fonts-noto-cjk`，或把 Windows 宋体/黑体拷进 `~/.fonts` 后
  `fc-cache -f`）。这些一般需 `sudo apt-get install`；无 sudo 时请用户手动装。

## 核心原则（先读这几条，避免返工）
1. **只借格式、绝不抄技术内容（最重要的红线）**：模板**只**提供版式、行文风格、分节/页眉页脚/分页等通用
   架构；它的**技术方案、技术架构、层级划分、模块名、步骤编排、配图的数量与种类**（哪怕看着很"通用"）一律
   **不得搬进新专利**——因为换一个用户就是另一套技术，照搬既写错又涉抄袭。**一切文本与配图都据用户提供的
   材料/项目代码实际生成**；模板里出现的具体技术（某种特定级联结构、某种模型分工、某些字段/JSON 示例等）只
   能当"格式长什么样"的参照，不能当内容来源。动笔与画图前先自问：这句话/这张图是不是来自用户的真实方案？
2. **结构校验 ≠ 视觉校验（最容易栽的坑）**：python-docx 查到"样式名/字号全对"，用户在 Word/WPS 打开仍可能
   错（页眉错、图越界、中文豆腐块、标题当正文）。**完稿必须渲染成页面逐页看**（见下"第7步"）。这是本技能
   反复返工后总结出的第一教训。
3. **权利要求一律宽泛，真实参数/产品名只进实施例**：claims 用上位概念（如"预设阈值""通信通道""存储模块"），
   具体数值/角度/距离/倍率/型号/接口/消息通道（你这篇方案里的真实值）只在"实施例"里以"例如/优选"出现。
4. **正文 solo 写、术语锁定**：claim N ↔ 发明内容里对应的"进一步地" ↔ 实施例里的实现，三处**用词必须一致**。
   先定一份术语表再写，全篇复用；不要并行分写正文（会术语漂移）。
5. **创新点放进权利要求1**：把最硬的发明点（解决的关键技术问题）写进独立权利要求1，不要藏在从属里。

## 工作流

### 1. 学习格式基准（务必先做）
读 `references/docx-format.md`（克隆复刻法）与 `references/cnipa-format-spec.md`（CNIPA 精确版式）。然后：
- **有模板**：跑 `python scripts/inspect_template.py 模板.docx` 一次扒出全部版式——分节数与分节符、各节页眉
  文字、页脚是否有 PAGE 域页码及起始页、页面尺寸/页边距、各类段落（标题/正文/权项/发明名称/实施例子标题/
  图号）的字体字号对齐缩进段距、正文段长分布。**逐项对齐**（尤其确认 **4 节 4 页眉**：说明书摘要 / 权利要求书
  / 说明书 / 说明书附图，以及**附图节页码怎么处理**）。这一步决定 `build_patent.py` 能否 1:1 复刻。
- **无模板**：直接采用 `cnipa-format-spec.md` 的标准参数（已内置进 `build_patent_cnipa.py`），跳到写作。
- 注意：`inspect_template.py` 只读模板的**版式**，**不读取也不复制模板的技术内容**。

### 2. 与用户确认关键决策（动笔前）
用 AskUserQuestion 之类把这几项敲定（拿不准就问，别猜）：
- **发明名称**（标题）：要凝练、含核心创新词。
- **独立权利要求1 的落点**：端到端方法？某个最硬核的子方法？还是系统？
- **技术细节颗粒度**：实施例写真实参数/产品名，还是脱敏。
- **输出**：是否生成 .docx + 是否生成配图。
若技术方案与已有模板是"同一发明家族/不同发明"，也确认定位。

### 3.（若来自真实系统）取真实事实供实施例
若专利写的是一个真实代码库/系统：先把要写进实施例的**真实参数、schema、接口、模型名**连同 `file:line`
扒出来（可并行起多个只读 agent 各扒一个子系统）。权利要求保持宽泛，但实施例要"像真实交底书"。

### 4. 锁术语 + solo 写正文
读 `references/writing-style.md`（中国专利行文手法 + 各部分范式与例句 + 功能/模式抽象 + 反面清单）。定术语表，
然后**一气呵成写全篇**：摘要 → 权利要求书（独立1 + 从属 + 系统 + 多引）→ 说明书（技术领域/背景技术/发明内容/
有益效果/附图说明/具体实施方式）。**实施例的数量与类型按本方案定**（常见方法/系统/示例，但不强制三个或固定
顺序）。写完自查：每条从属是否引用父项、每个权利要求要素是否在实施例有支撑、术语是否全篇一致。

### 5. 生成配图（数量与类型按内容定，不照搬模板图）
读 `references/figures.md`（**含六条硬规则 + 强制自查清单，画图前必读**）。**先想清楚这篇发明需要哪些图**——
画几张、哪些类型由技术方案决定，**不是每篇都要 5 张、也不一定有架构图或 JSON 图**；模板的图只参考画风与排版。
- **流程图/模块架构图优先直接调用** `make_figures.py` 的 `vflow` / `vmodules`：它们**框随文字自适应不溢出、单列
  竖排、纯黑粗线、画布贴近页宽字够大、回流/分组标签横排带白底不压线**，把最容易翻车的几条规则内置好了——
  **别手搓固定尺寸的盒子**（手搓最常见的就是文字溢出、字太小、压线）。曲线类图（谱/特性曲线）自己用 matplotlib
  画时同样守六规则（粗黑线、标注用引线引到留白处加白底、语义正确）。复杂自动布局可用 `gen_figures_graphviz.py`。
- **每画完一张必须单独 `Read` 这张 PNG，逐条核对六规则**（纯黑/不溢出/单列字大/不压线/线与字都完整/图文匹配），
  不合格就改了重画再嵌入。这一步是"稳定出好图"的关键，**不可跳过**（跳过就会出溢出、压线、小字）。

### 6. 装配 docx（四节四页眉 + 页码）
- **有模板** → `scripts/build_patent.py`（`PatentBuilder`）：克隆模板真实段落作原型、自动建 4 节挂对应运行
  页眉、**开局逐节扒模板真实的页脚/页码并原样复刻**（权利要求书/说明书各自从 1 重起；摘要/附图是否有页码
  照模板实测还原——有的附图独立无页码、有的续接说明书页码，模板怎样产出就怎样）、嵌图、清孤儿图。按链式 API 喂内容。
- **无模板** → `scripts/build_patent_cnipa.py`：把内容组织成**区块 JSON**（`["abstract"/"claim"/"title"/"h1"/
  "h2"/"body"/"code"/"figure", …]`），按 CNIPA 标准版式一次性生成同样的四节四页眉结构。
- 两者用法见各自脚本顶部 docstring 与 `references/docx-format.md`。**装配后必做第 7 步渲染校验**——尤其逐页确认
  四个页眉各就各位、权利要求书/说明书页码确实各自从 1 重起（页码是本技能反复栽过的坑）。

### 7. 可视化校验（不可跳过）
用 `scripts/render_check.py` 把成稿渲染成逐页 PNG，然后**逐页 Read 查看**：
- 4 个运行页眉是否分别为 说明书摘要/权利要求书/说明书/说明书附图；权利要求书/说明书页码是否各自从 1 重起；
- **发明名称（黑体居中标题）是否清晰无豆腐块**——这是套模板时最易翻车处：模板若内嵌了字体子集，新专利里
  模板没有的字（尤其黑体发明名称）会渲染成 □。`build_patent.py` 已自动剥离内嵌字体规避；但**务必亲眼确认
  发明名称那一行的每个字都正常**（别只看配图、别只看正文宋体）。
- 正文是否宋体、两端对齐、首行缩进 2 字、行距正确；章节标题加粗；发明名称居中且只出现一次；
- 配图是否清晰、居中、不越右边距、中文无豆腐、图号正确；
- 分页是否有标题孤行、图被截断等。
发现问题→改脚本/内容→重渲染。**只有看过渲染页面才算完成。**

### 8. 完成
把最终 .docx 路径交给用户，并请其在 Word/WPS 通览。建议保留你的两个生成脚本（图、装配）以便迭代。

## 资源
- `references/writing-style.md` — 中国专利行文手法、各部分写法范式、功能/模式抽象求宽保护、**反面清单**（**写正文前必读**）。
- `references/docx-format.md` — 克隆复刻法、四节四页眉、页码页脚修复、无模板兜底装配（**装配前必读**）。
- `references/cnipa-format-spec.md` — CNIPA 精确版式参数（字体/字号/页眉页脚/分节/段长），有模板时核对、无模板时为准。
- `references/figures.md` — 配图生成方法、内容驱动选图、matplotlib/graphviz 两路、字号公式、CJK 与常见坑（**画图前必读**）。
- `scripts/inspect_template.py` — 扒任意模板 docx 的版式（分节/页眉页脚/字体/页面/段长），对齐格式用（只读版式）。
- `scripts/build_patent.py` — **有模板**装配器 `PatentBuilder`（克隆原型 + 四节页眉 + 页码页脚 + 嵌图 + 清孤儿图）。
- `scripts/build_patent_cnipa.py` — **无模板**兜底装配器（区块 JSON → CNIPA 标准四节 docx）。
- `scripts/make_figures.py` — matplotlib 配图图元与示例（白底黑线、实心白盒、CJK、JSON 正反例）。
- `scripts/gen_figures_graphviz.py` — graphviz 纯黑白流程/架构图（`new_graph()` 样式封装 + 占位示例）。
- `scripts/gen_json_figs.py` — matplotlib 结构化输出面板图（长行自动换行；可选）。
- `scripts/render_check.py` — docx→pdf→逐页 png（供可视化校验）。

> 行文与配图的反面清单（草稿痕迹、步骤号不一致、示例自相矛盾、照搬模板内容等真实踩过的坑）见
> `references/writing-style.md` 第五节，**提交前逐条排查**。

## 易踩坑速查
- 中文豆腐块：matplotlib 未注册 CJK 字体；或图里用了 `family="monospace"`（等宽字体无中文字形）——含中文的
  代码/JSON 直接用 CJK 字体渲染，别用 monospace。
- **发明名称/黑体字豆腐块（套模板专属坑）**：模板用 Word 内嵌了字体子集（`word/fonts/*.odttf` + settings 的
  `embedTrueTypeFonts`），子集只含模板原有文字；克隆后本专利模板没有的字（黑体发明名称最典型）→ □。
  `build_patent.py` 的 `save()` 已自动剥离内嵌字体根治；若你绕过它自行存盘，记得去掉内嵌或用系统完整字体。
- 图越界：图宽 > 版心宽（`page_width-左边距-右边距`）。嵌入宽统一 ≤ 版心宽。
- 全篇同一个页眉：克隆模板清空 body 塌成 1 节所致——必须按 §6 建 4 节并各挂 headerReference。
- 文件臃肿/夹带模板配图：克隆模板遗留未引用的 `word/media/imageN`——保存前清掉未被 `a:blip` 引用的图片关系。
- 字太小：图画布太宽、嵌入后缩太狠——画布宽贴近嵌入宽 + 加大字号（见 §5 公式）。
- 经纬度/单位类换序：若涉及坐标，注意"经度在前/纬度在后"等顺序与范围校验，避免写反（这类细节进实施例）。

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [fnjialun](https://github.com/fnjialun)
- **Source:** [fnjialun/cnipa-patent-writer](https://github.com/fnjialun/cnipa-patent-writer)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-fnjialun-cnipa-patent-writer-cnipa-patent-writer
- Seller: https://agentstack.voostack.com/s/fnjialun
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
