我的理解是将\addvspace
“加法”定义为maxᵢ{vspaceᵢ}
(固定的)。拉伸和收缩会发生什么?这里,我将一个大的不灵活 vspace 添加到一个小的超弹性 vspace 中。
\addvspace{200px plus 2px minus 2px\relax}
\addvspace{10px plus 10px minus 10px\relax}
最终的 vspace 是什么?我可以使用哪些工具来解决它?
答案1
代码(主要在 中\@xaddvskip
)测试请求的长度与已添加的任何紧接在前的长度\ifdim
(忽略拉伸和收缩)并使用两者中较大的一个。使用所选长度的任何拉伸或收缩组件。
因此,您的一对的有效空间与第一个相同。
你可以从代码中看到这一点
\def\@xaddvskip{%
\ifdim\lastskip<\@tempskipb
\vskip-\lastskip
\vskip\@tempskipb
\else
\ifdim\@tempskipb<\z@
\ifdim\lastskip<\z@
\else
\advance\@tempskipb\lastskip
\vskip-\lastskip
\vskip \@tempskipb
\fi
\fi
\fi}
或者通过测试:
\documentclass{article}
\begin{document}
\showoutput
\hrule
\addvspace{200px plus 2px minus 2px\relax}
\addvspace{10px plus 10px minus 10px\relax}
\hrule
\end{document}
这表明
...\rule(0.4+0.0)x*
...\glue 200.75073 plus 2.0075 minus 2.0075
...\rule(0.4+0.0)x*
请注意,如果按其他顺序添加它们,有效长度将相同,但排列不同:
...\rule(0.4+0.0)x*
...\glue 10.03754 plus 10.03754 minus 10.03754
...\glue -10.03754 plus -10.03754 minus -10.03754
...\glue 200.75073 plus 2.0075 minus 2.0075
...\rule(0.4+0.0)x*