Hi, The latest upload has: - a few fixed cf posts around 2025/2026 crossover - a new parinject feature, that Hraban likely will abuse, see https://tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael. - a new (experimental) tabulate preamble key 'P' that is mostly 'p' compatible but uses a different split paragraphs across page approach; it is a side effect of upgrading the alignment mechanism in luametatex in addition to already present extensions - we also now enabled shaping penalties thatwas already enabled in my local cont-exp for a while for testing interferences; it prevents breaks inside shapes and hang (unless configured otherwise) - a few improvements in \column uses in column sets but we're working on making that more relable (not that trivial) - gaelic language and patterns (more work needed there) - a bit more documentation here and there (there is some more pending) Hans % another example, one of our tests %\enabletrackers[parinsert] \setupexternalfigures [location={global,local,default}] \starttext \samplefile{tufte}% \space\leftparinsert[color=darkred]{An example.}\space \samplefile{ward}% \space\rightparinsert[color=darkgreen]{Another example.}\space \samplefile{tufte} \page \samplefile{tufte}% \space \leftparinsert [lines=3] {\externalfigure[cow.pdf][height=3lh,location=top]}% \rightparinsert [lines=4] {\mirror{\externalfigure[cow.pdf][height=4lh,location=top]}}% \space \samplefile{ward}% \space \rightparinsert [distance=2em,lines=2] {\mirror{\externalfigure[cow.pdf][height=2lh,location=top]}}% \space \samplefile{tufte} \stoptext -- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 7 Jan 2026, at 11:36, Hans Hagen via ntg-context
wrote: Hi,
The latest upload has:
- a few fixed cf posts around 2025/2026 crossover
- a new parinject feature, that Hraban likely will abuse, see https://tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
Not just Hraban, this feature is quite amazing. I can easily imagine how messy this is behind the scenes. Since you are doing near impossible things anyway, how about the next challenge: can you make the parinject inserts cross paragraph boundaries, please? :) Best wishes, Taco — Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)
On 1/7/2026 12:26 PM, Taco Hoekwater wrote:
On 7 Jan 2026, at 11:36, Hans Hagen via ntg-context
wrote: Hi,
The latest upload has:
- a few fixed cf posts around 2025/2026 crossover
- a new parinject feature, that Hraban likely will abuse, see https://tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
Not just Hraban, this feature is quite amazing. I can easily imagine how messy this is behind the scenes. Since you are doing near impossible things anyway, how about the next challenge: can you make the parinject inserts cross paragraph boundaries, please? :)
oh a new challenge .. not impossible if we keep state but then we also need to prevent breaking at that pointswhich is more tricky as you script your workflow a \hfill\localbreakpar could work out if you intercept the empty line \samplefile{tufte}% \space \leftparinsert [lines=3] {\externalfigure[cow.pdf][height=3lh,location=top]}% \rightparinsert [lines=4] {\mirror{\externalfigure[cow.pdf][height=4lh,location=top]}}% \space \samplefile{ward}% \space \rightparinsert [distance=2em,lines=2] {\mirror{\externalfigure[cow.pdf][height=2lh,location=top]}}% \space \samplefile{tufte} \space \rightparinsert [distance=2em,lines=3] {\mirror{\externalfigure[cow.pdf][height=3lh,location=top]}}% \space a bit of text so that we end up on a next line so some more text is needed \hfill\localbreakpar \samplefile{tufte}
Best wishes, Taco
— Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)
-- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Thank you! Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
Oh, I feel so abusive… Let’s try if this works with more than one per paragraph and with different sizes… 😈 Hraban
On 1/7/2026 1:15 PM, Henning Hraban Ramm wrote:
Thank you!
Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
Oh, I feel so abusive…
Let’s try if this works with more than one per paragraph and with different sizes… 😈
What makes you think that this wouldn't work: \starttext \enabletrackers[parinsert] \dorecurse{100}{ \samplefile{zelensky}% \leftparinsert[color=darkred,lines=2]{zelensky}% \samplefile{zelensky}% \rightparinsert[color=darkgreen]{more zelensky}% \samplefile{zelensky}% \leftparinsert[color=darkyellow,lines=4]{again zelensky}% % \rightparinsert[color=darkblue]{zelensky}% \samplefile{zelensky}% \samplefile{zelensky}% } Which is one big paragraph spanning 27 pages. The only tricky case is when you have two in the same line which only works well if your text provides enough solution space (we might figure out something). This has to do with the fact that depending on settings tex might already have made decisions wrt optimal breaks out of order. 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 -----------------------------------------------------------------
Thank you for the update! I got this error after context --make (macOS, ARM64, ConTeXt 2026.01.07, LuaMetaTeX 2.11.08): lua error: run callback [7]: ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:175: bad argument #6 to 'format' (number expected, got nil) stack traceback: [C]: in upvalue 'format' ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:175: in field 'integer index' ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:200: in field 'show' ...ext/tex/texmf-context/tex/context/base/mkxl/luat-run.lmt:61: in function <...ext/tex/texmf-context/tex/context/base/mkxl/luat-run.lmt:55> Apparently it fails during some log output. I was able to make the format by changing line 177 in trac-inf.lmt to: status.tex_memory_mode or 0, but I'm not sure what side effects this band-aid might have. Cheers, Jacob
Am 07.01.2026 um 11:36 schrieb Hans Hagen via ntg-context
: Hi,
The latest upload has:
- a few fixed cf posts around 2025/2026 crossover
- a new parinject feature, that Hraban likely will abuse, see https://tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
- a new (experimental) tabulate preamble key 'P' that is mostly 'p' compatible but uses a different split paragraphs across page approach; it is a side effect of upgrading the alignment mechanism in luametatex in addition to already present extensions
- we also now enabled shaping penalties thatwas already enabled in my local cont-exp for a while for testing interferences; it prevents breaks inside shapes and hang (unless configured otherwise)
- a few improvements in \column uses in column sets but we're working on making that more relable (not that trivial)
- gaelic language and patterns (more work needed there)
- a bit more documentation here and there (there is some more pending)
Hans
% another example, one of our tests
%\enabletrackers[parinsert]
\setupexternalfigures [location={global,local,default}]
\starttext
\samplefile{tufte}% \space\leftparinsert[color=darkred]{An example.}\space \samplefile{ward}% \space\rightparinsert[color=darkgreen]{Another example.}\space \samplefile{tufte}
\page
\samplefile{tufte}% \space \leftparinsert [lines=3] {\externalfigure[cow.pdf][height=3lh,location=top]}% \rightparinsert [lines=4] {\mirror{\externalfigure[cow.pdf][height=4lh,location=top]}}% \space \samplefile{ward}% \space \rightparinsert [distance=2em,lines=2] {\mirror{\externalfigure[cow.pdf][height=2lh,location=top]}}% \space \samplefile{tufte}
\stoptext
--
----------------------------------------------------------------- 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 : ntg-context@ntg.nl / 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 ___________________________________________________________________________________
On 1/8/2026 4:15 PM, Jacob Kauffmann via ntg-context wrote:
Thank you for the update!
I got this error after context --make (macOS, ARM64, ConTeXt 2026.01.07, LuaMetaTeX 2.11.08): lua error:
run callback [7]: ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:175: bad argument #6 to 'format' (number expected, got nil) stack traceback: [C]: in upvalue 'format' ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:175: in field 'integer index' ...ext/tex/texmf-context/tex/context/base/mkxl/trac-inf.lmt:200: in field 'show' ...ext/tex/texmf-context/tex/context/base/mkxl/luat-run.lmt:61: in function <...ext/tex/texmf-context/tex/context/base/mkxl/luat-run.lmt:55>
Apparently it fails during some log output. I was able to make the format by changing line 177 in trac-inf.lmt to: status.tex_memory_mode or 0, but I'm not sure what side effects this band-aid might have.
Taco observed that the osx binsary was not updated which might relate to the build on the server. Either compile yourself, fetch from the garden build, or check the next upload. 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 -----------------------------------------------------------------
Am 07.01.2026 um 11:36 schrieb Hans Hagen via ntg-context:
Hi,
The latest upload has:
- a few fixed cf posts around 2025/2026 crossover
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
- a new (experimental) tabulate preamble key 'P' that is mostly 'p' compatible but uses a different split paragraphs across page approach; it is a side effect of upgrading the alignment mechanism in luametatex in addition to already present extensions
- we also now enabled shaping penalties thatwas already enabled in my local cont-exp for a while for testing interferences; it prevents breaks inside shapes and hang (unless configured otherwise)
- a few improvements in \column uses in column sets but we're working on making that more relable (not that trivial)
- gaelic language and patterns (more work needed there)
- a bit more documentation here and there (there is some more pending)
Hans
% another example, one of our tests
%\enabletrackers[parinsert]
\setupexternalfigures [location={global,local,default}]
\starttext
\samplefile{tufte}% \space\leftparinsert[color=darkred]{An example.}\space \samplefile{ward}% \space\rightparinsert[color=darkgreen]{Another example.}\space \samplefile{tufte}
\page
\samplefile{tufte}% \space \leftparinsert [lines=3] {\externalfigure[cow.pdf][height=3lh,location=top]}% \rightparinsert [lines=4] {\mirror{\externalfigure[cow.pdf][height=4lh,location=top]}}% \space \samplefile{ward}% \space \rightparinsert [distance=2em,lines=2] {\mirror{\externalfigure[cow.pdf][height=2lh,location=top]}}% \space \samplefile{tufte}
\stoptext
The new mechanism produces wrong result for right to left paragraphs (page 2) and narrow paragraphs (page 3): \setuppapersize[A4][A3] \setuplayout[location=middle] \showframe \startbuffer \samplefile{lorem} \leftparinsert [lines=3]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem} \rightparinsert[lines=3]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem} \stopbuffer \starttext \title{Default text direction} \getbuffer \title{Reverse text direction} \startalignment[r2l] \getbuffer \stopalignment \title{Narrow paragraphs} \startnarrower \getbuffer \stopnarrower \stoptext Wolfgang
Hi Wolfgang,
On Sun, 11 Jan 2026 at 20:31, Wolfgang Schuster
Am 07.01.2026 um 11:36 schrieb Hans Hagen via ntg-context:
Hi,
The latest upload has:
- a few fixed cf posts around 2025/2026 crossover
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
- a new (experimental) tabulate preamble key 'P' that is mostly 'p' compatible but uses a different split paragraphs across page approach; it is a side effect of upgrading the alignment mechanism in luametatex in addition to already present extensions
- we also now enabled shaping penalties thatwas already enabled in my local cont-exp for a while for testing interferences; it prevents breaks inside shapes and hang (unless configured otherwise)
- a few improvements in \column uses in column sets but we're working on making that more relable (not that trivial)
- gaelic language and patterns (more work needed there)
- a bit more documentation here and there (there is some more pending)
Hans
% another example, one of our tests
%\enabletrackers[parinsert]
\setupexternalfigures [location={global,local,default}]
\starttext
\samplefile{tufte}% \space\leftparinsert[color=darkred]{An example.}\space \samplefile{ward}% \space\rightparinsert[color=darkgreen]{Another example.}\space \samplefile{tufte}
\page
\samplefile{tufte}% \space \leftparinsert [lines=3] {\externalfigure[cow.pdf][height=3lh,location=top]}% \rightparinsert [lines=4] {\mirror{\externalfigure[cow.pdf][height=4lh,location=top]}}% \space \samplefile{ward}% \space \rightparinsert [distance=2em,lines=2] {\mirror{\externalfigure[cow.pdf][height=2lh,location=top]}}% \space \samplefile{tufte}
\stoptext
The new mechanism produces wrong result for right to left paragraphs (page 2) and narrow paragraphs (page 3):
\setuppapersize[A4][A3] \setuplayout[location=middle]
\showframe
\startbuffer \samplefile{lorem} \leftparinsert [lines=3]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem}
\rightparinsert[lines=3]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem} \stopbuffer
Try \startbuffer \samplefile{lorem} \leftparinsert [lines=3,xoffset=\leftskip]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem} \rightparinsert[lines=3,xoffset=-\rightskip]{\blackrule[color=red,width=2cm,height=1sh,depth=1sd+2lh]} \samplefile{lorem} \stopbuffer
\starttext
\title{Default text direction}
\getbuffer
\title{Reverse text direction}
\startalignment[r2l] \getbuffer \stopalignment
This one works here with the alternative approach that Hans added today (not uploaded yet). /Mikael
\title{Narrow paragraphs}
\startnarrower \getbuffer \stopnarrower
\stoptext
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / 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 ___________________________________________________________________________________
Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
I finally tried it. Unfortunately, with my buffer setup for code examples, the inserts are always in the last line: """ \starttext \startbuffer[ParInsert] \setuppapersize[A7,landscape] \setuplayout[backspace=0mm,width=1pw,topspace=0mm,height=1ph,header=0mm,footer=0mm] \setupbodyfont[10pt] \setupexternalfigures[location=default] \starttext %% ex:start \samplefile{lorem}% \space\rightparinsert[color=darkred]{Insert!} \space\leftparinsert[lines=3]{% \externalfigure[cow][height=3lh,location=top]}% %% ex:stop \stoptext \stopbuffer \typebuffer[ParInsert][option=TEX,range={ex:start,ex:stop},numbering=file] \framedtext[frame=on, width=1tw, offset=1dk]{% \typesetbuffer[ParInsert][page=1]} \stoptext """ Hraban
Am 12.01.26 um 18:09 schrieb Henning Hraban Ramm:
Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
I finally tried it. Unfortunately, with my buffer setup for code examples, the inserts are always in the last line:
Would it be possible to base the inserts on \framed, to use the usual parameters? Hraban
On 1/12/2026 10:49 PM, Henning Hraban Ramm wrote:
Am 12.01.26 um 18:09 schrieb Henning Hraban Ramm:
Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
I finally tried it. Unfortunately, with my buffer setup for code examples, the inserts are always in the last line:
Would it be possible to base the inserts on \framed, to use the usual parameters?
it is kind of a low level feature and framed would introduce alignment trickery .. we don't expect this to be used that often anyway (btw, the next upload will have a bit different but more robust low level implementation, interfaces are the same; we're playing bit with variants) 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 -----------------------------------------------------------------
Am 13.01.26 um 00:34 schrieb Hans Hagen via ntg-context:
On 1/12/2026 10:49 PM, Henning Hraban Ramm wrote:
Am 12.01.26 um 18:09 schrieb Henning Hraban Ramm:
Am 07.01.26 um 11:36 schrieb Hans Hagen via ntg-context:
- a new parinject feature, that Hraban likely will abuse, see https:// tex.stackexchange.com/a/758011/52406 for the rationale and an explanation / example by Mikael.
I finally tried it. Unfortunately, with my buffer setup for code examples, the inserts are always in the last line:
Would it be possible to base the inserts on \framed, to use the usual parameters?
it is kind of a low level feature and framed would introduce alignment trickery .. we don't expect this to be used that often anyway
(btw, the next upload will have a bit different but more robust low level implementation, interfaces are the same; we're playing bit with variants)
Ok, thanks for clarification. My problem (in buffer/frame) was due to a misunderstanding – I first thought that lines would be an offset instead of the height and didn’t understand that the insert works on the current line / the next paragraph instead of the previous. Sorry for the noise! Hraban
Just found this extreme example of inserts-layout on the LilyPond users mailing list. Is this a Christian thing? 🤔 Hraban
On 19 Jan 2026, at 18:27, Henning Hraban Ramm
wrote: Just found this extreme example of inserts-layout on the LilyPond users mailing list. Is this a Christian thing? 🤔
It looks like a reminder of the notes to use by a priest when chanting the verse.[1] This page has an introductory video. https://www.ccwatershed.org/2013/05/27/how-chant-readings-mass-sing-gospel-l... However, I find it unlikely that a priest would need to be reminded of the notes to use when singing "amen" at the end so it might just be a reminder that the verse is to be sung? Or simply nice typography. Interesting find though. Regards, [1] Gregorian chant uses a four-line stave. https://maternalheart.org/resources/gregorian_chant_notation/
participants (7)
-
Bruce Horrocks -
Hans Hagen -
Henning Hraban Ramm -
Jacob Kauffmann -
Mikael Sundqvist -
Taco Hoekwater -
Wolfgang Schuster