TeX・LaTeX とは

TeX が生まれたきっかけは、一束の校正刷りへの失望でした。1977 年の春、ドナルド・クヌースは自著『The Art of Computer Programming』第 2 巻・第 2 版の校正刷りを開いて絶望します——出版社が活字組版から写真植字に切り替えた結果、彼がいちばん大事にしていた数式の見た目が崩れていたのです。数か月で片づけるつもりで自分で組版システムを書きはじめ、結果として 10 年を費やしました。それが TeX です。LaTeX は TeX の後継でも競合でもなく、TeX の上で動くマクロパッケージ ——つまり「TeX に読み込ませる巨大な命令集」です。このページでは、その二つが何であるか、なぜ見た目ではなく構造を書くのか、そして LaTeX が向く人と向かない人を、宣伝抜きで説明します。

TeX とは何か — 校正刷りから生まれた組版エンジン

TeX は、命令を書き込んだテキストファイルを読み、文字と図版をページ上のどこに置くかを 1 万分の 1 ポイント単位で計算して出力するプログラムです。組版(typesetting) というのはもともと、活字を一本ずつ拾って版を組む印刷用語で、TeX はその仕事を計算機の上で引き受けます。作者はスタンフォード大学の計算機科学者 ドナルド・クヌース。1977 年 5 月に書かれた最初の設計メモは TEXDR.AFT という名前で残っていて、のちに彼の著書『Digital Typography』の一章として再録されました。最初に動く版ができたのは 1978 年です。

クヌースの目的が「数式を美しく組むこと」だったので、TeX の細部はどれも執拗です。単語の途中で行を折る ハイフネーションAVTo のように字を寄せる カーニングfifl を 1 文字に鋳込む リガチャ(合字)、段落の最初や最後の 1 行だけがページに取り残されるのを防ぐ ウィドウ/オーファン処理 を、指示されなくても勝手にやります。とりわけ行分割は「1 行ずつ詰めていく」のではなく 段落全体を見渡して総費用が最小になる折り方を選ぶ ため、段落の末尾に 1 文字足しただけで最初の行の折り位置が変わることがあります。この徹底ぶりが、いまも学術出版で TeX が使われ続けている理由です。

もうひとつ、TeX を象徴する事実があります。TeX のバージョン番号は 円周率 π に収束していく ように付けられています。更新のたびに小数点以下の桁が 1 つ増えるだけで、TeX Live 2024 に入っている TeX は 3.141592653 を名乗ります。クヌースは、自分の死をもってバージョンを π に固定し、それ以降は一切の変更を「バグ」とみなすと宣言しました。姉妹ソフトの Metafont のバージョンは同じ理屈で 自然対数の底 e に収束します。組版システムの版番号に数学定数を選ぶという冗談を、40 年以上まじめに続けているわけです。

terminal
$ tex --version
TeX 3.141592653 (TeX Live 2024)
kpathsea version 6.4.0

TeX・LaTeX の読み方

末尾の X はアルファベットの「エックス」ではなく、ギリシャ文字の χ(カイ) です。TeX はギリシャ語 τέχνη(テクネー、技術・芸術)の頭 3 文字で、クヌース自身は「ドイツ語の ach やスコットランド語の loch の ch のように」発音するよう書いています。だから英語圏では「テック」に近く、日本では古くから 「テフ」 とも読まれてきました。LaTeX は「ラテフ」「レイテック」「ラテック」のいずれもよく使われ、どれが正しいという決着はついていません。素材のラテックス(latex)とは無関係です。ロゴが LaTeX のように文字を上下させて書かれるのも同じ由来で、本文中で \LaTeX と書けばこの形が出ます。

LaTeX とは何か — 別のプログラムではなくマクロパッケージ

LaTeX は TeX とは別のプログラムではありません。 TeX にはマクロ機能——命令を組み合わせて新しい命令を定義する仕組み——があり、LaTeX はその機能だけを使って書かれた巨大な命令集です。pdflatex を実行するとき、あなたが起動しているのは「LaTeX という実行ファイル」ではなく、LaTeX の命令一式をあらかじめ読み込ませておいた TeX エンジン です。ここを取り違えると、あとで「エンジン」と「フォーマット」という言葉が出てきたときに必ず混乱します。TeX Live のインストール先を覗くと latexpdflatex が実際には同じ実行ファイルを指していることまで確認できますが、その実験は「TeX(オリジナル)」と「フォーマットとしての LaTeX」のページに譲ります。

そのマクロ集を書いたのは、のちに分散システムの研究で知られる計算機科学者 レスリー・ランポート です。1980 年代前半、SRI インターナショナル在籍中に自分の文書のために TeX のマクロを書きため、それを公開したのが LaTeX の始まりでした。1985 年に LaTeX 2.09 を最後の自作版として区切り、翌 1986 年に解説書『LaTeX: A Document Preparation System』を Addison-Wesley から出しています。名前の La は Lamport の La です。

いま「LaTeX」と言えばほぼ確実に LaTeX2e のことで、これは 1994 年 6 月 1 日に、フランク・ミッテルバッハらの LaTeX Project チームが正式にリリースしたものです。理由は当時の資料 LaTeX News 第 1 号がはっきり書いています——LaTeX 2.09 の派生が増えすぎ、NFSS 入りと無しの LaTeX、SLiTeX、AmSLaTeX を各サイトが並行して抱える羽目になっていたので、それを 一つのフォーマットに統合し直した のです。文書の 1 行目が \documentstyle から \documentclass に変わったのはこのときで、いま誰もが最初に打つ命令は、実は 1994 年の統合の産物です。次世代版として長く開発されていた LaTeX3 は独立した製品にはならず、2018 年以降は LaTeX2e カーネル内部の expl3 プログラミング層 として提供されています。現代のパッケージの多くはこの層の上に書かれています。

「見た目」ではなく「意味」を書く — ワープロとの決定的な違い

LaTeX 文書では、見出しを作るときに「14 ポイント太字・上に空きを 3.5 行分」とは書きません。\section{Introduction} と、それが節の見出しであるという事実だけ を書きます。ではポイント数や空きはどこにあるかというと、クラスファイルの中です。TeX Live 2024 の article.cls を開くと 302 行目にこうあります——\@startsection{section}{1}{\z@}{-3.5ex ...}{2.3ex ...}{\normalfont\Large\bfseries}。見出しの前に 3.5ex、後ろに 2.3ex の空きを置き、\Large の太字で組め、という指示です。この数字はあなたの原稿には一度も現れません。 だから article を学会指定のクラスに差し替えるだけで、原稿に触らずに全部の見出しが指定どおりになります。Web で HTML と CSS を分けるのとまったく同じ発想です。

latex
\documentclass{article}
\begin{document}
\section{Introduction}
The body says what the text \emph{is}, never how it should look.
\[ E = mc^2 \]
\end{document}

この分業が効いてくるのは、文書が長くなってからです。番号は自分で打つ必要がなく、\label\ref を置けば「図 3.2 を参照」の番号もページ番号も自動で埋まり、図を一枚差し込んで番号が全部ずれても勝手に直ります。目次・索引・参考文献も同じ仕組みで生成されます。逆に言えば、見出しを手で太字にしたり番号を自分で打ちはじめたら、それは LaTeX がいちばん得意な部分を手放している合図です。ただし代償もあります。打ちながら結果を見ることはできません。 書いて、コンパイルして、PDF を見る——この往復が LaTeX の作業リズムで、慣れるまではワープロより明らかに遅く感じます。

TeX / LaTeX / pdfLaTeX / upLaTeX / LuaLaTeX の違い

名前が多いのは、エンジン(実際に処理するプログラム)フォーマット(命令の体系) を掛け合わせているからです。エンジンは TeX・pdfTeX・XeTeX・LuaTeX・pTeX/upTeX、フォーマットは plain TeX・LaTeX・ConTeXt。pdflatex は「pdfTeX エンジン + LaTeX フォーマット」、uplatex は「upTeX エンジン + LaTeX フォーマット」という具合に、名前がそのまま掛け算になっています。日本語用のエンジン pTeX・upTeX に LaTeX を載せたものが、それぞれ pLaTeXupLaTeX です。どのエンジンを選ぶべきかという実務的な判断は「エンジンの選び方」のページに任せますが、目安だけ書いておくと——英文中心なら pdflatex、OS のフォントをそのまま使いたいなら lualatexxelatex、日本語なら uplatexlualatex です。

名前正体主な使いどころ
texクヌースのエンジン本体。plain TeX フォーマット付き原理を確かめるとき。日常の文書執筆には使いません
latexLaTeX フォーマット。出力は DVIDVI を経由する古典的な経路。日本語環境の土台でもあります
pdflatexpdfTeX エンジン + LaTeX。PDF を直接出力欧文中心の文書の既定。もっとも実績のある選択
uplatexupTeX エンジン + LaTeX。DVI を出力日本語論文の定番。縦組みや和文の禁則処理に強い
xelatexXeTeX エンジン + LaTeX。Unicode と OS のフォントOpenType フォントを名前で指定したいとき
lualatexLuaTeX エンジン + LaTeX。Lua で内部を拡張できる新規に始めるならこれ。日本語は luatexja で

LaTeX が向く人・向かない人

一言でいうと、長くて構造があり、何度も版を重ねる文書 ほど LaTeX が有利になります。数式が多い、章節が深い、図表と参考文献が数十点ある、投稿先ごとに体裁を変える、共著者と Git で差分を見る——そういう条件が増えるほど自動化の取り分が大きくなります。物理・数学・計算機科学では実質の標準で、プレプリントサーバの arXiv は LaTeX ソースでの投稿を推奨していますし、Wikipedia の数式も LaTeX 記法で書かれています。

その裏返しとして、LaTeX が明らかに割に合わない場面 もあります。1 枚もののチラシやポスターのように、要素を任意の位置に置きたい仕事は、レイアウトソフトのほうが速くて確実です。共著者が全員 Word しか使わないなら、変換の手間が自動化の利得を食い潰します。締め切りが明日で LaTeX を触ったことがないなら、今日は Word で書いてください——この技術は覚えるのに数日かかり、その数日は借りものの時間では払えません。「LaTeX を使えば文書が美しくなる」という言い方は正確ではありません。 正確には、構造を正しく書きさえすれば、体裁を整える作業から解放される、です。

  • 数式が多い文書なら、ほぼ迷わず LaTeX。 数式組版の品質は他の道具が追いつけていません。
  • 投稿先が LaTeX のクラスファイルを配っているなら、それを使う。 体裁の議論がまるごと消えます。
  • 共著者と長期に育てる文書なら、プレーンテキストの強さが効く。 Git で差分が読め、10 年後も開けます。
  • 1 枚もののレイアウトが目的なら、素直に別の道具を。 位置を指定する作業は LaTeX の不得意分野です。
  • まず試すだけなら、インストールせずブラウザで動かせます。 環境構築で挫折するのがいちばんもったいない。

最後に、TeX が 40 年以上生き延びている実務上の理由を挙げておきます。無料のオープンソース で、中身を読んでも改造しても商用に使っても自由。入力は拡張子 .texプレーンテキスト なので、どのエディタでも書け、grep で検索でき、スクリプトから生成でき、Git で差分が読めます。パッケージの総本山 CTAN(Comprehensive TeX Archive Network)には数千の拡張が集まっていて、たいていの「こういうことがしたい」には既に誰かが答えを置いています。そして 同じ入力からは同じ出力が出ます ——Windows でも macOS でも Linux でも、10 年前のソースでも。研究や公文書のように「あとから再現できること」が要件になる場面で、この性質は代えがたい価値を持ちます。次は実際に 1 ページ作ってみましょう。