Finding if a label is undefined

  • latex
  • macros

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, &lsaquo;label-name&rsaquo; 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 (&lsaquo;undef-cmds&rsaquo;) or if it is defined (&lsaquo;def-cmds&rsaquo;).

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 &lsaquo;undef-cmds&rsaquo;.

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 website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Creative Commons Lizenzvertrag Edit this page Old revisions Sitemap Backlinks RSS feed Impressum Flattr this