我怎样才能使 vfill 工作而不添加任何文本?

我怎样才能使 vfill 工作而不添加任何文本?

\vfill在两个文本之间使用效果如下:

\newpage
bla
\vfill
blabla

但如果前面没有文本,它就不起作用:

\newpage
\vfill
blabla

如何实现这一点?

答案1

在之前添加一个空框如\mbox{}\hbox{}\null简称或)\vfill使其起作用。

\newpage
\null
\vfill
blabla

答案2

\vspaceLaTeX 提供了添加空格量的宏,\vspace{\fill}与 有相同的效果\vfill,也有相同的缺点。LaTeX提供1 个宏,\vspace*表示“我真的、真的希望你在这里留出空间。”这样\vspace*{\fill}就可以了。也就是说,

\newpage
\vspace*{\fill}%
blabla

将其blabla置于底部。

1实际上,\vspace\vspace*是相同的宏,但将它们视为变体宏是一个方便的谎言。

答案3

了解 TeX 的分页机制如何工作非常重要,至少要了解其主要方面。

当 TeX 决定在哪里分页时,它会将不适合该页面的内容推回到“最近贡献列表”并进行分页。

通常不适合的是段落的最后一行,但垂直空间也可能发生中断(这种中断发生在总是在垂直空格之前)。现在执行了中断并将垂直空格放回去重新考虑;但是没有人希望以垂直空格开始一个正常的页面,所以 TeX 让它消失。

除非这个垂直空间用以下方式声明\vspace*:这种垂直空间是绝不算是休息一下,就像一个隐形的大人物。

如何选择分页符并不重要:即使在文档的开头也会发生这种情况。如果你说

\begin{document}
\vspace{3cm}

这个垂直空间就不会出现。

使用\nullafter\newpage可以有效避免垂直空间的消失,因为它\null会在页面上放置一个空框\vspace类似于零宽度和高度字符)。

因此,建立一个奉献页面的“好”方法是

\cleardoublepage
\thispagestyle{empty}
\vspace*{\stretch{1}}
\begin{flushleft}
\itshape Dedicated to the people on \TeX.SX\\
         on the occasion of the first birthday\\
         of that wonderful site
\end{flushleft}
\vspace{\stretch{2}}
\cleardoublepage

实际上\vspace*{\stretch{1}}相当于\null\vfill;但用 指定拉伸\stretch可以产生很好的效果:这里奉献后的空白是其之前的空间的两倍。

答案4

~是一个不间断空格。只需将其放在页面顶部即可:

\newpage
~\vfill
blabla

相关内容