Typst 入门
Table of Contents
前言
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 会加粗,然后一段间距,然后是描述。如果描述是多行的,那么第二行开始都会有一个缩进。