---
description: "写课程页时读（先读写作规范）：一课前半讲透心智模型、后半挂不动手就答不出的题，答案写进 notes/ 同名文件、答完才归档；页面骨架、提问块语法、出题判据、导读页"
---

# 课程页怎么写

一课分两半：**前半把这一章的心智模型讲透，后半挂上不动手就答不出的题**。答案不写在课程页里 —— 它写进 `docs/notes/` 的同名文件，答完才归档。这里只讲写一课的规矩；页面通用的规矩见[写作规范](index.md)。

## 页面骨架 { #skeleton }

七节，顺序固定，缺一不可：

```markdown
# <结论式标题，说清这一课教什么>

> 目标：<一句话>。原书章节与页码。

## 场景        ← 这一章要解决的现实问题。用「你」，不出现具体人名
## 讲解        ← 心智模型 + 关键公式或机制 + 一个小例子；可分 ### 小节
## 准备        ← 数据表放哪、用什么算、工具的坑
## 任务        ← 要达成什么，不说怎么做
## 验收        ← 可自己核对的检查项
## 提问        ← 若干 ```conflict 块
```

- **讲解只讲心智模型**：为什么这个量这样构造、这个数为什么是这个数。写成教材抄本就跑偏了，公式罗列归笔记
- **任务和验收分开**：任务说目标，验收说怎么证明达到了。每条都要能核对（十个离差之和严格为 0、两条路径算出的值前四位一致），不写「正确地完成了计算」这种核对不了的话
- **验收不泄答案**：给自查手段，不给结果
- **数据表**放 `docs/courses/<分类>/assets/<slug>/*.csv`，课程页用相对路径链接；`.csv` 上桶钉了 `text/plain`，AI 能直接读

## 提问块 { #conflict-syntax }

````markdown
```conflict
<<<<<<< courses/statistics-book/ch06-sampling-distribution
Q2 A 线的波动超标了吗
按 (6.18) 式构造卡方统计量，σ 取 3 ml。贴出 (n-1)S²/σ² 的数值和自由度，再用 CHISQ.INV.RT 和 CHISQ.DIST.RT 两条路径给出判断依据。
=======
>>>>>>> notes
```
````

- **三种标记各占一整行**：`<<<<<<< courses/<分类>/<slug>`、`=======`、`>>>>>>> notes`，写成半行就解析不到
- **上半区第一行是题头** `Q<n> <短标题>`，其余是题干；**下半区留空** —— 一课可以反复做，也可以交给别人或别的 agent
- **题干里不写 `**`**：fence 里 markdown 不生效，会原样露出来；行内反引号可以留，归档后题干进 `!!! question`，反引号正常渲染
- **每课末尾固定三题**，短标题精确为 `一句话`、`心智模型`、`坑`：归档时它们成为笔记的三个小节，其余题归入 `## 操作`，正好是 `notes/` 的骨架 **场景 → 一句话 → 心智模型 → 操作 → 坑**。改这三个词要同时改 `scripts/course.py` 的 `SECTIONS`
- **改提问块语法要三处一起改**，否则静默不一致：`scripts/course.py`（`add` 时逐题检查是否作答）、`docs/vendor/conflict-init.js`（浏览器里染成上问下答，标记不齐就原样留着）、`scripts/check-links.py`（拦住 `docs/notes/` 下带 `<<<<<<<` 的文件）

## 题怎么出 { #how-to-ask }

**判据只有一条：不自己算出数来就答不出。** 讲解就在同一页上，答案能从上半页抄到的题一律作废。

- 贴中间量：样本方差、标准化后的统计量、自由度，一个都不许省
- 两条独立路径交叉核对：手算 vs `CHISQ.INV.RT`、倒数性质 vs `F.INV`，两个结果都贴
- 指认来源：「这个自由度是由哪一组数据的什么量扣出来的」
- 做一次对照：样本量翻倍再算一遍，说出哪个量升、哪个量降，公式里哪个 n 造成了这个方向
- 概念题（「t 分布和正态分布有什么区别」）只有落到本课的数据上才有价值

## 导读页 { #guide-page }

一本书一个目录，目录的 `index.md` 是导读页 —— 地图，不是讲解。五节，顺序固定：

```markdown
---
description: "<一句话：这本书在体系里管什么>"
---

# <书名>（<科目>伴读）

> 状态：排队中，队列第 N 门。版本：<作者、书名、版次、出版社、年份>

<定位段：前置课 → 本课 → 后续课，各链到对应导读页>

## 读法        ← 读哪几章、跳哪几章、为什么；免费版的线上地址写进脚注，在版书写「只摘句、标页码」
## 章节地图    ← 表：章 | 读法（必读 / 选读 / 跳）| 接本站哪里
## 口径差异    ← 记号、定义与本站其他页不同的地方；没把握就写「读到再补」
## 课程        ← 已开的课一行一钩子；没开写「还没开课」
```

- **章节表照官方目录抄章名**，出版社或作者页核实过再写，不凭记忆
- **章节地图不写一句话压缩** —— 没读就压缩等于拿计划冒充成果，开课后在「课程」一节的钩子里补
- **「接本站哪里」只写真存在的页**；还没写的写成 roadmap 清单里的条目名，不造链接
- 开课时状态改成「在开」，伴读页挂进「课程」一节

## 新增一课 { #new-lesson }

1. 写 `docs/courses/<分类>/<slug>.md`，骨架照上面七节
2. **每道题自己算一遍**，确认答案唯一且算得出来；算不出来的题不许留
3. 挂钩子、注册 nav、跑 check-links，同[写作流程](index.md#workflow)

做完一课要发答卷时，走 `scripts/course.py checkout → add`，再在 `docs/notes/<分类>/index.md` 挂钩子、注册 nav。`courses-src/<分类>/<slug>/solution.md` 存在的话，归档时会自动附上折叠的「参考解法」。
