Quand je bricole une feuille de transformation XSLT

lol_cat

Un petit billet pour archiver (et partager) mon exploration de la feuille de transformation TEI to LaTeX mise à disposition par le Consortium TEI.

XSLT est un langage de transformation XML (W3C approved) qui permet de transposer son fichier XML dans un autre format HTML, PDF, ODT, etc.

Dans le cadre de l’édition critique du Journal de Lyon que je traite en XML/TEI, je voulais tester la transformation XML vers LaTeX qui est un langage de mise en forme de document assez répandu dans le milieu des sciences dures (notamment pour sa gestion des caractères et formules mathématiques), mais qui peine encore à se faire une place en sciences humaines.

En passant, pour s’initier à LaTeX (prononcer lateK), je recommande d’avoir sous la main le petit livre de Maïeul Rouquette : http://geekographie.maieul.net/Xe-LaTeX-applique-aux-sciences

Donc, au lieu de créer une feuille XSLT « from scratch », j’ai utilisé celle proposée par le Consortium TEI : http://www.tei-c.org/Tools/
Il y a deux possibilités :

Malheureusement pour moi, la première option n’a pas donné les résultats escomptés, car j’ai dans ma source de nombreuses et longues notes marginales (encodées <note place= »margin »>, qui sont transformées en \marginpar dans mon fichier LaTeX. En générant la sortie PDF, mes notes finissent par se chevaucher, car la gestion des éléments flottants ne se passent pas correctement du côté LaTeX.

\reversemarginpar
\marginnote{1713 \& 1714}, a été nommé échevin pour la présente année 1715 \& pour 1716, avec Monsieur  {\name Jacques Laureau} banquier, originaire de  {\name Dijon}

Résultat MarginnoteCi-dessus, les éléments \reversemarginpar et \marginnote incriminés et résultat en générant le PDF.

De plus, pour une édition papier au format A4, il n’est pas très facile de gérer la zone de texte, la zone de notes marginales, et la zone des marges d’impression. Du coup, j’ai décidé de renvoyer les notes marginales de ma source en notes de bas de page.

Modifier le traitement des balises TEI <note>

Pour appliquer cela à la feuille de transformation, il m’a fallu modifier directement le XSL.
Le dossier Stylesheets-master (une fois téléchargé sur Git et dézippé) contient plusieurs dossiers, un pour chaque type de transformation – de docx à html en passant par odt ou epub.
En ouvrant le dossier latex, on a accès à une quinzaine de fichiers xsl, ordonnés selon les grands modules de la TEI :

  • latex_core.xsl (contiendra les requêtes d’execution pour le module core de la TEI)
  • latex_header.xsl (pour le module corpus header)
  • latex_namesdates.xsl (pour le module Names, Dates, People and Places)

La transformation des balises TEI « note » se trouve dans le module Core. Dans le fichier latex_core.xsl, les notes sont gérées de cette façon :code_note

La balise TEI <note>, si elle est accompagnée d’un attribut place avec une valeur left, margin_left, etc. est placée dans un élément LaTeX \marginnote précédé  de \revermarginpar ou \normalmarginpar si la condition de l’attribut n’est pas remplie.

J’ai donc modifié ces lignes,code_foonote

où j’ai enlevé les précédents éléments pour les remplacer par \footnote{}

J’ai également mais une distinction sur l’attribut « place » de la balise TEI <note> pour pouvoir différencier mes propres notes de bas de page (place= »bottom »), de celles de la source (place= »margin »).

Nous sommes bien d’accord que ceci est un bricolage « home made » construit dans l’urgence. Une meilleure méthode serait d’avoir le temps de se former à XSL pour construire de véritables requêtes de transformation selon la structure TEI utilisée dans ses propres fichiers.

N’hésitez pas à donner vos conseils en commentaires.


3 réflexions au sujet de « Quand je bricole une feuille de transformation XSLT »

  1. Patrick

    L’extension « koma-script » de LaTeX permet une gestion très fine de l’empagement et donc de l’espace réservé aux notes marginales. Plus d’infos, au sein d’une TeXlive, via la commande $ texdoc koma .

    Répondre

Laisser un commentaire

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