1

I want to prevent processing rest part of a package in case if it is loaded not from lualatex. For some reason I cannot load ifluatex package, so I borrowed definition of \ifluatex from that package and invented the following chunk of code:

\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

It seemed to work but Is there a better solution. In particular, it is desirable to avoid introduction of \@next@action because it is used the only time.

Just to explain: my goal is to hack babel with option russian to make it working painlessly with LuaLaTeX without any additional hacks (as described, eg, in \tableofcontents encoding issue with lualatex and LuaTeX cyrillic hyphenation problems)

  • 2
    What's the problem with package ifluatex? – Marco Daniel Oct 08 '11 at 12:45
  • @Marco: It is not problem of ifluatex. LaTeX prohibits using \RequirePackage before processing options in babel.sty. I got error if I put \RequirePackagein at any place of russian.ldf to be read by babel.sty. – Igor Kotelnikov Oct 08 '11 at 13:12

2 Answers2

5
\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

If you don't want to load ifluatex (but I don't see why), the test can be

\ifdefined\luatexversion

I wouldn't use \PackageError, since you're providing the correct way out.

Note: the \expandafter before \endinput is not necessary, provided one puts the \fi on the same line as \endinput

\if...
  ...
\endinput\fi

because TeX will read till the end of the line anyway.

egreg
  • 1,121,712
  • Thanks. Interesting, but \RequirePackage{ifluatex} cannot be used inside babel's .ldf files. See my reply to @Marko's comment. – Igor Kotelnikov Oct 08 '11 at 13:23
  • 2
    Then \ifdefined\luatexversion should do. Oberdiek uses an indirect way because he wants his packages not to depend on e-TeX features beyond necessity. But yours is aimed to users of recent TeX distributions in which latex and pdflatex know them for certain. – egreg Oct 08 '11 at 13:32
3

As it is the last action before the end of the conditional, you can just use

  ...
  \expandafter\endinput
\fi

which will end the conditional then end input of the current file.

Joseph Wright
  • 259,911
  • 34
  • 706
  • 1,036