Typstで黒板太字・筆記体・花文字・ギリシャ文字・ドイツ文字・ヘブライ文字(一部)を表記する方法

:::note info
本記事は[Typst Advent Calendar 2024](https://qiita.com/advent-calendar/2024/typst)の4日目の記事です。
昨日は[@doraTeX](https://qiita.com/doraTeX)さんによる[VScode Dev Container on macOS でポータブルな Typst の日本語執筆環境を構築する（結論要約版）](https://qiita.com/doraTeX/items/e38a4a367822a968b440)が公開されました。
明日は[@key_271](https://qiita.com/key_271)さんによる記事が公開される予定です。
:::

あまり難しい手順は必要ありませんが、意外と花文字の表記が紹介されていなかったり、表記方法をまとめた記事がなかったりしたため、備忘録の意味も込めてまとめておきます。こちらに掲載している情報は2024年12月2日時点の最新バージョン(`typst 0.12.0`)および`typst`[公式ドキュメント](https://typst.app/docs)の内容に基づきます。また、基本的にフォントには`New Computer Modern`,`Harano Aji Mincho`を使用しています。

## 黒板太字(Blackboard bold)
黒板太字(Blackboard bold)は数学で特定の集合(実数の集合や複素数の集合など)を表す際に使用される書体です。LaTeXでは`\mathbb{}`を使って表記しますが、Typstでは`bb`関数を用いて表記するか、大文字の場合は`RR`や`CC`のように、ラテン文字を重ねることで表記することが出来ます。

```typst
$ 
  bb(b)\
  RR=bb(R)
$

$RR^n$は$n$次元の実ベクトル空間を表す。
```
このように表記すると、以下のように表示されます。

![bb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/6e87dbd5-56d1-d40b-d8ab-2b13a10a1ae3.png)


## 筆記体(Calligraphic)
筆記体(Calligraphic)も、数学的な文章を書く際によく使われます(筆者は完全加法族を表す記号として筆記体の$\mathcal{F}$を使用することが多い)。LaTeXでは`\mathcal{}`を使って表記しますが、Typstでは`cal`関数を用いて表記します。

```typst
$
  cal(A B C D E F G)\
  cal(a b c d e f g)
$

#align(center)[完全加法族$cal(F)$は集合の補集合をとる演算、\ 有限個の集合の和集合・積集合をとる演算に対して閉じている。]
```

このように表記すると、以下のように表示されます。

![cal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/74488f04-a32a-e07f-9f67-4e140169eac7.png)


## 花文字
花文字に関しては少し厄介な問題があります。
というのも、LaTeXでは筆記体には`\mathcal{}`を使い、花文字には`\mathscr{}`を使いますが、Unicodeでは両者に同じ文字コードが割り当てられているため、Typstではこれらを区別することが出来ません。

その対処法として、以下に示すような関数(公式ドキュメントから抜粋)を独自に定義するというものがあります。

```typst
#let scr(it) = text(
  features: ("ss01",),
  box($cal(it)$),
)
```

このように定義した後、`scr`関数を用いて表記することで、花文字を表記することが出来ます。

```typst
$
  scr(A B C D E F G)\
  scr(a b c d e f g)
$

$ scr(F)[f(t-t_0)]=e^(-i omega t_0)F(omega) = G(omega) $
```

![scr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/89f84564-a083-361d-dc24-57095118a782.png)


ただし、注意点としてこの方法はデフォルトの数式フォント以外では使用できるか不明瞭であるということに留意してください。フォント特性(font features)をそもそもサポートしていないフォントでは上記の関数を定義してもおそらくエラーが発生するでしょうし、サポートしているフォントだったとしても、所望の字体が`ss01`に割り当てられているかどうかは不明です。そのため、デフォルトの数式フォント以外を導入する場合は、ドキュメントを参照して対応をおこなうことをお勧めします。

## ギリシャ文字
ギリシャ文字は数学の表記において欠かせないものです。LaTeXでは`\alpha`や`\beta`のように表記しますが、Typstでは`alpha`や`beta`のようにそのまま表記すればギリシャ文字として表示されます。また、大文字にしたい場合は`Alpha`や`Beta`のように、頭文字を大文字にすることで表記することが出来ます。

```typst
$
  alpha beta gamma delta epsilon zeta eta theta iota kappa lambda mu nu xi omicron pi rho sigma tau upsilon phi chi psi omega\
  Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
$
```

![greek.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/ca121141-52e8-25c6-6fda-44d27f03bfc4.png)


また、LaTeXでは一部のギリシャ文字の変種(例:$\epsilon$と$\varepsilon$、$\phi$と$\varphi$)を表記するために`\varepsilon`や`\varphi`を使用しますが、Typstでは`epsilon.alt`や`phi.alt`のように`.alt`を付けることで表記することが出来ます。

```typst
$
    epsilon epsilon.alt\
    phi phi.alt
$
```

![greek_alt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/37e70f63-bf9f-98f3-ec32-4f75531885c7.png)


個人的には、Typstの、末尾に`.alt`を付けることで変種を表記するという方法は非常に直感的でわかりやすいと感じました。しかし面倒なことに、LaTeXにおける`\var`とTypstにおける`.alt`は必ずしも対応しているわけではないようです......。(例えばLaTeXの`\varepsilon`に対応するのは$\varepsilon$ですが、Typstでこれを表示したいときの表記は普通の`epsilon`)

## ドイツ文字(フラクトゥール)
ドイツ文字を表記する際、LaTeXでは`\mathfrak{}`を使って表記しますが、Typstでは`frak`関数を用いて表記することが出来ます。

```typst
$
  frak(A B C D E F G)\
  frak(a b c d e f g)
$
```

![frak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/1015d19d-0335-16a1-f73b-f74c3a35962d.png)


このように表記すれば、26文字のラテン文字(大文字、小文字)に対応したドイツ文字を表示することが出来ます。私はあまり詳しくありませんが、ドイツ文字を使用する分野としてはリー代数等があるらしいです。

## ヘブライ文字
ヘブライ文字は、例えば無限集合の濃度を表すのにアレフ(aleph、$\aleph$)記号が使われることがあります。LaTeXでは`\aleph`を使って表記しますが、Typstでは`aleph`のように名前をそのまま使って表記することが出来ます。

```typst
$
  aleph alef beth bet gimmel gimel daleth dalet shin
$

$aleph_0$はすべての自然数からなる集合の濃度であり、無限基数である。
```

![hebrew.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748073/d974665b-d7b9-e875-1097-684a552330bc.png)


ちなみに筆者は$\aleph$以外のヘブライ文字が使われている場面を見たことがありません...(不勉強)。

## まとめ
今回は、主に数学で用いられることの多い様々な字体などをTypstで表記する方法を紹介させていただきました。今回例示に使用したコードはGithubにアップロードしていますので、興味のある方は[こちら]()から閲覧してみてください(大した文量はありませんが...)。また、コードの間違いや改善案、誤字脱字、Typstのバージョンアップに伴う変更などがあれば、お気軽にご指摘いただけると幸いです。よきTypstライフを！

## 参考文献
- [Typst公式ドキュメント](https://typst.app/docs)
- [Variants - Typst Documentation](https://typst.app/docs/reference/math/variants/)
- [Typstでscr(花文字)が使えない件](https://zenn.dev/ultimatile/scraps/78208ac57afafb)
- [Typst の数式で Stylistic set したい話](https://qiita.com/Yarakashi_Kikohshi/items/b7beaa0fba62a527df2b)
- [sym - Typst Documentation](https://typst.app/docs/reference/symbols/sym/)