The currently LaTeX2e kernel (latex.ltx
) does not contain any use of primitives other than those provided by Knuth in TeX. Indeed, if you read the code there are explicit steps taken to support TeX 2 (the 7-bit version), even though TeX 3 ('TeX90') was released in 1990. As such, the kernel itself will work with any TeX implementation that passes the TRIP test.
However, there is an important proviso to that. Building a format needs more than just latex.ltx
, and in particular it needs hyphenation patterns. On my system (TeX Live 2013), trying to build a format file without the e-TeX extensions fails as at least one of the hyphenation files uses \numexpr
(texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-ka.tex
). As the hyphenation patterns are not part of the format, you can get around this.
In terms of XeLaTeX and LuaLaTeX, these are very close to the 'standard' LaTeX format. As these engines use UTF-8 input, there are some adjustments which are more-or-less essential in terms of set up (category codes, etc.), which is therefore done in the format-building process. LuaLaTeX's format set up also enables the extra primitives it provides (they don't get activated 'out of the box'). In both cases, these adjustments are needed as latex.ltx
was designed before XeTeX or LuaTeX were released, and it is a most sensible to make the adjustment as part of the format-building system.
It's worth noting that the LaTeX3 packages (expl3
, etc.) have tougher requirements. As well as the e-TeX extensions, \pdfstrcmp
or equivalent functionality is required. Currently, the engines which meet these requirements are
- pdfTeX v1.30 or later
- XeTeX v0.9994 or later
- LuaTeX v0.40 or later