如果包不是从 lualatex 加载的,我想阻止处理包的其余部分。由于某种原因,我无法加载 ifluatex 包,因此我借用了\ifluatex
该包的定义并编写了以下代码块:
\expandafter\ifx\csname luatexversion\endcsname\relax % = not \inluatex
%\typeout{^^J********************** not LuaTeX^^J}
\PackageError{babel}{
^^J\space\space * Option russianu is intended for LuaTeX only.
^^J\space\space * Option russian is used instead.
}
\relax
\input{russianb.ldf}
\let\@next@action\endinput
\else
%\typein{^^J********************** LuaTeX^^J}
\let\@next@action\relax
\fi
\@next@action
似乎有效,但是有没有更好的解决方案\@next@action
. 尤其是,由于只使用一次,因此最好避免引入。
解释一下:我的目标是通过 russian 选项来破解 babel,让它能够轻松地与 LuaLaTeX 协同工作,而无需任何额外的破解(例如,在\tableofcontents 与 lualatex 的编码问题和LuaTeX 西里尔字母连字问题)
答案1
由于这是条件结束前的最后一个动作,因此您可以使用
...
\expandafter\endinput
\fi
这将结束当前文件的条件然后结束输入。
答案2
\RequirePackage{ifluatex}
\ifluatex
\PackageWarning{babel}{%
Option `russianu' is intended for LuaTeX only.\MessageBreak
Option `russian' will be used instead.}
\input{russianb.ldf}
\expandafter\endinput
\fi
如果你不想加载伊氟泰克斯(但我不明白为什么),测试可以
\ifdefined\luatexversion
我不会使用\PackageError
,因为你提供了正确的出路。
注意:\expandafter
前面的\endinput
不是必需的,只要将 放在\fi
与 同一行即可\endinput
\if...
...
\endinput\fi
因为 TeX 无论如何都会读取到行尾。