如何在页面页眉中显示当前标题编号及标题内容?
在Typst页眉显示当前标题编号及内容的解决方案
你的问题出在用first()获取了文档中第一个对应层级的标题,而非当前页面所属的标题。以下是修正后的实现方式:
核心思路
通过query(selector(heading).before(here())).last()获取当前页眉位置之前的最后一个标题(即当前页面所属的标题),再利用标题自带的number属性和body属性拼接出所需格式。
完整代码示例
#set page( header: context { // 跳过第一页页眉 if counter(page).get() > 1 { // 获取当前页面对应的最近标题 let current_heading = query(selector(heading).before(here())).last() // 拼接编号与标题文本 current_heading.number.join(".") + " " + current_heading.body } } ) // 测试用标题结构 = 一级标题 == 二级标题 === 三级标题1 此处内容会显示在第一页,页眉不生效。 === 三级标题2 添加足够多的内容让这部分跳转到新页面,此时页眉会显示「1.2.2 三级标题2」。
关键说明
before(here()).last():here()指向当前页眉的位置,before(here())筛选出所有在该位置之前的标题,last()取其中最后一个,也就是当前页面所属的标题。current_heading.number:Typst的标题元素自带number属性,是一个包含各层级编号的数组,用join(".")就能拼接成2.1.6这样的格式。current_heading.body:直接获取标题的文本内容。
内容的提问来源于stack exchange,提问作者AF7
相关产品推荐
相关产品推荐

