マクロツイーター

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

pTeX のプリミティブを把握したい話

pTeX 系のエンジンにどんなプリミティブがあるのか、だんだん判らなくなってきたので調べてみた。

一覧してみる

pTeX 系のエンジンがどのプリミティブを持っているかを表にまとめた。ただし以下に該当するものは除いている。

  • 元祖 TeX のプリミティブ。これはどのエンジンも持っている。
  • アスキーのサイトで紹介されているもの。pTeX 系のエンジンは何れもこれらのプリミティブを持っている。
  • e-TeX 拡張のプリミティブ。*1a-pTeX と e-upTeX はこれらのプリミティブを持っている。
pTeX e-pTeX upTeX e-upTeX
\disablecjktoken
\dtou
\enablecjktoken
\epTeXinputencoding
\forcecjktoken
\hfi
\ifdbox
\ifddir
\ifmdir
\ifpdfprimitive
\iftbox
\iftdir
\ifybox
\ifydir
\kcatcode
\kchar
\kchardef
\lastnodechar
\odelcode
\omathchardef
\omathcode
\pagefistretch
\pdfcreationdate
\pdffiledump
\pdffilemoddate
\pdffilesize
\pdflastxpos
\pdflastypos
\pdfmdfivesum
\pdfpageheight
\pdfpagewidth
\pdfprimitive
\pdfsavepos
\pdfshellescape
\pdfstrcmp
\scriptbaselineshiftfactor
\scriptscriptbaselineshiftfactor
\synctex
\textbaselineshiftfactor
\ucs
\vfi

やっぱり解らないので分類してみる

pTeX 拡張プリミティブ

アスキーのサイトにあるもの以外。

\dtou \ifdbox \ifddir \ifmdir \iftbox \iftdir \ifybox \ifydir \kcatcode \scriptbaselineshiftfactor \scriptscriptbaselineshiftfactor \textbaselineshiftfactor
  • pTeX 系のエンジン(pTeX/e-pTeX/upTeX/e-upTeX)は「pTeX 拡張プリミティブ」を持っている。それ以外のエンジンは持っていない。
upTeX 拡張プリミティブ
\disablecjktoken \enablecjktoken \forcecjktoken \kchar \kchardef \ucs
  • upTeX と e-upTeX は「upTeX 拡張プリミティブ」を持っている。それ以外のエンジンは持っていない。
SyncTeX拡張プリミティブ
\synctex
  • この \synctex--synctex オプションの有無を示す整数パラメタ。書込も可能で、文書の途中で \synctex=1 を実行するとそこ(現在のページ?)から SyncTeX 出力が有効になる。
  • SyncTeX データ出力機能(「SyncTeX 拡張」)をもつエンジン全てが \synctex をもつわけではないらしい。TeX Live においては、pTeX 系全てと pdfTeX、XeTeX、LuaTeX が「SyncTeX 拡張」をもつが, \synctex を持っているのは「e-TeX 拡張をもつもの」(つまり e- でない pTeX と upTeX 以外)に限られる。
pdfTeX 互換拡張プリミティブ
\ifpdfprimitive \pdfcreationdate \pdffiledump \pdffilemoddate \pdffilesize \pdflastxpos \pdflastypos \pdfmdfivesum \pdfpageheight \pdfpagewidth \pdfprimitive \pdfsavepos \pdfshellescape \pdfstrcmp
  • pdfTeX との互換のため、e-pTeX/e-upTeX がこれらのプリミティブをサポートしている。
  • ここに挙げるプリミティブに関しては、新しい LuaTeX (v0.85以降)はそのままの形ではサポートしていない。“違う名前”になっているか、または(Lua で実装可能という理由で)削除されている。
  • XeTeX に関しては、一部のプリミティブはそのままサポートされていて、一部は“別の名前”になっている。
  • なお、\pdfpagewidth\pdfpageheight の役割については以下を参照。
Omega 互換拡張プリミティブ
\odelcode \hfi \omathchardef \omathcode \pagefistretch \vfi
  • e-pTeX/e-upTeX*2 ではこれらの Omega 互換のプリミティブをサポートしている。
  • pdfTeX や XeTeX ではこれらのプリミティブはサポートされていない。LuaTeX では一部がサポートされている。
e-pTeX 独自の拡張
\epTeXinputencoding \lastnodechar
  • これらは、e-TeX にも pTeX にも存在しないが、e-pTeX(および e-upTeX)には存在する。

やっぱり解らないので嘆息してみる

複雑すぎる……。

*1:e-TeX のマニュアルに載っているもの。

*2:正確にいうと、「FAM256 パッチ」を適用した e-(u)pTeX エンジンについての話。TeX Live や W32TeX の e-(u)pTeX はこのパッチが適用されている。