Are there any "if" commands like "\ifnum" in LaTeX?
The \if...
commands are mostly TeX primitives (with \newif
it's possible to define other conditionals).
There is something like \ifstring
, but it uses \ifnum
; the command \pdfstrcmp
takes two strings as argument and compares it, returning -1 if the first precedes the second (in the lexicographic order based on ASCII codes), 0 if the strings are equal and 1 otherwise. The usual ways to exploit it are
\ifnum\pdfstrcmp{string1}{string2}=0
<code if the strings are equal>
\else
<code if the strings are different>
\fi
or
\ifcase\pdfstrcmp{string1}{string2}%
<code if the strings are equal>
\or
<code if string2 comes after string1>
\else
<code if string1 comes before string2>
\fi
In XeTeX there's \strcmp
that does the same; loading pdftexcmds one can use \pdf@strcmp
with pdftex, xetex and luatex.
In the pseudocodes above "string1" and "string2" can be also macros, which will be expanded similarly to what happens with \edef
and at the end (when no more expansions can be performed) the tokens are "detokenized" for the comparison (so \relax
becomes a six character string followed by a space; for example \pdfstrcmp{\relax}{\string\relax\space}
returns 0).
The etoolbox
package has a lot conditional commands which goes beyond those TeX primitives. Have a look at the manual you will find they very usefull.
An alternative is expl3
. The basic language layer of LaTeX3 provides several conditionals. To handle strings you can use the function \str_if_eq:nnTF
.
Next to this conditional expl3
provides also a case function for strings
named \str_case:nn(TF)
.
\str_if_eq:nnTF
has the following syntax:
\str_if_eq:nnTF { <test string 1> } { <test string 2> }
{ <True Code> }
{ <False Code> }
\str_case:nn(TF)
has the following syntax:
\str_case:nnTF { <test string> }
{
{ string case 1 } { code case 1 }
{ string case 2 } { code case 2 }
...
{ string case n } { code case n }
}
{ <additional TRUE code> }
{ <FALSE case> }
(Either one of the T
or F
branches may be omitted provided the matching argument letter is also.)
The complete manual