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

如何在Typst中实现LaTeX的subequations功能?

在Typst中实现带数字+字母编号的多行子方程

要在Typst里实现LaTeX subequations环境那种(1a)、(1b)、(1c)式的编号效果,你可以通过自定义计数器和方程编号格式来实现,具体方案如下:

基础实现代码

// 定义主计数器,负责生成编号里的数字部分
#let subeq-main = counter("subeq-main")

// 自定义编号格式:主数字+字母后缀
#let subeq-format(idx) = {
  let main-num = subeq-main.display()
  let suffix = char("a".at(0) + idx - 1)
  "(" + main-num + suffix + ")"
}

// 生成第一组子方程
#equation(
  numbering: subeq-format,
  align: true,
  a = b,
  b = c,
  c = d,
)

// 递增主计数器,生成第二组子方程
#subeq-main.step()
#equation(
  numbering: subeq-format,
  align: true,
  x = y,
  y = z,
)

代码说明

  • subeq-main是自定义计数器,用来控制每组子方程的数字前缀(比如1、2)。
  • subeq-format函数接收每行方程的索引(从1开始),把主数字和对应字母(a、b、c...)拼接成目标编号格式。
  • equation块开启align: true让方程对齐,同时指定numbering参数为自定义格式函数,这样每行方程都会生成独立的带字母后缀的编号。
  • 要生成新的一组子方程时,调用subeq-main.step()递增主计数器即可,下一组的编号就会变成(2a)、(2b)。

封装成函数简化调用

如果需要频繁使用这种子方程块,可以把逻辑封装成函数,自动处理主计数器的递增:

#let subeq-main = counter("subeq-main")

#let subeq-format(idx) = {
  let main-num = subeq-main.display()
  let suffix = char("a".at(0) + idx - 1)
  "(" + main-num + suffix + ")"
}

// 封装后的子方程块函数
#let subeq-block(..eqs) = {
  subeq-main.step()
  equation(
    numbering: subeq-format,
    align: true,
    ..eqs
  )
}

// 调用方式更简洁
#subeq-block(
  a = b,
  b = c,
  c = d,
)

#subeq-block(
  x = y,
  y = z,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:16:07