Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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)

share|improve this question
2  
What's the problem with package ifluatex? –  Marco Daniel Oct 8 '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 8 '11 at 13:12
add comment

2 Answers

up vote 3 down vote accepted

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.

share|improve this answer
    
Of course, this is not anything to do with the particular case: it's a general point. –  Joseph Wright Oct 8 '11 at 12:44
    
@Patrick While true, I'd say it's 'bad style' (code layout and logic both compromised). –  Joseph Wright Oct 8 '11 at 13:02
    
Yes, I agree, and before I saw your comment, I have removed mine. –  topskip Oct 8 '11 at 13:03
add comment
\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.

share|improve this answer
    
Thanks. Interesting, but \RequirePackage{ifluatex} cannot be used inside babel's .ldf files. See my reply to @Marko's comment. –  Igor Kotelnikov Oct 8 '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 8 '11 at 13:32
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.