マクロツイーター

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

LuaTeX や LaTeX や LuaLaTeX が新しくなってアレ(1)

いや、某 Apple 社の某 OS やそこに搭載された某フォントが新しくなってアレ、の話じゃなくて、TeX 自体の話。

LuaTeX が変わった話

[2017-01-13 追記] 以下に書いてあるのは 0.79→0.81 の間に行われた変更点の話である。LuaTeX ではこの後、0.81→0.85 の間でも大規模なプリミティブの体系の変更が行われている。従って、以下の情報は、現状の LuaTeX についてはほとんど参考にならないだろう。

2015-10-07 リリースの 0.81.0 でプリミティブの大幅な整理が行われた。

  • 複数の名前(エイリアス)をもつプリミティブ*1について、1 つの名前に統一する。
  • omega、aleph カテゴリ((「カテゴリ」はここでの仮の用語で、tex.extraprimitives() で分類を表すのに使われる名前(texetexpdftex、…)のこと。))の廃止。
  • pdfTeX の拡張プリミティブのうち、PDF 出力と直接関係ないものを pdftex カテゴリから luatex カテゴリに移行。さらに名前を「pdf」の無いものに変更((多くは単に「pdf」を取っただけであるが、かなり異なる名前のもの(\ignoreligaturesinfont\expandglyphsinfont)もあるので注意。))。
旧 LuaTeX新 LuaTeX
\pdfeachlineheight pdftex 廃止
\pdfeachlinedepth pdftex 廃止
\pdflastlinedepth pdftex 廃止
\pdffirstlineheight pdftex 廃止
\pdfignoreddimen pdftex 廃止
\pdftexversion pdftex 廃止
\pdftexrevision pdftex 廃止
\pdftexbanner pdftex 廃止
\pdfnormaldeviate pdftex 改名→ \normaldeviate luatex
\pdfuniformdeviate pdftex 改名→ \uniformdeviate luatex
\pdfsetrandomseed pdftex 改名→ \setrandomseed luatex
\pdfrandomseed pdftex 改名→ \randomseed luatex
\pdfpagewidth pdftex 統合→ \pagewidth luatex
\pagewidth omega 移行→ \pagewidth luatex
\pdfpageheight pdftex 統合→ \pageheight luatex
\pageheight omega 移行→ \pageheight luatex
\chardp omega 統合→ \fontchardp etex
\charht omega 統合→ \fontcharht etex
\charit omega 統合→ \fontcharit etex
\charwd omega 統合→ \fontcharwd etex
\pagerightoffset aleph 移行→ \pagerightoffset luatex
\pagebottomoffset aleph 移行→ \pagebottomoffset luatex
\ifincsname pdftex 移行→ \ifincsname luatex
\expanded pdftex 移行→ \expanded luatex
\quitvmode pdftex 移行→ \quitvmode luatex
\ifpdfabsnum pdftex 統合→ \ifabsnum luatex
\ifpdfabsdim pdftex 統合→ \ifabsdim luatex
\ifpdfprimitive pdftex 統合→ \ifprimitive luatex
\pdfprimitive pdftex 統合→ \primitive luatex
\pagedir omega 移行→ \pagedir luatex
\bodydir omega 移行→ \bodydir luatex
\pardir omega 移行→ \pardir luatex
\textdir omega 移行→ \textdir luatex
\mathdir omega 移行→ \mathdir luatex
\boxdir aleph 移行→ \boxdir luatex
\lpcode pdftex 移行→ \lpcode luatex
\rpcode pdftex 移行→ \rpcode luatex
\efcode pdftex 移行→ \efcode luatex
\leftmarginkern pdftex 移行→ \leftmarginkern luatex
\rightmarginkern pdftex 移行→ \rightmarginkern luatex
\tagcode pdftex 移行→ \tagcode luatex
\letterspacefont pdftex 移行→ \letterspacefont luatex
\pdfprotrudechars pdftex 改名→ \protrudechars luatex
\pdfadjustspacing pdftex 改名→ \adjustspacing luatex
\pdfnoligatures pdftex 改名→ \ignoreligaturesinfontluatex
\pdffontexpand pdftex 改名→ \expandglyphsinfont pdftex
\pdfsavepos pdftex 改名→ \savepos luatex
\pdflastxpos pdftex 改名→ \lastxpos luatex
\pdflastypos pdftex 改名→ \lastypos luatex
新設→ \hyphenationmin luatex
(以下は NEWS ファイルに記載されていない変更点)
\leftghost omega 移行→ \leftghost luatex
\localbrokenpenalty omega 移行→ \localbrokenpenalty luatex
\localinterlinepenaltyomega 移行→ \localinterlinepenaltyluatex
\localleftbox omega 移行→ \localleftbox luatex
\localrightbox omega 移行→ \localrightbox luatex
\rightghost omega 移行→ \rightghost luatex
\luatexbanner pdftex 移行→ \luatexbanner luatex
新設→ \matheqnogapstep luatex

情報源は LuaTeX の配布に含まれる NEWS ファイル。

この中で、単なるカテゴリの移行は LuaLaTeX や plain LuaTeX では影響を及ぼさないので、実際に影響があるものの一覧は以下に示すものとなる。(重要そうなものを上に置いた。)

旧 LuaTeX新 LuaTeX
\pdftexversion (廃止)
\pdftexrevision (廃止)
\pdfpagewidth \pagewidth
\pdfpageheight \pageheight
\ifpdfprimitive \ifprimitive
\pdfprimitive \primitive
\ifpdfabsnum \ifabsnum
\ifpdfabsdim \ifabsdim
\pdfsavepos \savepos
\pdflastxpos \lastxpos
\pdflastypos \lastypos
\pdfeachlineheight (廃止)
\pdfeachlinedepth (廃止)
\pdflastlinedepth (廃止)
\pdffirstlineheight (廃止)
\pdfignoreddimen (廃止)
\pdftexbanner (廃止)
\pdfnormaldeviate \normaldeviate
\pdfuniformdeviate \uniformdeviate
\pdfsetrandomseed \setrandomseed
\pdfrandomseed \randomseed
\pdfprotrudechars \protrudechars
\pdfadjustspacing \adjustspacing
\pdfnoligatures \ignoreligaturesinfont
\pdffontexpand \expandglyphsinfont

このうち、\pdftexversion/revision/banner については、以前の記事で定義が変更されたことを述べたうえで「将来廃止予定」であるとも述べたが、これらが実際に廃止されたわけである。

なお、TeX Live においては、エンジンなどのバイナリについては年度の途中での更新は行われない。従って、この仕様変更の影響を被るのは TeX Live 2016 がリリースされた時点ということになる。それまでに該当するパッケージの更新が行われればよいのだが……。

W32TeX に関しては、少なくとも“開発版”の方のアーカイブ luatex-dev-w32.tar.xz の方は v0.81(以降)に更新されている。これについては多くの不具合(例えばコレ*2)が出ることが予想される。

*1:異なるエンジンが異なる名前で実装しているのを継承したために複数の名前が生じた。

*2:コレのエンジン(リビジョン r5339)のバージョンは v0.80.1 だが、この時点で既にプリミティブの変更が行われていたようである。