基于 Typst 的新一代的学术幻灯片(Slides)神器 —— Touying
基于 Typst 的新一代的学术幻灯片(Slides)神器 —— Touying
Typst 是为写作而诞生的基于标记的排版系统,Typst 的目标是成为功能强大的排版工具,并且让用户可以愉快地使用它。简单来说:Typst = LaTeX 的排版能力 + Markdown 的简洁语法 + 强大且现代的脚本语言。具体介绍你可以参考这篇文章。
而 Touying 是为 Typst 开发的幻灯片/演示文稿包。Touying 也类似于 LaTeX 的 Beamer,但是得益于 Typst,你可以拥有更快的渲染速度与更简洁的语法。
Touying 取自中文里的「投影」。相较而言,LaTeX 中的 Beamer 就是德文的投影仪的意思。
为什么使用 Touying
- 相较于 PowerPoint,Touying 并非「所示即所得的」,你可以使用一种「内容与样式分离」的方式编写你的 slides,尤其是 Typst 作为一个新兴的排版语言,提供了简洁但强大的语法,对于代码块、数学公式和定理等内容有着更好的支持。另一个优势是,在有着模板的情况下,用 Touying 编写 slides 要比 PowerPoint 快得多。因此 Touying 相较于 PowerPoint,更适合有着「学术写作」需求的用户使用。
- 相较于 Markdown Slides,Touying 所依托的 Typst 有着更强大的排版控制能力,例如页眉、页脚、布局和便捷的自定义函数,而这是 Markdown 很难具备、或者说很难做好的能力。并且 Touying 提供了
#pause和#meanwhile标记,提供了更为便捷的动态 slides 能力。 - 相较于 Beamer,Touying 有着更快的编译速度、更简洁的语法,以及更简单的自定义主题的能力。相较于 Beamer 动辄几秒几十秒的编译时间,Touying 的编译速度基本上能够维持在几毫秒几十毫秒的即时渲染。并且 Touying 的语法相较于 Beamer 更为简洁,也更容易更改模板主题,以及创建你自己的模板。在功能上,Touying 支持了 Beamer 大部分的能力,并且还提供了一些 Beamer 所没有的便利功能。
- 相较于 Polylux,Touying 提供了一种 oop 风格的语法,能够通过全局单例模拟提供「全局变量」的能力,进而可以方便地编写主题。并且 Touying 并不依赖
counter和locate来实现#pause,因此能有更好的性能。Touying 还提供了许多独特的功能,例如多种多样的动画能力。
一图流对比:
环境搭建
开始使用 Typst 是十分简单的,你可以选择 在线编辑,也可以选择本地编辑:
- 安装 VS Code 作为本地 Typst 编辑工具。
- 在 VS Code 中安装 Tinymist Typst 和 Typst Preview 插件。前者负责语法高亮和错误检查等功能,后者负责预览。
- 也推荐下载 Typst Companion 插件,其提供了例如
Ctrl + B进行加粗等便捷的快捷键。 - 你还可以下载我开发的 Typst Sync 和 Typst Sympy Calculator 插件,前者提供了本地包的云同步功能,后者提供了基于 Typst 语法的科学计算器功能。
- 也推荐下载 Typst Companion 插件,其提供了例如
- 打开任意工作区,并新建一个
.typ后缀的文件,例如main.typ。 - 最后用 VS Code 打开生成的目录,打开对应的
.typ文件,并按下Ctrl + K V进行实时编辑和预览。
示例代码
Touying 的语法很简单,你可以通过标题来划分 Slides。一个简单的示例:
1 | #import "@preview/touying:0.4.2": * |
更多的用法可以参考 Touying 中文文档。Touying 提供了许多内置主题模板,你可以在 这里 找到。
同时 Touying 通过 GitHub Wiki 提供了一个 Gallery 页面,可以在其中浏览由 Touying 用户创建的优雅幻灯片。例如 并不复杂的 Typst 讲座 就是使用 Touying 编写,你可以浏览 在线版本。
学术幻灯片应有的特性
让我们思考一下一个好的学术 Slides 工具应该有哪些特性?
- 可以在 Slides 里展示一个用户可见的进度条或当前剩余页数提示。
- 易于加入代码块,要有正确的高亮,以及最好能够做到可复制,而不仅是截一张图片。
- 能够通过脚本能力复用部分样式块,例如高亮、提示框或定理块等。
- 易于编写数学公式,最好是能直接复用已有的数学公式源文件,且易于编辑。
- 能够方便地设置文本样式,例如字号、字重和颜色。
- 能够复用已有模板,用户只需要做一些填充工作。
- 有「简单动画」能力,在 Powerpoint 指一部分动画效果,在 Beamer 里指
\pause命令。 - 有「演讲者视图」,可以展示仅演讲者可见的提示或笔记。
- 能够方便地随意放置图片、以及图片之间的层叠覆盖,即基于页面的绝对定位布局。
- 能够加入一些箭头、高亮或说明文本,对 Slides 的内容进行解释。
- 能够加入 GIF 动图或者视频。
- 能够通过在线链接进行更方便的分享和放映,也能分发普通 PDF 文件作为讲义。
- 能有动态过渡动画效果,例如淡入淡出、平滑等。
LaTeX 的 Beamer 能够实现 1~7,再使用类似于 pdfpc 这样的工具也能实现 8,但是 9~13 就很难做到了。
PowerPoint 作为最老牌的所示即所得 Slides 软件,可以很方便地支持 5~11,也能一定程度上实现 4 数学公式支持,但是并不方便。而无论是行内代码、代码块或伪代码,PowerPoint 的表现都不尽人意,主要还是在于不方便,不够自动化。而 1 的自动化进度条更是难以找到解决方案,主要根源在于 PowerPoint 并不是一个可编程的 Slides 软件,也许只能靠插件实现这些功能。
而 Typst 实际上能够实现 1~13 大部分能力,只有动态过渡动画效果目前还是难以实现。(后续支持 HTML 导出后 可能就可以实现了,未来可期?)
其中 1~6 可以通过定位类似于 Beamer 的 Polylux 实现,里面提供了一些简单的内置模板,当然你也可以实现一个自己的模板,相信使用 Typst 提供的简单语法,做到这件事并不难。
而关于 8,你可以使用 Touying HTML 导出 来实现放映,还支持导出为 PPTX 格式。或者你也可以选择使用 Touying 的 Pdfpc 支持或 Pympress 支持。
而关于 11,虽然 Typst 的 PDF 导出确实不支持 GIF 动图和视频,但是你可以使用 Typst Preview 插件实现 GIF 动图的预览,以及 Touying HTML 导出 也是支持 GIF 动图的。
而关于 9 和 10,你可以使用我开发的一个 Typst 包 Pinit,其提供了一个基于页面绝对定位与基于「图钉」pins 相对定位的能力,可以很方便地实现箭头指示与解释说明的效果。
下面我们具体介绍一下 Touying 的特殊且强大的能力。
现代化的模板
Touying 内置的模板足够美观大方,你可以简单地开箱即用。Touying 提供了许多内置主题模板,你可以在 这里 找到。
当然,基于 Typst 提供的简洁语法,你当然也可以自定义一个自己喜欢的主题。
动画
Touying 支持各种各样的动画命令,最简单的动画命令是 #pause 和 #meanwhile。
#pause 的用途很简单,就是用于将后续的内容放到下一张子幻灯片中,并且可以使用多个 #pause 以创建多张子幻灯片,一个简单的例子:
1 | #slide[ |
有些情况下,我们需要在 #pause 的同时展示一些其他内容,这时候我们就可以用 #meanwhile。
1 | #slide[ |
Touying 还支持 数学公式 内部、CeTZ 和 Fletcher 等 其他作图包 内部使用 #pause 和 #meanwhile 命令:
其中 CeTZ 和 Fletcher 是 Typst 里十分强大便捷的绘图包,可以对标 LaTeX 中的 TikZ。
样式块
Typst 提供了许多样式块或者定理块包,例如 showybox 和 ctheorems 包:
可以很方便地为你的 Slides 加入美观的样式块,更好地突出你需要展示的内容。
数学公式
Typst 的数学公式语法确实与 LaTeX 数学公式语法不同,这是为了实现更简洁易懂的数学公式语法,例如 (x + 1) / x >= 1 => 1/x >= 0 与 \frac{x + 1}{x} \ge 1 \Rightarrow \frac{1}{x} \ge 0,前者显然更为简洁易懂。
但如果你需要在 Typst 里实时书写和渲染 LaTeX 公式,也可以做到,你可以使用 MiTeX 包,可以随时复用你已有的 LaTeX 数学公式。
1 | #import "@preview/mitex:0.2.4": * |
相对定位标注
你可以使用我开发的一个 Typst 包 Pinit,其提供了一个基于页面绝对定位与基于「图钉」pins 相对定位的能力,可以很方便地实现箭头指示与解释说明的效果。
这种能力对编写 Slides 十分有帮助,你可以随意地对已有的内容使用箭头进行标注,达到和 PowerPoint 一样强大的任意布局能力。
放映工具
Touying 支持多种放映工具,常见方式如下:
纯 PDF 格式:导出纯 PDF 格式,使用任意的 PDF Viewer 或浏览器进行放映。
Pdfpc 格式:导出 PDF 文件和 .pdfpc 文件,然后使用 Pdfpc 工具进行放映,可支持「演讲者视图」功能,但缺点是 Windows 上安装不方便。
Pympress 放映:导出右侧带有笔记的 PDF 文件,然后使用强大的 PDF 放映工具 pympress 进行放映。
PowerPoint 放映:通过 Touying Exporter 工具导出为 PPTX 格式,其本质就是内嵌了许多 PNG 图片且带演讲者注释的 PPTX 打包文件,但用来放映也完全足够。
HTML 导出与在线放映:通过 Touying Exporter 工具导出为 HTML 格式,其使用了 impress.js 框架,将 Slides 导出为 SVG 格式并封装成了一个独立的 HTML 文件,既可以直接打开 HTML 文件,也可以将其部署到 GitHub Pages 等地方,打开链接直接在线放映。由于支持 GIF 动图和演讲者视图,还能线下或线上分发,因此这是最推荐的放映方式。
你还可以使用 Touying 提供的 Template 仓库,只需要鼠标点击几下复制一个仓库,就能通过 GitHub Pages 创建一个你自己的 在线放映链接。