Gloses et abréviations linguistiques avec LaTeX (1)

Il est d’usage en linguistique d’abréger (en petites capitales) les étiquettes grammaticales descriptives dans les exemples glosés, par exemple NOM pour « nominatif », ACC pour « accusatif », etc. Les utilisateurs de LaTeX peuvent simplement saisir les abréviations en dur avec des commandes du type \textsc{nom}, mais il vaut mieux procéder de manière programmatique en définissant des commandes qui gèrent les abréviations. Cela permet non seulement de changer le style et le texte des abréviations en modifiant uniquement les définitions de commande dans le préambule, mais aussi d’automatiser l’impression de la liste des abréviations et de garantir que celle-ci n’inclue que les abréviations effectivement utilisées dans le document.

Il existe une extension leipzig qui permet de gérer les gloses grammaticales, mais elle s’appuie sur l’extension glossaries, qui est certes très complète, mais aussi très complexe (274 pages de documentation), et elle requiert une compilation supplémentaire avec un outil externe. Je propose d’utiliser à la place l’extension acro, qui est beaucoup plus simple (45 pages).

L’extension acro permet de créer très simplement des abréviations et d’imprimer au choix la forme abrégée ou complète, ou les deux à la suite si l’abréviation est utilisée pour la première fois. On peut vérifier également que seules les abréviations utilisées apparaissent dans la liste finale.

\documentclass{article}
\usepackage{acro}
\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis}
    
\begin{document}
Première occurrence: \ac{irr}

Deuxième occurrence: \ac{irr}
    
Forme longue: \acl{irr}
    
Forme courte: \acs{irr}
    
\printacronyms[name=Abbreviations]
\end{document}

Par défaut, la liste des abréviations utilise un environnement description, avec les abréviations en gras, qui dans la police pas défaut de LaTeX ne contient pas de petites capitales. On peut évidemment remédier à cela en modifiant soit la police du document, soit le style des descriptions, soit le style de la liste d’abréviations.

\documentclass{article}
\usepackage{enumitem}
\setlist[description]{labelwidth=2em, labelsep=.5em, font=\normalfont}
\usepackage{acro}
\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis}

\begin{document}
\ac{irr}, \ac{ins}

\printacronyms[name=Abbreviations]
\end{document}

Une option intéressante dans la définition des abréviations est class, qui permet d’imprimer séparément différentes listes d’abréviations ou bien seulement une partie des abréviations utilisées. Par exemple, on peut définir les abréviations standard de la liste de Leipzig en leur assignant la classe leipzig et choisir de considérer qu’elles sont suffisamment connues pour ne pas les imprimer dans la liste.

\documentclass{article}
\usepackage{enumitem}
\setlist[description]{labelwidth=2em, labelsep=.5em, font=\normalfont}
\usepackage{acro}
\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental, class=leipzig}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis, class=leipzig}
\DeclareAcronym{adn}{short=\textsc{adn}, long=adnominal}

\begin{document}
\ac{irr}, \ac{adn}

\printacronyms[name=Abbreviations, exclude-classes={leipzig}]
\end{document}

Voici un exemple complet avec un exemple glosé:

\documentclass{article}
\usepackage{enumitem}
\setlist[description]{labelwidth=2em, labelsep=.5em, font=\normalfont}\usepackage{acro}
\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental, class=leipzig}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis, class=leipzig}
\DeclareAcronym{adn}{short=\textsc{adn}, long=adnominal}
\usepackage{langsci-gb4e}
\renewcommand{\eachwordone}{\itshape}

\begin{document}
In such cases, the \ac{adn} form is used.

\begin{exe}
  \ex\gll k-uru toki \\
  come-\acs*{adn} time \\
  \glt When [he] comes
\end{exe}

\printacronyms[name=Abbreviations, exclude-classes={leipzig}]
\end{document}

Dans les exemples, il vaut mieux utiliser la commande \acs* qui imprime toujours la forme abrégée sans marquer l’abréviation comme ayant déjà été explicitée dans le document.

Par défaut, acro imprime lors de la première utilisation avec la commande \ac la forme complète suivie de la forme abrégée entre parenthèses, puis uniquement la forme abrégée lors des occurrences suivantes. C’est le comportement désiré pour des abréviations ordinaires, mais il n’est pas d’usage d’utiliser les abréviations grammaticales dans le texte.

\documentclass{article}
\usepackage{enumitem}
\setlist[description]{labelwidth=2em, labelsep=.5em, font=\normalfont}
\usepackage{acro}
\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental, class=leipzig}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis, class=leipzig}
\DeclareAcronym{adn}{short=\textsc{adn}, long=adnominal}
\DeclareAcronym{oj}{short=\textsc{oj}, long=Old Japanese}

\begin{document}

In such cases, the \ac{adn} form is used in \ac{oj}.
The \ac{adn} form is used in \ac{oj}\printacronyms[name=Abbreviations, exclude-classes={leipzig}]
\end{document}

On peut modifier le code pour que certaines classes d’abréviations apparaissent par défaut toujours sous leur forme longue dans le texte. Je ne rentre pas dans les détails du code qui est un peu complexe, mais il suffit d’attribuer à toutes les abréviations grammaticales une classe, et de donner la liste de ces classes séparées par des virgules en argument à la commande \setlongacros.

\documentclass{article}
\usepackage{enumitem}
\setlist[description]{labelwidth=2em, labelsep=.5em, font=\normalfont}
\usepackage{acro}
\ExplSyntaxOn
\cs_new_protected:Npn \acro_usex:n #1
  {
% get the acronym and the plural settings:
\acro_get:n {#1}
\acro_is_used:nTF {#1}
  {
    \acro_write_indefinite:nn {#1} {long}
    \acro_write_expanded:nn {#1} {long}
    \acro_after:n {#1}
  }
  {
    % this is the first time
    \bool_gset_true:c { g__acro_#1_first_use_bool }
    \acro_if_is_single:nTF {#1}
      { \acro_single:n {#1} }
      { \acro_first_instance:nV {#1} \l__acro_long_tl }
  }
  }

\clist_new:N \l_acro_longonly_clist
\NewDocumentCommand{\setlongacros}{m}{
  \clist_put_right:Nn \l_acro_longonly_clist { #1 }
}
\cs_set_eq:NN \acro_useold:n \acro_use:n
\cs_set:Npn \acro_use:n #1 {
\acro_get_property:nn { #1 } { class }
\clist_if_in:NVTF \l_acro_longonly_clist \l__acro_class_tl 
  {
      \acro_usex:n { #1 }
    }{
      \acro_useold:n { #1 }
  }
}
\ExplSyntaxOff

\DeclareAcronym{ins}{short=\textsc{ins}, long=instrumental, class=leipzig}
\DeclareAcronym{irr}{short=\textsc{irr}, long=irrealis, class=leipzig}
\DeclareAcronym{adn}{short=\textsc{adn}, long=adnominal, class=gram}
\DeclareAcronym{oj}{short=\textsc{oj}, long=Old Japanese}

\setlongacros{gram, leipzig}

\begin{document}
In such cases, the \ac{adn} form is used in \ac{oj}.
The \ac{adn} form is used in \ac{oj}\printacronyms[name=Abbreviations, exclude-classes={leipzig}]
\end{document}

Je proposerai dans les prochains billets des commandes supplémentaires pour encore plus d’efficacité dans le traitement des gloses, et je les réunirai dans une extension au final.

À suivre ici.

Ce billet peut être cité de la façon suivante: Thomas Pellard, « Gloses et abréviations linguistiques avec LaTeX (1) », Cipanglossia, 21 août 2018, https://cipanglo.hypotheses.org/801.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.