マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

異様な LaTeX の話

あまりにも衝撃的だったので……。

このツイートの内容を文字通り解釈すれば次のようなことを言っている。LaTeX や plain TeX 等の「マクロパッケージ」は TeX 言語のソースファイルとして存在していて、例えば LaTeX だと latex.ltx がそれに当たる。従って、このファイルを利用すれば、次のようなことが可能である、というわけである。

[bizarre.tex]
%% "裸のTeX"でコンパイルできる"文書"を作るよ!

% LaTeXを読み込むよ!
\input latex.ltx

% あとは普通にLaTeXできるよ!
\documenetclass[a4paper]{article}
\begin{document}

Happy {\TeX}ing!

\end{document}

仮に、“裸のTeX”を起動するコマンド initial-tex があったとすると、次のようにして「普通の LaTeX の出力」の DVI 文書を得ることができるはず。

initial-tex bizarre.tex

何だか凄まじい発想である。

しかし、残念ながら(?)、このような方法は TeX の実装上の制限のために上手くいかない。ここではその理由を説明する。

[注意] plain TeXLaTeX 等を指す「マクロパッケージ」という用語(およびそれに類する語)については、以前の記事で解説した。もちろん、graphicx 等の「(LaTeX で使う)パッケージ」とは別の概念である。

普通の LaTeX の話

上記のような異様な方法ではなく、「普通に」LaTeX を用いる場合は次のような手順をとっている。

  1. TeX エンジンで「LaTeX のソースファイル」(latex.ltx)をコンパイルして、その結果を“ダンプ”して「フォーマットファイル」(latex.fmt)を作成する。
  2. TeX エンジンがフォーマットファイルを読み込み、さらに(ユーザが指定した)LaTeX 文書ファイル(〜.tex)を読み込みコンパイルして、結果の DVI ファイルを出力する。

TeX エンジンが latex.fmt(これはバイナリファイルである)を読み込むと、それはソースファイル latex.ltx を読んだことと同値になる。すなわち、フォーマットファイルは、「動的リンクライブラリファイル*1」や Java の「JAR ファイル」に相当するものと考えられる。

実際には、1 の作業は「TeX システム」の配布者が行ってくれている(つまり、「TeX 配布物」には latex.fmt が含まれる)ので、通常の LaTeX ユーザが行う作業は 2 だけである。そして、「latex.fmt を読み込んだ状態で TeX エンジンを起動する」ためのコマンドが「latex」なのである。「latex コマンドで LaTeX が起動する」という事実の裏側にはこのような過程が隠れている。

INI モードと非 INI モード

このような手順に呼応して、TeX エンジンは次の 2 つの動作モードを持っている。

  1. INI モード: マクロパッケージのソースをコンパイルしてフォーマットファイルを出力するためのモード。
  2. 非 INI モード: 普通の“TeX 文書”のソースをコンパイルして DVI ファイル*2を出力するためのモード。

TeX エンジンを INI モードで起動するコマンドは「initex」であり、これが所謂「裸の TeX」に相当する。一般のユーザが使う TeX の起動コマンド、例えば texlatexplatex、pdflaetx 等は非 INI モードで動作している。*3

そして、モードによって使える TeX の機能(プリミティブ)に制限があるのである。

  • INI モードでしか使えない機能がある。もちろん、フォーマットファイルを出力する(ダンプする)プリミティブ \dump はそれに該当するが、他にも、ハイフネーションパターンを設定するプリミティブ \pattenrs も INI モードでしか使えない。*4
  • 一方、「組版結果のページ出力」の機能(\shipout プリミティブ)は非 INI モードでのみ許可されている。

以上の事実を踏まえると、結局、先の話で想定したような「initial-tex」コマンドに相当するものは存在しない(できない)ということが判るであろう。つまり、「TeX 文書中で LaTeX(マクロパッケージ)を読み込む!」というネタは実現できないのである。

*  *  *

*「いや、元のツイートの意図はそんな変態な話じゃないでしょ」
ZR「えっ」
*「どう見ても、『LaTeX はマクロパッケージ』『graphicx はパッケージ』という現状の紛らわしい用語を皮肉ったネタツイートにしか見えないんだけど」
ZR「ええっ」

*1:Windows では .dll、Unix 系 OS では .so の拡張子をもつ。

*2:エンジンによっては PDF ファイルの場合もある。

*3:念のため補足すると、「tex」は「裸の TeX」ではなく「plain TeX」の起動コマンドである。「素の TeX」という用語は普通は plain TeX を指すはずだが、「裸の TeX」の意味で用いる人もいるようである。

*4:他に何かあったっけ?