页面末尾的 vspace

页面末尾的 vspace

我使用 来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厘米

a15

5厘米

b5

3厘米 c3

\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}

相关内容