世界を動かす技術を、日本語で。

Typst: LaTeXの代替候補

概要

  • Typst は、LaTeXの代替を目指す新しいドキュメント組版システム
  • 数式・表・図など 技術文書 に特化し、高品質な出力を実現
  • Rust製・Apache-2.0ライセンス で開発され、無料で利用可能
  • LaTeXよりも 簡潔なマークアップ と高速なコンパイルが特長
  • パッケージや学術誌対応など、 課題も存在 するが成長中

Typstとは何か

  • Typst は、ドキュメント組版専用プログラム
  • 数式、表、浮動図など 技術的要素 を含む文書作成に最適
  • 出力品質は LaTeXと同等 で、よりシンプルなマークアップを採用
  • Rust言語 で開発され、Apache-2.0ライセンスの フリーソフトウェア
  • Linux、macOS、Windows向けに バイナリ提供 もあり

LaTeXの課題とTypst登場の背景

  • LaTeX はTeXを基にした組版システムで、学術分野の標準
  • 出力品質は高いが、 インストールの煩雑さ・コンパイル速度の遅さ が課題
  • エラーメッセージやカスタマイズの難しさも 不満点
  • 長年代替案が現れなかったが、Typstの登場で 新たな選択肢 が生まれた

Typstの開発経緯

  • 2019年に Laurenz MädjeMartin Haug が開発開始
  • 2023年3月に 初のプレリリース版 を公開
  • 現在は v0.13.1、GitHubでは 365人以上が貢献
  • 学術誌での受け入れも始まり、注目度上昇

Typstのインストールと基本操作

  • Rustソース または バイナリ を公式リリースページから入手
  • "typst fonts"で利用可能な フォント一覧 を表示
    • LaTeXインストール済みなら多数のフォントが自動認識
    • システムフォントを無視するオプションも提供
  • "compile"で PDFやSVG、PNG 出力、"watch"で ライブ編集
  • "watch"利用時は 3ウィンドウ構成 (ターミナル・エディタ・PDFビューア)推奨
  • 高速・インクリメンタルコンパイル で大規模文書も快適

TypstがLaTeXより優れている点

  • 同じ行分割アルゴリズム を採用し、美しい段落を実現
  • 数式組版も TeXとほぼ同等の品質
  • エンジン選択不要 で"typst"コマンド一つで完結
  • Markdown風 の簡潔なマークアップで可読性向上
    • カーリーブラケットやバックスラッシュの多用を排除
  • エラーメッセージが分かりやすい (色付きで問題箇所を明示)
  • コードモード・マークアップモード・数式モード の3モード
  • Unicode記号 を直接使用可能
  • プログラミング言語が Typstに統合、カスタマイズも容易
    • Rustに似た構文、ほとんどの関数が 純粋関数
    • パッケージ間の 衝突リスク低減、デバッグ容易

Typstの弱点・課題

  • ページレイアウトアルゴリズムは LaTeXほど洗練されていない
    • WidowやOrphanの回避が苦手
  • パッケージ数はLaTeXに比べて少ない が、既に800以上存在
  • 学術誌の Typst対応テンプレートはほぼ皆無
    • Pandocによる変換が可能
  • 公式ドキュメントが分かりにくい
    • 情報が「チュートリアル」「リファレンス」「ガイド」に分散
    • 説明や構成が不明瞭、アップデートも追いついていない

まとめ

  • Typstは LaTeXの代替 として急速に発展中
  • 簡潔な記法・高速な組版・容易なカスタマイズ が魅力
  • パッケージやテンプレート、ドキュメント整備など 今後の課題 も明確
  • 技術文書作成の 新たな選択肢 として注目

Hackerたちの意見

Typstを始めたときにLaTeXと比べて書いたメモをいくつか紹介するね。

  1. コンパイル時に5つもファイルが生成されない。
  2. コンパイルが瞬時に終わる。
  3. エラーメッセージがめっちゃ分かりやすい(Rustのコンパイラの提案スタイルみたいな感じ)。
  4. リストアイテムは「- item1 - item2」みたいに書けるし、「[item1], [item2]」でもOK。後者の方が良いのは、ブレースに合わせてアンカーを使えるから(vimの「%」みたいな感じ)。長いアイテムのナビゲーションが楽になるんだ。
  5. LaTeXでは\document{...}があって、マクロを指定できないから最初に書かなきゃいけないけど、Typstでは必要なところに近くにマクロを指定できる。
  6. バージョン管理やdiffが簡単。特にセマンティックラインブレークを使うと楽。
  7. ページレイアウトやマージン、間隔、フッターにページカウンターを入れるのがめっちゃ簡単に感じる。
  1. Typstでプログラミングするのは楽しいよ。ちょっとしたインタープリタ言語が組み込まれてて、json("some_file.json")みたいなヘルパー関数もある。論文を書いたときに、結果のテーブルを埋めるのにそれをめっちゃ使った。(ベンチマークスクリプト -> JSONファイル -> Typstが結果をPDFに直接コンパイル)

実際にそれで記事を書いてみたことある?私はあんまり成功しなかったよ。誰も使ってないから、結局自分だけでやらなきゃいけない感じ。

実は、5番目は問題じゃないよ。前文でマクロを定義するのは慣習だけど、どこでもマクロを定義できるからね。

  1. LaTeXでは、\document{...}の中でマクロを指定できないから、最初に書かなきゃいけないんだよね。でもTypstでは、必要なところの近くでマクロを指定できる。マクロはどこでも定義できるけど、パッケージは前文(\begin{document}の前)でしか読み込めないと思う。Typstには詳しくないけど、パッケージはやっぱりドキュメントの最初で読み込む必要があるんじゃないかな(少なくとも、パッケージを読み込むのはその場所が一番いいと思う)。 > 6. バージョン管理やdiffが簡単だよね、特にセマンティックラインブレイクを使うと。セマンティックラインブレイクはLaTeXでも全然問題ないはず。 > 2. コンパイルが瞬時に終わる。 > 3. 診断がすごく分かりやすい(Rustのコンパイラの提案スタイルみたい)。同意、これは確かにLaTeXの一番の弱点だね。

代替の組版システムにはSILEもあって、2つの構文(XMLベースとTeXスタイル)をサポートしてるし、luaでスクリプトも書ける。自由に使える仕様書もある((La)TeXやTypstとは違って、プログラムソースを仕様書として数えない限り)。数式に関しては、MathMLの直接入力もできる。TypstやSILEは使ったことないけど、ドキュメントを見たことはある。MathMLを使ったHTMLも良いシステムになるかもね。XMLソースとXSLTを使ったテンプレートで、OpenStaxの教科書がそうやって作られてるらしい(CNXML経由だけど、そのドキュメントリポジトリにはカエルの写真が数枚しかないみたいで、組版システムの周りでよくあるパターンみたい)。それから、eqn(1)を使ったtroffもあって、シンプルに見えるけど、実際の仕様があるかは不明。TexinfoやLaTeXを埋め込んだorg-mode、他のTeX関連のオプション、MarkdownにHTMLやMathMLを埋め込むのもあるかも。

HTMLとMathMLの組み合わせも悪くないシステムになるかも。HTMLは手書きでも書きやすい(特にタグの省略を利用するときはね[0])、でもMathMLを手書きするのは想像できないな。簡単な数式でもたくさんのタグが必要だからね[1]。 [0]: https://html.spec.whatwg.org/multipage/syntax.html#syntax-ta... [1]: https://en.wikipedia.org/wiki/MathML#Presentation_and_semant...

Typstは本当に素晴らしい。数学専攻の人たちが今は論文を書くのを先延ばしにして、Typstパッケージを書くことに夢中になってるって聞いたよ。10年後にどうなってるか楽しみ。 メリット:

  • コンパイルが瞬時。保存したらすぐに.pdfができる。
  • 意外とMarkdownの代わりに使うことが多い。例えば、ランダムな会議のメモとか。構文はMarkdownと同じくらい簡単で、ボイラープレートなしでいいPDFができる。何が悪いの?
  • 個人的には、エラーメッセージが簡潔すぎてデバッグが難しいこともある。1つでも構文エラーがあるとPDFが生成されないから、LaTeXのデバッグ方法が使えなくなるのがちょっと残念。
  • パッケージを使うときにちょっとした問題が起こるけど、長年のLaTeXユーザーには驚きじゃないよね。

LaTeXでいくつかの講義ノートを書いたことがあって、修士論文(数学)もLaTeXで書いたよ[1]。実際、書くだけで他の人のテンプレートに頼るなら、いい言語だと思う。でも、自分のパッケージを書くとか、基盤のシステムがどう動いてるかを理解するのは、いつも魔法みたいに感じてた。個々のパッケージが互いに干渉しないようにしなきゃいけなかったり、特定の回避策を追加しなきゃいけなかったり。もしかしたら間違ってるかもしれないけど、そんな印象を受けた。TypstがLaTeXの代わりになって、実際に文書のレイアウトやデザインがしやすくなるといいな。1回だけちょっとした実験で使ったことがあるけど、言語は気に入った。でも、上で言ったように、ただテキストを書くだけなら言語は問題じゃないんだ。[1] 実際にはそうじゃないんだ。最初はreStructuredTextで論文を書いて、Pandocを使ってLaTeXとその後のPDFを生成した。これで長い前書きを書かずに始められた。半分以上書いた後に、文書の見た目をどうしたいかが分かってきたら、生成されたLaTeXを整理して、自分のニーズに合わせてフォーマットを調整して、TikZで図を描き直して、そこからLaTeXを書き続けた。言語が問題じゃないと思うけど、最初の章を書く前にデザインフェーズでつまずくのは簡単だよね。

TypstがLaTeXの代わりになって、実際に文書のレイアウトやデザインがしやすくなるといいな。 その目標はLaTeXの範囲を超えてるし(もちろんTypstもね)。文書のデザインにもっとコントロールや力を持ちたいなら、ConTeXtがあるよ。グラフィックデザイナーとしては大好きで、LaTeXやTypstに置き換えるなんて考えられない。でも、もしデザインにあまり気を使わずにテキストを書くことに集中したいなら、LaTeXやTypstはそれにぴったりだね。

君の脚注は、なぜLaTeXが良くなかったのかを本当に説明してるね。最近Typstで論文を書いたんだけど、他の論文はLaTeXで書いたことがある。LaTeXでは実際にMarkdownで書いて、それをLaTeXにコンパイルしてた。Typstではそれが必要ない。Typstが今後数年で劣化しなければ、ずっと使い続けるつもりだよ。

私もTypstについて深くは調べてないけど、経験上、テンプレートを書くのはLaTeXよりずっと簡単だと思う。LaTeXを10年使ってるけど、Typstの方が自分の構造を作るのが得意になってる気がする。

私もreStructuredTextで論文を書いて、Pandocを使ってLaTeXファイルを作り、その後latexmkでPDFを作ったよ。matplotlibとPythonを使ってPDFのプロットも作成して、それをメインのドキュメントにロスレスで埋め込むことができた。reStructuredTextで達成できなかったことってあった?私は制限については知らないけど、PandocのテンプレートでLaTeXを使えるし、reStructuredTextは大体のMarkdown方言に比べてかなり強力だと思う。LaTeXの代わりにreStructuredTextを書き続けるのは簡単だったかもしれないね。

ずっと四半期ごとのサンスクリットのニュースレターを出そうと思ってたんだけど、LaTeXを扱うのが憂鬱だった。基本的なことならLibreOfficeのPDFエクスポートで大丈夫。でも、それはプレーンテキストのワークフローじゃない。そしたらTypstを見つけて、すごく新鮮な気持ちになった。Unicode/Dēvanāgarīのサポートがすぐに使えるし、ギガバイトのパッケージをインストールする必要もないし、ほぼ瞬時にコンパイルできる。これを実現した人たちに感謝!

書いてる本のために、Pandoc + LaTeXをTypstに切り替えたよ。TypstはMarkdownを書くのと同じくらい簡単だし、LaTeXよりプログラムもずっと楽(ただ、いくつかのところはまだちょっと粗いけどね)。LaTeXだと、いろんなパッケージに頼らないといけなくて、その変な相互作用に悩まされることも多かった。Typstなら自分で書くのが現実的だし、すごく速いし、ファイルシステムを汚さないのもいい。PDFを主なターゲットにして技術文書を作るなら、強くおすすめ!

Typstがもっと注目されるようになって嬉しい!数年前に実際の業務をTypstに移行したんだ。私の組織、Zerodhaでは、毎日150万以上のPDFを生成してメール送信してる。以前のパイプラインはLaTeXベース(最初はpdflatex、その後lualatex)だったけど、大きなドキュメントで謎のメモリエラーに悩まされて、Dockerイメージのサイズが巨大で、エフェメラルワーカーの起動時間が遅くなってた。Typstに切り替えたのは大成功だったよ。単一の静的バイナリのおかげで、イメージが小さくなって起動時間も速くなった。何より、パフォーマンスの向上がすごかった。全体のコンパイル時間はLaTeXの約3〜4倍速かった。特に大きなドキュメント(2000ページ以上、主にテーブル)では、Typstは約1分でコンパイルできて、lualatexだと約18分かかってた。パフォーマンス以外にも、開発者体験が良くてエラーメッセージも分かりやすいのが嬉しいボーナスだった。全体のアーキテクチャについて詳しい記事を書いたから、興味があればここで読んでみてね。

あなたの使い方だと、そもそもなんでLaTeXを使ってたの?それがLaTeXの代替を見つけるよりも驚きだわ。

小さなローカルドキュメントを書くのにTypstを使い始めたんだ。以前はMarkdown(またはR-markdown)で書いてたけど、Typstは小さな執筆タスクにとても役立つプログラミング機能を提供してくれる。Markdownでは提供されないカスタマイズが必要な場合に便利だけど、LaTeXの膨大なテンプレートは必要ないからね。他の学者と同じように、出版社がTypstをサポートしない限り、ジャーナル記事や本にはLaTeXを使うつもり。MarkdownはGitHubのファイルにはまだ必要だし、ウェブブラウザでフォーマットされた資料を表示できるからね。コードのドキュメントも同様で、RやJuliaなど多くのシステムが様々なMarkdownのバリエーションをサポートしてる。学生には小さな課題のためにTypstをおすすめしてるよ。Markdownよりも組版の力があって、MS Wordの素晴らしい代替品だし、LaTeXよりも学びやすい。要するに、Typstは特定のニッチを埋めているけど、私の(自然科学の)分野では全ての解決策ではないかな。

他の学者と同じように、出版社がTypstをサポートしない限り、ジャーナル記事や本にはLaTeXを使うつもり。大学の時、私たちはすべてのエッセイをLaTeXで提出してたけど、正直言って使いやすかったよ。これは、テンプレートを開発する熱心な教授や大学院生がたくさんいたからだと思うけど…?それ以来、私はLaTeXを「自由形式」で使ってて、本当に嫌いになったから、次回Markdown/RST以上のことが必要な時はTypstを試すつもり。運が悪ければ、ジャーナルが提供するテンプレートを使うのがもっと悪いことも想像できる。テンプレートがひどいと、確実に苦労することになるよね!

Typstで3Dレンダラーを書いてるよ、理由はこれね https://youtu.be/ocsR-o7auak

LaTeXもTypstも使ったことないけど、アクセシブルなPDFを作るのはどうなの?