TeXとは何ですか?
TeXは何ではないか
TeXは決して形式ではありません。
TeXとは何か?
では、TeXとは何でしょうか?ハムレット1が言ったように、それが質問です。できるだけシンプルに答えてみましょう。
プログラミング言語が二つの基本コマンド(制御シーケンス または プリミティブ と呼ばれる)\a と \b だけで構成されていると想像してください。この言語で文書(本、記事など)の組版プログラムを書くことができます。この言語を (L1) と呼びましょう。これらのプログラムを特定の方法で実行するために、言語のコマンドを解釈するエンジンが必要です。
今、ある文書の組版プログラムを書いているときに、部分列 \a \b \a がかなり頻繁に出現することに気付いたとします。また、言語に別のプリミティブ \def があり、サブルーチンやマクロを定義できるとします。この言語を (L2) と呼びます。この状況下では、プログラムの冒頭でマクロ \def\c{\a \b \a} を定義し、可読性と削減のために各出現箇所を \c に置き換えることができます。
別の文書を組版したい場合、そのプログラムでも同じ部分列が頻繁に現れますので、再びこのマクロを定義しなければなりません。しかし、エンジンが \c マクロを内部状態にロードし、その状態をバイナリファイル(ダンプ)として保存できるとします。そのダンプは、マクロ \c が必要な各文書の組版プログラムを処理する前に自動的にロード((L2) 言語コマンドセットの「上に」)されます。プリミティブに \c マクロが拡張された集合を フォーマット と呼びましょう。したがって、我々のフォーマットは低レベルプリミティブ言語 (L2) の マクロ拡張 です。
エンジンはさらに、制御シーケンスでアクセスできる内部レジスタや 内部パラメータ を多数保持しています。マクロ定義に加えて、フォーマットはこれらパラメータの初期化式を含むことがあります。
Donald E. Knuth は (L2) に似た言語を、はるかに多くのプリミティブを持つ形で定義し、それを TeX と名付けました。また、TeX 言語を理解するエンジンも作成し、現在も動作しています。彼はこのエンジンも TeX と呼びました。
幸いなことに、彼が行ったすべてのことがそれだけではありません。彼は Plain TeX と呼ばれるマクロ拡張(フォーマット)も提案し、プログラム作成をより便利にしました。TeX の初期プリミティブ集合は時に VirTeX(「Vir」は「virgin(未熟)」の略)と呼ばれ、内部パラメータのデフォルトと合わせて考えると、これもまたフォーマットと見なすことができます。
つまり、一方で TeX はプログラミング言語であり、もう一方でそれを理解するインタプリタエンジンでもあります。そして三番目に、TeX は全体としての組版システムという、より一般的な概念でもあります。
最後に付け加えると、実際には組版されるテキスト自体の文字も、現在の入力エンコーディングを考慮し、現在のフォント設定(制御シーケンスで制御可能)を用いて対応する文字を出力させるコマンドでもあります。したがって、マクロを定義するときに文字も使用できます。
これで「TeXとは何か?」という疑問が、もうあなたの頭から消えたことを願っています。
ウィリアム・シェイクスピアの「ハムレット、デンマーク王子」の冒頭にある文字。 ↩︎