1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Typst】subequation環境を実装する

Posted at

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>

結果

image.png
通常の数式のラベルは青色に,subequation内で表示されている数式のラベルは赤色になっています.ちゃんとリンクも機能しています.

問題点?

問題点としては,subequationを入れ子構造にするとカウンタが変な挙動をしてしまう点です.まあ入れ子構造にすることは滅多にないので気にしなくてよいと思います.

あとは細かい話として,通常の数式とsubequationとのnumberingの形式を手動で揃えないといけないということで,そこらへんの保守性が低いことが挙げられます.
例えば,通常の数式のnumberingが[1],[2],...で,subequationのnumberingが(1.1),(1.2),...となってると,
image.png
こういう感じの変な見た目になってしまいます.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?