diff --git a/README.md b/README.md index dfc025b..d02a20e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -
+
# 🎭 chinese-novelist skill ### 让 AI 为你写一部完整的中文小说 @@ -7,8 +7,7 @@ [![Claude Code Skill](https://img.shields.io/badge/Claude_Code-Skill-blue)](https://claude.com/claude-code) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) -一个专为 Claude Code 设计的中文小说创作助手。10-20 章的中篇小说,几十分钟内完成初稿。 - +
--- ## ✨ 为什么用这个? @@ -23,20 +22,89 @@ ## 🚀 快速开始 ``` -使用 chinese-novelist 帮我写一部关于[校园恐怖悬疑]小说,大约[20]章 +使用 chinese-novelist 帮我写一部小说 ``` -然后只需回答 5 个问题: +### 三阶段创作流程 + +**第一阶段:5 问逐一确认** + +AI 会逐一询问,你用上下箭头选择: ``` -📝 题材?悬疑推理 / 现代言情 / 古代言情 / 奇幻玄幻 / 科幻未来 ... -📝 主角?男性 / 女性 / 双主角 / 群像 -📝 性格?热血正义 / 冷静智慧 / 温暖治愈 / 高冷孤傲 ... -📝 冲突?生死存亡 / 查明真相 / 爱情阻碍 / 复仇雪恨 ... -📝 几章?10章 / 15章 / 20章 / 自定义 +📝 问题 1/5:你想要创作什么题材的小说? + □ 悬疑推理(侦探、破案、解谜) + □ 现代言情(都市、职场、恋爱) + □ 古代言情(宫廷、江湖、穿越) + □ 奇幻玄幻(魔法、异世界、修真) + □ 科幻未来(科技、太空、末世) + □ 武侠仙侠(江湖、门派、飞升) + □ 历史架空(朝堂、战争、权谋) + □ 都市现实(生活、成长、社会) + +📝 问题 2/5:主角是什么设定? + □ 男性主角(独角戏) + □ 女性主角(独角戏) + □ 双主角(男女双线) + □ 群像戏(多线叙事) + +📝 问题 3/5:主角的核心性格是? + □ 热血正义(积极、勇敢、有担当) + □ 冷静智慧(理性、谋略、高智商) + □ 温暖治愈(善良、温柔、有同理心) + □ 高冷孤傲(冷漠、独立、强大) + □ 阴暗腹黑(心机、算计、复仇) + □ 成长逆袭(从弱到强、打脸升级) + +📝 问题 4/5:小说的核心冲突是什么? + □ 生死存亡 / 查明真相 / 爱情阻碍 + □ 复仇雪恨 / 权力争夺 / 成长突破 / 守护保护 + +📝 问题 5/5:你计划创作多少章? + □ 10章(3-5万字) + □ 15章(4.5-7.5万字) + □ 20章(6-10万字) + □ 30章(9-15万字) + □ 50章(15-25万字) + □ 自定义 ``` -确认后,AI 进入**疯狂创作模式**,一章接一章地写下去。 +**第二阶段:规划展示 + 二次确认** + +AI 自动生成完整大纲和人物档案,展示给你确认: + +``` +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +规划完成!请确认以下内容: + +基本信息 + 题材:悬疑推理 + 主角:男性主角(侦探) + 核心冲突:查明真相 + 章节数:20章 + +章节规划 + 第1章:午夜凶铃 - 主角接到神秘电话 + 第2章:第一具尸体 - 发现密室杀人案 + 第3章:消失的证据 - 线索被人篡改 + ... + +主要角色 + 主角:李明 - 资深刑警,冷静智慧 + 反派:张华 - 高智商罪犯 + 关键配角:王芳 - 法医专家 + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +回复"确认"或"开始" → 立即进入疯狂创作模式 +提出修改意见 → 调整后重新确认 +``` + +**第三阶段:疯狂创作** + +确认后,AI 进入**疯狂创作模式**,一章接一章地写下去,无需再次确认。 + +你可以离开工作台,等待完成。 --- @@ -79,19 +147,63 @@ novels/ ## 📸 效果展示 -### 第一步:写作计划确认 +### 第一步:5 问逐一确认 -![智能规划](assets/beginning-01.png) +AI 逐一询问问题,你用上下箭头选择选项: -### 第二步:疯狂创作,等待全稿完成 +``` +📝 问题 1/5:你想要创作什么题材的小说? + ○ 悬疑推理(侦探、破案、解谜) + ○ 现代言情(都市、职场、恋爱) + ○ 古代言情(宫廷、江湖、穿越) + ● 奇幻玄幻(魔法、异世界、修真) ← 你选择这个 + ... +``` + +### 第二步:查看规划并确认 + +AI 生成完整大纲和人物档案后,展示给你确认: + +``` +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +规划完成!请确认以下内容: + +基本信息 + 题材:奇幻玄幻 + 主角:女性主角(修真者) + 核心冲突:成长突破 + 章节数:30章 + +章节规划(前 5 章) + 第1章:天降异象 - 灵根觉醒仪式 + 第2章:拜入仙门 - 踏入修真界 + 第3章:初次试炼 - 迷幻森林试炼 + 第4章:遭遇强敌 - 面对宗门刁难 + 第5章:突破瓶颈 - 顿悟筑基期 + ... + +主要角色 + 主角:林雨 - 天灵根,坚韧不拔 + 反派:赵天 - 嫉妒主角天赋 + 关键配角:白师姐 - 宗门导师 + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +回复"确认"或"开始" → 立即进入疯狂创作模式 +``` + +### 第三步:疯狂创作,等待全稿完成 确认后立即进入创作模式,AI 一章接一章地输出: -![章节输出](assets/ending-01.png) +``` +✅ 第1章完成(3247字) +✅ 第2章完成(3582字) +✅ 第3章完成(3412字) +... +``` -![连续创作](assets/ending-02.png) - -几十分钟后,一部完整的 20 章小说初稿就完成了。 +几十分钟后,一部完整的 30 章小说初稿就完成了。你可以离开工作台,等待完成。 --- @@ -100,11 +212,16 @@ novels/ | 文件 | 内容 | |------|------| | `chapter-guide.md` | 章节结构设计指南(含 10 种强力开头技巧) | -| `hook-techniques.md` | 悬念设置技巧(18 种结尾钩子类型) | +| `hook-techniques.md` | 悬念设置技巧(10 种结尾钩子类型) | | `character-building.md` | 人物塑造方法 | | `dialogue-writing.md` | 对话写作规范 | | `quality-checklist.md` | 质量检查清单(交付前自查) | | `plot-structures.md` | 情节结构模板 | +| `consistency.md` | 连贯性保证机制(人物、情节、节奏) | +| `content-expansion.md` | 内容扩充技巧(7 种自然扩充方法) | +| `outline-template.md` | 大纲模板(章节规划、悬念线) | +| `character-template.md` | 人物档案模板 | +| `chapter-template.md` | 章节文件模板 | --- diff --git a/SKILL.md b/SKILL.md index 98afb75..cf0700e 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,192 +1,175 @@ --- name: chinese-novelist description: | - 长时间创作指定主题的极其吸引人的中文短篇小说。支持分章节创作,每章均有引人入胜的故事剧情,章节之间有关联有钩子。 - 用于:创作短篇小说系列、分章节连续故事、悬疑/奇幻/言情/科幻等各类题材小说。 - 当用户要求:写小说、创作故事、分章节写作、连续剧情、章节悬念、长篇故事时使用。 + 分章节创作引人入胜的中文小说。支持各种题材(悬疑/言情/奇幻/科幻/历史等),支持10-50章长篇创作,每章3000-5000字,结尾设置悬念钩子。强调深度润色去除AI痕迹,确保文字自然流畅。 + 当用户要求:写小说、创作故事、分章节写作、连续剧情、章节悬念、长篇小说时使用。 metadata: - trigger: 创作中文小说、分章节故事 + trigger: 创作中文小说、分章节故事、长篇小说创作 source: 基于小说创作最佳实践设计 --- # Chinese Novelist: 中文小说创作助手 -分章节创作引人入胜的中文短篇小说,每章结尾设置悬念钩子。 +## 核心流程 -## 核心创作流程 +### 第一阶段:5问确认 -### 前置阶段:创作规划(5问确认后疯狂创作) - -**快速确认5个核心问题后,立即进入疯狂创作模式:** +**使用 AskUserQuestion 工具逐一询问用户,每个问题提供选项供用户选择。** --- -#### 📝 问题 1:题材与风格 +**问题1:题材与风格** -**A. 悬疑推理**(紧张刺激) -**B. 现代言情**(甜宠/虐恋) -**C. 古代言情**(宫廷/江湖) -**D. 奇幻玄幻**(修仙/魔法) -**E. 科幻未来**(星际/赛博) -**F. 武侠仙侠**(江湖/修仙) -**G. 历史架空**(权谋/战争) -**H. 都市现实**(职场/商战) +``` +Question: 你想要创作什么题材的小说? +Options: +- 悬疑推理(侦探、破案、解谜) +- 现代言情(都市、职场、恋爱) +- 古代言情(宫廷、江湖、穿越) +- 奇幻玄幻(魔法、异世界、修真) +- 科幻未来(科技、太空、末世) +- 武侠仙侠(江湖、门派、飞升) +- 历史架空(朝堂、战争、权谋) +- 都市现实(生活、成长、社会) +``` -> 选择 A-H,或自定义: +用户选择后记录:`题材 = [用户选择]` --- -#### 📝 问题 2:主角设定 +**问题2:主角设定** -**A. 男性**(学生/侦探/医生/商人/官员/修仙者...) -**B. 女性**(学生/明星/医生/公主/修仙者...) -**C. 双主角**(一男一女,恋人/搭档/对手) -**D. 群像**(3-5人轮流视角) +``` +Question: 主角是什么设定? +Options: +- 男性主角(独角戏) +- 女性主角(独角戏) +- 双主角(男女双线) +- 群像戏(多线叙事) +``` -> 选择 A-D,并说明职业/身份: +用户选择后,如需进一步询问职业/身份,继续追问。 + +记录:`主角 = [用户选择]` + `职业/身份 = [用户回答]` --- -#### 📝 问题 3:主角性格 +**问题3:主角性格** -**A. 热血正义**(嫉恶如仇、勇往直前) -**B. 冷静智慧**(理性分析、布局谋划) -**C. 温暖治愈**(善良温和、乐于助人) -**D. 高冷孤傲**(独来独往、外冷内热) -**E. 阴暗腹黑**(心思深沉、亦正亦邪) -**F. 成长逆袭**(从弱小到强大) +``` +Question: 主角的核心性格是? +Options: +- 热血正义(积极、勇敢、有担当) +- 冷静智慧(理性、谋略、高智商) +- 温暖治愈(善良、温柔、有同理心) +- 高冷孤傲(冷漠、独立、强大) +- 阴暗腹黑(心机、算计、复仇) +- 成长逆袭(从弱到强、打脸升级) +``` -> 选择 A-F,或自定义: +记录:`性格 = [用户选择]` --- -#### 📝 问题 4:核心冲突 +**问题4:核心冲突** -**A. 生死存亡**(需要活下去) -**B. 查明真相**(揭开谜团) -**C. 爱情阻碍**(克服阻碍在一起) -**D. 复仇雪恨**(踏上复仇路) -**E. 权力争夺**(各方博弈) -**F. 成长突破**(突破自我) -**G. 守护保护**(守护某人/物) +``` +Question: 小说的核心冲突是什么? +Options: +- 生死存亡(生存危机、逃出生天) +- 查明真相(寻找答案、揭露秘密) +- 爱情阻碍(追求真爱、克服阻碍) +- 复仇雪恨(复仇计划、伸张正义) +- 权力争夺(竞争上位、资源争夺) +- 成长突破(自我突破、实现价值) +- 守护保护(守护重要的人或事) +``` -> 选择 A-G,或自定义: +记录:`核心冲突 = [用户选择]` --- -#### 📝 问题 5:章节数量 +**问题5:章节数量** -**A. 10章**(短篇,约3万字) -**B. 15章**(中短篇,约5万字) -**C. 20章**(中篇,约8万字)【推荐】 -**D. 自定义** +``` +Question: 你计划创作多少章? +Options: +- 10章(短篇,约3-5万字) +- 15章(中短篇,约4.5-7.5万字) +- 20章(中篇,约6-10万字) +- 30章(中长篇,约9-15万字) +- 50章(长篇,约15-25万字) +- 自定义(输入具体章节数) +``` -> 选择 A-D: +记录:`章节数 = [用户选择]` --- -#### ✅ 规划锁定,立即开写 - -收集完5个问题后,**直接进入创作流程**,无需再次确认。 - -生成完整规划并说明: - -> **✅ 规划完成,开启疯狂创作模式!** -> -> 题材:[XXX] | 主角:[XXX] | 冲突:[XXX] | 章节数:[X]章 -> 立即开始创作第1章... - -此后直接进入"零阶段:项目设置",开始疯狂创作。 +**5问收集完成后**然后进入"第二阶段:规划"。 --- -### 零阶段:项目设置 +### 第二阶段:规划 + 二次确认 -**每次创作新建项目文件夹,每章一个独立 md 文件。** +执行以下步骤: -1. **创建项目文件夹** - ``` - novels/ - └── [小说名称]/ - ├── 00-大纲.md - ├── 01-人物档案.md - ├── 第01章-[章节标题].md - ├── 第02章-[章节标题].md - └── ... - ``` +1. **创建项目文件夹**:`novels/[小说名称]/` +2. **生成大纲**:创建 `00-大纲.md`,使用 `references/outline-template.md` 模板,填入完整的章节规划 +3. **生成人物档案**:创建 `01-人物档案.md`,使用 `references/character-template.md` 模板,创建主角、反派、配角档案 -2. **创建基础文件** - - `00-大纲.md` - 故事概述、章节大纲、悬念规划 - - `01-人物档案.md` - 所有主要角色的详细档案 +完成后,向用户展示规划摘要并请求确认,等待用户确认。用户同意后,进入"第三阶段:疯狂创作"。 -3. **章节命名规范** - - 格式:`第XX章-[章节标题].md`(XX 为两位数字) - - 示例:`第01章-深夜敲门.md`、`第02章-消失的客人.md` +--- -### 第一阶段:规划 +### 第三阶段:疯狂创作 -1. **确定核心要素** - - 主题/题材(悬疑、奇幻、言情、科幻、历史等) - - 核心冲突(主角想要什么?什么阻止了他?) - - 预计章节数(建议 10-20 章中篇小说,最低不少于 8 章) +**重要:全程无需再次向用户确认,必须逐一章创作** -2. **创建人物档案** - - 主角:姓名、年龄、外貌、性格、动机、缺陷 - - 反派/对手:与主角的冲突点 - - 配角:推动剧情的关键人物 +按顺序逐章创作,每章执行完整的创作流程(见下方"逐章创作"),完成一章后自动继续下一章,直到所有章节完成。 -3. **规划章节大纲** - - 每章核心事件 - - 章节间的情节递进关系 - - 每章结尾的悬念点 +--- -### 第二阶段:逐章创作 +## 疯狂创作——逐章创作流程 -对每一章: +每章创作时严格执行以下步骤: -**【写前准备】** +#### 1. 写前分析 -1. **读取 00-大纲.md** - 查看当前 TODO list,确认本章任务 -2. **读取章节摘要** - 查看所有已完成章节的摘要,确保连贯性 -3. **读取上一章** - 读取上一章文件,了解当前悬念 -4. **更新 TODO list** - 将当前本章标记为"进行中" -5. **设置本章目标** - 本章要推进什么剧情?揭示什么信息? -6. **设计开头钩子** - **最关键步骤**:前 20% 必须有即时冲突/重大转折/行动场景 -7. **规划场景** - 确定本章需要 3-5 个场景以确保足够长度 +1. 读取 `00-大纲.md` - 查看TODO list和已完成章节的摘要 +2. 读取 `00-大纲.md` 中上一章的摘要 +3. 更新`00-大纲.md` 中 TODO list - 将本章标记为"进行中" +4. 设计开头钩子 - **最关键**:前20%必须有即时冲突 → [chapter-guide.md](references/chapter-guide.md)(10种开头技巧) +5. 规划场景 - 确定本章需要3-5个场景 -**【撰写正文】** +#### 2. 撰写 -8. **创建章节文件** - 使用 Write 工具创建新章节 md 文件 -9. **撰写正文** - 遵循章节写作指南(见 [chapter-guide.md](references/chapter-guide.md)) - - **开头检查**:前 20% 是否极其吸引人?如果不是,重写 - - **字数要求**:每章 3000-5000 字,最低 2500 字 - - 如果字数不足,使用内容扩充技巧 -10. **设置结尾钩子** - 使用悬念技巧(见 [hook-techniques.md](references/hook-techniques.md)) -11. **质量检查** - 对照检查清单(见 [quality-checklist.md](references/quality-checklist.md)) +6. 创建章节文件 - 使用`references/chapter-template.md` 模板 +7. 撰写正文 - **每章必须达到3000-5000字** + - 开头检查:前20%是否极其吸引人? + - 对话规范 → [dialogue-writing.md](references/dialogue-writing.md) + - 内容不足?使用 [content-expansion.md](references/content-expansion.md) 扩充技巧 +8. 设置结尾钩子 → [hook-techniques.md](references/hook-techniques.md)(10种钩子类型) +9. **字数检查** - 必须使用脚本检查字数:`python scripts/check_chapter_wordcount.py <章节文件路径>` 低于3000字必须使用扩充技巧重写 -**【写后收尾】** +#### 3. 撰写后优化 -12. **生成章节摘要** - 在章节文件末尾添加摘要(300-500字) -13. **追加摘要到大纲** - 将本章摘要追加到 `00-大纲.md` 的"章节摘要"区域 -14. **更新大纲状态** - 在 `00-大纲.md` 中标记本章已完成、记录实际字数 -15. **更新 TODO list** - 将当前本章标记为"已完成",下一章标记为"进行中" +10. 连贯性检查 → [consistency.md](references/consistency.md) - 人物一致性、情节连贯、节奏控制 +11. **深度润色(去除AI味)** - 重点检查并修改: + - **去除过度修饰的形容词**:删减"璀璨"、"瑰丽"、"绚烂"等AI常用词堆砌 + - **减少抽象陈述**:把"心中涌起复杂的情感"改为具体动作/对话 + - **打破四字格律**:避免"心潮澎湃、热血沸腾"等陈词滥调 + - **增加口语化表达**:人物对话要有个性,避免"书面语套话" + - **优化节奏感**:长句和短句交替,避免句式单调 + - **细节具象化**:用具体的视觉/听觉/嗅觉细节替代笼统描述 +12. **字数检查** - 必须使用脚本检查字数:`python scripts/check_chapter_wordcount.py <章节文件路径>` 低于3000字必须使用扩充技巧重写 -### 第三阶段:连贯性检查 +#### 4. 最后收尾 -1. **人物一致性** - 人物行为符合其性格设定 -2. **情节连贯** - 前后伏笔有呼应,逻辑闭环 -3. **节奏控制** - 高潮低谷分布合理 +13. 生成章节摘要 - 在 `00-大纲.md` 添加摘要(300-500字) +14. 更新状态 - `00-大纲.md` 中 TODO list - 将本章标记为"完成" -## 快速参考 - -| 任务 | 参考文件 | -|------|----------| -| 章节结构设计 | [chapter-guide.md](references/chapter-guide.md) | -| 悬念设置技巧 | [hook-techniques.md](references/hook-techniques.md) | -| 人物塑造方法 | [character-building.md](references/character-building.md) | -| 对话写作规范 | [dialogue-writing.md](references/dialogue-writing.md) | -| 质量检查清单 | [quality-checklist.md](references/quality-checklist.md) | -| 情节结构模板 | [plot-structures.md](references/plot-structures.md) | +--- ## 三大黄金法则 @@ -194,251 +177,19 @@ metadata: 2. **冲突驱动剧情** - 每章必须有冲突或转折 3. **悬念承上启下** - 每章结尾必须留下钩子 -## 第四法则:开头即高潮 +### 字数检查脚本 -**章节前 20% 必须极其吸引人,否则读者会放弃。** +使用 `scripts/check_chapter_wordcount.py` 检查章节字数: -每章开头的首要任务是**立即抓住读者**。读者只有几秒钟的耐心。 - -### 前;20% 必须包含 - -1. **即时冲突** - 立即呈现问题/危机/紧张 -2. **重大信息** - 揭示关键线索或转折 -3. **情感冲击** - 让读者产生强烈情绪反应 -4. **行动场景** - 从动作/追逐/对抗中开始 - -### 开头禁忌(绝对避免) - -- ❌ 天气描写("那天天气晴朗...") -- ❌ 主角起床/洗漱/吃早餐 -- ❌ 回顾上章内容(读者已经知道) -- ❌ 缓慢的场景铺垫 -- ❌ 大段背景说明 -- ❌ 平淡的日常对话 - -### 开头黄金公式 - -``` -前 20% = 即时冲突 + 重大转折 + 行动开始 -``` - -示例: -``` -错误:李明醒来,阳光照进房间。他想起昨天收到的那封信... -正确:信封上的血迹还没干。李明盯着那个熟悉的签名,手指在颤抖... -``` - -## 内容扩充技巧 - -当章节内容不足时,使用以下技巧自然扩充: - -### 1. 场景细节描写 -不要只说"他走进房间",描写: -- 房间的布局、光线、气味 -- 物品的细节和质感 -- 环境对人物的影响 -- 人物在空间中的移动 - -### 2. 人物内心活动 -展示而非讲述内心世界: -- 角色的犹豫和纠结 -- 过去记忆的闪回(1-2 段) -- 对未来的担忧和期待 -- 道德选择的内心辩论 - -### 3. 对话扩展 -不要只推进剧情,让对话: -- 展现人物性格和说话方式 -- 包含潜台词和暗示 -- 有来回交锋和试探 -- 偶尔跑题再拉回(更真实) - -### 4. 感官体验 -调动五感描写: -- 视觉:颜色、光影、形状 -- 听觉:声音、音乐、沉默 -- 触觉:温度、质感、疼痛 -- 嗅觉:气味、香味、腐臭 -- 味觉:食物、饮料、血腥味 - -### 5. 次要情节线 -在主剧情中穿插: -- 配角的小故事 -- 暗线的发展 -- 伏笔的埋设 -- 人物关系的微妙变化 - -### 6. 节奏放慢 -关键时刻慢下来描写: -- 动作场景的分解 -- 情感转变的过程 -- 发现真相的时刻 -- 紧张对峙的延展 - -### 7. 环境烘托 -用环境反映情绪: -- 天气和氛围 -- 社会环境背景 -- 文化习俗细节 -- 时代特征展现 - -### 扩充原则 -- **自然融入** - 扩充内容要服务于故事,不要注水 -- **保持张力** - 即使扩充场景也不能失去冲突 -- **推进主线** - 所有扩充最终都要指向核心剧情 - -## 章节长度建议 - -**最低要求**:每章不低于 2500 字 - -**推荐长度**: -- **中篇小说**:每章 3000-5000 字(10-20 章,总计 3-10 万字) -- **长篇小说**:每章 4000-6000 字(20+ 章,总计 10 万字以上) - -**重要**:宁可少一章,也不要章节过短。如果某章内容不足,考虑: -- 增加场景细节描写 -- 扩展人物内心活动 -- 添加对话互动 -- 深化次要情节线 - -## 输出格式 - -### 章节文件模板 - -每个章节 md 文件格式: - -```markdown -# 第[X]章:[章节标题] - -## 本章概要 -- **核心事件**:[一句话概括本章发生的事] -- **承接上章**:[回应上一章的悬念] -- **悬念钩子**:[本章结尾的钩子] - ---- - -## 正文 - -[章节正文内容 3000-5000 字,最低不低于 2500 字] - -... - ---- - -## 章节备注 -本章悬念:[简述结尾钩子] -下章预告:[可选,1-2 句话] -伏笔标记:[如果埋下伏笔,在此记录] - -``` - -### 大纲文件模板 (00-大纲.md) - -```markdown -# [小说名称] 大纲 - -## 基本信息 -- **题材**:[悬疑/奇幻/言情/科幻等] -- **预计章节数**:[10-20] 章 -- **目标字数**:每章 3000-5000 字,总计 [X] 万字 -- **核心冲突**:[主角想要什么?什么阻止了他?] - -## TODO List - -### 待创作 -- [ ] 第[X]章:[章节标题] - [核心事件] - -### 进行中 -- [ ] 第[X]章:[章节标题] - [核心事件] - -### 已完成 -- [x] 第[X]章:[章节标题] - [核心事件]([字数]字) -- [x] 第[X]章:[章节标题] - [核心事件]([字数]字) -... - -## 章节规划 - -| 章节 | 标题 | 核心事件 | 悬念钩子 | 字数 | 状态 | -|-----|------|---------|---------|------|------| -| 第1章 | | | | | 待创作 | -| 第2章 | | | | | 待创作 | -| ... | | | | | | - -## 全书悬念线 -- **主线悬念**:[核心谜题] -- **支线悬念**:[其他悬念] -- **终极揭秘**:[最终答案] - -## 字数统计 -- 已完成章节数:[0] 章 -- 累计字数:[0] 字 -- 完成进度:[0]% - ---- - -## 章节摘要 - -### 第[X]章:[章节标题] -**摘要**:[300-500字概括本章核心内容、重要情节、人物变化、悬念揭示等] - ---- - -(后续章节摘要依次追加) -``` - -### 人物档案模板 (01-人物档案.md) - -```markdown -# 人物档案 - -## 主角 -### [角色姓名] -- **年龄/职业**: -- **外貌特征**: -- **性格核心**: -- **核心价值观**: -- **最大恐惧**: -- **致命缺陷**: -- **内心渴望**: -- **背景故事**: - -## 反派 -### [角色姓名] -- [同主角格式] - -## 配角 -### [角色姓名] -- [简化格式] -``` - ---- - -## 文件操作命令 - -**创建新项目时:** ```bash -mkdir -p novels/[小说名称] +# 检查单个章节 +python scripts/check_chapter_wordcount.py novels/小说名/第01章.md + +# 检查所有章节 +python scripts/check_chapter_wordcount.py --all novels/小说名/ + +# 自定义最小字数 +python scripts/check_chapter_wordcount.py novels/小说名/第01章.md 3500 ``` -**创建章节文件:** -使用 Write 工具,路径格式:`novels/[小说名称]/第XX章-[标题].md` - -**写前必读:** -- 使用 Read 工具读取 `00-大纲.md` - 查看 TODO list 和章节摘要 -- 使用 Read 工具读取上一章文件 - 了解当前悬念 - -**写后必做:** -- 在章节文件末尾添加摘要(300-500字) -- 将摘要追加到 `00-大纲.md` 的"章节摘要"区域 -- 更新 `00-大纲.md` 中的 TODO list 和状态 - ---- - -## 连贯性保证机制 - -为确保长时间创作的故事连贯性: - -1. **写前阅读摘要** - 每次开始写新章节前,必须阅读 `00-大纲.md` 中所有已完成章节的摘要 -2. **穿针引线** - 在新章节中呼应前文埋下的伏笔和线索 -3. **人物状态跟踪** - 注意人物在各章节中的变化和成长 -4. **悬念线延续** - 确保主线悬念逐步推进,不要遗忘 +低于3000字的章节必须使用 [content-expansion.md](references/content-expansion.md) 的扩充技巧进行扩充。 diff --git a/references/chapter-template.md b/references/chapter-template.md new file mode 100644 index 0000000..9e35e5e --- /dev/null +++ b/references/chapter-template.md @@ -0,0 +1,19 @@ +# 第[X]章:[章节标题] + +## 本章概要 +- **核心事件**:[一句话概括本章发生的事] +- **承接上章**:[回应上一章的悬念] +- **悬念钩子**:[本章结尾的钩子] + +--- + +## 正文 + +[章节正文内容 3000-5000 字,最低不低于 2500 字] + +--- + +## 章节备注 +- 本章悬念:[简述结尾钩子] +- 下章预告:[可选,1-2句话] +- 伏笔标记:[如果埋下伏笔,在此记录] diff --git a/references/character-template.md b/references/character-template.md new file mode 100644 index 0000000..62ac37c --- /dev/null +++ b/references/character-template.md @@ -0,0 +1,30 @@ +# 人物档案 + +## 主角 + +### [角色一姓名] +- **年龄/职业**: +- **外貌特征**: +- **性格核心**: +- **核心价值观**: +- **最大恐惧**: +- **致命缺陷**: +- **内心渴望**: +- **背景故事**: +- **MBTI:** + +### [角色二姓名] + +...... + + + +## 反派 + +### [角色姓名] +- [同主角格式] + +## 配角 + +### [角色姓名] +- [简化格式] diff --git a/references/consistency.md b/references/consistency.md new file mode 100644 index 0000000..24072fc --- /dev/null +++ b/references/consistency.md @@ -0,0 +1,40 @@ +# 连贯性保证机制 + +为确保长时间创作的故事连贯性: + +## 写前必读 + +每次开始写新章节前: +1. 阅读 `00-大纲.md` 中所有已完成章节的摘要 +2. 读取上一章文件,了解当前悬念 +3. 检查人物状态(位置、情绪、关系) + +## 穿针引线 + +在新章节中: +- 呼应前文埋下的伏笔和线索 +- 提及之前发生的事件(自然融入) +- 让人物行为与之前保持一致 + +## 人物状态跟踪 + +注意人物在各章节中的变化和成长: +- 位置变化(人在哪里) +- 情绪状态(当前心情) +- 关系变化(与其他角色关系) +- 能力变化(获得新技能/信息) + +## 悬念线延续 + +确保主线悬念逐步推进: +- 每章至少回应一个旧悬念 +- 提出新悬念或升级现有悬念 +- 不要遗忘任何未解的悬念 + +## 一致性检查清单 + +- [ ] 人物行为符合其性格设定 +- [ ] 前后伏笔有呼应,逻辑闭环 +- [ ] 高潮低谷分布合理,节奏恰当 +- [ ] 时间线连贯(没有时间跳跃错误) +- [ ] 场景转换自然(没有凭空出现) diff --git a/references/content-expansion.md b/references/content-expansion.md new file mode 100644 index 0000000..d2ec2a5 --- /dev/null +++ b/references/content-expansion.md @@ -0,0 +1,66 @@ +# 内容扩充技巧 + +当章节内容不足时,使用以下技巧自然扩充。 + +## 1. 场景细节描写 + +不要只说"他走进房间",描写: +- 房间的布局、光线、气味 +- 物品的细节和质感 +- 环境对人物的影响 +- 人物在空间中的移动 + +## 2. 人物内心活动 + +展示而非讲述内心世界: +- 角色的犹豫和纠结 +- 过去记忆的闪回(1-2段) +- 对未来的担忧和期待 +- 道德选择的内心辩论 + +## 3. 对话扩展 + +不要只推进剧情,让对话: +- 展现人物性格和说话方式 +- 包含潜台词和暗示 +- 有来回交锋和试探 +- 偶尔跑题再拉回(更真实) + +## 4. 感官体验 + +调动五感描写: +- 视觉:颜色、光影、形状 +- 听觉:声音、音乐、沉默 +- 触觉:温度、质感、疼痛 +- 嗅觉:气味、香味、腐臭 +- 味觉:食物、饮料、血腥味 + +## 5. 次要情节线 + +在主剧情中穿插: +- 配角的小故事 +- 暗线的发展 +- 伏笔的埋设 +- 人物关系的微妙变化 + +## 6. 节奏放慢 + +关键时刻慢下来描写: +- 动作场景的分解 +- 情感转变的过程 +- 发现真相的时刻 +- 紧张对峙的延展 + +## 7. 环境烘托 + +用环境反映情绪: +- 天气和氛围 +- 社会环境背景 +- 文化习俗细节 +- 时代特征展现 + +## 扩充原则 + +- **自然融入** - 扩充内容要服务于故事,不要注水 +- **保持张力** - 即使扩充场景也不能失去冲突 +- **推进主线** - 所有扩充最终都要指向核心剧情 diff --git a/references/outline-template.md b/references/outline-template.md new file mode 100644 index 0000000..9465a72 --- /dev/null +++ b/references/outline-template.md @@ -0,0 +1,47 @@ +# [小说名称] 大纲 + +## 基本信息 +- **题材**:[悬疑/奇幻/言情/科幻等] +- **预计章节数**:[10-20] 章 +- **目标字数**:每章 3000-5000 字,总计 [X] 万字 +- **核心冲突**:[主角想要什么?什么阻止了他?] + +## TODO List + +### 待创作 +- [ ] 第[X]章:[章节标题] - [核心事件] + +### 进行中 +- [ ] 第[X]章:[章节标题] - [核心事件] + +### 已完成 +- [x] 第[X]章:[章节标题] - [核心事件]([字数]字) +- [x] 第[X]章:[章节标题] - [核心事件]([字数]字) + +## 章节规划 + +| 章节 | 标题 | 核心事件 | 悬念钩子 | 字数 | 状态 | +|-----|------|---------|---------|------|------| +| 第1章 | | | | | 待创作 | +| 第2章 | | | | | 待创作 | + +## 全书悬念线 +- **主线悬念**:[核心谜题] +- **支线悬念**:[其他悬念] +- **终极揭秘**:[最终答案] + +## 字数统计 +- 已完成章节数:[0] 章 +- 累计字数:[0] 字 +- 完成进度:[0]% + +--- + +## 章节摘要 + +### 第[X]章:[章节标题] +**摘要**:[300-500字概括本章核心内容、重要情节、人物变化、悬念揭示等] + +--- + +(后续章节摘要依次追加) diff --git a/scripts/check_chapter_wordcount.py b/scripts/check_chapter_wordcount.py new file mode 100644 index 0000000..c176759 --- /dev/null +++ b/scripts/check_chapter_wordcount.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +章节字数检查脚本 +检查指定章节文件的字数,低于3000字时提示需要扩充 +""" + +import os +import re +import sys +from pathlib import Path + +# 修复 Windows 控制台编码问题 +if sys.platform == 'win32': + import io + sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') + sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') + + +def count_chinese_words(text: str) -> int: + """统计中文字数(排除标点符号和Markdown标记)""" + # 移除Markdown标记 + text = re.sub(r'#{1,6}\s*', '', text) # 标题 + text = re.sub(r'\*\*(.*?)\*\*', r'\1', text) # 粗体 + text = re.sub(r'\*(.*?)\*', r'\1', text) # 斜体 + text = re.sub(r'~~(.*?)~~', r'\1', text) # 删除线 + text = re.sub(r'`(.*?)`', r'\1', text) # 行内代码 + text = re.sub(r'\[(.*?)\]\(.*?\)', r'\1', text) # 链接 + + # 统计中文字符(汉字) + chinese_chars = re.findall(r'[\u4e00-\u9fff]', text) + return len(chinese_chars) + + +def extract_content_from_chapter(file_path: Path) -> str: + """从章节文件中提取正文内容(排除标题等元数据)""" + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + # 查找正文开始位置(通常是第一个一级标题或二级标题之后) + lines = content.split('\n') + + # 跳过开头的元数据(如 # 第XX章 标题) + content_start = 0 + for i, line in enumerate(lines): + if line.startswith('#') and '章' in line: + content_start = i + 1 + break + + # 提取正文 + main_content = '\n'.join(lines[content_start:]) + return main_content + + +def check_chapter(file_path: str, min_words: int = 3000) -> dict: + """检查单个章节的字数""" + path = Path(file_path) + + if not path.exists(): + return { + 'file': str(path), + 'exists': False, + 'word_count': 0, + 'status': 'error', + 'message': f'文件不存在: {file_path}' + } + + main_content = extract_content_from_chapter(path) + word_count = count_chinese_words(main_content) + + status = 'pass' if word_count >= min_words else 'fail' + message = f'字数: {word_count}' + ( + f' (✓ 达标)' if word_count >= min_words else f' (✗ 不足,需要至少 {min_words} 字)' + ) + + return { + 'file': str(path), + 'exists': True, + 'word_count': word_count, + 'status': status, + 'message': message + } + + +def check_all_chapters(directory: str, pattern: str = '第*.md', min_words: int = 3000) -> list: + """检查目录下所有符合模式的章节文件""" + dir_path = Path(directory) + if not dir_path.exists(): + print(f'错误: 目录不存在 - {directory}') + return [] + + chapter_files = sorted(dir_path.glob(pattern)) + results = [] + + for chapter_file in chapter_files: + result = check_chapter(str(chapter_file), min_words) + results.append(result) + + return results + + +def print_results(results: list, min_words: int = 3000): + """打印检查结果""" + if not results: + print('没有找到章节文件') + return + + total_words = 0 + passed = 0 + failed = 0 + + print('\n' + '=' * 60) + print('章节字数检查报告') + print('=' * 60) + + for result in results: + if not result['exists']: + print(f'\n❌ {result["file"]}') + print(f' {result["message"]}') + continue + + total_words += result['word_count'] + if result['status'] == 'pass': + passed += 1 + icon = '✅' + else: + failed += 1 + icon = '⚠️ ' + + print(f'\n{icon} {Path(result["file"]).name}') + print(f' {result["message"]}') + + print('\n' + '-' * 60) + print(f'总计: {len(results)} 章 | {passed} 章达标 | {failed} 章不足 | 总字数: {total_words:,}') + print('-' * 60) + + if failed > 0: + print(f'\n⚠️ 有 {failed} 章内容不足 {min_words} 字,建议使用扩充技巧:') + print(' - 添加细节描写(环境、心理、动作)') + print(' - 增加对话场景') + print(' - 扩展人物内心活动') + print(' - 补充背景故事') + print(f'\n 参考: references/content-expansion.md') + + +def main(): + """主函数""" + min_words = 3000 + + if len(sys.argv) < 2: + print('用法:') + print(' 检查单个章节: python check_chapter_wordcount.py <章节文件路径> [最小字数]') + print(' 检查所有章节: python check_chapter_wordcount.py --all <目录路径> [最小字数]') + print('') + print('示例:') + print(' python check_chapter_wordcount.py novels/故事/第01章.md') + print(' python check_chapter_wordcount.py novels/故事/第01章.md 3500') + print(' python check_chapter_wordcount.py --all novels/故事') + print(' python check_chapter_wordcount.py --all novels/故事 3500') + return + + if sys.argv[1] == '--all': + if len(sys.argv) < 3: + print('错误: 使用 --all 时需要指定目录路径') + return + directory = sys.argv[2] + min_words = int(sys.argv[3]) if len(sys.argv) > 3 else 3000 + results = check_all_chapters(directory, min_words=min_words) + print_results(results, min_words) + else: + file_path = sys.argv[1] + min_words = int(sys.argv[2]) if len(sys.argv) > 2 else 3000 + result = check_chapter(file_path, min_words) + print_results([result], min_words) + + +if __name__ == '__main__': + main()