Skip to main content
ClaudeWave
Skill2.3k repo starsupdated 2d ago

nsfc-budget

The nsfc-budget Claude Code skill generates a budget justification document (budget explanation book) for NSFC (National Natural Science Foundation of China) grant proposals. Use this skill when a user explicitly requests to write or generate an NSFC budget document, budget.tex file, budget.pdf, or budget justification based on their proposal manuscript or supplementary materials. The skill outputs an editable LaTeX project and renders a budget.pdf file suitable for submission. Do not use this skill if the user only wants to understand budget principles, needs only budget table numbers without justification text, or is applying for a 2026 Youth A/B/C grant under the default lump-sum system that does not require a budget justification document.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/huangwb8/ChineseResearchLaTeX /tmp/nsfc-budget && cp -r /tmp/nsfc-budget/skills/nsfc-budget ~/.claude/skills/nsfc-budget
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# NSFC 预算说明书生成器

## 与 bensz-collect-bugs 的协作约定

- 当用户环境中出现因本 skill 设计缺陷导致的 bug 时,优先使用 `bensz-collect-bugs` 按规范记录到 `~/.bensz-skills/bugs/`,严禁直接修改用户本地 Claude Code / Codex 中已安装的 skill 源码。
- 若 AI 仍可通过 workaround 继续完成用户任务,应先记录 bug,再继续完成当前任务。
- 当用户明确要求“report bensz skills bugs”等公开上报动作时,调用本地 `gh` 与 `bensz-collect-bugs`,仅上传新增 bug 到 `huangwb8/bensz-bugs`;不要 pull / clone 整个 bug 仓库。


目标:基于标书正文与补充材料,写出一份“经得起财务与学术双重审视”的预算说明书,并交付可编辑 LaTeX 项目与 `budget.pdf`。

## 先做适用性判断

- 如果用户**没有指定工作目录**:立即暂停,先让用户给出工作目录。
- 如果用户只是问“预算怎么写/有哪些原则”,直接回答或给建议,不启动本 skill。
- 如果用户是 **2026 青年 A/B/C** 且场景属于**包干制**:先明确提醒“通常无需预算说明书”;只有在用户明确说明是历史模板、特定单位要求或预算制场景时才继续。

## 必要输入

优先让用户按 `skills/nsfc-budget/references/info_form.md` 提供。最少要拿到:

- 工作目录(必需)
- 标书正文或其它材料
- 项目类型:`general | local | youth`
- 预算口径:至少说明“这是申请总额”还是“这是需要解释的直接费用口径”

若用户没给全,按下面规则处理:

- **总预算未给**:按 `config.yaml:defaults.total_budget_wan` 取默认值。
- **正文目标字数未给**:按 `config.yaml:defaults.target_chars` 推荐区间执行。
- **每节上限**:按 `config.yaml:defaults.per_section_max_chars`。
- **模板未给**:按 `config.yaml:defaults.template_id`。
- **预算模式合法值**:见 `config.yaml:rules.budget_modes`。
- **预算口径合法值**:见 `config.yaml:rules.budget_scopes`。

## 中间产物边界

- 所有中间文件只能放在 `<workdir>/.nsfc-budget/`。
- 不要把草稿、日志、计划、截图、临时 JSON、编译中间文件散落到工作目录其它位置。
- 最终可见交付物只放在 `<workdir>/<output_dirname>/`(默认值见 `config.yaml:defaults.output_dirname`)。
- `template_id`、`output_dirname`、`.template.yaml` 里的 `section_files/latex_entry/pdf_name` 都必须是**相对安全路径**;不得包含绝对路径、`.` / `..` 越界段。
- `output_dirname` 不得指向工作目录根路径,也不得与隐藏工作区 `<workdir>/.nsfc-budget/` 重叠。

## 工作流

### 1. 初始化 run

先创建隐藏工作区与 `budget_spec.json` 骨架:

```bash
python3 skills/nsfc-budget/scripts/init_budget_run.py \
  --workdir <workdir> \
  --project-type <general|local|youth> \
  --template-id 01
```

如用户已给材料路径,可追加多个 `--material <path>`。脚本会把材料快照复制到 `.nsfc-budget/run_xxx/materials/`。
若同秒重复初始化,脚本会自动避让目录名冲突,避免 run 目录互相污染。

### 2. 吃透材料,形成“任务-需求-金额-依据”链

读取正文与补充材料后,先在隐藏工作区内形成内部判断,再填写 `budget_spec.json`:

- 每一笔钱都必须能追溯到**具体研究任务**。
- 每一节都要说明**为什么要花、花在哪里、怎么测算、为什么这个数合理**。
- 不能捏造设备、合作单位、测试次数、出差频次、劳务人数、价格依据。
- 证据不足时,要么追问用户,要么保守写“暂不列支/暂无合作转拨/暂无其他来源资金”,不要编造。

写作原则见:`skills/nsfc-budget/references/budget-writing-rules.md`。

### 3. 填写 `budget_spec.json`

脚本生成的 `budget_spec.json` 是**唯一结构化中间稿**。至少补齐:

- `meta`:项目题目、项目类型、预算模式、工作目录、输出目录、模板 ID、字数目标
- `budget`:总预算口径、直接费用总额(若已知)、设备/业务/劳务/合作转拨/其他来源金额
- `sections`:五个部分的正文段落(数组)
- `evidence`:关键测算依据、必要假设、待确认点

要求:

- `设备费 + 业务费 + 劳务费 = 直接费用总额`(若你已明确直接费用口径)
- `budget.*_wan` 与 `sections.*.amount_wan` 必须保持一致,避免出现两份金额源漂移。
- `合作研究转拨资金` 不能与前三项形成逻辑冲突
- `其他来源资金` 必须写明来源与用途;若无,则显式写“无”
- 金额、字数上限、容差等数值不得为负数;不合法时优先修正 JSON,而不是带病渲染。

### 4. 渲染、校验、迭代

用脚本把 JSON 渲染为 LaTeX 项目,并把校验报告与编译日志留在隐藏目录:

```bash
python3 skills/nsfc-budget/scripts/render_budget_project.py \
  --spec <workdir>/.nsfc-budget/run_xxx/budget_spec.json
```

脚本会:

- 复制模板到 `<workdir>/<output_dirname>/`
- 将五个 section 写入对应 `extraTex/*.tex`
- 校验金额关系、段落长度、可见字符数与模板/路径约束
- 校验 `budget_spec.json` 是否仍位于 `<workdir>/.nsfc-budget/`,保证隐藏工作区承诺不被破坏
- 自动转义常见 LaTeX 特殊字符(如 `%`、`#`、`&`、`_`),减少自然语言正文导致的编译失败
- 在隐藏目录保存 `validation_report.md/json`
- 若校验失败,终端会直接给出首批错误摘要与 `validation_report.md` 路径
- 编译输出 `budget.pdf`

如校验失败,先修 `budget_spec.json` 再重新运行脚本,直到通过。

### 5. 交付前人工复核

交付前必须至少复核这些点:

- 预算口径是否说清楚:申请总额 vs 直接费用
- 设备/测试/差旅/劳务是否真的与研究任务一一对应
- 是否出现“写得很满但没有证据”的句子
- 是否存在“金额能对上,但逻辑对不上”的隐性漏洞
- 是否存在“应该写无,却被硬凑了一段”的编造痕迹

## 写作策略

默认采用以下结构化策略:

- **总述从严**:先交代预算遵循政策相符性、目标相关性、经济合理性。
- **逐项落地**:每节至少讲清“用途 + 测算 + 必要性 + 依据”。
- **少说空话**:不要写“为保证项目顺利开展”“具有重要意义”这类无信息量句子,除非后面紧跟具体任务与支出。
- **金额服务任务**:说明书不是“财务散文”,每一段都要能回到研究方案。
- **宁缺毋滥**:缺材料时,先保守、先追问、先明确边界;不要补脑。

## 输出

最终输出必须同时包含:

- `<workdir>/<output_dirname>/`:完整 LaTeX 项目
- `<workdir>/<output_dirname>/budget.pdf`

中间过程保留在:

- `<workdir>/.nsfc-budget/run_xxx/`

## 关键文件

- `skills/nsfc-budget/references/info_form.md`
- `skills/nsfc-budget/references/budget-writing-rules.md`
- `skills/nsfc-budget/scripts/init_budget_run.py`
- `skills/nsfc-budget/scripts/render_budget_project.py`
- `skills/nsfc-budget/models/01/.template.yaml`
check-review-alignmentSkill

当用户明确要求"核查/优化综述 `{主题}_review.tex` 的正文引用"或"运行 check-review-alignment"时使用。通过宿主 AI 的语义理解逐条核查引用是否与文献内容吻合,只在发现致命性引用错误时对"包含引用的句子"做最小化改写,并复用 `systematic-literature-review` 的渲染脚本输出 PDF/Word。核心原则:不为了改而改,无法确定是否为致命性错误时保留原样并在报告中警告。⚠️ 不适用:用户只是想生成系统综述正文(应使用 systematic-literature-review);用户只是想新增/核对 BibTeX 条目(应使用专门的 bib 管理流程)。

complete-exampleSkill

当用户明确要求"填充示例内容""生成示例""补充 LaTeX 示例"时使用。AI 增强版 LaTeX 示例智能生成器,实现 AI 与硬编码的有机融合:AI 做"语义理解"(分析章节主题、推理资源相关性、生成连贯叙述),硬编码做"结构保护"(格式验证、哈希校验、访问控制)。

get-review-themeSkill

当用户明确要求"从文件/图片/网页/描述中提取综述主题"或"生成主题+关键词+核心问题结构化输出"时使用。支持文件(PDF/Word/Markdown/Tex)、文件夹、图片、自然语言描述、网页 URL 等多种输入源,自动识别输入类型并提取内容,生成可直接用于 systematic-literature-review 及其他文献综述技能的结构化输出。

guide-updaterSkill

当用户明确要求"更新项目指南""同步指南""沉淀洞见到指南"时使用。将对话中新产生的可复用写作洞见实时沉淀到项目指南文件,保持术语口径一致、结构稳定、可检验与可复现。调用时必须指定指南文件路径。

make-latex-modelSkill

当用户明确要求“LaTeX 模板优化”“样式参数对齐”“像素级比对”“make-latex-model”或旧写法“make_latex_model”,或要把 ChineseResearchLaTeX 里的某个项目做成高质量模板时使用。适配 NSFC / paper / thesis / cv 四条产品线;先依据 packages/ 与 projects/ 的真实分层判断改项目层还是公共包,再用各产品线官方构建入口验收。若必须修改 packages 下公共包,需先生成受影响模板回归计划并完成相关回归;NSFC 专项工具仅在明确属于 NSFC 参数对齐场景时按需使用。

nsfc-abstractSkill

当用户明确要求"写/润色 NSFC 标书摘要""生成中文摘要和英文摘要""把中文摘要翻译成英文摘要"时使用。输出中文、英文两个版本(英文必须是中文的忠实翻译版),同时输出标题建议(1个推荐标题+5个候选标题及理由)。中文摘要默认≤400字符,英文摘要默认≤4000字符。输出方式:将结果写入工作目录下的 `NSFC-ABSTRACTS.md`。⚠️ 不适用:用户只想翻译一段与标书无关的通用文本(应直接翻译);用户只想写立项依据/研究内容/研究基础正文(应使用对应 nsfc 系列 skill)。

nsfc-codeSkill

根据 NSFC 标书正文内容,结合申请代码推荐库,为你给出 5 组申请代码1/2(主/次)推荐与理由;输出到 NSFC-CODE-vYYYYMMDDHHmm.md(只读,不修改标书)

nsfc-humanizationSkill

去除 NSFC 标书中的 AI 机器味,使文本读起来像资深领域专家亲笔撰写(不适用:非标书内容/需修改格式/需补充新内容)