使用Typst写作
让我们开始吧!假设您要为大学写一份技术报告,包含正文、数学公式、标题和图表。如果您选择使用Typst在线应用,那么请创建一个新项目。创建后会转到编辑器,您会看到两个面板:左边是撰写文档用的编辑面板,右边是查看渲染所得文档的预览面板。
【译注】如果您选择本地使用,那么请参考中文社区导航站「快速开始」,安装VS Code和Tinymist Typst插件,创建后缀为.typ的文件,再单击右上角预览按钮。VS Code整体界面与Typst在线应用类似。

您在心中已对报告有了不错想法,那么从报告的引言写起吧。在编辑面板中输入一些文本,您会发现它们立即显示到预览的页面上。
【译注】建议您本章先尝试英文。Typst支持中文,但需要设置字体,而设置方法到下一章才会讲到;设置字体后,本章的内容也适用于中文。
In this report, we will explore the
various factors that influence fluid
dynamics in glaciers and how they
contribute to the formation and
behaviour of these natural structures.

在本教程中,我们将展示像上面这样的代码示例。和应用中一样,第一个面板包含标记文本,第二个面板展示文档预览。页面会被缩小到示例的大小,以便您看得更清楚。
下一步是添加章节标题并强调某些文本。Typst使用简单标记设置最常见的格式。要添加章节标题,请输入=字符;要用斜体强调,请在文本两侧添加_下划线_。
= Introduction
In this report, we will explore the
various factors that influence _fluid
dynamics_ in glaciers and how they
contribute to the formation and
behaviour of these natural structures.

这很简单!要添加新段落,只需在两行文本间加一个空行。如果该段落需要子标题,请输入==而非=。=字符的数量代表标题的嵌套级别。
现在我们想列出一些影响冰川动力学的因素。为此,我们使用编号列表。我们在列表每项的行首输入+字符,让Typst对项目自动编号。
+ The climate
+ The topography
+ The geology

如果我们想添加不编号的项目符号列表,就把+字符改成-字符。我们还可以嵌套列表:例如,要往编号列表的第一项添加一个不编号的子列表,可以把项目符号列表整体缩进,放进外层列表第一项中。
+ The climate
- Temperature
- Precipitation
+ The topography
+ The geology

插入图片
您认为报告配上图片会更好,那我们就来插入一张。Typst支持PNG、JPEG、GIF、SVG、PDF和WebP格式的图片。要将图片文件添加到项目中,请先单击左边栏的箱子图标以打开文件面板。这里列出了项目中的所有文件。目前只有一个文件:您正在编辑的Typst主文件。要上传另一个文件,请单击右上角带有箭头的按钮。这会打开上传对话框,您可以在其中选择要从计算机上传的文件。请为您的报告选择一个图片文件。

我们之前已经看到,特定的符号(称作标记)在Typst中具有特定的含义。我们分别可以使用=、-、+和_来创建标题、两种列表和强调文本。然而,假如为每种要插入文档的内容都设置一种特殊符号,那么语法很快就会怪异且笨拙。为此,Typst只给最常见的内容设计标记符号,而其它所有内容都用函数插入。为在页面上显示图片,我们使用Typst的image函数。
#image("glacier.jpg")

一般来说,函数接收一组参数,生成一些输出。在标记模式中调用函数时,您将参数传给Typst,而Typst将结果(函数的返回值)插到文档中。对于此例,image函数接收一个参数:图片文件的路径。要在标记模式中调用函数,请先键入#字符,再紧跟函数名称,然后在圆括号中写上参数。Typst会识别参数列表中的多种数据类型,而这里的文件路径是一个较短的文本字符串,所以要用双引号括起来。
所插图片默认占满页面宽度。要更改宽度,需给image函数传入width参数。这是一个命名参数,需像name: value这样带名称传入。如有多个参数,需用逗号分隔,所以我们要先在路径后面加个逗号。
#image("glacier.jpg", width: 70%)

width参数接收相对长度。在此例中,我们填了一个百分比,表示图片应占页面宽度的70%。我们也可以填绝对值,如1cm或0.7in。
和文本一样,图片默认对齐到页面左边缘;而且这张图还缺少题注。让我们用figure函数解决这两个问题。该函数将图表的内容作为位置参数,将可选的题注作为命名参数caption。
在figure函数的参数列表里,Typst处于脚本模式,这意味着image函数调用前面的井号应当删除——只有标记模式才用得到井号(用于区分普通文本和函数调用)。
题注的内容是任意标记文本。为了给函数传入标记文本,我们将内容括在方括号中。这种结构称作内容块。
#figure(
image("glacier.jpg", width: 70%),
caption: [
_Glaciers_ form an important part
of the earth's climate system.
],
)

您继续编写报告,现在想要交叉引用该图表。为此,首先给图表贴上标签。标签用于唯一标识文档中的元素。其添加方法是将标签名称括在尖括号中,放在图表之后。添加标签后,您在正文中键入@符号,紧跟标签名称,就能引用相应图表了。章节标题和数学公式也可贴标签,以便被引用。
Glaciers as the one shown in
@glaciers will cease to exist if
we don't take action soon!
#figure(
image("glacier.jpg", width: 70%),
caption: [
_Glaciers_ form an important part
of the earth's climate system.
],
) <glaciers>

目前我们已向函数传入了内容块(方括号中的标记文本)和字符串(双引号中的文本)。二者似乎都包含文本,有什么区别呢?
内容块可以包含文本,也可以包含任何其它标记、函数调用等;而字符串切切实实只是字符构成的串,无法包含其它内容。
例如,image函数需要图片文件的路径,而往路径参数传入一段文本或另一张图片并没有意义,所以此处只能填入字符串。相比之下,任何需要内容块的地方都能填入字符串,因为文本也是合法的内容块。
添加文献
撰写报告时,您需要引用文献来论证。您可以使用bibliography函数向文档添加文献数据。此函数需要文献数据文件的路径。
Typst原生的文献数据格式是Hayagriva,不过考虑到兼容性,也支持BibLaTeX文件。由于您的同学已经调研过文献并向您发送了.bib文件,您就直接用它了。请在文件面板中上传该文件,以在Typst应用中访问它。
【译注】此处所用works.bib可从GitHub下载,尽管这个文件并不重要。
向文档添加文献数据后,您就可以从中引用了。引用文献的语法与引用标签相同。首次引用某文献后,该文献就会出现在您文档的文献列表中。Typst支持各种引用和文献列表样式,详情请查阅参考手册。
= Methods
We follow the glacier melting models
established in @glacier-melt.
#bibliography("works.bib")

数学公式
充实完Methods一章后,您继续完成这篇文档的核心内容:数学公式。Typst内置了数学排版引擎,并使用自己的数学记号。让我们从一个简单的等式开始。数学公式用$符号括住,以让Typst知道正在处理数学公式:
The equation $Q = rho A v + C$
defines the glacial flow rate.

该公式在行内排版,与周围的文本在同一行上。如果想让它独占一行,请在开头和结尾插入空格:
The flow rate of a glacier is
defined by the following equation:
$ Q = rho A v + C $

我们可以看到,Q、A、v、C等单个字母会原样显示,而rho会转换成希腊字母。在数学模式中,单个字母始终原样显示,而一串多个字母会被视作符号、变量或函数名称。要隐式表达这是单个字母之间的乘法,请在字母间加入空格。
如果想要一个变量包含多个字母,请用引号括起来:
The flow rate of a glacier is given
by the following equation:
$ Q = rho A v + "time offset" $

您的报告还需要一个求和公式。我们可以使用sum符号,并在上下标中标注求和范围:
Total displaced soil by glacial flow:
$ 7.32 beta +
sum_(i=0)^nabla Q_i / 2 $

要给符号或变量添加下标,请输入_字符,然后输入下标。类似地,上标请用^字符。若上下标由多部分组成,则必须将它们括在圆括号中。
上例还展示了如何插入分数:只需在分子分母间放置/字符,Typst就会自动将其转为分数。括号会被智能解析,因此您可像使用计算器那样输入数学公式,而Typst会把括号中的子式替换成合适记号。
Total displaced soil by glacial flow:
$ 7.32 beta +
sum_(i=0)^nabla
(Q_i (a_i - epsilon)) / 2 $

并非所有数学结构都有特殊语法。作为替代,我们会使用函数,就像我们之前看到的image函数一样。例如,要插入列向量,我们可以使用vec函数。在数学模式下,函数调用不需要以#字符开头。
$ v := vec(x_1, x_2, x_3) $

有些函数仅能用于数学模式。例如,cal函数用于排版通常用于集合论的花体字母。参考手册的数学部分完整列出了数学模式可用的函数。
还有一点:箭头等符号有若干变体。选择变体请在符号名称后加点和修饰名称:
$ a arrow.squiggly b $

在标记模式下这种记号也可用,但符号名称前必须带#sym.。全部可用符号的列表请参阅符号一章。
小结
现在您已经了解了如何在Typst中编写基本文档,包括如何强调文本、编写列表、插入图片、对齐内容和排版数学公式。您还了解了Typst的函数机制。其实Typst还允许您往文档插入许多种内容,例如表格、图形和代码块。您可查阅参考手册进一步了解各种功能。
目前您已写完报告,并单击右上角的下载按钮保存了PDF。不过,您可能认为报告看起来不该那么朴素。下一章我们将学习如何定制文档的外观格式。