Aller au contenu

ConTeXt/TEI-XML et Poésie : strophes, vers, bilinguisme, apparat critique

Un livre de Wikilivres.

 Page précédente : Versification et poésie

Part. III, ch. 9  •  TEI-XML et poésie  •  Sommaire

Page suivante : Apparat critique à plusieurs niveaux 


ConTeXt/TEI-XML et Poésie : strophes, vers, bilinguisme et apparat critique

[modifier | modifier le wikicode]

La poésie représente un cas éditorial particulier dans les flux XML→PDF. Les vers doivent conserver leurs coupures, les strophes leur structure visuelle, et les éditions savantes introduisent souvent des traductions en regard, une numérotation précise, voire un apparat critique. Grâce à son moteur XML intégré et à sa logique déclarative, ConTeXt LMTX permet de transformer un fichier TEI-XML poétique en une mise en page élégante et robuste, qu’il s’agisse d’un poème simple ou d’une édition bilingue avec commentaires.

Objectifs de cette page

  • Mapper les balises TEI <lg> (strophe) et <l> (vers) vers des environnements ConTeXt.
  • Produire automatiquement des vers correctement alignés et mis en forme.
  • Générer une édition bilingue (VO/VF) à partir d’un seul fichier XML.
  • Ajouter un apparat critique (notes, variantes) au niveau des vers.
  • Organiser plusieurs niveaux de commentaires grâce aux xmlsetups.

1. Structure TEI d’un poème

[modifier | modifier le wikicode]

La structure poétique TEI la plus courante est :

<lg type="stanza">
  <l>Premier vers</l>
  <l>Deuxième vers</l>
  <l>Troisième vers</l>
</lg>

Avec éventuellement :

  • @n pour numéroter,
  • @xml:lang pour distinguer VO / VF,
  • <note> à l’intérieur d’un vers,
  • <app> + <lem> / <rdg> pour un apparat critique.

2. Exemple TEI de base : une strophe simple

[modifier | modifier le wikicode]

Voici un fichier TEI minimal, utilisable immédiatement :

<!-- fichier : poem.xml -->
<TEI xml:lang="fr">
  <text>
    <body>
      <lg type="stanza">
        <l>Rien n’est plus doux que le silence,</l>
        <l>quand la maison retient son souffle,</l>
        <l>et que, derrière les vitres,</l>
        <l>la pluie polit les heures.</l>
      </lg>
    </body>
  </text>
</TEI>

3. Transformer le TEI en vers avec ConTeXt

[modifier | modifier le wikicode]

Nous utilisons \definelines pour que ConTeXt rende les vers tels qu’ils apparaissent dans le XML.

% fichier : poem-tei.tex

\setuppapersize[A5]
\setupbodyfont[modern,11pt]

% Environnement "poème"
\definelines[poeme]
\setuplines[poeme][number=no]

% --- SETUP XML ---
\startxmlsetups xml:poem
  \xmlsetsetup{#1}{lg}{xml:strophe}
  \xmlsetsetup{#1}{l}{xml:vers}
\stopxmlsetups
\xmlregistersetup{xml:poem}

% Strophes
\startxmlsetups xml:strophe
  \startpoeme
    \xmlflush{#1}
  \stoppoeme
  \blank[medium]
\stopxmlsetups

% Vers
\startxmlsetups xml:vers
  \xmlflush{#1}\par
\stopxmlsetups

\starttext
\xmlprocessfile{main}{poem.xml}{}
\stoptext

4. Poésie bilingue : VO + VF à partir d’un seul fichier TEI

[modifier | modifier le wikicode]

Le TEI permet de placer l’original et la traduction dans la même structure. Exemple :

<lg>
  <l xml:lang="en">When I have fears that I may cease to be</l>
  <l xml:lang="fr">Quand je crains de mourir avant d’avoir écrit</l>

  <l xml:lang="en">Before my pen has gleaned my teeming brain,</l>
  <l xml:lang="fr">Avant que mon esprit foisonnant ne se déploie,</l>
</lg>

4.1. Mapping double : VO à gauche, VF à droite

[modifier | modifier le wikicode]
% fichier : poem-bilingual.tex

\setuppapersize[A4]
\setupbodyfont[modern,11pt]

\definelines[VO]
\definelines[VF]

\setupcolumns[n=2, balance=yes, distance=1.2cm]

\startxmlsetups xml:poem
  \xmlsetsetup{#1}{lg}{xml:stanza}
  \xmlsetsetup{#1}{l[@xml:lang='en']}{xml:versVO}
  \xmlsetsetup{#1}{l[@xml:lang='fr']}{xml:versVF}
\stopxmlsetups
\xmlregistersetup{xml:poem}

% Strophe → deux colonnes parallèles
\startxmlsetups xml:stanza
  \startcolumns
    \startVO \xmlfilter{#1}{.//l[@xml:lang='en']} \stopVO
    \column
    \startVF \xmlfilter{#1}{.//l[@xml:lang='fr']} \stopVF
  \stopcolumns
  \blank[medium]
\stopxmlsetups

\starttext
\xmlprocessfile{main}{poem.xml}{}
\stoptext

5. Apparatus criticus : notes et variantes TEI

[modifier | modifier le wikicode]

Le TEI propose :

<app>
  <lem>texte de base</lem>
  <rdg wit="#A">variante A</rdg>
  <rdg wit="#B">variante B</rdg>
</app>

Nous pouvons rendre un apparat sous forme de note :

\startxmlsetups xml:vers
  \xmlflush{#1}%
  \xmlfilter{#1}{app/lem/text()}%
  \xmlfilter{#1}{app/rdg -> xml:variant}%
  \par
\stopxmlsetups

\startxmlsetups xml:variant
  \footnote{Variante : \xmlflush{#1}}
\stopxmlsetups

5.1 Exemple minimal : VO/VF + commentaire en notes de bas de page

[modifier | modifier le wikicode]

Avant de passer à l’exemple complet en trois colonnes (VO / VF / commentaire), il est utile de disposer d’un exemple intermédiaire très simple : VO + VF en colonnes, et un bloc de commentaire TEI transformé en notes.

Objectif. Montrer comment on structure un poème TEI en trois blocs (orig, trans, comm) ;

  • on produit une édition VO/VF en colonnes ;
  • on transforme le bloc <lg type="comm"> en notes automatiques.

5.1.1 Fichier ConTeXt minimal

[modifier | modifier le wikicode]
  • On rédige donc en parallèle — et dans le même répertoire — un fichier TeX (avec TeXWorks, ou autre, et en UTF8 !) + un fichier XML :
  • Nom du fichier TEX : mwe-xmltei-poem.tex. Il s'agit d'analyser un poème en anglais, de le traduire en Français et de fournir des commentaires (VO/VF + commentaires → notes). Le fichier XML pourra s'appeler poem.xml. Ici on a décidé de mettre le fichier XML en buffer (en mémoire tampon, ce qui évite d'avoir deux fichiers séparés à deux endroits différents sur cette page; mais vous pouvez les séparer pour votre test) :
\setuppapersize[A4]

\setupTABLE[frame=off]
\setupTABLE[column][1][width=.1\textwidth]
\setupTABLE[column][2][width=.450\textwidth]
\setupTABLE[column][3][width=.45\textwidth]

\startbuffer[poem] % ici on a décidé d'écrire le fichier xml en mémoire tampon
<?xml version="1.0" encoding="UTF-8"?>
<TEI>
  <text>
    <body>
      <lg type="stanza">
        <lg type="orig">
<!-- Première strophe : démonstration note + apparatus -->
          <l>First light touches the closed houses,</l>
          <l>and the street breathes a pale memory.</l>
        </lg>
        <lg type="trans">
<!-- Traduction : démonstration note + apparatus -->
          <l>La première lumière effleure les maisons closes,</l>
          <l>et la rue respire une mémoire pâle.</l>
        </lg>
        <lg type="comm">
          <l>light] atmospheric motif in the poem.</l>
          <l>memory] semantic key recurring in several stanzas.</l>
        </lg>
      </lg>
    </body>
  </text>
</TEI>
\stopbuffer

\startxmlsetups xml:main
    \xmlsetsetup{#1}{*}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:main}

\startxmlsetups xml:TEI
    \xmlcommand{#1}{text/body/lg[@type='stanza']}{xml:stanza}
\stopxmlsetups

\startxmlsetups xml:original
    \language[french]
    \xmltext{#1}
\stopxmlsetups

\startxmlsetups xml:translation
    \language[french]
    \xmltext{#1}
\stopxmlsetups

\startxmlsetups xml:comment
    \footnote{\xmltext{#1}}
\stopxmlsetups

\startxmlsetups xml:stanza
\bTABLE
    \bTR
        \bTH line \eTH
        \bTH original \eTH
        \bTH translation \eTH
    \eTR
    \dorecurse {\xmlcount{#1}{./lg[@type='orig']/l}} {
        \bTR
            \bTD
                ##1
            \eTD
            \bTD
                \xmlcommand{#1}{./lg[@type='orig']/l[##1]}{xml:original}
                \xmlcommand{#1}{./lg[@type='comm']/l[##1]}{xml:comment}
            \eTD
            \bTD
                \xmlcommand{#1}{./lg[@type='trans']/l[##1]}{xml:translation}
            \eTD
        \eTR
    }
\eTABLE
\stopxmlsetups

\starttext
    \xmlprocessbuffer{main}{poem}{}
\stoptext

5.2 Exemple complet : TEI-XML poétique et triple colonne (numérotation des vers, VO/VF et commentaire)

[modifier | modifier le wikicode]
  • L’exemple précédent (section 5.1) présentait un dispositif minimal. Nous pouvons maintenant passer à un modèle complet, proche d’une édition savante :
  • colonne 1 : numérotation des vers ;
  • colonne 2 : Texte original (VO) ;
  • colonne 3 : Traduction ;
  • Le commentaire est ici rejeté en note dans la cellule qui concerne la langue originale.
  • Cet exemple développe la même logique que précédemment (s'appuyer sur la mémoire tampon/buffer pour appeler le code XML), mais à une échelle plus large. Il y a donc un peu plus de travail, notamment pour rédiger le code proprement et comprendre les mécanismes de récursivité. Il peut servir de base à des éditions savantes structurées, polyglottes ou annotées.

  • Voici le fichier XML-TEI-TeX (tout en un !) :
\setuppapersize[A4]
\setupbodyfont[EBGaramond,10pt] % Latin Modern (défaut), 10pt


\setupTABLE[frame=off]
\setupTABLE[column][1][width=.1\textwidth]
\setupTABLE[column][2][width=.450\textwidth]
\setupTABLE[column][3][width=.45\textwidth]
% ----------------------------------------------------------
% Pied de page
% ----------------------------------------------------------
\setupfootertexts
  []
  [{\tfxx Document composé avec \ConTeXt}]

% ----------------------------------------------------------
% Notes "plaçables" (robustes avec les tableaux)
% ----------------------------------------------------------
\definenote[commnote]
\setupnote[commnote][
  rule=off,
  paragraph=yes,
  inbetween=\quad,
  style=\tfxx,
]
% ----------------------------------------------------------
% XML dans un buffer (méthode Hans) — 16 vers + commentaire
% ----------------------------------------------------------
\startbuffer[poem]
<?xml version="1.0" encoding="UTF-8"?>
<TEI>
  <text>
    <body>
      <lg type="stanza">
        <lg type="orig">
          <l>First light touches the closed houses,</l>
          <l>and the street breathes a pale memory.</l>
          <l>I hear the fountain count its coins,</l>
          <l>while sparrows edit yesterday’s crumbs.</l>
          <l>The baker lifts a shutter like a veil,</l>
          <l>and flour rises, a brief white weather.</l>
          <l>At the corner, a newspaper opens,</l>
          <l>its headlines folded like tired wings.</l>
          <l>I write your name, then cross it out,</l>
          <l>the paper keeps the pressure, not the meaning.</l>
          <l>Between two words a well appears,</l>
          <l>and echoes practice someone else’s voice.</l>
          <l>A tram arrives; its doors hesitate,</l>
          <l>as if choosing which century to enter.</l>
          <l>In my pocket, a key warms slowly,</l>
          <l>metal remembering the shape of home.</l>
        </lg>

<lg type="trans">
          <l>La première lumière effleure les maisons closes,</l>
          <l>et la rue respire une mémoire pâle.</l>
          <l>J’entends la fontaine compter ses pièces,</l>
          <l>tandis que les moineaux corrigent les miettes d’hier.</l>
          <l>Le boulanger relève un volet comme un voile,</l>
          <l>et la farine monte, brève météo blanche.</l>
          <l>Au coin, un journal s’ouvre,</l>
          <l>ses gros titres pliés comme des ailes lassées.</l>
          <l>J’écris ton nom, puis je le rature,</l>
          <l>le papier garde la pression, pas le sens.</l>
          <l>Entre deux mots, un puits apparaît,</l>
          <l>et les échos répètent la voix d’un autre.</l>
          <l>Un tram arrive ; ses portes hésitent,</l>
          <l>comme si elles choisissaient le siècle où entrer.</l>
          <l>Dans ma poche, une clé se réchauffe lentement,</l>
          <l>le métal se souvient de la forme du foyer.</l>
        </lg>
 <lg type="comm">
          <l>light] atmospheric motif; establishes the scene.</l>
          <l>memory] semantic key recurring across the poem.</l>
          <l>fountain] auditory image; introduces counting/metre.</l>
          <l>edit] meta-textual verb; aligns with “variants” later.</l>
          <l>shutter/veil] unveiling metaphor; morning as revelation.</l>
          <l>white weather] synesthetic image; flour as climate.</l>
          <l>newspaper] public voice entering the private walk.</l>
          <l>headlines] folded wings; fatigue of news cycles.</l>
          <l>name] inscription + erasure; motif of revision.</l>
          <l>pressure/meaning] material trace vs semantic loss.</l>
          <l>well] gap between words; abyss of interpretation.</l>
          <l>someone else] polyphony; speaker displaced.</l>
          <l>tram] modern intrusion; tests punctuation in table.</l>
          <l>century] controlled anachronism; time as choice.</l>
          <l>key] pocket object; memory by touch/heat.</l>
          <l>home] “shape” as form; stable equivalence in translation.</l>
        </lg>
      </lg>
    </body>
  </text>
</TEI>
\stopbuffer
% ----------------------------------------------------------
% Setups XML (structure Hans)
% ----------------------------------------------------------
\startxmlsetups xml:main
  \xmlsetsetup{#1}{*}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:main}

\startxmlsetups xml:TEI
  \xmlcommand{#1}{text/body/lg[@type='stanza']}{xml:stanza}
\stopxmlsetups

\startxmlsetups xml:original
  \language[english]
  \xmltext{#1}
\stopxmlsetups

\startxmlsetups xml:translation
  \language[french]
  \xmltext{#1}
\stopxmlsetups
% commentaire -> note "plaçable"
\startxmlsetups xml:comment
  \commnote{\xmltext{#1}}
\stopxmlsetups

\startxmlsetups xml:stanza
\bTABLE
  \bTR
    \bTH line \eTH
    \bTH original \eTH
    \bTH translation \eTH
  \eTR
  \dorecurse{\xmlcount{#1}{./lg[@type='orig']/l}}{%
    \bTR
      \bTD ##1 \eTD
      \bTD
        \xmlcommand{#1}{./lg[@type='orig']/l[##1]}{xml:original}
        \xmlcommand{#1}{./lg[@type='comm']/l[##1]}{xml:comment}
      \eTD
      \bTD
        \xmlcommand{#1}{./lg[@type='trans']/l[##1]}{xml:translation}
      \eTD
    \eTR
  }
\eTABLE
\stopxmlsetups

\starttext
  \centerline{\bfb Poème TEI-XML : original, traduction, notes “plaçables”}
  \blank[big]
  {\em 
  Objectif : montrer une méthode robuste (inspirée de Hans Hagen) pour afficher un poème encodé en XML-TEI
  en trois colonnes (n° du vers, original, traduction) tout en attachant un commentaire ligne à ligne sous forme de notes,
  placées à un endroit choisi (ici : après le tableau), afin d’éviter les collisions “tableau + footnotes”. On remarquera les commentaires en anglais placés dans la cellule concernant le texte original.}

  \blank[medium]
\centerline{\sc — Procédure (résumé technique) —}
  \starttyping
1) XML intégré dans un buffer (\startbuffer...\stopbuffer)
2) Boucle sur le nombre de vers : \dorecurse{\xmlcount{#1}, etc.
3) Extraction des lignes via XPath : orig/l[i], trans/l[i], comm/l[i]
4) Commentaires collectés avec \commnote{\xmltext{#1}}, puis rendus par \placenotes[commnote]
  \stoptyping
  \blank[big]

  \xmlprocessbuffer{main}{poem}{}

  \blank[big]
  % Notes en deux colonnes pour limiter les débordements
  \startcolumns[n=2,balance=yes]
    \placenotes[commnote]
  \stopcolumns
\stoptext

  • Voici la sortie PDF (illustrations au format PNG ici) ci-dessous des deux MWE (court et long) :

Pour aller plus loin — Préserver la structure TEI avec \xmlflush

Dans les exemples présentés ci-dessus, le traitement du XML-TEI repose sur la commande \xmltext, suffisante tant que les éléments XML ne contiennent que du texte simple.

  • Dès que le balisage devient plus riche (emphase, lemmes, notes intégrées, apparat critique), l’usage de \xmlflush devient préférable. Contrairement à \xmltext, qui extrait uniquement le contenu textuel brut, \xmlflush parcourt récursivement l’arbre XML et permet à ConTeXt d’appliquer les règles définies pour chaque élément imbriqué.
  • Par exemple, dans un vers encodé ainsi :

<l>First <emph>light</emph> touches the closed houses</l>

  • \xmltext produira uniquement « First light touches the closed houses » (en perdant l’information d’emphase),
  • \xmlflush permettra de traiter <emph> via un \startxmlsetups dédié et de conserver la structure sémantique du texte.
  • Cette distinction devient cruciale dans les éditions savantes : poésie annotée, lemmatisation, variantes (<app>, <lem>, <rdg>), ou textes multilingues à structure complexe.

👉 En résumé :

  • \xmltext : simple, rapide, adapté aux MWEs élémentaires ;
  • \xmlflush : robuste, extensible, indispensable pour les workflows TEI avancés.

Méthode des deux fichiers séparés

[modifier | modifier le wikicode]
  • On pourra toujours s'essayer ensuite avec la méthode des deux fichiers séparés (fichier XML + fichier source *.tex), avec le code qui suit :
  • D'abord le fichier XML, que l'on va nommer : poem-advanced.xml, puisque le fichier source ConTeXt va aller chercher ce nom - si vous lisez le préambule de ce fichier TeX ... :
<TEI xml:lang="en">
<text>
<body>
<!--  Première strophe : VO + VF + commentaire  -->
<lg type="stanza" n="1">
<lg type="orig" xml:lang="en">
<l>When I have fears that I may cease to be,</l>
<l>Before my words have caught the restless mind,</l>
<l>Before my pages, patient in their sleep,</l>
<l>Awake to bear the burden I designed,</l>
<l>Then sudden shadows crowd the silent room,</l>
<l>And every book becomes a sealed gate,</l>
<l>Where thoughts, like travellers delayed by storm,</l>
<l>Wait in the rain outside the house of fate.</l>
</lg>
<lg type="trans" xml:lang="fr">
<l>Quand je crains de n’être plus qu’un jour de plus,</l>
<l>Avant que mes mots n’aient saisi l’esprit fuyant,</l>
<l>Avant que mes pages, encore endormies,</l>
<l>Ne portent le poids du projet que je forme,</l>
<l>Alors des ombres remplissent la chambre,</l>
<l>Et chaque livre devient une porte close,</l>
<l> les pensées, comme des voyageurs sous l’orage,</l>
<l>Attendent dans la pluie devant la maison du destin.</l>
</lg>
<lg type="comm" xml:lang="fr">
<l>Strophe 1 : inquiétude de l’auteur face au temps qui manque ;</l>
<l>thèmes : fécondité mentale, livres comme portes, motif de l’attente.</l>
</lg>
</lg>
<!--  Deuxième strophe : notes + apparat critique  -->
<lg type="stanza" n="2">
<lg type="orig" xml:lang="en">
<l>
Sometimes I hear a distant city’s hum,
<note type="explan">Écho de la modernité, bruit anonyme de la ville.</note>
</l>
<l>Rising and falling like a troubled sea,</l>
<l>Where every light that trembles at the dusk</l>
<l>Is some unfinished line that calls to me.</l>
<l>And in that murmur lives a secret doubt,</l>
<l>
That all these
<app>
<lem>written</lem>
<rdg wit="#A">spoken</rdg>
<rdg wit="#B">hidden</rdg>
</app>
words may never rise,
</l>
<l>But lie, like shells abandoned on the shore,</l>
<l>Far from the waves that once gave them their voice.</l>
</lg>
<lg type="trans" xml:lang="fr">
<l>Parfois j’entends le grondement d’une ville lointaine,</l>
<l>Qui monte et qui retombe comme une mer troublée,</l>
<l> chaque lumière vacillante au crépuscule</l>
<l>Est un vers inachevé qui m’appelle au travail.</l>
<l>Et dans ce murmure survit un doute secret :</l>
<l>que tous ces mots, écrits ou seulement rêvés,</l>
<l>demeurent au bord du monde, comme des coquillages,</l>
<l>loin des vagues qui leur donnaient une voix.</l>
</lg>
<lg type="comm" xml:lang="fr">
<l>Strophe 2 : ville moderne comme métaphore du bruit intérieur ;</l>
<l>apparat : variantes possibles sur « written » (spoken / hidden).</l>
</lg>
</lg>
</body>
</text>
</TEI>

  • Ensuite, le fichier TeX qui l'accompagne:
% mwe-tei-poem-advanced.tex
% Objectif :
%   - Lire le fichier TEI "poem-advanced.xml"
%   - Pour chaque strophe :
%       * VO (en) dans la 1ère colonne, vers numérotés
%       * VF (fr) dans la 2e colonne
%       * Commentaire (fr) dans la 3e colonne
%   - Gérer <note> et un petit apparat critique <app><lem><rdg>

\setuppapersize[A4]
\setupbodyfont[modern,11pt]

% --- 3 environnements de vers : VO, VF, commentaire
\definelines[VOlines]   % Vers de l’original
\definelines[VFlines]   % Vers de la traduction
\definelines[COMlines]  % Commentaire en prose versifiée
% Numérotation automatique des vers pour la VO

\setuplines[VOlines][
  number=yes,             % on veut des numéros
  location=left,          % dans la marge gauche
  numberstyle=\tfxx,      % petits chiffres
  numberdistance=0.5em,   % espace entre numéro et vers
]

% 3 colonnes pour VO / VF / commentaire
\setupcolumns[
  n=3,
  balance=yes,
  distance=8mm,
]

% --------------------------------------------------
%  SETUPS XML
% --------------------------------------------------

% "xml:poem" : point d’entrée, appliqué à la racine TEI
\startxmlsetups xml:poem
  % On laisse TEI, text, body "passer" :
  \xmlsetsetup{#1}{TEI|text|body}{xml:pass}
  % Une strophe TEI (<lg type="stanza">) → xml:stanza
  \xmlsetsetup{#1}{lg[@type='stanza']}{xml:stanza}
  % Notes et apparat critiques :
  \xmlsetsetup{#1}{note}{xml:note}
  \xmlsetsetup{#1}{app}{xml:app}
  % Important : on parcourt l'arbre XML
  \xmlflush{#1}
\stopxmlsetups

\xmlregistersetup{xml:poem}

% Pass-through : laisser passer certains éléments
\startxmlsetups xml:pass
  \xmlflush{#1}
\stopxmlsetups

% --- Notes : <note> → \footnote{...}
\startxmlsetups xml:note
  \footnote{\xmlflush{#1}}
\stopxmlsetups

% --- Apparatus : <app><lem><rdg>...
%     Lemma dans le texte, variantes en note
\startxmlsetups xml:app
  \xmlfilter{#1}{lem/text()}%
  \footnote{%
    Variantes :
    \xmlfilter{#1}{rdg -> xml:rdgvariant}%
  }%
\stopxmlsetups

\startxmlsetups xml:rdgvariant
  [\xmlatt{#1}{wit}: \xmlflush{#1}] %
\stopxmlsetups

% --- Traitement d'une strophe (<lg type="stanza">)
\startxmlsetups xml:stanza
  \startcolumns

    % Colonne 1 : VO (lg orig/en)
    \startVOlines
      \xmlfilter{#1}{./lg[@type='orig']/l}
    \stopVOlines

    \column

    % Colonne 2 : VF (lg trans/fr)
    \startVFlines
      \xmlfilter{#1}{./lg[@type='trans']/l}
    \stopVFlines

    \column

    % Colonne 3 : commentaire (lg comm/fr)
    \startCOMlines
      \xmlfilter{#1}{./lg[@type='comm']/l}
    \stopCOMlines

  \stopcolumns

  \blank[2*big] % espace entre strophes
\stopxmlsetups

% --------------------------------------------------
\starttext

\subject{Poème TEI-XML : original, traduction, commentaire}

% Processus : (nom interne, fichier XML, setup de départ)
\xmlprocessfile{main}{poem-advanced.xml}{xml:poem}

\stoptext

Autre exemple : analyse des vers de Virgile : TEI-XML et "buffer" avec ConTeXt

[modifier | modifier le wikicode]

Cet exemple, dont le rendu PDF tient sur une page a un double objectif pédagogique.

  • D’une part, il montre comment un poème encodé en TEI-XML peut être transformé, sans duplication de contenu, en une mise en page « philologique » classique : trois colonnes parallèles (numéro de vers, texte latin, traduction française comme nous l'avons déjà vu), un apparat critique à part et une bibliographie structurée. Le fichier source ne mélange pas typographie et contenu : la structure logique (TEI) reste du côté XML, tandis que ConTeXt se charge de la composition (tableaux, listes, titres, etc.).
  • D’autre part, ce MWE illustre la manière dont ConTeXt parcourt sélectivement l’arbre XML. La racine <TEI> est associée à un setup xml:TEI qui décide explicitement quoi afficher et dans quel ordre : d’abord la strophe <lg type="stanza">, ensuite la liste d’entrées critiques <listApp type="commentary">, enfin la section bibliographique
    Pour chaque élément, on peut choisir de produire du texte, de créer une table, une liste, ou de déclencher des structures plus complexes (notes, index, etc.).
  • Dans cet exemple, chaque vers <l> contient deux segments <seg> : le texte latin (type="orig") et sa traduction française (type="trans"). Le numéro de vers n’est pas recompté côté ConTeXt : il est lu directement dans l’attribut n="1", n="2", etc. De même, l’attribut loc="#v1" des entrées d’apparat (<app>) est exploité pour rappeler le ou les vers concernés sous la forme « (v. 1) ». L’idée est de montrer comment tirer parti des identifiants et attributs TEI pour alimenter la mise en page, sans jamais « casser » le schéma XML.

À partir de ce canevas, on peut enrichir progressivement l’exemple : ajouter une numérotation continue pour des passages plus longs, distinguer plusieurs niveaux de notes (lexicales, historiques, textuelles), gérer de vraies références aux témoins (@wit) et, le cas échéant, basculer d’une mise en page en colonnes à une mise en page de type « édition de poche » simplement en changeant les setups ConTeXt.

Voici le code du fichier source (autonome, avec "buffer") :

[modifier | modifier le wikicode]
  • Vous remarquerez le caractère verbeux des différentes sections du préambule (la mécanique TEI-XML) et le caractère très concis (euphémisme ...) des commandes situées entre \starttext et \stoptext, puisque le code se borne à ceci :
\starttext
\section{Virgile, \italic{Énéide} I, 1–7}
\xmlprocessbuffer{main}{poem}{}
\stoptext
  • Les commentaires du code ConTeXt sont annoncés dans le code TeX par le symbole %.

Avertissement Avertissement

Attention ! Dans le code XML, le symbole % est inopérant : le commentaire y est encadré par quelque choe du type
<!-- 1. Poème : Virgile, Énéide I, 1–7 -->
.
% mwe-tei-xml-virgile-3cols-v10.tex
% TEI dans un buffer + apparat critique + bibliographie
% -------------------------------------------------------------
% MWE ConTeXt + TEI-XML
% - Texte de Virgile (Énéide I, 1–7)
% - Présentation en 3 colonnes : numéro de vers / latin / traduction
% - Apparatus critique (lemmes + commentaires) et bibliographie
% Ce fichier est pensé comme exemple pédagogique.
% -------------------------------------------------------------

\setuppapersize[A4][A4]% On a choisi la taille A4, qui peut être modifiée
\setupbodyfont[modern,11pt]% On peut choisir une autre police et modifier la taille 

% ==========================
%  XML : SETUPS GÉNÉRAUX
% ==========================
% On déclare un "profil" xml:main qui associe chaque élément TEI
% à un setup ConTeXt (xml:TEI, xml:stanza, xml:linerow, etc.).

\startxmlsetups xml:main
  % Racine TEI : point d'entrée principal
  \xmlsetsetup{#1}{TEI}{xml:TEI}
  % Strophe & lignes
  % <l> représente ici UNE ligne de vers contenant deux <seg> :
  %   - <seg type="orig"> : texte latin
  %   - <seg type="trans"> : traduction française
  \xmlsetsetup{#1}{l}{xml:line}
  \xmlsetsetup{#1}{seg}{xml:segtext}
  % Apparatus critique : <listApp>, <app>, <lem>, <rdg>, <note>, <ref>
  \xmlsetsetup{#1}{listApp}{xml:listApp}
  \xmlsetsetup{#1}{app}{xml:app}
  \xmlsetsetup{#1}{lem}{xml:lem}
  \xmlsetsetup{#1}{rdg}{xml:rdg}
  \xmlsetsetup{#1}{note}{xml:note}
  \xmlsetsetup{#1}{ref}{xml:ref}

  % Bibliographie : <div type="bibliography">, <listBibl>, <bibl>, <title>
  \xmlsetsetup{#1}{div}{xml:div}
  \xmlsetsetup{#1}{listBibl}{xml:listBibl}
  \xmlsetsetup{#1}{bibl}{xml:bibl}
  \xmlsetsetup{#1}{title}{xml:title}
\stopxmlsetups

% On enregistre ce profil : il sera utilisé par \xmlprocessbuffer.
\xmlregistersetup{xml:main}

% ==========================
%  RACINE TEI : ORCHESTREUR
% ==========================
% xml:TEI orchestre la lecture du document :
%   1) texte (strophe) -> tableau 3 colonnes
%   2) apparatus critique (listApp)
%   3) bibliographie (back/div)

\startxmlsetups xml:TEI
  % 1) Strophe (texte + traduction) en tableau 3 colonnes
  \xmlcommand{#1}{text/body/lg[@type='stanza']}{xml:stanza}
  % 2) Apparatus critique
  \xmlcommand{#1}{text/body/listApp[@type='commentary']}{xml:listApp}
  % 3) Bibliographie
  \xmlcommand{#1}{text/back/div[@type='bibliography']}{xml:div}
\stopxmlsetups

% ==========================
%  STROPHE : TABLEAU 3 COLONNES
% ==========================
% xml:stanza construit un tableau  chaque <l> devient une ligne :
%   - colonne 1 : numéro de vers (attribut @n de <l>)
%   - colonne 2 : texte latin (seg[@type='orig'])
%   - colonne 3 : traduction (seg[@type='trans'])

\startxmlsetups xml:stanza
  \starttabulate[|c|p(5cm)|p(8cm)|]
    \NC \bf l. \NC \bf Latin \NC \bf Traduction \NC\NR
    \HL
    % On parcourt chaque <l> de la strophe :
    \xmlcommand{#1}{./l}{xml:linerow}
  \stoptabulate
  \blank[big]
\stopxmlsetups

% Chaque <l> produit UNE ligne du tableau.
% On lit le numéro de vers directement dans @n (n="1", "2", etc.).

\startxmlsetups xml:linerow
  % Numéro de vers : pris dans l'attribut n="1", "2", ...
  \NC \xmlatt{#1}{n}%
  % Texte latin (seg type="orig")
  \NC \xmlcommand{#1}{seg[@type='orig']}{xml:segtext}%
  % Traduction française (seg type="trans"), avec un léger décalage
  % pour marquer la séparation visuelle entre colonnes.
  \NC \quad \xmlcommand{#1}{seg[@type='trans']}{xml:segtext}%
  \NC\NR
\stopxmlsetups

% xml:segtext : imprimé tel quel (contenu textuel du <seg>).

\startxmlsetups xml:segtext
  \xmltext{#1}{.}
\stopxmlsetups

% ==========================
%  PETIT OUTIL : Rappel du vers à partir de @loc
% ==========================
% Dans l'apparatus, chaque <app> a un attribut loc="#v1", "#v3", etc.
% On veut l'afficher comme : "(v. 1)", "(v. 3)", etc.
%
% loc="#v1" -> on enlève le "#v" pour ne garder que "1".
% On le fait avec un petit jeu de macros TeX.

% \StripHashV prend une chaîne de la forme "#v1" et renvoie "1".
\def\StripHashV#1v#2\relax{#2}

% \VerseNumberFromLoc applique \StripHashV à une chaîne donnée.
\def\VerseNumberFromLoc#1{%
  \edef\temp{#1}% on fige l'argument dans \temp
  \expandafter\StripHashV\temp\relax
}

% \VerseRef{#1} produit "(v. 1)" à partir de l'attribut loc du <app>.
\def\VerseRef#1{%
  (v.~\VerseNumberFromLoc{\xmlatt{#1}{loc}})%
}

% ==========================
%  APPARAT CRITIQUE
% ==========================
% On présente ici les <app> comme une liste numérotée, sous le titre
% "Notes et références". Chaque entrée rappelle :
%   - le vers concerné : (v. 1)
%   - le lemme en gras
%   - la lecture / remarque (rdg + note)

\startxmlsetups xml:listApp
  \blank[2*big]
  \subsection{Notes et références}
  \blank[medium]
  \startitemize[n]
    \xmlcommand{#1}{app}{xml:app}
  \stopitemize
\stopxmlsetups
\startxmlsetups xml:app
  % \VerseRef{#1} -> (v. 1), (v. 3), etc., à partir de @loc="#v1", "#v3"...
  \item \VerseRef{#1} {\bf \xmltext{#1}{lem}. }%
  \xmlcommand{#1}{rdg}{xml:rdg}%
  \xmlcommand{#1}{note}{xml:note}%
\stopxmlsetups
\startxmlsetups xml:lem
  \xmltext{#1}{.}
\stopxmlsetups
\startxmlsetups xml:rdg
  \xmltext{#1}{.}\par
\stopxmlsetups
\startxmlsetups xml:note
  \xmltext{#1}{.}\par
\stopxmlsetups
\startxmlsetups xml:ref
  \xmltext{#1}{.}
\stopxmlsetups

% ==========================
%  BIBLIOGRAPHIE
% ==========================
% On lit <div type="bibliography">, dont le contenu est :
%   <head>Bibliographie</head>
%   <listBibl> ... </listBibl>

\startxmlsetups xml:div
  \blank[2*big]
  {\bf \xmltext{#1}{head}}\par
  \blank[medium]
  \xmlcommand{#1}{listBibl}{xml:listBibl}
\stopxmlsetups
\startxmlsetups xml:listBibl
  \startitemize
    \xmlcommand{#1}{bibl}{xml:bibl}
  \stopitemize
\stopxmlsetups
\startxmlsetups xml:bibl
  \item \xmlflush{#1}
\stopxmlsetups
% Titres d’œuvres en italiques : <title>...</title>
\startxmlsetups xml:title
  \italic{\xmltext{#1}{.}}
\stopxmlsetups
% ==========================
%  BUFFER TEI : CONTENU XML
% ==========================
% On place ici le TEI complet dans un buffer nommé "poem".
% Dans un vrai projet, ce contenu viendrait plutôt d'un fichier externe.
% Ici on utilise la mémoire tampon pour ne travailler que sur un seul fichier
\startbuffer[poem]
<?xml version="1.0" encoding="UTF-8"?>
<TEI>
  <text>
    <body>
      <!-- 1. Poème : Virgile, Énéide I, 1–7 -->
      <!-- Chaque <l> porte un xml:id (pour les renvois) et un n (numéro de vers). -->
      <lg type="stanza">
        <l xml:id="v1" n="1">
          <seg type="orig">Arma virumque cano, Troiae qui primus ab oris</seg>
          <seg type="trans">Je chante les armes et l’homme, qui le premier, des rivages de Troie,</seg>
        </l>
        <l xml:id="v2" n="2">
          <seg type="orig">Italiam, fato profugus, Laviniaque venit</seg>
          <seg type="trans">chassé par le destin, vint en Italie et aux rivages de Lavinium,</seg>
        </l>
        <l xml:id="v3" n="3">
          <seg type="orig">litora, multum ille et terris iactatus et alto</seg>
          <seg type="trans">beaucoup ballotté sur les terres et sur la haute mer,</seg>
        </l>
        <l xml:id="v4" n="4">
          <seg type="orig">vi superum saevae memorem Iunonis ob iram;</seg>
          <seg type="trans">par la violence des dieux d’en haut, à cause du courroux de Junon la cruelle,</seg>
        </l>
        <l xml:id="v5" n="5">
          <seg type="orig">multa quoque et bello passus, dum conderet urbem</seg>
          <seg type="trans">ayant beaucoup souffert aussi dans la guerre, jusqu’à fonder une cité</seg>
        </l>
        <l xml:id="v6" n="6">
          <seg type="orig">inferretque deos Latio, genus unde Latinum,</seg>
          <seg type="trans">et porter ses dieux au Latium, d’où est issue la race latine,</seg>
        </l>
        <l xml:id="v7" n="7">
          <seg type="orig">Albanique patres, atque altae moenia Romae.</seg>
          <seg type="trans">les pères Albains et les hautes murailles de Rome.</seg>
        </l>
      </lg>
      <!-- 2. Liste de témoins (non exploitée dans la mise en page pour l’instant) -->
      <listWit>
        <witness xml:id="w-servius">Servius, commentaire antique</witness>
        <witness xml:id="w-horsfall">Nicholas Horsfall, commentaire moderne</witness>
        <witness xml:id="w-conte">G. B. Conte, histoire de la littérature latine</witness>
      </listWit>
      <!-- 3. Apparatus critique de type "commentary" -->
      <listApp type="commentary">
        <app xml:id="app-arma" loc="#v1">
          <lem>Arma virumque</lem>
          <rdg wit="#w-servius #w-conte">
            Proème programmatique : conjonction des « armes » et de l’ « homme », 
            qui fixe le cadre épique romain (guerre + héros).
          </rdg>
          <note type="commentary">
            Sur la portée programmatique de ce vers, voir 
            <ref target="#b-horsfall">Horsfall 1995</ref>, p. 1–10, 
            et <ref target="#b-conte">Conte</ref>, p. 356–360.
          </note>
        </app>
        <app xml:id="app-troiae" loc="#v1">
          <lem>Troiae  ab oris</lem>
          <rdg wit="#w-servius #w-horsfall">
            Point de départ géographique et mémoriel : l’exil troyen fonde la
            continuité entre Troie et Rome.
          </rdg>
          <note type="commentary">
            Le motif de l’exilé fondateur est développé par 
            <ref target="#b-servius">Servius</ref>, ad loc., 
            et discuté par <ref target="#b-horsfall">Horsfall 1995</ref>, p. 12–18.
          </note>
        </app>
        <app xml:id="app-multum" loc="#v3">
          <lem>multum ille et terris iactatus et alto</lem>
          <rdg wit="#w-conte">
            Insistance sur l’errance : écho assumé à la figure d’Ulysse, mais
            infléchi vers une lecture politique de l’histoire romaine.
          </rdg>
          <note type="commentary">
            Pour le parallèle avec l’<title>Odyssée</title> et la réécriture
            virgilienne, cf. <ref target="#b-conte">Conte</ref>, p. 346–352.
          </note>
        </app>
      </listApp>
    </body>
    <!-- 4. Bibliographie en fin de document -->
    <back>
      <div type="bibliography">
        <head>Bibliographie</head>
        <listBibl>
          <bibl xml:id="b-servius">
            Servius, <title>In Vergilii Aeneidem commentarii</title>, 
            éd. G. Thilo  H. Hagen, Leipzig, Teubner, 1881–1902.
          </bibl>
          <bibl xml:id="b-horsfall">
            Nicholas Horsfall, <title>Aeneid 1</title>, 
            Leiden  New York  Cologne, Brill, 1995.
          </bibl>
          <bibl xml:id="b-conte">
            Gian Biagio Conte, <title>Latin Literature: A History</title>, 
            Baltimore, Johns Hopkins University Press, 1994.
          </bibl>
          <bibl xml:id="b-virg-bude">
            Virgile, <title>Énéide, Livre I</title>, 
            trad. fr. et commentaire par J. Perret,
            Collection des Universités de France  Budé »),
            Paris, Les Belles Lettres, 2023 (1977).
          </bibl>
          </listBibl>
      </div>
    </back>
  </text>
</TEI>
\stopbuffer
% ==========================
%  DOCUMENT
% ==========================
% Rappel : Le document principal se contente de :
%   - poser un titre,
%   - appeler \xmlprocessbuffer avec le profil xml:main
%     et le buffer "poem".
\starttext
\section{Virgile, \italic{Énéide} I, 1–7}
\xmlprocessbuffer{main}{poem}{}
\stoptext

Illustration A — Les vers de l'Énéide de Virgile sur une seule page : le code ci-dessus permet d'afficher 3 colonnes pour les vers de Virgile :

  • Colonne 1 : les n° de vers
  • Colonne 2 : le texte latin
  • Colonne 3 : la traduction

En bas :

  • les lemmes (avec le n° du vers)
  • la bibliographie
Illustration 1 : Traitement en XML-TEI et ConTeXt 3 colonnes, lemmes, bibliographie

Texte plus long : TEI-XML avec buffer traité par ConTeXt

[modifier | modifier le wikicode]

Illustration B — La même chose que l'illustration A, mais avec des vers de l'Énéide de Virgile supplémentaires, et des commentaires. L'ensemble est imprimé sur 3 pages (voir ci-dessous, après le code).

Exemple complet : Virgile, Énéide I (v09)

Ce document illustre la composition avancée en TEI-XML avec ConTeXt à partir d’un fichier unique contenant :

  • le texte poétique en latin ;
  • la traduction française alignée ;
  • les numéros de vers ;
  • un apparat critique structuré ;
  • une bibliographie ;
  • la lemmatisation linguistique ;
  • la mise en pages recto/verso ;
  • des notes sur plusieurs niveaux éditoriaux.

Les deux premières pages montrent, à partir d’un même fichier XML, une triple structure en colonnes (numéro du vers / texte latin / traduction), tandis que les pages suivantes présentent :

  • l’apparat philologique, généré automatiquement ;
  • la lemmatisation, rejetée en notes de bas de page ;
  • la bibliographie finale.

L’objectif est de démontrer comment ConTeXt peut :

  • lire directement les structures TEI-XML ;
  • interpréter les balises ;
  • séparer texte, structure et mise en page ;
  • générer plusieurs artefacts éditoriaux à partir d’un même flux ;
  • traiter de nombreuses couches critiques sans rupture typographique.

Cet exemple constitue un modèle reproductible pour des éditions numériques savantes (poésie, manuscrits, traductions, commentaires, variantes textuelles)


  • Voici maintenant le code qui permet de produire les pages que vous trouverez après :
% Le code commence ici, même si les lignes suivantes sont des % % commentaires
% mwe-tei-xml-virgile-recto-verso-notes-v09.tex
% =========================================================
%  MWE ConTeXt + TEI-XML : Virgile, Énéide I
% =================================================
% mwe-tei-xml-virgile-recto-verso-notes-v09.tex
% =========================================================
%  MWE ConTeXt + TEI-XML : Virgile, Énéide I
%  - Page 1 : v. 1–7 en 3 colonnes + apparat "commentary"
%  - Page 2 : v. 12–22 en 3 colonnes + bloc de lemmatisation
%  - Page 3 (éventuelle) : fin lemmes + bibliographie
%
%  Objectif pédagogique :
%    - Montrer comment un même TEI sert :
%        * à composer le texte (deux passages en colonnes)
%        * à produire un apparat de commentaire (listApp[@type='commentary'])
%        * à extraire une lemmatisation structurée (listApp[@type='lemma'])
%    - Séparer nettement structure (TEI) et mise en page (ConTeXt).
% =========================================================

\setuppapersize[A4][A4]
\setupbodyfont[modern,10pt] % un poil plus serré pour limiter le nb de pages

% ---------------------------------------------------------
% Pagination : recto/verso, numéro en pied de page
% ---------------------------------------------------------
\setuppagenumbering[
  alternative=doublesided,
  location={footer,middle}
]

% ---------------------------------------------------------
% En-têtes recto / verso
%   ordre : [odd-left][odd-right][even-left][even-right]
% ---------------------------------------------------------
\setupheadertexts
  [\sc Commentaires de l'Énéide de Virgile][]
  [][\italic{TEI-XML avec ConTeXt}]
\setupheader[state=start]

% ---------------------------------------------------------
% Pied de page : texte + numéro de page
% ---------------------------------------------------------
\setupfootertexts
  [{\em Document composé avec \ConTeXt\  \pagenumber}]

% ---------------------------------------------------------
% Tableau : 3 colonnes de contenu + 1 gouttière vide
%   schéma : | numéro | latin | (gouttière vide) | traduction |
% ---------------------------------------------------------
\setuptabulate[distance=0.5em]

% Sections sans numérotation
\setuphead[section][number=no]

% =========================================================
%  SETUPS XML GÉNÉRAUX
% =========================================================

\startxmlsetups xml:main
  % Racine
  \xmlsetsetup{#1}{TEI}{xml:TEI}

  % Passages
  \xmlsetsetup{#1}{div[@type='passage' and @n='1-7']}{xml:passage-commentary}
  \xmlsetsetup{#1}{div[@type='passage' and @n='12-22']}{xml:passage-lemma}

  % Strophes & vers
  \xmlsetsetup{#1}{lg}{xml:stanza}
  \xmlsetsetup{#1}{l}{xml:linerow}
  \xmlsetsetup{#1}{seg}{xml:segtext}

  % Apparats
  \xmlsetsetup{#1}{listApp[@type='commentary']}{xml:listApp-commentary}
  \xmlsetsetup{#1}{listApp[@type='lemma']}{xml:listApp-lemma}
  \xmlsetsetup{#1}{lem}{xml:lem}
  \xmlsetsetup{#1}{rdg}{xml:rdg}
  \xmlsetsetup{#1}{note}{xml:note}
  \xmlsetsetup{#1}{ref}{xml:ref}

  % Bibliographie
  \xmlsetsetup{#1}{div[@type='bibliography']}{xml:div-biblio}
  \xmlsetsetup{#1}{listBibl}{xml:listBibl}
  \xmlsetsetup{#1}{bibl}{xml:bibl}
  \xmlsetsetup{#1}{title}{xml:title}
\stopxmlsetups

\xmlregistersetup{xml:main}

% =========================================================
%  RACINE TEI : enchaînement des blocs
% =========================================================

\startxmlsetups xml:TEI
  % Passage 1 : v. 1–7 + apparat "commentary"
  \xmlcommand{#1}{text/body/div[@type='passage' and @n='1-7']}{xml:passage-commentary}
  \blank[2*big]

  % Passage 2 : v. 12–22 + lemmatisation
  \xmlcommand{#1}{text/body/div[@type='passage' and @n='12-22']}{xml:passage-lemma}
  \blank[2*big]

  % Bibliographie
  \xmlcommand{#1}{text/back/div[@type='bibliography']}{xml:div-biblio}
\stopxmlsetups

% =========================================================
%  STROPHE EN 3 COLONNES (les deux passages)
% =========================================================

\startxmlsetups xml:stanza
  \starttabulate[|c|p(4.2cm)|p(1.8cm)|p(6.0cm)|]
    \NC \bf n\high{o} \NC \bf Latin \NC \NC \bf Traduction \NC\NR
    \HL
    \xmlcommand{#1}{./l}{xml:linerow}
  \stoptabulate
  \blank[big]
\stopxmlsetups

\startxmlsetups xml:linerow
  \NC \xmlatt{#1}{n}%
  \NC \xmlcommand{#1}{seg[@type='orig']}{xml:segtext}%
  \NC % gouttière vide
  \NC \xmlcommand{#1}{seg[@type='trans']}{xml:segtext}%
  \NC\NR
\stopxmlsetups

\startxmlsetups xml:segtext
  \xmltext{#1}{.}
\stopxmlsetups

% =========================================================
%  OUTIL : RAPPEL DU VERS À PARTIR DE @loc
% =========================================================

\def\StripHashV#1v#2\relax{#2}
\def\VerseNumberFromLoc#1{%
  \edef\temp{#1}%
  \expandafter\StripHashV\temp\relax
}
\def\VerseRef#1{%
  (v.~\VerseNumberFromLoc{\xmlatt{#1}{loc}})%
}

% =========================================================
%  PASSAGE 1 : TEXTE + APPARAT "COMMENTARY"
% =========================================================

\startxmlsetups xml:passage-commentary
  \section{Virgile, \italic{Énéide} I, 1–7}
  \xmlcommand{#1}{lg}{xml:stanza}
  \xmlcommand{#1}{listApp[@type='commentary']}{xml:listApp-commentary}
\stopxmlsetups

\startxmlsetups xml:listApp-commentary
  \blank[big]
  \subsection{Notes et références (v. 1–7)}
  \blank[small]
  \startitemize[n]
    \xmlcommand{#1}{app}{xml:app-commentary}
  \stopitemize
\stopxmlsetups

\startxmlsetups xml:app-commentary
  \item \VerseRef{#1}\quad {\bf \xmltext{#1}{lem}.}\par
  \xmlcommand{#1}{rdg}{xml:rdg}\par
  \xmlcommand{#1}{note}{xml:note}\par
\stopxmlsetups

\startxmlsetups xml:rdg
  \xmltext{#1}{.}
\stopxmlsetups

\startxmlsetups xml:note
  \xmltext{#1}{.}
\stopxmlsetups

\startxmlsetups xml:ref
  \xmltext{#1}{.}
\stopxmlsetups

\startxmlsetups xml:lem
  \xmltext{#1}{.}
\stopxmlsetups

% =========================================================
%  PASSAGE 2 : TEXTE + LEMMATISATION EN BLOC
% =========================================================

\startxmlsetups xml:passage-lemma
  \section{Virgile, \italic{Énéide} I, 12–22}
  % 1) texte en colonnes
  \xmlcommand{#1}{lg}{xml:stanza}
  % 2) bloc de lemmatisation (compact) sous le texte
  \xmlcommand{#1}{listApp[@type='lemma']}{xml:listApp-lemma}
\stopxmlsetups

\startxmlsetups xml:listApp-lemma
  \blank[big]
  \subsection{Lemmatisation (v. 12–22)}
  \blank[small]
  {\switchtobodyfont[9pt]%
    \startitemize[n,packed]
      \xmlcommand{#1}{app}{xml:lemmaitem}
    \stopitemize
  }
\stopxmlsetups

\startxmlsetups xml:lemmaitem
  % Un item par lemme : lemme latin bien mis en évidence
  \item \VerseRef{#1}\quad {\bf\italic{\xmltext{#1}{lem}}}\par
  \xmlcommand{#1}{note}{xml:lemmanote}
\stopxmlsetups

\startxmlsetups xml:lemmanote
  % Notes en romain, avec une petite étiquette selon @type
  \edef\notetype{\xmlatt{#1}{type}}%
  \begingroup
    \switchtobodyfont[9pt]%
    \doif{\notetype}{expl}{{\sc [expl.]} }%
    \doif{\notetype}{trans}{{\sc [transl.]} }%
    \doif{\notetype}{crit}{{\sc [crit.]} }%
    \xmltext{#1}{.}\par
  \endgroup
\stopxmlsetups

% =========================================================
%  BIBLIOGRAPHIE
% =========================================================

\startxmlsetups xml:div-biblio
  \section{Bibliographie}
  \blank[small]
  \xmlcommand{#1}{listBibl}{xml:listBibl}
\stopxmlsetups

\startxmlsetups xml:listBibl
  {\switchtobodyfont[9pt]%
    \startitemize
      \xmlcommand{#1}{bibl}{xml:bibl}
    \stopitemize
  }
\stopxmlsetups

\startxmlsetups xml:bibl
  \item \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:title
  \italic{\xmltext{#1}{.}}
\stopxmlsetups

% =========================================================
%  BUFFER TEI : 2 PASSAGES + APPARATS + BIBLIO
% =========================================================

\startbuffer[poem]
<TEI>
  <text>
    <body>

      <!-- Passage 1 : Énéide I, 1–7, avec apparat de commentaire -->
      <div type="passage" n="1-7">
        <lg type="stanza">

          <l xml:id="v1" n="1">
            <seg type="orig">Arma virumque cano, Troiae qui primus ab oris</seg>
            <seg type="trans">Je chante les armes et l’homme, qui le premier, des rivages de Troie,</seg>
          </l>

          <l xml:id="v2" n="2">
            <seg type="orig">Italiam, fato profugus, Laviniaque venit</seg>
            <seg type="trans">chassé par le destin, vint en Italie et aux rivages de Lavinium,</seg>
          </l>

          <l xml:id="v3" n="3">
            <seg type="orig">litora, multum ille et terris iactatus et alto</seg>
            <seg type="trans">beaucoup ballotté sur les terres et sur la haute mer,</seg>
          </l>

          <l xml:id="v4" n="4">
            <seg type="orig">vi superum saevae memorem Iunonis ob iram;</seg>
            <seg type="trans">par la violence des dieux d’en haut, à cause du courroux de Junon la cruelle,</seg>
          </l>

          <l xml:id="v5" n="5">
            <seg type="orig">multa quoque et bello passus, dum conderet urbem</seg>
            <seg type="trans">ayant beaucoup souffert aussi dans la guerre, jusqu’à fonder une cité</seg>
          </l>

          <l xml:id="v6" n="6">
            <seg type="orig">inferretque deos Latio, genus unde Latinum,</seg>
            <seg type="trans">et porter ses dieux au Latium, d’où est issue la race latine,</seg>
          </l>

          <l xml:id="v7" n="7">
            <seg type="orig">Albanique patres, atque altae moenia Romae.</seg>
            <seg type="trans">les pères Albains et les hautes murailles de Rome.</seg>
          </l>

        </lg>

        <listWit>
          <witness xml:id="w-servius">Servius, commentaire antique</witness>
          <witness xml:id="w-horsfall">Nicholas Horsfall, commentaire moderne</witness>
          <witness xml:id="w-conte">G. B. Conte, histoire de la littérature latine</witness>
        </listWit>

        <listApp type="commentary">

          <app xml:id="app-arma" loc="#v1">
            <lem>Arma virumque</lem>
            <rdg wit="#w-servius #w-conte">
              Proème programmatique : conjonction des « armes » et de l’« homme »,
              qui fixe le cadre épique romain (guerre + héros).
            </rdg>
            <note type="commentary">
              Sur la portée programmatique de ce vers, voir
              <ref target="#b-horsfall">Horsfall 1995</ref>, p. 1–10,
              et <ref target="#b-conte">Conte</ref>, p. 356–360.
            </note>
          </app>

          <app xml:id="app-troiae" loc="#v1">
            <lem>Troiae  ab oris</lem>
            <rdg wit="#w-servius #w-horsfall">
              Point de départ géographique et mémoriel : l’exil troyen fonde la
              continuité entre Troie et Rome.
            </rdg>
            <note type="commentary">
              Le motif de l’exilé fondateur est développé par
              <ref target="#b-servius">Servius</ref>, ad loc.,
              et discuté par <ref target="#b-horsfall">Horsfall 1995</ref>, p. 12–18.
            </note>
          </app>

          <app xml:id="app-multum" loc="#v3">
            <lem>multum ille et terris iactatus et alto</lem>
            <rdg wit="#w-conte">
              Insistance sur l’errance : écho assumé à la figure d’Ulysse, mais
              infléchi vers une lecture politique de l’histoire romaine.
            </rdg>
            <note type="commentary">
              Pour le parallèle avec l’<title>Odyssée</title> et la réécriture
              virgilienne, cf. <ref target="#b-conte">Conte</ref>, p. 346–352.
            </note>
          </app>

        </listApp>
      </div>

      <!-- Passage 2 : Énéide I, 12–22, avec apparat de lemmatisation -->
      <div type="passage" n="12-22">
        <lg type="stanza">

          <l xml:id="v12" n="12">
            <seg type="orig">Vrbs antiqua fuit, Tyrii tenuere coloni,</seg>
            <seg type="trans">Carthage, une ville ancienne, colonie tyrienne,</seg>
          </l>

          <l xml:id="v13" n="13">
            <seg type="orig">Karthago, Italiam contra Tiberinaque longe ostia,</seg>
            <seg type="trans">s’élevait face à l'Italie et aux lointaines bouches du Tibre ;</seg>
          </l>

          <l xml:id="v14" n="14">
            <seg type="orig">diues opum studiisque asperrima belli ;</seg>
            <seg type="trans">elle était riche et farouchement passionnée pour la guerre.</seg>
          </l>

          <l xml:id="v15" n="15">
            <seg type="orig">quam Iuno fertur terris magis omnibus unam</seg>
            <seg type="trans">Junon, dit-on, la chérissait plus que toute autre cité,</seg>
          </l>

          <l xml:id="v16" n="16">
            <seg type="orig">posthabita coluisse Samo; hic illius arma,</seg>
            <seg type="trans">plus même que Samos.  étaient ses armes,</seg>
          </l>

          <l xml:id="v17" n="17">
            <seg type="orig">hic currus fuit; hoc regnum dea gentibus esse,</seg>
            <seg type="trans"> était son char. Pour la déesse, cette ville devait régner sur les nations</seg>
          </l>

          <l xml:id="v18" n="18">
            <seg type="orig">si qua fata sinant, iam tum tenditque fouetque.</seg>
            <seg type="trans">si les destins y consentent : tel est désormais son but, l’objet de ses soins.</seg>
          </l>

          <l xml:id="v19" n="19">
            <seg type="orig">Progeniem sed enim Troiano a sanguine duci</seg>
            <seg type="trans">Mais elle avait appris que du sang troyen naissait une race</seg>
          </l>

          <l xml:id="v20" n="20">
            <seg type="orig">audierat, Tyrias olim quae uerteret arces;</seg>
            <seg type="trans">qui un jour renverserait les forteresses tyriennes ;</seg>
          </l>

          <l xml:id="v21" n="21">
            <seg type="orig">hinc populum late regem belloque superbum</seg>
            <seg type="trans">qu’un peuple, roi d’un vaste empire, intraitable à la guerre,</seg>
          </l>

          <l xml:id="v22" n="22">
            <seg type="orig">uenturum excidio Libyae : sic uoluere Parcas.</seg>
            <seg type="trans">en sortirait pour la perte de la Libye : ainsi le filaient les Parques.</seg>
          </l>

        </lg>

        <listApp type="lemma">

          <app xml:id="lem-urbs" loc="#v12">
            <lem ana="urbs">Vrbs antiqua</lem>
            <note type="expl">
              Ville ancienne, antérieure au récit : souligne le prestige et la profondeur
              historique de Carthage.
            </note>
          </app>

          <app xml:id="lem-tyrii" loc="#v12">
            <lem ana="Tyrii">Tyrii tenuere coloni</lem>
            <note type="expl">
              Colonisation phénicienne : la fondation tyrienne inscrit Carthage dans un
              réseau commercial et maritime oriental.
            </note>
          </app>

          <app xml:id="lem-karthago" loc="#v13">
            <lem ana="Karthago">Karthago, Italiam contra Tiberinaque longe ostia</lem>
            <note type="expl">
              La position géographique, « en face de l’Italie », anticipe la rivalité
              politique et militaire entre Rome et Carthage.
            </note>
          </app>

          <app xml:id="lem-dives" loc="#v14">
            <lem ana="dives">diues opum</lem>
            <note type="expl">
              « riche en ressources » : met en avant la prospérité matérielle et la
              puissance économique de la cité.
            </note>
          </app>

          <app xml:id="lem-asperrima" loc="#v14">
            <lem ana="asper">studiisque asperrima belli</lem>
            <note type="expl">
              « extrêmement acharnée pour la guerre » : association forte entre richesse
              et agressivité militaire, annonçant les guerres puniques.
            </note>
          </app>

          <app xml:id="lem-iuno" loc="#v15">
            <lem ana="Iuno">Iuno</lem>
            <note type="expl">
              Junon, épouse de Jupiter, protectrice traditionnelle de certaines cités
              grecques ; ici, son attachement à Carthage explique son hostilité durable
              envers les Troyens et leurs descendants.
            </note>
          </app>

          <app xml:id="lem-fertur" loc="#v15">
            <lem ana="fero">fertur</lem>
            <note type="expl">
              Forme impersonnelle : « on dit que », « il est rapporté que »  marque une
              tradition reçue plutôt qu’un fait historiquement vérifiable.
            </note>
          </app>

          <app xml:id="lem-samo" loc="#v16">
            <lem ana="Samos">posthabita coluisse Samo</lem>
            <note type="expl">
              Samos est un autre grand centre du culte d’Héra/Junon ; préférer Carthage
              à Samos renforce la singularité de la faveur divine.
            </note>
          </app>

          <app xml:id="lem-regnum" loc="#v17">
            <lem ana="regnum">hoc regnum dea gentibus esse</lem>
            <note type="expl">
              Carthage est pensée comme un « royaume destiné aux nations » : anticipation
              d’un pouvoir impérial à vocation universelle.
            </note>
          </app>

          <app xml:id="lem-fata" loc="#v18">
            <lem ana="fatum">si qua fata sinant</lem>
            <note type="expl">
              Le souhait de Junon se heurte aux « destins » : tension entre volonté
              divine particulière et ordre général du Fatum.
            </note>
          </app>

          <app xml:id="lem-progeniem" loc="#v19">
            <lem ana="progenies">Progeniem  a sanguine duci</lem>
            <note type="expl">
              Allusion aux futurs Romains, descendants d’Énée : la lignée troyenne
              est appelée à se développer en Italie.
            </note>
          </app>

          <app xml:id="lem-arces" loc="#v20">
            <lem ana="arx">Tyrias  uerteret arces</lem>
            <note type="expl">
              L’expression annonce symboliquement la chute des forteresses liées à Tyr,
              donc la défaite de Carthage face à Rome.
            </note>
          </app>

          <app xml:id="lem-populus" loc="#v21">
            <lem ana="populus">populum late regem belloque superbum</lem>
            <note type="expl">
              Portrait programmatique des Romains : peuple souverain sur une vaste
              étendue, orgueilleux dans la guerre.
            </note>
          </app>

          <app xml:id="lem-libya" loc="#v22">
            <lem ana="Libya">excidio Libyae</lem>
            <note type="expl">
              La « ruine de la Libye » désigne la chute de Carthage ; la
              formulation condense en une formule la destinée de la cité.
            </note>
          </app>

          <app xml:id="lem-parcae" loc="#v22">
            <lem ana="Parcae">sic uoluere Parcae</lem>
            <note type="expl">
              Les Parques garantissent la réalisation du projet : la narration est
              placée sous le signe d’un avenir fixé, malgré la résistance des dieux.
            </note>
          </app>

        </listApp>
      </div>

    </body>

    <back>
      <div type="bibliography">
        <head>Bibliographie</head>
        <listBibl>
          <bibl xml:id="b-servius">
            Servius, <title>In Vergilii Aeneidem commentarii</title>,
            éd. G. Thilo  H. Hagen, Leipzig, Teubner, 1881–1902.
          </bibl>
          <bibl xml:id="b-horsfall">
            Nicholas Horsfall, <title>Aeneid 1</title>,
            Leiden  New York  Cologne, Brill, 1995.
          </bibl>
          <bibl xml:id="b-conte">
            Gian Biagio Conte, <title>Latin Literature: A History</title>,
            Baltimore, Johns Hopkins University Press, 1994.
          </bibl>
          <bibl xml:id="b-virg-bude">
            Virgile, <title>Énéide, Livre I</title>,
            trad. fr. et commentaire par J. Perret,
            Collection des Universités de France  Budé »),
            Paris, Les Belles Lettres, 2023 (1977).
          </bibl>
        </listBibl>
      </div>
    </back>

  </text>
</TEI>
\stopbuffer

% ================================================
%  DOCUMENT
% ================================================

\starttext

\xmlprocessbuffer{main}{poem}{}

\stoptext
% FIN DU CODE ConTeXt

Ilustrations Virgile (TEI-XML dans ConTeXt)

[modifier | modifier le wikicode]


Figure 1 : XML-TEI colonnes avec lemmatisation
Recto


Figure 2 : XML-TEI colonnes de texte avec lemmatisation
Verso


Figure 3 : XML-TEI colonnes de texte avec lemmatisation (recto 2)
Recto (suite)

 Page précédente : Versification et poésie

Part. III, ch. 9  •  TEI-XML et poésie  •  Sommaire

Page suivante : Apparat critique à plusieurs niveaux