我想检查我的 tex 文档是否用 LuaTeX(或任何其他 Lua TeX 编译器)编译。
TeXbook 中的简单方法是检查\directlua
宏\@empty
,例如
\ifx\directlua\@empty{\errmessage{...}}\fi
如果我运行luatex
,一切都很好。如果我运行tex
,编译会失败,并显示\errmessage
-- 很好。但如果我运行latex
,不会出现我的错误,但编译会因为未定义的\directlua
环境而失败。哪个\ifx
语句适用于所有 TeX 方言?为什么不适用于普通 TeX 的那个,即上面的那个?提前致谢 :)
更新
解决这个问题很简单,但我不知道它是否会在将来造成任何问题。
\ifx\directlua\pgf@gd@undefined@donotuse{%
\errmessage{an error}\fi
与 TeX 和 LaTeX 配合良好。有没有更优雅且不需要任何额外软件包的方法?否则我会将此作为答案发布。
答案1
\@empty
是在 LaTeX 中定义的,所以你的测试失败了。你为什么不使用ifluatex.sty
?它也可以与 plainTeX 一起使用,
答案2
这是一个更直接的答案,使用国际纺织展览会(参见第 3 节):
\usepackage{iftex}
\ifLuaTeX
% ⟨material for LuaTEX⟩
\else
% ⟨material not for LuaTEX⟩
\fi
答案3
怎么样iftex
? 它在普通情况下运行良好,并为您提供一些其他有用的宏。
它也包含在 TeXLive 中。
答案4
关于什么
\ifcsname directlua\endcsname
Yes, I am running LuaTeX
\else
Oh no, I give up
\fi
?
我猜现在每个人都在使用 etex \ifcsname
... 肯定有一个缺点。但是是哪个呢?