\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
您可以给出小数fill
s 和fil
s (参见这个问题) 使用原语\vskip
。在以 结尾的页面上\clearpage
(例如文档的最后一页),\vfil
将在文档末尾插入 a 。因此,您要求的除法可以轻松使用以下两个\vskip
s 来实现。
\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}
为获得百分比,您必须计算的比例是您正在考虑的位置的拉伸量除以页面上的总拉伸量,即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*{...}
确实起作用。