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

Max Chernoff mseven at telus.net
Fri Nov 11 10:53:38 CET 2022


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

-- Max



More information about the ntg-context mailing list