Hi Pablo,

I don’t claim to have a definitive answer here — I’ve simply been experimenting over the past months, trying to understand what is structurally involved, and I thought a small MWE prototype might help clarify things.

What I currently have is very simple. In the running text, each annotated word sends its information into one of several note channels (for example: /critical/, /explanatory/, /translation/). These notes are not printed immediately as footnotes; instead they are stored (|location=text|). At the end of the textual unit, they are printed under explicit headings:

 *

   Critique

 *

   Explicatif

 *

   Traduction

So the headings themselves are just empty containers: what fills them is whatever has been collected earlier via |\critnote|, |\explnote|, |\transnote| (or small wrapper macros around them).

Conceptually, this gives something like:

 *

   the main text = reading flow

 *

   several parallel annotation streams = editorial layers

 *

   a final “apparatus” that replays each stream separately

From there, moving toward a glossary seems to be only one extra step: instead of (or in addition to) sending content into notes, the same data can also be sent into a small Lua bucket (key → lemma + gloss), reset per block, and printed as a local vocabulary list. That gives a “collect → print → reset → repeat” pattern, close to the glossary developed by Steadman.

What strikes me, while experimenting, is the specific difficulty of /short textual units/ (chapters, sections, passages). In that case the glossary is not global by nature: it is local, temporary, and tightly coupled to the immediately preceding text. This feels quite different from classical registers, which assume long-range accumulation across a whole document. So my tentative impression (very provisional) is that these local reading aids solve a different problem than global indexes:

 *

   ordered by appearance,

 *

   scoped to a block,

 *

   frequently reset,

 *

   aimed at immediate pedagogical use.

Once this distinction is made, it becomes easier to see why standard registers don’t quite fit this use case, and why a lightweight Lua layer may help — though I’m still very much in exploration mode here.

See below the MWE file I’m playing with (I will deliver another MWE later with a glossary extracted with Lua code).

Best,
JP

% notes-critiques-example-v2.tex

% Grec 1 colonne — notes multi-niveaux stockées (location=text)

% puis imprimées sous rubriques via \placenotes


\mainlanguage[agr]

\setuppapersize[A4]


\definefontfamily[mainface][serif][Libertinus Serif]

\setupbodyfont[mainface,11pt]


\setuplayout[

topspace=1.5cm,

backspace=2cm,

width=middle,

header=1cm,

footer=1.2cm,

height=middle,

]


\setupalign[hz,hanging]

\setuptolerance[verytolerant]


% --- Trois séries de notes

\definenote[critnote]

\definenote[explnote]

\definenote[transnote]


% IMPORTANT : on STOCKE les notes au fil du texte (pas en bas de page)

% pour pouvoir les imprimer ensuite en fin d'unité.

\setupnote[critnote] [location=text, number=no, style=\tfxx]

\setupnote[explnote] [location=text, number=no, style=\tfxx]

\setupnote[transnote][location=text, number=no, style=\tfxx]


% --- Macros : forme (#1), lemme (#2), glose (#3)

\unexpanded\def\Gcrit#1#2#3{#1\critnote{\emph{#1} (\emph{#2}).~#3}}

\unexpanded\def\Gexpl#1#2#3{#1\explnote{\emph{#1} (\emph{#2}).~#3}}

\unexpanded\def\Gtrans#1#2#3{#1\transnote{\emph{#1} (\emph{#2}).~#3}}


% --- Apparat final (fin d'unité) : ICI les rubriques se remplissent

\unexpanded\def\ApparatNotes{%

\blank[big]\hrule\blank[small]

{\bf Critique}\par

\placenotes[critnote]

\blank[small]

{\bf Explicatif}\par

\placenotes[explnote]

\blank[small]

{\bf Traduction}\par

\placenotes[transnote]

}


\starttext


\chapter{Exemple — Rubriques "critique", "explicatif", "traduction"}


τὰ \Gexpl{ὁμώνυμα}{ὁμώνυμος}{Même nom, mais définition (λόγος) différente.}

λέγεται, ὅταν τὸ \Gexpl{ὄνομα}{ὄνομα}{Le “nom” au sens de signifiant commun.} μόνον κοινόν ᾖ,

ὁ δὲ τῆς \Gexpl{οὐσίας}{οὐσία}{Ici : “essence / être” selon le contexte ; terme philosophiquement chargé.}

\Gexpl{λόγος}{λόγος}{Souvent : formule définitionnelle (pas “raison” au sens moderne).}

ἕτερος.


\blank[line]


τὰ δὲ \Gexpl{συνώνυμα}{συνώνυμος}{Même nom et même définition ; opposition structurante avec ὁμώνυμα.}

ὧν καὶ τὸ ὄνομα κοινόν, καὶ ὁ τῆς οὐσίας λόγος ὁ αὐτός·

τὰ δὲ \Gexpl{παρώνυμα}{παρώνυμος}{Dérivés : mots formés à partir d’un autre (nom → adjectif, etc.).}

ἀπὸ τῶν ὀνομάτων μετωνομασμένα.


% --- Critique (leçon / édition)

\Gcrit{ἕτερος}{ἕτερος}{Variante de leçon selon les éditions : à harmoniser avec l’édition de référence.}

\Gcrit{μετωνομασμένα}{μετονομάζω}{Graphie/accents parfois divergents : vérifier la normalisation polytonique adoptée.}


% --- Traduction (français)

\Gtrans{ὁμώνυμα}{ὁμώνυμος}{Souvent “homonymes”, mais la logique est celle des “équivoques” (nom commun, définition différente).}

\Gtrans{λόγος}{λόγος}{Ici : “définition” ; ailleurs : “raison”, “discours”, “compte”.}

\Gtrans{παρώνυμα}{παρώνυμος}{“Paronymes” est technique ; “dérivés” est plus lisible selon le public.}


% --- Impression en fin d'unité : rubriques remplies

\ApparatNotes


\stoptext



Le 30/01/2026 à 18:45, Pablo Rodriguez via ntg-context a écrit :
On 1/30/26 10:47, Mikael Sundqvist wrote:
Hi Pablo,

Not sure I understand what you are after with the notes. Does this do
what you want?
Hi Mikael,

I‘m afraid I only get the same as with my sample.

I would like to have invidiual notes synced, such as with these body texts:

     \definecolumnset
       [parallel]
       [n=1,
        align={lesswidows,lessclubs,lessbroken,lessorphans}]

     \definesubcolumnset[parallel][L][1]
     \definesubcolumnset[parallel][R][2]

     \startsetups balance:example
         \balancetopskip    \strutht
         \balancebottomskip \strutdp
     \stopsetups

     \starttext
     \page[even]
     \startcolumnset[parallel]
       \dorecurse{50}
       {\startsubcolumnset[L]
         \samplefile{knuth}
       \stopsubcolumnset
       \startsubcolumnset[R]
         \samplefile{zapf}
       \stopsubcolumnset
       \flushsubcolumnsets[spread]}
     \stopcolumnset
     \stoptext

I wonder wether this is possible.

Many thanks for your help,

Pablo
___________________________________________________________________________________
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