forked from EduCraft/curriculum-project-hub
feat: add curated curriculum agent skills
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: lesson-project
|
||||
description: 把项目根目录 outline.md 落成符合 cph 0.0.2 的结构化讲义工程,并用 cph check/build 验证和生成教师版、学生版 PDF。
|
||||
---
|
||||
|
||||
# 把 outline.md 落成 cph 0.0.2 工程
|
||||
|
||||
只在当前项目 workspace 内工作。先完整阅读 `outline.md`,再依次阅读本 skill 的 `structure.md`、`templates.md`、`workflow.md` 和 `writing-style.md`。
|
||||
|
||||
## 不可违反的边界
|
||||
|
||||
- 当前唯一工程清单是 `manifest.toml`,版本契约是 `.cph-version`;不要创建旧格式 `project.toml`、`info.toml` 或根 `main.typ`。
|
||||
- element 只允许 `segment`、`lemma`、`example`、`sop`,字段以 `structure.md` 为准。
|
||||
- 不生成 commentary、hint、answer、instruction、handout、summary 等 cph 0.0.2 不支持的字段。
|
||||
- 忠实于 outline;缺题面、公式或关键结论时询问用户,不擅自补写。
|
||||
- 使用 `cph check .` 验证结构,使用 `cph build . --target student` 和 `cph build . --target teacher` 构建;不要直接调用 `typst compile`。
|
||||
- 任一命令失败都保留完整错误并修复根因,不删除内容来糊绿。
|
||||
|
||||
## 完成标准
|
||||
|
||||
1. `cph check .` 为 0 errors。
|
||||
2. 两个 `cph build` 命令退出码为 0。
|
||||
3. 产物位于 `build/student.pdf` 和 `build/teacher.pdf`。
|
||||
4. 简报列出落地的 element、仍需用户补充的内容和两份 PDF 路径。
|
||||
@@ -0,0 +1,252 @@
|
||||
# 写得好的样例片段
|
||||
|
||||
本文件从两份现行讲义里抽取代表性片段,按 element 类型分类。看这些片段是为了对齐"写出来
|
||||
就该是这样"的标准。文风、连贯性、推导风、归宿判断都靠这些样例校准——[writing-style.md]
|
||||
讲方法论,本文件给出对应方法论的具体落地。
|
||||
|
||||
样例出处:
|
||||
- EM-131 保角变换法(学生版讲义)
|
||||
- 简正模(第 19 章)
|
||||
|
||||
---
|
||||
|
||||
## segment:物理引入的范例
|
||||
|
||||
样例摘自简正模 §19.1.1 动能的表示。
|
||||
|
||||
> 要考察一个多自由度体系在平衡位置附近的小振动,一种普适的方法是写出体系的动能和势能
|
||||
> 然后代入拉格朗日方程。这里我们假设体系的广义坐标的为 $q_1, q_2, \dots, q_n$,那么动能
|
||||
> 一定可以写为
|
||||
>
|
||||
> $$T = \frac{1}{2}\sum_{i,j} f_{i,j}(q_1, q_2, \dots, q_n)\,\dot q_i \dot q_j .$$
|
||||
>
|
||||
> 其中 $f_{i,j}$ 是一个关于广义坐标的函数。例如当我们选择极坐标系描述二维空间中的运动
|
||||
> 的时候,有
|
||||
>
|
||||
> $$T = \tfrac{1}{2} m\dot r^2 + \tfrac{1}{2} m r^2 \dot\theta^2 ,$$
|
||||
>
|
||||
> 可见 $\dot\theta^2$ 对应的 $f$ 为 $mr^2$。考虑到这里我们考虑的振动是在平衡位置附近的
|
||||
> 小振动,广义坐标的导数 $\dot q_i$ 是小量,而在振动过程中 $f$ 的改变是一阶的,因此如
|
||||
> 果仅仅保留到二阶小量,我们可以将上式改写为 ……(接下来矩阵化、对角化)
|
||||
|
||||
**为什么写得好**:第一句直接给出物理设置(多自由度小振动 + 普适方法)。引入一般动能形式
|
||||
之后立刻举一个最简单的极坐标例子让公式落地,然后顺着"小振动→二阶小量"的物理逻辑推进到
|
||||
矩阵化。整段没有"接下来要做的是""本节的核心是""为后面 X 节铺垫"这类编排话——下一步是
|
||||
什么由物理决定,不需要预告。
|
||||
|
||||
---
|
||||
|
||||
## segment:概念串联的范例
|
||||
|
||||
样例摘自保角变换 §1.2 复势的定义。
|
||||
|
||||
> 考虑一个二维静电场问题,电势 $\varphi(x,y)$ 满足拉普拉斯方程。由上一节的讨论,必然
|
||||
> 存在一个共轭调和函数 $\psi(x,y)$,使得 $\varphi$ 和 $\psi$ 共同构成一个解析函数
|
||||
>
|
||||
> $$W(z) = \varphi(x,y) + \mathrm{i}\psi(x,y),$$
|
||||
>
|
||||
> 称为复势。其中 $\varphi$ 为电势,$\psi$ 为流函数,电通量则正比于两条流线的流函数差值。
|
||||
> 等势线 $\varphi = \text{const}$ 与电力线 $\psi = \text{const}$ 处处正交,这与式 (3)
|
||||
> 的几何意义完全吻合。
|
||||
>
|
||||
> 从复势中提取电场只需要做一次求导。对上式求导得到
|
||||
>
|
||||
> $$\frac{\mathrm{d}W}{\mathrm{d}z} = \frac{\partial\varphi}{\partial x} + \mathrm{i}\frac{\partial\psi}{\partial x} = -E_x + \mathrm{i}E_y,$$
|
||||
>
|
||||
> 其中最后一步利用了 $E_x = -\partial\varphi/\partial x$ 以及式 (3) 给出的 $\partial\psi/\partial x = -\partial\varphi/\partial y = E_y$。
|
||||
|
||||
**为什么写得好**:用"由上一节的讨论""这与式 (3) 的几何意义完全吻合""利用了式 (3)"三次
|
||||
回引前文,每一次都是物理推导中真正用到了前文结论。回引方式简洁、点到为止,不展开复述。
|
||||
对比之下,错误的回引是"还记得我们在第 X 节讲的那个图吗,这里就是它的回扣"。
|
||||
|
||||
---
|
||||
|
||||
## lemma stmt:简洁陈述的范例
|
||||
|
||||
样例摘自保角变换 §1.1 末,柯西-黎曼条件的引出。
|
||||
|
||||
> 设复变量 $z = x + \mathrm{i}y$,考虑复变函数 $f(z) = u(x,y) + \mathrm{i}v(x,y)$,
|
||||
> 其中 $u$ 和 $v$ 是两个实值函数。我们要求 $f$ 的导数在复平面上处处存在且与求导方向
|
||||
> 无关。沿实轴方向求导给出 ……,而沿虚轴方向求导给出 ……,两个表达式的实部和虚部分别
|
||||
> 相等,立即得到柯西-黎曼条件
|
||||
>
|
||||
> $$\frac{\partial u}{\partial x} = \frac{\partial v}{\partial y}, \qquad \frac{\partial u}{\partial y} = -\frac{\partial v}{\partial x}.$$
|
||||
>
|
||||
> 满足此式的函数称为解析函数。从此式可以读出一个重要的几何性质:$u$ 的梯度与 $v$ 的
|
||||
> 梯度正交。这意味着 $u = \text{const}$ 与 $v = \text{const}$ 两族曲线处处正交。
|
||||
|
||||
**为什么写得好**:定理陈述(柯西-黎曼条件)由前面的物理设置自然推出,给出公式之后用一
|
||||
两句话陈述它的几何含义。整段没有任何"这是核心定理""务必掌握""非常重要"的元评论,几何
|
||||
含义陈述本身就是对定理意义的最好说明。
|
||||
|
||||
---
|
||||
|
||||
## lemma proof:纯推导的范例
|
||||
|
||||
样例摘自简正模 §19.1.3,证明 $\frac{\partial}{\partial q_i}\bigl(\tfrac{1}{2}\boldsymbol{q}^\mathrm{T}\boldsymbol{M}\boldsymbol{q}\bigr)\boldsymbol{e}_i = \boldsymbol{M}\boldsymbol{q}$。
|
||||
|
||||
> 将被求导的式子展开,为
|
||||
>
|
||||
> $$\tfrac{1}{2}\boldsymbol{q}^\mathrm{T}\boldsymbol{M}\boldsymbol{q} = \sum_{i,j}\tfrac{1}{2} m_{ij} q_i q_j = \sum_i \sum_j \tfrac{1}{2} m_{ij} q_i q_j .$$
|
||||
>
|
||||
> 考察其中与 $q_i$ 有关的部分,有可能是第一个求和取 $i$,可能是第二个求和取 $i$,也可
|
||||
> 能是两个求和都取 $i$,把这三类相加为
|
||||
>
|
||||
> $$\sum_{j\neq i}\tfrac{1}{2} m_{ij} q_i q_j + \sum_{j\neq i}\tfrac{1}{2} m_{ji} q_j q_i + \tfrac{1}{2} m_{ii} q_i^2 .$$
|
||||
>
|
||||
> 代回原式得到
|
||||
>
|
||||
> $$\text{left side} = \frac{\partial}{\partial q_i}\Bigl[\sum_{j\neq i}\tfrac{1}{2} m_{ij} q_i q_j + \sum_{j\neq i}\tfrac{1}{2} m_{ji} q_j q_i + \tfrac{1}{2} m_{ii} q_i^2\Bigr]\boldsymbol{e}_i$$
|
||||
> $$= \sum_{j\neq i}\bigl[\tfrac{1}{2} m_{ij} q_j + \tfrac{1}{2} m_{ji} q_j\bigr]\boldsymbol{e}_i + m_{ii} q_i \boldsymbol{e}_i$$
|
||||
> $$= \sum_j m_{ij} q_j \boldsymbol{e}_i = \boldsymbol{M}\boldsymbol{q} ,$$
|
||||
>
|
||||
> 倒数第二个等号利用了 $\boldsymbol{M}$ 作为对称矩阵的性质。
|
||||
|
||||
**为什么写得好**:整段就是一连串公式加最短衔接词——"展开为""考察……部分""相加为""代回
|
||||
得到""利用了……的性质"。没有"我们要做的第一步是……""现在我们考虑……""注意到这一步非常
|
||||
关键……"这类讲解语言。推导自身的逻辑就是叙事,不需要再多一层元叙述。
|
||||
|
||||
---
|
||||
|
||||
## lemma proof:含分步推导的范例
|
||||
|
||||
样例摘自简正模 §19.1.1 末段(动能对角化的几步推进)。
|
||||
|
||||
> 显然我们可以适当分配交叉项使得 $\boldsymbol{M}$ 是一个对称矩阵,这意味着它可对角化。
|
||||
> 令 $\boldsymbol{M}$ 的对角化形式为
|
||||
>
|
||||
> $$\boldsymbol{M} = \boldsymbol{P}\boldsymbol{\Lambda}\boldsymbol{P}^{-1} .$$
|
||||
>
|
||||
> 此时动能可以改写为
|
||||
>
|
||||
> $$T = \dot{\boldsymbol{q}}^\mathrm{T} \boldsymbol{P}\boldsymbol{\Lambda}\boldsymbol{P}^{-1} \dot{\boldsymbol{q}} .$$
|
||||
>
|
||||
> 定义新的广义坐标
|
||||
>
|
||||
> $$\boldsymbol{q}^* = \boldsymbol{P}^{-1} \boldsymbol{q} ,$$
|
||||
>
|
||||
> 又由于 $\boldsymbol{P}^{-1}$ 的每一行都是 $\boldsymbol{M}$ 的本征矢量 $\boldsymbol{x}_i$,
|
||||
> 也可以得到新广义坐标的各个分量为
|
||||
>
|
||||
> $$q_i^* = \boldsymbol{x}_i \cdot \boldsymbol{q}_i .$$
|
||||
>
|
||||
> 若令 $\boldsymbol{M}$ 的本征值为 $m_i$,则可以将动能写为不含广义坐标交叉项的形式,即
|
||||
>
|
||||
> $$T = \sum_i \tfrac{1}{2} m_i (\dot q_i^*)^2 .$$
|
||||
|
||||
**为什么写得好**:每一步都是一行"陈述 + 公式",陈述部分极短("令 $\boldsymbol{M}$ 的
|
||||
对角化形式为""定义新的广义坐标""若令 $\boldsymbol{M}$ 的本征值为 $m_i$"),公式紧跟。
|
||||
六个公式块用五个衔接句串起来,每个衔接句平均不到 10 字。
|
||||
|
||||
---
|
||||
|
||||
## example problem:题面紧凑的范例
|
||||
|
||||
样例摘自保角变换 EM131.14、EM131.18。
|
||||
|
||||
> 例 EM131.14:空间中有两个半径分别为 $R_1$ 和 $R_2$ 的一大一小两个圆柱,其中心间距
|
||||
> 为 $D$,试在 $D < R_2 - R_1$ 的条件下计算两个圆柱之间的电容。
|
||||
|
||||
> 例 EM131.18:有一个半长轴为 $A$、短半轴为 $B$ 的无限长导体椭圆柱,将其置于沿长轴方
|
||||
> 向的均匀外电场 $E_0$ 中,试求椭圆柱外的电势分布和表面电荷密度。
|
||||
|
||||
**为什么写得好**:题面只给"物理设置 + 所求量"两件事,参数齐全、约束条件齐全。没有"为了
|
||||
练习……""下面这道题考察……""请同学们仔细思考"等元描述。
|
||||
|
||||
---
|
||||
|
||||
## example solution:纯推导的范例
|
||||
|
||||
样例摘自简正模例题 19.4。
|
||||
|
||||
> 解:不论通过对角化矩阵还是加减消元都可以很容易得到简正坐标为
|
||||
>
|
||||
> $$\xi_{1,2} = x_1 \pm x_2 .$$
|
||||
|
||||
**为什么写得好**:solution 可以很短——所求量直接由前面建立的方法得到的话,给出结果即可,
|
||||
不必为了凑字数把方法再讲一遍。"不论通过对角化矩阵还是加减消元"这句话指明可走的路径,
|
||||
然后立刻给结果。
|
||||
|
||||
---
|
||||
|
||||
## example solution:分步推导的范例
|
||||
|
||||
样例摘自简正模例题 19.5(含约当正规型求解)。
|
||||
|
||||
> 重新定义 $\boldsymbol{\xi}$,它的两个分量分别为 $2 x_1 + x_2$ 与 $2 x_1 - x_2$,那么
|
||||
> 分量 $\xi_1$ 和 $\xi_2$ 满足的方程为
|
||||
>
|
||||
> $$\ddot\xi_1 + \xi_1 + \xi_2 = 0 ,$$
|
||||
> $$\ddot\xi_2 + \xi_2 = 0 .$$
|
||||
>
|
||||
> 先求解 $\xi_2$,很容易得到通解
|
||||
>
|
||||
> $$\xi_2 = B \cos(t + \varphi_2) .$$
|
||||
>
|
||||
> 再将 $\xi_2$ 代回 $\xi_1$ 满足的方程得到
|
||||
>
|
||||
> $$\xi_1 = A \cos(t + \varphi_1) - \tfrac{B}{2} t \sin(t + \varphi_2) .$$
|
||||
>
|
||||
> 通过 $\xi_1$ 和 $\xi_2$ 反解 $x_1$ 和 $x_2$,即
|
||||
>
|
||||
> $$x_1 = \tfrac{\xi_1 + \xi_2}{4}, \quad x_2 = \tfrac{\xi_1 - \xi_2}{2} .$$
|
||||
>
|
||||
> 最终有
|
||||
>
|
||||
> $$x_1 = \tfrac{A}{4}\cos(t+\varphi_1) + \tfrac{B}{4}\cos(t+\varphi_2) - \tfrac{B}{8} t \sin(t+\varphi_2) ,$$
|
||||
> $$x_2 = \tfrac{A}{2}\cos(t+\varphi_1) - \tfrac{B}{2}\cos(t+\varphi_2) - \tfrac{B}{4} t \sin(t+\varphi_2) .$$
|
||||
|
||||
**为什么写得好**:分步走的求解里每一步都用"先求解""再将……代回""通过……反解""最终有"
|
||||
之类的最短衔接。每个衔接词不超过三四个字,跟在公式之间纯粹起到流向指示的作用,不夹叙
|
||||
任何讲解。看完一遍这种 solution,下次自己写就该写成这个样子。
|
||||
|
||||
---
|
||||
|
||||
## 段与段之间的过渡:物理逻辑的范例
|
||||
|
||||
样例摘自简正模 §19.1.1 末到 §19.1.2 开头。
|
||||
|
||||
> 总结来说,在平衡位置附近,我们一定可以选择一组广义坐标,使得动能形式如 (19.9) 式。
|
||||
>
|
||||
> ## 19.1.2 势能的表示
|
||||
>
|
||||
> 在平衡位置附近,对振动有贡献的是势能的二阶项,不妨令其为 ……
|
||||
|
||||
**为什么写得好**:§19.1.1 的最后一句是对该小节内容的客观归纳("我们一定可以选择一组广义
|
||||
坐标,使得动能形式如 (19.9)"),不是"接下来就讲势能"的预告。§19.1.2 第一句直接进入势能的
|
||||
设置——之所以能进入,是因为已经写完动能、还差势能就能进拉格朗日方程,这是物理逻辑要求
|
||||
的下一步,作者不需要在 19.1.1 末尾说"下一节会讲势能"。读者通过物理逻辑就能自然预期到
|
||||
下一节的内容。
|
||||
|
||||
**反例(不要写成这样)**:
|
||||
|
||||
> ……我们看到动能可以通过对角化写成无交叉项的形式。**这只是动能这一半的工作**,**接下来
|
||||
> 我们要对势能做同样的事情,然后把两者代入拉格朗日方程,这是本节的核心目标**。
|
||||
>
|
||||
> ## 势能的表示
|
||||
>
|
||||
> 现在我们来处理势能 ……
|
||||
|
||||
反例里加粗的两句完全是元叙述,物理上没有任何新信息——拿掉这两句读者照样知道下一节是
|
||||
势能。这种话出现在 textbook 里就是把大纲编排话误带进了讲义。
|
||||
|
||||
---
|
||||
|
||||
## 整体风格的负面对照
|
||||
|
||||
为了让样例的"好"更明显,把同样的物理内容用错误风格再写一遍。
|
||||
|
||||
错误版(不要这样写):
|
||||
|
||||
> 我们现在面对的是一个学生最容易卡住的地方——多自由度系统的小振动看起来比单摆复杂得多。
|
||||
> 但其实只要找到一个统一的语言,问题就会变得清楚。这个统一的语言就是动能和势能的二次型
|
||||
> 展开,再加上拉格朗日方程。本节是整章的基础,建议同学们一定要把这一节的推导完整做一遍,
|
||||
> 否则后面的内容都会跟不上。下面我们先来看动能的形式。
|
||||
|
||||
为什么错:第一句"学生最容易卡住""看起来比单摆复杂得多"是教研判断,不该出现在学生看的
|
||||
教材里;"统一的语言""会变得清楚"是情感修饰;"本节是整章的基础""建议同学们一定要……否则
|
||||
后面的内容都会跟不上"是讲师对学生的指令性叙述,不是物理陈述;"下面我们先来看……"是
|
||||
编排预告。
|
||||
|
||||
把这一段擦掉,直接写"要考察一个多自由度体系在平衡位置附近的小振动,一种普适的方法是
|
||||
写出体系的动能和势能然后代入拉格朗日方程"——这就是正确的范例。
|
||||
@@ -0,0 +1,37 @@
|
||||
# cph 0.0.2 工程结构
|
||||
|
||||
```text
|
||||
<project>/
|
||||
├── .cph-version # 固定写 0.0.2
|
||||
├── manifest.toml
|
||||
├── outline.md
|
||||
├── exports/
|
||||
│ ├── student.typ
|
||||
│ └── teacher.typ
|
||||
├── segments/<名称>/
|
||||
│ ├── element.toml # kind = "segment"
|
||||
│ └── textbook.typ
|
||||
├── lemmas/<名称>/
|
||||
│ ├── element.toml # kind = "lemma"
|
||||
│ ├── stmt.typ
|
||||
│ └── proof.typ # 可选
|
||||
├── examples/<名称>/
|
||||
│ ├── element.toml # kind = "example";可有 source = "..."
|
||||
│ ├── problem.typ
|
||||
│ └── solution.typ
|
||||
├── sop/<名称>/
|
||||
│ ├── element.toml # kind = "sop"
|
||||
│ └── sop.typ
|
||||
└── build/
|
||||
```
|
||||
|
||||
`manifest.toml` 中的 `[[parts]]` 顺序就是最终讲义顺序。每项只写 `kind` 与相对 `path`;可选字段是否存在由 cph 在构建时解析。目录名与清单路径必须逐字一致。
|
||||
|
||||
当前字段契约:
|
||||
|
||||
- segment:必需 `textbook.typ`。
|
||||
- lemma:必需 `stmt.typ`,可选 `proof.typ`。
|
||||
- example:必需 `problem.typ` 与 `solution.typ`;`element.toml` 可写字符串 `source`。
|
||||
- sop:必需 `sop.typ`。
|
||||
|
||||
章节标题没有独立 kind。需要在讲义中显示章节过渡时,创建一个 segment,并在 `textbook.typ` 中用 Typst 标题表达。
|
||||
@@ -0,0 +1,49 @@
|
||||
# cph 0.0.2 最小模板
|
||||
|
||||
## manifest.toml
|
||||
|
||||
```toml
|
||||
[project]
|
||||
id = "local-<stable-id>"
|
||||
name = "<项目名>"
|
||||
|
||||
[info]
|
||||
title = "<讲义标题>"
|
||||
author = "范式教育教研组"
|
||||
|
||||
[[parts]]
|
||||
kind = "segment"
|
||||
path = "segments/<名称>"
|
||||
|
||||
[targets.student]
|
||||
artifact = { type = "single-file", filepath = "build/student.pdf" }
|
||||
[[targets.student.steps]]
|
||||
type = "typst-compile"
|
||||
template = "exports/student.typ"
|
||||
|
||||
[targets.teacher]
|
||||
artifact = { type = "single-file", filepath = "build/teacher.pdf" }
|
||||
[[targets.teacher.steps]]
|
||||
type = "typst-compile"
|
||||
template = "exports/teacher.typ"
|
||||
```
|
||||
|
||||
项目 id 必须稳定且只含安全字符;已有 id 不得改。`.cph-version` 内容固定为 `0.0.2` 加换行。
|
||||
|
||||
## element.toml
|
||||
|
||||
```toml
|
||||
kind = "segment"
|
||||
```
|
||||
|
||||
将 kind 替换为对应类型。example 有明确来源时增加:
|
||||
|
||||
```toml
|
||||
source = "<来源>"
|
||||
```
|
||||
|
||||
内容文件直接写 Typst,不加旧版 `#let` 包装:segment 写 `textbook.typ`,lemma 写 `stmt.typ`/可选 `proof.typ`,example 写 `problem.typ`/`solution.typ`,sop 写 `sop.typ`。
|
||||
|
||||
## exports 模板
|
||||
|
||||
不要凭记忆手写长模板。优先保留项目已有的 `exports/student.typ` 与 `exports/teacher.typ`。如果新项目缺失,先向用户说明需要当前 cph 0.0.2 标准模板;不要回退到旧版 `main.typ` 架构。
|
||||
@@ -0,0 +1,18 @@
|
||||
# 从 outline.md 到 PDF
|
||||
|
||||
1. 读取 `outline.md`,按出现顺序列出类型、名称、必需内容和可选要求。
|
||||
2. 检查现有工程。已有 `manifest.toml` 时保留 project id、既有内容和用户修改;不存在时使用 `templates.md` 创建最小工程。
|
||||
3. 为每条大纲创建对应 element 目录和文件。所有内容只来自大纲与用户提供的材料。
|
||||
4. 按大纲顺序更新 `manifest.toml` 的 `[[parts]]`。
|
||||
5. 运行 `cph check .`,逐条修复真实结构错误。
|
||||
6. 运行:
|
||||
|
||||
```bash
|
||||
cph build . --target student
|
||||
cph build . --target teacher
|
||||
```
|
||||
|
||||
7. 确认 `build/student.pdf`、`build/teacher.pdf` 存在且非空。
|
||||
8. 如用户需要,通过受控的 `send_file` 工具发送产物;不要用任意网络命令外传文件。
|
||||
|
||||
若 outline 缺少 example 的题面或解析、lemma 的明确结论,必须在创建不完整 element 前询问用户。不要留下能通过检查但内容虚假的占位文本。
|
||||
@@ -0,0 +1,182 @@
|
||||
## 撰写风格与格式规范
|
||||
|
||||
写工程文件时除了字段对、能编过,还要满足下面这些**风格与排版约束**。`textbook.typ`、
|
||||
`stmt.typ`、`proof.typ`、`problem.typ`、`solution.typ` 和 `sop.typ` 的内容都要遵守。
|
||||
|
||||
阅读样例 [samples.md](samples.md) 里收录的好片段。本文件给方法论与红线,samples.md 给
|
||||
具体的"写成那样就对"的例子。两份配合看。
|
||||
|
||||
## 核心思想:物理逻辑驱动行文
|
||||
|
||||
讲义和大纲的本质差,是讲义靠**物理因果链**把段落串起来,大纲靠**编排话**把条目列起来。
|
||||
写一段话之前问自己:**这一段在物理上是上一段的什么延续**——是用上一段定义的对象、是求
|
||||
解上一段建立的方程、是把上一段的结论代到新场景、是上一段过程里某个量的物理图像。如果
|
||||
回答得出,段与段就是连贯的物理推进;如果答不出,只是凭"我下面想讲 X"在串,那这一段就
|
||||
是大纲风。
|
||||
|
||||
样例 [简正模 19.1.1] 的推进顺序——动能的一般形式 → 二阶展开 → 矩阵化 → 对角化引入新
|
||||
广义坐标——每一步都是上一步的物理延续。我们写 textbook 要争取做到同样的连贯性。
|
||||
|
||||
## 写作视角
|
||||
|
||||
教材的对象是学生。**视角是教材作者在向学生陈述物理本身**,不是教研团队在讨论怎么讲这门
|
||||
课。前者用第一人称复数加陈述句,后者用讲师对自己的指令。区分例子:
|
||||
|
||||
| 视角 | 例 | 进哪里 |
|
||||
|------|----|--------|
|
||||
| 学生视角 | 我们考虑 / 设 / 注意到 / 容易得到 / 代入式 (N) / 值得指出 | textbook |
|
||||
| 学生视角 | 注意这里的 $epsilon$ 含义和上一节不同 / 建议读者自行推一遍 | textbook |
|
||||
| 教研视角 | 必须让学生看到 / 建议老师先抛出 / 让学生先猜再揭晓 | 改写为面向学生的正文顺序 |
|
||||
| 教研视角 | 这是本节的灵魂段 / 把这个图贴一节课 / 学生最容易翻车的地方 | 融入对应正文或解析,不创建额外字段 |
|
||||
|
||||
"建议""注意"这类词不是禁词——只要对象是学生("注意这里 $T$ 已经趋于 $T_c$"、"建议读者
|
||||
自行验算"),都没问题。判断标准始终是**对象是不是学生**。
|
||||
|
||||
## 内容归宿判定
|
||||
|
||||
每一句话写下来之前先问归谁。
|
||||
|
||||
进 **textbook**:物理设置、定义、推导、结论、对结论的客观评议(量级、适用范围、与已知
|
||||
结论的对照、反直觉之处、可能误用的边界)、必要的举例与模型归纳、本节定位(如果 outline
|
||||
的章首"说明"明确要求让学生有一个 general 感受,那就保留——但要用陈述物理的语气,例如
|
||||
"$sigma$ 是界面性质而非液面专有",不要用陈述教研策略的语气,例如"本节是大而全的建模专题")。
|
||||
|
||||
当前 cph 0.0.2 没有 commentary / instruction 字段。真正影响理解的易错点应改写为面向学生
|
||||
的 `textbook.typ`、`proof.typ` 或 `solution.typ`;只对教师有意义的内部动作建议不进入工程。
|
||||
|
||||
**最常见的错误**是把 outline 描述里"讲解策略"那段原样落到 textbook 里。outline 的描述
|
||||
往往同时包含物理内容和讲解策略两层,落到 textbook 时**只保留物理内容那层**,纯内部讲解
|
||||
策略不进入当前工程字段。
|
||||
|
||||
## 文风:理工男、性冷淡
|
||||
|
||||
行文应当**冷静、客观、信息密度高**。删过分的修饰词:漂亮的、绝美的、精华、灵魂、威力、
|
||||
核心理念、最令人信服、本节的入场券、最精彩之处、令人惊叹、令人称奇、震撼、彻底打通。
|
||||
保留必要的客观评议,例如反直觉的、值得指出的、量级正确的、与实测相符、超出本节范围、
|
||||
精度有限。客观评议不带情感色彩。
|
||||
|
||||
修饰语的判定标准是:拿掉之后物理陈述是否还成立。如果拿掉后陈述完整,那这个修饰语就是
|
||||
多余的。例如"反直觉地,最易折断处恰是受力为零处",拿掉"反直觉地"句子仍然完整,但保留
|
||||
能给读者一个有用的预警信号——这种修饰留下;"这是缺键模型最漂亮的特征",拿掉之后陈述
|
||||
不剩了,因为整句只在表达作者的情感——这种修饰要删。
|
||||
|
||||
## 关于"预告"与"回扣"
|
||||
|
||||
物理上确实需要前后引用时,用最简洁的方式说出来,不做铺垫:
|
||||
|
||||
- ✅ "下一节将用同一组论证处理固体表面。"
|
||||
- ✅ "由式 (N),$L_m$ 随 $T$ 单调下降。"
|
||||
- ❌ "这里埋一个伏笔——固体表面那一节会回扣,到时学生会看到……"
|
||||
- ❌ "至此从微观键能到宏观浸润的整条物理链条全部建立。"
|
||||
|
||||
判定标准:陈述未来内容用陈述句、不带情感、不带"伏笔""回扣""一里"等编排语言;要回引
|
||||
前文时直接用式号或一句"由前面的讨论"。
|
||||
|
||||
## proof 与 solution 也走纯推导风
|
||||
|
||||
proof / solution 是**一连串公式与最小衔接词**,不是讲解。一段证明里只允许出现:
|
||||
公式、用于把上一行连到下一行的最短连接词(代入、由、化简得、即得、解出、注意到、令)、
|
||||
以及一两句必要的物理含义说明。**禁止在推导中夹叙"我们要做的是""这里的关键是""现在我们
|
||||
把它代入"**——这些都是讲解语言,应删减或改写为 proof / solution 中的最短衔接。
|
||||
|
||||
衔接词举例:
|
||||
|
||||
```
|
||||
由 @骨架公式,
|
||||
$ sigma_(L G) = Delta U dot n_s . $
|
||||
代入 @缺键-亏损能 与 @缺键-面密度 得
|
||||
$ sigma_(L G) = (1 - zeta) L_m / N_A dot (rho N_A / mu)^(2\/3) , $
|
||||
化简即得 @缺键一般式。
|
||||
```
|
||||
|
||||
注意几个特征:每一步都有式号引用、连接词不超过两个汉字、没有"先做 A 再做 B"的元叙述、
|
||||
也没有对结果的情感评议。
|
||||
|
||||
如果证明确实需要分步走,可以用"第一步""第二步"或者直接用陈述把每一步定位——但每一步
|
||||
内部仍然是公式驱动。看 [samples.md](samples.md) 的 proof 范例。
|
||||
|
||||
## 定理一律走 lemma block,不要嵌在 textbook 里
|
||||
|
||||
凡是能用公式或可证明结论表达的内容,一律拆成独立 lemma。textbook 只负责把读者引到那个
|
||||
定理跟前,**不要在 textbook 里复述定理结论本身**。
|
||||
|
||||
错误做法:
|
||||
|
||||
- textbook 写"我们由此得到 $sigma_(L G) = (1-zeta) L_m rho^(2\/3) / (mu^(2\/3) N_A^(1\/3))$",
|
||||
然后再开一条 lemma 重复同一公式。
|
||||
|
||||
正确做法:
|
||||
|
||||
- textbook 写到"代入骨架公式即得液气界面张力的解析式"为止,立刻接 lemma block。lemma 的
|
||||
stmt 给完整结论。
|
||||
|
||||
## 排版规则
|
||||
|
||||
不要对任何知识点、概念、公式或专有名词做加粗处理。Typst 里加粗的写法是 `bold(...)`
|
||||
(**不是** `*...*`,星号是 markdown 的写法,与 typst 加粗语义混在一起容易踩坑)。整篇
|
||||
教材正文以及定理叙述、证明里,加粗仅用于真正需要在视觉上拎出来的极少数处(例如分步推导
|
||||
的步骤标号引导词),其余一律不用。
|
||||
|
||||
引入概念时不要在中文名后面加括号附上英文。英文术语只在该术语必须以英文形式被引用(如
|
||||
"LJ 势能"中的"LJ")或确有歧义需要消歧时才出现,否则只用中文。
|
||||
|
||||
## 数学排版(Typst 语法)
|
||||
|
||||
公式下标只用阿拉伯数字、希腊字母或单个英文字母,禁止用一个有含义的英文词或缩写当下标。
|
||||
入射量用 `i`、出射量用 `o`、表面用 `s`、体相用 `b` 等,单字母即可,不要写 `"in"` /
|
||||
`"out"` / `"surf"` / `"bulk"`。
|
||||
|
||||
求导符号里的 `d` 一定要用 Typst 的 `dif` 让它显示成正体。不要直接写 `d x`——那会被排
|
||||
成斜体的 d。例如:
|
||||
|
||||
```
|
||||
sigma dif A
|
||||
integral_0^L F dif x
|
||||
(dif gamma) / (dif epsilon)
|
||||
```
|
||||
|
||||
偏导符号用 `partial`,不要用 `diff`。`diff` 是 Typst 旧版本的偏导写法,新版本已经
|
||||
deprecated,写出来会触发 stderr 警告。
|
||||
|
||||
```
|
||||
(partial F) / (partial A)
|
||||
((partial sigma) / (partial T))_(A, V)
|
||||
```
|
||||
|
||||
虚数单位的 `i` 同理要用正体。Typst 里直接写 `i` 是斜体,需要先在文件开头定义一次
|
||||
|
||||
```
|
||||
#let ii = math.upright("i")
|
||||
```
|
||||
|
||||
之后所有用到虚数的地方都写 `ii`,例如 `e^(ii omega t)`。
|
||||
|
||||
加粗的数学符号(如矢量)用 `bold(...)`,不要用 markdown 风的 `*...*`。例如:
|
||||
|
||||
```
|
||||
bold(F) = m bold(a)
|
||||
nabla times bold(E) = - (partial bold(B)) / (partial t)
|
||||
```
|
||||
|
||||
正负号写 `plus.minus`,不要写 `pm`——后者在 Typst 数学里不存在。例如:
|
||||
|
||||
```
|
||||
x = plus.minus sqrt(b^2 - 4 a c)
|
||||
```
|
||||
|
||||
Typst 不存在 `varepsilon`。Epsilon 字母只有 `epsilon` 与 `epsilon.alt`,按需选用。
|
||||
|
||||
## 其它常用 Typst 数学排版备忘
|
||||
|
||||
- 标量斜体、矢量加粗(用 `bold(...)`)、单位与函数名正体(如 `op("sin")` 已内置,直接
|
||||
写 `sin x`、`cos x`、`ln x` 即可)。
|
||||
- 公式编号通过 `<标签>` 标记,引用用 `@标签`。同一课程内标签必须全局唯一。
|
||||
- 数学块用 `$ ... $`(块状)或行内 `$...$`。块状公式两端的 `$` 要有空格隔开,否则会被
|
||||
解析为行内。
|
||||
- 微分元等正体粒子(除 `dif` 外的几个):`partial`(偏导符号已经是正体)、单位向量带
|
||||
hat 用 `hat(x)`。
|
||||
- 希腊字母大小写区分:`sigma` / `Sigma`、`gamma` / `Gamma`。
|
||||
|
||||
如有更复杂的排版需求(如 cases 分支、矩阵、长公式断行)需要用到却不确定写法,**停下来
|
||||
问用户**或查 Typst 文档;不要凭直觉用 LaTeX 语法塞进去——很多 LaTeX 控制序列在 Typst
|
||||
里都不存在或语义不同。
|
||||
Reference in New Issue
Block a user