我使用 来vspace
在文本块之间产生一个空白区域,供人们书写。当 恰好vspace
位于页面末尾时,下一个文本块将从下一页的顶部开始,而在这种情况下,希望 的“剩余部分”vspace
应该溢出下一页。我该如何更改代码来实现这一点?谢谢。
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[2-5] % towards the end of the page
\vspace{15cm} % 15 cm of white space desired
\lipsum[2-3] % appears at the top of the next page
\end{document}
答案1
这可能满足您的需要。 \xvspace{}{}
允许您指定#1
要执行的 vspace 增量数,单位为#2
。通过在每个增量之间插入\par
并离开垂直模式,循环的最后元素将在后续页面上执行。
我必须在每个循环周期中减去\baselineskip
和\parskip
,以抵消插入的 s 的影响\par
。
在 MWE 中,我打印了一条 5 厘米高度的规则,作为参考,稍后我插入\xvspace{10}{cm}
。
\documentclass{article}
\usepackage[pass,showframe]{geometry}
\usepackage{lipsum}
\usepackage{forloop}
\newcounter{vspaceinc}
\newcommand\xvspace[2]{\par\leavevmode%
\forloop{vspaceinc}{0}{\thevspaceinc<#1}{%
\vspace{\dimexpr1#2-\baselineskip-\parskip}\leavevmode\par}%
}
\begin{document}
\rule{1pt}{5cm}
\lipsum[2-3] % towards the end of the page
\xvspace{10}{cm} % 15 cm of white space desired
\lipsum[2-3] % appears at the top of the next page
\end{document}
答案2
您可以使用needspace
类似方法;即测量页面上剩余的空间,并\vspace*
在下一页顶部插入一个分隔符和一个附加分隔符,或者仅在下面的最小示例中插入一个常规的 . \vspace
。\insertgap{<len>}
\documentclass{article}
\usepackage{lipsum}
\newlength{\gapinsert}
\newcommand{\insertgap}[1]{%
\par
\ifdim\dimexpr\pagegoal-\pagetotal<#1
% Capture space remaining after page break
\setlength{\gapinsert}{\dimexpr#1-\pagegoal+\pagetotal}%
\pagebreak% Insert page break
\vspace*{\gapinsert}% Insert additional/remaining gap; https://tex.stackexchange.com/q/33370/5764
\else
% Enough space available on page
\vspace{#1}% Insert regular vspace
\fi
}
\begin{document}
\lipsum[1-4]
\vspace{8cm}
\lipsum[5]
\pagebreak
\lipsum[1-4]
\insertgap{8cm}
\lipsum[5]
\end{document}
答案3
该\addblockspace{..}
命令会根据需要添加白色垂直空间。如果该空间大于页面上已有的空间,它会填充页面并使用 \vspace*{} 将剩余空间添加到下一页
我添加了一个网格来帮助测量两页上的空间并测试代码。
15厘米
5厘米
\documentclass{article}
\usepackage{lipsum}
% ******************************** needed
\usepackage{calc}
\usepackage{ifthen}
\newlength{\spacetobottom}
\newlength{\spacetoadd}
\newcommand{\addblockspace}[1]{% add blank space as needed
\setlength{\spacetobottom}{\textheight-\pagetotal} % space left on the page
\setlength{\spacetoadd}{#1} % total space needed
\ifthenelse{\spacetobottom > \spacetoadd}%
{\parbox[t][\spacetoadd]{0pt}{}}%% stay in the first page
{\vspace{\fill}\newpage\vbox{\vspace*{#1 -\spacetobottom}}} % start a newpage and add the difference
}
% ********************************
% ----------------------------------*only to measure the space
\usepackage{showframe}
\newcommand{\gridpaper}{% draw a grid spaced 1em
\begin{tikzpicture}
\draw[line width=.4pt,draw=black!30] (0,0) grid[step=1cm] (\paperwidth,\paperheight);
\end{tikzpicture}%
}
\usepackage{tikz}
\usepackage{background}
\backgroundsetup{%
angle=0,
contents=\gridpaper,
scale=1,
}
% -------------------------------------*
\begin{document}
\lipsum[2-5] % towards the end of the page
\addblockspace{15cm} % 15cm of blank space needed <<<<<<<<<<<
2. \lipsum[2-3] %
\end{document}