@chengzhao-dev/dsh-quarto-book 0.6.0 → 0.6.2
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.
- package/README.en.md +6 -5
- package/README.md +6 -5
- package/locale/en.json +2 -2
- package/locale/zh.json +2 -2
- package/package.json +4 -4
- package/skills/designing-theme/SKILL.md +1 -1
- package/skills/designing-theme/assets/theme/palettes/hill-light/tokens.css +1 -1
- package/skills/writing-quarto/SKILL.md +6 -4
- package/skills/writing-quarto/examples/02-structure-shape.md +28 -0
- package/skills/writing-quarto/examples/05-sentence-reference.md +14 -0
- package/skills/writing-quarto/examples/06-wording-cases.md +14 -0
- package/skills/writing-quarto/examples/{03-layout-list.md → 07-layout-list.md} +14 -0
- package/skills/writing-quarto/examples/08-appendix.md +1 -1
- package/skills/writing-quarto/quarto/basics.md +1 -1
- package/skills/writing-quarto/quarto/prose.md +35 -3
- package/skills/writing-quarto/quarto/readability.md +55 -0
- package/skills/writing-quarto/quarto/render.md +17 -0
- package/skills/writing-quarto/scripts/checking-links.py +4 -1
- package/skills/writing-quarto/scripts/checking-prose.py +163 -0
- package/skills/writing-quarto/scripts/testing-content.py +3 -1
- package/skills/writing-quarto/scripts/verifying-content.py +5 -0
- package/skills/writing-quarto/steps/01-task.md +1 -1
- package/skills/writing-quarto/steps/02-structure.md +9 -26
- package/skills/writing-quarto/steps/03-blocks.md +14 -14
- package/skills/writing-quarto/steps/04-paragraphs.md +16 -16
- package/skills/writing-quarto/steps/05-sentences.md +24 -14
- package/skills/writing-quarto/steps/06-wording.md +1 -0
- package/skills/writing-quarto/steps/07-layout.md +11 -12
- package/skills/writing-quarto/steps/08-reread.md +8 -4
- package/skills/writing-quarto/steps/09-check.md +4 -4
- package/templates/quarto-book-project/SKILL.md +2 -0
- package/templates/quarto-book-project/writing/chapter-map.md +3 -0
|
@@ -47,6 +47,7 @@ PLACEHOLDER_RE = re.compile(r"^\s*TODO|待补|待定|TBD", re.IGNORECASE)
|
|
|
47
47
|
TRAILING_SPACE_RE = re.compile(r"[ ]+$")
|
|
48
48
|
|
|
49
49
|
HEADING_RE = re.compile(r"^(#{1,6})\s+(.*?)\s*$")
|
|
50
|
+
HEADING_PERSONAL_RE = re.compile(r"自己|咱们|我们|你|您|跟我|试试|来看")
|
|
50
51
|
FENCE_RE = re.compile(r"^\s*(```+|~~~+)\s*(\{[^}]*\}|[^\s`]*)?")
|
|
51
52
|
LINK_RE = re.compile(r"\[[^\]]*\]\(([^)\s]+)\)")
|
|
52
53
|
CJK_RE = re.compile(r"[\u3400-\u9fff]")
|
|
@@ -158,6 +159,10 @@ def check_heading(path: Path, line: int, level: int, text: str, issues: list[Iss
|
|
|
158
159
|
issues.append(Issue(path, line, "空标题"))
|
|
159
160
|
if re.search(r"[。!?;]$", text):
|
|
160
161
|
issues.append(Issue(path, line, "标题末尾带句读"))
|
|
162
|
+
if HEADING_PERSONAL_RE.search(text):
|
|
163
|
+
issues.append(Issue(path, line, "标题带人称或口语劝诱;改写成对象名或「动词 + 具体宾语」"))
|
|
164
|
+
if "`" in text:
|
|
165
|
+
issues.append(Issue(path, line, "标题带行内代码;文件名留给正文,标题写对象"))
|
|
161
166
|
|
|
162
167
|
|
|
163
168
|
def check_prose_block(path: Path, start_line: int, text: str, issues: list[Issue]) -> None:
|
|
@@ -5,28 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
## 通用情况
|
|
7
7
|
|
|
8
|
-
### 页面骨架
|
|
9
|
-
|
|
10
|
-
正文按下面顺序组织:
|
|
11
|
-
|
|
12
|
-
```text
|
|
13
|
-
无标题引言 → 任务序列(2-4 个 ##)→ ## 常见错误 → ## 自测问题 → ## 本章回顾
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
- 无标题引言写成连贯读者文(形态契约见 `steps/02-structure.md`):首选单个自然段(承接上一章的结果,用章节标题链接;正面陈述本章要解决的问题;可选在段末用一句话点名主源文件并挂链接),必要时「一段 + 列表」;禁止两个散文自然段并立、单句孤儿段和结尾导航段,摘录免责句永不进入读者正文,不放 Callout。
|
|
17
|
-
- `##` 承担一个可验证阶段,数量按独立任务和依赖关系决定;2–4 个是常见预算而非标题配额,`###` 只用于有独立动作或结果的子任务。`##` 下有多于一段的主线内容时必须拆成合理的 `###`,禁止「长导语 + 大段代码 + 过短 `###`」的失衡结构。
|
|
18
|
-
- 章目标与回顾分工:引言或紧随引言的目标节只陈述本章可交付、可见的产物,不提前堆「属于哪章、哪章再讲」的回顾式边界;「本章做到哪、后续章接什么」只写在 `## 本章回顾`,过程中的 `### 本章实现边界` 一类过程节标题一律不设。
|
|
19
|
-
- 每个任务按「做什么 → 执行什么 → 看到什么 → 简短说明」推进。
|
|
20
|
-
- 常见错误按症状分 `###`,标题后第一句写触发条件与可观察现象,随后给原因与正确做法;误用型条目一段成文,原因与做法需要分开完整交代时用症状句导语加原因/做法引导词列表,排查型故障展开「定位 → 修复 → 验证」三步,形态分野见 `quarto/terminal.md`。入门章节只保留最可能遇到的 2-3 项。中间实现章的常见错误承接开发过程中真实出现过的报错记录。
|
|
21
|
-
- 自测问题用带 `.answer` 的有序问题检查本章已经写明的一件可观察结果;题面只描述自洽局面、一道题只问一件可观察结果,其余规则(含拒绝题的正例写法)见 `steps/02-structure.md`「六段块序列」;只有本章写了原因、而且情景已经说全时,才用「为什么」问句。每章按本章可验证的结果决定题数,没有这种结果时不添加,写法见 `quarto/authoring.md`。答案首句直接针对问题所问的对象作答,补充细节放在首句之后,不先岔到相邻对象(对照见 `examples/05-sentence-reference.md`)。
|
|
22
|
-
- 本章回顾确认读者获得的能力并说明下一章可使用的状态;句数、句式与承接正文的要求以 `steps/02-structure.md` 为准,不重复页面目录。
|
|
23
|
-
|
|
24
|
-
页面骨架的块级顺序与引言构成以 `steps/02-structure.md` 为准。篇幅以该文件的 token 预算为准,由 `scripts/verifying-content.py` 强制。
|
|
25
|
-
|
|
26
|
-
### 收尾
|
|
27
|
-
|
|
28
|
-
最后说明下一章可以继续使用什么状态。需要领域依据时查 `SKILL.md`,再读对应文件;不在本文件复制知识正文。
|
|
29
|
-
|
|
30
8
|
### 六段块序列
|
|
31
9
|
|
|
32
10
|
```text
|
|
@@ -40,7 +18,7 @@
|
|
|
40
18
|
**章际衔接(定结构检查项)**:第 N 章的引言、任务节与自测题只用第 1..N-1 章已建立的名字与概念;本章新术语在首次真正使用处就近落术语卡或行内括号;术语卡的升级判据见 `writing-quarto` 技能 `quarto/authoring.md`「Callout 升级判据」,写法见 `steps/03-blocks.md`。某概念接不上前章已建立的名字时,把它下沉回首次使用它的章建立,不在本章临时补课。
|
|
41
19
|
|
|
42
20
|
- **无标题引言**:第一个 `##` 之前,写成**连贯读者文**回答读者三问——从哪来(承接上一章已成立的结果)、这一章做什么(本章要解决的问题与读者将获得的能力,正面陈述;范围能并则并,不写否定式后章预告)、代码在哪(可选:若本章有主源文件,用**同段末句**自然语言点名并挂全章 blob 链接,不另起「代码写在…里」独立段)。第一句写出谁在什么情况下做本章这件事,类章同时写出类名;类型怎么实现放到后面的句子。不另开背景节。**形态硬限(用户决定)**:首选**恰好 1 个自然段**(通常 2–4 句);必要时允许 **1 个自然段 + 1 个列表**(列表前引导句写在同一段末,或段落后紧跟列表;列表不算第二散文段);**禁止**出现两个散文自然段并立,更禁止 ≥3 段、单句孤儿段、结尾导航段。列表仅用于并列范围/对象,任务细节下沉正文 `##`,不用顿号串交付物冒充散文。**摘录免责句永不写进读者正文**:「本章摘录源码服务于讲解」「片段不保证与源文件逐字一致」「不等于文件内顺序」类作者旁白一律删除(旧「示例位置句开口子」已废止),同源保证交给 `verifying-content.py`;摘录免责只保留在 技能的权威文件与检查脚本里。不放 Callout,不写后续章节内容,不用「后面的 X」式前向指称引入后续章节才建立的结构件(如「实现放在后面的编号目录里」)。引言容纳多个独立概念时**并段或改列表**,禁止拆成两个散文段;拆分判据见 `steps/04-paragraphs.md`「拆分判据」。内容量硬限:token 预算见本文件「分层上限」;范围边界能并入承接段时不成列表。承接中引用其他章节一律用章节标题链接,不用「第 N 章」;本章回顾的下一章预告不写链接,直述预告一句(页面导航已有前进按钮),两者均见 `steps/06-wording.md`。任务概览默认并入承接句,正文小节就是任务的展开;预览列表仅当任务没有对应正文小节时使用(示例章四项工作列表已按此删除)。原 front matter `description` 的定位信息并入引言承接句,信息只保留引言一处、不同义两存;章节 qmd 不写 `description`(字段出处见 basics.md)。着陆页 `index` 按 landing 规则组织,不硬套本契约。
|
|
43
|
-
- **任务序列**:每节一个可验证结果。判定标准是任务结束时存在一个读者能自己复述的检查动作;只有「读完了解释」的内容并入相邻任务。概念 → 最小示例 → 操作 → 验证 →
|
|
21
|
+
- **任务序列**:每节一个可验证结果。判定标准是任务结束时存在一个读者能自己复述的检查动作;只有「读完了解释」的内容并入相邻任务。概念 → 最小示例 → 操作 → 验证 → 边界,先让读者看到行为再解释规则;单次操作按「做什么 → 执行什么 → 看到什么 → 简短说明」推进。各章的任务节以该章标题里的对象为准,不把每一章都写成「目录、设计、构建、测试」四节。设计范围以这一章能在 `src/` 里核对的源文件收束。内容量硬限:任务级 `##` 通常不超过 4 个;`##` 与 `###` 开头的承接句数见本文件「分层上限」,写完直接进入代码、命令或列表;超出即为凑字数信号,禁令见 `steps/04-paragraphs.md`「凑字数禁令」。有 `###` 子节时,二级标题(`##`)的引言须承接上文;恰好 2 个子节时一句点一个,3 个或 4 个时不再逐个点名,点名交给三级标题的句式见本文件「标题分层」,点名用读者已认识的词,不点后文才定义的类型名;一句之内禁止把两个子节对象配成「由 X 定位,并保存 Y」「分别交给」式的两组对应(对照见 `examples/05-sentence-frame.md`「拉链句」)。交付清单或纯边界说明不单独设 `##`,并入引言或相邻工程总览节;同一头文件中连续的值类型优先按一个可验证结果归并到同一任务节。任务节内的讲述顺序按「类型 → 简单函数 → 更难的函数」排列,最难的组装放在最后,并满足先定义后调用:读者要跟着读懂的行内代码标识符,其行为必须已经出现过——上一章、上文,或同一小节里紧挨着的声明和一句行为——上一章已建立的名字视为已知;未定义名字的调用链、节首概览与编号步骤整段删除。`##` 导语只用白话,不点后文才定义的函数名。章内顺序的依据见 `SKILL.md`「九步」的定结构一条,本文件不复述。
|
|
44
22
|
- **常见错误**:服务失败后回来的读者。每个症状一个 `###`,标题后第一句写触发条件和可观察现象。误用型条目一段成文写原因与正确做法;原因与做法各需一句完整交代时(如原因牵涉私有段的设计动机),用症状句导语加「出错的原因/正确的做法」引导词列表,列表可作为节导语的合法收尾,导语预算只约束症状句;排查型故障展开定位 → 修复 → 验证三步。形态分野与细则是 `writing-quarto` 技能 `quarto/terminal.md`「常见错误条目形态与三步诊断流」。入门章节只保留最可能遇到的 2-3 项,不是完整 FAQ。
|
|
45
23
|
- **自测问题**:服务刚跑通主线、需要确认理解的读者。每章 0-7 道题,题目问本章已经写明的一件可观察结果(会怎样、是哪一个、从几开始),没有这种结果就不设题;只有本章写了原因、而且情景已经说全时,才用「为什么」。题面用本章已经用过的词说全,不用本章未定义的概念,不问「为什么不做成另一种」;题干是合上书的一问,只看本题题干、不看答案与上一题;题干代词的判法见 `steps/05-sentences.md`「代词不能代替未写出的对象」,允许「什么」——它在要一个名字或一句文字,不是指上文没出现的东西;题面里每个细节都要改变答案,答案不受细节影响时不单点某一种情形。题面只描述一个自洽局面,每个事实都要能同时成立,禁止把互相矛盾的局面写成题干(同一句里先说轮到甲方、又说这一步的用户是 O,读者听到的是程序自相矛盾,不是一次非法调用)——「轮到谁」和「这一步的用户」若是同一个对象,只写一次。要考拒绝,用正文已经用过的那条规则问可观察结果(正例:「空状态面板开局,轮到甲方。没轮到的一方来操作时,状态面板会改变吗?」,答案首句「不会。操作的用户不是当前用户,`Place` 返回 `kRejected`,状态面板和轮次都保持原样。」);不为了出题制造正文没走过的矛盾局面。一道题只问一件可观察结果,不把两个观察捆进同一题(如「状态面板是空的吗」与「轮到谁」并列),拆开或删去一个。固定导语「不要展开答案,试着自己把回答完整说出来,写完之后展开对照;说不出来的部分,回到对应小节对照正文。」;答案写在 `::: {.answer}` 围栏 div 内,由 `scripts/answering-disclosure.lua` 渲染为默认收起的原生 `<details>`;答案只使用本章已讲过的概念。题目同样必须能由本章正文回答:答案依据须是正文已写明的内容,正文没讲的概念不设题;若问题值得问,先在正文补上依据再设题。答案先答所问:首句直接回答题面,一到两句,不补题面之外的对比、延伸或重复题面(对照与归属由正文承载)。问答中的文件、路径与标识符指称统一用行内代码,不挂链接(`verifying-content.py` 对自测节链接记 WARN);所属目录在答案前文已确立时,路径可省去重复的顶层前缀(如先写 `example/`,后文写 `include/state.h`)。
|
|
46
24
|
- **本章回顾**:服务已经成功的读者。1-2 句段落(不是 bullet 列表):「你已经能 <能力>」中的能力必须对应本章任务节交出的结果,可复用任务节关键词,不写正文没有的抽象总称(如「按输入、输出和终局」);「下一章 <预告>」不写链接,直述预告一句(页面导航已有前进按钮),预告不引入下一章才建立的术语。回顾的每个说法都要能在正文找到出处,禁止空泛能力句或只写预告;正文任务节变化时同步改写回顾。
|
|
@@ -111,6 +89,10 @@
|
|
|
111
89
|
- 一律**不加冒号、破折号、括号补充说明**;并列结构可用顿号或逗号连接(如「区分声明、初始化与赋值」)。
|
|
112
90
|
- 不堆「教程」「详解」「学习」「验证:」等泛化或解释性后缀;标题让读者预先知道这一页/节要完成什么,而不是只知道宽泛主题。
|
|
113
91
|
- 标题不用「看懂、读懂、弄清」类口语领会词,也不预设读者的领悟结果;标题写读者要在目录里找的对象,陈述本页交付的内容(用户决定:`看懂一次完整流程` 改 `流程规则`;自动化由 `writing-quarto` 技能 `scripts/verifying-content.py` 词表承担)。
|
|
92
|
+
- 标题不用人称、劝诱和口语动词:不写「自己走一局」「跟我做」「动手试试」这类第一人称或劝诱式;标题只留对象名或「动词 + 具体宾语」(`对局演示`、`启动对局`),不把读者本人写进标题。`scripts/verifying-content.py` 检查人称与标题里的行内代码。
|
|
93
|
+
- 标题不以时间或过程从句起头:不把「输入之后」「看完之后」「下一步」压成 `输入之后的回应` 这类标题;从句还原成对象或短任务(`程序回应`、`查看回应`),时间关系留给导语。
|
|
94
|
+
- 同一章的任务级 `##` 用同一种句式:类章与流程章统一收成「限定语 + 对象」名词短语(`终局判定`、`落子入口`、`棋盘还原`),同章混用「动词 + 宾语」与名词短语判为不合格;动作交给正文。
|
|
95
|
+
- 标题不用视图隐喻和英文类名:`程序全图` 改 `程序结构`,`Ai 落子` 改 `电脑落子`;标题写读者在侧栏里查找的中文对象,类名留给正文与代码。
|
|
114
96
|
- 标题禁元叙述与抽象空心题:不写「本节说明…」「本章规划…」类讲章节安排的标题,也不写读不出动作对象的空心名词短语(「确认依赖方向」类),一律改成「动作 + 对象」或读者已认识的对象。
|
|
115
97
|
- title 留下读者在侧栏里要找的对象:概念、数据、结果用名词;只有这一页的交付就是读者要执行的一个动作时,才用「动词 + 一个宾语」。修饰性定语留给正文,否则「示例项目」「工程」等限定在 title 与二三级标题里连续重复(用户决定:各章 title 收尾为对象名,如流程规则、工程目录、数据存储、一次操作、构建与运行、操作策略、局面快照)。
|
|
116
98
|
- title 不用「并」串联两个动作、不用把字句;两个动作各有任务节承载时择主撰写对象,动作细节留给导语和任务节。
|
|
@@ -119,7 +101,7 @@
|
|
|
119
101
|
- 二级、三级标题用两组词:要么「限定语 + 对象」(数据项坐标、操作后的结果),要么「动词 + 具体宾语」(检查是否三连、放入一枚元素);同一个二级标题下的三级标题只用其中一种,数字见「标题字数」。指示(这一步、这次)、过程动词(记下、收进、用到)、方式(用数组、先…再…)、把字句与数量词(三种、四个、九个)不进标题,下放到导语或正文。组词是否带限定语由改标题时逐条对照,不新增正则。导语仍按现规则:恰好两个三级时一句点一个,三个或四个时不逐个点名。
|
|
120
102
|
- 三级标题可以保留本章对象的完整名称(如「数据项坐标」),不拆成「行与列」「空格与标记」。
|
|
121
103
|
- 固定收尾节名固定复用,见本文件。
|
|
122
|
-
- 过程节不承载回顾职责:`### 本章实现边界` 一类「本章做到哪、哪章再讲」的标题一律不设,边界话并入 `## 本章回顾`;开篇的目标节只陈述本章可交付产物(如
|
|
104
|
+
- 过程节不承载回顾职责:`### 本章实现边界` 一类「本章做到哪、哪章再讲」的标题一律不设,边界话并入 `## 本章回顾`;开篇的目标节只陈述本章可交付产物(如 `确认本章产物`),标题与回顾分工见本文件「六段块序列」。
|
|
123
105
|
- 英文文件名承担稳定路径职责,多词形态见本文件;中文 title 承担理解职责,两者不必逐字翻译。
|
|
124
106
|
- 例外:part 落地页(`_quarto.yml` 中 part 引用的 index.qmd)title 即 part 名(如「示例项目」),不受 2-6 汉字硬限;副题信息只放落地页引言,章节与落地页 qmd 一律不写 `description`(front matter 出处见 basics.md),后续其他 part 同样处理。
|
|
125
107
|
|
|
@@ -133,7 +115,7 @@
|
|
|
133
115
|
|
|
134
116
|
### 纵向承诺链
|
|
135
117
|
|
|
136
|
-
写章第 2 步(定结构)逐条对照,不新开第 10 步。检查顺序固定为下面
|
|
118
|
+
写章第 2 步(定结构)逐条对照,不新开第 10 步。检查顺序固定为下面 9 条;每条的要求都是「下一层必须兑现上一层对象」:
|
|
137
119
|
|
|
138
120
|
1. part 落地页那一句引言的范围等于该部分全部章的 YAML `title` 集合。根首页卡片不把示例项目收成其中几章。
|
|
139
121
|
2. 章引言里「这一章做什么」那一句的宾语等于 YAML `title` 的对象。引言点名的源文件必须是本章摘录实际来自的文件。
|
|
@@ -143,6 +125,7 @@
|
|
|
143
125
|
6. `##` 下没有 `###` 是允许的,条件是这一节只有一个函数或一个结果。禁止为了「有下级」补出一个孤立 `###`。
|
|
144
126
|
7. 「本章回顾」里「下一章」后面的名字等于 `_quarto.yml` 中下一章的 YAML `title`,不写链接。回顾里的能力用本章 title 的对象。最后一章不写「下一章」。任务节不解释下一章才建立的术语。
|
|
145
127
|
8. 有 `class` 的章的任务节顺序,见本文件「有 class 的章的任务节」。任务章的 `###` 顺序与 `src/run-build.sh` 的步骤顺序一致。目录章里「有几个目录」的句子与该节目录树的项数一致,口径见本文件。
|
|
128
|
+
9. 章题一致:YAML `title` 的对象与本章的主对象相同。把引言第一句、各任务级 `##` 的中心名词、`## 本章回顾` 的能力句并排看;三处指向的对象与 title 不同,说明正文写成了另一章,先改 title 或重排任务节,不写导语把 title 拉回来。标题写 `对局规则`、正文多数节却在讲程序回应的,按章题脱节处理;`输入之后的回应` 这类时间从句标题是同一处的信号。项目技能有章节表时,同轮同步表的 `title` 与 `##` 顺序;表与正文不一致按章题脱节处理。
|
|
146
129
|
|
|
147
130
|
### 命名检查
|
|
148
131
|
|
|
@@ -191,7 +174,7 @@
|
|
|
191
174
|
- `verifying-content.py` 第 3 查按上表逐文件、逐节、逐代码块、逐正文段落核对,超限即整体失败;限额调整只改该脚本的常量与本表,两处必须同步。
|
|
192
175
|
- 根目录 `index.qmd` 与 `content/<game>/index.qmd`(YAML 含 `body-classes: index-page`)是着陆页:短引言与卡片网格不是章节引言,只核对整章总量与代码块限额;着陆页不套用标题与骨架限制,见本文件「六段块序列」。
|
|
193
176
|
- 任务级 `##` 数量、固定收尾不计入、`###` 的使用条件与首章「常见错误」豁免的结构判断,见本文件「六段块序列」;数量口径以上表为准。
|
|
194
|
-
- 结构性规则(引言构成、`###`
|
|
177
|
+
- 结构性规则(引言构成、`###` 数量)同时受本文件「六段块序列」约束;本表提供量化兜底。
|
|
195
178
|
- 接近上限不是目标:预算是上限,内容仍按凑字数禁令与密度规则精简(见 `steps/04-paragraphs.md`「凑字数禁令」)。
|
|
196
179
|
|
|
197
180
|
### 页面宽度与垂直节奏
|
|
@@ -75,7 +75,7 @@ int main() {
|
|
|
75
75
|
|
|
76
76
|
### 类与多函数摘录的垂直空白
|
|
77
77
|
|
|
78
|
-
摘录 `class` 或多函数片段时**保留**源码中函数之间的空行,禁止为省行数坍缩成函数注释贴着下一声明;省略部分成员时,被保留的相邻函数之间仍空 1 行;同一 access 段内最后一组数据成员与函数之间空 1
|
|
78
|
+
摘录 `class` 或多函数片段时**保留**源码中函数之间的空行,禁止为省行数坍缩成函数注释贴着下一声明;省略部分成员时,被保留的相邻函数之间仍空 1 行;同一 access 段内最后一组数据成员与函数之间空 1 行,数据成员组内不空行。与「逐字摘录」冲突时以源码空白为准:教学缩略可删成员,不可删「函数间距」惯例。
|
|
79
79
|
|
|
80
80
|
### 三级标题最小模块
|
|
81
81
|
|
|
@@ -96,7 +96,7 @@ int main() {
|
|
|
96
96
|
代码块引出 `{mermaid}` 图或 `{python}` 坐标图时按固定序列组织:代码块 → 桥接句 → 图(含 `fig-cap`)→ 图后新结论。固定序列的完整写法见 `writing-quarto` 技能 `quarto/authoring.md`「代码与图的桥接」,两条硬边界:
|
|
97
97
|
|
|
98
98
|
- 代码块与图之间必须有桥接句,说明图要核对代码已讲清的哪条关系;中间只有空行视为堆叠(`verifying-content.py` 的 DOC-E11 只要求相邻围栏留空行,空行不等于桥接正文)。
|
|
99
|
-
- 图后先给「从图带走的结论」或图外新信息,再进入下一块;小节以图收尾时,结论可并入桥接段,不在图后孤悬一句。图注已写明的信息不复述。坐标图计入盒子密度,口径见 `quarto/coords.md`
|
|
99
|
+
- 图后先给「从图带走的结论」或图外新信息,再进入下一块;小节以图收尾时,结论可并入桥接段,不在图后孤悬一句。图注已写明的信息不复述。坐标图计入盒子密度,口径见 `quarto/coords.md` 与本文件。
|
|
100
100
|
- 一图一事、同主题相邻、图不承载正文未写的新信息:一张图只核对一条已讲清的关系;代码与图主题不同时收束本对象再拆 `###`,禁止「代码 A → 短句拐弯 → 图讲 B → 再贴代码 C」的同节混排(三条边界的写法见 `quarto/authoring.md`「代码与图的桥接」)。
|
|
101
101
|
- 图前段只讲本页可见的对象,且单一主题:描述版式的句子其对象必须同页可见,引用前章画面时复述读者需要的关键事实(如行列取值 0 到 2),不指称前章画面的版式(「画面上方是列号」式会让读者翻回前章);调用方行为等第二主题移出图前段(示例章定义坐标范围节两段并一段的改稿对照)。
|
|
102
102
|
|
|
@@ -116,7 +116,7 @@ int main() {
|
|
|
116
116
|
|
|
117
117
|
### 盒子密度
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
盒子指代码块、表格、提示框、引用块、图表容器。密度阈值与权衡的唯一出处见本文件,本条不重写数字。
|
|
120
120
|
|
|
121
121
|
### 标题导语
|
|
122
122
|
|
|
@@ -137,20 +137,20 @@ int main() {
|
|
|
137
137
|
|
|
138
138
|
| 边界 | 规则摘要 | 权威 |
|
|
139
139
|
| --- | --- | --- |
|
|
140
|
-
| 标题 → 正文 | 标题下至少一句引导;禁止 `##` 后立刻 `###` 叠标题 | `steps/02-structure.md`
|
|
140
|
+
| 标题 → 正文 | 标题下至少一句引导;禁止 `##` 后立刻 `###` 叠标题 | `steps/02-structure.md` 与本文件 |
|
|
141
141
|
| 段 → 列表 | lead-in 含主谓、点名列表将展开的维度;完整句可用句号,明确「如下」时用冒号;列表项平行且字数带 | `steps/07-layout.md`「列表选择」 |
|
|
142
|
-
| 段 → 代码 | 一句完整导语(对象标识符 + 谁调用/做什么)→ 围栏;禁块前半句 + 块后补半句;函数或枚举围栏前固定两句:第一句接住上一句的对象,第二句使用紧随围栏里 `///` 第一句的动词和对象,位置写成「定义在 `文件` 里」,不用「声明在」
|
|
143
|
-
| 代码 → 图 | 代码 → 桥接句 → 图 → 图后结论;空行 ≠ 桥接
|
|
144
|
-
| 段 → 表 | 关系句引出 → 表 → 表后结论句
|
|
145
|
-
| 任意块 → Callout | Callout 只承载可跳过提示,不复述块内已写信息,不承载唯一成功判据
|
|
142
|
+
| 段 → 代码 | 一句完整导语(对象标识符 + 谁调用/做什么)→ 围栏;禁块前半句 + 块后补半句;函数或枚举围栏前固定两句:第一句接住上一句的对象,第二句使用紧随围栏里 `///` 第一句的动词和对象,位置写成「定义在 `文件` 里」,不用「声明在」 |本文件「内容块前后的闭环」 |
|
|
143
|
+
| 代码 → 图 | 代码 → 桥接句 → 图 → 图后结论;空行 ≠ 桥接 |本文件「代码与图的桥接」 |
|
|
144
|
+
| 段 → 表 | 关系句引出 → 表 → 表后结论句 |本文件「短表与宽表」 |
|
|
145
|
+
| 任意块 → Callout | Callout 只承载可跳过提示,不复述块内已写信息,不承载唯一成功判据 |本文件「元素边界」 |
|
|
146
146
|
| 节尾 → 下节 | 下节首句接住上节对象;禁正文「下一节/上一节」;章末「下一章」仅在回顾 | `steps/04-paragraphs.md`「段间:过渡句只在话题切换处」、`steps/02-structure.md` |
|
|
147
147
|
| 章际 → 本章 | 第 N 章引言、任务节与自测题只用 1..N-1 章已建立的名字;新术语首次出现处就近落术语卡或行内括号 | `steps/02-structure.md`「六段块序列」 |
|
|
148
148
|
|
|
149
149
|
### 豁免与边界
|
|
150
150
|
|
|
151
|
-
-
|
|
151
|
+
- 块级前后闭环(三级标题最小模块)见本文件;本文件管段落与小节之间的衔接,不重复块内规则。
|
|
152
152
|
- 多命令代码块后的逐条讲解,见 `steps/04-paragraphs.md`「段落规则」。
|
|
153
|
-
-
|
|
153
|
+
- 小节承接正文权重与盒子密度见本文件。
|
|
154
154
|
- 散文冒号豁免清单与表格单元格、协议字面量的豁免见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」;代码注释的冒号句式不属本技能。
|
|
155
155
|
|
|
156
156
|
### 机械检查
|
|
@@ -188,17 +188,17 @@ int main() {
|
|
|
188
188
|
|
|
189
189
|
### 盒子与正文的比例
|
|
190
190
|
|
|
191
|
-
盒子按最小模块计:一个模块一块代码、表或图;同一三级标题两个模块时可以有两块,中间必须有衔接句。Callout 不算这块主内容。盒子指代码块、表格、提示框、引用块、图表容器,含 `{mermaid}` 图与 `{python}`
|
|
191
|
+
盒子按最小模块计:一个模块一块代码、表或图;同一三级标题两个模块时可以有两块,中间必须有衔接句。Callout 不算这块主内容。盒子指代码块、表格、提示框、引用块、图表容器,含 `{mermaid}` 图与 `{python}` 坐标图单元。它们底色与边框一致、左右内缩相同,连续出现时读者分不清内容边界,只能靠滚动位置感知,页面从「读一段做一步」退化成「抄一屏」。因此一条主线动作配一段自己的承接正文,相邻盒子最多一处,其余被正文隔开。每两个盒子之间至少有一段交代判断依据的话;代码块与图之间的固定桥接序列见本文件。
|
|
192
192
|
|
|
193
193
|
修法是补承接正文,而不是删盒子。盒子承担可复制性,正文承担判断依据,两者不可互换,代码块删到只剩命令不会自动产生判断依据。
|
|
194
194
|
|
|
195
|
-
代码块前后的文字重量也应服务同一个任务闭环。代码块前至少说明读者要完成什么、在哪里执行以及执行后会发生什么;代码块后只说明下一步、可观察结果或一个必要的新人解释。若提示符、参数含义等补充信息不影响主线执行,可在主线结果确认后放进一个短 Callout;Callout
|
|
195
|
+
代码块前后的文字重量也应服务同一个任务闭环。代码块前至少说明读者要完成什么、在哪里执行以及执行后会发生什么;代码块后只说明下一步、可观察结果或一个必要的新人解释。若提示符、参数含义等补充信息不影响主线执行,可在主线结果确认后放进一个短 Callout;Callout 只解释新信息,承载边界见本文件「元素边界」。
|
|
196
196
|
|
|
197
197
|
密度比例不设硬阈值。盒子多少、正文长短同时取决于视口宽度、字体度量和 Quarto 版本的 DOM 结构,任何一项变化都会让历史数值失效,基于 DOM 或截图的硬编码门禁只会在与密度无关的改动上误报,仍然禁止。`verifying-content.py` 保留一条软门禁:同一小节内两围栏(含 `{mermaid}` 与 `{python}` 单元)之间只有空行、没有桥接正文时报 WARN,提示人工补承接句;WARN 不判失败,人审与对照案例仍是叙事的主检查。
|
|
198
198
|
|
|
199
199
|
### 元素边界
|
|
200
200
|
|
|
201
|
-
细节升级为标题的门槛见 `steps/02-structure.md`。常见错误使用三级结构,是因为目录负责导航、具体症状负责识别、有序步骤负责操作。具体写法见 `steps/02-structure.md`
|
|
201
|
+
细节升级为标题的门槛见 `steps/02-structure.md`。常见错误使用三级结构,是因为目录负责导航、具体症状负责识别、有序步骤负责操作。具体写法见 `steps/02-structure.md` 与本文件。
|
|
202
202
|
|
|
203
203
|
这种分层与页面整体的六段块序列并不冲突:它只收束任务段内部的阅读路径,不重新定义引言、任务序列、排查、自测和回顾的页面职责。
|
|
204
204
|
|
|
@@ -236,4 +236,4 @@ int main() {
|
|
|
236
236
|
|
|
237
237
|
## 正反例
|
|
238
238
|
|
|
239
|
-
通用情况判得准就不打开。判不准时打开同号案例:`examples/03-block-after.md`、`examples/03-excerpt-lead.md`、`examples/03-
|
|
239
|
+
通用情况判得准就不打开。判不准时打开同号案例:`examples/03-block-after.md`、`examples/03-excerpt-lead.md`、`examples/03-qmd-elements.md`。
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
| 信号 | 动作 |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| 段内出现第二个互不依赖的对象或主题 |
|
|
26
|
+
| 段内出现第二个互不依赖的对象或主题 | 新起段;新段首句接住上段对象(衔接见本文件「段间:过渡句只在话题切换处」) |
|
|
27
27
|
| 段内出现「话题标签:解释」词条式冒号,或两个以上互不依赖的中心并列推进 | 按「拆核四步(多核混段的拆段方法)」判关系:递进同段衔接推进,并列拆段;词条式冒号改完整主谓句(见「散文伪标签冒号禁令」) |
|
|
28
28
|
| 一段同时承担「承接上一章」+「本章交付物清单」+「源文件位置」+「摘录声明」 | 章引言不拆段,形态硬限与摘录声明删除见 `steps/02-structure.md`;其他段落按职责拆段,交付物多项且需扫读 → 列表(目录式堆砌对照见 `examples/02-structure-shape.md`) |
|
|
29
29
|
| 超过约 4 行舒适带、或逼近 7 行 / 篇幅 token 上限 | 先找逻辑边界拆,禁止为凑行数在句中腰斩 |
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
| 一段出现第 4 个互不依赖的主概念 | 拆段或改列表见 `steps/05-sentences.md`「概念负荷」 |
|
|
34
34
|
| 一句多中心、分号串两事、>40 字多动作 | 先拆句,再判是否还需拆段;同档并句不按超长句拆,异档不并进一句,判定见 `steps/05-sentences.md`「同档并句」 |
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
假拆禁令:不为「段数好看」把同一中心拆成两段同义反复(相邻同义合并见本文件「段间:过渡句只在话题切换处」);不为对齐列表而去拆段或填第二中心;章引言多中心的形态契约见 `steps/02-structure.md`「六段块序列」。
|
|
37
37
|
|
|
38
38
|
### 罗列短句成段禁令
|
|
39
39
|
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
- 统计性凑句:「文件只有 X 行」「真正执行的只有 X 行」「一共只有 X 个」这类数字统计。数字本身影响读者判断时(规模超出预期、需要据此决定读法)才允许出现,纯描述规模一律删除。
|
|
50
50
|
- 导航复述段:含「先看…再看…」的句子按 `steps/05-sentences.md`「句子规则」整句删除,不单指「接下来先看」;与 `##` 标题结构重复的段落同样删除,读者从标题自身即可获得导航。
|
|
51
|
-
- 同义反复:同一事实在承接句、代码块 filename
|
|
51
|
+
- 同义反复:同一事实在承接句、代码块 filename、树内注释、列表项中重复出现时只保留一处。相邻段落同义合并见本文件「段间:过渡句只在话题切换处」。代码围栏的块后复述由 `steps/03-blocks.md`「内容块前后的闭环」管辖(对照见 `examples/03-block-after.md`「块后复述注释」)。同一禁令再延伸到公开接口旁白:禁止「接口清单压缩段」——把私有成员、公开成员名单、`const`、`[[nodiscard]]` 等压进同一段;定稿为场景 → 代码 → 块后只补注释未写的工程信息(对照见 `examples/04-paragraph-opening.md`「接口清单压缩段」)。
|
|
52
52
|
- 判断标准:一句删掉后主线闭环不受影响、且答不出「删掉它读者会做错什么」,默认删除。
|
|
53
53
|
|
|
54
54
|
### 拆分判据
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
|
|
113
113
|
### 章级:总—分—总
|
|
114
114
|
|
|
115
|
-
- **总起**:无标题引言的构成见 `steps/02-structure.md`「六段块序列」;引言的宾语等于本章 YAML `title` 的对象(承诺链第 2 条,见 `steps/02-structure.md
|
|
115
|
+
- **总起**:无标题引言的构成见 `steps/02-structure.md`「六段块序列」;引言的宾语等于本章 YAML `title` 的对象(承诺链第 2 条,见 `steps/02-structure.md`「纵向承诺链」);主语取本章对象或执行动作的一方,见 `steps/05-sentences.md`「主语选执行者或话题对象」。
|
|
116
116
|
- **分述**:正文 `##` 序列沿一条主线递进展开;每个 `##` 是一个可验证结果的判定见 `steps/02-structure.md`「六段块序列」,每个 `###` 的中心名词与导语宾语按 `steps/02-structure.md`「纵向承诺链」第 4、5 条核对。
|
|
117
117
|
- **收束**:本章回顾照应引言提出的任务;首尾照应要求回顾能对上引言的承诺,不引入新概念;「下一章」后的名字等于 `_quarto.yml` 中下一章的 YAML `title`(承诺链第 7 条,见 `steps/02-structure.md`)。回顾的句数、句式与承接正文的要求以 `steps/02-structure.md` 为准。
|
|
118
118
|
- 已有源文件的章要补齐自测与回顾。没有源文件的章的处理见 `steps/02-structure.md`。
|
|
@@ -128,13 +128,13 @@
|
|
|
128
128
|
- 需要过渡的位置:段落话题或对象发生切换时(上一段讲 A 命令,下一段讲 B 命令;前一小节配置,本节运行)。同一段内句子推进、或下一段直接继续当前对象时,不加过渡。
|
|
129
129
|
- 段间衔接落在下一段第一句的主语;主语复用上段的宾语或话题,话题切换时仍先接住上文再引出本段。
|
|
130
130
|
- 形式:一句,放在新段段首,先接住上文(点明与上段的关系或结果),再引出本段中心。范例(示例章构建规则节首句):「可执行目标之外,同一份构建规则还注册了本章唯一的自动化检查」——前半句接住上文的可执行目标,后半句引出新对象。
|
|
131
|
-
-
|
|
131
|
+
- 边界:过渡句服务主线判断,不复述标题结构。含「先看…再看…」的导航复述句整句删除,判法见本文件「凑字数禁令」;`##`/`###` 开头的承接句数见 `steps/02-structure.md`「分层上限」。
|
|
132
132
|
- 相邻小节的首句同时是上一小节的承接位:写完上一小节结尾后检查下一小节首句是否接住读者,不在小节尾部再补预告句(与凑字数禁令同源)。
|
|
133
133
|
- **读者正文禁写「下一节/上一节」**:`content/**` 正文不得用「下一节…」「上一节…」预告或回指小节,衔接靠新节首句接住上文;章末的「下一章」保留。本文件讨论衔接位置时引用的这两个词是规则描述用语,不是允许正文照写的句式(`verifying-content.py` 对读者 qmd 与 agent 文档判失败,紧贴引号或反引号的术语引用豁免)。
|
|
134
134
|
- 相邻段落同义合并:相邻两段各自换一种说法讲同一事实时合并为一段,由后段的机制或结论接住前段的对象;合并后其余段落、列表和 Callout 不得再以第三种说法复述该事实。改写对照见 `examples/04-paragraph-cases.md`。
|
|
135
135
|
- 相邻两段不得各成独立说明书:第一段讲工具、第二段讲目录而彼此无衔接时,第二段段首要接住第一段的对象(工具基线 → 这些工具在编号目录上如何使用);只删不接,两段仍然是两个条目。改写对照见 `examples/02-structure-shape.md`。
|
|
136
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
|
|
137
|
+
- 同一禁令延伸到代码围栏:块后不复述围栏内注释、单段并列对象按对象拆段的写法,见 `steps/03-blocks.md`「内容块前后的闭环」与本文件「段落规则」(对照见 `examples/03-block-after.md`「块后复述注释」「单段混并列对象」)。
|
|
138
138
|
- **多代码块小节先判一次只摘一块**:同源围栏是否合并、每个围栏前的导语怎么写、每段最多「一句 + 一个配套块」,见 `steps/03-blocks.md`「内容块前后的闭环」;函数或枚举围栏前固定两句的动词与 `///` 一致判法见 `steps/05-sentences.md`;块后收束与两个最小模块的衔接见 `steps/03-blocks.md`「三级标题最小模块」,本文件不另写一份。改写对照见 `examples/03-excerpt-lead.md`「多代码块一句导语」「递进片段合并」。
|
|
139
139
|
- 表格与对照表的承接句、表后结论句见 `steps/03-blocks.md`「短表与宽表」;禁用「X 与 Y 是两个容易混淆的词:」式元标签开场。
|
|
140
140
|
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
润色按三个层级推进;高层问题不先定,低层改写会白做:
|
|
144
144
|
|
|
145
145
|
1. **篇章级**:全篇只保留一条成功路径,章节与小节顺序服务这条路径,无跳脱话题;开头交代读者做什么、完成后得到什么。
|
|
146
|
-
2.
|
|
146
|
+
2. **段落级**:段落与段间条文见本文件「段落规则」与「段间:过渡句只在话题切换处」。
|
|
147
147
|
3. **句子级**:逐句过「七个质量维度」与「句子级病类清单」。
|
|
148
148
|
|
|
149
149
|
### 句序与段落形态
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
- **对象先行**:句子按「对象 → 名称 → 约束 → 出处」排;禁「代码把它写成」式把源码当施事的元叙述开场,也禁「因此记作」「写成 `class`」等以源码为主语的句子。对照见 `examples/01-language-scope.md`「元叙述开场与对象先行」。
|
|
154
154
|
- **正常语序**:推荐「主语/对象 + 谓语 + 宾语 +(必要状语)」,本书工程句优先「对象 → 名称 → 约束 → 出处」。改写信号:句首「关于…」抽空主语;「代码把它写成」式元叙述倒装;长定语链把施事压到句末;英文式「被…所…」堆叠;状语(时间/处所)乱插导致主谓隔断。与「对象先行」同向,不另开 kb。
|
|
155
155
|
- **连续纯散文上限**:同一小节连续 ≥3 段纯散文(中间无列表、代码块、图或表)即改「一句中心 + 列表/代码/图」;判定信号:删任一段其余仍成立、段间无承接。
|
|
156
|
-
-
|
|
156
|
+
- **禁小节导航**:正文「下一节/上一节」的禁令与豁免见本文件「段间:过渡句只在话题切换处」。
|
|
157
157
|
- **换算句版式**:换算的写法见 `steps/07-layout.md`「列表选择」。
|
|
158
158
|
|
|
159
159
|
六个成分和场景表不在本文件复述,见 `steps/05-sentences.md`。
|
|
@@ -168,20 +168,20 @@
|
|
|
168
168
|
|
|
169
169
|
一段一个对象、段间衔接、概念负荷的判定依据见本文件「段落规则」;对每个段落依次检查:
|
|
170
170
|
|
|
171
|
-
-
|
|
172
|
-
-
|
|
171
|
+
- 删掉后影响当前任务吗?删除判据见本文件「凑字数禁令」。
|
|
172
|
+
- 段落是否同时承担两个以上动作?拆分判据见本文件「拆分判据」。
|
|
173
173
|
- 同一小节的连续同源代码围栏是否拆并,判定见 `steps/03-blocks.md`(对照见 `examples/03-excerpt-lead.md`「递进片段合并」)。
|
|
174
|
-
-
|
|
175
|
-
-
|
|
174
|
+
- 段落是否推进了两个互不依赖的并列对象?是就按「拆核四步(多核混段的拆段方法)」处理,判定见本文件「拆核四步(多核混段的拆段方法)」(对照见 `examples/03-block-after.md`「单段混并列对象」)。
|
|
175
|
+
- 段内是否有换说法复述同一机制的句子?是就删辅句或合并,判定见本文件「段内同义堆叠禁令」。
|
|
176
176
|
- 分句骨架是否成立?设计说明的角色链不合格情形见 `steps/05-sentences.md`「句内骨架」,都在定句子判为不合格。
|
|
177
|
-
-
|
|
177
|
+
- 散文里是否有「话题标签:解释」词条式冒号?是就改完整主谓句或真列表项,判定见本文件「散文伪标签冒号禁令」。
|
|
178
178
|
- 收束段是否把列表或围栏注释再讲一遍?次序与块后新信息见 `steps/03-blocks.md`(对照见 `examples/03-block-after.md`「块后复述注释」)。
|
|
179
|
-
-
|
|
179
|
+
- 树后或块后补写的新信息主语是否换成另一个对象?删除或下沉见本文件(对照见 `examples/02-structure-shape.md`「树后换对象收束句」)。
|
|
180
180
|
- 读者能否指出完成后要观察什么?任务可验证结果的判定见 `steps/02-structure.md`「六段块序列」。
|
|
181
|
-
-
|
|
181
|
+
- 正文、代码块和回顾是否重复同一句话?同义反复判定见本文件「凑字数禁令」。
|
|
182
182
|
- 新术语是否由当前动作自然引出?标题与论据的术语建立判定见 `steps/03-blocks.md`「小节标题与正文对齐」。
|
|
183
183
|
|
|
184
|
-
|
|
184
|
+
段落衔接、罗列短句成段与接口清单压缩段的判定见本文件;句间关系的写法见 `steps/05-sentences.md`「过简断裂禁令」,对照见 `examples/05-sentence-brevity.md`「罗列短句成段」、`examples/04-paragraph-opening.md`「接口清单压缩段」。
|
|
185
185
|
|
|
186
186
|
## 情况
|
|
187
187
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
- **节首句**不得用代词把后文才展开的内容提前捆成一包:节首以「这些/这个/这一步」作话题、同句又没有列出对象名,即失败。「这一章」「下一章」「这一节」指书的单位,是固定说法,不在此禁令内。
|
|
14
14
|
- **已经逐个写出名字之后的回指**仍然合法:如前文小节已写出 `Player`、`Move`、`PlaceResult`、`Result`,后文「这些类型由 `Game` 的四个数据成员使用」保留。
|
|
15
15
|
|
|
16
|
-
条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py`
|
|
16
|
+
条文与自动检查见 `writing-quarto` 技能 `scripts/verifying-content.py` 的整篇题干/节首检查;步骤挂点:定结构改自测题,定句子改节首与句内代词;对照见本文件「代词不能代替未写出的对象」。换算句里的「下标」不算已经写出的对象;点名规则见 `steps/07-layout.md`「列表选择」换算条。
|
|
17
17
|
|
|
18
18
|
### 一次对话
|
|
19
19
|
|
|
@@ -79,6 +79,16 @@
|
|
|
79
79
|
|
|
80
80
|
依据:黄伯荣、廖序东《现代汉语》把主谓句分成动词谓语句、形容词谓语句、名词谓语句、主谓谓语句,常用句式另有把字句、被字句、连谓句、兼语句、双宾句、存现句;朱德熙《语法讲义》把主语看成已知话题;陈平把零形回指定义为上文已出现的事物可以不写出那个词。
|
|
81
81
|
|
|
82
|
+
### 主语选执行者或话题对象
|
|
83
|
+
|
|
84
|
+
章首引言、节导语与段首句的主语,取本章或本节要交代的对象,或执行动作的一方:程序、井字棋、对局、棋盘、玩家、`Board`。主语不取这些对象产生的下游产物——回应、输入、输出、画面、结果、数据。
|
|
85
|
+
|
|
86
|
+
- 主语落成产物时,动作的发出者被挤进定语,读者读到句末才知道谁在做事。例如「终端画面里的回应确定一局井字棋要做什么」,主语是「回应」,「确定」的却是程序。
|
|
87
|
+
- 改法:执行者或本章对象先作主语,产物退回宾语。上例改为「程序每一轮都显示当前棋盘,并提示轮到谁落子」。
|
|
88
|
+
- 判定信号:圈出主语,问它会不会自己做这个动作。不会,就是主次颠倒;把主语换成执行者或本章对象。
|
|
89
|
+
- 产物是本节主题时可以作主语,例如快照字段、终端输出的格式;此时不把执行者降格为「由 X 完成」式被动(见 `steps/06-wording.md`「目标语气」)。
|
|
90
|
+
- 依据:Google 开发者文档风格指南与 Microsoft 风格指南都要求尽量用主动语态,让执行动作的一方作主语;朱德熙《语法讲义》把主语看作已知话题,章首的话题是本章对象。改写对照见 `examples/05-sentence-reference.md`「主语不落到下游产物」。
|
|
91
|
+
|
|
82
92
|
### 过简断裂禁令
|
|
83
93
|
|
|
84
94
|
逗号、句号把一句话切开后,下一分句必须满足 **given-new** 之一,否则为过简断裂:
|
|
@@ -145,7 +155,7 @@
|
|
|
145
155
|
|
|
146
156
|
函数围栏前的概述句,其动词与对象必须与围栏里的函数名和参数一致:围栏里是 `ApplyMove`,概述句就用「应用」和「一步操作」,不改写成同义词(如「落子」)。位置写成「定义在 `文件` 里」,不用「声明在」。源码注释怎么写由项目 C++ 流程负责,本技能只对齐正文与围栏。
|
|
147
157
|
|
|
148
|
-
|
|
158
|
+
散文一句不换对象;判定全文见本文件。
|
|
149
159
|
反例:「已落 X:先手在这一格落下 X。」——右侧换成「先手」和落下动作。
|
|
150
160
|
正例:「先手:使用 X 元素。」
|
|
151
161
|
|
|
@@ -171,7 +181,7 @@
|
|
|
171
181
|
|
|
172
182
|
反例:「已落 X:先手在这一格落下 X。」——冒号右侧换成「先手」和落下动作,不再说左侧的格子状态。改写见术语表「数据项类型」的三句;正例三句不在这里贴,见同节。
|
|
173
183
|
|
|
174
|
-
|
|
184
|
+
一句里的对象仍只有一个;六个成分的槽位见本文件。
|
|
175
185
|
|
|
176
186
|
### 句子级病类清单
|
|
177
187
|
|
|
@@ -184,22 +194,22 @@
|
|
|
184
194
|
5. **指代不明**:先行词不唯一或不在最近,换专名。
|
|
185
195
|
6. **紧缩并称释义**:把用途压成「一读一写」式并称、或省主语从句(「报告是否下满」),名字与动作的对应要读者自补,改写为显式映射(判定信号见「逐条释义代替动机」)。
|
|
186
196
|
7. **欧化措辞**:「进行/作出+名词」改回动词;滥「的」滥「被」压缩;名词化主语段内一致时(如「读取直接抛出」的操作名)可留,否则补施事。
|
|
187
|
-
8.
|
|
197
|
+
8. **破折号夹心与分号堆叠**:破折号夹解释的句子级判法见本文件;冒号后用分号续第二个解释即拆(对照见「破折号夹心句」「冒号后堆叠分号解释」)。改冒号时只允许两种合法场合(完整句引出列表/围栏/图;列表项引导词后),散文词条式冒号的判定见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」。
|
|
188
198
|
|
|
189
199
|
### 定句子:句子要短
|
|
190
200
|
|
|
191
|
-
设计说明的分句角色链(事实 → 约束 →
|
|
201
|
+
设计说明的分句角色链(事实 → 约束 → 因此选择)见本文件「句内骨架」;句序与段落形态判定见 `steps/04-paragraphs.md`「句序与段落形态」。
|
|
192
202
|
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
199
|
-
-
|
|
200
|
-
- 换算按 `steps/07-layout.md`「列表选择」换算条写成同一段短句;对照见 `examples/
|
|
203
|
+
- 先按本文件「六个成分」给每句分类,再改字;改完回到定段落,核对中心句和一段一对象。
|
|
204
|
+
- 单句长度与拆句的判定见本文件「句子规则」。
|
|
205
|
+
- 多中心句按中心拆成两句,判定见本文件「句内骨架」。
|
|
206
|
+
- 拉链句判定口诀与三条改写见本文件「拉链句」;步骤链、同物两处不按拉链改写,对照见 `examples/05-sentence-frame.md`「拉链句」。
|
|
207
|
+
- 结构助词「的」的去留判定与口诀见本文件「结构助词「的」」;两个名词粘成一个叫法仍带「的」,或三个以上名词、动词定语省了「的」,就按这条改。
|
|
208
|
+
- 相邻句子的因果、时序关系要写在句面上,判定见本文件「句内骨架」。
|
|
209
|
+
- 写完数量词和「这些」,对着下一块点名的判定见本文件「一次对话」,对照见 `examples/05-sentence-reference.md`「定句子:数量词对着下一块点名」。
|
|
210
|
+
- 换算按 `steps/07-layout.md`「列表选择」换算条写成同一段短句;对照见 `examples/07-layout-list.md`「公式与换算讲解段」。
|
|
201
211
|
- 元叙述开场与对象先行的判定见 `steps/04-paragraphs.md`「句序与段落形态」,对照见 `examples/01-language-scope.md`「元叙述开场与对象先行」。
|
|
202
|
-
- 假对比(「这不仅是 X,更是 Y
|
|
212
|
+
- 假对比(「这不仅是 X,更是 Y」)、起跑式铺垫(「在开始之前」「首先我们来看」)与句尾意义拔高的判定和删法见本文件「情况:假对比、起跑式铺垫与意义拔高」,对照见 `examples/05-sentence-frame.md`「假对比、起跑式铺垫与意义拔高」。
|
|
203
213
|
|
|
204
214
|
## 情况
|
|
205
215
|
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
|
|
65
65
|
- 动词选用与主动语态见「目标语气」;「由 X 完成」在这一步改成主动句,改完露出第二个核就退回定段落。
|
|
66
66
|
- 「同一概念只使用一个称呼」的判定见「七个质量维度」;英文标识保持大小写。
|
|
67
|
+
- 「游戏」指作品或玩法整体,「对局」指具体一场:定义「井字棋是…游戏」用「游戏」,规则、落子与结果语境用「对局」;同一页不把两者当同义词换用(对照见 `examples/06-wording-cases.md`「游戏与对局」)。
|
|
67
68
|
- 无信息修饰的删除判定见「七个质量维度」;禁用词以 `scripts/verifying-content.py` 词表为准。
|
|
68
69
|
- 连续出现三个「的」时的改写判定见「七个质量维度」第 5 条。
|
|
69
70
|
- 正文提及枚举类型与成员函数时写源码完整标识符(`Result`、`Game::ApplyMove`),不设「概念简称」层;架构层名首次出现用一句可观察行为定义;讲读写路径第一句写屏幕上或调用处发生什么。下一句点名类型与函数。再下一句写边界(对照见 `examples/01-language-scope.md`「零基础可懂的读写路径与层名定义」)。
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
中文标点、中西文边界空格、引号、数字与英文术语的细则见 `quarto/prose.md`;本步不重复附表。判定顺序:先改标点与空格,再改列表与加粗,最后回读。
|
|
11
11
|
|
|
12
|
+
- 中文用全角标点;并列英文用顿号;中文与英文/数字之间留半角空格。
|
|
13
|
+
- 句号密度与顿号、逗号、分号、冒号的分工见 `quarto/prose.md`「标点分配」;同一段连续四个以上短句各用句号时,先合并再回读。
|
|
14
|
+
- 破折号夹解释的句子级判法见 `steps/05-sentences.md`(冒号合法场合见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」)。
|
|
15
|
+
- `true` / `false` / `nullptr` 等 C++ 关键字用行内代码原样书写,不写中文译名。
|
|
16
|
+
|
|
12
17
|
### 列表选择
|
|
13
18
|
|
|
14
19
|
目录列表后能用段落补一个遗漏的目录吗:不能,并列成员一次列全。列表选择规则:
|
|
@@ -18,12 +23,12 @@
|
|
|
18
23
|
- 列表项结构平行:起首用同类的词(都是名词短语,或都是动词短语),长度相近。
|
|
19
24
|
- **列表字数带**:同一列表各项保持视觉齐长,避免扫读节奏断裂。计量:引导词汉字数、冒号后汉字数(行内代码按标识符计)。失衡判定:冒号后最长 ≥ 最短 × 2,或引导词相差 ≥ 4。改写顺序:删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 → 停止。豁免:出错原因/正确做法;有序步骤;着陆页卡片。列表齐长服从句段主规则,假拆禁令见 `steps/04-paragraphs.md`。
|
|
20
25
|
- 列表项起首用加粗引导词标记中心语,读者扫读时先看到分类再决定是否细读;关键词取同类词(如「显示状态面板」「读入坐标」),并按对象的发生顺序排列,读者扫读即得顺序与内容。
|
|
21
|
-
- 行为或规则枚举项用「**动词短语引导词**:完整句」格式:引导词命名本项的中心动作(如「**显示状态面板**」「**判定流程结果**」),冒号后保留完整中文句,写全动作、对象与结果。引导词是扫读索引,不替代句子信息,不为省字把冒号后压成电报短句(对照见 `examples/
|
|
26
|
+
- 行为或规则枚举项用「**动词短语引导词**:完整句」格式:引导词命名本项的中心动作(如「**显示状态面板**」「**判定流程结果**」),冒号后保留完整中文句,写全动作、对象与结果。引导词是扫读索引,不替代句子信息,不为省字把冒号后压成电报短句(对照见 `examples/07-layout-list.md`)。
|
|
22
27
|
- 解释并列名称的引导词列表放在首次使用这些名称的代码块或目录树之前:读者先经列表认识每个名称,再看结构展示;禁止把解释压到块后,读者会带着未解释的名称读块。名称本身用读者可核对的具体形态(如「项目动态库」),不用模糊统称(术语依据见 `steps/06-wording.md`)。
|
|
23
28
|
- 并列成员一次列全:目录、组件等并列对象(含 `build/` 这类构建生成的目录)并入同一个引导词列表,先列全再展示目录树等结构;列表之后不用段落补列遗漏的成员(对照见 `examples/04-paragraph-opening.md`「角色总述段」)。
|
|
24
29
|
- 目录树的列对齐(目录 `#/`、文件 `#` 右移 4 列、同一棵树只一档注释)见 `steps/03-blocks.md`「情况:目录树」;本文件只管列表、标点与加粗,不另写一份树规则。
|
|
25
30
|
- 三项以上、或每项内含解释的信息优先成列表;只有两项且能写进一句的保留正文;只有一项时不设列表,写进正文(节内无代码块或列表承接时,整节收成一句)。
|
|
26
|
-
- **不为凑三项拆列表**:列表项各要有一条独立信息;同一事实的碎片拆成三项、或为对齐硬补一项,都改回完整句,两项各有信息就写两项(对照见 `examples/
|
|
31
|
+
- **不为凑三项拆列表**:列表项各要有一条独立信息;同一事实的碎片拆成三项、或为对齐硬补一项,都改回完整句,两项各有信息就写两项(对照见 `examples/07-layout-list.md`「凑三项拆列表」)。
|
|
27
32
|
- **构造后的成员并列成列表**:同一句或同一段用顿号、逗号并列三个及以上数据成员、而且各项状态不同时,改成引导词列表;列表放在数据成员围栏**之前**,引导句不数个数、不把类名连写两次,也不写「成员写在该类里」——只把「构造之后的取值」引出来(如「`Game()` 默认构造之后,状态面板、当前用户、流程结果和操作记录是下面这样:」)。每一项恰好两句:第一句写成员是什么,第二句只写开局取值;第二句可以是「开局是空状态面板」这类状态句。枚举取值列表的位置见 `steps/03-blocks.md`「三级标题最小模块」,本文件不重写;枚举成员的含义仍留在源码行尾注释,这里列的是构造之后每个数据成员的状态,不是把枚举成员再解释一遍。依据:C++ Primer 把名字和初值分开讲,阮一峰一句一事。
|
|
28
33
|
- **成员围栏前不列类型**:禁止「`board_` 用 `Board`,`current_owner_` 用 `Player`」这种把类型再列一遍的句子——类型已经在围栏里。列表前的导语只点名要展开的维度,不把列表项里的取值先写一遍。
|
|
29
34
|
- **`private:` 不作正文话题**:围栏里可以保留源码的 ` private:`,因为片段必须和头文件逐字一致;「存放在 `private:` 下」「都在 `private:` 下」一类把访问说明符当话题的句子删掉,换成该 `##` 标题里的对象。
|
|
@@ -40,26 +45,20 @@
|
|
|
40
45
|
- 同一页加粗不成片:一段正文内至多一两处加粗,连续多句加粗等于没有重点。
|
|
41
46
|
- 标题不加粗(层级已由 `##`/`###` 表达);行内代码与加粗不叠加在同一对象上。
|
|
42
47
|
|
|
43
|
-
### 标点与中英混排
|
|
44
|
-
|
|
45
|
-
- 中文用全角标点;并列英文用顿号;中文与英文/数字之间留半角空格。
|
|
46
|
-
- 破折号夹解释的句子级判法见 `steps/05-sentences.md`(冒号合法场合见 `steps/04-paragraphs.md`「散文伪标签冒号禁令」)。
|
|
47
|
-
- `true` / `false` / `nullptr` 等 C++ 关键字用行内代码原样书写,不写中文译名。
|
|
48
|
-
|
|
49
48
|
### 外部规范对照
|
|
50
49
|
|
|
51
50
|
- 阮一峰《中文技术文档的写作规范》:句长、中英混排空格、标点全角;标题不跳级、同级不孤立。
|
|
52
|
-
- Google developer documentation style guide
|
|
51
|
+
- Google developer documentation style guide:一段一意、先给最重要信息;任务级标题用「动词 + 具体宾语」。
|
|
53
52
|
- 华为《中文技术文档写作风格指南》:标题层级与句式;段落长度条文统一指向 `steps/04-paragraphs.md`。
|
|
54
53
|
- GB/T 15834—2011《标点符号用法》:顿号层级与标点用法。
|
|
55
54
|
- 阿里 f2e-spec writing:中英混排与标点。
|
|
56
55
|
|
|
57
|
-
###
|
|
56
|
+
### 格式取舍
|
|
58
57
|
|
|
59
58
|
- 行内代码与平台名词的版式判定见 `steps/02-structure.md`。
|
|
60
59
|
- 可复制命令使用指定语言的代码围栏;命令与输出分开的判定见 `steps/02-structure.md`。
|
|
61
60
|
- 标题与导航不用行内代码的判定见 `steps/02-structure.md`;中英文之间的空格见 `steps/06-wording.md`。
|
|
62
|
-
-
|
|
61
|
+
- 列表用于并列或顺序关系,选择判定见本文件「列表选择」。表格只用于需要对多个属性进行比较的内容:同一主题的属性合并成一张表,不按小节拆成多张薄表;只有一两列信息或右侧大量留白时改用句子或列表。列表是版式选择,不是新的一段说明。
|
|
63
62
|
- Callout 只承载可跳过提示的判定见 `steps/03-blocks.md`。
|
|
64
63
|
|
|
65
64
|
具体元素写法见 `quarto/authoring.md`,终端步骤见 `quarto/terminal.md`。
|
|
@@ -76,4 +75,4 @@
|
|
|
76
75
|
|
|
77
76
|
## 正反例
|
|
78
77
|
|
|
79
|
-
|
|
78
|
+
同号案例见 `examples/07-layout-list.md`;标点和加粗的短对照就是本文件通用情况里的条目。
|
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
| 步骤 | 信号 | 判定 | 依据 |
|
|
13
13
|
| --- | --- | --- | --- |
|
|
14
14
|
| 定任务 | 正文「下一节/上一节」 | 删,改新节首句承接(章末「下一章」保留) | `steps/01-task.md` |
|
|
15
|
-
| 定结构 | agent 免责腔(「服务于讲解」「片段不保证」「不等于文件内顺序」、台账口吻声明) | 读者正文整句删除;同源保证交给 verify,规则留 `.agents` | `steps/02-structure.md
|
|
15
|
+
| 定结构 | agent 免责腔(「服务于讲解」「片段不保证」「不等于文件内顺序」、台账口吻声明) | 读者正文整句删除;同源保证交给 verify,规则留 `.agents` | `steps/02-structure.md`「六段块序列」 |
|
|
16
16
|
| 定句子 | 自测题干出现「这个/那个/这些/那些/哪个/哪些/哪一句/哪一层/哪一行/哪一块」(「什么」允许) | 题干写出被问的对象与候选,用「是多少、会不会、A 还是 B」问 | `steps/05-sentences.md`「代词不能代替未写出的对象」、`examples/05-sentence-reference.md`「定结构与定句子:代词不能代替未写出的对象」 |
|
|
17
17
|
| 定段落 | 同节 ≥3 连纯散文(中间无列表/代码/图/表) | 按「句序与段落形态」改一句中心并拆出列表、代码或图 | `steps/04-paragraphs.md`「句序与段落形态」 |
|
|
18
18
|
| 定结构 | 章引言两个散文段并立、单句孤儿段(首个 `##` 前 ≥2 个非列表散文块) | 并为单段或改「一段 + 列表」 | `steps/02-structure.md` |
|
|
19
|
+
| 定结构 | 标题口语化:第一人称、劝诱,或「输入之后」「看完之后」类时间从句起头 | 改成「限定语 + 对象」或「动词 + 具体宾语」,时间与人称下放导语 | `steps/02-structure.md`「形式规则」 |
|
|
20
|
+
| 定结构 | 章题脱节:title 对象与多数任务节中心名词不同 | 并排看引言首句、各 `##` 中心名词、回顾能力句;改 title 或重排结构,不写导语补丁 | `steps/02-structure.md`「纵向承诺链」第 9 条 |
|
|
19
21
|
| 定段落 | 一段内两个独立中心 | 按「拆核四步」拆段或改列表 | `steps/04-paragraphs.md`「拆核四步(多核混段的拆段方法)」、`examples/04-paragraph-cases.md`「自然段多中心未拆」 |
|
|
20
|
-
| 定结构 | 章引言顿号串 ≥3 个交付物 | 下沉为列表或正文 `##` | `steps/02-structure.md
|
|
22
|
+
| 定结构 | 章引言顿号串 ≥3 个交付物 | 下沉为列表或正文 `##` | `steps/02-structure.md`「六段块序列」、`examples/02-structure-shape.md`「目录式堆砌」 |
|
|
21
23
|
| 排列内容块 | 过简实现围栏(单次比较或直接 `return`) | 删围栏,改入口列表 + 失败策略列表 | `steps/03-blocks.md` |
|
|
22
24
|
| 排列内容块 | 块间闭环缺失(标题下无引导、段→列表无 lead-in、代码→图只有空行、表前无关系句、Callout 复述块内) | 按块链检查清单补桥接 | `steps/03-blocks.md`「块链检查清单」、`steps/03-blocks.md` |
|
|
23
25
|
| 定段落 | 段内同义堆叠(两句换说法讲同一机制) | 删辅句或合并;公式递进与简洁边界豁免 | `steps/04-paragraphs.md`「段内同义堆叠禁令」 |
|
|
@@ -36,19 +38,21 @@
|
|
|
36
38
|
| 定句子 | 没点名载体(「一个下标」「这个下标」「这次代入」),或一句里同时有跳过整行、列偏移和得数,或公式项列表 | 按列表选择换算条写成同一段短句 | `steps/07-layout.md`「列表选择」 |
|
|
37
39
|
| 定句子 | `Get*` 概述纯名词句(`/// 当前流程结果。`) | 改「获取…」,动词与函数名前缀硬对齐;只对齐围栏里的声明,不改源码注释 | `steps/03-blocks.md` |
|
|
38
40
|
| 定句子 | 分支解释把条件压在句首(拒绝、终局句读到句末才知道结果) | 主句先写可观察结果,条件跟在后面或另起一句 | `steps/05-sentences.md`「句子规则」 |
|
|
41
|
+
| 定句子 | 操作步骤先写动作、条件放在后面(「点 Delete,若你想…」) | 把条件句移到动作前,一步只留一个动作 | Google sentence structure;`quarto/readability.md` |
|
|
42
|
+
| 定用词 | 新术语首次出现只有名称或只有英文缩写,没有一句可观察解释 | 首用补「中文(English)」与一句定义,缩写先全称 | Google Jargon;`quarto/readability.md` |
|
|
39
43
|
| 定句子 | 行尾把格子状态、先手或后手、操作动作写进同一句 | 换成术语表「数据项类型」里的三句,与头文件逐字一致 | `steps/05-sentences.md`、`steps/06-wording.md` |
|
|
40
44
|
| 定句子 | 一句里的量被「确定、体现、界定、表达」盖住(时间义「已经确定」合格) | 改写成相等、乘除加减、上下界或成员记法;「由 A 得到 B」「将 A 转换为 B」的换算注释不在此改 | `steps/05-sentences.md`「关系写成能核对的运算」 |
|
|
41
45
|
| 定段落 | 散文伪标签冒号(话题 + `:` 词条式冒号);多核混段 | 词条式冒号改完整主谓句或真列表项;多核混段按拆核四步改写 | `steps/04-paragraphs.md`「散文伪标签冒号禁令」「拆核四步(多核混段的拆段方法)」 |
|
|
42
46
|
| 定版式 | 成员函数声明间无空行、qmd 围栏坍缩 | 补空 1 行;围栏保留源码空白 | `steps/03-blocks.md`「类与多函数摘录的垂直空白」 |
|
|
43
47
|
| 定版式 | 行尾超 100 列 | 超宽整条回退上一行 | `steps/03-blocks.md` |
|
|
44
|
-
| 定版式 | 列表项字数失衡(冒号后最长 ≥ 最短 ×2,或引导词相差 ≥4) | 删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 | `steps/07-layout.md`「列表选择」、`examples/
|
|
48
|
+
| 定版式 | 列表项字数失衡(冒号后最长 ≥ 最短 ×2,或引导词相差 ≥4) | 删长项多余中心 → 拆多中心 → 过短项按简洁边界补全 | `steps/07-layout.md`「列表选择」、`examples/07-layout-list.md`「列表字数带失衡」 |
|
|
45
49
|
| 定版式 | 凑三项拆列表:列表项只是同一事实的碎片,各自没有独立信息 | 改回完整句;两项各有信息就写两项 | `steps/07-layout.md`「列表选择」 |
|
|
46
50
|
| 定句子 | 句号后下一句以「它」开头且下一个字不是「们」 | 话题没换就不写「它」,主语空缺或写回原类型名 | `steps/05-sentences.md`「同档并句」 |
|
|
47
51
|
| 定句子 | 反引号结束后紧跟「减」加数字 | 标识符的加减乘除写进同一对反引号,运算符用源码符号 | `steps/05-sentences.md`「关系写成能核对的运算」 |
|
|
48
52
|
| 定段落 | 列表前的导语写出列表项里的取值 | 导语只点名要展开的维度,不提前写取值 | `steps/07-layout.md`「列表选择」 |
|
|
49
53
|
| 定句子 | 简单函数注释写出「不抛异常」而声明没有 `noexcept` | 可能抛出则不写「不抛异常」,声明也不加 `noexcept` | `steps/03-blocks.md`「代码块门槛」 |
|
|
50
54
|
| 定用词 | 空泛套话(「深入探讨」「至关重要」「无缝」「赋能」)不指具体对象;同义循环换词;客服腔;编辑过程残留 | 改写成可核对的对象或删除;工程术语(反馈里的「闭环」)保留 | `steps/06-wording.md`「情况:空泛套话与编辑残留」 |
|
|
51
|
-
| 回读并退回 | 与改前文本对照:新增原文没有的事实、遗漏读者需要的信息、把限定说成确定 | 恢复原文或按现象退回对应步
|
|
55
|
+
| 回读并退回 | 与改前文本对照:新增原文没有的事实、遗漏读者需要的信息、把限定说成确定 | 恢复原文或按现象退回对应步 |本文件「情况:对照改前文本」 |
|
|
52
56
|
|
|
53
57
|
机械项:`verifying-content.py` 扫读者 qmd 与 agents 的 `下一节`/`上一节`、`代码把它写成`、`第二道…防线`、围栏外正文的 `由…完成` 与 `由…确定/体现/界定/表达`;读者正文的 agent 免责腔硬拦,章节页引言两个散文段、段落下限由 `verifying-content.py` 判失败;段内连续分句引入新行内代码标识且无回指的过简断裂信号由 `verifying-content.py` 记 WARN(不追清零)。句子模块切分由 `verifying-content.py` 对扫描范围内的 qmd 全量执行,只印切分计数与失败行,失败收三类高精度信号(类型接线句、「接着看/第 N 个枚举」改口、全称被下一句否定);段中心写不出与对话件数不做正则,留给步骤与案例。
|
|
54
58
|
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
产出:内容核对结果、一次渲染检查和 HTML 可用性报告。这一步只跑命令,不按报告改写法。
|
|
4
4
|
|
|
5
|
-
内容与链接检查需要 Python 3;`dry_run: false` 的渲染还需要 Quarto CLI。缺少依赖时停住并报告,不改回手跑 `quarto render
|
|
5
|
+
内容与链接检查需要 Python 3;`dry_run: false` 的渲染还需要 Quarto CLI。缺少依赖时停住并报告,不改回手跑 `quarto render`。跨层失败先按 `quarto/render.md`「排查顺序」定位,再回到对应步骤。
|
|
6
6
|
|
|
7
7
|
## 通用情况
|
|
8
8
|
|
|
9
9
|
### 内容与链接
|
|
10
10
|
|
|
11
|
-
项目技能列了内容检查命令时,只跑它列出的命令。没有项目技能时,在书根跑本技能 `scripts/` 下的 `verifying-content.py` 与 `checking-
|
|
11
|
+
项目技能列了内容检查命令时,只跑它列出的命令。没有项目技能时,在书根跑本技能 `scripts/` 下的 `verifying-content.py`、`checking-links.py` 与 `checking-prose.py`。
|
|
12
12
|
|
|
13
|
-
`verifying-content.py` 查章节表、YAML 标题、标题层级、句段长度、围栏语言、Mermaid
|
|
13
|
+
`verifying-content.py` 查章节表、YAML 标题、标题层级、句段长度、围栏语言、Mermaid 围栏、占位文字和本地链接;`checking-prose.py` 查中文与拉丁字母、数字、行内代码之间的空格,以及中文句里的半角标点。项目专属检查只在书的 `.agents/skills/quarto-book-project/` 存在时启用。
|
|
14
14
|
|
|
15
15
|
### 渲染与 HTML
|
|
16
16
|
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
## 完成判据
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
内容命令与混排检查通过,`dry_run: false` 返回 `render_result.ok: true`,且 `html_report.usable: true`,并调用一次 `quarto_pass_report` 出回执,才算完成。任一条件不满足,回到报告指向的步骤。
|
|
73
73
|
|
|
74
74
|
## 正反例
|
|
75
75
|
|