跳到主要内容
版本:Next

复杂动画

得益于 Polylux 提供的语法,我们同样能够在 Touying 中使用 onlyuncoveralternatives

标记风格的函数

我们可以使用标记风格的函数,用起来十分方便。

At subslide #touying-fn-wrapper((self: none) => str(self.subslide)), we can

use #uncover("2-")[`#uncover` function] for reserving space,

use #only("2-")[`#only` function] for not reserving space,

#alternatives[call `#only` multiple times \u{2717}][use `#alternatives` function #sym.checkmark] for choosing one of the alternatives.

但是这种方式并非在所有情况下都能生效,例如你将 uncover 放入 context 表达式中,就会报错。

回调风格的函数

为了避免上文提到的布局函数的限制,Touying 利用回调函数巧妙实现了总是能生效的 onlyuncoveralternatives,具体来说,您要这样引入这三个函数:

#slide(repeat: 3, self => [
#let (uncover, only, alternatives) = utils.methods(self)

At subslide #self.subslide, we can

use #uncover("2-")[`#uncover` function] for reserving space,

use #only("2-")[`#only` function] for not reserving space,

#alternatives[call `#only` multiple times \u{2717}][use `#alternatives` function #sym.checkmark] for choosing one of the alternatives.
])

image

注意到了吗?我们不再是传入一个内容块,而是传入了一个参数为 self 的回调函数,随后我们通过

#let (uncover, only, alternatives) = utils.methods(self)

self 中取出了 onlyuncoveralternatives 这三个函数,并在后续调用它们。

这里还有一些有趣的事实,例如 int 类型的 self.subslide 指示了当前 subslide 索引,而实际上 onlyuncoveralternatives 函数也正是依赖 self.subslide 实现的获取当前 subslide 索引。

警告

我们手动指定了参数 repeat: 3,这代表着显示 3 张 subslides,我们需要手动指定是因为 Touying 无法探知 onlyuncoveralternatives 需要显示多少张 subslides。

only

only 函数表示只在选定的 subslides 中「出现」,如果不出现,则会完全消失,也不会占据任何空间。也即 #only(index, body) 要么为 body 要么为 none

其中 index 可以是 int 类型,也可以是 "2-""2-3" 这样的 str 类型,更多用法可以参考 Polylux

uncover

uncover 函数表示只在选定的 subslides 中「显示」,否则会被 cover 函数遮挡,但仍会占据原有。也即 #uncover(index, body) 要么为 body 要么为 cover(body)

其中 index 可以是 int 类型,也可以是 "2-""2-3" 这样的 str 类型,更多用法可以参考 Polylux

您应该也注意到了,事实上 #pause 也使用了 cover 函数,只是提供了更便利的写法,实际上它们的效果基本上是一致的。

alternatives

alternatives 函数表示在不同的 subslides 中展示一系列不同的内容,例如

#slide(repeat: 3, self => [
#let (uncover, only, alternatives) = utils.methods(self)

#alternatives[Ann][Bob][Christopher]
likes
#alternatives[chocolate][strawberry][vanilla]
ice cream.
])

image

如你所见,alternatives 能够自动撑开到最合适的宽度和高度,这是 onlyuncover 所没有的能力。事实上 alternatives 还有着其他参数,例如 start: 2repeat-last: trueposition: center + horizon 等,更多用法可以参考 Polylux