不用胶水的线条不好吗?

不用胶水的线条不好吗?

我想排版一个特殊段落,penalty其中包含一些项目但没有glue。TeX 总是为这个段落生成一个满溢的框。

我有两个问题:

  1. glue如果里面没有,那么线路不良率是多少? 0100或者10000
  2. 如何让 TeX 在某些penalty项目处中断,从而产生一些未满的盒子而不是过满的盒子?

答案1

  1. 除非线断在准确的地方,否则\hsize如果没有胶水,情况会非常糟糕 (10000)
  2. 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,但是任何惩罚都可以)并且对于一条线来说太宽,那么无论如何都会有一个过满的框。

相关内容