注意:该页面为保留旧有翻译而留下的,新文档并没有该页面,请注意甄别。新的文档可以在 “基础” 部分找到,不过暂未未完全翻译完毕。Typst 非官方中文交流 QQ 群:793548390
Warning: the Chinese document is a community-driven non-official document, there may be mistranslation, omission or outdated problems, please refer to the official website documentation.
Typst 中文文档

function

参数值到返回值的映射。

你可以通过在函数名后直接写一个用逗号分隔的参数列表,并用括号括起来来调用函数。 此外,你还可以在普通参数列表之后将任意数量的尾部内容块参数传递给函数。 如果普通参数列表为空,则可以省略它。 Typst 支持位置参数和命名参数。前者通过位置和类型进行标识,而后者则以 name: value 的形式书写。

在数学模式下,函数调用具有特殊的行为。更多详情请参阅数学文档

Example

// Call a function.
#list([A], [B])

// Named arguments and trailing
// content blocks.
#enum(start: 2)[A][B]

// Version without parentheses.
#list[A][B]
Preview

函数是 Typst 的基本构建块。Typst 提供了许多用于各种排版任务的函数。 此外,你编写的标记是由函数支持的,所有样式化都通过函数完成。 这个参考文档列出了所有可用的函数以及如何使用它们。 请参考有关设置规则展示规则的文档,了解在 Typst 中可以使用函数的其他方式。

Element functions

某些函数与元素(如标题表格)相关联。 当调用这些函数时,它们会创建相应种类的元素。 与普通函数不同,它们还可以在设置规则展示规则选择器中进一步使用。

Function scopes

函数可以在自己的作用域中保存相关定义,类似于一个模块。例如,assert.eqlist.item。 然而,目前此功能仅适用于内置函数。

Defining functions

你可以使用 let 绑定来定义自己的函数,绑定名称后面可以有一个参数列表。 参数列表可以包含位置参数、具有默认值的命名参数和参数接收器。 绑定的右边可以是一个块或任何其他表达式。它定义了函数的返回值,并且可以依赖于参数。

#let alert(body, fill: red) = {
  set text(white)
  set align(center)
  rect(
    fill: fill,
    inset: 8pt,
    radius: 4pt,
    [*Warning:\ #body*],
  )
}

#alert[
  Danger is imminent!
]

#alert(fill: blue)[
  KEEP OFF TRACKS
]
Preview

Unnamed functions

你还可以通过指定一个参数列表,后跟 => 和函数体,创建一个没有绑定的匿名函数。 如果你的函数只有一个参数,则参数列表周围的括号是可选的。 匿名函数主要适用于展示规则,但也适用于接受函数的可设置属性,比如页面函数的页脚属性。

#show "once?": it => [#it #it]
once?
Preview

Notable fact

在 Typst 中,所有函数都是纯函数。这意味着对于相同的参数,它们总是返回相同的结果。它们不能在第二次调用时“记住”某些内容以产生另一个值。

唯一的例外是像 array.push(value) 这样的内置方法。它们可以修改调用它们的值。

方法
方法是可用于该类型的一系列函数,可以使用 "." 操作符调用它们。

with method

返回一个新的函数,该函数在调用时会预先应用给定的参数。

value.with() -> function

arguments
any
可变参数
可变参数可以多次传入。

要应用的命名和位置参数。

where method

返回一个选择器,该选择器用于筛选属于此函数的元素,其字段具有给定参数的值。

value.where() -> selector

fields
any
可变参数
可变参数可以多次传入。

要按字段筛选的值。