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

如何使用Typst的selector查询标题之间的内容?

在Typst中选择标题之间的内容

可以通过组合Typst的query和选择器逻辑提取标题之间的内容,核心思路是定位目标标题和它后续的第一个同级标题,再获取两者之间的元素。以下是具体实现方案:

实现步骤与代码示例

我们可以封装一个函数来提取指定标题之后、下一个同级标题之前的内容:

= 标题提取演示

// 定义函数:获取指定二级标题之后到下一个同级别标题前的内容
#let get-content-after-heading(target-heading) = locate(loc => {
  // 找到目标标题的位置
  let target = query(selector(heading.where(level: 2, text: target-heading)), loc).first()
  // 找到目标标题之后的第一个同级标题
  let next-heading = query(selector(heading.where(level: 2)).after(target.location()), loc).first()
  
  if next-heading != none {
    // 获取两个标题之间的所有元素
    query(selector(all).between(target.location(), next-heading.location()), loc)
  } else {
    // 如果是最后一个标题,获取它之后到文档结尾的内容
    query(selector(all).after(target.location()), loc)
  }
})

// 提取Test1到Test2之间的内容
#let content1 = get-content-after-heading("Test1")
#content1

// 提取Test2到Test3之间的内容
#let content2 = get-content-after-heading("Test2")
#content2

// 提取Test3之后的内容
#let content3 = get-content-after-heading("Test3")
#content3

== Test1
#lorem(10)

== Test2
Hello World. \
Hello Again.

== Test3
This is test3 \
This is test3 too

关键逻辑说明

  • 定位目标标题:通过heading.where(level: 2, text: target-heading)精准匹配指定二级标题,获取其位置对象。
  • 定位下一个同级标题:用.after(target.location())筛选出目标标题之后的第一个同级标题,作为内容范围的结束边界。
  • 提取区间内容:使用.between()选择器获取两个标题位置之间的所有元素;如果是最后一个标题,则用.after()获取其之后到文档结尾的内容。

注意事项

  • 如果标题文本存在重复,需要调整匹配逻辑(比如结合标题的位置索引)避免错误匹配。
  • 提取的内容是元素列表,直接调用即可渲染;若需进一步处理(如统计字数),可遍历列表操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:23:30