[NTG-context] how to simulate \hss in luametatex?

Hans Hagen j.hagen at freedom.nl
Fri Nov 11 11:50:51 CET 2022


On 11/11/2022 10:53 AM, Max Chernoff via ntg-context wrote:
> Hi,
> 
>> I want to  simulate \hss  in lua end in ConTeXt/luametatex environment.
>> For example,
>>
>> ```ConTeXt
>> a{\raise 1.5ex\hbox to 0pt{\hss b}}c
>> ```
> 
>> And in lua, I do as follows(part of my app seen in attachment):
> 
> Your code doesn't compile as is. I think that this is the same thing
> though:
> 
>     \starttext
>     \startluacode
>     local a = node.new"glyph"
>     a.char = string.byte("a")
>     a.font = font.current()
>     
>     local b = node.new"glyph"
>     b.char = string.byte("b")
>     b.font = font.current()
>     
>     local c = node.new"glyph"
>     c.char = string.byte("c")
>     c.font = font.current()
>     
>     local hss = node.new("glue")
>     hss.stretch = 65536
>     hss.stretchorder = 2
>     hss.shrink = 65536
>     hss.shrinkorder = 2
>     hss.width = 0
>     b = node.insertbefore(b, b, hss)
>     
>     local box = node.new("hlist", "box")
>     box.head = b
>     box.width = 0
>     box.shift = -tex.sp("1ex")
>     
>     tex.forcehmode()
>     node.write(a + box + c)
>     \stopluacode
>     \stoptext
> 
>> And got 'b' on top of 'c' in pdf as follows:
>>
>> ```pdf
>>    b
>> ac
>> ```
> 
> The \hss isn't the problem here. The problem is actually with the box.
> When you manually make the \hbox like that, I think (although I could be
> wrong) that you're bypassing all of TeX's glue calculations. You should
> probably use "node.hpack" instead:
> 
>     \starttext
>     \startluacode
>     local a = node.new"glyph"
>     a.char = string.byte("a")
>     a.font = font.current()
>     
>     local b = node.new"glyph"
>     b.char = string.byte("b")
>     b.font = font.current()
>     
>     local c = node.new"glyph"
>     c.char = string.byte("c")
>     c.font = font.current()
>     
>     local hss = node.new("glue")
>     hss.stretch = 65536
>     hss.stretchorder = 2
>     hss.shrink = 65536
>     hss.shrinkorder = 2
>     hss.width = 0
>     
>     local box = node.hpack(hss + b, "exactly", 0)
>     box.shift = -tex.sp("1ex")
>     
>     tex.forcehmode()
>     a.next = box
>     box.next = c
>     node.write(a)
>     \stopluacode
>     \stoptext
indeed, an dafter that you can check it

  box.glueorder  : 2
  box.glueset    : 6.6683349609375
  box.gluesign   : 2

which will be applied (in the backend) to glues

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



More information about the ntg-context mailing list