使用弹性长度——它们何时起作用?

使用弹性长度——它们何时起作用?

我想知道为什么弹性长度似乎\fill只在特定条件下才起作用。

例如如果我写

A \hspace{\fill} B

我得到了想要的 A 左对齐、B 右对齐的结果。但是如果我写

A \rule{\fill}{1mm} B

导致零宽度规则。为了确保我没有混淆参数,我还尝试了\rule{1mm}{\fill}。使用固定宽度(如\linewidth或)2cm \rule可以正常工作。

同样,当我写

\begin{minipage}{\fill}
  Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. 
\end{minipage}

我得到的输出看起来像

Test.
Test.
Test.
Test.
Test.
...

即大概再次为零宽度。

很容易找到一些Google 上针对每个具体问题的解决方案,通常归结为“将这些行写入你的文件”或“导入该包”。我想了解为什么首先要解决任何问题,这样我将来才能找到自己的解决方案。


一些最小的可编译示例用于演示某些情况:

\documentclass{article}

\parindent=0cm
\parskip=\fill % use of fill for vertical spacing.

\begin{document}

A \hspace{\fill} B 

C \rule{2cm}{1mm} D

E \rule{\fill}{1mm} F

\begin{minipage}{\textwidth}
  Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test.
  Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test.
\end{minipage}

\begin{minipage}{\fill}
  Test. Test. Test. Test. Test. Test. 
\end{minipage}

\end{document}

编译截图

答案1

橡胶(弹性)长度适用于\hspace或,但不适用于设置、或环境\vspace等命令所需的长度。\rule\parbox\makeboxminipage

\fill命令相当于0pt plus 1fill,因此当需要刚性长度时,TeX 会将其强制转换为尺寸,在本例中为0pt。相反,\parskip接受橡胶长度作为其参数,因为它提供类似于 的垂直间距\vspace。使用

\setlength{\parskip}{\fill}

您告诉 TeX 需要零宽度的粘连,但\textheight必要时可以使用此粘连来填充。通常的值为0pt plus 1pt,因此此空间不会增加太多,除非分页需要根据控制分页的所有参数构建一个未满的框。

为什么\parbox不能minipage为它们的参数指定橡胶长度值?因为 TeX 想要在其中排版段落,为此它需要提前知道所需的线宽。

另一方面,你可以得到“橡皮规则”,但只能诉诸较低级别的命令。

A \leaders\hrule\hskip\fill{} B

(也\hskip\fill可以是等价的\hfill),你得到的结果与

A \hspace{\fill} B

但空间充满了规则。这是一个例子:

\documentclass{article}

\setlength{\textwidth}{5cm} % just for the example

\begin{document}
\noindent A \hspace{\fill} B

\noindent A \leaders\hrule\hskip\fill{} B

\noindent A \leaders\hrule height -1pt depth 1.4pt\hfill{} B

\end{document}

请注意第二条规则是如何降低的。

在此处输入图片描述

相关内容