Typst 排版避坑指南:set 与 show 规则的区别与使用时机

发布时间:2026/8/30 11:33:08
Typst 排版避坑指南:set 与 show 规则的区别与使用时机 Typst 排版避坑指南set 与 show 规则的区别与使用时机【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst你在改 Typst 论文时只想让致谢里的小节标题变斜体结果在文档顶部加了一行 set全文标题样式集体翻车想用 show 补救标题编号又凭空消失了。set 规则与 show 规则长得像分工却完全不同。你需要搞清楚的是各自负责什么、作用域怎么走、冲突时谁生效、以及怎么选。set 与 show 的分工旋钮与流水线把文档里的每个元素标题、段落、列表想象成一条流水线上的成品。set 规则是给成品拧旋钮字号、颜色、对齐、间距每个旋钮对应元素自身提供的参数。拧得动但没法新增旋钮。show 规则是把成品搬下线重新组装冒号左边选中元素右边决定它最终长什么样结果不必沿用原图纸。还有第三种中间形态叫 show-set 规则#show heading: set text(navy)意思是这条 set 只对选中的元素生效。它是最常用也最安全的一种用法可以理解为带定位条件的 set。Typst set 规则作用域如何生效set 的写法是在元素函数调用前加#set参数只能传该函数支持的可选参数。真正要理解的是作用域写在顶层的 set 一直生效到文件末尾写进内容块里的 set只影响块内的内容。#set text(11pt) #[ #set text(size: 9pt, color: gray) 这段字变小变灰只发生在括号内。 ] 这段字回到 11pt。两段代码、两种结果第二条规则住在括号里出不来。所以只改这一段的正确姿势是把调整放到内容块里而不是写在全局。开头那次翻车的病根就在这——本该局部的 set 写在了文件顶部作用域直接覆盖全文。顺手记一个条件版set-if 规则。在函数体内写set text(red) if critical只有条件成立时这条 set 才生效。Typst show 规则重写元素的默认渲染show 规则有两个强度。show-set冒号后跟 set 规则只改选中元素的参数。例子里二级标题斜体缩小一级标题套用小型大写字母互不干扰。#show heading.where(level: 1): smallcaps #show heading.where(level: 2): set text(10pt, style: italic) Introduction Motivation变换型 show冒号后是一个任意函数接收该元素、返回任意内容元素可以被拆开重组。#show heading.where(level: 2): it it.body [.] Motivation第二个例子把二级标题从独占一行改成随文标题内置的标题会包一层块级结构it it.body [.]跳过了这层包装只输出标题文字加一个句点于是标题直接流进正文。it只是惯例参数名它的字段body、numbering、level和元素函数的参数一一对应想保留什么就显式输出什么。set 与 show 冲突时谁生效一个最小反例开头那次编号消失就是这个局面#set heading(numbering: 1.) #show heading: it [Custom: #it.body] Introduction渲染结果是 Custom: Introduction编号不见了。set 并没有被压过——编号仍然被设上了只是变换型 show 跳过了默认渲染而你的函数只输出了it.body编号根本没被打印出来。一句话概括set 决定参数值变换型 show 决定哪些字段出场。解法二选一把字段补回 show 的输出如it [#it.numbering #it.body]或者干脆别用变换型 show降级成 show-set。如果只涉及 show-set 和 set二者按书写顺序生效同目标时后者覆盖前者和普通 set 之间一样。Typst set 与 show 速查表与实践建议你的需求用什么最小示例改现成参数的值字号、字体、对齐set#set text(10pt)只改某一段不动全文set 内容块#[ #set par(justify: false) ... ]只改某一类元素show-set#show heading.where(level: 1): set text(13pt)改元素结构增删部件、随文标题变换型 show#show heading: it it.body直接替换文本字符串/正则 show#show TODO: done三条可直接执行的建议先试 set能用现成参数表达的就不要动用 show。变换型 show 写克制用where收窄范围显式输出it.numbering这类想保留的字段漏写就消失。样式写在它的作用域里全局的page、text、par集中在文件头部局部的进内容块元素级的用 show-set三层各管各的下次再改样式不用救火。更多细节可以看仓库内的 docs/content/reference/language/styling.typ 的 set 与 show 章节以及 docs/content/tutorial/3-advanced.typ 里完整的会议论文排版示例。【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考