当换行出错时:\hfuzz 是否会影响 \emergencystretch

当换行出错时:\hfuzz 是否会影响 \emergencystretch

我读了 David Carlisle 在换行问题.然而,我仍有一个问题没有解决。

卡莱尔写道:

\hfuzz不会以任何方式影响排版,但如果框只是稍微过满,就会停止 TeX 的抱怨。

[...]\emergencystretch不会改变“好”段落的设置,它只会改变产生过满框的段落的设置。

这两个选项本身都很清楚。是否\hfuzz只从 stdout 和日志文件中删除警告,还是也阻止紧急拉伸?

举例来说,假设\emergencystretch = 1em\hfuzz=5pt。如果水平盒子超出 3 pt,是否仍会拉伸空白以避免这种情况?(如果是,单词之间大幅增加的空白可能比超出段落的量(低于作者的阈值)更糟糕。)

答案1

不,\hfuzz不会影响换行决定。

如果能够找到换行符,TeX 将使用换行符序列,这样就不会出现过满/不足的情况。否则,即使某行过满/不足,它也会使用扣分最少的序列; 的值\hfuzz仅影响控制台/日志输出:如果某行过满超过\hfuzz,您将收到警告。

如果我以 Ulrike 为例并设置\tracingparagraphs=1,前两段显示出完全相同的轨迹:

@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

唯一的区别是,在第二种情况下没有显示任何警告信息,其中\hfuzz已设置为 40pt。

现在将示例更改为

\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}

第一段将有一行超出 36.27544pt。无论 的值如何变化,第二段和第三段的排版方式完全相同\hfuzz,这将允许第三段的设置与第一段相同(如果它影响换行决策)。以下是日志。

第一段

@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

第二段

@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

第三段

@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

控制台输出

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

答案2

试试看:

\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}

相关内容