Typst 入门

前言

Typst 是一个基于标记语言的排版系统,它的追求是和 Latex 一样强大,但是设计上更加易用。与 Latex 相比,优点是标记语言的语法更简单,不会出现一大堆的 \function{}, 整体界面看上去十分简洁;其次是配置起来也比 Latex 要方便不少,把整个文档分为各种模块,很便捷地可以对各个模块进行调整;最后是编译速度快,同时支持增量更新,在 Emacs 上使用十分良好。当然,缺点目前我自己道听途说,当然是因为这是新项目,生态没有那么完善,各种插件、第三方库、模板肯定没有 Latex 那么齐全。

官方给出的文档其实已经十分详细:Typst Documentation. 在摸爬打滚了一下午之后,发现还是需要先学习它的语法,熟知各种模型,不然最后可能东拼西凑得到一些零散的知识概念,以后需要了又要重新来一遍。

安装和命令行

sudo pacman -S typst

安装之后就可以使用 typst 命令了。显示帮助使用 typst help.

文件后缀

文件后缀是 .typ, 即 typst 的前三个字母。

编译

typst compile input.typ [output.pdf]

若没有指定输出文件,则会在 input.typ 的目录下生成同名的输出文件。输出格式可以是: pdf, png, svg.

增量更新

typst watch input.typ --open

监听文件,若文件发生变化则尝试增量编译。在 Emacs 中编辑后保存,用浏览器或者 pdf-tool 打开的 pdf 会自动更新,几乎算是“所见即所得”了。

--open 在执行命令之后用默认的应用打开输出的 pdf.

–root

用于指定工作目录,之后调用包的时候,根目录就是这个指定的 root 目录。

标记语法

块元素

  • 文本块:标记块元素被一对方括号 [...] 包裹,在其内部可以使用标记语言。默认情况下,整个页面就是在一个标记块下。
  • 代码块: #function() or #{...}, 用于执行代码、调用函数。在块元素内部,需要在前面加 # 来表示执行函数,不然会被解析为普通文本
  • 数学块: $...$ 表示行内数学公示,而在首尾都空出一个空格 $ ... $ 表示数学公式块,可以在内部换行。数学的语法和 Latex 大不相同。

块元素可以互相嵌套,比如说标记块内加一个代码块,代码块中加一个数学块,然后数学块中又可以嵌套一个标记快,因此配置可以做得十分灵活。

标记

本质上调用的还是函数,只是因为常用,所以做了一些缩写。

打个比方,粗体对应的函数是 strong(delta: int = 300, content), 传入的参数有两个,第一个是可选参数,表示粗体的 weight 粗度(?),第二个是要加粗的文本。

如果每次加粗都要 strong(text) 是有点太麻烦了。所以有个缩写 *text*, 它本质上也是一个函数,把包裹的文本作为 content 参数传入。

这些标记缩写,都是只在标记块中有效。

断行

  • 段落:两段之间用一个空行分隔
  • 断行:用一个反斜杠 \ 表示断行

强调

  • *strong* 加粗文本
  • _emphasis_ 下划线

注释

  • /* block */ 块注释
  • // 行注释

标注 label

在元素的后面使用 <name> 来创建一个名为 name 的 label, 可以用于链接和跳转,也可以对指定名称的 label 修改样式。

链接

可以直接是一个 url, 它会被识别为连接,或者用函数 link(target, content)#link(target)[content], 其中 target 是链接的目的地,可以是 label, 可以是 location, 也可以是一个字典包含页面的页码(从 1 开始)和 x,y 偏移(相对于页面上边和左边)。

列表

  • - item 表示无序列表
  • + item 表示有序列表,它会自动编号

术语

语法: / Term: description, 它类似于数学材料中的“定义”、“定理”等字眼。首先必须以斜杠开头,一个空格,加上术语的名字,一个冒号,后面是叙述。渲染出来的效果是: Term 会加粗,然后一段间距,然后是描述。如果描述是多行的,那么第二行开始都会有一个缩进。

Powered by Org Mode.