Skip to content

如何让自定义数学公式编号?

如何让自定义数学公式编号?

更详细问题的描述:如何使得数学公式默认不编号,并且不记入编号公式的计数,同时可以添加某些命令使得公式编号?

1. 通过 i-figured

建议查看后手搓一个。

typst
#import "@preview/i-figured:0.2.4"
#show math.equation: i-figured.show-equation.with(only-labeled: true)
#set heading(numbering: "1.1")
= Equation numbering
#show math.equation: i-figured.show-equation.with(only-labeled: true)
#lorem(10)
$
  a+b=c
$<1>
Try to cite @eqt:1, #lorem(5)
$
  1+2=3
$
#lorem(10)
$
  4+5=9
$<2>
#lorem(10)
Typst compiled imageTypst compiled imageTypst compiled imageTypst compiled image

2. 手搓

by OrangeX4(原文

typst
= Equation numbering
#set math.equation(numbering: "(1)")
#show math.equation.where(block: true): it => {
  if not it.has("label") {
    let fields = it.fields()
    let _ = fields.remove("body")
    fields.numbering = none
    [#counter(math.equation).update(v => v - 1)#math.equation(..fields, it.body)<math-equation-without-label>]
  } else {
    it
  }
}

$ x + y $<1>

$ x + y + z $

$ x + y $<2>

Cite @1. #lorem(10)
Typst compiled imageTypst compiled image

3. 如果你还需要子公式

by obj.fake_cirno

typst
#set heading(numbering: "1.")
#let ct=counter("eq")
#set math.equation(numbering: it=>ct.display("(1-1.a)"))
#show heading.where(level: 1): it=>it+ct.step()+ct.step(level: 2)
#show math.equation.where(block: true): it=>{
  it
  if it.numbering !=none{
    if ct.get().len()==2{
      ct.step(level: 2)
    }
  }
}
#let eq_nonum(body)={
  set math.equation(numbering: none)
  body
}
#let subeqs(..args)={
  for eq in args.pos(){
    ct.step(level: 3)
    eq
  }
  ct.step(level: 2)
}
= Equation numbering
$
f(x) = sin x
$

#lorem(10)
#eq_nonum(
  $ x + y = z $
)
#lorem(10)
$
g(x) = cos x
$
#lorem(10)
#subeqs(
  $ F &= sum  $,     // 编号为 (1-1.a)
  $  =  x $,     // 编号为 (1-1.b)
  $ = 1/2m v^2 $, // 编号为 (1-1.c)
)
Typst compiled imageTypst compiled imageTypst compiled imageTypst compiled imageTypst compiled image

4. 子公式另一个版本

by obj.fake_cirno

typst
#set math.equation(numbering: "(1)")
#show math.equation.where(block: true): it => {
  if it.has("label") {
    if "-" == str(it.label) {
      counter(math.equation).update(n => n - 1)
      math.equation(it.body, block: true, numbering: none)
      return
    } else if "::" in str(it.label) {
      let (a, b) = str(it.label).split("::")
      counter(math.equation).update(n => n - 2)
      [#math.equation(it.body, block: true, numbering: _ => "(" + b + ")")#label(a)]
      return
    }
  }
  it
}

$ f(x) $

$ f(x) $ <eq:some::14a>

$ f(x) $ <->

$ f(x) $

@eq:some
Typst compiled imageTypst compiled image
What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.5.1

基于 MIT 许可发布