![有人制作过无穷大大于 10,000 的修改版 TeX 吗?](https://linux22.com/image/436654/%E6%9C%89%E4%BA%BA%E5%88%B6%E4%BD%9C%E8%BF%87%E6%97%A0%E7%A9%B7%E5%A4%A7%E5%A4%A7%E4%BA%8E%2010%2C000%20%E7%9A%84%E4%BF%AE%E6%94%B9%E7%89%88%20TeX%20%E5%90%97%EF%BC%9F.png)
我们都熟悉这样的结果\sloppy
:如果一个段落里必须有一些不好的东西,那么最好把所有的东西都塞进一个段落里。真的坏行。毫无疑问,部分原因是在计算坏度时,TeX 将无穷大设置为相对较低的值 10,000。当使用 16 位数字计算坏度时,这很有意义,但如果我没记错的话,支持数据结构已经很久没有使用 16 位数字了。有人尝试过制作 TeX 的修改版本,将无穷大设置为更大的值吗?这有帮助吗?
答案1
这是一个没有答案的老问题,虽然我没有在 TeX 实现中增加 badness 值,但我认为应该将一些事情放入正确的上下文中。
首先:不是,\badness
不是 16 位整数。它是一个完整的 TeX 整数,因此可以大到 $2^{31}-1$。而且 TeX 使用一个大于 10000 的值:\setbox0=\hbox to 1pt{?}\showthe\badness
给出 1000000,显然不是 16 位数字。
您可能知道,在换行期间,badness 为 800 表示已用空间是可用空间的两倍。这看起来很糟糕。(如果出现这样的值,我会重写我的文本。)badness 为 2700 表示是三倍,6400 表示是四倍,12500 表示是五倍,21600 表示是六倍。TeXbook 第 29 页显示了效果。
那么,当换行时甚至小于 1000 的值都无法容忍时,为什么要开始区分 12500 和 21600 的不良值呢?分页是类似的,但有理由说明不良值可能比换行时要大一些。没有,\tolerance
只有参数\vbadness
。
TeX 本身具有 dimen 参数\emergencystretch
,可以人为地增加换行时的不良度限制。Knuth 引入它是为了避免过高的值\tolerance
。参见
https://tug.org/TUGboat/tb10-3/tb25knut.pdf,第 327 页。(据我所知 也\sloppy
使用了\emergencystretch
;因此它不仅仅是设置
\tolerance
为高值。)
因此,正如@DavidCarlisle 在评论中指出的那样,增加范围没有多大意义。
最后说明一下;从你的个人资料中,我发现你可能没有使用过 TeX78,但你可能知道文件 errorlog.tex 是什么。TeX78 的第 296 条是
R296. 强制 \\{badness} 最多为 $10^{19}$。@108
所以,很明显,\badness
当时也不是 16 位的。也许有人会说 Knuth 试验了一种 TeX,其不良程度范围大于 0-10000。但我没有研究过 TEXSEM.SAIL 中的代码,它可能代表不同的概念。