Wybo Dekker schreef:
Dank Piet, helemaal helder. Alleen: je zegt dat TeX die \discretionary toevoegt. Bedoel je niet LaTeX? Want in een \vbox treedt het probleem niet op, terwijl die, voor x-x bijvoorbeeld, wel netjes aan afbreken doet. Is het dus niet een latex-bug? En waar het ook gebeurt - het is toch niet logisch een \discretionary toe te voegen aan een - als die eindstandig is?
Nog ter aanvulling: hetzelfde probleem is te zien in tabulars en longtables met een te smalle kolom.
Nee, het is een puur TeX probleem. Je kunt hetzelfde effect bereiken met plain TeX, met een \vbox met of zonder \emergencystretch. In het TeXbook hoofdstuk 14 staat het beschreven.
Dat het in een pure \vbox niet optreedt is omdat \emergencystretch dan 0pt is.
\parindent=0pt\tracingall
\vbox\bgroup\hsize1mm\emergencystretch10pt 1 x x - x - x x \egroup
\hskip 2cm
\vbox\bgroup\hsize1mm 2 x x - x - x x \egroup
\bye
De \discretionary die na een - toegevoegd wordt zorgt ervoor dat het een mogelijk afbreekpunt wordt. Anders was de - een gewoon teken net als alle andere.
Het is misschien inderdaad niet logisch om een \discretionary toe te voegen na een - die "eindstandig" is, maar zo werkt TeX nou eenmaal. En meestal is het onschi=uldig omdat het sowieso al een afbreekpunt is.
Als je naar de trace van de afbreekalgoritme kijkt (met \tracingall) dan zie je (als ik het allemaal goed interpreteer) dat de afbreekpunten zonder die afbreking bij de discretionary een oneindige slechtheid (demerits) geven en de afbreking bij de discretionary weliswaar een grote, maar eindige. En die is dus beter. Zonder de \emergencystretch zijn beide gevallen oneindig slecht. Dus dan is het maar net toevallig wat hij kiest denk ik, of hij neemt de eerst mogelijkheid of zo.
Het zijn dus echt super randgevallen waar we het over hebben.
--
Piet van Oostrum