On 3/10/2016 11:01 AM, Frank Mittelbach wrote:
you are proving my point aren't you?

\setbox0\hbox{\input tufte }
\directlua{
     local n,t,head
     head = tex.box[0].head
     n, t = tex.linebreak(node.copy_list(head), {looseness=1})
     print("1.1",t.looseness)
     n, t = tex.linebreak(node.copy_list(head), {looseness=0})
     print("1.2",t.looseness)
}
\directlua{
     local n,t,head
     head = tex.box[0].head
     n, t = tex.linebreak(node.copy_list(head), {looseness=1,
tolerance=4500, pretolerance=100, emergencystretch=655360 })
     print("2.1",t.looseness)
     n, t = tex.linebreak(node.copy_list(head), {looseness=0,
tolerance=4500, pretolerance=100, emergencystretch=655360 })
     print("2.2",t.looseness)
}
\tolerance4500 \pretolerance100 \emergencystretch10pt
\directlua{
     local n,t,head
     head = tex.box[0].head
     n, t = tex.linebreak(node.copy_list(head), {looseness=1})
     print("3.1",t.looseness)
     n, t = tex.linebreak(node.copy_list(head), {looseness=0})
     print("3.2",t.looseness)
}

1.1    0
1.2    0
2.1    1
2.2    1
3.1    1
3.2    1

1.2   2.2  and 3.2  should show "0"  given that we run the linebreaking
with looseness zero but 2.1 and 3.1 still show "1"

and if you add t.prevgraf  you can see that it actually does do
looseness correctly:

1.1    0    7
1.2    0    7
2.1    1    8
2.2    1    7
3.1    1    8
3.2    1    7

am I missing something? the first column reports wrong values

[used looseness]

the normal line break function is called with a set if parameters that get either values from the given table or the values set at the tex end so if you set looseness in the table then that value is passed and if you don't set it the \looseness value is used

now, the \looseness is normally reset when tex sees a new paragraph but here we don't are in that situation so if that one is used we need to reset it ourselves

i'll add tex.resetparagraph that resets looseness, hangindent, hangafter, parshape and interlinepenalties in one go, something:

        function tex.resetparagraph()
            tex.looseness = 0
            ...
        end

[reported looseness]

the reported looseness (and demerits) are currently variables that reflect the state set when actually a possible looseness come in play but i'll reset them always now (hopefully not introducing some side effects in current usage)

(the prev values are actually taken from the state lists so these are less local; that will be left untouched)

[so]

in a next release we will have (1) a resetter in order to simulate par behaviour, and (2) an reset of two variables also when not used

hopefully that helps

Hans



-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | www.pragma-ade.com | www.pragma-pod.nl
-----------------------------------------------------------------

Reply via email to