\documentclass{article}
\begin{document}
aaa
\vspace*{100cm}
bbb
\end{document}
我期望aaa
放在第一页,然后看到 100cm 的空白(分布在许多页面上),最后bbb
。但是,第 1 页是空的,然后第 2 页有空aaa
,然后文档结束。为什么?
答案1
vspace 是一个大块。因此,您会得到一个满溢的框,而 bbb 位于页面之外的某个地方。aaa 会随空间一起移动到第 2 页,因为 \vspace* 之前没有断点。要获得所需的结果,您最好在循环中使用较小的 vspace:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
aaa
\foreach\x in {1,2,...,100}
{\penalty0 \vspace*{1cm}}
bbb
\end{document}
答案2
您实际上得到的是一大块不可分割的空白,并且由于 LaTeX 的一个特性,如果第一页超出了容量,则会生成一个空白页,内容将移至下一页,而下一页又会超出容量。“bbb”消失在纸张底部边缘以下约一米处。
这是一个\breakablevspace
不会出现此问题的宏:它将保留请求的空间,并将其划分为必要的空白页。尽情享受吧,我不会给出解释:请阅读书籍。;-)
可以说,该空间实际上是 2845.27559pt,即正好是 100cm。
\documentclass{article}
\makeatletter
\newdimen\bvs@temp
\newcommand{\breakablevspace}[1]{%
\par
\bvs@temp=#1\relax
\breakable@vspace
}
\newcommand{\breakable@vspace}{%
\ifdim\dimexpr
\ifdim\pagegoal=\maxdimen
\textheight
\else
\pagegoal-\pagetotal
\fi
\relax<\bvs@temp
\bvs@temp=\dimexpr\bvs@temp
\ifdim\pagegoal=\maxdimen
-\textheight
\else
-\pagegoal+\pagetotal
\fi
\relax
\vspace*{\fill}%
\newpage
\hrule height\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
\breakable@vspace
{\vspace*{\bvs@temp}}%
}
\makeatother
\begin{document}
aaa
\breakablevspace{100cm}
bbb
\end{document}