[lltx] linebreak_filter problems

Frank Mittelbach frank.mittelbach at latex-project.org
Sun Jun 10 20:49:27 CEST 2012


Am 10.06.2012 16:50, schrieb Frank Mittelbach:
> Hi folks,
>
> can somebody help me to identify if I do something wrong or if there is
> a bug with linebreak_filter.
>
> Th problem is documented at length in
>
> http://tex.stackexchange.com/questions/59176/lastnodetype-not-working-as-expected-in-luatex
>
>
> In a nutshell I try to replace (at certain times) TeX's linebreaking
> algorithm and replace it with a simple version that just packs up the
> hlist into an hbox and returns that.
>
> If I do that the resulting box appears on the current vertical list (ie
> is seen via \showlists) but at the same time
>
> \lastnotetype returns -1
> \lastbox picks up a void box
>
> ie to some parts of TeX the list appears to be empty.

addendum:

I'm not sure I fully understand the implementation yet, but it seams to 
me that the reason for the problem is that the tail pointer for the 
current list is not updated if the linebreak_filter acts, i.e., there is 
code to set up just_box, but in the end cur_list.tail_field remains 
pointing to the last node before the newly appended list rather than to 
its tail.

In other words somewhere around here

         if (callback_id > 0) {
             /* find the correct value for the |just_box| */
	    halfword box_search = cur_list.tail_field;
             just_box  = null;
	    if (box_search != null) {
                 do {
	            if (type(box_search) == hlist_node) {
                        just_box = box_search;
                     }
/* perhaps simply like this */
                     cur_list.tail_field = box_search
/* end mod */
                     box_search = vlink(box_search);
                 } while (box_search != null);
	    }

one could update the tail position.

cheers
frank


More information about the lualatex-dev mailing list