尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Typst set 与 show 规则的区别:一个改参数一个改画法,5分钟讲透该用哪个

Typst set 与 show 规则的区别:一个改参数一个改画法,5分钟讲透该用哪个 Typst set 与 show 规则的区别一个改参数一个改画法5分钟讲透该用哪个【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst做讲义时想只给注意事项那节换个字体写完 set 规则后整篇文档全变了——这是新手最容易踩的坑。set 规则和 show 规则是 Typst 样式系统的两套机制一个配置元素的默认参数一个重新定义元素的画法选错方向就会出现局部改动、全局翻车。先说结论一句话改参数用 set改画法用 show。维度set 规则show 规则一句话理解给元素的默认参数改值拦截元素并重新决定它怎么呈现管什么元素已定义好的可选参数字体、对齐、编号……元素整体外观甚至替换成别的内容何时用全局或局部的常规样式配置现有参数搞不定的定制、条件化样式下面拆开看看完你就知道它们各自的边界在哪。逐个拆解一个拧旋钮一个换模具set 规则给元素拧默认参数类比set 规则就像打印机的默认设置面板——纸大小、默认浓度都是面板上的旋钮拧一下就行你不用拆开机器。官方文档 styling 对它的定位是configure basic properties of elements人话版就是set 规则本质上是一条函数调用写在元素函数前面、只能传该函数的可选参数效果是给这类元素改默认值。下面这个例子设置标题编号和纸张#set heading(numbering: 1.) // 标题编号改成1. #set page(paper: a4) // 纸张设为 A4效果整份文档的标题按1.编号页面按 A4 排版不用逐处手写。show 规则给元素换模具类比set 是拧旋钮show 是直接把模具换掉——同一个标题坯料出来的是带框、居中、换过字体的新成品。官方文档的说法是can completely redefine the appearance of elements人话版show 规则左边是一个选择器决定拦截哪类元素右边要么是 set 规则show-set只改样式要么是一个函数函数拿到元素后可以返回任何内容。这个转换式 show 规则重定义了一级标题// 拦截所有一级标题整体包进带框、居中的块 #show heading.where(level: 1): it block( width: 100%, inset: 8pt, stroke: 0.5pt, )[#align(center)[#text(weight: bold)[#it.body]]]效果每个一级标题自动套上边框并居中正文和其他元素完全不受影响。动手跟练4步给讲义配好样式用一个最常见的场景练手给讲义配样式。四步走每步都能单独验证。第1步用 set 定全文基调目的先立全局默认值后面所有局部样式都基于它。#set text(font: Times New Roman, size: 11pt) // 全文默认字体 #set par(justify: true, leading: 0.8em) // 段落两端对齐 #set heading(numbering: 1.) // 章节用 1. 编号✅ 预期效果全文变成 11pt 衬线字体段落两端对齐章节出现1.编号。第2步只改局部不动全局目的体会 set 的作用域——顶层规则一直生效到文件结尾放进块里就只到块结束。#block[ #set text(font: Courier New) // 块内换等宽字体 注意事项 这一节用等宽字体突出显示。 ] // 到这里作用域结束 实验结果 这一节恢复全局默认字体。✅ 预期效果只有注意事项一节是等宽字体实验结果及之后恢复 Times New Roman。第3步用 show 改造一级标题目的set 改不出带框这种效果交给转换式 show 规则。#show heading.where(level: 1): it block( width: 100%, inset: 8pt, stroke: 0.5pt, )[#align(center)[#text(weight: bold)[#it.body]]]✅ 预期效果所有一级标题带边框、居中加粗二级标题和正文纹丝不动。第4步给页脚加页码目的练习 show-set——只加样式、不拆结构页脚里的其他内容不受影响。// 页脚显示当前页码 #show page: set page( footer: align(center)[#text(size: 9pt)[#counter(page).display()]] )✅ 预期效果每页底部居中显示小号页码且后续仍可用 show-set 继续叠加页脚样式。避坑清单❌ 误区set 和 show 同时作用于同一元素时以为 set 会覆盖 show。→ 后果set 设置的值被 show 的替换结果直接绕过样式不生效。→ ✅ 正确做法show 函数规则优先于 set先想清楚这条链上 show 是谁show-set 链中更靠后、更精确的选择器生效。❌ 误区把全局样式写进转换式 show 的函数体内。→ 后果函数体里的 set 规则锁死了样式之后别的 show-set 无法再覆盖样式不可组合。→ ✅ 正确做法常规样式用独立的 show-set 规则写函数里只放结构变化。❌ 误区在块外的代码块里写set期望影响块内部内容。→ 后果顶层规则只作用于其后的内容块内部和之前的内容都不变。→ ✅ 正确做法想让局部生效把 set 写进内容块#block[...]内部。❌ 误区where里按传参习惯筛选比如where(level: 2)。→ 后果条件匹配不上规则静默失效文档看起来一切正常。→ ✅ 正确做法where 里用的是元素字段写成where(level: 2)这类字段判断拿不准时先用it.level这类字段访问确认值。最后set 管参数、show 管画法作用域都跟所在块走。冲突场景记住一条show 函数规则压过 setshow-set 之间看先后和精确度。延伸阅读Styling 参考、高级教程。你踩过 set/show 作用域相关的坑吗欢迎在评论区聊聊。【免费下载链接】typstA markup-based typesetting system that is powerful and easy to learn.项目地址: https://gitcode.com/GitHub_Trending/ty/typst创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表