Ceci est une ancienne révision du document !


Comment utiliser un underscore dans un \label ?

Normalement, le trait de soulignement (« _ », ici appelé underscore par anglicisme) ne pose pas de problème si on l'utilise dans \label et \ref comme nom d'étiquette, malgré son catcode 8 (correspondant aux indices en mode mathématique).

Par exemple:

\documentclass{article}
\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

\documentclass{article}
\pagestyle{empty}
\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

Même avec le package babel, qui utilise ses shorthands pour rendre des caractères actifs, ne pose pas de problème, car il patche les commandes du système \label/\ref pour supporter les shorthands.

\documentclass{article}
\usepackage[french]{babel}
\begin{document}
\section{Bonjour tout le monde}
\label{sec_bonjour}
Voir section \ref{sec_bonjour}.
\end{document}

\documentclass{article}
\usepackage[french]{babel}
\pagestyle{empty}
\begin{document}
\section{Bonjour tout le monde}
\label{sec_bonjour}
Voir section \ref{sec_bonjour}.
\end{document}

Quand l'underscore est un caractère actif

Si vous rencontrez quand même des problèmes, c'est que vous utilisez sans doute un package qui rend l'underscore actif. C'est donc un peu plus compliqué. Une façon de résoudre le problème est d'utiliser \string pour faire que l'underscore actif se comporte comme un caractère normal:

\label{sec\string_hello}
\ref{sec\string_hello}

Le nom de l'étiquette est également écrit dans le fichier .aux et relu à la fin du document. À ce moment, il faut rétablir le catcode :

\usepackage{atveryend}
\AfterLastShipout{\catcode`\_=12\relax}

Si le package en question rend actif le catcode de l'underscore avant le \begin{document}, alors il faut qu'il soit inactif pendant la lecture du fichier .aux à la fin du préambule.

\ifnum\catcode`\_=\active
  \catcode`\_=12\relax
  \AtBeginDocument{\catcode`\_=\active}%
\fi

Voice le code complet de l'exemple:

\documentclass{article}
 
\catcode`\_=\active
\def_{\textunderscore}
 
\usepackage{atveryend}
\AfterLastShipout{\catcode`\_=12\relax}
\ifnum\catcode`\_=\active
  \catcode`\_=12\relax
  \AtBeginDocument{\catcode`\_=\active}%
\fi
\begin{document}
\section{Hello World}
\label{sec\string_hello}
See section \ref{sec\string_hello}.
\end{document}

\documentclass{article}

\catcode`\_=\active
\def_{\textunderscore}

\usepackage{atveryend}
\AfterLastShipout{\catcode`\_=12\relax}
\ifnum\catcode`\_=\active
  \catcode`\_=12\relax
  \AtBeginDocument{\catcode`\_=\active}%
\fi
\pagestyle{empty}
\begin{document}
\section{Hello World}
\label{sec\string_hello}
See section \ref{sec\string_hello}.
\end{document}

Avec le package underscore

En fonction du package qui rend l'underscore actif, de la portée de son « activité » et de la définition de l'underscore, il peut y avoir des façons plus simples de faire.

Par exemple, le package underscore rend l'underscore actif et casse le système des \label/\ref. Mais ce package supporte babel, donc il suffit de charger babel pour que tout rentre dans l'ordre:

\documentclass{article}
 
\usepackage[english]{babel}
\usepackage{underscore}
 
\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

\documentclass{article}

\usepackage[english]{babel}
\usepackage{underscore}

\pagestyle{empty}
\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

Source: https://tex.stackexchange.com/questions/121416/putting-an-underscore-in-a-label

3_composition/texte/renvois/underscore_dans_un_label.1587155993.txt.gz · Dernière modification: 2020/04/17 22:39 par jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0