![为什么会打印“箱子未满”的消息?](https://linux22.com/image/397630/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E6%89%93%E5%8D%B0%E2%80%9C%E7%AE%B1%E5%AD%90%E6%9C%AA%E6%BB%A1%E2%80%9D%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%9F.png)
在 TeXbook 第 27 页中写道:
并进一步:
如果没有办法满足这些限制,您就会得到一个满满的箱子。
方法如下复制本文:
\input manmac
\begindisplay
\hbox spread-1em{You don't get spaces between words narrower than this,\ and}\cr
\hbox spread+1.679895em{you don't get spaces between words wider than this.}\cr
\enddisplay
\end
问题是:
1)spread
价值观来自哪里
2)为什么如果我们使用,则spread+1.7em
不会打印警告
3)仅当我们说警告时才会开始出现spread+2.9em
- 为什么警告是Underfull \hbox ...
- 不是“盒子过满”(正如书中所说)?
答案1
Knuth 中的语句是关于将段落分成行的。TeX
可以在执行此操作的同时使空格变窄或变宽,但它本身永远不会产生未满的框,只会产生过满的框。要制作未满的框,您必须手动执行某些操作,例如插入手动\break
(或使用\hbox
具有更大跨度的)。
至于 的值spread
,我猜它们是通过反复试验找到的,以达到 Plain TeX 仍然可以接受的最大 badness 值(值为 200)。
您可以使用此代码片段查看r
每个的比例\hbox
:
\tracingonline=1
\showboxdepth=0
\input manmac
\begindisplay
\setbox0=\hbox spread-1em{You don't get spaces between words narrower than this,\ and}%
\showbox0
\box0 \cr
\setbox0=\hbox spread+1.679895em{you don't get spaces between words wider than this.}%
\showbox0
\box0 \cr
\enddisplay
\end