5 分钟搞懂 Typst 的 set 和 show 规则:新手避坑指南
5 分钟搞懂 Typst 的 set 和 show 规则新手避坑指南【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst改了一行#set text(size: 13pt)保存后全文标题、页码全跟着变了——其实只想改一下摘要的字号。Typst 里 set 规则和 show 规则这两件样式武器是新手最容易翻车的地方两者不在同一个厨房把菜交给错误的师傅出菜一定翻车。set 规则与 show 规则分工怎么区分一个厨房类比set 规则只改元素的参数值show 规则能重做元素长什么样。 想象一个厨房默认参数油温、火候、调味比例就是 set 规则改参数之后新做的菜都按新参数来但没有任何人在重新设计菜本身摆盘师傅则是 show 规则他接过做好的那道菜代码里就是it返回一份重新摆好的新菜长什么样全凭他。对应到代码里就是#set text(size: 12pt)只动了字号这一个参数而#show heading: it ...接收的是整个原始标题元素输出的是一份全新的渲染结果。两者之间还有一种混搭——show-set 规则用 show 选中元素再用 set 改它内部参数下面的坑里还会用到。跟着一段 15 行 Typst 最小示例走set 做了什么show 没做什么set 管填参数show 管重做菜15 行代码就能看清#set page(width: 300pt, margin: 24pt) // 只配置页面参数作用于全文 #set text(size: 11pt) // 全文默认字号 #set par(justify: true) // 段落默认两端对齐 #block[ #set par(justify: false) // 只影响这个括号里的内容 #lorem(20) ] #show heading: it block(width: 100%)[ #set text(size: 14pt, weight: bold) #set align(center) #it.body // 拿到原标题重做渲染结果 ] 引言分块拆开头三行 set 做的填了页面大小、字号、段落对齐三个参数没做的没挪动任何元素没改文档结构。它们后面的所有元素都用这套配置。括号里那行 set 做的把两端对齐关掉没做的影响范围只有这一对方括号里的 20 句 lorem括号外的段落依然是对齐的。show 规则做的末尾的 引言不再用默认标题样式而是按方括号里的配方重做——14pt 加粗、居中没做的普通段落一个字符都没受影响。注意这是重做标题原有的间距和编号会丢补救办法见后面的坑。这种模板搭法在官方教程 高级排版 里就是那样一步步搭出论文模板的。新手最常踩的三个坑set 规则作用域、show 规则编号消失、heading 改字号三个坑都是新手真实翻车现场每个都能一行搞定。改一行 set 全文变了set 规则的作用域怎么限定现象在文档中部加一行#set par(justify: false)只想改摘要结果后面全文都左对齐了。原因set 规则没有只影响下一个元素的说法从它写的位置起当前块里所有匹配的元元素都用新值整份文档的顶层块一直延伸到文件末尾。修复把 set 挪进包住目标内容的块里#block[ #set par(justify: false) … ]。show 规则重做后标题编号和间距没了现象写了#show heading: it [样式#it.body]标题变成一行普通文字自动编号和上下间距全消失。原因show 规则返回什么渲染结果就是什么。这里返回的只是一对方括号里的内容——普通正文不再是标题元素编号和间距是元素的属性元素没了属性自然跟着没。修复用it.replace保住标题元素本体#show heading: it it.replace(text(weight: bold)[#it.body])。为什么 #set heading 改不了标题字号现象写#set heading(size: 14pt)直接编译报错。原因set 只能改元素自己有的属性heading 元素上只有 level、numbering、outline 这类属性字号在它内部的文字上heading 自己没有这个开关。修复用 show-set 规则把参数指到标题内部的文字上#show heading: set text(size: 14pt)。选型速查set 还是 show5 句话对号入座判断标准就一句改参数用 set改渲染用 show。如果你要改全局默认页面大小、字号、对齐选 set 规则如果你要改某类元素的渲染方式选 show 规则。如果你只想覆盖一个段落或一个块用块包住加局部 set如果你要批量改所有标题或所有表格用带 where 的 show 规则。如果你只改一个属性show-set 一行搞定#show heading: set text(size: 14pt)如果你要加结构、套框、换布局用 show 加闭包重做。如果属性在元素上根本不存在set 就别想了直接上 show-set 或 show 重做。如果只是这类元素中的某一种要变记得带where(level: 1)限定不带的 show 规则会把所有级别标题一网打尽。记住口诀set 只改参数show 才能重做菜——能用 set 就别写 show。细节可查 官方样式文档。【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考