我想排版一个特殊段落,penalty
其中包含一些项目但没有glue
。TeX 总是为这个段落生成一个满溢的框。
我有两个问题:
glue
如果里面没有,那么线路不良率是多少?0
,100
或者10000
?- 如何让 TeX 在某些
penalty
项目处中断,从而产生一些未满的盒子而不是过满的盒子?
答案1
- 除非线断在准确的地方,否则
\hsize
如果没有胶水,情况会非常糟糕 (10000) - TeX 的换行符是最低成本计算,因此允许它完全按照您的要求执行的唯一方法是设置
\tolerance=10000
接受任意错误的换行符。TeX 会在日志文件中发出大量抱怨。
通常,最好安排将胶水添加到任何短线的右边缘,因为它会受到惩罚,这正是所做的\raggedright
,因此:
\documentclass{article}
\begin{document}
\raggedright
abcdef\linebreak[2]ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopq\linebreak[3]rstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijkl\linebreak[3]mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqr\linebreak[1]stuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqrstuvwxyzabcde\linebreak[0]fghijklmnopqrstuvwxyz%
abcdefgh\linebreak[4]ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqr\linebreak[0]stuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqrstuvwxyza\linebreak[0]bcdefghijklmnopqrstuvwxyz%
abcdefghijklmn\linebreak[0]opqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
\end{document}
答案2
\hsize
行过满(无粘连)的坏处是 1000000(TeXbook,第 229 页),但如果长度在和\hsize
+之间,TeX 不会抱怨\hfuzz
。如果行不够满,则为 10000。以下是示例:
\line{\hbox to\dimexpr\hsize-1sp{\hfill}}
\showthe\badness
\line{\hbox to\dimexpr\hsize{\hfill}}
\showthe\badness
\line{\hbox to\dimexpr\hsize+\hfuzz{\hfill}}
\showthe\badness
\line{\hbox to\dimexpr\hsize+2\hfuzz{\hfill}}
\showthe\badness
\bye
产生
Underfull \hbox (badness 10000) detected at line 1
[]
> 10000.
l.2 \showthe\badness
?
> 0.
l.5 \showthe\badness
?
> 1000000.
l.8 \showthe\badness
?
Overfull \hbox (0.20001pt too wide) detected at line 10
[]|
> 1000000.
l.11 \showthe\badness
你可以强制 TeX 排版一个段落,不使用粘合,但只会受到惩罚,制作未满的盒子并且不会发出任何抱怨:
\def\specialpar{{\hbadness=10000 \tolerance=10000 \par}}
abcdef\break ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopq\break rstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijkl\break mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqr\break stuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqrstuvwxyzabcde\break fghijklmnopqrstuvwxyz%
abcdefgh\break ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqr\break stuvwxyzabcdefghijklmnopqrstuvwxyz%
abcdefghijklmnopqrstuvwxyza\break bcdefghijklmnopqrstuvwxyz%
abcdefghijklmn\break opqrstuvwxyzabcdefghijklmnopqrstuvwxyz%
\specialpar
\bye
这是打印的输出
这是终端输出
> pdftex ufull
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdftex)
restricted \write18 enabled.
entering extended mode
(./ufull.tex [1{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdfte
x.map}] )</usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmr
10.pfb>
Output written on ufull.pdf (1 page, 16061 bytes).
Transcript written on ufull.log.
当然,如果一个块没有惩罚(这里用 表示\break
,但是任何惩罚都可以)并且对于一条线来说太宽,那么无论如何都会有一个过满的框。