Cover 函数
正如您已经了解的那样,uncover
和 #pause
均会使用 cover
函数对不显示的内容进行遮盖。那么,这里的 cover
函数究竟是什么呢?
默认 Cover 函数:hide
cover
函数是保存在 s.methods.cover
的一个方法,后续 uncover
和 #pause
均会在这里取出 cover
函数来使用。
默认的 cover
函数是 hide 函数,这个函数能将内部的内容更改为不可见的,且不会影响布局。
更新 Cover 函数
有的情况下,您想用您自己的 cover
函数,那么您可以通过
let s = (s.methods.update-cover)(self: s, is-method: true, cover-fn)
方法来设置您自己的 cover
函数,其中如果设置 is-method: false
,则 Touying 会帮您将 cover-fn
包装成一个方法。
hack: 处理 enum 和 list
你会发现现有的 cover 函数无法隐藏 enum 和 list 的 mark,参考 这里,因此你可以进行 hack:
#let s = (s.methods.update-cover)(self: s, body => box(scale(x: 0%, body)))
半透明 Cover 函数
Touying 提供了半透明 Cover 函数的支持,只需要加入
#let s = (s.methods.enable-transparent-cover)(self: s)
即可开启,其中你可以通过 alpha: ..
参数调节透明度。
警告
注意,这里的 transparent-cover
并不能像 hide
一样不影响文本布局,因为里面有一层 box
,因此可能会破坏页面原有的结构。
原理
enable-transparent-cover
方法定义为
#let s.methods.enable-transparent-cover = (
self: none,
constructor: rgb,
alpha: 85%,
) => {
self.methods.cover = (self: none, body) => {
utils.cover-with-rect(
fill: utils.update-alpha(
constructor: constructor,
self.page-args.fill,
alpha,
),
body
)
}
self
}
可以看出,其是通过 utils.cover-with-rect
创建了一个与背景色同色的半透明矩形遮罩,以模拟内容透明的效果,其中 constructor: rgb
和 alpha: 85%
分别表明了背景色的构造函数与透明程度。