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
:
In which, ‹label-name› is exactly what you would use in a\@ifundefined
{r@label-name}
{undef-cmds}
{def-cmds}
\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.
This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=labundef