😎

Rust製の組版システムTypstを使ってみた

2023/12/18に公開

Typstとは

Typstは、論文・書籍等の執筆を行うためのソフトウェアである組版ソフトウェアの一つです。まだ誕生して1年も経っていない新興のソフトウェアになりますが、GitHubのリポジトリはすでにスター数24000に達するなど、すでに一定の評価を受けている様子です。

この分野のソフトウェアとして最も有名なものにLaTeXがあり、卒業論文の作成などで利用した読者の方も少なくないのではと思います。私もLaTeXはある程度経験があるので、今回はLaTeXとの比較という観点からTypstの機能を眺めたいと思います。

インストール

macの場合、brew install typstでインストールできました。
(https://typst.app/ からoverleafのようなブラウザ版も利用できます)

インストール完了後、以下のコマンドでPDFを生成できます。

typst compile file.typ

下記のコマンドを用いると、対象ファイルの変更のたびにPDFを更新するため、リアルタイムに生成結果を確認することができます。

typst watch test.typ

LaTexは環境構築が毎回面倒な印象なので、すぐに使い始められるのはありがたいです。

文法

段落

=の数を増やすことで小段落が作られるようになっており、直感的です。

= a

== aa

=== aaa

==== aaaa

文字修飾

文字修飾については、markdownと同じような表現が利用できます。

normal *strong* _emphasis_

- 1
- 2
- 3

コメント

コメントは下記のような2種類の文法が有効です。

// 1行コメント

/*
複数行コメント
*/

数式

下付き文字、上付き文字

下付き文字、上付き文字はtexと同様です。

a_b^t

関数

texが中括弧で引数を囲む独特な関数表現なのに対し、typstでは一般的なプログラミング言語に近い関数表現が使われています。

https://typst.app/docs/reference/math/

$mu = frac(1,n) sum_(i=1)^n x_i = frac(x_1 + x_2 + ... + x_n,n)$

画像

画像は同一ディレクトリ上のファイル名を指定することで挿入できます。

#image("ai_dance_character.png")

以下のように、オプション設定で幅指定することもできます。

#image("ai_dance_character.png", width: 40%)

ラベル、参照

<...>でラベルを定義し、@...で参照します。

#figure(
  image("ai_dance_character.png", width: 40%),
  caption: [
    AI Dancing Character
  ],
) <AIDance>

@AIDance is a dancing AI character.

日本語対応について

デフォルト設定で日本語入力すると、以下のように中国文字のような違和感のある文字になってしまいます。

これは、ドキュメント冒頭で以下のように日本語フォントを指定することで解消できます。

#set text(font: "Hiragino Kaku Gothic Pro")

感想

typstを少し使ってみましたが、新しい関数などを覚える必要はあるものの使い始めやすく親しみやすい文法で、総じてかなり使いやすかったです。

一方、やや特殊な表記を使おうとするとレイアウト崩れが発生する印象で、一般的でない表記を含む文書を作りたい場合は、その表現が正しく印字されるかを先に確かめておくのが吉です。

レイアウト崩れの例
$attach(A,t: "t", b: "b", tl: "tl", tr: "tr", bl: "bl", br: "br")$
$attach(A,t: "top", b: "bottom", tl: "tl", tr: "tr", bl: "bl", br: "br")$

簡単な数学記号などでは十分実用に耐える文書を作成できる実感があったので、ちょっとしたドキュメント作成などに活用していきたいと思います。

クロスビットテックブログ

Discussion