Why is the ifthen package obsolete?

In the LaTeX companion, the authors recommend to use the package ifthen for complex conditional.

But in his answer to LaTeX conditional expression Will Robertson doesn't mention it, and in the comments, Philipp says that the package is obsolete.

The question is in which way ifthen is obsolete and what are the risk to use it in a document.

• Note that my comment is only a one-liner, not an exhaustive explanation. "Obsolete" here just means "for many problems there exist better solutions nowadays." – Philipp Mar 19 '11 at 14:32
• More general reference to obsolete packages: How to keep up with packages and know which ones are obsolete? – Werner Sep 9 '14 at 23:27
• So what about xifthen? Same thing? Obsolete, too? – 0xC0000022L May 7 '19 at 20:09

The main reason why people may consider ifthen obsolete (last version is of 2001/05/26 with about one page of user manual plus four pages of code documentation) is that it is superseded by e.g. etoolbox, which uses the advanced possibilities of eTeX. Using these allows faster processing. You still can use ifthen for your existing and new documents if you like and I don't think there is a risk in doing so. However for new code, especially new packages which use a lot of boolean expression using the more modern alternatives is recommended.

• Not to mention that etoolbox is fantastically useful for other things too. – TH. Mar 19 '11 at 11:10
• Perhaps to have some faster codes, the better solution is to use TeX's primtives or eTeX's primitives directly – Alain Matthes Mar 19 '11 at 12:16
• @Altermundus: I prefer \if-switches before booleans as well, but I see also the drawbacks. The way TeX is skipping false branches has its drawbacks. Also for more complex expressions a framework is very handy. – Martin Scharrer Mar 19 '11 at 12:38
• @Martin: I agree that for more complex expressions, a framework is very handy. Do you know some packages that use etoolbox (for examples)? – Alain Matthes Mar 19 '11 at 13:20
• On the other hand, \ifstrequal from etoolbox doesn’t work in all circumstances where \ifthenelse{\equal…} works. – Konrad Rudolph Mar 19 '11 at 14:22

From my experience in various forums and newsgroups, ifthen often seems to do more harm than good, especially when used by newbies. The main \ifthenelse command is fragile, so something like

\section{\ifthenelse{\equal{a}{a}}{b}{c}}


doesn't work. The comparison is not expandable, so that the command "possibly has only limited usefulness for macro code writers" (quoted from the ifthen manual). Plus I find the syntax quite cumbersome compared to e.g.

\ifstrequal{a}{a}{b}{c}


This is not a diss of the ifthen package; its weaknesses are known and unavoidable because it had to be compatible to an older macro package and was written long before e-TeX was implemented. I just conclude that for many problems there exist solutions with fewer problems. If you want to use the ifthen package, then that is fine, but you should know about its limitations.

• I don't know etoolbox so perhaps my answer will be different in several months, but actually I know some limitations of ifthen and I know the problems with fragile commands (it's not possible to avoid all of them), so my first idea would be : \DeclareRobustCommand\title{\ifthenelse{\equal{a}{a}}{b}{c}} \section{\title}. Now it will be interesting to know the limitation of etoolbox. I agree that etex is virtually indispensable. – Alain Matthes Mar 19 '11 at 15:32
• Many things do more harm than good when misused ;). ifthen has certain virtues in terms of its limited scope: etoolbox is rather overwhelming, I think, just because it is so powerful. So I can see arguments on both sides here. – cfr Jul 26 '15 at 15:58

I think that a certain degree of caution is required here in the way we classify packages. While some people may consider ifthen obsolete, it is certainly not marked officially as obsolete.

Compare ifthen's CTAN page with subfigure's.

This is not to say that there are not often better options, but the existence of better alternatives does not, just in itself, render a package obsolete.

Compare the case of packages for handling sub-figures. subfigure is definitely obsolete, but this leaves several other options, including both subfig and subcaption. In very many cases, the latter is preferable to the former - certainly it is more powerful, it works well with the powerful caption package etc. But that does not render subfig obsolete.

Something being obsolete means, to me, that there is good reason for me to update existing code (e.g. packages or classes for which I'm responsible) even if there are no obvious problems with it. If my code includes the use of things like \sf in a LaTeX document, or loads subfigure, I really should do something about that if it is at all practical to do so.

But there is not the same kind of reason for me to update code which loads subfig or ifthen and so it would be misleading to describe these packages as 'obsolete'. They are not. Not yet, anyway.

here is a piece of code that fails because of \ifthenelse :

\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\RequirePackage{ifthen}

\begin{document}

\makeatletter
\newcommand{\coreitem}[3]{%
\ifthenelse{\equal{#1}{}}{}{#1 \\}
\begin{minipage}[t]{\textwidth}
\ifthenelse{\equal{#2}{}}{}{#2 \\}
\end{minipage}
}
\noindent
\coreitem{one \\ 1}{two \\ 2}  % error
\makeatother

\end{document}


While within a minipage when \ifthenelse handles a variable containing \\ it fails.

• That's really user error rather than a fault of ifthenelse, \\  there is a fragile command, so as documented, should be prefixed by \protect (I think you intended \coreitem to have two arguments not 3). Arguably though the fact that \\  is fragile in minipage is a latex bug, it could easily be made robust, just compatibility concerns preventing a change. – David Carlisle Jul 19 '18 at 11:29