LaTex2TEI : de LaTex à XML-TEI en quelques clics

Récemment, la capacité de médiation du logiciel TEI-Med.it (conçu pour l’automatisation de la production des fichiers TEI-XML à partir d’un fichier .txt) a été mise à l’épreuve dans le contexte d’une conversion de LaTex à TEI-XML : le résultat, très satisfaisant (peut-être parce que l’encodage LaTex n’était pas très complexe!), est une nouvelle version du logiciel que j’appellerai LaTex2TEI (LaTex to TEI). Le contexte de cette expérience d’adaptation était le projet Ausiàs March (Edición sinóptica de las poesías de Ausiàs March a partir de todos los testimonios manuscritos e impresos en su contexto literario) http://www.cervantesvirtual.com/portales/ausias_march/ de l’Universitat d’Alacant. Ce projet, financé par le Ministerio de Economía y Competitividad del Gobierno de España, a vu la numérisation de l’œuvre du poète sous le format LaTex ; aujourd’hui, la nécessité s’impose de faire migrer ces centaines de fichier de LaTex à TEI-XML.

Le passage à TEI signifie évidemment un enrichissement de l’encodage textuel, le glissement des préoccupations typographiques aux préoccupations sémantiques. Le changement radical dans l’encodage des abréviations est emblématique :

ce qui en LaTex est une simple question d’italique
p\textit{er}
en TEI-XML deviendra une question de signes abréviatifs et d’expansions
<choice>
<abbr>p</abbr>
<expan>per</expan>
</choice>

Le passage de LaTex à TEI nous oblige dans certains cas à une contextualisation de la donnée afin de récupérer tous les éléments que l’encodage LaTex a sous-entendu : dans ce cas, il faut interpréter dans son contexte la valeur du tag \textit{$} qui, à travers l’indication de l’italique, signale la présence d’une abréviation; et dans le contexte de l’abréviation, il faut interpréter ultérieurement la donnée LaTex pour en déduire que le tag \textit{$} marque les lettres restituées. Je parle de nécessité de contextualisation parce que le même tag \textit{$} est utiliser ailleurs pour indiquer toute autre chose, par ex. un mot en évidence nécessitant également d’une représentation typographique en italique.

Il est évident que le niveau différent de détail entre les deux systèmes oblige forcément à une intervention humaine à la main afin d’intégrer ou corriger l’encodage TEI-XML obtenu. Mais, naturellement, l’aspiration était celle de réduire au minimum cette intervention, aussi bien pour des raisons très pragmatiques (il y ont des centaines de fichiers à convertir) que pour des raisons de qualité du travail (réduire l’intervention humaine signifie réduire la possibilité d’erreur).

J’ai donc pensé d’appliquer aux fichiers LaTex le même principe d’équivalence qui est à la base du fonctionnement de TEI-Med.it : au lieu de l’équivalence entre ASCII/Entities et tags TEI-XML, ici l’équivalence est entre tags LaTex et tags TEI-XML. En plus de ces équivalences automatiques (qui ne sont pas toujours possibles), le logiciels LaTex2TEI : 1. encapsule le vers dans la balise <l>, 2. engendre les attributs @n e @xml:id, et 3., c’est une option, encode les deux hémistiches avec la balise <seg>. Voici quelques exemples du tableau de conversion :

\begin{estrofa} = <lg type="cobla" n="$" xml:id="$">
\end{estrofa} = </lg>
\numero{$} = <l n="$" xml:id="$"> </l>
/ = <seg type="hemistiquio" xml:id="$"> </seg>
[pag] = <pb n="$" facs="$"/>
\textsc{$} = <c rend="large">$</c>
\interlin{$} = <add place="interlinear">$</add>
\tatxat{$} = <del rend="barred">$</del>

Le point plus critique a été l’automatisation de la conversion des abréviations. Le seul élément qui me permettait d’identifier l’abréviation dans l’encodage LaTex proposé était la présence du tag \textit{$}. Le principe pour l’automatisation a été donc : tous les mots qui contiennent le tag \textit{$}, par ex. p\textit{ar}abla, seront encapsulés dans cette structure TEI-XML :

<choice>
<abbr>p’’abla</abbr>
<expan>parabla>;/expan>
</choice>

Le contenu du tag \textit{$} est ignoré en <abbr> et inséré en <expan>, d’où la nécessité d’une intervention humaine après la conversion en TEI-XML pour introduire le signe abréviatif. Avec un peu plus de travail on pourrait arriver à automatiser aussi ce passage.

La plupart du travail manuel à faire est au niveau du file .tex, où l’on doit tout simplement effacer certaines parties et modifier de petits détails : cela signifie travailler avec un format beaucoup plus simple à manipuler que le code XML. Voici un exemple; le symbole ///// signifie effacer :


///// \documentclass[12pt]{article}

///// % --------------------------------------------------------

///// \input{../preamble}

///// \renewcommand{\espaiAbansEtiquetaPoema}{\vspace{0ex}}
///// \renewcommand{\espaiAbansSeccio}{\vspace{0ex}}

///// % --------------------------------------------------------

\begin{document}

///// \begin{estrofa}

///// \espaiAbansEtiquetaPoema

///// \poema{(b 31) [1]}\\

///// \end{estrofa}


\begin{estrofa}
\numero{1} [25r] Axi com cell / qui'n lo somnis de lita *
\numero{2} he son delit / de foll pensament ve
\numero{3} ne pren ami / quil temps passat, me te
\numero{4} limaginar / qu'altre be, noy habita
\numero{5} sentint venir / l'aguayt de, ma, dolor
\numero{6} sabent de cert / que'n ses mans, he de jaure
\numero{7} temps de venir / en ningun bem, pot caure
\numero{8} \c{c}o que's no res / en mi, es lo millor
\end{estrofa}

///// \begin{estrofa}%Extra
///// \begin{tornada}
///// Tornada.
///// \end{tornada}
///// \end{estrofa}


\begin{estrofa} **
\numero{41} Plena de seny / quant, amor, es molt vella
\numero{42} absen\c{c}a es / lo verme qui, la guasta
\numero{43} si fer metat / durament, no contrasta
\numero{44} he creure poch / sil'enueios, consella
\end{estrofa} ***

\end{document}

* pour le résultat final de l’XML c’est mieux de déplacer l’indication de la page hors du vers ** et *** il faut changer estrofa en tornada.

Une fois ces petites interventions faites, il suffit d’ouvrir le terminal :

latex2tei.py -t -x -s [-g]
latex2tei.py -t nom_fichier.tex -x nom_fichier.xml -s sigle_ID [-g 0/1]

-t : nom du fichier LaTex qui doit subir la conversion
-x : nom du fichier TEI-XML qui sera le produit de la conversion
-s : sigle qui doit précéder le numéro de l’xml:id
Si l’on donne la valeur 1 à -g on aura aussi la division des vers en hémistiches (<seg>).

Voici le résultat (j’exclue le TEI-Header pour des raisons d’espace) dans la forme complète, avec <seg> :

<text>
 <body>
   <div type="poem" xml:id="Adiv1">
     <pb n="49r" facs=""/>
     <lg type="cobla" n="1" xml:id="Alg1">
       <l n="1" xml:id="Al1">
         <seg type="hemistiquio" xml:id="Al1s1">AXicom cell:</seg>
         <seg type="hemistiquio" xml:id="Al1s2">quin lo sompnis delita</seg>
       </l>
       <l n="2" xml:id="Al2">
         <seg type="hemistiquio" xml:id="Al2s1">Del temps;
           <choice>
             <abbr>p˝sent</abbr>
            <expan>present</expan>
          </choice></seg>
         <seg type="hemistiquio" xml:id="Al2s2">nom trobe amador</seg>
       </l>
etc.

Il s’agit pour le moment d’une version très simplifiée du logiciel, qu’on peut définir compacte : le set des tags LaTex est déjà incorporé dans le logiciel. On pourrait avoir naturellement une version plus complexe, au même niveau de la version originale de TEI-Med.it, avec un .csv des tags géré de façon autonome par les utilisateurs sans rien toucher au niveau du logiciel.


OpenEdition vous propose de citer ce billet de la manière suivante :
Marta Materni (16 mai 2019). LaTex2TEI : de LaTex à XML-TEI en quelques clics. Florimont et Troie numériques. Consulté le 19 mai 2025 à l’adresse https://doi.org/10.58079/nmf7


Laisser un commentaire

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.