![填充段落前的垂直空间](https://linux22.com/image/468135/%E5%A1%AB%E5%85%85%E6%AE%B5%E8%90%BD%E5%89%8D%E7%9A%84%E5%9E%82%E7%9B%B4%E7%A9%BA%E9%97%B4.png)
我正在处理较小的页面,每页会有一、二或三个短段落。
我希望这些段落垂直居中并且间距大致相等。
我接近\setlength{\parskip}{\fill}
并定义一个\page
命令,即\vspace{\fill}\newpage
或\vfill\newpage
。但是,我无法在每页的第一段之前获得相等的空间。
以下是 MWE 演示此问题
\vspace{\fill}
/\vfill
在分页符之后被丢弃,因此在第一段之前不执行任何操作,但会创建一个比页面上后面的\vspace*{\fill}
内容大得多的空间。\parskip
\vspace{\fill}
\documentclass{article}
\usepackage[paperheight=88mm, paperwidth=62mm, margin=4mm, nomarginpar, showframe]{geometry}
\setlength{\parskip}{\fill}
\setlength{\parindent}{0pt}
\newcommand{\page}{\vspace{\fill}\newpage\vspace{\fill}}
\begin{document}
\page
This should be at approximately 50\%.
\page
This should be at approx 33\%.
This should be at approx 66\%.
\page
This should be at approx 25\%.
This should be at approx 50\%.
This should be at approx 75\%.
\page
\vspace*{\fill}
This page starts with an explicit \verb|\vspace*{\fill}|
You can see the first space is larger than the others.
This should be at 75\%.
\vspace{\fill}
\end{document}
请注意,还有几个类似的未解答的问题:
答案1
我发现使用时行为接近\vspace*{1\fill}
,但无法解释原因。感谢 David Carlisle 对我的另一个(已删除)答案的评论,我想我明白发生了什么。
\vspace*{1\fill}
添加零空格,然后开始一个新段落(添加换行符,然后添加隐式\parskip
(又名\fill
)。因此,答案是使用\vspace*{}
撤消换行符,然后让隐式\parskip
处理其余部分。
\newcommand{\nextpage}{\vspace{\fill}\newpage\vspace*{-\baselineskip}}
这是修正后的 MWE 和结果。它并不完美。使用我的卡尺在我的物理屏幕上测量,更好的值是\vspace*{-1.2\baselineskip}
。我不明白为什么,但这已经足够好了。
\documentclass{article}
\usepackage[paperheight=88mm, paperwidth=62mm, margin=4mm, nomarginpar, showframe]{geometry}
\setlength{\parskip}{\fill}
\setlength{\parindent}{0pt}
\newcommand{\nextpage}{\vfill\newpage\vspace*{-\baselineskip}}
\begin{document}
\nextpage
This should be at approximately 50\%.
\nextpage
This should be at approx 33\%.
This should be at approx 66\%.
\nextpage
This should be at approx 25\%.
This should be at approx 50\%.
This should be at approx 75\%.
\nextpage
This page starts with an explicit \verb|\vspace*{\fill}|
You can see the first space is larger than the others.
This should be at 75\%.
\vspace{\fill}
\end{document}
我觉得第一段有点低