Typstには,LaTeXでいうsubequation
に相当するものが標準搭載されていません.どうしてもsubequationをしたい時のために,似た機能を実装する方法を考えていました.
案は色々あると思いますが...
案1 : subequation専用カウンタを作る
#set math.equation(supplement: "式", numbering: num=>{//ラベルの表示内容の定義
set text(fill: blue) //分かりやすさのため,青色で表示(実用時は黒でOK)
[(#num)] //表示
})
#let subequation=inner=>{
counter(math.equation).step()
context[
#let eqc = counter(math.equation).get() //equationのカウンタ情報
#let eqcDsp = eqc.at(0) //equationのカウンタ番号
#let subeqc = counter("subeq") //専用カウンタ
#subeqc.update(1) //専用カウンタを1に設定する
#set math.equation(numbering: num=>{ //ラベルの表示内容の定義
set text(fill: red) //分かりやすさのため,赤色で表示(実用時は黒でOK)
subeqc.step() //専用カウンタを進める
[(#eqcDsp.#subeqc.get().at(0))] //表示
})
#inner //内容
#counter(math.equation).update(eqc) //equationのカウンタ情報の復元
]
}
subequation
という関数を定義します.この関数内では,数式が表示される度に専用のカウンタsubeqc
が動くようにします.また,math.equation
に紐づけられたカウンタを固定(しているように見せかけてるだけだけど)し,これとsubeqc
の内容をnumberingとして表示することとします.
次に示すように,subequationにしたい数式をsubequation
関数の引数内に入れて使います.
@A,@B,@C,@D,@E,@F,@G
#v(1cm)
$ a = 1 $ <A>
$ b = 2 $ <B>
#subequation[
$ c = 3 $ <C>
$ d = 4 $ <D>
$ e = 5 $ <E>
]
$ f = 6 $ <F>
$ g = 7 $ <G>
結果
通常の数式のラベルは青色に,subequation内で表示されている数式のラベルは赤色になっています.ちゃんとリンクも機能しています.
問題点?
問題点としては,subequationを入れ子構造にするとカウンタが変な挙動をしてしまう点です.まあ入れ子構造にすることは滅多にないので気にしなくてよいと思います.
あとは細かい話として,通常の数式とsubequationとのnumberingの形式を手動で揃えないといけないということで,そこらへんの保守性が低いことが挙げられます.
例えば,通常の数式のnumberingが[1],[2],...
で,subequationのnumberingが(1.1),(1.2),...
となってると,
こういう感じの変な見た目になってしまいます.