[luatex] Behavior of node lists.

Paul Isambert zappathustra at free.fr
Mon Jul 4 09:06:50 CEST 2011


Hello all,

Problem 1:
%%%
\setbox0=\hbox{01}

\directlua{
local done
for n in node.traverse(tex.box[0].head) do
   texio.write_nl("Considering " .. string.char(n.char))
   if not done then
     local next = n.next
     done = true
     tex.box[0].head = node.remove(tex.box[0].head, n)
     tex.box[0].head = node.remove(tex.box[0].head, next)
   end
end}

\box0 \bye
%%%

When you consider "0", you remove both "0" and "1", so you'd expect the 
loop to end there; but no, "1" is considered too (even though the box is 
really empty). The strange things is that if you do not remove "0", then 
"1" isn't considered; as if node.traverse is a bit lost when you remove 
both the current node and the one it's supposed to scan next. (As far as 
I can see, this doesn't hinge on "0" being the head of the list.) Is 
this a bug, or have I misunderstood something?



Problem 2: -- A question, rather.
The manual says you're in charge of ensuring that in 
"node.insert_after(H, N, x)", N is in the list denoted by H. The thing 
is, H doesn't seem to matter at all, unless it's nil:

\setbox0=\hbox{X}
\setbox1=\hbox{abc}

\directlua{
local n = node.copy(tex.box[0].head)
node.insert_after(tex.box[0].head, tex.box[1].head, n)
% Works too:
% node.insert_after(tex.nest[tex.nest.ptr].head, tex.box[1].head, n)
}

\box1
\bye

So what's the need to denote the list where the insertion occurs if it 
is ignored? In other words, couldn't node.insert_after and associates 
work with only two arguments?

Best,
Paul


More information about the luatex mailing list