代码高亮与三盒代码块
代码高亮由构建期编译的 tree-sitter 文法驱动——正经 GLR 解析器,不是正则拼凑;同一套解析表既供浏览器端 wasm 在线解析,也供引擎的原生测试静态链接,高亮结果逐字节确定。目前内置 js、ts、json、python、cpp、rust,以及 Typesetter 自己的 tsm(本站文档的示例就是它高亮的)。
围栏与参数
三个反引号开围栏,语言标签后可带参数;行号、行高亮、网格换行由引擎排布:
```js(lineNo: 1, hl: "2")
const memo = new Map();
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
```
lineNo: 1从 1 起显示行号(行号不可复制,复制得到的就是代码本身)hl: "2"或hl: "2,5-7"高亮指定行wrap: false关闭网格换行
换行发生在字符网格上:西文按 1ch、中文按实测宽度折算列数,续行悬挂缩进两列;在注释内断行时续行对齐到注释内容列。中文可在任意两字间换行,并遵守禁则(不在行首出现收字符、不在行尾出现开字符)。
三盒代码块(结构化边注)
sidecar 参数把每行代码在标记处切开:左侧是代码,右侧是结构化边注——边注是完整的行内排版流,公式、引用、加粗都可用,且与代码行严格等高对齐:
```js(sidecar: "///", lineNo: 1)
const memo = new Map(); /// 记忆化容器,均摊 $O(1)$ 查询
function fib(n) {
if (n <= 1) return n; /// *基例*:$n <= 1$ 直接返回
return fib(n - 1) + fib(n - 2);
}
```
const memo = new Map();
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
行号、代码、边注三列各自自治,仅共享「同一逻辑行等高」这一个约束。