@chengzhao-dev/dsh-quarto-book 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/lib/tools/render-check.js +5 -2
  4. package/package.json +1 -1
  5. package/skills/designing-theme/SKILL.md +1 -0
  6. package/skills/designing-theme/assets/theme/css/landing.css +25 -2
  7. package/skills/writing-quarto/examples/01-language-scope.md +3 -3
  8. package/skills/writing-quarto/examples/02-structure-shape.md +5 -5
  9. package/skills/writing-quarto/examples/03-block-after.md +2 -2
  10. package/skills/writing-quarto/examples/03-excerpt-lead.md +6 -6
  11. package/skills/writing-quarto/examples/03-layout-list.md +15 -15
  12. package/skills/writing-quarto/examples/03-qmd-elements.md +4 -4
  13. package/skills/writing-quarto/examples/04-paragraph-cases.md +5 -5
  14. package/skills/writing-quarto/examples/04-paragraph-opening.md +3 -3
  15. package/skills/writing-quarto/examples/05-sentence-brevity.md +5 -5
  16. package/skills/writing-quarto/examples/05-sentence-frame.md +6 -6
  17. package/skills/writing-quarto/examples/05-sentence-reference.md +5 -5
  18. package/skills/writing-quarto/examples/06-wording-cases.md +8 -8
  19. package/skills/writing-quarto/examples/08-appendix.md +4 -4
  20. package/skills/writing-quarto/quarto/basics.md +24 -2
  21. package/skills/writing-quarto/quarto/comments.md +43 -0
  22. package/skills/writing-quarto/quarto/coords.md +4 -4
  23. package/skills/writing-quarto/quarto/encoding.md +35 -0
  24. package/skills/writing-quarto/quarto/mermaid.md +1 -1
  25. package/skills/writing-quarto/quarto/prose.md +86 -0
  26. package/skills/writing-quarto/quarto/render.md +15 -14
  27. package/skills/writing-quarto/quarto/terminal.md +3 -3
  28. package/skills/writing-quarto/scripts/checking-dom.py +6 -1
  29. package/skills/writing-quarto/scripts/verifying-content.py +12 -3
  30. package/skills/writing-quarto/steps/01-task.md +6 -6
  31. package/skills/writing-quarto/steps/02-structure.md +19 -19
  32. package/skills/writing-quarto/steps/03-blocks.md +40 -40
  33. package/skills/writing-quarto/steps/04-paragraphs.md +55 -55
  34. package/skills/writing-quarto/steps/05-sentences.md +42 -43
  35. package/skills/writing-quarto/steps/06-wording.md +9 -11
  36. package/skills/writing-quarto/steps/07-layout.md +21 -17
  37. package/skills/writing-quarto/steps/08-reread.md +9 -13
  38. package/templates/quarto-book-project/SKILL.md +1 -1
@@ -9,13 +9,13 @@
9
9
 
10
10
  一段最多容纳一个主题。其余规则:
11
11
 
12
- - 每段只有一个主题或中心句;中心句放在段首,后面的句子都服务于它。段内句子改完后,段首仍是中心句,一段仍只有一个对象;句子的六个成分见`steps/05-sentences.md`「六个成分」。
13
- - 一段一对象:同一段不夹杂两个并列对象,对象切换必须新起段;配套列表只服务本段对象,不得跨对象拼装列表项(对照见`examples/03-block-after.md`「单段混并列对象」)。
12
+ - 每段只有一个主题或中心句;中心句放在段首,后面的句子都服务于它。段内句子改完后,段首仍是中心句,一段仍只有一个对象;句子的六个成分见 `steps/05-sentences.md`「六个成分」。
13
+ - 一段一对象:同一段不夹杂两个并列对象,对象切换必须新起段;配套列表只服务本段对象,不得跨对象拼装列表项(对照见 `examples/03-block-after.md`「单段混并列对象」)。
14
14
  - 段落不超过 7 行,最佳 4 行以内;超过即拆或改列表。
15
15
  - 多个独立概念禁止塞进同一段:承接、目标、范围边界、阅读顺序、术语解释各归各段。
16
16
  - 段落之间用一个空行分隔,段首不缩进。
17
- - 代码块后的逐条讲解用无序列表:每项格式为「行内代码标识符 + 全角冒号 + 一句职责」(如 `` `enable_testing()`:开启 CTest。``),描述从简,全页标记方式一致;列表前保留一句引言交代工程语境,列表后需要时补一句收束或尾置 Callout。有先后顺序的排查步骤仍用有序列表;块前导语直接点名对象做什么,不用「先…再…最后…」,元计数禁令见`steps/03-blocks.md`。
18
- - 删段还是拆段,先按`steps/05-sentences.md`「一次对话」数这段有几件内容再定删或拆;判定全文见该文件「一次对话」。
17
+ - 代码块后的逐条讲解用无序列表:每项格式为「行内代码标识符 + 全角冒号 + 一句职责」(如 `` `enable_testing()`:开启 CTest。``),描述从简,全页标记方式一致;列表前保留一句引言交代工程语境,列表后需要时补一句收束或尾置 Callout。有先后顺序的排查步骤仍用有序列表;块前导语直接点名对象做什么,不用「先…再…最后…」,元计数禁令见 `steps/03-blocks.md`。
18
+ - 删段还是拆段,先按 `steps/05-sentences.md`「一次对话」数这段有几件内容再定删或拆;判定全文见该文件「一次对话」。
19
19
 
20
20
  #### 拆段触发表
21
21
 
@@ -23,32 +23,32 @@
23
23
 
24
24
  | 信号 | 动作 |
25
25
  | --- | --- |
26
- | 段内出现第二个互不依赖的对象或主题 | 新起段;新段首句接住上段对象(衔接见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」) |
26
+ | 段内出现第二个互不依赖的对象或主题 | 新起段;新段首句接住上段对象(衔接见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」) |
27
27
  | 段内出现「话题标签:解释」词条式冒号,或两个以上互不依赖的中心并列推进 | 按「拆核四步(多核混段的拆段方法)」判关系:递进同段衔接推进,并列拆段;词条式冒号改完整主谓句(见「散文伪标签冒号禁令」) |
28
- | 一段同时承担「承接上一章」+「本章交付物清单」+「源文件位置」+「摘录声明」 | 章引言不拆段,形态硬限与摘录声明删除见`steps/02-structure.md`;其他段落按职责拆段,交付物多项且需扫读 → 列表(目录式堆砌对照见`examples/02-structure-shape.md`) |
28
+ | 一段同时承担「承接上一章」+「本章交付物清单」+「源文件位置」+「摘录声明」 | 章引言不拆段,形态硬限与摘录声明删除见 `steps/02-structure.md`;其他段落按职责拆段,交付物多项且需扫读 → 列表(目录式堆砌对照见 `examples/02-structure-shape.md`) |
29
29
  | 超过约 4 行舒适带、或逼近 7 行 / 篇幅 token 上限 | 先找逻辑边界拆,禁止为凑行数在句中腰斩 |
30
30
  | 连续 ≥3 段纯散文且无列表/代码/图 | 改写见本文件「句序与段落形态」 |
31
31
  | 满篇单句段、句间无衔接 | 合并为连贯多句段,或改成列表 |
32
- | 逗号、句号后分句换新主语、新事实,无回指、无承接词 | 过简断裂改写见`steps/05-sentences.md`「过简断裂禁令」 |
33
- | 一段出现第 4 个互不依赖的主概念 | 拆段或改列表见`steps/05-sentences.md`「概念负荷」 |
34
- | 一句多中心、分号串两事、>40 字多动作 | 先拆句,再判是否还需拆段;同档并句不按超长句拆,异档不并进一句,判定见`steps/05-sentences.md`「同档并句」 |
32
+ | 逗号、句号后分句换新主语、新事实,无回指、无承接词 | 过简断裂改写见 `steps/05-sentences.md`「过简断裂禁令」 |
33
+ | 一段出现第 4 个互不依赖的主概念 | 拆段或改列表见 `steps/05-sentences.md`「概念负荷」 |
34
+ | 一句多中心、分号串两事、>40 字多动作 | 先拆句,再判是否还需拆段;同档并句不按超长句拆,异档不并进一句,判定见 `steps/05-sentences.md`「同档并句」 |
35
35
 
36
- 假拆禁令:不为「段数好看」把同一中心拆成两段同义反复(相邻同义合并见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」);不为对齐列表而去拆段或填第二中心;章引言多中心的形态契约见`steps/02-structure.md`「六段块序列」。
36
+ 假拆禁令:不为「段数好看」把同一中心拆成两段同义反复(相邻同义合并见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」);不为对齐列表而去拆段或填第二中心;章引言多中心的形态契约见 `steps/02-structure.md`「六段块序列」。
37
37
 
38
38
  ### 罗列短句成段禁令
39
39
 
40
40
  - 禁止把多个各自成句、互不衔接的罗列式短句机械堆进同一段:每句单看成立不等于段落成立,句号串联的清单式段落让读者在句间自行补关系。
41
- - 确认一个中心主题后,围绕段首中心句用衔接关系(…时、一旦、则、因此)把相关动作组织成连贯的完整句;单句长度与拆句触发仍守`steps/05-sentences.md`「句子规则」,不为连贯写超长句。同档并句不按超长句拆,异档不并进一句,判定见`steps/05-sentences.md`「同档并句」。
42
- - 真正并列、需要扫读的项改用列表(详见`steps/07-layout.md`「列表选择」)。
43
- - 判定信号:段内句子逐句可删、互不引用;句间没有承接、因果或时序词;逐句像要点罗列。改写对照见`examples/05-sentence-brevity.md`「罗列短句成段」。
41
+ - 确认一个中心主题后,围绕段首中心句用衔接关系(…时、一旦、则、因此)把相关动作组织成连贯的完整句;单句长度与拆句触发仍守 `steps/05-sentences.md`「句子规则」,不为连贯写超长句。同档并句不按超长句拆,异档不并进一句,判定见 `steps/05-sentences.md`「同档并句」。
42
+ - 真正并列、需要扫读的项改用列表(详见 `steps/07-layout.md`「列表选择」)。
43
+ - 判定信号:段内句子逐句可删、互不引用;句间没有承接、因果或时序词;逐句像要点罗列。改写对照见 `examples/05-sentence-brevity.md`「罗列短句成段」。
44
44
 
45
45
  ### 凑字数禁令
46
46
 
47
47
  信息密度以读者判断所需为准,不以篇幅为准。篇幅超限时先删下面这些句式,再考虑拆页;以下句式在 `content/**` 正文一律禁止:
48
48
 
49
49
  - 统计性凑句:「文件只有 X 行」「真正执行的只有 X 行」「一共只有 X 个」这类数字统计。数字本身影响读者判断时(规模超出预期、需要据此决定读法)才允许出现,纯描述规模一律删除。
50
- - 导航复述段:含「先看…再看…」的句子按`steps/05-sentences.md`「句子规则」整句删除,不单指「接下来先看」;与 `##` 标题结构重复的段落同样删除,读者从标题自身即可获得导航。
51
- - 同义反复:同一事实在承接句、代码块 filename、树内注释、列表项中重复出现时只保留一处。相邻段落同义合并见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。代码围栏的块后复述由`steps/03-blocks.md`「内容块前后的闭环」管辖(对照见`examples/03-block-after.md`「块后复述注释」)。同一禁令再延伸到公开接口旁白:禁止「接口清单压缩段」——把私有成员、公开成员名单、`const`、`[[nodiscard]]` 等压进同一段;定稿为场景 → 代码 → 块后只补注释未写的工程信息(对照见`examples/04-paragraph-opening.md`「接口清单压缩段」)。
50
+ - 导航复述段:含「先看…再看…」的句子按 `steps/05-sentences.md`「句子规则」整句删除,不单指「接下来先看」;与 `##` 标题结构重复的段落同样删除,读者从标题自身即可获得导航。
51
+ - 同义反复:同一事实在承接句、代码块 filename、树内注释、列表项中重复出现时只保留一处。相邻段落同义合并见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。代码围栏的块后复述由 `steps/03-blocks.md`「内容块前后的闭环」管辖(对照见 `examples/03-block-after.md`「块后复述注释」)。同一禁令再延伸到公开接口旁白:禁止「接口清单压缩段」——把私有成员、公开成员名单、`const`、`[[nodiscard]]` 等压进同一段;定稿为场景 → 代码 → 块后只补注释未写的工程信息(对照见 `examples/04-paragraph-opening.md`「接口清单压缩段」)。
52
52
  - 判断标准:一句删掉后主线闭环不受影响、且答不出「删掉它读者会做错什么」,默认删除。
53
53
 
54
54
  ### 拆分判据
@@ -66,7 +66,7 @@
66
66
  - **引言**:一句点明对象之间的关系(如「配置和构建是两件不同的事」)。
67
67
  - **展开**:每个问题一段,或用加粗引导词列表(`**配置**:…` / `**构建**:…`);两项且能写进一句的仍可保留正文。
68
68
  - **收束**:一句写出操作后果或因果(如「改了 CMakeLists.txt 要重跑配置」)。
69
- - 典型禁例:把「谁做配置、谁做构建、何时重配」压进同一段;改写对照见`examples/04-paragraph-opening.md`。
69
+ - 典型禁例:把「谁做配置、谁做构建、何时重配」压进同一段;改写对照见 `examples/04-paragraph-opening.md`。
70
70
 
71
71
  ### 段内同义堆叠禁令
72
72
 
@@ -80,8 +80,8 @@
80
80
 
81
81
  豁免与边界:
82
82
 
83
- - **换算短句豁免**:换算写成同一段短句各答一个动作,是递进不是堆叠(见`steps/07-layout.md`「列表选择」换算条)。
84
- - **简洁边界反向保护**:删辅句不得造成电报省略;动作、对象、顺序三要素仍写全(见`steps/05-sentences.md`「简洁边界」)。
83
+ - **换算短句豁免**:换算写成同一段短句各答一个动作,是递进不是堆叠(见 `steps/07-layout.md`「列表选择」换算条)。
84
+ - **简洁边界反向保护**:删辅句不得造成电报省略;动作、对象、顺序三要素仍写全(见 `steps/05-sentences.md`「简洁边界」)。
85
85
  - **跨章固定表述不复述判重**:「九个数据项」这类全书统一表述在各章按需出现,不受「同一事实只讲一次」限制。
86
86
  - **自测答案豁免**:答案可对照题面复述一次再展开。
87
87
 
@@ -97,7 +97,7 @@
97
97
 
98
98
  豁免(不得误杀):列表项(含 `` `enable_testing()`:开启 CTest。``);列举/代码/图导语(下一块是列表、围栏或图);终端与协议字面量(如 `流程结果:甲方获胜`);表格单元格与代码注释。
99
99
 
100
- 与「破折号夹心改冒号引出」(见`steps/05-sentences.md`「句子规则」)的关系是**收窄**:破折号解释改冒号时,只允许改成上述两种合法场合,不允许改成散文词条式冒号。
100
+ 与「破折号夹心改冒号引出」(见 `steps/05-sentences.md`「句子规则」)的关系是**收窄**:破折号解释改冒号时,只允许改成上述两种合法场合,不允许改成散文词条式冒号。
101
101
 
102
102
  ### 拆核四步(多核混段的拆段方法)
103
103
 
@@ -106,21 +106,21 @@
106
106
  1. **拆核**:列出本段必须交代的独立核(例:长度常量的含义;使用该长度的容器;行列到下标的换算)。
107
107
  2. **判关系**:核是「属性 → 承载」递进还是并列。递进可同段用衔接推进(如长度定型 → 容器选用该长度,先长度后容器);并列必须拆段。
108
108
  3. **一句一核推进**:每句主语明确(长度 / 数组 / 换算),不夹第二个核的细节;禁止伪标签把两核糊成词条。
109
- 4. **衔接与次序**:段内用「因此 / 所以 / 这样」接住上句对象;换核新段时首句点名上段产物(例:先讲 `kRows`、`kCols` 给出合法范围,新段首句写「范围确定后,坐标检查才有了依据」;递进同一核的展开留在同一段,拆段判据见`steps/05-sentences.md`「句内骨架」);若某核由后续小节专讲,本段只留一句明确桥接或整句下沉为其首句,禁止悬空预告。
109
+ 4. **衔接与次序**:段内用「因此 / 所以 / 这样」接住上句对象;换核新段时首句点名上段产物(例:先讲 `kRows`、`kCols` 给出合法范围,新段首句写「范围确定后,坐标检查才有了依据」;递进同一核的展开留在同一段,拆段判据见 `steps/05-sentences.md`「句内骨架」);若某核由后续小节专讲,本段只留一句明确桥接或整句下沉为其首句,禁止悬空预告。
110
110
 
111
- 拆段触发表已收录「词条式冒号 / 多核并列」信号行;改写对照见`examples/04-paragraph-cases.md`「散文伪标签冒号与多核混段」。
111
+ 拆段触发表已收录「词条式冒号 / 多核并列」信号行;改写对照见 `examples/04-paragraph-cases.md`「散文伪标签冒号与多核混段」。
112
112
 
113
113
  ### 章级:总—分—总
114
114
 
115
- - **总起**:无标题引言的构成见`steps/02-structure.md`「六段块序列」;引言的宾语等于本章 YAML `title` 的对象(承诺链第 2 条,见`steps/02-structure.md`「纵向承诺链」)。
116
- - **分述**:正文 `##` 序列沿一条主线递进展开;每个 `##` 是一个可验证结果的判定见`steps/02-structure.md`「六段块序列」,每个 `###` 的中心名词与导语宾语按`steps/02-structure.md`「纵向承诺链」第 4、5 条核对。
117
- - **收束**:本章回顾照应引言提出的任务;首尾照应要求回顾能对上引言的承诺,不引入新概念;「下一章」后的名字等于 `_quarto.yml` 中下一章的 YAML `title`(承诺链第 7 条,见`steps/02-structure.md`)。回顾的句数、句式与承接正文的要求以`steps/02-structure.md`为准。
118
- - 已有源文件的章要补齐自测与回顾。没有源文件的章的处理见`steps/02-structure.md`。
115
+ - **总起**:无标题引言的构成见 `steps/02-structure.md`「六段块序列」;引言的宾语等于本章 YAML `title` 的对象(承诺链第 2 条,见 `steps/02-structure.md`「纵向承诺链」)。
116
+ - **分述**:正文 `##` 序列沿一条主线递进展开;每个 `##` 是一个可验证结果的判定见 `steps/02-structure.md`「六段块序列」,每个 `###` 的中心名词与导语宾语按 `steps/02-structure.md`「纵向承诺链」第 4、5 条核对。
117
+ - **收束**:本章回顾照应引言提出的任务;首尾照应要求回顾能对上引言的承诺,不引入新概念;「下一章」后的名字等于 `_quarto.yml` 中下一章的 YAML `title`(承诺链第 7 条,见 `steps/02-structure.md`)。回顾的句数、句式与承接正文的要求以 `steps/02-structure.md` 为准。
118
+ - 已有源文件的章要补齐自测与回顾。没有源文件的章的处理见 `steps/02-structure.md`。
119
119
 
120
120
  ### 节内:递进式为默认,并列式处理枚举
121
121
 
122
- - 有先后或因果的内容用递进式展开,顺序依据见`steps/02-structure.md`「六段块序列」,段落顺序与执行顺序一致。
123
- - 无先后关系的要点(边界清单、原则枚举)用并列式,列表选择规则见`steps/07-layout.md`「列表选择」。
122
+ - 有先后或因果的内容用递进式展开,顺序依据见 `steps/02-structure.md`「六段块序列」,段落顺序与执行顺序一致。
123
+ - 无先后关系的要点(边界清单、原则枚举)用并列式,列表选择规则见 `steps/07-layout.md`「列表选择」。
124
124
  - 同一小节内不混用:一条主线递进到底;并列枚举整体作为一个环节嵌在递进中。
125
125
 
126
126
  ### 段间:过渡句只在话题切换处
@@ -128,60 +128,60 @@
128
128
  - 需要过渡的位置:段落话题或对象发生切换时(上一段讲 A 命令,下一段讲 B 命令;前一小节配置,本节运行)。同一段内句子推进、或下一段直接继续当前对象时,不加过渡。
129
129
  - 段间衔接落在下一段第一句的主语;主语复用上段的宾语或话题,话题切换时仍先接住上文再引出本段。
130
130
  - 形式:一句,放在新段段首,先接住上文(点明与上段的关系或结果),再引出本段中心。范例(示例章构建规则节首句):「可执行目标之外,同一份构建规则还注册了本章唯一的自动化检查」——前半句接住上文的可执行目标,后半句引出新对象。
131
- - 边界:过渡句服务主线判断,不复述标题结构。含「先看…再看…」的导航复述句整句删除,判法见`steps/04-paragraphs.md`「凑字数禁令」;`##`/`###` 开头的承接句数见`steps/02-structure.md`「分层上限」。
131
+ - 边界:过渡句服务主线判断,不复述标题结构。含「先看…再看…」的导航复述句整句删除,判法见 `steps/04-paragraphs.md`「凑字数禁令」;`##`/`###` 开头的承接句数见 `steps/02-structure.md`「分层上限」。
132
132
  - 相邻小节的首句同时是上一小节的承接位:写完上一小节结尾后检查下一小节首句是否接住读者,不在小节尾部再补预告句(与凑字数禁令同源)。
133
133
  - **读者正文禁写「下一节/上一节」**:`content/**` 正文不得用「下一节…」「上一节…」预告或回指小节,衔接靠新节首句接住上文;章末的「下一章」保留。本文件讨论衔接位置时引用的这两个词是规则描述用语,不是允许正文照写的句式(`verifying-content.py` 对读者 qmd 与 agent 文档判失败,紧贴引号或反引号的术语引用豁免)。
134
- - 相邻段落同义合并:相邻两段各自换一种说法讲同一事实时合并为一段,由后段的机制或结论接住前段的对象;合并后其余段落、列表和 Callout 不得再以第三种说法复述该事实。改写对照见`examples/04-paragraph-cases.md`。
135
- - 相邻两段不得各成独立说明书:第一段讲工具、第二段讲目录而彼此无衔接时,第二段段首要接住第一段的对象(工具基线 → 这些工具在编号目录上如何使用);只删不接,两段仍然是两个条目。改写对照见`examples/02-structure-shape.md`。
136
- - 目录树后的正文不复述树内行尾注释:树注释已逐文件交代职责,再列一段「A 组件、B 目录与 C 目录各自带 CMakeLists.txt」是把树翻译成说明书目录。树注释的标记方式(目录 `#/`、文件 `#` 右移 4 列、字母序、个数对齐)见`steps/03-blocks.md`「情况:目录树」;本条只管树后正文。树后保留的一句读法说明直述机制(「文件名给出位置,行尾注释说明职责」),不写「X 回答 A,Y 回答 B」的问答式并列;换成工具配置、依赖方向或「不参与 / 不依赖」类边界,即使树注释没写过,也删除或下沉,不得靠「新工程信息」留下(改写对照见`examples/02-structure-shape.md`「目录式堆砌」「树后换对象收束句」)。
137
- - 同一禁令延伸到代码围栏:块后不复述围栏内注释、单段并列对象按对象拆段的写法,见`steps/03-blocks.md`「内容块前后的闭环」与`steps/04-paragraphs.md`「段落规则」(对照见`examples/03-block-after.md`「块后复述注释」「单段混并列对象」)。
138
- - **多代码块小节先判一次只摘一块**:同源围栏是否合并、每个围栏前的导语怎么写、每段最多「一句 + 一个配套块」,见`steps/03-blocks.md`「内容块前后的闭环」;函数或枚举围栏前固定两句的动词与 `///` 一致判法见`steps/05-sentences.md`;块后收束与两个最小模块的衔接见`steps/03-blocks.md`「三级标题最小模块」,本文件不另写一份。改写对照见`examples/03-excerpt-lead.md`「多代码块一句导语」「递进片段合并」。
139
- - 表格与对照表的承接句、表后结论句见`steps/03-blocks.md`「短表与宽表」;禁用「X 与 Y 是两个容易混淆的词:」式元标签开场。
134
+ - 相邻段落同义合并:相邻两段各自换一种说法讲同一事实时合并为一段,由后段的机制或结论接住前段的对象;合并后其余段落、列表和 Callout 不得再以第三种说法复述该事实。改写对照见 `examples/04-paragraph-cases.md`。
135
+ - 相邻两段不得各成独立说明书:第一段讲工具、第二段讲目录而彼此无衔接时,第二段段首要接住第一段的对象(工具基线 → 这些工具在编号目录上如何使用);只删不接,两段仍然是两个条目。改写对照见 `examples/02-structure-shape.md`。
136
+ - 目录树后的正文不复述树内行尾注释:树注释已逐文件交代职责,再列一段「A 组件、B 目录与 C 目录各自带 CMakeLists.txt」是把树翻译成说明书目录。树注释的标记方式(目录 `#/`、文件 `#` 右移 4 列、字母序、个数对齐)见 `steps/03-blocks.md`「情况:目录树」;本条只管树后正文。树后保留的一句读法说明直述机制(「文件名给出位置,行尾注释说明职责」),不写「X 回答 A,Y 回答 B」的问答式并列;换成工具配置、依赖方向或「不参与 / 不依赖」类边界,即使树注释没写过,也删除或下沉,不得靠「新工程信息」留下(改写对照见 `examples/02-structure-shape.md`「目录式堆砌」「树后换对象收束句」)。
137
+ - 同一禁令延伸到代码围栏:块后不复述围栏内注释、单段并列对象按对象拆段的写法,见 `steps/03-blocks.md`「内容块前后的闭环」与 `steps/04-paragraphs.md`「段落规则」(对照见 `examples/03-block-after.md`「块后复述注释」「单段混并列对象」)。
138
+ - **多代码块小节先判一次只摘一块**:同源围栏是否合并、每个围栏前的导语怎么写、每段最多「一句 + 一个配套块」,见 `steps/03-blocks.md`「内容块前后的闭环」;函数或枚举围栏前固定两句的动词与 `///` 一致判法见 `steps/05-sentences.md`;块后收束与两个最小模块的衔接见 `steps/03-blocks.md`「三级标题最小模块」,本文件不另写一份。改写对照见 `examples/03-excerpt-lead.md`「多代码块一句导语」「递进片段合并」。
139
+ - 表格与对照表的承接句、表后结论句见 `steps/03-blocks.md`「短表与宽表」;禁用「X 与 Y 是两个容易混淆的词:」式元标签开场。
140
140
 
141
141
  ### 三层审查
142
142
 
143
143
  润色按三个层级推进;高层问题不先定,低层改写会白做:
144
144
 
145
145
  1. **篇章级**:全篇只保留一条成功路径,章节与小节顺序服务这条路径,无跳脱话题;开头交代读者做什么、完成后得到什么。
146
- 2. **段落级**:段落与段间条文见`steps/04-paragraphs.md`,衔接见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。
146
+ 2. **段落级**:段落与段间条文见 `steps/04-paragraphs.md`,衔接见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。
147
147
  3. **句子级**:逐句过「七个质量维度」与「句子级病类清单」。
148
148
 
149
149
  ### 句序与段落形态
150
150
 
151
151
  维度之外还有四条形态硬规则,读者正文(`content/**`)命中即改:
152
152
 
153
- - **对象先行**:句子按「对象 → 名称 → 约束 → 出处」排;禁「代码把它写成」式把源码当施事的元叙述开场,也禁「因此记作」「写成 `class`」等以源码为主语的句子。对照见`examples/01-language-scope.md`「元叙述开场与对象先行」。
153
+ - **对象先行**:句子按「对象 → 名称 → 约束 → 出处」排;禁「代码把它写成」式把源码当施事的元叙述开场,也禁「因此记作」「写成 `class`」等以源码为主语的句子。对照见 `examples/01-language-scope.md`「元叙述开场与对象先行」。
154
154
  - **正常语序**:推荐「主语/对象 + 谓语 + 宾语 +(必要状语)」,本书工程句优先「对象 → 名称 → 约束 → 出处」。改写信号:句首「关于…」抽空主语;「代码把它写成」式元叙述倒装;长定语链把施事压到句末;英文式「被…所…」堆叠;状语(时间/处所)乱插导致主谓隔断。与「对象先行」同向,不另开 kb。
155
155
  - **连续纯散文上限**:同一小节连续 ≥3 段纯散文(中间无列表、代码块、图或表)即改「一句中心 + 列表/代码/图」;判定信号:删任一段其余仍成立、段间无承接。
156
- - **禁小节导航**:正文「下一节/上一节」的禁令与豁免见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。
157
- - **换算句版式**:换算的写法见`steps/07-layout.md`「列表选择」。
156
+ - **禁小节导航**:正文「下一节/上一节」的禁令与豁免见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」。
157
+ - **换算句版式**:换算的写法见 `steps/07-layout.md`「列表选择」。
158
158
 
159
- 六个成分和场景表不在本文件复述,见`steps/05-sentences.md`。
159
+ 六个成分和场景表不在本文件复述,见 `steps/05-sentences.md`。
160
160
 
161
- 代码块门槛(哪些实现值得出围栏)见`steps/03-blocks.md`「代码块门槛」。
161
+ 代码块门槛(哪些实现值得出围栏)见 `steps/03-blocks.md`「代码块门槛」。
162
162
 
163
163
  ### 段落与句子
164
164
 
165
- 段落长度与中心句条文以本文件「段落规则」为唯一出处;单句 20/40 字与多动作拆句见`steps/05-sentences.md`「句子规则」。本文件只保留句子级病类判法(见「句子级病类清单」)。
165
+ 段落长度与中心句条文以本文件「段落规则」为唯一出处;单句 20/40 字与多动作拆句见 `steps/05-sentences.md`「句子规则」。本文件只保留句子级病类判法(见「句子级病类清单」)。
166
166
 
167
167
  ### 定段落:衔接与句段删改口诀
168
168
 
169
169
  一段一个对象、段间衔接、概念负荷的判定依据见本文件「段落规则」;对每个段落依次检查:
170
170
 
171
- - 删掉后影响当前任务吗?删除判据见`steps/04-paragraphs.md`「凑字数禁令」。
172
- - 段落是否同时承担两个以上动作?拆分判据见`steps/04-paragraphs.md`「拆分判据」。
173
- - 同一小节的连续同源代码围栏是否拆并,判定见`steps/03-blocks.md`(对照见`examples/03-excerpt-lead.md`「递进片段合并」)。
174
- - 段落是否推进了两个互不依赖的并列对象?是就按「拆核四步(多核混段的拆段方法)」处理,判定见`steps/04-paragraphs.md`「拆核四步(多核混段的拆段方法)」(对照见`examples/03-block-after.md`「单段混并列对象」)。
175
- - 段内是否有换说法复述同一机制的句子?是就删辅句或合并,判定见`steps/04-paragraphs.md`「段内同义堆叠禁令」。
176
- - 分句骨架是否成立?设计说明的角色链不合格情形见`steps/05-sentences.md`「句内骨架」,都在定句子判为不合格。
177
- - 散文里是否有「话题标签:解释」词条式冒号?是就改完整主谓句或真列表项,判定见`steps/04-paragraphs.md`「散文伪标签冒号禁令」。
178
- - 收束段是否把列表或围栏注释再讲一遍?次序与块后新信息见`steps/03-blocks.md`(对照见`examples/03-block-after.md`「块后复述注释」)。
179
- - 树后或块后补写的新信息主语是否换成另一个对象?删除或下沉见`steps/04-paragraphs.md`(对照见`examples/02-structure-shape.md`「树后换对象收束句」)。
180
- - 读者能否指出完成后要观察什么?任务可验证结果的判定见`steps/02-structure.md`「六段块序列」。
181
- - 正文、代码块和回顾是否重复同一句话?同义反复判定见`steps/04-paragraphs.md`「凑字数禁令」。
182
- - 新术语是否由当前动作自然引出?标题与论据的术语建立判定见`steps/03-blocks.md`「小节标题与正文对齐」。
183
-
184
- 段落衔接、罗列短句成段与接口清单压缩段的判定见`steps/04-paragraphs.md`;句间关系的写法见`steps/05-sentences.md`「过简断裂禁令」,对照见`examples/05-sentence-brevity.md`「罗列短句成段」、`examples/04-paragraph-opening.md`「接口清单压缩段」。
171
+ - 删掉后影响当前任务吗?删除判据见 `steps/04-paragraphs.md`「凑字数禁令」。
172
+ - 段落是否同时承担两个以上动作?拆分判据见 `steps/04-paragraphs.md`「拆分判据」。
173
+ - 同一小节的连续同源代码围栏是否拆并,判定见 `steps/03-blocks.md`(对照见 `examples/03-excerpt-lead.md`「递进片段合并」)。
174
+ - 段落是否推进了两个互不依赖的并列对象?是就按「拆核四步(多核混段的拆段方法)」处理,判定见 `steps/04-paragraphs.md`「拆核四步(多核混段的拆段方法)」(对照见 `examples/03-block-after.md`「单段混并列对象」)。
175
+ - 段内是否有换说法复述同一机制的句子?是就删辅句或合并,判定见 `steps/04-paragraphs.md`「段内同义堆叠禁令」。
176
+ - 分句骨架是否成立?设计说明的角色链不合格情形见 `steps/05-sentences.md`「句内骨架」,都在定句子判为不合格。
177
+ - 散文里是否有「话题标签:解释」词条式冒号?是就改完整主谓句或真列表项,判定见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」。
178
+ - 收束段是否把列表或围栏注释再讲一遍?次序与块后新信息见 `steps/03-blocks.md`(对照见 `examples/03-block-after.md`「块后复述注释」)。
179
+ - 树后或块后补写的新信息主语是否换成另一个对象?删除或下沉见 `steps/04-paragraphs.md`(对照见 `examples/02-structure-shape.md`「树后换对象收束句」)。
180
+ - 读者能否指出完成后要观察什么?任务可验证结果的判定见 `steps/02-structure.md`「六段块序列」。
181
+ - 正文、代码块和回顾是否重复同一句话?同义反复判定见 `steps/04-paragraphs.md`「凑字数禁令」。
182
+ - 新术语是否由当前动作自然引出?标题与论据的术语建立判定见 `steps/03-blocks.md`「小节标题与正文对齐」。
183
+
184
+ 段落衔接、罗列短句成段与接口清单压缩段的判定见 `steps/04-paragraphs.md`;句间关系的写法见 `steps/05-sentences.md`「过简断裂禁令」,对照见 `examples/05-sentence-brevity.md`「罗列短句成段」、`examples/04-paragraph-opening.md`「接口清单压缩段」。
185
185
 
186
186
  ## 情况
187
187
 
@@ -13,24 +13,24 @@
13
13
  - **节首句**不得用代词把后文才展开的内容提前捆成一包:节首以「这些/这个/这一步」作话题、同句又没有列出对象名,即失败。「这一章」「下一章」「这一节」指书的单位,是固定说法,不在此禁令内。
14
14
  - **已经逐个写出名字之后的回指**仍然合法:如前文小节已写出 `Player`、`Move`、`PlaceResult`、`Result`,后文「这些类型由 `Game` 的四个数据成员使用」保留。
15
15
 
16
- 条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py` 的整篇题干/节首检查;步骤挂点:定结构改自测题,定句子改节首与句内代词;对照见`steps/05-sentences.md`「代词不能代替未写出的对象」。换算句里的「下标」不算已经写出的对象;点名规则见`steps/07-layout.md`「列表选择」换算条。
16
+ 条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py` 的整篇题干/节首检查;步骤挂点:定结构改自测题,定句子改节首与句内代词;对照见 `steps/05-sentences.md`「代词不能代替未写出的对象」。换算句里的「下标」不算已经写出的对象;点名规则见 `steps/07-layout.md`「列表选择」换算条。
17
17
 
18
18
  ### 一次对话
19
19
 
20
- 面向读者的一次说话只推进一件内容:可以是一句,也可以是紧挨着的两句,但必须沿用同一套说法。对话不是新的切分单位,也不是标题层级:判定挂在定段落和定句子上——定段落先问这段有几件内容、决定删或拆,定句子才改措辞。脚本不统计对话数;自动失败只有下面四条判定里的三类高精度信号(见`steps/03-blocks.md`「机械检查」)。
20
+ 面向读者的一次说话只推进一件内容:可以是一句,也可以是紧挨着的两句,但必须沿用同一套说法。对话不是新的切分单位,也不是标题层级:判定挂在定段落和定句子上——定段落先问这段有几件内容、决定删或拆,定句子才改措辞。脚本不统计对话数;自动失败只有下面四条判定里的三类高精度信号(见 `steps/03-blocks.md`「机械检查」)。
21
21
 
22
22
  - **一件内容**是读者能单独复述的一件事,例如「这次有没有写进状态面板」。两件内容用顿号或逗号放进同一句,再补「是两个不同的问题」「用两个枚举分开回答」,就是把两次说话写成一次;读者读到围栏前,要回头拿开头的问题去猜后面的编号各指哪个。
23
23
  - **围栏前的成员列表允许与随后成员注释用词接近;围栏后不再复述**:成员取值列表和成员行尾注释说的是同一批对象,用词相近不是改口;列表之后的数据成员围栏里已写明的信息,块后不再复述。
24
- - **写不出本段中心,或这句与导语、围栏注释同义,就删本段**,不另写替身句。要换对象必须另起段,而且该对象得是本节正在讲的,不能提前交给后文才展开的成员或函数(如 示例章的 `current_player_` 与 `Game::Place`)。
24
+ - **写不出本段中心,或这句与导语、围栏注释同义,就删本段**,不另写替身句。要换对象必须另起段,而且该对象得是本节正在讲的,不能提前交给后文才展开的成员或函数(如 示例章的 `current_owner_` 与 `Game::ApplyMove`)。
25
25
  - **后文还讲这件事时,沿用开头的说法和类型名**,不改口成「接着看」「第一个枚举」「第二个枚举」。序数可以指真实位置(示例章「第一个格子」),不能用来给前面并列过的类型、成员、入口、步骤重新编号;格子、行、列和「第二次写入」这类真实次序豁免。改写是每件内容紧挨它自己的围栏,说法从开头保持到围栏。
26
26
  - **数量词和「这些」必须对着紧接着的名单或围栏**:写「四个入口」「覆盖四类」,下一块就要列出四个名字或四类场景;对不上就改成点名对象(示例章写「读写用 `IsInRange`、`GetCellKind`、`PlaceCell` 和 `IsFull`,`Board()` 只建出空状态面板」,不再说「只留四个入口」)。
27
27
  - **一句里的全称(全部、所有、唯一)读完下一句仍然成立**;被下一句否定就改范围或删除。**类型接线**(两个逗号分句各自是「成员叫法 + 使用 + 某一章的类型」)若两项都已出现在紧邻导语和围栏里,整段删除,不走「拉链句」的推迟、拆句、一项一行。
28
28
 
29
- 条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py` 的句子模块切分;步骤挂点:定段落删段或拆段,定句子改措辞;对照见`examples/04-paragraph-cases.md`「定段落:类型接线段整段删除」、`examples/05-sentence-frame.md`「定句子:两次说话拆成一次对话」与`examples/05-sentence-reference.md`「定句子:数量词对着下一块点名」。
29
+ 条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py` 的句子模块切分;步骤挂点:定段落删段或拆段,定句子改措辞;对照见 `examples/04-paragraph-cases.md`「定段落:类型接线段整段删除」、`examples/05-sentence-frame.md`「定句子:两次说话拆成一次对话」与 `examples/05-sentence-reference.md`「定句子:数量词对着下一块点名」。
30
30
 
31
31
  ### 句内骨架
32
32
 
33
- 写作步骤的定句子步骤。本条管**设计说明**(为什么这样存、这样判定、这样分工)——一段解释代码决策的正文;步骤句、列表项、自测导语不套这条。它不与邻条重复:拆核四步管多核怎么拆段(见`steps/04-paragraphs.md`「拆核四步(多核混段的拆段方法)」),过简断裂管分句之间的衔接(见本文件「过简断裂禁令」),本条管**分句各自担任什么角色、按什么次序排列**:
33
+ 写作步骤的定句子步骤。本条管**设计说明**(为什么这样存、这样判定、这样分工)——一段解释代码决策的正文;步骤句、列表项、自测导语不套这条。它不与邻条重复:拆核四步管多核怎么拆段(见 `steps/04-paragraphs.md`「拆核四步(多核混段的拆段方法)」),过简断裂管分句之间的衔接(见本文件「过简断裂禁令」),本条管**分句各自担任什么角色、按什么次序排列**:
34
34
 
35
35
  - 每个分句只担任一种角色:可观察事实、不变约束、因此作出的选择。次序固定为**事实 → 约束 → 因此选择**;选择句不得出现在依据之前——先写「长度取常量」再补「九个格子」,读者要把因果倒过来读。
36
36
  - 光有回指不够。后一分句若不是同一谓语的延续,必须写出「因此 / 所以」;删掉关系词后读者仍要自己补因果,判为不合格。可观察事实(「状态面板一共九个格子」)可以在前,读者据此才知道选择成立。
@@ -38,9 +38,9 @@
38
38
  - 一句里用逗号甩出的独立判断,最多留「事实,约束」或「约束,所以选择」一对;第三个判断另起句或删除。单句仍守本文件「句子规则」的 40 字与一动作上限。
39
39
  - 递进同一核不拆段复述:长度和装下它的数组是同一个核,同段用「因此」接住,不另起一段再说一遍「正好装下」。
40
40
  - 后续小节专讲的对象,本段不写「由 X 完成」:换算如果由下一小节专讲,本段不提前交接(「换算由下一小节完成」);块内注释或下节首句已经说出的职责,整句删除。
41
- - 与「对象先行」的对齐方式见`steps/04-paragraphs.md`「句序与段落形态」。
41
+ - 与「对象先行」的对齐方式见 `steps/04-paragraphs.md`「句序与段落形态」。
42
42
 
43
- 判定信号:设计说明句里选择先于依据;逗号甩出第三个独立判断;分句只贴类别不改变下一步;删掉关系词后因果要读者自补;段末提前交接后续小节的对象。改写对照见`examples/05-sentence-frame.md`「句内骨架:先依据后选择」。类型接线句与被下一句否定的全称按本文件「一次对话」判删留,不按本节改写句内次序。
43
+ 判定信号:设计说明句里选择先于依据;逗号甩出第三个独立判断;分句只贴类别不改变下一步;删掉关系词后因果要读者自补;段末提前交接后续小节的对象。改写对照见 `examples/05-sentence-frame.md`「句内骨架:先依据后选择」。类型接线句与被下一句否定的全称按本文件「一次对话」判删留,不按本节改写句内次序。
44
44
 
45
45
  ### 拉链句
46
46
 
@@ -56,10 +56,10 @@
56
56
 
57
57
  - 后一步用到前一步的结果时,写成前后两句陈述,不用「先 / 再 / 最后」连接。
58
58
  - **同物两处可留一句**:主语只有一个,只是指出声明文件和实现文件;句中再塞第二个任务(接受、拒绝、判定终局)时,第二个任务拆掉。位置句的谓语用「放进」,不用「记住」「保存」「选出」。
59
- - **回顾不按拉链改写**:回顾的条数与形态见`steps/02-structure.md`「六段块序列」。
60
- - **块后复述不按拉链改写**:块后复述禁令见`steps/03-blocks.md`「内容块前后的闭环」(对照见`examples/03-block-after.md`「块后复述注释」)。
59
+ - **回顾不按拉链改写**:回顾的条数与形态见 `steps/02-structure.md`「六段块序列」。
60
+ - **块后复述不按拉链改写**:块后复述禁令见 `steps/03-blocks.md`「内容块前后的闭环」(对照见 `examples/03-block-after.md`「块后复述注释」)。
61
61
 
62
- 判定信号:同一句里用「分别交给」「各说一层」「分别是」连接两组对象;或一句内两组配对删掉任一仍成立。改写对照见`examples/05-sentence-frame.md`「拉链句」;「分别交给」「各说一层」由 `verifying-content.py` 对读者正文硬拦。类型接线句是本节的例外出口:两项都已在紧邻导语和围栏出现时整段删除,不走推迟、拆句、一项一行(见本文件「一次对话」)。
62
+ 判定信号:同一句里用「分别交给」「各说一层」「分别是」连接两组对象;或一句内两组配对删掉任一仍成立。改写对照见 `examples/05-sentence-frame.md`「拉链句」;「分别交给」「各说一层」由 `verifying-content.py` 对读者正文硬拦。类型接线句是本节的例外出口:两项都已在紧邻导语和围栏出现时整段删除,不走推迟、拆句、一项一行(见本文件「一次对话」)。
63
63
 
64
64
  ### 六个成分
65
65
 
@@ -86,9 +86,9 @@
86
86
  - 复用上一分句的对象:代词、同名,或「其中」式回指;「这个/这些」只回指同句或上一句已经写出的名词(见本文件「代词不能代替未写出的对象」);
87
87
  - 写出关系:因此、这样、然后、用来、以便等承接词。
88
88
 
89
- 禁止新主语+新事实且与上一分句无回指——每截单看都合法、段却不成篇,读者要自己补「因为/所以/其中」。与「罗列短句成段」的分工:那条打**句号清单**(多个各自成句的短句堆成段,见`steps/04-paragraphs.md`「罗列短句成段禁令」),本条打**逗号切断**和**过简两句各丢一个事实**(如「对象 → 文件位置 → 入口个数 → 私有存储」逐截并列)。时序句「进入目录,执行入口」合法:后一分句接住前一分句的动作。
89
+ 禁止新主语+新事实且与上一分句无回指——每截单看都合法、段却不成篇,读者要自己补「因为/所以/其中」。与「罗列短句成段」的分工:那条打**句号清单**(多个各自成句的短句堆成段,见 `steps/04-paragraphs.md`「罗列短句成段禁令」),本条打**逗号切断**和**过简两句各丢一个事实**(如「对象 → 文件位置 → 入口个数 → 私有存储」逐截并列)。时序句「进入目录,执行入口」合法:后一分句接住前一分句的动作。
90
90
 
91
- 判定信号:逗号或句号后的分句引入新的主语或新的行内代码标识,且无回指词、无承接词。改写时按本文件「概念负荷」收敛主概念,用给定信息衔接次要展开;对照见`examples/05-sentence-brevity.md`「过简断裂段」。
91
+ 判定信号:逗号或句号后的分句引入新的主语或新的行内代码标识,且无回指词、无承接词。改写时按本文件「概念负荷」收敛主概念,用给定信息衔接次要展开;对照见 `examples/05-sentence-brevity.md`「过简断裂段」。
92
92
 
93
93
  ### 导语衔接
94
94
 
@@ -102,18 +102,18 @@
102
102
 
103
103
  ### 概念负荷
104
104
 
105
- - 主题仍一段一个(「一段一对象」见`steps/04-paragraphs.md`「段落规则」);该主题下最多 **1–3 个主要概念**——读者读完必须能复述的独立对象或判断。
105
+ - 主题仍一段一个(「一段一对象」见 `steps/04-paragraphs.md`「段落规则」);该主题下最多 **1–3 个主要概念**——读者读完必须能复述的独立对象或判断。
106
106
  - 允许若干**次要概念**只服务主概念:出处、约束、可见性、与上一句的关系;次要概念不得另起主语当新主概念。
107
107
  - **主次判定**:删掉该信息后,段首中心句是否仍成立?成立 → 次要或应删;不成立 → 主要。文件位置、`public:` 段名、入口个数默认是次要;「`Game` 编排一次」「状态面板收在对象内部」若本段要讲接口与存储分工,则「接口/内部存储」算两个主概念,须用给定信息衔接,不得并列甩出。
108
108
  - 超过 3 个主概念:拆下一段,或改「一句中心 + 列表」;禁止用逗号、句号把第 4 个主概念塞进同一段。
109
- - 普通自然段的 token 带与豁免见`steps/02-structure.md`「分层上限」;低于下限时补的是衔接与必要次要概念,不是凑字数句(「凑字数禁令」见`steps/04-paragraphs.md`,与本条同时成立)。
109
+ - 普通自然段的 token 带与豁免见 `steps/02-structure.md`「分层上限」;低于下限时补的是衔接与必要次要概念,不是凑字数句(「凑字数禁令」见 `steps/04-paragraphs.md`,与本条同时成立)。
110
110
 
111
111
  ### 句子规则
112
112
 
113
113
  - 单句一般不超过 20 字,40 字以上不可接受;一个句子出现三个以上动作或多个括号时拆句。
114
- - 解释拒绝、终局或分支时,主句先写可观察结果,条件跟在后面或另起一句:先写「操作被拒绝,局面保持不变」,再写为什么;不把原因堆在句首让读者读完才知道结果。代码注释里同一纪律安放在 if/return 分槽,见本文件「情况:围栏里的注释」。
115
- - 正文不使用破折号夹心解释:解释用冒号引出,或拆成两句;冒号的合法场合收窄见`steps/04-paragraphs.md`「散文伪标签冒号禁令」。
116
- - 用主动语态、肯定语气和陈述句;不用感叹句和双重否定。语气判定与口语腔、公文腔的正向标准见`steps/06-wording.md`。
114
+ - 解释拒绝、终局或分支时,主句先写可观察结果,条件跟在后面或另起一句:先写「操作被拒绝,局面保持不变」,再写为什么;不把原因堆在句首让读者读完才知道结果。正文不重复 if/return 的分支细节,见本文件「情况:围栏里的代码」。
115
+ - 正文不使用破折号夹心解释:解释用冒号引出,或拆成两句;冒号的合法场合收窄见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」。
116
+ - 用主动语态、肯定语气和陈述句;不用感叹句和双重否定。语气判定与口语腔、公文腔的正向标准见 `steps/06-wording.md`。
117
117
  - 不写否定式预告:「程序不提供电脑对手」「这一章不实现 X」式否定句一律不写;正文只正面陈述当前程序做什么,后续章节才会出现的能力保持沉默,即使当下为真也不写,否则后文补上该能力时句子失效。范围声明同受此限:章引言只写本章要交出的对象,不点名后续章节的流程(如「不在这里配置、编译、测试或运行」)——即使是否定形式,也把后章内容提前搬进读者视野,超出本章范围。下一章预告同属后章内容,只写在章末本章回顾,引言保持沉默。
118
118
  - 读者正文(`content/**/*.qmd`、根 `README.md`、`index.qmd` 的围栏外正文)不用「先…再…」「先…然后…」「先…最后…」串动作或阅读顺序。每一步写成独立陈述,主语是对象或读者要做的事。代码块导语直接点名对象做什么。`.agents` 的操作步骤、引号和围栏里的反例不套这条。
119
119
  - 读者正文点名类时直接写反引号里的类名,例如 `Game`、`Board`、`Ai`。类名前面不加「类」。
@@ -125,7 +125,7 @@
125
125
  - 禁例:「先自己回答,再展开核对。」——读者不知道怎么算回答、核对什么。改为完整指令:「不要展开答案,试着自己把回答完整说出来,写完之后展开对照。说不出来的部分,回到对应小节对照正文。」
126
126
  - 指令与提示句写全三要素:动作(做什么)、对象(对什么做)、顺序(先做什么后做什么)。
127
127
  - 并列的量名各自带上被计量的对象:「行数、列数」不能配一个光秃的「总数」。对象必须留在引入该名字的短语里;围栏代码注释和隔着代码块的后文都不算补上(示例章 `kRows` 的导语因此写成「数据项总数」)。
128
- - 拿不准一句是否过省时写成完整句;多出的字数由篇幅预算吸收(见`steps/02-structure.md`「分层上限」),不由读者的理解力吸收。
128
+ - 拿不准一句是否过省时写成完整句;多出的字数由篇幅预算吸收(见 `steps/02-structure.md`「分层上限」),不由读者的理解力吸收。
129
129
 
130
130
  ### 结构助词「的」
131
131
 
@@ -139,22 +139,21 @@
139
139
  - 术语表已经定名的,类型概述跟术语走。例:`Position` 的类型概述写「数据项坐标。」
140
140
  - 省掉之后领属不成立,或变成另一个意思时,留一个「的」。
141
141
  - 口诀:两层不加的,三层要加的;固定搭配不加的,动词定语要加的;读起来会停顿,就加的。
142
- - 注释和正文同一条。
143
- - CMake 邻接注释已经是完整句,定稿句照抄。定稿例:声明本工程至少使用 CMake 3.20。shell 里已经定稿的动词短语照抄,不再套「去掉的」。材料里「注释可省、文档要加」不收。「状态面板的行数」落成「状态面板行数」。
142
+ - 正文里的命令与配置按同一组规则;源码注释的措辞由项目 C++ 流程负责,本技能不在这里定。
144
143
 
145
- ### 函数概述跟注释
144
+ ### 函数概述跟围栏
146
145
 
147
- 函数或枚举围栏前的概述句,其动词与对象必须与紧随代码围栏里 `///` 第一句一致:围栏里写「获取指定坐标处的数据项状态」,概述句就用「获取」和「数据项状态」,不改写成同义词(如「读取」「格子」)。位置写成「定义在 `文件` 里」,不用「声明在」。依据:cppreference 函数页复述声明效果。概述句的其余要求(第一句接住上一句对象)见`steps/03-blocks.md`「内容块前后的闭环」。
146
+ 函数围栏前的概述句,其动词与对象必须与围栏里的函数名和参数一致:围栏里是 `ApplyMove`,概述句就用「应用」和「一步操作」,不改写成同义词(如「落子」)。位置写成「定义在 `文件` 里」,不用「声明在」。源码注释怎么写由项目 C++ 流程负责,本技能只对齐正文与围栏。
148
147
 
149
- 散文一句不换对象;判定全文见`steps/05-sentences.md`。
148
+ 散文一句不换对象;判定全文见 `steps/05-sentences.md`。
150
149
  反例:「已落 X:先手在这一格落下 X。」——右侧换成「先手」和落下动作。
151
150
  正例:「先手:使用 X 元素。」
152
151
 
153
152
  ### 关系写成能核对的运算
154
153
 
155
- 一句里的量必须写成相等、乘除加减、上下界,或哪个成员记下哪个数。盖住这四种的「确定、体现、界定、表达」不合格。时间义「已经确定」合格,如「编译期就能确定」。领域换算注释的「由 A 得到 B」和 `To*` 的「将 A 转换为 B」不在这节改,注释场景见`steps/03-blocks.md`。一句仍只做一个动作,仍是是字句或动词谓语句。标识符的加减乘除写在同一对反引号里,运算符用源码符号。`kRows - 1` 合格,`kRows` 减 1 不合格。
154
+ 一句里的量必须写成相等、乘除加减、上下界,或哪个成员记下哪个数。盖住这四种的「确定、体现、界定、表达」不合格。时间义「已经确定」合格,如「编译期就能确定」。领域换算注释的「由 A 得到 B」和 `To*` 的「将 A 转换为 B」不在这节改,注释场景见 `steps/03-blocks.md`。一句仍只做一个动作,仍是是字句或动词谓语句。标识符的加减乘除写在同一对反引号里,运算符用源码符号。`kRows - 1` 合格,`kRows` 减 1 不合格。
156
155
 
157
- 命中即改的信号在 `writing-quarto` 技能 `steps/08-reread.md` 信号表「定用词」行;正反对照见`examples/06-wording-cases.md`。
156
+ 命中即改的信号在 `writing-quarto` 技能 `steps/08-reread.md` 信号表「定用词」行;正反对照见 `examples/06-wording-cases.md`。
158
157
 
159
158
  ### 同档并句
160
159
 
@@ -164,7 +163,7 @@
164
163
  - 机制:同一对象上、同一件事的条件与动作。连谓只允许这一档,一个逗号。状语必须是时间或条件(写入前),不能是文件位置。
165
164
  - 位置:声明文件和实现文件。主语仍是这个对象,谓语只能是「放进」。这是「同物两处可留一句」的写法,不把职责再塞进来;上一章链接只当库名的定语,不另起主语。
166
165
 
167
- 示例章章首正例:`Board` 记住状态面板上已经落下的元素。保存九个数据项,写入前检查坐标。把声明放在项目动态库的头文件 `state.h`,把实现放在源文件 `state.cpp`。话题没换,下一句不写「它」作主语;中间已经换成别的对象,位置句写回原来的类型名。否决句是「在头文件和源文件里记住已经落下的元素」:「在头文件和源文件里」修饰了「记住」,记住的是元素,不是头文件。改写对照见`examples/05-sentence-reference.md`「处所状语配错谓语」。
166
+ 示例章章首正例:`Board` 记住状态面板上已经落下的元素。保存九个数据项,写入前检查坐标。把声明放在项目动态库的头文件 `state.h`,把实现放在源文件 `state.cpp`。话题没换,下一句不写「它」作主语;中间已经换成别的对象,位置句写回原来的类型名。否决句是「在头文件和源文件里记住已经落下的元素」:「在头文件和源文件里」修饰了「记住」,记住的是元素,不是头文件。改写对照见 `examples/05-sentence-reference.md`「处所状语配错谓语」。
168
167
 
169
168
  ### 一句不换对象
170
169
 
@@ -172,11 +171,11 @@
172
171
 
173
172
  反例:「已落 X:先手在这一格落下 X。」——冒号右侧换成「先手」和落下动作,不再说左侧的格子状态。改写见术语表「数据项类型」的三句;正例三句不在这里贴,见同节。
174
173
 
175
- 一句里的对象仍只有一个;六个成分的槽位见`steps/05-sentences.md`。
174
+ 一句里的对象仍只有一个;六个成分的槽位见 `steps/05-sentences.md`。
176
175
 
177
176
  ### 句子级病类清单
178
177
 
179
- 逐句判为不合格,命中即按括号内方式修;正反对照见`examples/05-sentence-reference.md`「主语跳变与并列搭配不当」及各专名案例:
178
+ 逐句判为不合格,命中即按括号内方式修;正反对照见 `examples/05-sentence-reference.md`「主语跳变与并列搭配不当」及各专名案例:
180
179
 
181
180
  1. **搭配不当**:缩句成「主+谓」「主+是+宾」核对,主谓、动宾、主宾任一不搭即换词或换句式(主宾搭配典型:目录是程序、章保存格子)。
182
181
  2. **主语跳变**:并列或后续分句逐一还原主语,与首句施事不同即补名词或拆句(「操作后显示 X」主语继承到没有字母的格子)。
@@ -185,28 +184,28 @@
185
184
  5. **指代不明**:先行词不唯一或不在最近,换专名。
186
185
  6. **紧缩并称释义**:把用途压成「一读一写」式并称、或省主语从句(「报告是否下满」),名字与动作的对应要读者自补,改写为显式映射(判定信号见「逐条释义代替动机」)。
187
186
  7. **欧化措辞**:「进行/作出+名词」改回动词;滥「的」滥「被」压缩;名词化主语段内一致时(如「读取直接抛出」的操作名)可留,否则补施事。
188
- 8. **破折号夹心与分号堆叠**:破折号夹解释的句子级判法见`steps/05-sentences.md`;冒号后用分号续第二个解释即拆(对照见「破折号夹心句」「冒号后堆叠分号解释」)。改冒号时只允许两种合法场合(完整句引出列表/围栏/图;列表项引导词后),散文词条式冒号的判定见`steps/04-paragraphs.md`「散文伪标签冒号禁令」。
187
+ 8. **破折号夹心与分号堆叠**:破折号夹解释的句子级判法见 `steps/05-sentences.md`;冒号后用分号续第二个解释即拆(对照见「破折号夹心句」「冒号后堆叠分号解释」)。改冒号时只允许两种合法场合(完整句引出列表/围栏/图;列表项引导词后),散文词条式冒号的判定见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」。
189
188
 
190
189
  ### 定句子:句子要短
191
190
 
192
- 设计说明的分句角色链(事实 → 约束 → 因此选择)见`steps/05-sentences.md`「句内骨架」;句序与段落形态判定见`steps/04-paragraphs.md`「句序与段落形态」。
191
+ 设计说明的分句角色链(事实 → 约束 → 因此选择)见 `steps/05-sentences.md`「句内骨架」;句序与段落形态判定见 `steps/04-paragraphs.md`「句序与段落形态」。
193
192
 
194
- - 先按`steps/05-sentences.md`「六个成分」给每句分类,再改字;改完回到定段落,核对中心句和一段一对象。
195
- - 单句长度与拆句的判定见`steps/05-sentences.md`「句子规则」。
196
- - 多中心句按中心拆成两句,判定见`steps/05-sentences.md`「句内骨架」。
197
- - 拉链句判定口诀与三条改写见`steps/05-sentences.md`「拉链句」;步骤链、同物两处不按拉链改写,对照见`examples/05-sentence-frame.md`「拉链句」。
198
- - 结构助词「的」的去留判定与口诀见`steps/05-sentences.md`「结构助词「的」」;两个名词粘成一个叫法仍带「的」,或三个以上名词、动词定语省了「的」,就按这条改。
199
- - 相邻句子的因果、时序关系要写在句面上,判定见`steps/05-sentences.md`「句内骨架」。
200
- - 写完数量词和「这些」,对着下一块点名的判定见`steps/05-sentences.md`「一次对话」,对照见`examples/05-sentence-reference.md`「定句子:数量词对着下一块点名」。
201
- - 换算按`steps/07-layout.md`「列表选择」换算条写成同一段短句;对照见`examples/03-layout-list.md`「公式与换算讲解段」。
202
- - 元叙述开场与对象先行的判定见`steps/04-paragraphs.md`「句序与段落形态」,对照见`examples/01-language-scope.md`「元叙述开场与对象先行」。
203
- - 假对比(「这不仅是 X,更是 Y」)、起跑式铺垫(「在开始之前」「首先我们来看」)与句尾意义拔高的判定和删法见`steps/05-sentences.md`「情况:假对比、起跑式铺垫与意义拔高」,对照见`examples/05-sentence-frame.md`「假对比、起跑式铺垫与意义拔高」。
193
+ - 先按 `steps/05-sentences.md`「六个成分」给每句分类,再改字;改完回到定段落,核对中心句和一段一对象。
194
+ - 单句长度与拆句的判定见 `steps/05-sentences.md`「句子规则」。
195
+ - 多中心句按中心拆成两句,判定见 `steps/05-sentences.md`「句内骨架」。
196
+ - 拉链句判定口诀与三条改写见 `steps/05-sentences.md`「拉链句」;步骤链、同物两处不按拉链改写,对照见 `examples/05-sentence-frame.md`「拉链句」。
197
+ - 结构助词「的」的去留判定与口诀见 `steps/05-sentences.md`「结构助词「的」」;两个名词粘成一个叫法仍带「的」,或三个以上名词、动词定语省了「的」,就按这条改。
198
+ - 相邻句子的因果、时序关系要写在句面上,判定见 `steps/05-sentences.md`「句内骨架」。
199
+ - 写完数量词和「这些」,对着下一块点名的判定见 `steps/05-sentences.md`「一次对话」,对照见 `examples/05-sentence-reference.md`「定句子:数量词对着下一块点名」。
200
+ - 换算按 `steps/07-layout.md`「列表选择」换算条写成同一段短句;对照见 `examples/03-layout-list.md`「公式与换算讲解段」。
201
+ - 元叙述开场与对象先行的判定见 `steps/04-paragraphs.md`「句序与段落形态」,对照见 `examples/01-language-scope.md`「元叙述开场与对象先行」。
202
+ - 假对比(「这不仅是 X,更是 Y」)、起跑式铺垫(「在开始之前」「首先我们来看」)与句尾意义拔高的判定和删法见 `steps/05-sentences.md`「情况:假对比、起跑式铺垫与意义拔高」,对照见 `examples/05-sentence-frame.md`「假对比、起跑式铺垫与意义拔高」。
204
203
 
205
204
  ## 情况
206
205
 
207
- ### 情况:围栏里的注释
206
+ ### 情况:围栏里的代码
208
207
 
209
- 代码注释不是句子,不套句长和语序规则,只查术语一致和指代清楚。注释语言与内容风格写在通用情况的代码块几条里。
208
+ 代码注释属于源文件,本技能不改写、不评判。正文只查一件事:块后是否把围栏里已经写明的注释又讲了一遍。复述就删,判定见 `steps/03-blocks.md`「内容块前后的闭环」。
210
209
 
211
210
  ### 情况:引文与术语原文
212
211
 
@@ -220,7 +219,7 @@
220
219
  - **起跑式铺垫**:「在开始之前」「首先我们来看」「让我们先了解」只宣布要开始。删掉,直接从对象和动作写起。
221
220
  - **意义拔高**:「看似只挪了一行,却为后面的扩展打下了基础」把一次操作说成意义。读者要取走的是操作改变的结果;有结果写结果,没有就删。
222
221
 
223
- 三条都不顺手补依据:不新增事实、数字、命令、性能结论与引文,不把留有余地的说法改成确定说法,也不改写作者观点。对照见`examples/05-sentence-frame.md`「假对比、起跑式铺垫与意义拔高」。
222
+ 三条都不顺手补依据:不新增事实、数字、命令、性能结论与引文,不把留有余地的说法改成确定说法,也不改写作者观点。对照见 `examples/05-sentence-frame.md`「假对比、起跑式铺垫与意义拔高」。
224
223
 
225
224
  ## 正反例
226
225
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  ### 目标语气
9
9
 
10
- 中文技术工程文档的语气:陈述、可核对、主动语态。句子的三要素判法见`steps/05-sentences.md`「简洁边界」;允许自然衔接词,不堆砌「必须 / 应当 / 予以」。
10
+ 中文技术工程文档的语气:陈述、可核对、主动语态。句子的三要素判法见 `steps/05-sentences.md`「简洁边界」;允许自然衔接词,不堆砌「必须 / 应当 / 予以」。
11
11
 
12
12
  ### 两轴禁例与允许写法
13
13
 
@@ -37,7 +37,7 @@
37
37
  - 口语信号:出现对读者的招呼(动手前、先弄清、咱们)或寒暄式开场。
38
38
  - 公文信号:删去「必须 / 应当 / 予以 / 永远」后句义不变,说明这些词只承担语气;改为写出不满足时的后果。
39
39
  - 元叙述信号:句子主语是「本章 / 本页 / 写作计划」,内容讲的是章节安排而非工程对象。实现状态说明全页至多出现一次。
40
- - 破损句信号:句子缺动作、对象或顺序,读者补不全;写全三要素的判法见`steps/05-sentences.md`「简洁边界」。
40
+ - 破损句信号:句子缺动作、对象或顺序,读者补不全;写全三要素的判法见 `steps/05-sentences.md`「简洁边界」。
41
41
 
42
42
  ### 不同文件的语气
43
43
 
@@ -46,21 +46,19 @@
46
46
  | 载体 | 强制范围 | 豁免 |
47
47
  | --- | --- | --- |
48
48
  | 读者散文(qmd、README) | 三层级全部 | 无 |
49
- | 代码注释(C++、sh、CMake、Python、JSONC、toml、CSS、clang 配置) | 句子级的搭配、指代、术语一致、不冗余、不拗口;注释符与动词对齐遵守`steps/05-sentences.md`「情况:围栏里的注释」 | 不强制段级中心;单行注释可为短语 |
50
49
  | agent 文档(.agents/**) | 句子级语法硬伤 | 压缩语气豁免见本步「不同文件的语气」;表格项、标题短语不按完整句判 |
51
- | 配置键注释(toml/yaml/jsonc) | 同代码注释 | 同代码注释 |
52
50
 
53
51
  ### 七个质量维度
54
52
 
55
53
  每个维度给可操作判定信号,命中即改写:
56
54
 
57
- 1. **中心明确**:判定见`steps/04-paragraphs.md`「段落规则」(对照见`examples/03-block-after.md`「单段混并列对象」)。
55
+ 1. **中心明确**:判定见 `steps/04-paragraphs.md`「段落规则」(对照见 `examples/03-block-after.md`「单段混并列对象」)。
58
56
  2. **简洁**:把候选词句删掉,信息不变即删——无信息修饰(「非常」「其实」「完全」「简单来说」)、同义反复、重复交代的同一事实。
59
- 3. **连贯**:段间衔接的判法见`steps/04-paragraphs.md`「段间:过渡句只在话题切换处」;句序违背时序或因果即调整;连接词表达的关系与上下文不符即改。句间衔接遵守 given-new 与设计句骨架,判定见`steps/05-sentences.md`。
60
- 4. **可读性**:单句 20/40 字与拆句见`steps/05-sentences.md`「句子规则」;复合句拆成简单句或并列句;三项以上并列写成列表,不写伪连贯长句;换算豁免见`steps/07-layout.md`「列表选择」。同档并句的长度见`steps/05-sentences.md`「同档并句」。
57
+ 3. **连贯**:段间衔接的判法见 `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」;句序违背时序或因果即调整;连接词表达的关系与上下文不符即改。句间衔接遵守 given-new 与设计句骨架,判定见 `steps/05-sentences.md`。
58
+ 4. **可读性**:单句 20/40 字与拆句见 `steps/05-sentences.md`「句子规则」;复合句拆成简单句或并列句;三项以上并列写成列表,不写伪连贯长句;换算豁免见 `steps/07-layout.md`「列表选择」。同档并句的长度见 `steps/05-sentences.md`「同档并句」。
61
59
  5. **不拗口**:命中即重写——三重定语链;一句里连续三个「的」;名词化堆叠(「进行 X 的实现」「对 X 作出更新」);双介词嵌套(「在…中通过…对…」)。
62
- 6. **指代明确**:「这 N 个」「它们」「其」的先行词必须唯一且紧邻;承前省略的判法见`steps/05-sentences.md`「六个成分」。
63
- 7. **不冗余**:同一事实只讲一次与固定表述豁免的判定见`steps/04-paragraphs.md`「段内同义堆叠禁令」(对照见`examples/04-paragraph-cases.md`「相邻段落同义合并」);同一对象同页统一称呼。
60
+ 6. **指代明确**:「这 N 个」「它们」「其」的先行词必须唯一且紧邻;承前省略的判法见 `steps/05-sentences.md`「六个成分」。
61
+ 7. **不冗余**:同一事实只讲一次与固定表述豁免的判定见 `steps/04-paragraphs.md`「段内同义堆叠禁令」(对照见 `examples/04-paragraph-cases.md`「相邻段落同义合并」);同一对象同页统一称呼。
64
62
 
65
63
  ### 定用词:术语要稳
66
64
 
@@ -68,7 +66,7 @@
68
66
  - 「同一概念只使用一个称呼」的判定见「七个质量维度」;英文标识保持大小写。
69
67
  - 无信息修饰的删除判定见「七个质量维度」;禁用词以 `scripts/verifying-content.py` 词表为准。
70
68
  - 连续出现三个「的」时的改写判定见「七个质量维度」第 5 条。
71
- - 正文提及枚举类型与成员函数时写源码完整标识符(`Result`、`Game::Place`),不设「概念简称」层;架构层名首次出现用一句可观察行为定义;讲读写路径第一句写屏幕上或调用处发生什么。下一句点名类型与函数。再下一句写边界(对照见`examples/01-language-scope.md`「零基础可懂的读写路径与层名定义」)。
69
+ - 正文提及枚举类型与成员函数时写源码完整标识符(`Result`、`Game::ApplyMove`),不设「概念简称」层;架构层名首次出现用一句可观察行为定义;讲读写路径第一句写屏幕上或调用处发生什么。下一句点名类型与函数。再下一句写边界(对照见 `examples/01-language-scope.md`「零基础可懂的读写路径与层名定义」)。
72
70
  - 枚举成员的含义写在源码行尾注释里,正文不复述成释义列表或释义段;正文只写谁调用、如何验收、与邻章关系(叙事范围见 `steps/01-task.md`「叙事范围(硬边界)」)。
73
71
  - C++ 概念点名按「定用词:术语要稳」的词表;读者侧禁用行见 `scripts/verifying-content.py`;语气判定与口语腔、公文腔的正向标准见「两轴禁例与允许写法」。
74
72
 
@@ -90,7 +88,7 @@
90
88
  - **编辑过程残留**:「下面我们来看」「综上所述」「本节将」把写作动作写进正文,删;「本节」只在确需导航时留一次。
91
89
  - **工程术语不在此列**:反馈里的「闭环」、构建里的「增量」指得到具体机制就保留,别当套话删。
92
90
 
93
- 判定信号与对照见`examples/06-wording-cases.md`「空泛套话与编辑残留」。
91
+ 判定信号与对照见 `examples/06-wording-cases.md`「空泛套话与编辑残留」。
94
92
 
95
93
  ## 正反例
96
94