[NTG-context] Setting and measuring boxes TeX/Lua

Hans Hagen j.hagen at xs4all.nl
Wed Nov 25 21:25:28 CET 2020


On 11/25/2020 7:31 PM, Jano Kula wrote:
> Hello!
> 
> I would like to set framed boxes, measure their dimensions and proceed 
> based on the measurement. It is a combination of TeX and Lua ends.
> 
>   * Boxes are set on the TeX side. Stacking boxes (hbox, framed, vbox)
>     in Lua looked too complex.
>   * The content of the inner box is set on the Lua side (some computations).
> 
> On TeX side boxes and their dimensions are accessible, but not at Lua 
> side, until luacode is finished (iterations over boxes happen here). I 
> would say Hans already named the problem in the list: /that is always 
> tricky as what happens is postponing till the group ends/.
> 
> Do you have an idea how to expand the box sooner or would you use a 
> different approach?
> 
> Sorry for longer MWE (attached also).
> 
> Thank you,
> Jano
> 
> \def\StartBox{\setbox0=\hbox\bgroup% open hbox
>                  \framed[frame=on]\bgroup% open framed
>                      \vbox\bgroup% open vbox (\par needed)
>               }
> \def\StopBox{\egroup\egroup\egroup% close vbox, framed, hbox
>               \setvariable{Test}{Height}{\the\ht0}%
>              }%
> 
> \startluacode
> ctx = context
> 
> function TestBox()
>      ctx("TeX Box: ")    ctx.copy(false,0)ctx.par()
>      ctx("TeX Getvar: ") ctx.getvariable("Test", "Height")ctx.par()
>      var = tokens.getters.macro(tokens.getters.macro("??variables") .. 
> "Test:Height")
>      ctx("Lua Type: ")   ctx(type(var))ctx.par()
>      ctx("Lua Value: ")  ctx(var)ctx.par()
> end
> \stopluacode
> 
> \starttext
> 
> \startluacode
>      ctx.bold("First luacode (more boxes)")ctx.par()
>      ctx.StartBox()
>      ctx("AAA")ctx.par()
>      ctx("BBB")ctx.par()
>      ctx.StopBox()
>      TestBox()
>      ctx.StartBox()
>      ctx("CCC")ctx.par()
>      ctx.StopBox()
>      TestBox()
> \stopluacode
> 
> \blank[4*big]
> 
> \startluacode
>      ctx.bold("Second luacode (last content of box0)")ctx.par()
>      TestBox()
> \stopluacode
> 
> \stoptext
\startluacode
  context.stepwise (function()
     ctx.bold("First luacode (more boxes)")ctx.par()
     ctx.StartBox()
     ctx("AAA")ctx.par()
     ctx("BBB")ctx.par()
     ctx.StopBox()
     context.step()
     TestBox()
     context.step()
     ctx.StartBox()
     ctx("CCC")ctx.par()
     ctx.StopBox()
     context.step()
     TestBox()
     context.step()
end)
\stopluacode

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


More information about the ntg-context mailing list