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édentes Révision précédente
Prochaine révision
Révision précédente
3_composition:texte:renvois:underscore_dans_un_label [2020/04/18 22:42]
jejust Renommage des sections de base: correction des liens internes.
3_composition:texte:renvois:underscore_dans_un_label [2021/05/06 23:00] (Version actuelle)
bdumont Correction d'un lien cassé
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 attribuer 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”]]. 
-([[1_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.1587242535.txt.gz · Dernière modification: 2020/04/18 22:42 par jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0