698 字
3 分钟
Typst制作slides模板
在制作 Slides 过程中,配置文件的设置是关键的一步。这意味着,在使用模板时,我们会输入新的配置信息,并且所有相关的函数都应该以这些新的配置信息为输入。
在 LaTeX 中,加入配置信息非常简单,可以直接使用 \author{}
这样的方式。然而,在 Typst 中,设置相对麻烦一些。通常有两种常见的方法:
- 使用闭包
- 设置全局变量
1 使用闭包
使用闭包可以通过两种方式实现。
方式一:
首先,正常编写需要的函数,例如 slide
函数,这些函数需要配置信息作为输入。然后,通过一个函数(例如 register
),将这些配置信息作为输入,重新定义之前的函数,并以闭包形式返回。这样,就不需要每次都手动输入配置信息了。
#let register(title: none, author: none, datetime: none) = {
//闭包
(
title-slide: () => {
title-slide(
title: title,
author: author,
datetime: datetime,
)
},
outline-slide: (spacing: 50pt) => {
outline-slide(title:title, spacing: spacing)
},
section-slide: (numbering: true, body) => {
section-slide(title: title, numbering: numbering, body)
},
section-slide-n: (numbering: false, body) => {
section-slide(title: title, numbering: numbering, body)
},
slide: body => {
slide(
title: title,
author: author,
datetime: datetime,
body,
)
},
slides: body => {
slides(title: title, body)
},
)
}
方式二:
直接编写一个 register
函数,并在函数内部定义其他函数,最后返回闭包。这样相对于第一种方式的优势在于,其他函数不需要每次将配置信息作为输入,只需要 register
函数的输入即可。
2 设置全局变量
使用全局变量的好处在于不需要闭包,并且无需返回多个函数,使用起来更加方便。不过,可能会因为使用到 context
而稍微影响速度。 首先,可以在模板中定义全局变量,例如:
// 定义初始配置
#let initial-config = (
title: "Default Presentation Title",
primary-color: blue,
secondary-color: gray,
font-size: 24pt,
)
// 创建一个状态变量来存储配置
#let config-state = state("config", initial-config)
// 更新配置的函数
#let update-config(new-config) = {
config-state.update(current => current + new-config)
}
然后在编写 slide
函数时,直接调用全局变量即可,而无需将其作为输入。但需要注意,调用全局变量时使用 get()
函数,并且必须在 context
环境下,因此通常的写法是:
#let slide(args: none) = context {
...
}
在使用模板时,直接使用 #update-config()
函数更新配置即可。这种方式相对简洁。
Typst制作slides模板
https://fuwari.vercel.app/posts/typst制作slides/