论文插图画了仨小时?这个 Typst 绘图库十分钟就搞定

论文插图画了仨小时?这个 Typst 绘图库十分钟就搞定

【免费下载链接】cetz CeTZ: ein Typst Zeichenpaket - A library for drawing stuff with Typst. 【免费下载链接】cetz 项目地址: https://gitcode.com/gh_mirrors/ce/cetz

写论文最磨人的往往不是正文,而是那些示意图。为了画一张单位圆上的三角函数图,我曾对着绘图软件折腾了整整三个小时:手动拖线、反复对齐、导出后放大全是锯齿,最后还因为格式问题被返工。直到我遇到 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 绘图,你只需要熟悉 linecirclerect 这几个词,就能画出像样的东西了。

从一条线段,到一张能直接放进论文的图

回到开头那张三角函数图。单位圆、坐标轴、网格、sin/cos 的投影线段、角度标注——CeTZ 几乎都给了现成的原语:circle 画圆,line 画线,angle 标角度,再用 content 把公式贴到指定锚点上。剩下的就是把它们叠起来,像拼积木一样 🧩:

Typst 绘图示例:单位圆上的三角函数示意图

这张图全程只有几十行代码,而且每根线的位置都是参数。想改半径?改一个数字,全图联动。这种"图形即代码"的体验,是拖拽软件给不了的。

当你开始画更复杂的图形,CeTZ 的硬实力才真正露出来。两个圆环要做交集、差集?内置的布尔运算直接搞定,效果如下:

Typst 绘图能力演示:圆环布尔交集运算

配合 rotatescaletranslate 变换,以及 group 把一组图形打包成带锚点的整体,几乎任何示意图都能用 Typst 绘图拼出来。

连元素周期表都画得出来,还愁什么图表

如果你觉得上面只是小儿科,看看 CeTZ 官方仓库里的 gallery:整张 118 个元素的周期表、表达式语法树、三维正弦波,全部由 Typst 代码生成。比如这张周期表,每个格子都是程序排出来的,颜色按元素类别统一映射,严谨得可以直接投期刊:

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 一行,试试看。

【免费下载链接】cetz CeTZ: ein Typst Zeichenpaket - A library for drawing stuff with Typst. 【免费下载链接】cetz 项目地址: https://gitcode.com/gh_mirrors/ce/cetz

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值