LaTeX : définissez vos acronymes une bonne fois pour toute

Dans  les articles scientifiques, il est de bon aloi d’expliciter chaque acronyme à sa première apparition, et par la suite l’utiliser en supposant que le lecteur s’en souvienne. Je vais dans ce billet vous donner une méthode pour vous assurer que chacun de vos acronymes soit défini une fois, et une fois seulement.

Quand le document commence à être un peu long, ou bien qu’on lui a déplacé des paragraphes, on ne sait plus forcément si les acronymes que nous utilisons ont ou non déjà été définis. Quiconque a compris la magie de $latex \LaTeX$ se doute que l’on peut faire ça automatiquement… On va ici utiliser le package glossaries, qui a pour ambition de remplacer les packages glossary et nomencl.

Exemple minimal

\documentclass{minimal}
\usepackage[xindy]{glossaries}	% Ensures that all acronyms are defined once
	\let\oldnewacronym\newacronym
	\newcommand*{\provideacronym}[3]{%
	  \ifglsentryexists{#1}{%
	  }{%
	    \oldnewacronym{#1}{#2}{#3}%
	  }%
	}
 
\newacronym{sem}{SEM}{scanning electron microscopy}
\newacronym{ebsd}{EBSD}{electron backscatter diffraction}
\newacronym{tem}{TEM}{transmission electron microscopy}
 
\begin{document}
	One can use the \gls{sem} to evidence grain fragmentation. But \gls{ebsd} analysis gives further information about the grain boundaries. \Gls{tem} can also be performed rather than \gls{sem}, in order to investigate the intragranular misorientation.
\end{document}

Ce qui nous donnera :

One can use the scanning electron microscopy (SEM) to evidence grain fragmentation. But electron backscatter diffraction (EBSD) analysis gives further information about the grain boundaries. Transmission electron microscopy (TEM) can also be performed rather than SEM, in order to investigate the intragranular misorientation.

Dans le préambule (ou à la volée dans le texte), vous commencez par faire la liste des acronymes que vous allez utiliser, en précisant : le label, l’acronyme puis sa signification complète. Dans le corps du document, un acronyme est donc logiquement appelé par son label avec la commande \gls{}. Quand $latex \LaTeX$ lit cette commande, il regarde si elle a déjà été exécutée avant, et affiche l’acronyme si non. La commande \Gls{} (avec un G majuscule) sert à mettre la première lettre de la définition (si elle est à afficher) en majuscule, comme dans mon exemple en début de phrase.

Glossairies et hyperref

Si vous chargez (à raison) le package hyperref, tous les acronymes risquent d’apparaître colorés de la même façon que les autres liens, car glossaries est bien censé créer des liens vers le glossaire. Or si vous ne le générez pas, ça n’a pas vraiment d’intérêt… L’astuce pour empêcher hyperref de faire ces liens est tout simplement… de charger glossaries avant hyperref  !

Afficher le glossaire

Si à l’inverse vous voulez afficher le glossaire, alors il faut placer la commande \makeglossary juste après l’appel du package, et \printglossary à l’endroit où vous souhaitez voir apparaitre le glossaire. Ce qui nous donne donc :

\documentclass{article}
\usepackage{glossaries}	% Ensures that all acronyms are defined once
	\let\oldnewacronym\newacronym
	\newcommand*{\provideacronym}[3]{%
	  \ifglsentryexists{#1}{%
	  }{%
	    \oldnewacronym{#1}{#2}{#3}%
	  }%
	}
\makeglossaries
 
\newacronym{sem}{SEM}{scanning electron microscopy}
\newacronym{ebsd}{EBSD}{electron backscatter diffraction}
\newacronym{tem}{TEM}{transmission electron microscopy}
 
\begin{document}
	One can use the \gls{sem} to evidence grain fragmentation. But \gls{ebsd} analysis gives further information about the grain boundaries. \Gls{tem} can also be performed rather than \gls{sem}, in order to investigate the intragranular misorientation.
 
	\printglossaries
\end{document}

Après une première compilation avec (pdf)latex, il faut compiler avec makeglossaries (ou xindy, s’il est en option du package glossaries, comme c’est le cas dans mon exemple). Une seconde compilation avec (pdf)latex et le tour est joué. Il est recommandé d’utiliser Xindy plutôt que makeglossaries pour le support des langues autres que l’anglais.

Pour aller plus loin

Pour une utilisation « classique » du package glossaries, je vous recommande la lecture du WikiBook associé.