
Typst 样式改不动set 规则与 show 规则谁说了算一次排查讲清【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst在 Typst 里调样式新手最常翻车的就一个场景明明改了 set 规则输出却纹丝不动。别急着怀疑字体缓存多半是 set 规则和 show 规则在你文档里打架了。下面拿一份小文档做个排查。复现一个改不动的翻车现场先把标题编号改成带括号的格式#set heading(numbering: (1.))编译标题前乖乖出现(1.)。然后有人觉得不够酷追加了一行 show 规则给标题两侧加装饰条#show heading: it [— #it.body —]再编译编号凭空消失了。回到上一行把numbering改成1编号依然不出现无论怎么调都没用。这不是 bug。set 规则只能改元素已经提供出来的属性而 show 规则接管的是元素整个渲染过程——上面这条 show 规则把标题的输出整体重写成装饰条 标题正文编号根本不在它的新输出里。两条规则都写对了但后者直接把前者的地盘覆盖了。记住这个现场接下来拆三种做法。同一份文档的三种改法方案 A只用 set 规则。改字体、改大小、改对齐、改编号都属于拧参数set 全部搞定#set text(font: New Computer Modern, size: 11pt) #set heading(numbering: 1.) #set par(justify: true)但 set 的边界也很硬它只接受该元素函数声明过的可选参数。想让标题变成居中、斜体、后面自动跟一个章节号这种复合排版参数里没有对应的旋钮set 就无能为力了。方案 B只用 show 规则。右侧写一个函数把元素当作输入、自己产出完整结果排版思路随便换#show heading: it block(width: 100%)[ #set align(center) #smallcaps(it.body) · counter(heading).display() ]输出完全自定义但有一个隐患函数内部写的set align已经固化在这条规则里文档后面再想追加别的 show 规则盖不掉这种内部设置。样式就焊死了。方案 Cset 打底、show-set 接管。这是官方文档推荐的写法官方文档docs/content/reference/language/styling.typ#set heading(numbering: (I)) #show heading: set align(center) #show heading: it block[ #emph(it.body) #counter(heading).display() ]把居中这种可叠加的属性拆成独立的 show-set 规则文档后文还能继续用新的 show-set 覆盖它结构性的重写只留在最后一条里。这样样式一层一层可组合改起来不伤筋动骨。局部改样式不污染全局以及谁说了算先说作用域。set 和 show 都只活到当前块的末尾写在顶层就管到文件结束写进内容块里就只管块内。想只给一个列表换项目符号包一层就行#this list is affected: #[ #set list(marker: [--]) - Dash ] this one is not: - Bullet作用域之外一切照旧。再说优先级这是排查改不动的核心对同一个属性后写的 set 规则覆盖先写的就近生效show 规则一旦对某元素生效它的输出直接取代默认渲染优先级高于一切 set 配置多条 show 规则都命中同一元素时离元素最近的那条说了算离得近的能盖住远的。所以排查时先问三个问题这个元素有没有被 show 规则接管接管的话是哪条离它最近我写的 set 是不是被外层块的规则盖掉了三问下来九成改不动都能对号入座。另外别忘了where选择器show heading.where(level: 1)只动一级标题二级及以下毫发无伤比全局规则安全得多。套进会议模板set 打全局show 管特例把上面的分工放进一个真实的会议论文模板里思路就很顺#set page(paper: us-letter, columns: 2, margin: 2cm) #set text(font: Libertinus Serif, size: 11pt) #set par(justify: true) #show heading.where(level: 1): it block[ #smallcaps(it.body) ]页面、字体、对齐这些全局参数交给 set 一把梭一级标题要小型大写字母这种 set 参数里给不出的排版特例交给一条带where的 show 规则。两者各司其职模板后面加章节、换内容都不用回头动样式代码。踩坑速查set 改了没反应先搜文档里有没有 show 规则接管了这个元素show 里嵌套了 set后面盖不掉拆出来写成独立的 show-set 规则只想动局部用块包一层或者where收窄选择范围两条 show 都命中离元素近的那条赢改顺序比加大字号管用。一句话收工set 拧参数show 换输出拧不动再动手。属性能解决就别动渲染动渲染就留好组合的余地样式代码才不会越堆越难改。【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考