Typst - 为什么要用?一个简单的入门小 demo
Typst - 为什么要用?一个简单的入门小 demo
在中文互联网,Typst 的内容和入门似乎不是特别多,博客园的内容更是寥寥无几,在有了 Markdown 和 \(\LaTeX\) 的今天,好像 Typst 似乎没有必要存在,但是事实上,如果场景得当,我认为使用 Typst 是事半功倍的,正因为如此,我在越来越多场景下开始尝试使用 Typst ,并且惊叹于它在一些场景下的威力。
如果不了解 Typst 的,可以认为是一个试图以 Markdown 的写作简洁性来达到 \(\LaTeX\) 强大功能的排版语言,它是 Rust 实现的,也因此更快、更轻量。
适用场景
Typst 尽管有很多优点,但是我不会盲目推荐给别人,因为我认为 Typst 目前的生态位还不足以取代 \(\LaTeX\) ,因为在排版的精细度和宏包的建设上,还不及 \(\LaTeX\) ,目前我认为的情况是这样的:
| 语言 | 基本格式(标题、加粗……) | 增量编译 | 编号公式、定理 | 宏包 | 期刊认证 | 高精度排版 |
|---|---|---|---|---|---|---|
| MD | √ | √ | × | × | × | × |
| Typst | √ | √ | √ | √ | × | × |
| \(\LaTeX\) | √ | × | √ | √ | √ | √ |
基于上述的特点,Typst 合适的场景我认为是这样的:
- 理工科稍微复杂的作业,例如需要编号、定理、引理的数学系作业;
- 平常组会快速写幻灯片,没有 \(\TeX\) 源码的情况下从头写一份幻灯片;
- 想用简单的语言写一份无需出版的讲义;
- 希望配置简单,不占存储的场景;
目前我的组会幻灯片等也都开始使用 Typst Touying 来写了,我觉得在这类非出版场景下,Typst 很有竞争力。
入门 Demo:组会 PPT
配置 Typst (Windows)
Typst 配置起来非常简单,Windows 打开 Powershell,输入如下的命令:
winget install --id Typst.Typst
安装完后可以测试:
typst --version
如果出现版本号,那么就安装成功了. 在 VSCode 当中,建议安装 Tinymist Typst,因为这个插件可以进行实时预览,和 Markdown 一样丝滑体验。

PPT Demo 实践
首先我们先新建一个 .typ 文件并使用 VSCode 打开,然后在右上角可以分栏实时预览,当文件啥都没有的时候,实时预览是空白的,现在请粘贴如下代码:
#import "@preview/touying:0.6.1": *
#import themes.simple: *
#show: simple-theme.with(aspect-ratio: "16-9")
= Title
== First Slide
Hello, Touying!
#pause
Hello, Typst!

你看到的效果理应如上图所示,这里解释一下相应的代码:
#import "@preview/touying:0.6.1": *
这里实际上类似于 Python 的 import ,也就是将 touying 包中的所有内容导入。
#import themes.simple: *
#show: simple-theme.with(aspect-ratio: "16-9")
这一部分是调整使用主题以及显示比例,比例为 16:9 。想更换一些主题可以考虑:
#import themes.university: *
#show: university-theme.with(aspect-ratio: "16-9")
正文部分就是:
= Title
== First Slide
Hello, Touying!
#pause
Hello, Typst!
其中 = 和 Markdown 里面的 # 是一样的,就是表示标题,然后命令使用 # ,和之前一样.
数学公式
Hello, Typst! $alpha$ is inline. And formula:
$
integral_a^(b-1) f(x) "d"x = (b-a) f(xi), x in bb(R),数 学 真 奇 妙
$
Typst 的公式还是使用美元符号,如果美元符号不在一行就是跨行公式,否则就是行内公式。
Typst 公式语法相比 \(\LaTeX\) 有一部分改动,但是实际上很容易迁移,只需要记住几个原则:
- 无需使用反斜杠,单个字母就是正常输出,多个字母紧挨在一起就视为命令,中文也是如此,可以看到数学真奇妙这里每个字之间有空格.
- 正体不是
mathrm(),而是使用双引号包裹,看起来和正文一样; - 上下标不是花括号,而是小括号,正常输入小括号也会正常显示小括号,并且 Typst 默认自动调整括号大小,因此无需手动调整;
其实注意这些细微差异后,迁移是相当简单的。

浮动体
Typst 插图也使用浮动体来实现,但是用法很简单,结合自动补全非常轻松。

这里的实现非常直观,而且引用其实也很符合使用逻辑,#pagebreak 是分页符,当然如果不写也可以自然分页,这点我认为比 \(\LaTeX\) 强多了.
#pagebreak()
== Another Slide
Hello figures:
#figure(
image("image.png"),
caption: "An exmaple"
) <test-label>
We can see @test-label
总结
本文给出了一个简单的 Typst 范本,苦 \(\LaTeX\) 久矣的我终于找到了一个在轻量化场景下的替代品,可以去原仓库给个 Star 。

浙公网安备 33010602011771号