条件 \endinput

条件 \endinput

如果包不是从 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 无论如何都会读取到行尾。

相关内容