从数学上讲,如果你逐点取反区间 [2,5] 中的点,你会得到区间 [-5,-2]。话虽如此,我预计如果你取反3pt plus2pt minus1pt
,你会得到-3pt minus2pt plus1pt
。如何实际计算这些橡胶长度?首先,在 上运行 pdflatex
\documentclass{article}
\newlength{\myLength}
\begin{document}
\setlength{\myLength}{3pt plus2pt minus1pt}
\setlength{\myLength}{-\myLength}
\the\myLength
\end{document}
吐出
-3.0pt plus -2.0pt minus -1.0pt
这对于人类读者来说是类似的,但是过于复杂,可能不是我们想要的。
答案1
如果你想取消自然宽度 3pt、拉伸分量 2pt、收缩分量 1pt 的粘连,你必须释放以下量的粘连:
-3pt plus -2pt minus -1pt
拉伸和收缩组件互不相关,TeX 每次只使用其中一个组件(或不使用它)。如果需要拉伸一行或一页,则只考虑拉伸组件,如果需要收缩一行或一页,也同样如此。
如果 Knuth 选择将橡胶长度表示为
<natural width> stretchable <stretch component> shrinkable <shrink component>
你的怀疑可能就不会产生了。
关于您所提观点的另一种看法。指定3pt plus 2pt minus 1pt
并不意味着可以使用 2pt 到 5pt 之间的任何间距。
这意味着,当需要收缩时,最终的空间将在 2pt 和 3pt 之间;当进行拉伸时,最佳空间将在 3pt 和 5pt 之间,但它可以以线/页面不良为代价变大。
如果你说
\documentclass{article}
\begin{document}
\rule{100pt}{0.4pt}
\makebox[100pt][s]{a\hspace{3pt plus 2pt minus 1pt}z}
\end{document}
输出将是
因此胶水被拉伸得远远超过 2pt;然而警告
Underfull \hbox (badness 10000) detected at line 9
\OT1/cmr/m/n/10 a z
将发行。相反,
\documentclass[draft]{article}
\usepackage{calc}
\begin{document}
\rule{\widthof{az}+1pt}{0.4pt}
\makebox[\widthof{az}+1pt][s]{a\hspace{3pt plus 2pt minus 1pt}z}
\end{document}
将输出
盒子太满,无法缩小到需要的大小,因为粘合永远不会低于 2pt。
再次,只会使用拉伸组件或收缩组件。