typst 是一门新的用于排版标记语言,对标的是 LaTeX。我早就苦 LaTeX 久矣,看到群里有群u分享此引擎,就第一时间上手体验了一番,以下是我体验了2~3小时,排了我才写的一篇实验报告(图死活插不进 LaTeX 里,怀疑是图片格式啥的问题)后得到的第一印象:

Disclaimer:笔者乃排版小白,LaTeX 小白,typst 也仅粗略阅读了文档,如果下文有事实错误敬请指正。

先讲好的

  • 语法方面,实际上分成了三个大的模式——标记模式或者说我想称为文稿模式,用来直接撰写文档;数学模式,自然是为了排数学公式;代码模式,用来控制排版、插入界面元素等;
  • 代码模式的语法给我一种“JavaScript”味,同时似乎可以算图灵完备(草),还支持各种数据类型,可以说是一门小脚本语言了。同时,其中的大部分操作相当符合(我的)直觉,基本所有操作的做法都和我预料的一致,和 LaTeX 形成了鲜明的对比。
  • 代码模式中比较新颖的东西在 setshow 两个关键字。前者用来给所有后续出现的所有对某个函数的调用(是的,所有界面元素是由函数产生 content 对象生成的!)指定一些默认参数,比如我 #set text(size: 14pt) 就会把后续的文本全部变成 14pt 大小;show 函数则是为了重新定义一个内置函数(在标记模式下,整个文本实际上可以视为一系列内置函数调用的集合,如 (text, text, list, enum, text)),且实际上可以重定义的不止函数,还包括字符串甚至整个文档;
  • 代码模式甚至支持 Lambda 函数等功能,以及从文件中加载数据,让我们在排大表格等结构时不用费力把原始数据转换成排版系统期望的格式(说你呢,LaTeX)

再讲不好的

  • 文档十分弱,官网基本是唯一的文档来源,且其中例子也不丰富,甚至对 show 关键字的讲解都没有一个很详细的介绍;
  • 社区基本不存在——总不可能指望一个新排版系统有CTAN那么丰富的社区吧。这造成 algorithmicamsmath 这些很多人赖以生存的库在 typst 世界不存在;
  • 提供的内置排版函数等比较生硬,感觉要处理一些特殊情况就需要大动干戈(但写出来的代码语法还是很直观易读),如首页不想打页眉之类的。但实际上没有人阻止你用内置的最基础元素重新车一套“标准库”出来;
  • 没有类似 LaTeX 的 article.cls 的“大预设”,其中有调好的各种参数(如 \Large 等各字体大小名的具体数值、页眉与正文的距离等),在自己搓模板时需要手写;
  • 数学模式造了一套新语法,是否会造成过高的迁移成本?
  • CJK 支持比较差,除了最最最基础的 CJK 禁则处理外,没有任何其它支持。具体可以看我提的 Issue: https://github.com/typst/typst/issues/276
如图,连续标点的压缩、全半角字符之间的间距,均没有处理

总的说来,我还是对 typst 充满信心的,目前本项目正处理急速上升期,Issue 大量提出,开发者也十分活跃。希望这一势头还能持续下去。

【本来只发在了 Misskey 上,想来篇幅也不短了值得在 blog 上也发一次,就这样做了】


不想被自己的惰性打败。