Hi Hans !

Many thanks for your help and for the example you shared on the list. The method of placing the XML directly in a |\startbuffer...\stopbuffer| and then processing it with |\xmlprocessbuffer| had completely escaped me—it's a simple trick, but extremely robust and educational, especially for producing standalone MWEs. Using your skeleton as a basis, I was able to set up a working example (XML-TEI poem, original/translation in columns, line-by-line comments in the form of placeable notes), without any collisions with tables or footnote stacking. I am pasting the complete source file |.tex| below, which compiles as is; I will also integrate it as an MWE in ConTeXt Garden and in a French ConTeXt Wikibook I am working on, explicitly mentioning your approach.

Thank you again for this elegant and “ConTeXt-proof” solution !

Best regards,

JP

The MWE (1 PDF page) :

\setuppapersize[A4]

\setupbodyfont[Noto Serif,10pt] % Latin Modern (défaut), 10pt % choose a font



\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




Le 12/12/2025 à 10:01, Hans Hagen via ntg-context a écrit :
On 12/11/2025 9:01 PM, Jean-Pierre Delange via ntg-context wrote:

\startxmlsetups xml:comm
   \xmlfilter{#1}{./l}{\footnote{\xmltext{##1}}}
\stopxmlsetups

you have a double # here

I attached a solution.

Hans


-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist :[email protected] 
/https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  :https://www.pragma-ade.nl /https://context.aanhet.net (mirror)
archive  :https://github.com/contextgarden/context
wiki     :https://wiki.contextgarden.net
___________________________________________________________________________________
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : [email protected] / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

Reply via email to