Typst模板函数中if条件块使用问题:暗黑模式设置异常
问题原因与解决方法
这是Typst的作用域规则导致的:
- 当你给每个
set语句单独加if dark后缀时,比如:
这些set page(fill: black) if dark set text(color: white) if dark set background(black) if darkset语句属于全局作用域,会对整个文档的所有页面生效。 - 但把多个
set语句包裹在if dark代码块中时:
这个if dark { set page(fill: black) set text(color: white) set background(black) }if块的作用域被限定在当前页面上下文,只有首页会执行块内的设置,后续页面会恢复到默认的浅色配置。
解决办法
写法一:保持单独语句加后缀(推荐,符合Typst惯用写法)
#let template(dark: false) = { set page(fill: black) if dark set text(color: white) if dark set background(black) if dark // 后续文档内容 body(...) }
写法二:用全局作用域的条件块
如果一定要用代码块统一管理,可以通过将样式块在模板顶层执行,确保其作用域覆盖全文档:
#let template(dark: false) = { #let dark-styles = { set page(fill: black) set text(color: white) set background(black) } #dark-styles if dark // 后续文档内容 body(...) }
这种写法会把dark-styles里的set语句提升到全局作用域,对所有页面生效。
内容的提问来源于stack exchange,提问作者dufei
相关产品推荐
相关产品推荐

