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.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've been using the fixltx2e package for a while, with a tweak described here on the site. Recently, this has gotten me the following error message:

Package fixltx2e Warning: fixltx2e is not required with releases after 2015
(fixltx2e)                All fixes are now in the LaTeX kernel.
(fixltx2e)                See the latexrelease package for details.

How do I robustly make sure fixltx2e is used exactly when necessary?

share|improve this question
2  
Just ignore the warning, if you plan to use the same document with pre 2015 kernels. Otherwise remove \usepackage{fixltx2e}. – egreg Jan 11 at 21:19
1  
Since it's just a warning, you can silence it: \usepackage{silence} \WarningFilter{fixltx2e}{}. – Werner Jan 12 at 1:07
up vote 4 down vote accepted

You can distinguish pre-2015 kernels from the fact that \IncludeInRelease is not defined:

\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname IncludeInRelease\endcsname\relax
  \usepackage{fixltx2e}
\fi

See What does \begingroup\expandafter…\endgroup do? for an explanation of the code.

share|improve this answer
    
Why aren't lines 2-4 in your snippet sufficient? You kind of lost me with the first line. – einpoklum Jan 11 at 23:37
1  
@einpoklum Omitting the first line would leave \IncludeInRelease defined to be equivalent to \relax, if previously undefined. With the first line, the \csname construction is performed when the group has not yet been closed. When \endgroup performs its actions (which include removing the previous setting of \IncludeInRelease, if done). See tex.stackexchange.com/questions/24393/… – egreg Jan 11 at 23:40
    
Also, why not use something like \ifcsname? – einpoklum Jan 12 at 0:12
1  
@einpoklum If your aim is to make the code compatible with older releases of TeX, you can't assume e-TeX. – egreg Jan 12 at 0:20

If you are using TeXLive you can use the solution below to obtain which version you are running.

References:

Code:

\documentclass{article}

\makeatletter%
\def\getversion{\expandafter\get@version\pdftexbanner\@nil}%
\def\get@version#1201#2)#3\@nil{\def\TeXLiveVersion{201#2}}%
\makeatother%
\getversion%

\ifnum\TeXLiveVersion<2015\relax%
    \usepackage{fixltx2e}%
    \typeout{*** Included fixltx2e}
\elese
    \typeout{*** DId NOT Included fixltx2e}
\fi%


\begin{document}
xxx
\end{document}
share|improve this answer
    
er why not just use \fmtversion ? – David Carlisle Jan 11 at 22:45
    
@DavidCarlisle: Sorry, did not know about \fmtversion. – Peter Grill Jan 11 at 22:50
1  
\@ifl@t@r\fmtversion{2015/01/01}{yes}{no} :-) – David Carlisle Jan 11 at 22:56
    
Ah, but I can't assume I use TeXLive, now can I...? – einpoklum Jan 11 at 23:36

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.