addvspace 如何处理橡胶部件?

addvspace 如何处理橡胶部件?

我的理解是将\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*

相关内容