Am 11.03.16 um 14:35 schrieb Hans Hagen:
On 3/10/2016 8:56 PM, Frank Mittelbach wrote:
Am 10.03.16 um 20:33 schrieb Hans Hagen:
indeed, this is a known issue and it's on my list to look into that (one
can check for the location, at least that's what i do as a way out for
now); we probably need an additional callback but not for the next
release (as one might need to adapt code due to a break in
compatibility)

ok good, so much the better if it is already known. yeah one can program
around it, even though it is again a bit painful :-)

indeed and i must admit that when i ran into it long ago that it took me
a while to realize that i needed to ignore those; anyway, i checked what
i had in mind with this ...

... it's pre_box, box, pre_adjust and adjust which are the ones in post
line break and these are not followed by an actual break which happens a
bit later with its own call ...

... i'll move these four to a new callback contribute_filter

(but for now, you'd better check for these 4 cases)

Hi Hans,

looks like the issue is not just resolved by looking for pre_box, box, pre_adjust and adjust and ignoring those.

If you typeset a \vbox on the main vertical list then one gets 2 calls to buildpage_filter and both are with context "box". The first one seems to be the internal one during the actual build of the box and the second one a real buildpage but claiming the wrong context (or the first one claims the one context depending on what "box" is supposed to mean.

Above you said you have a workaround checking for "location". Can you tell me what you mean by this?

thanks
frank

here is the test file for the bug/issue explained above:


\directlua{
require "ltluatex.lua"
function buildpage ( context )
print ( "************* buildpage at: " .. context .. " at " .. tex.inputlineno)
  if context == "pre_box" or
%     context == "box"     or
     context == "pre_adjust" or
     context == "adjust"
  then
    print(" -- context ignored --")
  elseif tex.lists.contrib_head then
      print("Contrib before:")
      for n in node.traverse(tex.lists.contrib_head) do
       if n.id == 12 then
         print("  id=" .. n.id .. " penalty=" .. n.penalty)
       else
         print("  id=" .. n.id)
       end
      end
  end
  return true
end
luatexbase.add_to_callback("buildpage_filter", buildpage, "new buildpage callback")
}


\input tufte

\hrule
\penalty 66
\vbox{test }
\penalty 77
\hrule

Z

\bye


the vbox becomes visible only by looking into contrib_head even though the context claims to be "box"

************* buildpage at: penalty at 30
Contrib before:
 id=2
 id=12 penalty=66
************* buildpage at: box at 31
************* buildpage at: box at 31
Contrib before:
 id=1
************* buildpage at: penalty at 32
Contrib before:
 id=12 penalty=77

Reply via email to