mcpField
R
requirements-docx

requirements-docx

github.com/caldiaworks文档处理040 次安装31 周前更新
代码仓库

关于 requirements-docx

将现有的 USDM/EARS Markdown 需求文档排版并导出为 Word 文件,适用于准备客户交付材料的需求团队。该技能只负责格式转换,不创建或修改需求。

主要功能

  1. 01解析并校验 USDM Markdown
  2. 02排版 REQ 与 SPEC 层级
  3. 03突出显示 EARS 关键词
  4. 04生成封面、目录、表格和页眉页脚
  5. 05生成 DOCX 并检查输出

适用场景

  1. 01将已批准的需求文件导出供客户审阅
  2. 02导出前检查缺失的元数据或规格
  3. 03生成含可追溯矩阵的 Word 文档

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/caldiaworks/caldiaworks-marketplace --skill requirements-docx

安装后在 Claude Code 中输入/requirements-docx确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
conversion-example.md
references/
document-structure-mapping.md
docx-js-pitfalls.md
docx-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 步:解析并验证输入
  1. 读取用户指定的源 Markdown 文件。
  2. 从元数据表中提取元数据字段:
    • 文档 ID、版本、状态、作者、创建日期、最后更新日期
  3. 提取所有需求(标题匹配 ### REQ-{NNN}: {Title} 或 #### REQ-{NNN}-{N}: {Title})及其理由/描述字段(以粗体前缀 **Reason**: 和 **Description**: 标记的段落)。
  4. 提取所有规范(标题匹配 #### SPEC-{NNN}: {Title}、##### SPEC-{NNN}: {Title} 或 ###### SPEC-{NNN}: {Title})及其正文。
  5. 提取所有表格:工单引用、利益相关方、术语表、可追溯性矩阵、待解决问题、变更历史。
  6. 验证:
    • 如果缺少必需的元数据字段(文档 ID、版本、作者),请通知用户,并在继续前提示其补充信息。
    • 如果某项需求缺少至少一条规范,请向用户发出警告,并列出受影响的需求 ID。
  7. 向用户报告解析结果(REQ、SPEC 和表格的数量)。
第 2 步:规划文档布局

确定文档结构:

  1. 第 1 节——封面:标题、Logo 占位符、元数据表、保密声明
  2. 第 2 节——目录:根据标题样式自动生成
  3. 第 3 节——正文:
    • 利益相关方表
    • 术语表
    • 需求(完整层级,包含理由/描述/规范)
    • 可追溯性矩阵表
    • 待解决问题表
    • 变更历史表

继续操作前,请先与用户确认布局。

第 3 步:阅读 docx-js 踩坑指南(必须)

生成任何代码前,你必须阅读 docx-js 踩坑指南。

读取该技能目录中的文件:references/docx-js-pitfalls.md。

第 4 步:生成并执行 docx-js 脚本
  1. 从此技能目录中的 references/docx-style-definitions.md 读取样式定义。
  2. 从此技能目录中的 references/document-structure-mapping.md 读取文档结构映射。
  3. 检查项目根目录下的 scripts/usdm-md-to-docx.js 是否已存在。
    • 如果存在:使用现有脚本。如果脚本执行失败或输出有问题,请直接修改脚本,而不是创建新的临时脚本。
    • 如果不存在:在 scripts/usdm-md-to-docx.js(固定位置)生成 JavaScript 文件。不要在 .tmp/ 中生成脚本,也不要在执行后删除脚本。
  4. 生成的脚本必须实现:
    • 封面,包含徽标占位符、标题、元数据表和保密声明
    • 引用 Heading 1 至 Heading 4 的目录
    • 封面之后和目录之后均插入分页符
    • 所有内容章节均使用正确的标题级别
    • 在规范文本中将 EARS 关键字设为粗体
    • 所有表格均设置表头样式
    • 页眉和页脚
  5. 使用 node 执行脚本以生成 .docx 文件。
第 5 步:输出和验证
  1. 将 .docx 文件保存到当前工作目录。
  2. 使用元数据中的 Document ID 命名文件(例如,REQ-DOC-20260221-001-requirements-docx.docx)。如果没有找到 Document ID,则使用输入文件名并添加 .docx 扩展名。
  3. 向用户报告输出文件路径和大小。
  4. 如果怀疑存在排版问题,请验证内部结构:
    # 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
    
  5. 仅当安装了 soffice 时,才可使用 LibreOffice 进行视觉验证:
    which soffice && soffice --headless --convert-to pdf <output.docx>
    

文档结构映射

标题级别映射
Markdown 元素Word 样式说明
# Document Title封面标题(28pt 粗体,居中)提取到封面,不在正文中重复
## Section NameHeading 1顶级章节(利益相关者、词汇表、需求等)
### REQ-NNN: TitleHeading 2顶级需求
#### REQ-NNN-N: TitleHeading 3子需求
#### SPEC-NNN: TitleHeading 3直接隶属于顶级需求的规范
##### SPEC-NNN: TitleHeading 4隶属于子需求的规范
##### REQ-NNN-N-N: TitleHeading 4子子需求
###### SPEC-NNN: TitleHeading 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