☰
Typst set 规则与 show 规则完整指南:30 秒选对工具
2026/10/25 4:10:42 网站建设 项目流程

Typst set 规则与 show 规则完整指南:30 秒选对工具

【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst

上次交付模板,我只想居中一个章节标题,却在文件顶部顺手写了一条全局样式规则。结果整篇 Typst 文档排版全乱了,连页眉页脚都被带偏。问题出在混淆了set 规则和show 规则的分工:前者改的是元素的参数值,后者换的是元素的渲染模板。把这条边界记住,Typst 样式问题的一大半当场消失。

🧭 一张表看懂两者分工

本节直接给结论:什么场景选哪个,30 秒扫完。

维度set 规则show 规则
改动对象元素的属性值元素的整套渲染逻辑
工作方式静默写入默认值,不产出内容接收原元素,返回替代内容
典型用途页面尺寸、字号、对齐方式标题自定义、引用重排
表达力低,只能改"已有开关"高,能拼出全新结构

落到具体动作,选型看这张决策表:

场景选哪个一句话理由
改页面纸张、边距、字号set 规则现成属性,调旋钮即可
全文统一段落对齐、行距set 规则一次设置,级联生效
给一级标题换外观show 规则默认渲染满足不了,要换模板
不同级别标题用不同样式show 规则需要按条件分支处理
把引用、脚注改造成自定义格式show 规则涉及结构重组,不是改值

set 规则拆解:只动旋钮,不换模具

本节解决"set 能干什么、干不了什么"的问题。

一句话定性:set 规则是给元素类型登记默认参数,像给设备写配置项,写完之后它才"照单执行"。

它的核心行为是作用域内的级联生效:写在块内的 set,只管块里的内容;写在文档顶部的 set,管到文件末尾。下面这段代码演示局部覆盖与自动恢复:

// 全局:正文 11pt #set text(size: 11pt) // 仅在本块内关闭两端对齐 #block[ #set par(justify: false) 这段文字不强制对齐 ] 到这里又恢复两端对齐

观察点:块结束后段落重新两端对齐,说明 set 的影响止步于容器边界,不会向外泄漏。

set 的边界也很清楚:它只能调元素"本来就有的属性"。想加个角标、换套编号体系这种"属性表里不存在的东西",set 无能为力,该交给 show 了。

show 规则拆解:整个渲染过程推倒重来

本节解决"show 到底换掉了什么"的问题。

一句话定性:show 规则是一个内容转换函数,原元素进、新内容出。默认渲染逻辑只是没写 show 时的后备方案,一旦被命中就整体失效。

// 只拦截一级标题,换成"居中 + 小型大写" #show heading.where(level: 1): it => { set text(size: 13pt) align(center, smallcaps(it.body)) }

观察点:输出一级标题变小大写居中,而二级及以下标题保持默认外观——这是靠where 条款过滤出来的,没被拦到的元素完全不受影响。

where 是 show 的安全带。缺了它,规则会命中该类型的每一个元素,这是后面要讲的高频坑。

🔧 双栏论文样式的完整流程

本节用一次学术会议双栏论文排版,演示两条规则从头到尾的分工。

流程固定为三步:先用 set 铺底子,再用 show 做定制,最后写内容。基础样式全部走 set:

// 页面与正文基础参数,一次配齐 #set page(paper: "a4", columns: 2, gutter: 0.8cm, numbering: "1") #set text(size: 10.5pt) #set par(justify: true, leading: 0.8em)

观察点:双栏、10.5pt 正文、两端对齐全部由属性值决定,没有任何渲染逻辑被改动,这正是 set 的主场。

会议要求一级标题居中并使用小型大写,默认渲染给不了,引入 show:

// 仅重做一级标题,其余标题走默认 #show heading.where(level: 1): it => { set align(center) smallcaps(it.body) }

观察点:一级标题换了外观,正文的字号、对齐仍由前面的 set 掌管。分工线很干净——值归 set,模板归 show,互不越界。

🚧 三个最常见的 Typst 样式翻车点

本节把优先级冲突、作用域泄漏这类高频问题收敛成一张对照表,问题与解法一一对应。

症状原因解法
set 过的参数"失效",标题样式整体变了同类型上又写了 show,替换渲染盖掉了默认外观把参数搬进 show 规则体内,别再两头设
一处局部 set 污染了整份文档规则写在文档顶层,作用域一路覆盖到文末用 block、align 等容器包起来,缩小范围
show 误伤了不该动的元素缺 where 过滤,命中了全部同类元素补上 where(level: 1) 之类的条件

最容易踩的是第一条。看这个最小冲突现场:

#set heading(numbering: "1.") #show heading: it => [自定义标题: #it.body] = 引言

观察点:输出结果是"自定义标题:引言",编号彻底消失。show 的替换发生在 set 生效之后,原元素的整套外观被丢弃,编号想保留就必须在规则体内手动渲染。

选型口诀与最佳实践清单

本节给一条能背走的口诀,再附一份日常可用的清单。

set 调值,show 换体。参数够用时别碰 show,需要换渲染体时 set 帮不上忙。

最佳实践清单:

  1. 默认先试 set 规则,属性表里能找到的开关一律用 set。
  2. show 规则必须带 where 条件,裸写全局替换只在项目级模板里谨慎使用。
  3. 所有 set 与 show 集中放在文件开头或独立模板文件中,作用域一眼可读。
  4. 组合时先 set 定基础,再 show 做定制,两条规则各占一层,不交叉设同一属性。
  5. 改完标题、页眉这类元素后,通读一遍 where 条件,确认没拦错人。

延伸阅读:

  • 官方教程中的样式与页面设置章节:docs/content/tutorial/
  • 各元素属性与规则参考文档:docs/content/reference/
  • 项目入口文档,含两条规则的官方定位说明:README.md

【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询