Typstのここがすごい！！

<!--[広島大学 HiCoder & ゲーム制作同好会GSD Advent Calendar 2023 - Adventarの23日の記事です](https://adventar.org/calendars/9190)
-->

# はじめに

皆さんはレポートを書く際に、何を使っていますか？
以前はWordや$\TeX$が主な選択肢でしたが、一年前にTypstのbeta版が一般公開されて、レポート作成の方法に革新をもたらしています。

<!-- 
最近の私は、大学の授業を入れ過ぎで一週間でさばききれないほどレポートが大量に溜まっていて、精神が病みそうですが、Typstの設定をブラッシュアップしながらレポートを書くことで、精神を安定させています。
忙しい学生生活の中で、Typstを使うことは、作業の効率化だけでなく、精神的なリフレッシュにもつながっています。[^1]
-->

Typstはまだ発展途上であまり認知されておらず、普及の一助となればと思い、この記事を書きました。

# Typstとは

TypstはRust製の新たな組版言語です。

組版とは、「文字組みやデザイン、写真や図版などをページに配置する工程」であり、レポートや卒論を書く際にとても役に立ちます。

現在まで$\TeX$といわれる40年ほどの歴史を持った組版言語を使われていますが、現在もLuaという軽量スクリプトとTeXを組み合わせたりして書きやすくしたりなど、開発が進められてはいますが、肥大化したシステムであるため改善ができず、代替となる組版言語が必要でした。
そこで現れたのはTypstです。

Typstを数か月使ってみた感想は、$\LaTeX$の組版言語の代替となりうるポテンシャルを十分に秘めていると感じました。

# Typstのよいところ

それでは、$\LaTeX$の代替となりうるのかを比較することで見てみましょう。

## 1. 文法がわかりやすい

### 1.1. 数式の文法で良いところ

$\LaTeX$との完全に互換性はないですが、使いやすくなっています。

例えば、正規分布を数式で書くためには、

$$ f(x) = A \exp \left( -\frac{(x - \mu)^2}{2 \sigma^2} \right) $$

$\LaTeX$は、
```tex
f(x) = A \exp \left( -\frac{(x - \mu)^2}{2 \sigma^2} \right)
```

Typstは、

```typescript
f(x) = A exp(-(x - mu)^2/(2 sigma^2))
```

のように書きます。

$\LaTeX$とTypstの違いは、
+ 分数は、$\LaTeX$は`\frac{}{}`で、Typstは`/`で書くことができる
+ 特殊文字を使うのに`\`がいらない
+ `\left( ... \right)`で括弧の大きさを調節する必要がない

Typstはできるだけ文字量を減らそうとしているために、読みやすい傾向があるといえます。

### 1.2. 記号が探しやすい

たとえば、$\rightarrow$,$\Rightarrow$,$\dashrightarrow$,$\leftrightarrow$を書くには、

$\LaTeX$では、
```tex
\rightarrow,\Rightarrow,\dashrightarrow,\leftrightarrow
```
Typstでは、

```typescript
arrow.r, arrow.r.double, arrow.r.dashed, arrow.r.l
```

で書くことができる。

$\LaTeX$で$\leftrightarrow$を書く際に、`\leftrightarrow`が`\rightleftarrow`となるとコンパイルエラーが起こるので、一言一句間違えないようにしないといけない。

しかし、Typstは、`arrow.r.l`は`arrow.l.r`となってもコンパイルエラーは起こらず、どちらも$\leftrightarrow$が出力される。

それゆえ、$\LaTeX$で、検索候補を出しても一文字目が`\r`と入力してしまうと、`\leftrightarrow`の検索候補がでないため、ネットで検索をしなければならず時間が無駄にかかってしまうが、Typstで入稿する際は`arrow.`と打つと検索候補がでるため、そこで欲しい矢印の特徴を付けていくことができ、わかりやすいと言える。

## 1.3 Markdownに似ていて書きやすい

https://zenn.dev/yuhi_ut/articles/how2write-typst1

この記事などを見てもらうとわかりやすいですが、$\LaTeX$のように数式を書くときに、
```latex
\begin{----}
\end{----}
```
で囲む必要もなく、強調文字や斜体文字を書きたいならMarkdownと似た文法で書くことができる。

## 2. エラー文が親切

$\LaTeX$はエラー文が不親切で有名です。

TeX Wikiのエラーメッセージ集がありますが、これを見てもらうと何も分からないと思います。[^2]

https://texwiki.texjp.org/?LaTeX%20%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8

一方、Typstはエラーメッセージは何が原因かがわかりやすいです。

## 3. 環境構築が楽

Typstのいいところは、環境構築が楽なところです。
例えば、Typstをインストールするには、Windowsユーザーなら
```
winget install --id Typst.Typst
```
Macユーザーなら
```
brew install typst
```
もし、Rustの環境が入っているなら、
```
cargo install --git https://github.com/typst/typst typst-cli
```
とするだけでインストールできます。

これも面倒なら、公式が出しているクラウドの環境で書くことができます。

https://typst.app/

一方、$\LaTeX$は、環境構築が面倒です。
なぜなら、$p\LaTeX$でPDFを作成するには、TeXファイルをコンパイルしたものをDVIファイルとして出力し、PDFファイルに変換する、という一連の作業が必要があるからです。[^3]

従って、環境構築のやり方は、

+ latexmkで.latexmkrcにコンパイルする順番を設定
+ VSCodeのsetting.jsonにコンパイルする順番を設定
+ Makefileでコンパイルする順番を設定

の複数のやり方があり、どれが最適なのか未解決問題です。[^4]

## コンパイル速度が早すぎる

私がLua$\LaTeX$でレポートを書いていた時の最長のコンパイル時間は、150秒ほどかかったことがあります。
一方、Typstは**リアルタイム**でコンパイルでき、Word感覚[^5]で打つことができます。
なぜ、このように速いのは、ゼロから組版するのではなく、コンパイラが小さな編集を段階的に処理できるように設計されているかららしいです。[^6]

## 必要なライブラリがそろっている

たとえば、コードを書くために$\LaTeX$では、listingsなどのパッケージを用いないといけないが、Typstではデフォルトで

```
```rust
fn main() {
    println!("Hello World!");
}
``` 　　
```

と書くことで、色のついたソースコードを貼り付けられたりします。

他には、$\LaTeX$でcsvファイルをtableに変換するにはcsvsimpleのパッケージが必要ですが、Typstでは
```
#let results = csv("data.csv")

#table(
  columns: 2,
  [*Condition*], [*Result*],
  ..results.flatten(),
)
```
でできます。`csv()`の関数に`map()`などの関数があるので、データを加工しやすいです。

# LaTeXの方が優れているところ

Typstのいいところばっかり言っても良くないので、$\LaTeX$の方が優れていると感じるところをまとめます。
ただ、あまり思いつかなかったです。

## 1. ライブラリが多い

$\TeX$の歴史が長いからしかたないね。

例えば、花文字を書くことができない

## 2. 初期設定が必要

フォントやレイアウトは初期設定のままだと使えない。
日本人のtypstのテンプレートを作ってくれる人が増えるといいね。

簡易のテンプレートを貼り付けます。

https://github.com/stepney141/my_typst_template

https://github.com/jijinbei/typst_template

卒論・修論を書くためのテンプレートは次のようなものがあります。

https://github.com/ut-khanlab/master_thesis_template_for_typst

https://github.com/donabe8898/typst-thesis-template

https://github.com/yukukotani/typst-coins-thesis

英語でデザインが神ってるのは

https://github.com/flavio20002/typst-orange-template

情報処理学会のテンプレートを作ってくれている方がいます。
本当にありがとうございます。

https://github.com/mkpoli/ipsj-typst-template

# 最後に

Typstが単なる組版言語以上のものであることがお分かりいただけたと思います。
まだ、$\LaTeX$と比べて劣っているところはありますが、これらは時間が解決しそうと考えられます。
とても使いやすいので、ぜひ使ってみてください。


[^1]: 一部例外はあります
[^2]: エラーメッセージを集められたサイトがあるのってLaTeXくらい？？
[^3]: 他にも参考文献を管理するBiBTeXを設定する必要があるが、これが$\LaTeX$が一緒のソフトになっていないのは異常な気がする。その分Typstは一緒になっているので使いやすいです。
[^4]: もし、日本産の関数型を意識した組版言語のSATySFiを使いたい場合、開発中ということであるため、WindowsユーザーはWSLのLinux環境でインストールしなければならず、もっと難しいかもしれません。今後に期待です。
[^5]: Word感覚という表現をTypstに用いるのは相応しくないがいい表現が思いつかなかった
[^6]: Typstの修士論文でそのようなことが書かれていました。TypstでTypstの修士論文を書く面白い論文です。[A Programmable Markup Language for Typesetting](https://www.user.tu-berlin.de/laurmaedje/programmable-markup-language-for-typesetting.pdf)