划分垂直空白区域,用于相对放置文本

划分垂直空白区域,用于相对放置文本

\vfill我最近了解到,我可以通过利用文本前后的位置,将文本垂直居中在页面剩余空间中,就像这样

\documentclass{article}
\usepackage{lipsum}
\def\ctext#1{\begin{center}\MakeUppercase{#1}\end{center}}
\begin{document}
\lipsum[1]
\vfill
\ctext{center}
\vfill
\end{document}

这会将文本前后的空白空间各分为 50%。有没有办法将其推广到整个页面中相对放置文本?换句话说,一个命令(比如说)会\vpfill创建一个垂直空间,该空间是页面末尾剩余空间的百分比。

% First page is exactly as before but using \vpfill intsead of \vfill
\lipsum[1] 
\vpfill{0.5} 
\ctext{center 1}
% \vpfill{0.5} % Unnecessary (?) since 50% of the space remains anyways

\newpage % Second page 
\lipsum[1]
\vpfill{0.4}  % Creates space that is 40% of the remaining empty space
\ctext{center 1}
\vpfill{0.2}  % Creates space that is 20% of the remaining empty space 
\ctext{center 2}
% \vpfill{0.4}  % Unnecessary (?) since 40% of the space remains anyways

答案1

您可以给出小数fills 和fils (参见这个问题) 使用原语\vskip。在以 结尾的页面上\clearpage(例如文档的最后一页),\vfil将在文档末尾插入 a 。因此,您要求的除法可以轻松使用以下两个\vskips 来实现。

\documentclass{article}

\begin{document}

Hello World!

\vskip 0pt plus 1fil\relax % 40 % of the remaining space.
foo
\vskip 0pt plus .5fil\relax % 20 % of the remaining space.

Bye World!

% \clearpage inserts a \vfil automatically, i.e. another 40 % of the remaining space.

\end{document}

MWE 输出

为获得百分比,您必须计算的比例是您正在考虑的位置的拉伸量除以页面上的总拉伸量,即1fil / 2.5fil = 40 %第一个和最后一个,.5fil / 2.5fil = 20 %第二个\vskip

答案2

这里就是类似的东西。它不需要任何包,但只接受表示垂直填充百分比的整数。用法是

\vpfill{<percentage>}
<stuff>
\vrfill

这是 MWE,该geometry包仅因为其showframe选项而被加载,其目的是为了说明这有效。

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{lipsum}
\def\ctext#1{\begin{center}\MakeUppercase{#1}\end{center}}
\newcounter{pft}
\newcommand{\vrfill}{\vfill}
\newcommand\vpfill[1]{\setcounter{pft}{0}%
\loop\ifnum\value{pft}<#1\relax
\vfill\stepcounter{pft}%
\repeat
\renewcommand{\vrfill}{\vpfill{\the\numexpr100-#1}}}
\begin{document}
\lipsum[1]
\vfill
\ctext{center}
\vfill
\newpage
\lipsum[1]
\vpfill{25}
\ctext{center}
\vrfill
\newpage
\lipsum[2]
\vpfill{60}
\ctext{center}
\vrfill
\end{document}

在此处输入图片描述

如果需要的话,可以将其推广到千分之一或任何分数。

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{lipsum}
\def\ctext#1{\begin{center}\MakeUppercase{#1}\end{center}}
\newcounter{pft}
\newcommand{\vrfill}{\vfill}
\newcommand\vpfill[2][100]{\setcounter{pft}{0}%
\loop\ifnum\value{pft}<#2\relax
\vfill\stepcounter{pft}%
\repeat
\renewcommand{\vrfill}{\vpfill{\the\numexpr#1-#2}}}
\begin{document}
\lipsum[1]
\vfill
\ctext{center}
\vfill
\newpage
\lipsum[1]
\vpfill[1000]{333}
\ctext{333/1000 of the remaining space}
\vrfill
\newpage
\lipsum[2]
\vpfill[1111]{789}
\ctext{333/1111 of the remaining space}
\vrfill
\end{document}

在此处输入图片描述

答案3

也许一个简单(繁琐)的解决方案是使用\vfill多次。这样,您可以获得任意百分比,具体取决于您重复的频率\vfill

\documentclass{article}
\usepackage{lipsum}
\def\ctext#1{\begin{center}\MakeUppercase{#1}\end{center}}
\begin{document}
\lipsum[1]
\vfill\vfill        %   40%
\ctext{center 1}
\vfill              %   20%
\ctext{center 2}
\vfill\vfill        %   40%
\end{document}

答案4

\documentclass{article}
\usepackage{lipsum}
\def\ctext#1{\begin{center}\MakeUppercase{#1}\end{center}}
\begin{document}
\lipsum[1] 
\vspace{.5\textheight} 
\ctext{center 1}
\newpage 
\lipsum[1]
\vspace{.4\textheight} 
\ctext{center 1}
\vspace{.2\textheight} 
\ctext{center 2}
\end{document}

请注意,页面顶部\vspace{....}不起作用,但\vspace*{...}确实起作用。

相关内容