论文插图画了仨小时?这个 Typst 绘图库十分钟就搞定
写论文最磨人的往往不是正文,而是那些示意图。为了画一张单位圆上的三角函数图,我曾对着绘图软件折腾了整整三个小时:手动拖线、反复对齐、导出后放大全是锯齿,最后还因为格式问题被返工。直到我遇到 CeTZ(CeTZ, ein Typst Zeichenpaket)——一个基于 Typst 的开源绘图库。如果你也在用 Typst 排版论文和笔记,这篇 Typst 画图教程想告诉你一件事:图表是可以"写"出来的,而且写出来的图,比手动画的更干净。
三行代码,画布就铺好了
CeTZ 的安装简单到让人怀疑是不是漏了什么:在文档开头写一行 #import "@preview/cetz:0.5.2",再包一个画布就行:
#cetz.canvas({
import cetz.draw: *
line((0, 0), (3, 0))
circle((1.5, 0), radius: 1)
})
编译完,一根线段和一个圆就出现在文档里。它的 API 灵感来自 TikZ 和 Processing:坐标就是 (x, y) 点,图形就是一个个函数,参数写在括号里,直觉到几乎不用查文档。第一次上手 Typst 绘图,你只需要熟悉 line、circle、rect 这几个词,就能画出像样的东西了。
从一条线段,到一张能直接放进论文的图
回到开头那张三角函数图。单位圆、坐标轴、网格、sin/cos 的投影线段、角度标注——CeTZ 几乎都给了现成的原语:circle 画圆,line 画线,angle 标角度,再用 content 把公式贴到指定锚点上。剩下的就是把它们叠起来,像拼积木一样 🧩:
这张图全程只有几十行代码,而且每根线的位置都是参数。想改半径?改一个数字,全图联动。这种"图形即代码"的体验,是拖拽软件给不了的。
当你开始画更复杂的图形,CeTZ 的硬实力才真正露出来。两个圆环要做交集、差集?内置的布尔运算直接搞定,效果如下:
配合 rotate、scale、translate 变换,以及 group 把一组图形打包成带锚点的整体,几乎任何示意图都能用 Typst 绘图拼出来。
连元素周期表都画得出来,还愁什么图表
如果你觉得上面只是小儿科,看看 CeTZ 官方仓库里的 gallery:整张 118 个元素的周期表、表达式语法树、三维正弦波,全部由 Typst 代码生成。比如这张周期表,每个格子都是程序排出来的,颜色按元素类别统一映射,严谨得可以直接投期刊:
它的坐标系系统也比想象中灵活——可以注册自定义坐标解析器,甚至支持正交投影和透视投影,画三维示意图同样不在话下。
内置形状不够用?那就自己造一个
CeTZ 允许你注册自己的 mark(相当于自定义形状),也能扩展坐标解析逻辑。想找 Typst 图表库推荐的话,它还有配套生态:cetz-plot 负责折线图、柱状图、饼图,cetz-venn 负责维恩图,装上就能用。想看更多玩法,把仓库 git clone https://gitcode.com/gh_mirrors/ce/cetz 下来,gallery/ 和 tests/ 目录里有大量现成示例,翻一翻总会有灵感。
三个亲测有效的使用小习惯
- 依赖版本号务必写全,比如
@preview/cetz:0.5.2,漏掉补丁版本可能拉到旧版 API,报错时很难排查。 - 样式作用域用
group包一层再set-style,不然样式容易互相污染,图形越画越多时尤其头疼。 - 想学某个函数怎么用,直接去仓库
tests/目录翻对应用例,图文对照比翻文档快得多。
下一次,十分钟就够
那张让我折腾三小时的三角函数图,现在用 CeTZ 从零写到排版完成,十分钟出头。CeTZ 没有把绘图变简单,它只是把"画图"变成了"写代码"——而写代码是可以复用、可以放进版本管理里的。如果你也受够了在绘图软件里手动对齐,不妨打开正在写的 Typst 文档,import 一行,试试看。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






