Comment savoir si une étiquette n’est pas définie ?#

Au moment de l’exécution de votre code , vous pourriez souhaiter savoir si une étiquette n’est pas définie (même si c’est un état transitoire et que gère assez bien cette situation).

Avec les commandes de base#

Une étiquette définie est simplement une commande : \r@nom-étiquette. Notre question initiale revient donc à vérifier si la commande existe. Avec , cela se fait généralement avec la commande de test \@ifundefined{r@nom-étiquette}{cas-non-déf}{cas-déf} pour laquelle :

  • nom-étiquette est le nom d’étiquette que vous avez utilisé dans la commande \label ;

  • et les deux autres arguments sont les commandes qui seront exécutées si l’étiquette est non définie (cas-non-déf) ou si elle est définie (cas-déf).

Notez que toute commande qui intègre \@ifundefined est naturellement fragile. Pour la protéger, consultez la question « À quoi sert la « protection » ? ».

Si vous suivez cette piste, vous ne soucierez peut-être pas de l’avertissement de concernant les étiquettes non définies à la fin du document. Cependant, si vous y trouvez un intérêt, ajoutez la commande \G@refundefinedtrue dans l’argument cas-non-déf.

Enfin, bien sûr, rappelez-vous que vous avez affaire à des commandes internes. En cas de doute, consultez la question : « À quoi servent \makeatletter et \makeatother ? ».

Avec l’extension « labelcas »#

Tout ce qui précède peut être évité en utilisant l’extension labelcas : elle fournit des commandes permettant de d’agir différemment selon l’état d’une étiquette, ou des états d’une liste d’étiquettes. Cette extension, un peu compliquée, s’avère assez puissante.


Source : Finding if a label is undefined