Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
composition:texte:renvois:underscore_dans_un_label [2020/04/17 20:39] – Traduction en français. Compilation des exemples. jejust3_composition:texte:renvois:underscore_dans_un_label [2022/07/12 13:57] (Version actuelle) – [Solution simple et généralement suffisante] '\' → ''\'' dbitouze
Ligne 1: Ligne 1:
-====== Comment utiliser un underscore dans un \label ? ======+====== Comment utiliser un tiret bas dans le texte hors du mode mathématique? ======
  
-Normalement, le trait de soulignement (« ''_'' », ici appelé //underscore// par anglicisme) +===== Problème ===== 
-ne pose pas de problème si on l'utilise dans ''\label'' et ''\ref'' + 
-comme nom d'étiquette, malgré son catcode 8 +Par défaut, le tiret bas (''_'') se voit attribué le //catcode// 8, [[2_programmation:syntaxe:catcodes:liste_des_catcodes|qui introduit les indices en mode mathématique]]. Si vous l'utilisez tel quel dans votre document, il est fort probable que vous obteniez une [[2_programmation:erreurs:m:missing_dollar_inserted|erreur “Missing $ inserted”]]. 
-([[generalites:catcodes:liste_des_catcodes|correspondant aux indices en mode mathématique]]).+ 
 +===== Comment faire pour le tiret bas soit traité comme un caractère normal ===== 
 + 
 +==== Cas où le tiret bas est considéré comme un caractère normal sans ajout d'extensions ==== 
 + 
 +Le tiret bas est considéré par défaut comme un caractère normal dans les arguments de : 
 +  * ''\label'' 
 +  * ''\ref'' 
 +  * ''\input'
 +  * ''\include'' 
 +  * ''\includegraphics'' 
 +  * ''\begin'' et ''\end'' 
 +  * compteurs 
 +  * paramètres de placement (comme ''[t]'').
  
 Par exemple: Par exemple:
Ligne 25: Ligne 38:
 \section{Hello World} \section{Hello World}
 \label{sec_hello} \label{sec_hello}
-See section \ref{sec_hello}.+See section 1.
 \end{document} \end{document}
 </latexdoc> </latexdoc>
Ligne 31: Ligne 44:
 <WRAP clear /> <WRAP clear />
  
-Même avec le package [[ctanpkg>babel]], qui utilise ses //shorthands// +Si vous rencontrez quand même le message d'erreur indiqué quand vous utilisez un tiret bas dans un de ces cas, 
-pour rendre des caractères actifs, ne pose pas de problème, +vous utilisez sans doute 
-car il patche les commandes du système ''\label''/''\ref'' +une extension qui modifie le comportement du tiret bas (autre que [[ctanpkg>babel]], qui ne pose pas de problèmes).  
-pour supporter les //shorthands//.+Dans ce casvous devez appliquer l'une des solutions suivantes.
  
-<WRAP column 40ex>+ 
 +==== Solution simple et généralement suffisante ==== 
 + 
 +L'extension [[ctanpkg>underscore]] redéfinit le tiret bas comme un caractère actif qui a le comportement suivant : 
 +  * En mode mathématique, pas de changement (introduit un caractère  en indice) ; 
 +  * Dans le corps du texte, affiche un tiret bas ; 
 +  * S'il est précédé du caractère ''\'', affiche un tiret bas après lequel il est possible de faire une coupure de mots. 
 + 
 +Dans la plupart des cas, cela correspond à l'effet souhaité. Cependant, la redéfinition du tiret bas par [[ctanpkg>underscore]] a pour conséquence 
 +qu'il n'est plus considéré comme un caractère normal [[3_composition:texte:renvois:underscore_dans_un_label#cas_ou_le_tiret_bas_est_considere_comme_un_caractere_normal_sans_ajout_d_extensions|dans les cas où il devrait être considéré comme tel]]. Ce problème est résolu en grande partie si vous chargez [[ctanpkg>babel]], 
 +ou de manière plus limitée en utilisant l'options ''[strings]'' de [[ctanpkg>underscore]]. Pour plus de détails, veuillez vous référer à la [[texdoc>underscore|documentation]], particulièrement p. 2. 
 + 
 +<WRAP column 65ex>
 <code latex> <code latex>
 \documentclass{article} \documentclass{article}
 +
 \usepackage[french]{babel} \usepackage[french]{babel}
 +\usepackage{underscore}
 +
 \begin{document} \begin{document}
-\section{Bonjour tout le monde+ 
-\label{sec_bonjour+\section{Le fichier test_tiret-bas.pdf
-Voir section \ref{sec_bonjour}.+\label{sec_tiret} 
 +Nous étudions ici le fichier test_tiret-bas.pdf. 
 + 
 +\section{Autre section
 +Voir la section \ref{sec_tiret}. 
 \end{document} \end{document}
 </code> </code>
Ligne 50: Ligne 83:
 <latexdoc> <latexdoc>
 \documentclass{article} \documentclass{article}
 +
 \usepackage[french]{babel} \usepackage[french]{babel}
 +\usepackage{underscore}
 +
 \pagestyle{empty} \pagestyle{empty}
 \begin{document} \begin{document}
-\section{Bonjour tout le monde+\section{Le fichier test\string_tiret-bas.pdf
-\label{sec_bonjour+\label{sec_hello
-Voir section \ref{sec_bonjour}.+Nous étudions ici le fichier test\string_tiret-bas.pdf. 
 + 
 +\section{Autre section} 
 +Voir la section 1.
 \end{document} \end{document}
 </latexdoc> </latexdoc>
Ligne 61: Ligne 100:
 <WRAP clear /> <WRAP clear />
  
-===== 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é. +==== Solution plus souple mais plus complexe ==== 
-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:+Si les effets du tiret bas ont été redéfinis par d'autres extensions avec lesquelles l'extension [[ctanpkg>underscore]] interfère,  
 +on peut, au lieu de charger l'extension [[ctanpkg>underscore]],  utiliser ponctuellement la commande ''\string'', 
 +qui indique que le caractère qui suit immédiatement doit être traité comme un caractère normal 
 +(plus précisément, de la catégorie 12).
  
 <code latex> <code latex>
Ligne 73: Ligne 114:
 </code> </code>
  
-Le nom de l'étiquette est également écrit dans le fichier ''.aux'' +Comme le nom de l'étiquette est également écrit dans le fichier ''.aux'', 
-et relu à la fin du document. +il faut assigner au tiret bas la catégorie (//catcode//) 12 lors de la lecture de ce fichier :
-À ce moment, il faut rétablir le catcode :+
  
 <code latex> <code latex>
Ligne 82: Ligne 122:
 </code> </code>
  
-Si le package en question rend actif le catcode de l'underscore+Si l'extension en question rend le tiret bas actif
 avant le ''\begin{document}'', alors il faut qu'il soit inactif avant le ''\begin{document}'', alors il faut qu'il soit inactif
 pendant la lecture du fichier ''.aux'' à la fin du préambule. pendant la lecture du fichier ''.aux'' à la fin du préambule.
Ligne 93: Ligne 133:
 </code> </code>
  
-Voice le code complet de l'exemple:+Voici le code complet de l'exemple:
  
 <WRAP column 45ex> <WRAP column 45ex>
Ligne 109: Ligne 149:
 \fi \fi
 \begin{document} \begin{document}
-\section{Hello World+\section{Bonjour !
-\label{sec\string_hello+\label{sec\string_bonjour
-See section \ref{sec\string_hello}.+Voir section \ref{sec\string_bonjour}.
 \end{document} \end{document}
 </code> </code>
Ligne 118: Ligne 158:
 <latexdoc> <latexdoc>
 \documentclass{article} \documentclass{article}
- 
-\catcode`\_=\active 
-\def_{\textunderscore} 
- 
-\usepackage{atveryend} 
-\AfterLastShipout{\catcode`\_=12\relax} 
-\ifnum\catcode`\_=\active 
-  \catcode`\_=12\relax 
-  \AtBeginDocument{\catcode`\_=\active}% 
-\fi 
 \pagestyle{empty} \pagestyle{empty}
 \begin{document} \begin{document}
-\section{Hello World+\section{Bonjour !
-\label{sec\string_hello+\label{hello
-See section \ref{sec\string_hello}.+Voir section 1.
 \end{document} \end{document}
 </latexdoc> </latexdoc>
Ligne 138: Ligne 168:
 <WRAP clear /> <WRAP clear />
  
- 
-===== 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 [[ctanpkg>underscore]] rend l'underscore actif et casse 
-le système des ''\label''/''\ref''. Mais ce package supporte [[ctanpkg>babel]], 
-donc il suffit de charger //babel// pour que tout rentre dans l'ordre: 
- 
-<WRAP column 40ex> 
-<code latex> 
-\documentclass{article} 
- 
-\usepackage[english]{babel} 
-\usepackage{underscore} 
- 
-\begin{document} 
-\section{Hello World} 
-\label{sec_hello} 
-See section \ref{sec_hello}. 
-\end{document} 
-</code> 
-</WRAP> 
-<WRAP column 30ex> 
-<latexdoc> 
-\documentclass{article} 
- 
-\usepackage[english]{babel} 
-\usepackage{underscore} 
- 
-\pagestyle{empty} 
-\begin{document} 
-\section{Hello World} 
-\label{sec_hello} 
-See section \ref{sec_hello}. 
-\end{document} 
-</latexdoc> 
-</WRAP> 
-<WRAP clear /> 
  
 ----- -----
-//Source:// [[https://tex.stackexchange.com/questions/121416/putting-an-underscore-in-a-label]]+//Sources:// 
 +  * [[https://tex.stackexchange.com/questions/121416/putting-an-underscore-in-a-label|Putting an underscore in a “\label”]]
 +  * [[texdoc>underscore|documentation de l'extension underscore]].
  
-{{htmlmetatags>metatag-keywords=(LaTeX,références,underscore,trait de soulignement,underscore dans les étiquettes,caractères actifs dans les étiquettes) +{{htmlmetatags>metatag-keywords=(LaTeX,références,underscore,trait de soulignement, tiret bas, underscore dans les étiquettes,caractères actifs dans les étiquettes, commande \string
-metatag-og:title=(Comment utiliser un underscore dans un \label ?)+metatag-og:title=(Comment utiliser un tiret bas dans le texte hors du mode mathématique)
 metatag-og:site_name=(FAQ LaTeX francophone) metatag-og:site_name=(FAQ LaTeX francophone)
 }} }}
  
3_composition/texte/renvois/underscore_dans_un_label.1587155993.txt.gz · Dernière modification : 2020/04/17 20:39 de jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0