引用した式にだけ式番号をつけたい時がある.LaTeXではautonumパッケージなどを使えば実現できる.Typstでも同じようなことができ,その方法はこの記事で紹介した.
しかし,記事で紹介した方法ではいちいち関数で囲む必要があった.
以下のようにすれば,そのようなことをせずとも自動で式を引用したときだけ式番号をつけることができる.
#set math.equation(numbering: "(1)")
#show math.equation.where(block: true): it => {
let eqbox(eq) = context{
let par-h = par.spacing
box(eq,outset:par-h/2, width:100%)}
if it.has("label") {
let tlabel = it.at("label")
context{
let eql = counter("auto-numbering-eq" + str(tlabel))
if eql.final().at(0) == 1{
eqbox(it)
}
else {
counter(math.equation).update(n => n - 1)
eqbox($display(it.body)$)
}
}
}
else {counter(math.equation).update(n => n - 1)
eqbox($display(it.body)$)}
}
#let eq_refstyle(it) = {
return {
let lbl = it.target
let eq = math.equation
let el = it.element
let eql = counter("auto-numbering-eq"+str(lbl))
eql.update(1)
if el != none and el.func() == eq {
link(lbl)[
#numbering(
el.numbering,
..counter(eq).at(el.location())
) ]
}
else {it}
}
}
#show ref: it => eq_refstyle(it)
ただし,式番号をつけるときとつけないときで若干式周りのスペースが変化してしまうので微調整している.これは設定次第では壊れるかもしれない.
<2025/3/16追記> box環境で囲むことにより前後の空白のスペースをラベルありなしで統一できるようにした.