Welcome to the UK List of
TeX Frequently Asked Questions
on the Web

Searching

The index of Frequently Asked Questions about TeX is searchable.

Please enter your keyword here:   then press here: ,    or:
Google

Finding if a label is undefined

People seem to want to know (at run time) if a label is undefined (I don’t actually understand why, particularly: it’s a transient state, and LaTeX deals with it quite well).

A resolved label is simply a command: \r@<label-name>; determining if the label is set is then simply a matter of detecting if the command exists. The usual LaTeX internal way of doing this is to use the command \@ifundefined:

\@ifundefined{r@label-name}{undef-cmds}{def-cmds}

In which, <label-name> is exactly what you would use in a \label command, and the remaining two arguments are command sequences to be used if the label is undefined (<undef-cmds>) or if it is defined (<def-cmds>).

Note that any command that incorporates \@ifundefined is naturally fragile, so remember to create it with \DeclareRobustCommand or to use it with \protect in a moving argument.

If you’re into this game, you may well not care about LaTeX’s warning about undefined labels at the end of the document; however, if you are, include the command \G@refundefinedtrue in <undef-cmds>.

And of course, remember you’re dealing in internal commands, and pay attention to the at-signs.

All the above can be avoided by using the labelcas package: it provides commands that enable you to switch according to the state of a single label, or the states of a list of labels. The package’s definition is a bit complicated, but the package itself is pretty powerful.

labelcas.sty
macros/latex/contrib/labelcas (or browse the directory); catalogue entry


Go to previous question, or next question

Go to FAQ home.

URL for this question: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=labundef

Comments, suggestions, or error reports? - see “how to improve the FAQ”.

This is FAQ version 3.27, released on 2013-06-07.