如何修改Typst的#enum函数实现技术报告式段落编号?
实现Typst技术报告式层级段落编号
在Typst中,无需将内容设为标题,通过自定义枚举的编号规则结合计数器联动,就能实现你要的层级段落编号效果。
方案一:直接修改全局枚举样式
通过set enum定义编号规则,让嵌套层级的计数器联动生成点分隔的编号:
#set enum(numbering: (depth) => { let num_parts = [] for level in range(1, depth + 1) { num_parts.push(counter("enum", level: level)) } num_parts.join(".") + " " }) // 示例输入 + Paragraph 1 + SubParagraph 1 + Sub-SubParagraph 1 + Paragraph 2 + SubParagraph 2 + Sub-Sub Paragraph 2
这段代码会遍历当前枚举的层级,依次获取对应层级的计数器值,用点连接后添加空格,完成编号与段落内容的分隔。
方案二:自定义专用枚举环境(可选)
如果需要统一调整缩进、间距等样式,可以封装一个专用的段落枚举环境:
#let tech-para(children) = { enum( children, numbering: (depth) => { let parts = [for l in 1..depth+1 counter("enum", level: l)] parts.join(".") + " " }, indent: 1em, spacing: 0.5em ) } // 使用方式 #tech-para[ + Paragraph 1 + SubParagraph 1 + Sub-SubParagraph 1 + Paragraph 2 + SubParagraph 2 + Sub-Sub Paragraph 2 ]
效果验证
运行上述代码后,输出格式完全符合需求:
1 Paragraph 1
1.1 SubParagraph 1
1.1.1 Sub-SubParagraph 1
2 Paragraph 2
2.1 SubParagraph 2
2.1.1 Sub-Sub Paragraph 2
这种方式仅针对段落枚举生效,不会将内容识别为标题,避免了标题样式带来的额外格式干扰。
内容的提问来源于stack exchange,提问作者user20383837
相关产品推荐
相关产品推荐

