Am 10.03.16 um 11:57 schrieb Hans Hagen:
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
but you only have to set the reporting element (the value of looseness
used for actually doing the line breaking is the right one)
so I'm not sure if it is helpful to reset tex.looseness as that is
already correct --- my guess is that you report on a local value that
was never set so I thinkthe reporting part would need to do
if tex.looseness == 0 then report looseness = 0
else report actual <looseness achieved>
whereas i think you always report
<actual looseness achieved>
only that is a variable that isn't set
i'll add tex.resetparagraph that resets looseness, hangindent,
hangafter, parshape and interlinepenalties in one go, something:
function tex.resetparagraph()
tex.looseness = 0
...
end
however, having the above function available is probably useful anyhow
(though you can do that manually if you do your own linebreaking etc
[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)
exactly that is what I think you need to do (should have read the whole
email first) --- if the luatex internals follow the TeX algorithms then
I don't think that could introduce issues
the alternative (though less good imo) is to just document that the
value is rubbish if looseness=0 was used
(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
sounds good. For now I can work around it as I can control what the
intended looseness is so I can program around the 0 case ... makes for
some ugly code that would otherwise nicer but :-)
thanks
frank