我想知道为什么弹性长度似乎\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
\makebox
minipage
该\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}
请注意第二条规则是如何降低的。