Dear Max, I am very grateful that you took the time to tweak and test my non-running code snippet and found the problem.
> local box = node.hpack(hss + b, "exactly", 0) You are absolutely right, the cause of the problem was that I wasn't using node.hpack(). Actually, I tried to use it, but used it wrong, as follows: local box, _ = node_hpack(list) box.width = 0 box.shift = -tex_sp("1ex") My app works fine now. Also, I learned a lot from your code, like font.current(), hss + b and tex.forcehmode() - I immediately used the last one to set box.shift, making it relative. Best regards Huang Fusyong(黄复雄) Max Chernoff via ntg-context <ntg-context@ntg.nl> 于2022年11月11日周五 17:55写道: > > 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 > > ___________________________________________________________________________________ > If your question is of interest to others as well, please add an entry to the > Wiki! > > maillist : ntg-context@ntg.nl / > https://www.ntg.nl/mailman/listinfo/ntg-context > webpage : https://www.pragma-ade.nl / http://context.aanhet.net > archive : https://bitbucket.org/phg/context-mirror/commits/ > wiki : https://contextgarden.net > ___________________________________________________________________________________ ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net ___________________________________________________________________________________