Typst 功能展示

基础功能

Typst 内置了基础的文字修饰功能,对应的代码和效果如下表所示。

代码 效果
*粗体* 粗体
_斜体_ 斜体
#underline[下划线] 下划线
#strike[删除线] 删除线
#overline[上划线] 上划线
#super[上标]文本#sub[下标] 上标文本下标
#highlight[高亮标记] 高亮标记

你可以通过粘贴 URL 或者 #link 函数创建一个链接:

代码 效果
https://typst.app/ https://typst.app/
#link("/about/")[关于页面] 关于页面

你可以使用 #divider() 创建分割线,效果如下:


你可以通过如下代码创建一些列表:

- 文字
- 数学公式
- 代码块
  - 内联代码块
  - 块级代码块
  
+ 这是有序列表的第 1 项。
3. 可以使用任意数字创建一个新的有序列表,此时
+ 序号会从上次出现的有序列表项继续递增,这里就是 4。
1. 这里的序号又回到了 1,但它依然会继续递增,所以
+ 这里的序号是 2。

/ 连字: 合并的字形。
/ 字距调整: 两个相邻字母之间的间距调整。

渲染效果如下:

  • 文字
  • 数学公式
  • 代码块

    • 内联代码块
    • 块级代码块
  1. 这是有序列表的第 1 项。
  2. 可以使用任意数字创建一个新的有序列表,此时
  3. 序号会从上次出现的有序列表项继续递增,这里就是 4。
  4. 这里的序号又回到了 1,但它依然会继续递增,所以
  5. 这里的序号是 2。
连字
合并的字形。
字距调整
两个相邻字母之间的间距调整。

常用内容块

除了基础的文字修饰功能,Carbon Typst Blog 提供了一些常用的内容块,例如引用块、注意块、表格和代码块等。你也可以通过 #quote 函数创建一个引用块,或者通过 #note#success#warning#error 创建一些带有标题的强调块。

#quote[
  这是一个引用块。
  #quote[这是引用块中的引用块。]
]
#note(title: "提示")[这是一个注意块。]
#success(title: "完成")[这是一个强调块。]
#warning(title: "警告")[这是一个警告块。]
#error(title: "注意")[
  这是一个带多段内容的块。

  这一行用于展示换行效果。
]

对应的渲染效果如下:

这是一个引用块。

这是引用块中的引用块。
提示

这是一个注意块。

完成

这是一个强调块。

警告

这是一个警告块。

注意

这是一个带多段内容的块。

这一行用于展示换行效果。

表格、代码块与图表

Typst 内置了表格和代码块的支持,你可以通过 #table```[lang] ``` (对于内联代码块,则使用 ` ````[lang] ```)来创建它们。另外,你可以通过 #figure 函数创建一个带有标题的内容块,并将表格、代码块或者图像等内容放在其中,从而让它们拥有一个标题。以下是一些示例:

#figure(caption: [示例表格])[
  #table(
    columns: (1fr, 2fr, auto),
    table.header([姓名], [简介], [状态]),
    [Alice], [前端开发者,喜欢 Rust], [在线],
    [Bob], [后端工程师,喜欢 Python], [离线],
  )
]<tbl1>

#figure(caption: "代码块样式示例")[
  ```rs
  fn main() {
    println!("Hello, Typst!");
  }
  ```
]<code1>

对应的渲染效果如下:

姓名 简介 状态
Alice 前端开发者,喜欢 Rust 在线
Bob 后端工程师,喜欢 Python 离线
表 1 示例表格
fn main() {
  println!("Hello, Typst!");
}
代码 1 代码块样式示例

需要注意,由于 Typst 的 HTML 导出问题,页面上表格的宽度和对齐方式暂时无法调整。

你也可以使用外部的图像库绘制图像,并通过 SVG 格式将它们嵌入到页面中(需要将图像变量包裹在 auto-frame 函数中)。默认情况下,SVG 在深色模式下会被反转颜色,如果你不希望它被反转,可以将 auto-frame 函数的 disable-filter 参数设置为 true。以下是一个使用 lilaq 库绘制二维函数图像的示例:

#import "@preview/lilaq:0.5.0" as lq
#{
  let diagram = lq.diagram(
    width: 4cm, height: 4cm,
    lq.colormesh(
      lq.linspace(-4, 4, num: 10),
      lq.linspace(-4, 4, num: 10),
      (x, y) => x * y,
      map: color.map.magma
    )
  )

  figure(caption: [二维函数 $f(x, y) = x y$], auto-frame(disable-filter: true, diagram))
}

上述代码绘制了一个简单的二维函数图像,并通过 figure 函数创建了一个带有标题的内容块来展示它。对应的渲染效果如下:

图 1 二维函数

数学、引用与交叉引用

行内公式示例:

块级公式示例:

较长的公式可以通过横向滚动查看:

你可以对外部文献或文中的标记进行引用,例如:

表格见 @tbl1,代码块见 @code1。

对应的渲染效果如下:

表格见 表 1,代码块见 代码 1

Markdown 渲染

最后,使用 cmarker 库可以渲染 Markdown 文件内容:

#let md-content = read("index.md")
#cmarker.render(md-content, math: mitex, scope: scope)

更详细的使用示例请参考 cmarker 的官方文档。

文章作者weyung
文章链接https://weyung.cc/posts/25516c21/
许可协议CC BY-NC-SA 4.0
上一篇

Carbon Typst Blog 介绍

下一篇

如何编写一篇博客文章