@chengzhao-dev/dsh-quarto-book 0.4.3 → 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 (86) 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 +5 -2
  5. package/skills/designing-theme/SKILL.md +3 -2
  6. package/skills/designing-theme/assets/theme/css/base.css +216 -55
  7. package/skills/designing-theme/assets/theme/css/callouts.css +32 -23
  8. package/skills/designing-theme/assets/theme/css/code.css +84 -2
  9. package/skills/designing-theme/assets/theme/css/content.css +152 -36
  10. package/skills/designing-theme/assets/theme/css/landing.css +175 -54
  11. package/skills/designing-theme/assets/theme/css/nav.css +462 -35
  12. package/skills/designing-theme/assets/theme/css/sidebar.css +76 -31
  13. package/skills/designing-theme/assets/theme/css/tokens.css +34 -16
  14. package/skills/designing-theme/assets/theme/includes/fonts.html +1 -1
  15. package/skills/designing-theme/assets/theme/includes/footer.html +16 -7
  16. package/skills/designing-theme/assets/theme/includes/palette.html +420 -0
  17. package/skills/designing-theme/assets/theme/palettes/flexoki/brand-mark.svg +3 -0
  18. package/skills/designing-theme/assets/theme/palettes/flexoki/favicon-dark.svg +5 -0
  19. package/skills/designing-theme/assets/theme/palettes/flexoki/favicon-light.svg +5 -0
  20. package/skills/designing-theme/assets/theme/palettes/flexoki/highlight-dark.theme +214 -0
  21. package/skills/designing-theme/assets/theme/palettes/flexoki/highlight-light.theme +214 -0
  22. package/skills/designing-theme/assets/theme/palettes/flexoki/meta.md +53 -0
  23. package/skills/designing-theme/assets/theme/palettes/flexoki/theme-dark.scss +43 -0
  24. package/skills/designing-theme/assets/theme/palettes/flexoki/theme-light.scss +40 -0
  25. package/skills/designing-theme/assets/theme/palettes/flexoki/tokens.css +156 -0
  26. package/skills/designing-theme/assets/theme/palettes/hill-light/brand-mark.svg +3 -0
  27. package/skills/designing-theme/assets/theme/palettes/hill-light/favicon-dark.svg +5 -0
  28. package/skills/designing-theme/assets/theme/palettes/hill-light/favicon-light.svg +5 -0
  29. package/skills/designing-theme/assets/theme/palettes/hill-light/meta.md +78 -0
  30. package/skills/designing-theme/assets/theme/palettes/hill-light/syntax.css +150 -0
  31. package/skills/designing-theme/assets/theme/palettes/hill-light/tokens.css +322 -0
  32. package/skills/designing-theme/assets/theme/palettes/solarized/brand-mark.svg +3 -0
  33. package/skills/designing-theme/assets/theme/palettes/solarized/favicon-dark.svg +5 -0
  34. package/skills/designing-theme/assets/theme/palettes/solarized/favicon-light.svg +5 -0
  35. package/skills/designing-theme/assets/theme/palettes/solarized/highlight-dark.theme +214 -0
  36. package/skills/designing-theme/assets/theme/palettes/solarized/highlight-light.theme +214 -0
  37. package/skills/designing-theme/assets/theme/palettes/solarized/meta.md +66 -0
  38. package/skills/designing-theme/assets/theme/palettes/solarized/syntax.css +67 -0
  39. package/skills/designing-theme/assets/theme/palettes/solarized/theme-dark.scss +43 -0
  40. package/skills/designing-theme/assets/theme/palettes/solarized/theme-light.scss +41 -0
  41. package/skills/designing-theme/assets/theme/palettes/solarized/tokens.css +154 -0
  42. package/skills/designing-theme/knowledge/reading-surface.md +27 -15
  43. package/skills/designing-theme/references/theme-spine.md +2 -2
  44. package/skills/designing-theme/references/theme-system.md +82 -36
  45. package/skills/designing-theme/scripts/checking-layout.py +306 -48
  46. package/skills/designing-theme/scripts/measuring-pages.mjs +40 -3
  47. package/skills/writing-quarto/examples/01-language-scope.md +3 -3
  48. package/skills/writing-quarto/examples/02-structure-shape.md +5 -5
  49. package/skills/writing-quarto/examples/03-block-after.md +2 -2
  50. package/skills/writing-quarto/examples/03-excerpt-lead.md +6 -6
  51. package/skills/writing-quarto/examples/03-layout-list.md +15 -15
  52. package/skills/writing-quarto/examples/03-qmd-elements.md +4 -4
  53. package/skills/writing-quarto/examples/04-paragraph-cases.md +5 -5
  54. package/skills/writing-quarto/examples/04-paragraph-opening.md +3 -3
  55. package/skills/writing-quarto/examples/05-sentence-brevity.md +5 -5
  56. package/skills/writing-quarto/examples/05-sentence-frame.md +6 -6
  57. package/skills/writing-quarto/examples/05-sentence-reference.md +5 -5
  58. package/skills/writing-quarto/examples/06-wording-cases.md +8 -8
  59. package/skills/writing-quarto/examples/08-appendix.md +4 -4
  60. package/skills/writing-quarto/quarto/basics.md +24 -2
  61. package/skills/writing-quarto/quarto/comments.md +43 -0
  62. package/skills/writing-quarto/quarto/coords.md +4 -4
  63. package/skills/writing-quarto/quarto/encoding.md +35 -0
  64. package/skills/writing-quarto/quarto/mermaid.md +1 -1
  65. package/skills/writing-quarto/quarto/prose.md +86 -0
  66. package/skills/writing-quarto/quarto/render.md +17 -16
  67. package/skills/writing-quarto/quarto/terminal.md +3 -3
  68. package/skills/writing-quarto/scripts/checking-dom.py +20 -8
  69. package/skills/writing-quarto/scripts/verifying-content.py +12 -3
  70. package/skills/writing-quarto/steps/01-task.md +6 -6
  71. package/skills/writing-quarto/steps/02-structure.md +19 -19
  72. package/skills/writing-quarto/steps/03-blocks.md +40 -40
  73. package/skills/writing-quarto/steps/04-paragraphs.md +55 -55
  74. package/skills/writing-quarto/steps/05-sentences.md +42 -43
  75. package/skills/writing-quarto/steps/06-wording.md +9 -11
  76. package/skills/writing-quarto/steps/07-layout.md +21 -17
  77. package/skills/writing-quarto/steps/08-reread.md +9 -13
  78. package/templates/quarto-book-project/SKILL.md +1 -1
  79. package/skills/designing-theme/assets/theme/assets/brand-mark.svg +0 -4
  80. package/skills/designing-theme/assets/theme/assets/favicon.svg +0 -9
  81. package/skills/designing-theme/assets/theme/palettes/github/highlight-dark.theme +0 -213
  82. package/skills/designing-theme/assets/theme/palettes/github/highlight-light.theme +0 -213
  83. package/skills/designing-theme/assets/theme/palettes/github/meta.md +0 -38
  84. package/skills/designing-theme/assets/theme/palettes/github/theme-dark.scss +0 -35
  85. package/skills/designing-theme/assets/theme/palettes/github/theme-light.scss +0 -34
  86. package/skills/designing-theme/assets/theme/palettes/github/tokens.css +0 -160
@@ -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
 
@@ -5,25 +5,29 @@
5
5
 
6
6
  ## 通用情况
7
7
 
8
+ ### 标点与中英混排
9
+
10
+ 中文标点、中西文边界空格、引号、数字与英文术语的细则见 `quarto/prose.md`;本步不重复附表。判定顺序:先改标点与空格,再改列表与加粗,最后回读。
11
+
8
12
  ### 列表选择
9
13
 
10
14
  目录列表后能用段落补一个遗漏的目录吗:不能,并列成员一次列全。列表选择规则:
11
15
 
12
- - **无序列表**:并列概念、范围边界、要点枚举——各项之间没有先后或因果;代码块后的逐条讲解格式见`steps/04-paragraphs.md`「段落规则」。
16
+ - **无序列表**:并列概念、范围边界、要点枚举——各项之间没有先后或因果;代码块后的逐条讲解格式见 `steps/04-paragraphs.md`「段落规则」。
13
17
  - **有序列表**:有先后顺序的步骤或链路——执行顺序本身就是信息(如配置 → 编译 → 测试 → 运行)。
14
18
  - 列表项结构平行:起首用同类的词(都是名词短语,或都是动词短语),长度相近。
15
- - **列表字数带**:同一列表各项保持视觉齐长,避免扫读节奏断裂。计量:引导词汉字数、冒号后汉字数(行内代码按标识符计)。失衡判定:冒号后最长 ≥ 最短 × 2,或引导词相差 ≥ 4。改写顺序:删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 → 停止。豁免:出错原因/正确做法;有序步骤;着陆页卡片。列表齐长服从句段主规则,假拆禁令见`steps/04-paragraphs.md`。
19
+ - **列表字数带**:同一列表各项保持视觉齐长,避免扫读节奏断裂。计量:引导词汉字数、冒号后汉字数(行内代码按标识符计)。失衡判定:冒号后最长 ≥ 最短 × 2,或引导词相差 ≥ 4。改写顺序:删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 → 停止。豁免:出错原因/正确做法;有序步骤;着陆页卡片。列表齐长服从句段主规则,假拆禁令见 `steps/04-paragraphs.md`。
16
20
  - 列表项起首用加粗引导词标记中心语,读者扫读时先看到分类再决定是否细读;关键词取同类词(如「显示状态面板」「读入坐标」),并按对象的发生顺序排列,读者扫读即得顺序与内容。
17
- - 行为或规则枚举项用「**动词短语引导词**:完整句」格式:引导词命名本项的中心动作(如「**显示状态面板**」「**判定流程结果**」),冒号后保留完整中文句,写全动作、对象与结果。引导词是扫读索引,不替代句子信息,不为省字把冒号后压成电报短句(对照见`examples/03-layout-list.md`)。
18
- - 解释并列名称的引导词列表放在首次使用这些名称的代码块或目录树之前:读者先经列表认识每个名称,再看结构展示;禁止把解释压到块后,读者会带着未解释的名称读块。名称本身用读者可核对的具体形态(如「项目动态库」),不用模糊统称(术语依据见`steps/06-wording.md`)。
19
- - 并列成员一次列全:目录、组件等并列对象(含 `build/` 这类构建生成的目录)并入同一个引导词列表,先列全再展示目录树等结构;列表之后不用段落补列遗漏的成员(对照见`examples/04-paragraph-opening.md`「角色总述段」)。
20
- - 目录树的列对齐(目录 `#/`、文件 `#` 右移 4 列、同一棵树只一档注释)见`steps/03-blocks.md`「情况:目录树」;本文件只管列表、标点与加粗,不另写一份树规则。
21
+ - 行为或规则枚举项用「**动词短语引导词**:完整句」格式:引导词命名本项的中心动作(如「**显示状态面板**」「**判定流程结果**」),冒号后保留完整中文句,写全动作、对象与结果。引导词是扫读索引,不替代句子信息,不为省字把冒号后压成电报短句(对照见 `examples/03-layout-list.md`)。
22
+ - 解释并列名称的引导词列表放在首次使用这些名称的代码块或目录树之前:读者先经列表认识每个名称,再看结构展示;禁止把解释压到块后,读者会带着未解释的名称读块。名称本身用读者可核对的具体形态(如「项目动态库」),不用模糊统称(术语依据见 `steps/06-wording.md`)。
23
+ - 并列成员一次列全:目录、组件等并列对象(含 `build/` 这类构建生成的目录)并入同一个引导词列表,先列全再展示目录树等结构;列表之后不用段落补列遗漏的成员(对照见 `examples/04-paragraph-opening.md`「角色总述段」)。
24
+ - 目录树的列对齐(目录 `#/`、文件 `#` 右移 4 列、同一棵树只一档注释)见 `steps/03-blocks.md`「情况:目录树」;本文件只管列表、标点与加粗,不另写一份树规则。
21
25
  - 三项以上、或每项内含解释的信息优先成列表;只有两项且能写进一句的保留正文;只有一项时不设列表,写进正文(节内无代码块或列表承接时,整节收成一句)。
22
- - **不为凑三项拆列表**:列表项各要有一条独立信息;同一事实的碎片拆成三项、或为对齐硬补一项,都改回完整句,两项各有信息就写两项(对照见`examples/03-layout-list.md`「凑三项拆列表」)。
23
- - **构造后的成员并列成列表**:同一句或同一段用顿号、逗号并列三个及以上数据成员、而且各项状态不同时,改成引导词列表;列表放在数据成员围栏**之前**,引导句不数个数、不把类名连写两次,也不写「成员写在该类里」——只把「构造之后的取值」引出来(如「`Game()` 默认构造之后,状态面板、当前用户、流程结果和操作记录是下面这样:」)。每一项恰好两句:第一句写成员是什么,第二句只写开局取值;第二句可以是「开局是空状态面板」这类状态句。枚举取值列表的位置见`steps/03-blocks.md`「三级标题最小模块」,本文件不重写;枚举成员的含义仍留在源码行尾注释,这里列的是构造之后每个数据成员的状态,不是把枚举成员再解释一遍。依据:C++ Primer 把名字和初值分开讲,阮一峰一句一事。
24
- - **成员围栏前不列类型**:禁止「`board_` 用 `Board`,`current_player_` 用 `Player`」这种把类型再列一遍的句子——类型已经在围栏里。列表前的导语只点名要展开的维度,不把列表项里的取值先写一遍。
26
+ - **不为凑三项拆列表**:列表项各要有一条独立信息;同一事实的碎片拆成三项、或为对齐硬补一项,都改回完整句,两项各有信息就写两项(对照见 `examples/03-layout-list.md`「凑三项拆列表」)。
27
+ - **构造后的成员并列成列表**:同一句或同一段用顿号、逗号并列三个及以上数据成员、而且各项状态不同时,改成引导词列表;列表放在数据成员围栏**之前**,引导句不数个数、不把类名连写两次,也不写「成员写在该类里」——只把「构造之后的取值」引出来(如「`Game()` 默认构造之后,状态面板、当前用户、流程结果和操作记录是下面这样:」)。每一项恰好两句:第一句写成员是什么,第二句只写开局取值;第二句可以是「开局是空状态面板」这类状态句。枚举取值列表的位置见 `steps/03-blocks.md`「三级标题最小模块」,本文件不重写;枚举成员的含义仍留在源码行尾注释,这里列的是构造之后每个数据成员的状态,不是把枚举成员再解释一遍。依据:C++ Primer 把名字和初值分开讲,阮一峰一句一事。
28
+ - **成员围栏前不列类型**:禁止「`board_` 用 `Board`,`current_owner_` 用 `Player`」这种把类型再列一遍的句子——类型已经在围栏里。列表前的导语只点名要展开的维度,不把列表项里的取值先写一遍。
25
29
  - **`private:` 不作正文话题**:围栏里可以保留源码的 ` private:`,因为片段必须和头文件逐字一致;「存放在 `private:` 下」「都在 `private:` 下」一类把访问说明符当话题的句子删掉,换成该 `##` 标题里的对象。
26
- - **列表后直接进围栏**:成员取值列表的每一项先写这个成员是什么,再写开局状态;状态是枚举值时写出含义,不单写 `Player::kFirst` 或 `Result::kInProgress`。列表之后直接进数据成员围栏,围栏后不再放取值列表或同义复述段;成员的先后顺序、关联的结果类型等话题留到使用它们的函数小节再讲,不在成员节预告。围栏前的成员列表与随后成员注释的用词接近、围栏后不复述,见`steps/05-sentences.md`。
30
+ - **列表后直接进围栏**:成员取值列表的每一项先写这个成员是什么,再写开局状态;状态是枚举值时写出含义,不单写 `Player::kFirst` 或 `Result::kInProgress`。列表之后直接进数据成员围栏,围栏后不再放取值列表或同义复述段;成员的先后顺序、关联的结果类型等话题留到使用它们的函数小节再讲,不在成员节预告。围栏前的成员列表与随后成员注释的用词接近、围栏后不复述,见 `steps/05-sentences.md`。
27
31
  - **换算条(行列到下标的换算怎么写)**:
28
32
  - **点名**:第一次就写出是哪一种数。`cells_` 的数组下标、行号 `row`、列号 `col` 各用自己的名字。禁止「一个下标」「这个下标」「这次代入」互相指代。
29
33
  - **次序**:放在代码围栏和图之间的**同一段**,一句一个动作,后句接住前句的得数。第 0 行写出具体下标;下一句写第 `row` 行的起点;再一句写 `col` 从 0 加在这个起点上;然后一句只给出 `(1, 2)` 的三个数;最后一句只写算式和得数。禁止把跳过整行、列偏移、代入数字和得数写进同一句。
@@ -39,24 +43,24 @@
39
43
  ### 标点与中英混排
40
44
 
41
45
  - 中文用全角标点;并列英文用顿号;中文与英文/数字之间留半角空格。
42
- - 破折号夹解释的句子级判法见`steps/05-sentences.md`(冒号合法场合见`steps/04-paragraphs.md`「散文伪标签冒号禁令」)。
46
+ - 破折号夹解释的句子级判法见 `steps/05-sentences.md`(冒号合法场合见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」)。
43
47
  - `true` / `false` / `nullptr` 等 C++ 关键字用行内代码原样书写,不写中文译名。
44
48
 
45
49
  ### 外部规范对照
46
50
 
47
51
  - 阮一峰《中文技术文档的写作规范》:句长、中英混排空格、标点全角;标题不跳级、同级不孤立。
48
52
  - Google developer documentation style guide:一段一意、先给最重要信息;任务级标题用动词。
49
- - 华为《中文技术文档写作风格指南》:标题层级与句式;段落长度条文统一指向`steps/04-paragraphs.md`。
53
+ - 华为《中文技术文档写作风格指南》:标题层级与句式;段落长度条文统一指向 `steps/04-paragraphs.md`。
50
54
  - GB/T 15834—2011《标点符号用法》:顿号层级与标点用法。
51
55
  - 阿里 f2e-spec writing:中英混排与标点。
52
56
 
53
57
  ### 定版式:格式要降噪
54
58
 
55
- - 行内代码与平台名词的版式判定见`steps/02-structure.md`。
56
- - 可复制命令使用指定语言的代码围栏;命令与输出分开的判定见`steps/02-structure.md`。
57
- - 标题与导航不用行内代码的判定见`steps/02-structure.md`;中英文之间的空格见`steps/06-wording.md`。
58
- - 列表用于并列或顺序关系,选择判定见`steps/07-layout.md`「列表选择」。表格只用于需要对多个属性进行比较的内容:同一主题的属性合并成一张表,不按小节拆成多张薄表;只有一两列信息或右侧大量留白时改用句子或列表。列表是版式选择,不是新的一段说明。
59
- - Callout 只承载可跳过提示的判定见`steps/03-blocks.md`。
59
+ - 行内代码与平台名词的版式判定见 `steps/02-structure.md`。
60
+ - 可复制命令使用指定语言的代码围栏;命令与输出分开的判定见 `steps/02-structure.md`。
61
+ - 标题与导航不用行内代码的判定见 `steps/02-structure.md`;中英文之间的空格见 `steps/06-wording.md`。
62
+ - 列表用于并列或顺序关系,选择判定见 `steps/07-layout.md`「列表选择」。表格只用于需要对多个属性进行比较的内容:同一主题的属性合并成一张表,不按小节拆成多张薄表;只有一两列信息或右侧大量留白时改用句子或列表。列表是版式选择,不是新的一段说明。
63
+ - Callout 只承载可跳过提示的判定见 `steps/03-blocks.md`。
60
64
 
61
65
  具体元素写法见 `quarto/authoring.md`,终端步骤见 `quarto/terminal.md`。
62
66
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  ### 信号表(句段与注释,按步骤命中即改)
9
9
 
10
- 同一张表扫 `content/**` 与 `.agents/**`;载体差异按`steps/06-wording.md` 的「不同文件的语气」表(压缩语气豁免不适用于读者正文)。高精度项由 `verifying-content.py` 固化,其余靠人工过表;「步骤」列对齐 `SKILL.md` 的写作步骤:
10
+ 同一张表扫 `content/**` 与 `.agents/**`;载体差异按 `steps/06-wording.md` 的「不同文件的语气」表(压缩语气豁免不适用于读者正文)。高精度项由 `verifying-content.py` 固化,其余靠人工过表;「步骤」列对齐 `SKILL.md` 的写作步骤:
11
11
 
12
12
  | 步骤 | 信号 | 判定 | 依据 |
13
13
  | --- | --- | --- | --- |
@@ -34,17 +34,13 @@
34
34
  | 定句子 | 假对比「这不仅是 X,更是 Y」两半并不都提供信息;起跑式铺垫(「在开始之前」「首先我们来看」);句尾把一次操作拔高成意义 | 删宣布与拔高;两半都有信息时保留对比 | `steps/05-sentences.md`「情况:假对比、起跑式铺垫与意义拔高」 |
35
35
  | 定句子 | 两个名词粘成一个叫法仍带「的」,或三个以上名词、动词定语省了「的」 | 按「结构助词「的」」判定去留与口诀改写 | `steps/05-sentences.md`「结构助词「的」」 |
36
36
  | 定句子 | 没点名载体(「一个下标」「这个下标」「这次代入」),或一句里同时有跳过整行、列偏移和得数,或公式项列表 | 按列表选择换算条写成同一段短句 | `steps/07-layout.md`「列表选择」 |
37
- | 定句子 | `Get*` 概述纯名词句(`/// 当前流程结果。`) | 改「获取…」,动词与函数名前缀硬对齐 | `steps/03-blocks.md` |
37
+ | 定句子 | `Get*` 概述纯名词句(`/// 当前流程结果。`) | 改「获取…」,动词与函数名前缀硬对齐;只对齐围栏里的声明,不改源码注释 | `steps/03-blocks.md` |
38
38
  | 定句子 | 分支解释把条件压在句首(拒绝、终局句读到句末才知道结果) | 主句先写可观察结果,条件跟在后面或另起一句 | `steps/05-sentences.md`「句子规则」 |
39
- | 定版式 | 配置与脚本注释混用句式形状(裸完整句与话题句并存) | 按文件定一种形状:键值配置与构建脚本用「话题:一句完整说明。」,`.gitignore` 等点文件用名词短语 | `steps/05-sentences.md`「情况:围栏里的注释」 |
40
- | 定句子 | 「第二道…防线」类实现注 | 删 | `steps/03-blocks.md` |
41
39
  | 定句子 | 行尾把格子状态、先手或后手、操作动作写进同一句 | 换成术语表「数据项类型」里的三句,与头文件逐字一致 | `steps/05-sentences.md`、`steps/06-wording.md` |
42
- | 定句子 | 注释把下一行的形参比较(「检查 position 是否…」)或坐标写死、各查几次再写一遍 | 函数体只是一次比较或 `all_of` 时不写,只写代码看不出的例外;扫描注释只写检查哪一组线 | `steps/05-sentences.md`「函数概述跟注释」 |
43
- | 定句子 | 成员或函数细节只剩「按…存放 / 排列 / 记录」而没有领域对象 | 先补本体(如 `history_` 行尾补「本局操作记录。」),列宽不够再删动作半句;这条只改源码注释,不进入 qmd | `steps/05-sentences.md`「函数概述跟注释」 |
44
40
  | 定句子 | 一句里的量被「确定、体现、界定、表达」盖住(时间义「已经确定」合格) | 改写成相等、乘除加减、上下界或成员记法;「由 A 得到 B」「将 A 转换为 B」的换算注释不在此改 | `steps/05-sentences.md`「关系写成能核对的运算」 |
45
41
  | 定段落 | 散文伪标签冒号(话题 + `:` 词条式冒号);多核混段 | 词条式冒号改完整主谓句或真列表项;多核混段按拆核四步改写 | `steps/04-paragraphs.md`「散文伪标签冒号禁令」「拆核四步(多核混段的拆段方法)」 |
46
42
  | 定版式 | 成员函数声明间无空行、qmd 围栏坍缩 | 补空 1 行;围栏保留源码空白 | `steps/03-blocks.md`「类与多函数摘录的垂直空白」 |
47
- | 定版式 | 注释位置混用(同一意图忽上忽下)、行尾超 100 列 | 按位置矩阵;超宽整条回退上一行 | `steps/03-blocks.md` |
43
+ | 定版式 | 行尾超 100 列 | 超宽整条回退上一行 | `steps/03-blocks.md` |
48
44
  | 定版式 | 列表项字数失衡(冒号后最长 ≥ 最短 ×2,或引导词相差 ≥4) | 删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 | `steps/07-layout.md`「列表选择」、`examples/03-layout-list.md`「列表字数带失衡」 |
49
45
  | 定版式 | 凑三项拆列表:列表项只是同一事实的碎片,各自没有独立信息 | 改回完整句;两项各有信息就写两项 | `steps/07-layout.md`「列表选择」 |
50
46
  | 定句子 | 句号后下一句以「它」开头且下一个字不是「们」 | 话题没换就不写「它」,主语空缺或写回原类型名 | `steps/05-sentences.md`「同档并句」 |
@@ -58,7 +54,7 @@
58
54
 
59
55
  ### 润色流程:沿着步骤走
60
56
 
61
- 润色任务沿 `SKILL.md` 的写作步骤执行,从定任务走到通过检查,跳步视为未完成;判定标准见`steps/06-wording.md`。两种走法共用 1–9:**增量润色**保持最小改动,只改判为不合格的句子,不做风格重塑;**全章重构**按 `SKILL.md`「两种走法」走——章级(1–2)先定删留不动句子,节级(3–4)只拆块和段,句级(5–7)逐句拆开再写回去,该层全部重组,不走最小改动。执行时遵守定段落节的既有判定:分句骨架在定句子判为不合格,不在定段落里顺手改句子。
57
+ 润色任务沿 `SKILL.md` 的写作步骤执行,从定任务走到通过检查,跳步视为未完成;判定标准见 `steps/06-wording.md`。两种走法共用 1–9:**增量润色**保持最小改动,只改判为不合格的句子,不做风格重塑;**全章重构**按 `SKILL.md`「两种走法」走——章级(1–2)先定删留不动句子,节级(3–4)只拆块和段,句级(5–7)逐句拆开再写回去,该层全部重组,不走最小改动。执行时遵守定段落节的既有判定:分句骨架在定句子判为不合格,不在定段落里顺手改句子。
62
58
 
63
59
  **先切模块,再套规则。** 任何一步动笔前先把文本切成单位,围栏、YAML 与链接 URL 跳过(脚本按同一口径统计,计数见 `verifying-content.py` 输出):
64
60
 
@@ -68,19 +64,19 @@
68
64
  - **句子**:段内按「。!?」切开。只做一句一中心、拉链、句内骨架、和下一句是否互相否定。
69
65
  - **列表项**:`-` 或有序编号。只做一项一中心、平行、字数带。不把列表项当散文拉链改。
70
66
  - **表格单元格**:管道表。一表一事;格里写事实,不写第二篇散文。
71
- - **块**:导语、围栏、块后、Callout。围栏不是句子;块后新信息的判定见`steps/03-blocks.md`。
67
+ - **块**:导语、围栏、块后、Callout。围栏不是句子;块后新信息的判定见 `steps/03-blocks.md`。
72
68
 
73
- 「一次对话」不与这些单位并列成切分单位:脚本切得出标题、空行、句号、列表和表格,切不出「一次说话」。它只留在`steps/05-sentences.md`「一次对话」的判定里——定段落先问这段有几件内容,再决定删、拆或切成几次说话;定句子才改措辞。
69
+ 「一次对话」不与这些单位并列成切分单位:脚本切得出标题、空行、句号、列表和表格,切不出「一次说话」。它只留在 `steps/05-sentences.md`「一次对话」的判定里——定段落先问这段有几件内容,再决定删、拆或切成几次说话;定句子才改措辞。
74
70
 
75
71
  1. **普查建账**:`git ls-files` 按扩展名分类,列出全部含中文自然语言的文件(跳过机器生成物与二进制)。台账写 `temp/`(不入库),逐文件记「审读状态/修改数/备注」;任务结束前每行落到「已审」,无问题也记「未发现」。覆盖率由 `verifying-content.py` 的「中文体检」项背书:台账文件总数与脚本输出的载体组计数对不上即为漏审。
76
72
  2. **沿步骤逐篇走**:从定任务到通过检查,每步只改该步判为不合格的句子;后一步发现前一步没做完,退回那一步,不在当前步补结构。某句只在定用词失败,就不重写它的结构;某段在定句子失败,先改骨架,再让定用词看一遍。已合格的句子不重润。
77
- 3. **改写**:最小改动,只改判为不合格的句子,不做风格重塑。改写不破检查:qmd 导语 token 与句数、段落篇幅、禁用词由 `verifying-content.py` 把关;中文文件保持 UTF-8 无 BOM、LF。代码围栏与源码注释同源:改源码注释前先 grep 各 qmd 围栏,被逐字引用的两侧同改;同源复制文件改一处同步其余并 diff 比对。改动触及知识库案例引用句时先 grep 案例文件再同步。
78
- 4. **验收同步**:按改动域跑校验(qmd → `verifying-content.py` + `checking-links.py`;有项目技能时按它列出的命令,跨域收尾跑它的全量 profile)。检查次数与停手见`steps/09-check.md`「完成判据」。
73
+ 3. **改写**:最小改动,只改判为不合格的句子,不做风格重塑。改写不破检查:qmd 导语 token 与句数、段落篇幅、禁用词由 `verifying-content.py` 把关;中文文件保持 UTF-8 无 BOM、LF。代码围栏逐字摘自源文件,本步骤不改围栏;同源复制文件改一处同步其余并 diff 比对。改动触及知识库案例引用句时先 grep 案例文件再同步。
74
+ 4. **验收同步**:按改动域跑校验(qmd → `verifying-content.py` + `checking-links.py`;有项目技能时按它列出的命令,跨域收尾跑它的全量 profile)。检查次数与停手见 `steps/09-check.md`「完成判据」。
79
75
 
80
76
  ### 完成前核对
81
77
 
82
78
  - [ ] 信号表逐行扫过,FAIL 清零;WARN 记台账不追清。
83
- - [ ] 章节骨架与 `steps/02-structure.md` 一致;引言形态守`steps/02-structure.md`。
79
+ - [ ] 章节骨架与 `steps/02-structure.md` 一致;引言形态守 `steps/02-structure.md`。
84
80
  - [ ] 与改前文本对照过:没有新增原文没有的事实、遗漏读者需要的信息,或把限定说成确定;判法见本文件「情况:对照改前文本」。
85
81
  - [ ] `verifying-content.py` 与 `checking-links.py` 通过,证据在 `temp/`。
86
82
 
@@ -22,7 +22,7 @@ description: 记录某一本 Quarto Book 的项目级约定:书名、读者、
22
22
 
23
23
  - 章节顺序的唯一来源:根 `_quarto.yml` 的 `book.chapters`。
24
24
  - 每章的类章或能力章、关键对象、`title` 与二级标题:`writing/chapter-map.md`。
25
- - 目录布局:`content/<part>/<NN-chapter>.qmd`。
25
+ - 目录布局:正文按部分放在 `content/<part>/`,章节写成 `content/<part>/<NN-chapter>.qmd`;附录放在 `content/appendix/`,由根 `_quarto.yml` 的 `appendices` 引用。
26
26
  - 改文件名时同轮同步 `_quarto.yml`、章节对照、`title` 和已有链接。
27
27
 
28
28
  ## 术语表
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="文档">
2
- <path fill="#000" fill-rule="evenodd" d="M17 7h22.5L50 17.5V57H17a5 5 0 0 1-5-5V12a5 5 0 0 1 5-5Zm22 4.8V19h7.2L39 11.8ZM17 12a0 0 0 0 0 0 0v40h28V24H35V12H17Z"/>
3
- <path fill="#000" d="M22 31h18v4H22zm0 9h18v4H22z"/>
4
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="C++">
2
- <style>:root { --bg: #22272E; --fg: #ADBAC7; --accent: #57AB5A; } @media (prefers-color-scheme: dark) { :root { --bg: #F0F6FC; --fg: #0D1117; --accent: #1F883D; } }</style>
3
- <rect width="64" height="64" rx="15" fill="var(--bg)"/>
4
- <path fill="var(--fg)" fill-rule="evenodd" d="M28.70 41.66 A13 13 0 1 1 28.70 22.34 L23.85 27.73 A5.75 5.75 0 1 0 23.85 36.27 Z"/>
5
- <rect x="34" y="29.875" width="9" height="4.25" rx="2.125" fill="var(--accent)"/>
6
- <rect x="36.375" y="27.5" width="4.25" height="9" rx="2.125" fill="var(--accent)"/>
7
- <rect x="48" y="29.875" width="9" height="4.25" rx="2.125" fill="var(--accent)"/>
8
- <rect x="50.375" y="27.5" width="4.25" height="9" rx="2.125" fill="var(--accent)"/>
9
- </svg>