我读了 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}