日常のカフスボタン

みたらし団子

LaTeX と Typst を比較してみよう

LaTeX と Typst はともにテキストファイルから PDF を出力できる目的や方法が卑近なツールです。

これらにはよく知られた違いがいくつかありますが、これらの違いが明文化されている記事は無いようでした。 そこで、この 2 つのツールをさまざまな点で比較してみました。

注意:本記事は LaTeX と Typst のどちらが良いツールかを検討する記事ではありません。単に比較することのみに終始することに注意してください。

環境構築

LaTeX を利用するには、以下のようなディストリビューションをインストールする必要があります。(W32TeX は配布終了しました)

  • TeX Live
  • MacTeX
  • MiKTeX
    • ...and more

TeX Live のインストールには少なく見積もっても 1 時間弱、フルスキームに至っては 2 時間強ほど必要です。これは、多数のパッケージやフォント、それらのガイドドキュメントをダウンロードするためです。 結果としてフルスキームでは 8GB 近いものになります。(これによって、どの PC であっても同じパッケージやフォントが揃った状態をオフライン環境で再現できるようになります。)

TeX ディストリビューションは、TDS (TeX Directory Structure) と呼ばれるディレクトリ構成に従っています。特に TeX Live のディレクトリ構成は “texmf ツリー” と呼ばれています。

この texmf ツリーに独自のパッケージや文書クラスを含めたい場合には、適切なディレクトリにファイルを置いて mktexlsr を実行する必要があります。初心者にとっては若干複雑です。

また、TeX Live は毎年(概ね 3~4 月くらい)にバージョンが変更されます。このバージョン変更はその前のバージョンを引き継ぐものではなく、まったく新たに構築する必要があります。これは、毎年数時間かかる環境構築をする必要があることと同義です。

LaTeX のパッケージや文書クラスは CTAN で集積・公開されています。


Typst を利用するには、Typst を実行するバイナリだけがあれば良いです。

最も平易な方法は、リポジトリの Release ページから最新のビルド済みバイナリをダウンロードし、バイナリのあるディレクトリにパスを通せば完了です。

あるいは、winget や brew 等のパッケージマネージャを使ってインストールする方法も展開されています。

Typst では、いずれの方法であっても 3 分もあれば完了します。

また、Typst にもパッケージが数多く存在しますが、これらは必要なドキュメント内で #import "@<namespace>/<package name>:<version>" としたとき、そのパッケージの特定バージョンが自動的にダウンロードされます。 これらのパッケージは OS 毎の データディレクトリキャッシュディレクトリ にインストールされます。(参考

Typst のパッケージやテンプレートは Typst Universe に集積・公開されています。

フォントはローカルにインストールされたもの、あるいはコマンドラインで指定したディレクトリにあるものを利用できます。

ただし、オフライン環境や異なる PC 間でファイルを共有する場合、ローカルにないパッケージやフォントは利用できないため、同じ結果を得られない可能性があります。

異なる PC 間で共有する場合は、オンラインエディタDocker を利用すると良いでしょう。

バイナリの種類

LaTeX にはバイナリに種類があります。例えば、以下のようなものがあります。

  • pdfLaTeX
  • XeLaTeX
  • LuaLaTeX
  • (u)pLaTeX

バイナリ毎にそれぞれ対応するパッケージや得手不得手があり、初心者にとって非常に難解になりがちです。

また、日本語 LaTeX の代名詞とも言える (u)pLaTeX の出力形式は、PDF ではなく DVI であるため、DVI から PDF に変換する DVI ドライバ(多くは dvipdfmx)も気にする必要があります。

一方で、Typst には typst しかありません。非常に簡単です。 日本語に対応しているかどうかはフォントに依存しています。

構文

LaTeX の構文は \ から始まる “コマンド” と \begin{...}\~\end{...} の “環境” からなります。 また、コマンド・環境はともにオプション引数を受け付けるものもあり、引数は key-value 形式 (key = value) を採るものもあります。

独自のコマンド・環境の定義も可能ですが、定義方法は複数あり、初心者にとっては難解に感じるかもしれません。 また、key-value 形式の引数をもつものを定義するには少し面倒です。


Typst の構文は # から始まる “関数” があります。また、これらを簡易的に表現する糖衣構文もあります。そのため、簡単な文書であれば Markdown のような執筆体験を得ることになるでしょう。 オプションは : で区切る形式 (key: value) によって指定します。

独自の関数の定義も可能で、特定のオプションを課すことも出来ます。定義方法は #let のみです。

また、Typst は LaTeX のようにプリアンブルのような出力する文章とは異なる領域を有していないため、文章だけでも PDF を出力できます。

基本的な編集

PDF 文書における基本的な編集とは、次のようなものを指します。

  • ページサイズ・余白の指定
  • フォント変更
  • 文字の色変更
  • 画像の挿入
  • ハイパーリンクの挿入

Typst では、これらを組み込みの関数から変更することが出来ますが、LaTeX では適当なパッケージを把握して利用する必要があります。

  • ページサイズ・余白の指定 ⇒ geometry
  • フォント変更 ⇒ フォント用パッケージまたは fontspec、unicode-math
  • 文字の色変更 ⇒ (x)color
  • 画像の挿入 ⇒ graphics, graphicx
  • ハイパーリンクの挿入 ⇒ hyperref

この意味では、Typst の方が基本的なスタイルの変更にアクセスしやすいと言えるでしょう。

エラーメッセージ

LaTeX のエラーメッセージが難解であることは非常に有名です。

特に、LaTeX が生成するメッセージはエラー箇所を特定していないため、二分探索的にエラー箇所を捜索する必要があります。 あるいは、ChatGPT に訊く方法もかなり有効な手立てらしいです。

Typst はエラーの原因となっている部分を明確に教えてくれます。 メッセージを読めば自力で解決できる可能性が高いです。また、適切な LSP を利用することで基本的な文法エラーや未定義関数の利用を避けることが出来るため、エラーに出会うこと自体を減らすことが出来ます。

文献・索引

LaTeX における文献や索引の作成は、LaTeX とは異なる外部の BibTeX や mendex を使うことで簡単に行えます。(もちろん、これらを手動で作成することも出来ますが、数が多いとあまり現実的ではありません)

BibTeX や mendex はリスト作成を自動化するのに便利ですが、一方でエラーに悩まされることもあります。


Typst における文献は、組み込みの bibliography 関数 を用いることで文献リストを作成できます。これは、Typst 以外の外部ツールを利用する必要が無いことを意味します。

また、索引はパッケージの in-dexter を利用して実現できますが、Typst そのものを実行するだけで索引を作成できる点は変わりません。 LaTeX では考えられない現象が発生します。

PDF の生成速度

最終的な成果物として得られる PDF の生成時間は LaTeX と Typst で大きく異なります。

LaTeX ではどれだけ軽い文書であっても数秒、長いものでは数分から 1 時間弱かかるものまであります。

また、相互参照や文献引用、索引作成あるいは TikZ 等がある場合、複数回 LaTeX を実行する必要があります。これは実行した際に作成された中間ファイルを読む必要があるためです。 そのために、その分だけ余計に時間がかかってしまいます。


Typst では、軽い文書では 1 秒もかかりません。大きい文書であっても LaTeX と比べれば相当に早いでしょう。(大きい文書では試したことがありませんが、生成速度が文書量に対して線形であることを想定しています)

また、相互参照等があっても 1 回の実行で PDF が生成されます。ここで中間ファイルも作成されません。 LaTeX では考えられない現象が発生します。

外部言語との連携

LaTeX では、--shell-escape をすることで LaTeX 外の言語を LaTeX から利用できます。例えば、pythontex では Python や R 等、LuaLaTeX ではネイティブに Lua を利用できます。 加えて、Purified EPS (PostScript) はすべての TeX でネイティブに扱うことが出来ます。

Typst でも pyrunner を利用することで Python を実行することが出来ます。ただし、--shell-escape のようなオプションは必要ありません。 また、デフォルトで基本的な算術くらいは出来ます。

これまでの資産・知識

LaTeX1984 年にリリースされ、現在のバージョン LaTeX2e は 1993 年にリリースされました。 そのため非常に多くの資産や知識があり、これらの資産は現在の LaTeX であっても動作します。

ただし、現在の LaTeX は LaTeX2e から LaTeX3 への過渡期であり、モダン LaTeX ではこれらの資産が意味をなさない可能性もあります。


Typst は 2023 年 3 月に β 版がリリースされました。そのため資産や知識はまだ少ないです。

まだ若いため、破壊的な変更がなされることも少なくありません。この影響を受けて、知識を常に更新し続ける必要がある状況がそれなりの期間で続くでしょう。

今後の発展

LaTeX は現在のバージョン LaTeX2e から LaTeX3 への転換期を迎えています。

LaTeX3 の大きな目的は、LaTeX2e にレイアウト設計とプログラミングの境が無いことに対して、これらの階層を分けようと言うものです。

執筆者側に大きな変更は無いと予想されますが、LaTeX3 への移行に伴って TeX 本体やパッケージが書き換えられるために、日本語用のパッケージや (u)pLaTeX が対応できない可能性が指摘されています。(これが “pLaTeX がヤバい” と言われる所以です)

LaTeX3 の開発状況に関しては LaTeX3 のリポジトリ を見ることで確認できます。


Typst は現在も破壊的な変更を含みながら開発されており、具体的な計画は Roadmap で公開されています。例えば、現在の出力形式 (PDF, PNG) の他に HTML や EPUB による出力が検討されています。

現在、Typst は開発段階であり LaTeX よりも機能面で劣っている部分もありますが、ある程度の時間が経てば改善されていくでしょう。

タグ付き PDF

LaTeX と Typst が共に大きく興味がありそうなトピックは PDF アクセシビリティに関する “タグ付き PDF (tagged PDF)” でしょう。

文書の各部分に、部・章、見出し、引用、箇条書き、表などの構成上・意味上の役割を与えることを文書の構造化という。文書の構造化により、読み手が意味をより理解し易くなる。

タグ付きPDFは、内部に文書構造を指定するタグを付与した PDF のことである。タグ付き PDF では、PDF の中でテキストや画像などのコンテンツをマークで囲い、マークにタグを付与する。また、文書の階層や表などの構造を表すタグを定めて、構造を表すタグとコンテンツを表すタグを使ってタグのツリー構造(タグツリー)を作成する。

—— アンテナハウス PDF 資料室 より

タグ付き PDF は視覚的な機能ではなく、文章を構造化し意味を持たせることで、アクセシビリティを向上させることにあります。

具体的なタグ付き PDF で出来ることは、以下のようなものがあります。(アンテナハウス PDF 資料室 より)

  • PDF の内容の読み上げ順序の指定
  • PDF を変換して再利用する
  • PDF のリフロー表示
  • アクセシビリティサポート

タグ付き PDF 自体は PDF のオプションですが、タグ付き PDF のアクセシビリティ性の高い文章の方が広い人に読みやすいものになると考えられます。

また、より詳細なタグ付き PDF に関しては、 Overleaf の記事 を参照すると良いでしょう。


LaTeX におけるタグ付き PDF に関する機能は開発段階ですが、タグ付き PDF に関するパッケージは CTAN の Accessibility Support で見ることができます。加えて、タグ付き PDF の開発状況は tagpdf を見ることで確認できます。

Typst では、リポジトリでタグ付き PDF について Issue が挙がっていますが、実装には至っていません。Stack Exchange のある回答 には、Typst が初めからタグ付き PDF をサポートされていないことに苦言が呈されたりしています。

余談

結局どちらの方が良いのだろうねという話でした。

当然、“良い” という評価がどの部分を見るかによって異なるため、人によって「慣れている LaTeX の方が良い」という意見もあれば、「Typst の方が記法が簡便で使いやすい」という意見もあるでしょう。

しかしながら、学会やジャーナル等に提出する必要があるような人にとっては LaTeX から離れるのは先のことになるでしょう。

また、数式に関しては MathJax や KaTeX など LaTeX の記法に準拠したレンダリングツールが展開されているのに対して、Typst の記法に準拠した数式レンダリングツールは未だ存在していません。 これを踏まえると、Markdown 等で数式をレンダリングするためには LaTeX の記法を知っておく必要があります。

LaTeX は本当にさまざまなところに影響を与えているため、Typst だけ知っているだけでは不十分になることは多分に出てくるでしょう。

どちらも使えるようになっておけば便利です。どちらもある程度使えるようになっておきましょう。