% $Id$ % Enable and prefix LuaTeX primitives for LaTeX-based formats % Assumes LuaTeX 0.39.x or greater. % Manuel Pégourié-Gonnard, 2009. Public domain. \begingroup \catcode`\{=1 \catcode`\}=2 \directlua{ % etex and pdftex primitives are enabled without prefixing % as well as extented Unicode math primitives (see below) tex.enableprimitives('', tex.extraprimitives('etex', 'pdftex', 'umath')) % other primitives are prefixed with luatex (see below) tex.enableprimitives('luatex', tex.extraprimitives('core', 'omega', 'aleph', 'luatex')) } \endgroup \endinput % Rationale for primitives prefixing. % % 1 All current macro packages run smoothly on top of pdf(e)TeX, so those % primitives are left untouched. % % 2 Other non-TeX82 primitives in LuaTeX may cause name clashes with % existing macros in macro packages, especially when they use very % "natural" names such as \outputbox, \mathstyle etc. Such a % probability for name clashes is undesirable, since the most existing % LaTeX documents that run without change under LuaTeX, the better. % % 3 The LuaTeX team doesn't want to apply a systematic prefixing policy, % but kindly provided a tool allowing prefixes to be applied. So we % chose to use it. Previously, we even disabled the extra primitives, % but now we feel it's better to enable them with systematic % prefexing, in order to avoid that each and every macro package (or % user) enables them with various and inconsistent prefixes (including % the empty prefix). % % 4 The 'luatex' prefix was chosen since it is already used as a prefix % for some primitives, such as \luatexversion: this way, those % promitive don't end up with a double prefix (see % tex.enableprimitives in the luatex manual for details). % % 5 The \directlua primitive is provided both with its natural name % (allowing easy detection of LuaTeX-besed formats) and a prefixed % version \luatexdirectlua (for consistency with \luatexlatelua). % % 6 All primitives dealing with Unicode math already begin with \U, % and maybe will match the names of XeTeX primitives some day, so % LuaTeX (starting from 0.75.0) allows listing them separately (the % special 'umath' keyword above), and they are now provided unprefixed. % But because they are also listed with the 'luatex' keyword, they are % duplicated with \luatex prefix, which allows for backword % compatability with previous version of the format. % % 7 Various remarks: % (a) The obvious drawback of such a prefixing policy is that the names % used by LaTeX or generic macro writer won't match the names used % in the manual. We hope this is compensated by the gain in % backwards compatibility. % % (b) The final name of some primitive may sound strange, namely those % already containing the name of an engine, such as % \luatexOmegaVersion. However, since LuaTeX is not a drop-in % replacement for Omega/Aleph, we felt it wrong to provide % \OmegaVersion. % % (c) Maybe some day we'll feel it's better to provide all % primitives without prefixing. If this happens, it % will be easy to add the unprefixed primitives in the format while % keeping the prefixed names for compatibility. It wouldn't work the % other way round; i.e., belaatedly realizing that we should not % provide the unprefixed primitives would then cause break % any LuaTeX-specific macro packages that had been written. % % --Manuel and Karl, September 2009.