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等のパッケージマネージャを使ってインストールする方法も展開されています。
- Linux: Typst の Repology ページ
- macOS:
brew install typst
- Windows:
winget install --id Typst.Typst
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
のようなオプションは必要ありません。
また、デフォルトで基本的な算術くらいは出来ます。
これまでの資産・知識
LaTeXは 1984年にリリースされ、現在のバージョン 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 だけ知っているだけでは不十分になることは多分に出てくるでしょう。
どちらも使えるようになっておけば便利です。どちらもある程度使えるようになっておきましょう。