1

The present question follows \@ifpackagelater equivalent for babel's lan­guage def­i­ni­tion files? which was about conditional tests based on the version ⟨date⟩ of babel's lan­guage def­i­ni­tion files.

The accepted answer of this related question suggested to use \ltx@iffilelater. But this command now returns false results, as pointed out by the following MWE:

\documentclass[english,french]{article}
\usepackage{ltxcmds}
\usepackage{babel}
%
\makeatletter
\ltx@iffilelater{english}{2016/03/20}{%
  \typeout{After (english)}
}{%
  \typeout{Before (english)}
}
\ltx@iffilelater{frenchb.ldf}{2016/03/20}{%
  \typeout{After (french)}
}{%
  \typeout{Before (french)}
}
\makeatother
\begin{document}
\end{document}

that prints on the console:

Before (english)
Before (french)

which are false results:

 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
 ltxcmds.sty    2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
   babel.sty    2017/09/18 3.13 The Babel package
 english.ldf    2017/06/06 v3.3r English support from the babel system
  french.ldf    2017/09/07 v3.3c French support from the babel system
scalefnt.sty    
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
 ***********

BTW, the other answer provided in the related question returns incoherent results, as pointed out by the following MWE:

\documentclass[english,french]{article}
\usepackage{ltxcmds}
\usepackage{babel}

\makeatletter
\def\@b@belextension{ldf}
\def\@ifbabellater{%
  \@ifl@ter\@b@belextension%
}
%
\@ifbabellater{english}{2016/03/20}{%
  \typeout{After (english)}
}{%
  \typeout{Before (english)}
}
\@ifbabellater{frenchb}{2016/03/20}{%
  \typeout{After (french)}
}{%
  \typeout{Before (french)}
}
\makeatother
\begin{document}
\end{document}

that prints on the console:

After (english)
Before (french)
  • 1
    After correcting your first mwe to use english.ldf, not only english I get After (english) After (french) – user4686 Sep 21 '17 at 21:01
  • 2
    for english your code is missing the .ldf ending, for french: the file is now french.ldf and not frenchb.ldf. – Ulrike Fischer Sep 21 '17 at 21:07
  • 1
    Denis, I think you didn't really registered the differences between french.ldf and frenchb.ldf. Look at the b at the end. In a newer system you should now compare french.ldf as the name frenchb.ldf is obsolete. – Ulrike Fischer Sep 22 '17 at 7:15
  • 1
    @DenisBitouze it was normal I got After (french) even with my not completely up-to-date TL2017, because the test was checking if later than 2016/03/20 which was indeed the case. I have now updated, and testing frenchb.ldf indeed produces Before (french) which is counter-intuitive, the frenchb.ldf does exist as a stub file, \ltx@iffilelater does not know how to extract a date I guess. Testing with french.ldf I get After (french) as normal and expected. – user4686 Sep 22 '17 at 8:11
  • 2
    @jfbu. After an update I get now the same as you, before babel was still loading frenchb.ldf. (Obviously the test is always false if the file has not been loaded at all). – Ulrike Fischer Sep 22 '17 at 10:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.