You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面页眉中显示当前标题编号及标题内容?

在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」。

关键说明

  1. before(here()).last():here()指向当前页眉的位置,before(here())筛选出所有在该位置之前的标题,last()取其中最后一个,也就是当前页面所属的标题。
  2. current_heading.number:Typst的标题元素自带number属性,是一个包含各层级编号的数组,用join(".")就能拼接成2.1.6这样的格式。
  3. current_heading.body:直接获取标题的文本内容。

内容的提问来源于stack exchange,提问作者AF7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:10:16