ruanzhu 技能 - 软著源代码DOCX生成
⚠️ 强制执行规则
必须执行以下命令,禁止任何其他操作:
bash
cp ~/.claude/templates/ruanzhu/generate_docx.py ./generate_docx.py && python3 generate_docx.py $ARGUMENTS && rm generate_docx.py
禁止事项
- •❌ 自行编写生成脚本
- •❌ 在项目中创建任何
.py文件 - •❌ 检测 python-docx 是否安装
- •❌ 创建 venv 或手动安装依赖
- •❌ 搜索项目中的文件
- •❌ 执行项目中已有的任何脚本
唯一允许的操作
✅ 执行上面的 bash 命令(一条命令,用 && 连接)
执行后状态
- •✅ 生成
docs/ruanzhu/{软件名称}{版本}-源代码.docx - •✅ 使用
--different时,生成{软件名称}{版本}-源代码-2.docx(编号递增) - •✅ 项目中不应有任何新增的 .py 文件
- •✅ 临时脚本
./generate_docx.py已被删除
参考信息(仅供了解,不要自行实现)
以下内容已由 generate_docx.py 脚本实现,不需要手动处理:
项目信息检测
按优先级读取项目名称和版本:
python
# 优先级 1: CLAUDE.md
# 查找 "# {项目名}" 或 "## 项目概述" 下的内容
# 版本:查找 "版本:" 或 "version:"
# 优先级 2: package.json
{
"name": "project-name",
"version": "1.0.0"
}
# 优先级 3: pom.xml
<artifactId>project-name</artifactId>
<version>1.0.0</version>
# 优先级 4: 用户输入
2. 检测项目语言
根据文件存在性判断:
| 检测文件 | 语言 |
|---|---|
pom.xml 或 build.gradle | Java |
package.json | JavaScript/TypeScript |
Cargo.toml | Rust |
Gemfile | Ruby |
go.mod | Go |
*.cpp 或 CMakeLists.txt | C++ |
requirements.txt 或 pyproject.toml | Python |
3. 源代码扫描规则
Java
code
优先目录: - src/main/java/**/controller/ - src/main/java/**/service/ - src/main/java/**/entity/ - src/main/java/**/repository/ - src/main/java/**/config/ - src/main/java/**/security/ - src/main/java/**/dto/ - src/main/java/**/ 排除: - *Test.java - *IT.java - *Tests.java - target/
TypeScript/Vue/React
code
优先目录: - src/api/ - src/stores/ - src/pages/ - src/views/ - src/components/ - src/hooks/ - src/utils/ - src/layouts/ - frontend/src/ 排除: - *.spec.ts - *.test.ts - *.test.tsx - *.d.ts - node_modules/ - dist/
C++
code
优先目录: - src/ - include/ - lib/ 排除: - *_test.cpp - *_test.cc - test/ - tests/ - build/
Ruby
code
优先目录: - app/controllers/ - app/models/ - app/services/ - lib/ 排除: - *_spec.rb - *_test.rb - spec/ - test/
Rust
code
优先目录: - src/ 排除: - tests/ - *_test.rs - target/
Go
code
优先目录: - cmd/ - internal/ - pkg/ - ./ 排除: - *_test.go - vendor/
Python
code
优先目录: - src/ - app/ - lib/ - ./ 排除: - test_*.py - *_test.py - tests/ - __pycache__/ - .venv/
4. 页数控制
固定页数模式(默认60页)
- •每页约57行渲染行(考虑长行换行)
- •按优先级扫描,达到目标行数后停止
- •不足则输出全部
自动模式(auto)
- •总页数 ≤ 60:输出全部
- •总页数 > 60:输出前30页 + 后30页,中间标注省略
5. 渲染行数计算
python
def estimate_rendered_lines(text, usable_width_cm=15.5):
"""估算一行文本在Word中渲染需要的行数"""
if len(text) == 0:
return 1
width = 0
for ch in text:
if ord(ch) > 127: # 中文字符
width += 0.35
else: # 英文/符号
width += 0.18
return max(1, int(width / usable_width_cm) + (1 if width % usable_width_cm > 0.1 else 0))
6. DOCX格式规范
code
页面:A4 (21cm x 29.7cm)
边距:上2.5cm, 下2.5cm, 左3.0cm, 右2.5cm
字体:宋体 + Courier New, 10pt
行距:单倍行距
页眉:
- 左侧:{软件名称} {版本}(加粗)
- 居中:第 X 页共 Y 页
- 底部:下划线
页脚:
- 居中:第 X 页
7. 输出
- •目录:
docs/ruanzhu/(不存在则创建) - •文件名:
{软件名称}{版本}-源代码.docx - •示例:
贸易订单管理系统V1.0-源代码.docx
错误处理
| 错误 | 处理 |
|---|---|
| 无法检测项目信息 | 提示用户输入 |
| 未检测到源代码 | 报错并列出支持的语言 |
| python-docx 未安装 | 自动 pip install 安装 |
| 代码量不足 | 警告并输出全部 |