e-TeX

e-TeX とは,The NTS (New Typesetting System) team によって始められた,(欧文)TeX の拡張です. 1999年以降は P. Breitenlohner が copyright 所有者となっています. Knuth オリジナルの TeX と100%の互換性を保ちながら TeX の少々不便なところを補うような実用性の高い拡張となっています.

近年,ConTeXtLaTeX における hyperref パッケージなど,e-TeX の拡張モードを要求するマクロ類が増加しつつあります. また e-pTeX, e-upTeX, pdfTeX, LuaTeX, XeTeX, Aleph (Omega と e-TeX のマージ)といった主だった TeX の拡張版においても e-TeX の拡張機能は取り入れられており,事実上の新標準とも呼ぶべき重要な拡張と言えます.



互換モードと拡張モード

拡張モードを選択するのは format 作成時です. 指定ファイル名の先頭に “*” を付けるか,あるいはオプション --etex を付けると,拡張モードの format ファイルをダンプします. 通常 e-TeX をサポートするエンジンに対して,fmtutil.cnf では拡張モードの format file を作成するように設定してあります.

レジスタの増加

様々なレジスタ (count, dimen, skip, muskip, box, token) の数がオリジナルの TeX では256個なのに対し,e-TeX では32,768個に拡張されています. 0 から 255 まではオリジナルの TeX と同じ方法で実現されていますが,256 から 32767 までのレジスタは要求されたときに TeX のメインメモリ領域に sparse registers として作成されます.

プリミティブの拡張

tracing の改良と内部状態の取得

\tracingcommands などの動作が改良され,より大きな値を指定することでより詳細な TeX の内部動作を確認できるようになりました. これに関連して \tracingifs,\tracinggroups といった条件判断文やグループの開始・終了状況を表示するプリミティブも追加されています.

また,TeX ソース内部でも「現在いるもっとも内側の条件判断文の深さや種類」やグループについてのそれらなどを \currentifbranch,\currentiflevel,\currentgrouptype,\currentgrouplevel で調べることができます.

拡張された条件判断文

「式」の表現

\numexpr,\dimexpr,\glueexpr,\muexpr という4つのプリミティブが追加され,それらによって整数値・長さ量・グルーを結果とする式を扱うことができます. 例えば,e-TeX のマニュアルには次のような例が載っています.

\ifdim\dimexpr (2pt-5pt)*\numexpr 3-3*13/5\relax + 34pt/2<\wd20

\middle プリミティブ

TeX では,例えば

\left( ... \right)

で括弧の大きさが中身に応じて自動調整されますが,これでは「区切り記号が3個以上のときに,全部の記号の大きさを自動調整」させるときには面倒なマクロを組まなければなりませんでした.

一方,e-TeX で追加された \middle プリミティブを用いると,そのようなものも

\left< ... \middle| ... \right>

と簡単に実現できます.

TeX--XeT

拡張モードで \TeXXeTstate が正のときに有効となります. 組み方向で「左から右」と「右から左」の双方向が可能で,それらの混植をサポートしています. 「右から左」の場合であっても,出力する DVI ファイルは特別な拡張の無い仕様となっています.

注意

参考サイト

コメント



*1 すなわち,TRIP テストが完全に通ります.

Last-modified: 2015-05-10 (日) 23:36:58 (1077d)