When line breaking goes wrong: does \hfuzz influence \emergencystretch
Try it out:
\documentclass[11pt]{article}
\textwidth=3cm
\begin{document}
blub xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\hfuzz=40pt
blub xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\emergencystretch=1em
blub xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\end{document}
No, \hfuzz
doesn't affect the line breaking decisions.
TeX will use a sequence of line breaks so that no line is overfull/underfull, if it's able to find one. Otherwise it will use the sequence the least amount of demerits even if a line is overfull/underfull; the value of \hfuzz
only affects the console/log output: if a line is overfull beyond \hfuzz
, you'll be warned.
If I take Ulrike’s example and set \tracingparagraphs=1
, the first two paragraphs show exactly the same trace:
@firstpass
@secondpass
[]\OT1/cmr/m/n/10.95 blub xxxxxxx xxxxxxx
@ via @@0 b=* p=0 d=*
@@1: line 1.3 t=0 -> @@0
xxxxxxx xxxxxxx
@ via @@1 b=8 p=0 d=324
@@2: line 2.2 t=324 -> @@1
xxxxxxx xxxxxxx
@\par via @@2 b=0 p=-10000 d=*
@@3: line 3.2- t=324 -> @@2
Overfull \hbox (38.70877pt too wide) in paragraph at lines 7--8
[]\OT1/cmr/m/n/10.95 blub xxxxxxx xxxxxxx
[]
@firstpass
@secondpass
[]\OT1/cmr/m/n/10.95 blub xxxxxxx xxxxxxx
@ via @@0 b=* p=0 d=*
@@1: line 1.3 t=0 -> @@0
xxxxxxx xxxxxxx
@ via @@1 b=8 p=0 d=324
@@2: line 2.2 t=324 -> @@1
xxxxxxx xxxxxxx
@\par via @@2 b=0 p=-10000 d=*
@@3: line 3.2- t=324 -> @@2
The only difference is that no warning message is shown in the second case, where \hfuzz
has been set to 40pt.
Now change the example to
\documentclass[11pt]{article}
\textwidth=3cm
\tracingparagraphs=1
\begin{document}
blub xxxxxxxxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\emergencystretch=\maxdimen
blub xxxxxxxxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\hfuzz=40pt
blub xxxxxxxxxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
\end{document}
The first paragraph will have a line which is overfull by 36.27544pt. The second and third paragraphs are typeset exactly in the same way, regardless of the changed value of \hfuzz
, which would allow the third paragraph to be set alike the first one, if it affected the line breaking decision. Here's the log.
First paragraph
@firstpass
@secondpass
[]\OT1/cmr/m/n/10.95 blub xxxxxxxxxxxxxx
@ via @@0 b=* p=0 d=*
@@1: line 1.3 t=0 -> @@0
xxxxxxx xxxxxxx
@ via @@1 b=8 p=0 d=324
@@2: line 2.2 t=324 -> @@1
xxxxxxx xxxxxxx
@\par via @@2 b=0 p=-10000 d=*
@@3: line 3.2- t=324 -> @@2
Second paragraph
@firstpass
@secondpass
@emergencypass
[]\OT1/cmr/m/n/10.95 blub
@ via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
xxxxxxxxxxxxxx
@ via @@1 b=0 p=0 d=100
@@2: line 2.2 t=200 -> @@1
xxxxxxx
@ via @@2 b=0 p=0 d=100
@@3: line 3.2 t=300 -> @@2
xxxxxxx
@ via @@2 b=0 p=0 d=100
@ via @@3 b=0 p=0 d=100
@@4: line 3.2 t=300 -> @@2
xxxxxxx
@ via @@3 b=0 p=0 d=100
@ via @@4 b=0 p=0 d=100
@@5: line 4.2 t=400 -> @@4
xxxxxxx
@\par via @@4 b=0 p=-10000 d=100
@\par via @@5 b=0 p=-10000 d=100
@@6: line 4.2- t=400 -> @@4
Third paragraph
@firstpass
@secondpass
@emergencypass
[]\OT1/cmr/m/n/10.95 blub
@ via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
xxxxxxxxxxxxxx
@ via @@1 b=0 p=0 d=100
@@2: line 2.2 t=200 -> @@1
xxxxxxx
@ via @@2 b=0 p=0 d=100
@@3: line 3.2 t=300 -> @@2
xxxxxxx
@ via @@2 b=0 p=0 d=100
@ via @@3 b=0 p=0 d=100
@@4: line 3.2 t=300 -> @@2
xxxxxxx
@ via @@3 b=0 p=0 d=100
@ via @@4 b=0 p=0 d=100
@@5: line 4.2 t=400 -> @@4
xxxxxxx
@\par via @@4 b=0 p=-10000 d=100
@\par via @@5 b=0 p=-10000 d=100
@@6: line 4.2- t=400 -> @@4
Console output
Overfull \hbox (36.27544pt too wide) in paragraph at lines 7--8
[]\OT1/cmr/m/n/10.95 blub xxxxxxxxxxxxxx
Underfull \hbox (badness 10000) in paragraph at lines 10--11
[]\OT1/cmr/m/n/10.95 blub
Underfull \hbox (badness 10000) in paragraph at lines 10--11
\OT1/cmr/m/n/10.95 xxxxxxxxxxxxxx
Underfull \hbox (badness 10000) in paragraph at lines 13--14
[]\OT1/cmr/m/n/10.95 blub
Underfull \hbox (badness 10000) in paragraph at lines 13--14
\OT1/cmr/m/n/10.95 xxxxxxxxxxxxxx