On Thu, 16 Apr 2026, Jim via ntg-context wrote:

> > Just do everything in lua:
> 
> > \starttext
> 
> > \startluacode
> > local preamble = [[
> >   \definepapersize[ShowAndTypeset]
> >                   [width=%width%, height=%height%];
> >   \setuppapersize[ShowAndTypeSet]
> > ]]
> 
> > local options={width="5cm", height="10cm"}
> > local parsed = utilities.templates.replace(preamble, options)
> 
> > context.tobuffer("MyPreamble", parsed)
> > \stopluacode
> 
> > \typebuffer[MyPreamble]
> 
> > \stoptext
> 
> Aditya,
> 
> too easy!   Thanks.
> 
> (Is the ';' after "%height%]" really desired here, or did you pull yourself
> away from a Algol/C/C++/Java program to answer this?)

Finger memory :-) 

> Aditya presciently anticipated (is that redundant?) Question 3 of
> International Buffer Day, which was going to be
> 
> Q3: How to create a buffer from inside a macro?
> 
> Given Aditya's answer to Q2, the solution is pretty simple:
> 
> \def\makeMyPreamble #1
> {
>     \startluacode
>         local preamble3 = [[
>             \definepapersize[ShowAndTypeset]
>                             [width=100mm, height=#1]
>             \setuppapersize[ShowAndTypeset]
>         ]]
>         context.tobuffer("MyPreamble", preamble3)
>     \stopluacode
> }

This is a bit risky with catcodes. (Quiz: is % inside \startluacode a tex 
comment or not?) Better to define a function, say
thirddata.definepreamble(width,height) at lua end and then call

\define[1]\makePreamble{\ctxlua(thirddata.definepreamble("#1","100cm")}

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