Typst に関する雑多な話
ここでは Typst に関する小ネタをまとめて挙げておく(随時更新)。
Typst をビルドする
Typst は Windows であれば Winget, macOS なら Homebrew, Linux なら Snap または “Versions for typst” から直接取得できるが,これらの方法でインストールできない場合は Rust のビルド環境を導入して Typst をビルドする。
とりあえず Linux プラットフォームで Rust ビルド環境をインストールするには以下のコマンドでいける1。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
これで PATH の設定までやってくれる。 その後,以下のコマンドで Typst のビルドを行う。
$ cargo install --locked typst-cli
Rust ビルド環境を標準設定でインストールしているなら ~/.cargo/bin/
ディレクトリ(Linux の場合)に typst
コマンドが出来ているはずである。
cargo
コマンドが起動しているならこのディレクトリに PATH が通ってるはずなので,そのまま typst
コマンドを実行できる。
変数をコマンドライン引数で指定する
Typst は compile
時に --input
オプションでキーと値を与えることができる。
--input
オプションは複数指定できる。
$ typst compile --input key1=value1 --input key2=value2 sys-inputs.typ
設定したキー・値のペアは sys
.inputs
から取得することができる。
#show raw: body => {
set text(font: (
(
name: "Inconsolata",
covers: "latin-in-cjk",
),
"Noto Sans CJK JP"
))
body
}
#sys.inputs
このコードに対し --input key1=value1 --input key2=value2
オプションを付けて compile
すると。

などと連想配列(dictionary
)の形で格納されていることが分かる。
なので,上の例であれば sys.inputs.key1
または sys.inputs.at("key1")
で値 "value1"
を取得できる(値は必ず文字列に解釈される)。
ただし sys.inputs.key3
のように --input
オプションで指定していないキーを読もうとすると
$ typst compile --input key1=value1 --input key2=value2 sys-inputs-1b.typ
error: dictionary does not contain key "key3"
┌─ sys-inputs-1b.typ:12:12
│
12 │ #sys.inputs.key3
│ ^^^^
という感じにコンパイルエラーになる。 厄介なことに VS Code の Tinymist Typst 拡張機能は,このような immediate なキーの記述に対してエラーを吐いてくれて,けっこう鬱陶しい。 回避策としては
#let key3 = ""
#if "key3" in sys.inputs {
key3 = sys.inputs.at("key3")
}
#key3
などと記述すればいいようだ。
この場合 compile
処理自体は「正常終了」してしまうのがデメリットかな2。
ブックマーク
ブックマークは「Typst に関するブックマーク」にてまとめています。
参考文献
- Typst完全入門: LaTeXより簡単、Markdownより強力、美しいドキュメント作成術
- doitsu (著)
- 2024-12-08 (Release 2024-12-08)
- Kindle版
- B0DPXBNTRS (ASIN)
- 評価
マークアップ言語および組版ツールである Typst についての解説。 Kindle 版のみの提供。固定レイアウトではないためレイアウトが崩れまくって読みにくい。この手の技術解説書は固定レイアウトの Kindle 版か,いっそ PDF で出してほしい。でも Typst についてまとまった解説のある日本語の本は他に見当たらなかったのでありがたい。
-
Linux の Rust ビルド環境には GCC も必要。 Ubuntu は GCC が既定で入ってないので,
sudo apt build-essential
で GCC を導入する。 ↩︎ -
軽く調べてみたが Typst には【2025-03-07 追記】あれから少し勉強してexit
やpanic
のようなプロセスを強制終了させる仕組みがない。try-catch
の例外処理もなく,当然throw
のようなものもない。たとえば処理中に(文法エラーや言語仕様上の致命的エラーではなく)ビジネスロジック上の問題があったときに,その問題をドキュメントとして出力することは可能だが,処理自体は「正常終了」してしまうため,プロセスを監視する側はエラーを感知できず出力結果を目視してはじめてエラーが起きていることが分かることになる。これはちょっと面白くない。assert
関数を使えばロジカルなエラーを検出したときに指定したメッセージを吐いてエラー終了できることが分かった。まじすんません 🙇 ただし,今回の例ではassert
関数を使ってエラーハンドリングしようとしても,結局は Tinymist Typst 拡張機能がエラーを吐くので鬱陶しいことには変わりない。 ↩︎