提示:本教程存在过时问题,更详细教程请阅读 小蓝书Typst 中文社区导航 FAQ
注意:该中文文档为社区驱动的非官网文档,可能存在错译、漏译或过时等问题,请以官网文档 Documentation 为准,如发现错漏,也欢迎 您的贡献镜像)。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 中文文档

样式

Typst 有一个自由的样式设置系统,可以按需自动格式化文档。 set 规则 可以配置文档元素的基本属性,用来设置大多常用文档样式, 但是有些样式设置并没有属性可设,因此 Typst 引入 show 规则,进而可以彻底的重设文档元素外观。

set 规则

使用 set 规则,可以自定义文档元素的外观, 这些规则以 set 关键字作为开始标记(在标记模式下使用 #set), 紧随一个文档元素的函数调用, set 函数调用时,仅有特定参数可被允许使用,可以参考该函数文档查看有那些参数可以用于 set 规则。 下面示例,使用了两个 set 规则来改变文档字体标题数字

#set heading(numbering: "I.")
#set text(
  font: "New Computer Modern"
)

= Introduction
With set rules, you can style
your document.
Preview

顶层 set 规则一直作用到文件结束,当在块内使用时,只作用到块结束。 这样使用块,可以限制 set 规则只总用于文档的特定片段。 下面示例使用了文档内容块来限制列表样式设置只作用于特定列表。

This list is affected: #[
  #set list(marker: [--])
  - Dash
]

This one is not:
- Bullet
Preview

有时,想要实现特定条件下 set 规则才有效,可以使用 set-if 规则。

#let task(body, critical: false) = {
  set text(red) if critical
  [- #body]
}

#task(critical: true)[Food today?]
#task(critical: false)[Work deadline]
Preview

show 规则

使用 show 规则可以深度定制特定类型文档元素的外观,最常用的基本形式是 show-set 规则, 以 show 关键字作为开始标记,紧随一个选择器,一个冒号,最后是一个 set 规则。 最常见的选择器是一个文档元素函数名, 是 set 规则用来选择相关文档元素的。 下面示例中,标题变为深蓝色,其他文本保持黑色。

#show heading: set text(navy)

= This is navy-blue
But this stays black.
Preview

使用 show-set 规则,可以混搭各种函数属性,来实现各种不同的效果,但这也仍然局限于 Typst 预定义的功能。 为了最大限度的灵活设置,可以使用函数式 show 规则,用来定义如何从 0 开始格式化文档元素。 使用一个 函数 来替换 show-set 规则中的 set 规则, 这个函数以未知文档元素作为参数,返回任意文档内容,函数的文档元素参数有各种不同的属性字段。 下面示例中用一个函数式 show 规则格式化一个虚构的百科全书标题。

#set heading(numbering: "(I)")
#show heading: it => block[
  #set align(center)
  #set text(font: "Inria Serif")
  \~ #emph(it.body)
     #counter(heading).display() \~
]

= Dragon
With a base health of 15, the
dragon is the most powerful
creature.

= Manticore
While less powerful than the
dragon, the manticore gets
extra style points.
Preview

与 set 规则类似, show 规则也一直作用到文档或者当前块的结束。

show 规则的右边部分不仅可以是一个函数,也可以是一个字符串常量或者文档内容块,用来直接替换文档元素。 show 规则的左边部分也可以是 下面类型的选择器,用来定义哪些文档元素会被转换:

#show "Project": smallcaps
#show "badly": "great"

We started Project in 2019
and are still working on it.
Project is progressing badly.
Preview