【已修复】代码块中西文间有多余的空格?
✅ Typst 0.13 已修复
#5753 已默认设置 cjk-latin-spacing
在 raw
中为 false
。
首先,你可能需要参考 为什么中文字体这么奇怪 对正文字体进行配置。然后参照 为什么代码块里面的中文字体显示不正常? 对于代码块内中文的进行修改。
它为什么是一个 Bug?
这是一个被官方开发者承认的 Bug(参见 The feature CJK-Lantin-Spacing Misapplied on the Raw block),并且需要注意的是,它可能看起来无关紧要,但是实际上有很大的造成误解的风险。例如,对于这种情况,这个特性就是无害的:
cpp
while (true) {} // 典型的 Textbook 式死循环
但对于
cpp
printf("这是%d段代码", 1);
就是有害的。因为在这种情况下,如果我们在编译的结果中在 %d
和 段代码
之间添加一个空格,它有歧义,因为我们无法判断它是否是一个空格还是一个中西文间距。
typst
#show raw: set text(font: ("DejaVu Sans Mono", "Source Han Serif SC"))
#raw(lang: "cpp", "printf(\"这是%d段代码\", 1)")

如何解决?
只要为源代码块取消这个特性即可。
typst
#show raw: set text(cjk-latin-spacing: none)