あまりにも衝撃的だったので……。
このツイートの内容を文字通り解釈すれば次のようなことを言っている。LaTeX や plain TeX 等の「マクロパッケージ」は TeX 言語のソースファイルとして存在していて、例えば LaTeX だと latex.ltx がそれに当たる。従って、このファイルを利用すれば、次のようなことが可能である、というわけである。
%% "裸の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 TeX や LaTeX 等を指す「マクロパッケージ」という用語(およびそれに類する語)については、以前の記事で解説した。もちろん、graphicx 等の「(LaTeX で使う)パッケージ」とは別の概念である。
普通の LaTeX の話
上記のような異様な方法ではなく、「普通に」LaTeX を用いる場合は次のような手順をとっている。
- TeX エンジンで「LaTeX のソースファイル」(latex.ltx)をコンパイルして、その結果を“ダンプ”して「フォーマットファイル」(latex.fmt)を作成する。
- 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 つの動作モードを持っている。
- INI モード: マクロパッケージのソースをコンパイルしてフォーマットファイルを出力するためのモード。
- 非 INI モード: 普通の“TeX 文書”のソースをコンパイルして DVI ファイル*2を出力するためのモード。
TeX エンジンを INI モードで起動するコマンドは「initex」であり、これが所謂「裸の TeX」に相当する。一般のユーザが使う TeX の起動コマンド、例えば tex、latex、platex、pdflaetx 等は非 INI モードで動作している。*3
そして、モードによって使える TeX の機能(プリミティブ)に制限があるのである。
- INI モードでしか使えない機能がある。もちろん、フォーマットファイルを出力する(ダンプする)プリミティブ
\dump
はそれに該当するが、他にも、ハイフネーションパターンを設定するプリミティブ\pattenrs
も INI モードでしか使えない。*4 - 一方、「組版結果のページ出力」の機能(
\shipout
プリミティブ)は非 INI モードでのみ許可されている。
以上の事実を踏まえると、結局、先の話で想定したような「initial-tex」コマンドに相当するものは存在しない(できない)ということが判るであろう。つまり、「TeX 文書中で LaTeX(マクロパッケージ)を読み込む!」というネタは実現できないのである。
*「いや、元のツイートの意図はそんな変態な話じゃないでしょ」
ZR「えっ」
*「どう見ても、『LaTeX はマクロパッケージ』『graphicx はパッケージ』という現状の紛らわしい用語を皮肉ったネタツイートにしか見えないんだけど」
ZR「ええっ」