Typst - 为什么要用?一个简单的入门小 demo

Typst - 为什么要用?一个简单的入门小 demo

在中文互联网,Typst 的内容和入门似乎不是特别多,博客园的内容更是寥寥无几,在有了 Markdown 和 \(\LaTeX\) 的今天,好像 Typst 似乎没有必要存在,但是事实上,如果场景得当,我认为使用 Typst 是事半功倍的,正因为如此,我在越来越多场景下开始尝试使用 Typst ,并且惊叹于它在一些场景下的威力。

如果不了解 Typst 的,可以认为是一个试图以 Markdown 的写作简洁性来达到 \(\LaTeX\) 强大功能的排版语言,它是 Rust 实现的,也因此更快、更轻量。

适用场景

Typst 尽管有很多优点,但是我不会盲目推荐给别人,因为我认为 Typst 目前的生态位还不足以取代 \(\LaTeX\) ,因为在排版的精细度和宏包的建设上,还不及 \(\LaTeX\) ,目前我认为的情况是这样的:

语言 基本格式(标题、加粗……) 增量编译 编号公式、定理 宏包 期刊认证 高精度排版
MD × × × ×
Typst × ×
\(\LaTeX\) ×

基于上述的特点,Typst 合适的场景我认为是这样的:

  1. 理工科稍微复杂的作业,例如需要编号、定理、引理的数学系作业;
  2. 平常组会快速写幻灯片,没有 \(\TeX\) 源码的情况下从头写一份幻灯片;
  3. 想用简单的语言写一份无需出版的讲义;
  4. 希望配置简单,不占存储的场景;

目前我的组会幻灯片等也都开始使用 Typst Touying 来写了,我觉得在这类非出版场景下,Typst 很有竞争力。

入门 Demo:组会 PPT

配置 Typst (Windows)

Typst 配置起来非常简单,Windows 打开 Powershell,输入如下的命令:

winget install --id Typst.Typst

安装完后可以测试:

typst --version

如果出现版本号,那么就安装成功了. 在 VSCode 当中,建议安装 Tinymist Typst,因为这个插件可以进行实时预览,和 Markdown 一样丝滑体验。

IMG-D22450BCD7D003CF330190BF32A08208

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!

IMG-A5E445521503C340285D8B3F86F51CD1

你看到的效果理应如上图所示,这里解释一下相应的代码:

#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\) 有一部分改动,但是实际上很容易迁移,只需要记住几个原则:

  1. 无需使用反斜杠,单个字母就是正常输出,多个字母紧挨在一起就视为命令,中文也是如此,可以看到数学真奇妙这里每个字之间有空格.
  2. 正体不是 mathrm() ,而是使用双引号包裹,看起来和正文一样;
  3. 上下标不是花括号,而是小括号,正常输入小括号也会正常显示小括号,并且 Typst 默认自动调整括号大小,因此无需手动调整;

其实注意这些细微差异后,迁移是相当简单的。

IMG-CE68B2EAE990681CC2C6FD10B767D87B

浮动体

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

IMG-876F9CB90C4475590138E812B693B798

这里的实现非常直观,而且引用其实也很符合使用逻辑,#pagebreak 是分页符,当然如果不写也可以自然分页,这点我认为比 \(\LaTeX\) 强多了.

#pagebreak()

== Another Slide

Hello figures:

#figure(
    image("image.png"),
    caption: "An exmaple"
) <test-label>

We can see @test-label

总结

本文给出了一个简单的 Typst 范本,苦 \(\LaTeX\) 久矣的我终于找到了一个在轻量化场景下的替代品,可以去原仓库给个 Star 。

posted @ 2026-01-20 10:57  xzqbear  阅读(0)  评论(0)    收藏  举报