Gloses et abréviations linguistiques avec LaTeX (2)

Le billet précédent a présenté comment gérer les étiquettes grammaticales et leurs abréviations avec LaTeX grâce à l’extension acro. Mais lorsqu’on écrit par exemple la grammaire d’une langue inconnue, il arrive que l’on soit amené à changer les étiquettes grammaticales au cours de la rédaction. Par exemple, on peut être amener à renommer le « passé » en « perfectif » ou « accompli ». Avec LaTeX, cela ne pose fondamentalement pas de problème si l’on a utilisé la procédure proposée. Il est néanmoins possible d’améliorer encore la prise en charge des étiquettes.

Pour continuer avec l’exemple précédent, soit une abréviation pour « past » définie comme suit:

\DeclareAcronym{pst}{short=\textsc{pst}, long=past}

Si l’on veut renommer le « past » en « perfective », on pourrait créer une nouvelle commande

\DeclareAcronym{pfv}{short=\textsc{pfv}, long=perfective}

et remplacer toutes les occurrences de \ac{pst} par \ac{pfv}. Mais vu le nombre de commandes différentes proposées par acro (\ac, \acs, \acl, etc.), il est facile d’oublier des occurrences.

De manière plus programmatique, on peut modifier la commande originale pour que toutes les occurrences de \ac{pst} n’impriment plus « PST » ou « past » mais « PFV » ou « perfective »:

\DeclareAcronym{pst}{short=\textsc{pfv}, long=perfective}

Le problème est qu’il faudra continuer à utiliser \ac{pst} partout, ce qui est relativement contre-intuitif.

Le plus pratique serait de disposer d’une commande basée sur la forme d’un marqueur grammatical et pointant vers une commande d’abréviation déjà définie. C’est la solution que je propose ici. Le code détaillé plus bas crée une commande \DeclareGloss{1}{2}{3} à 3 arguments:

  1. l’identifiant formel unique du marqueur grammatical, basé sur sa forme; les homonymes peuvent être différenciés par des numéros ou d’autres diacritiques;
  2. l’identifiant de la glose affectée au marqueur et définie à part;
  3. la forme du marqueur telle qu’on veut qu’elle s’imprime.

Deux autres commandes sont créées:

  1. \gs{}, qui correspond à \ac{} mais prend comme argument l’identifiant formel du marqueur;
  2. \gsm{}, qui imprime la forme du marqueur.

Par exemple, une fois une glose prédéfinie affectée à un marqueur avec

\DeclareAcronym{pst}{short=\textsc{pst}, long=past}
\DeclareGloss{ita}{pst}{\emph{-(i)ta}}

on peut alors imprimer « PST » ou « past » avec \gs{ita} et -(i)ta avec \gsm{ita}. Si l’on veut changer partout l’étiquette « past » de ce marqueur en « perfective », il suffit de changer les lignes de définition ci-dessus:

\DeclareAcronym{pst}{short=\textsc{pst}, long=past}
\DeclareAcronym{pfv}{short=\textsc{pfv}, long=perfective}
\DeclareGloss{ita}{pfv}{\emph{-(i)ta}}

L’extension que je proposerai bientôt définira des commandes analogues à celles d’acro pour imprimer à loisir la version abrégée, complète, pluriel, etc. En attendant, voici un exemple de code complet et fonctionnel.

\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 }
  }
}
\NewDocumentCommand{\DeclareGloss}{mmm}
  {
    \tl_new:c{g_loto_morph_#1_tl}
    \tl_set:cn{g_loto_morph_#1_tl}{#3}
    \tl_new:c{g_loto_gloss_#1_tl}
    \tl_set:cn{g_loto_gloss_#1_tl}{#2}
  }

\NewDocumentCommand \gs { s m }
  {
    \acro_begin:
    \acro_reset_specials:
    \exp_args:Nnf \acro_check_and_mark_if:nn {#1} { \tl_use:c{g_loto_gloss_#2_tl} }
    \exp_args:Nf \acro_use:n { \tl_use:c{g_loto_gloss_#2_tl} }
    \acro_end:
  }

\NewDocumentCommand \gsm { m }
  {
  \tl_use:c{g_loto_morph_#1_tl}
  }
\ExplSyntaxOff

\DeclareAcronym{pst}{short=\textsc{pst}, long=past, class=leipzig}
\DeclareAcronym{pfv}{short=\textsc{pfv}, long=perfective, class=leipzig}
\DeclareGloss{ita}{pfv}{\emph{-(i)ta}}
\setlongacros{leipzig}

\begin{document}
The \gs{ita} forms marked by \gsm{ita}… In the above examples, \gsm{ita} marks the \gs{ita}\printacronyms[name=Abbreviations]
\end{document}

À suivre…

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

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.