Skip to main content

typst-writing-conventions

当编辑/创建 .typ 文件时,必须使用本技能以确保符合 Typst 语法规范(如 subset→subset.eq, \sigma→sigma, integral→integral 等)、符号映射规则、文档层级结构和写作风格约定。尤其适用于新增数学公式较多的笔记时。

Ir a la instalación

Datos de origen

Repositorio
locusyuri/MathRepo
Última actividad en el origen
2 de septiembre de 2026 a las 10:54
Idioma detectado de SKILL.md
chino
Estrellas
6
Forks
0

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
typst-writing-conventions
description
当编辑/创建 .typ 文件时,必须使用本技能以确保符合 Typst 语法规范(如 subset→subset.eq, \sigma→sigma, integral→integral 等)、符号映射规则、文档层级结构和写作风格约定。尤其适用于新增数学公式较多的笔记时。
user_invocable
false
## 1. 文档结构 ### 层级体系 | 语法 | 层级 | 含义 | |------|------|------| | `#part("...")` | Part | 大知识模块分组 | | `= ...` | Chapter(一级标题) | 完整知识单元 | | `== ...` | Section(二级标题) | 章内主要知识点 | | `=== ...` | Subsection(三级标题) | 节内细分 | ### 标题规则 - 标题标记 `=` 后必须有空格:`= Title`(正确)vs `=Title`(错误) - 不要跳级使用标题(如从 `=` 直接到 `===`) --- ## 2. 文本格式 | 效果 | 语法 | |------|------| | 加粗 | `*text*` | | 斜体 | `_text_` | | 行内代码 | `` `code` `` | | 脚注 | `#footnote[...]` | | 垂直间距 | `#v(1cm)` | | 行内高亮 | `#highlight[text]` | ### 列表 - 无序列表:`- item` - 有序列表:`1. item` / `2. item` - 嵌套:使用缩进(Tab 或两空格) --- ## 3. 数学公式 ### 基本用法 - 行内公式:`$ ... $`(与文本同行) - 行间公式(display math):`$ ... $`(单独成段,前后有空行或换行) ### 符号映射(LaTeX → Typst) | LaTeX | Typst | |-------|-------| | `\mathbb{R}` | `bb(R)` | | `\mathcal{F}` | `cal(F)` | | `\mathscr{M}` | `scr(M)` | | `\to`, `\rightarrow` | `->` | | `\Rightarrow` | `=>` | | `\Leftrightarrow` | `<=>` | | `\infty` | `oo` | | `\subseteq` | `subset` | | `\cup` | `union` | | `\cap` | `inter` | | `\notin` | `in.not` | | `\neq` | `!=` | | `\land` | `and` | | `\lor` | `or` | | `\lnot` | `not` | | `\circ`(复合) | `compose` | | `\preceq` | `prec.eq` | | `\oplus`(对称差) | `plus.o` | | `\forall` | `forall` | | `\exists` | `exists` | | `\partial` | `partial` | | `\mathrm{d}x` | `dif x` | | `\liminf` | `liminf` | | `\limsup` | `limsup` | | `\sup` | `sup` | | `\inf` | `inf` | | `\overline{X}` | `overline(X)` | | `\chi_A`(特征函数) | `chi_A` | | `\backslash` | `backslash` | | `\int` | `integral` | | `\iint`, `\iiint` | `integral.double`, `integral.triple` | | `\oint` | `integral.cont`(闭合环路线积分) | | `\cdot` | `dot` | | `\sim` | `~` 或 `approx` | | `\text{...}` | `text("...")`(**必须用字符串引号**) | | `\left(`, `\right)` | 无对应命令,Typst 自动缩放括号 | | `\left[`, `\right]` | 无对应命令,Typst 自动缩放方括号 | ### 硬规则(必须遵守) 1. **不属于符号**:写 `$in.not$`,不要写 `$notin$` 2. **子集**:统一写 `$subset$` 3. **箭头**:`$->$`、`$<=>$`,不保留 LaTeX 宏名 4. **不等于**:`$!=$`(注意空格:`$!= $` 或 `$a != b$`) 5. **函数复合**:`$compose$` 6. **微分符号**:使用正体 `dif x`、`dif t` 7. **导数点记号**:`dot(x)`、`dot.double(x)`、`dot.triple(x)` 8. **积分号**:用 `integral`,不是 `int`。二重/三重:`integral.double`、`integral.triple` 9. **`text()` 必须用字符串参数**:写 `text("something")`,不是 `text(something)` 10. **点乘**:写 `a dot b`,不用 `a cdot b`(`cdot` 不存在) 11. **`\left(`/`\right)` 不存在**:Typst 自动缩放括号,不需要 `\left`/`\right` ### 常见陷阱 #### 裸下标问题 Typst 不支持 `$_x$`,下标 `_` 前必须有主体。 ```typst // 错误 $_x$ // 正确:空主体下标 $""_x$ ``` #### 多字母变量问题 Typst 将连续字母识别为内置函数名(如 `sin`、`exp`),或把相邻的单字母变量合并为一个未知多字母变量,导致编译错误。 ```typst // 正体多字母变量:用引号包裹 $"ext"$, $"const"$, $"max"$ // 斜体多字母变量:用空格分开 $e x t$ // 示例 $bold(F)_i^("ext")$ // 外力 ``` **相邻单字母变量之间必须用空格分隔**,否则整体被识别为一个未知变量(报 `unknown variable: xy` 等): ```typst // 错误 — 字母连写被合并为单个未知变量 $xy$ // → unknown variable: xy $2xy$ // → unknown variable: xy $2 x y z$ 若写成 $2xyz$ // 正确 — 变量与变量之间留空格 $x y$ $2 x y$ ``` 数字紧跟单个变量(如 `$2x$`)本身合法,但建议统一写成 `$2 x$` 保持风格一致。 **排查指南**:遇到 `unknown variable` 错误时,优先排查两类根因——多字母连写(如 `xy`、`2xy`)与 LaTeX 宏残留(如 `cdot`、`int`、`infty`)。 #### 组件参数中的引号嵌套 组件的 `name:` / `title:` 等字符串参数内部**不能直接嵌套双引号**,否则字符串提前终止,报 `unclosed delimiter` / `expected comma`: ```typst // 错误 — 内层双引号截断了外层字符串 #note(title: "On the Usage of "Holomorphic" and "Analytic")[...] // 正确 — 内层改用单引号 #note(title: "On the Usage of 'Holomorphic' and 'Analytic'")[...] ``` #### 组件 name/title 参数中的数学公式 `name:` / `title:` 参数可以传字符串(`"..."`)或 content(`[...]`),两种形式都能正确渲染其中的 `$...$` 数学公式。模板已通过 `eval(name, mode: "markup")` 自动解析字符串中的 markup 语法。 ```typst // 两种写法都正确,数学正常渲染 #definition(name: "$L^p$ Space")[...] #definition(name: [$L^p$ Space])[...] // 推荐:字符串形式更简洁 #theorem(name: "Properties of $sin$ and $cos$")[...] ``` **注意**:使用字符串形式时,`$...$` 内的 Typst 数学符号必须正确(如 `!=` 而非 `neq`),否则 `eval` 解析时会报 `unknown variable` 错误。 #### 分数的分子/分母非单因子时必须加括号 `/` 只把紧邻的**单个因子**作为分子和分母。分母(或分子)含多字符结构或运算时必须加括号,否则解析错误。 **绝对值的特殊处理**:使用 `abs()` 函数形式后无需再加外层括号(`abs()` 自身作为一个完整因子)。但若使用 `|...|` 形式则必须加外层括号(见下方「绝对值用 abs(xxx),不用 |xxx|」陷阱): ```typst // 错误 — 分母只解析出单个因子,多字符结构被截断 $z^5 / |z|^4$ // 分母只取到 "|",剩余 "z|^4" 并排在分数旁 $x + y / 2$ // 实际是 x 加上分数 y/2 // 正确 — abs() 形式(推荐,无需额外括号) $z^5 / abs(z)^4$ $z / abs(z)$ $x / abs(z)$ $abs(f(z)) / abs(g(z))$ // 正确 — 普通非单因子加括号 $(x + y) / 2$ // 想要 (x+y)/2 必须加括号 $z^5 / (w^4)$ // 含运算的幂次也加括号保险 ``` **判定规则**:分子/分母只要不是单个字母或数字(可带上下标,如 `x_i`、`z^2`),就必须加括号。**但 `abs(...)` 作为一个整体函数调用,可以视为单个因子**——这就是统一使用 `abs()` 形式的另一优势。 #### 绝对值用 abs(xxx),不用 |xxx| Typst 数学模式中的 `|...|` **不会自动调整大小**,且在分式、根号、嵌套结构中容易被解析为独立竖线元素(见上文"分数的分子/分母非单因子时必须加括号"陷阱)。**统一使用函数形式 `abs(xxx)`**,自动缩放并避免歧义: ```typst // 错误 — |xxx| 不会自动缩放,且容易被误解为单字符 $|z - z_0|$ $|f(z)| / |g(z)|$ $root(n, |a_n|)$ // 正确 — abs() 自动缩放,且作为整体单元参与解析 $abs(z - z_0)$ $abs(f(z)) / abs(g(z))$ $root(n, abs(a_n))$ ``` **判定规则**:所有形如 `|表达式|` 的绝对值(含 `|z|`、`|c_n|`、`|z - z_0|`、`|f(z)|` 等)一律改写为 `abs(表达式)`,不论出现在正文公式、分式分子分母、根号内、积分限、求和限等任何位置。 **非绝对值的竖线严禁转换**:`|` 在数学模式中还有其他用途,批量替换前必须逐行分类排查(统计每行 `|` 个数,奇数行必然含非绝对值竖线): | 用途 | 示例 | 处理 | |------|------|------| | 集合构建分隔符 | `{(x, y) \| x, y in bb(R)}` | 保留原样(本仓库写法为 `\|`) | | 整除符号 | `$q \| k_1 - k_2$`(q 整除 k₁−k₂) | 保留原样 | | 分隔符参数 | `delim: "\|"` | 保留原样 | **批量替换流程要求**:先全量统计含 `|` 的行并按奇偶分类 → 偶数行逐行配对转换(行内配对,禁止跨行正则)→ 奇数行逐行人工判定 → 转换后 grep 检查 `abs(` 内是否误含 ` in `、`\|` 等集合构建特征 → `typst compile` 验证退出码为 0。跨行正则(如 `\|([^|]+)\|` 直接作用于全文)会把不同行的孤立竖线错误配对,造成大面积损坏。 **积分/求和限中的集合描述例外**:形如 `integral_({|f| > M})` 的集合描述中的 `|f|` 表示集合定义中的属性条件,作为花括号集合构造语法的一部分,**保持原样不改**——这是集合描述的语法元素,不是绝对值表达式: ```typst // 保持原样 — 花括号内的集合描述语法 $integral_({|f| > M}) |f| dif mu$ // 集合 {|f| > M} 内的积分 // 但若此处出现了真正的绝对值计算且需要自动缩放,仍应改用 abs() $abs(f)$ ``` #### n 次方根用 root(n, x),不用 sqrt 二参形式 `sqrt(x, n)` 的第二参数(根指数)不能是函数调用或含绝对值的表达式(如 `abs(a_n)`),会报 `unexpected argument`。统一改用 `root(指数, 被开方数)`: ```typst // 错误 — sqrt 第二参数不接受函数调用 $sqrt(n, abs(a_n))$ // 正确 — root(指数, 被开方数) $root(n, abs(a_n))$ $root(n, n)$ // n 次根号 n ``` #### 标点位置 独立数学公式的句号等标点必须写在数学环境内部: ```typst // 错误 $ G(a_n; x) = sum_(n=0)^oo a_n x^n $. // 正确 $ G(a_n; x) = sum_(n=0)^oo a_n x^n. $ ``` #### Display math 保持原样 如果原内容是 display math,不要擅自改写成行内数学。 #### 括号自动缩放 Typst 自动缩放普通括号,通常不需要 LaTeX 的 `\left`/`\right`。需要长竖线时使用 `lr(...)`。 #### `int` → `integral` 遗忘 LaTeX 习惯用 `\int`,Typst 必须写 `integral`。`int` 是未知变量,会报错。 ```typst // 错误 $int_0^1 f(x) dif x$ // 正确 $integral_0^1 f(x) dif x$ // 二重积分 $integral.double_S f dif S$ // 闭合曲面积分(无 oint 符号)
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub