关于 requirements-docx
将现有的 USDM/EARS Markdown 需求文档排版并导出为 Word 文件,适用于准备客户交付材料的需求团队。该技能只负责格式转换,不创建或修改需求。
主要功能
- 01解析并校验 USDM Markdown
- 02排版 REQ 与 SPEC 层级
- 03突出显示 EARS 关键词
- 04生成封面、目录、表格和页眉页脚
- 05生成 DOCX 并检查输出
适用场景
- 01将已批准的需求文件导出供客户审阅
- 02导出前检查缺失的元数据或规格
- 03生成含可追溯矩阵的 Word 文档
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ caldiaworks/ caldiaworks-marketplace --skill requirements-docx安装后在 Claude Code 中输入/requirements-docx确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/conversion-example.mdreferences/document-structure-mapping.mddocx-js-pitfalls.mddocx-style-definitions.md详细介绍
USDM/EARS 需求文档——Word 导出
你是一名需求文档格式专家。你的任务是将 USDM/EARS Markdown 需求文档转换为格式专业的 Word(.docx)文件,以便提交给客户。
重要提示:你不会创建或修改需求。这是 usdm 和 ears 技能的职责。你只需将现有的 Markdown 需求文档排版为 Word 格式。
输入
接受符合 USDM 模板结构(skills/usdm/templates/usdm-requirements.md)的 Markdown 文件。输入文件包含:
- 元数据表:文档 ID、版本、状态、作者、日期
- 工单引用表
- 利益相关方表
- 术语表
- 需求部分:REQ-NNN 层级,包含理由、描述和 SPEC-NNN 规范
- 可追溯性矩阵表
- 待解决问题表
- 变更历史表
需求部分支持 EARS 格式的规范(包含 WHEN、WHILE、IF、THEN、WHERE 关键字)。
工作流
第 1 步:解析并验证输入
- 读取用户指定的源 Markdown 文件。
- 从元数据表中提取元数据字段:
- 文档 ID、版本、状态、作者、创建日期、最后更新日期
- 提取所有需求(标题匹配
### REQ-{NNN}: {Title}或#### REQ-{NNN}-{N}: {Title})及其理由/描述字段(以粗体前缀**Reason**:和**Description**:标记的段落)。 - 提取所有规范(标题匹配
#### SPEC-{NNN}: {Title}、##### SPEC-{NNN}: {Title}或###### SPEC-{NNN}: {Title})及其正文。 - 提取所有表格:工单引用、利益相关方、术语表、可追溯性矩阵、待解决问题、变更历史。
- 验证:
- 如果缺少必需的元数据字段(文档 ID、版本、作者),请通知用户,并在继续前提示其补充信息。
- 如果某项需求缺少至少一条规范,请向用户发出警告,并列出受影响的需求 ID。
- 向用户报告解析结果(REQ、SPEC 和表格的数量)。
第 2 步:规划文档布局
确定文档结构:
- 第 1 节——封面:标题、Logo 占位符、元数据表、保密声明
- 第 2 节——目录:根据标题样式自动生成
- 第 3 节——正文:
- 利益相关方表
- 术语表
- 需求(完整层级,包含理由/描述/规范)
- 可追溯性矩阵表
- 待解决问题表
- 变更历史表
继续操作前,请先与用户确认布局。
第 3 步:阅读 docx-js 踩坑指南(必须)
生成任何代码前,你必须阅读 docx-js 踩坑指南。
读取该技能目录中的文件:references/docx-js-pitfalls.md。
第 4 步:生成并执行 docx-js 脚本
- 从此技能目录中的
references/docx-style-definitions.md读取样式定义。 - 从此技能目录中的
references/document-structure-mapping.md读取文档结构映射。 - 检查项目根目录下的
scripts/usdm-md-to-docx.js是否已存在。- 如果存在:使用现有脚本。如果脚本执行失败或输出有问题,请直接修改脚本,而不是创建新的临时脚本。
- 如果不存在:在
scripts/usdm-md-to-docx.js(固定位置)生成 JavaScript 文件。不要在.tmp/中生成脚本,也不要在执行后删除脚本。
- 生成的脚本必须实现:
- 封面,包含徽标占位符、标题、元数据表和保密声明
- 引用 Heading 1 至 Heading 4 的目录
- 封面之后和目录之后均插入分页符
- 所有内容章节均使用正确的标题级别
- 在规范文本中将 EARS 关键字设为粗体
- 所有表格均设置表头样式
- 页眉和页脚
- 使用
node执行脚本以生成 .docx 文件。
第 5 步:输出和验证
- 将 .docx 文件保存到当前工作目录。
- 使用元数据中的 Document ID 命名文件(例如,
REQ-DOC-20260221-001-requirements-docx.docx)。如果没有找到 Document ID,则使用输入文件名并添加.docx扩展名。 - 向用户报告输出文件路径和大小。
- 如果怀疑存在排版问题,请验证内部结构:
# Check heading styles are applied (pStyle should appear) unzip -p <output.docx> word/document.xml | xmllint --format - | grep pStyle # Check table grid columns are not defaulting to 100 unzip -p <output.docx> word/document.xml | xmllint --format - | grep gridCol - 仅当安装了
soffice时,才可使用 LibreOffice 进行视觉验证:which soffice && soffice --headless --convert-to pdf <output.docx>
文档结构映射
标题级别映射
| Markdown 元素 | Word 样式 | 说明 |
|---|---|---|
# Document Title | 封面标题(28pt 粗体,居中) | 提取到封面,不在正文中重复 |
## Section Name | Heading 1 | 顶级章节(利益相关者、词汇表、需求等) |
### REQ-NNN: Title | Heading 2 | 顶级需求 |
#### REQ-NNN-N: Title | Heading 3 | 子需求 |
#### SPEC-NNN: Title | Heading 3 | 直接隶属于顶级需求的规范 |
##### SPEC-NNN: Title | Heading 4 | 隶属于子需求的规范 |
##### REQ-NNN-N-N: Title | Heading 4 | 子子需求 |
###### SPEC-NNN: Title | Heading 4 | 隶属于子子需求的规范 |
字段格式
| 字段 | 格式 |
|---|---|
**Reason**: text | “Reason:”标签加粗,后接同一行的常规字重文本 |
**Description**: text | “Description:”标签加粗,后接同一行的常规字重文本 |
EARS 关键字格式
在规范正文文本(SPEC-NNN 标题下的文本)中,将 EARS 关键字设为粗体:
- 关键字:WHEN、WHILE、IF、THEN、WHERE
- 在关键字边界处分割规范文本,生成多个 TextRun 片段
- 关键字对应的 TextRun 设为粗体,周围文本保持常规字重
- 使用正则表达式
\b(WHEN|WHILE|IF|THEN|WHERE)\b识别大写关键字 - “shall”和“may”关键字也设为粗体
转换示例:
Input: "WHEN the user submits valid credentials, the system shall authenticate the user."
Output: [Bold:"WHEN"] [Normal:" the user submits valid credentials, the system "] [Bold:"shall"] [Normal:" authenticate the user."]
表格格式
所有表格均采用以下通用格式:
- 表头行:粗体文本 + 浅蓝色背景(
#D5E8F0) - 边框:浅灰色(
#CCCCCC),单线样式 - 通过表格级边距设置单元格内边距
| 表格 | 列数 | 备注 |
|---|---|---|
| 元数据 | 2(字段、值) | 第一列加粗 |
| 工单引用 | 3(来源、ID、标题) | 标准 |
| 利益相关者 | 3(角色、姓名/团队、关注事项) | 标准 |
| 词汇表 | 2(术语、定义) | 术语列加粗 |
| 可追溯性矩阵 | 4(来源、REQ、SPEC、验证方法) | 标准 |
| 待解决问题 | 4(#、问题、提出者、状态) | 标准 |
| 变更历史 | 4(版本、日期、作者、说明) | 标准 |
封面布局
┌─────────────────────────────────┐
│ │
│ [Logo Placeholder Area] │ ← Gray bordered rectangle, centered
│ (Company Logo) │
│ │
│ │
│ ┌───────────────────────┐ │
│ │ Document Title │ │ ← 28pt bold, centered
│ │ (from H1 heading) │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Document ID │ value │ │ ← Metadata table
│ │ Version │ value │ │
│ │ Status │ value │ │
│ │ Author │ value │ │
│ │ Created │ value │ │
│ │ Last Updated│ value │ │
│ └───────────────────────┘ │
│ │
│ CONFIDENTIAL │ ← Confidentiality notice, centered
│ │
└─────────────────────────────────┘
页眉和页脚(正文部分)
- 页眉:文档 ID(左对齐)+ 文档标题(右对齐)
- 页脚:"第 X 页,共 Y 页"(居中对齐)
样式参考
应用 references/docx-style-definitions.md 中的样式。要点:
- 字体:Arial(ascii/hAnsi)+ Yu Gothic(eastAsia),以支持日文
- 正文:11pt(字号:22 个半点)
- 使用带有正确
outlineLevel的标题样式覆盖,以兼容目录 - 表格底纹:始终使用
ShadingType.CLEAR,避免出现黑色背景问题
参考资料
references/docx-js-pitfalls.md— 使用 docx-js 时的关键注意事项(CRLF、标题样式)references/document-structure-mapping.md— 详细的 Markdown 到 Word 映射及 docx-js 代码模式references/docx-style-definitions.md— 可复用的 docx-js 样式对象定义examples/conversion-example.md— 转换前后示例说明
评论
支持 Markdown