我想在同一页的小页面后添加均匀的垂直间距。换句话说,相邻小页面之间的垂直间距、最后一个小页面与页面底部之间的垂直间距应该相同。
预期页面布局:
当所有小页面可以放在一页中时,排版是可以的。但是当所有小页面扩展到多页时,页面中最后一个小页面后没有垂直空间。
梅威瑟:
\documentclass[a4paper]{article}
\usepackage[pass,showframe]{geometry}
\usepackage[demo]{graphicx}
\usepackage{pgffor}
\usepackage{multicol}
\begin{document}
\foreach \img / \imgw / \imgh in {{xxx.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.7\textheight}}} {
\noindent%
\begin{minipage}[t]{\linewidth}%
\includegraphics[width=\imgw,height=\imgh]{\img}%
\end{minipage}\par\vfill%
}
\end{document}
如何实现预期的布局?
编辑:提案实验
由于小页面可能包含我的真实 TeX 源中的文本、标题和图像,因此我尝试了以下建议:
\vspace*{\fill}\pagebreak[0]
来自@egreg\vfill\null
来自@Herbert
当小页面只包含图片时,布局看起来相同。当小页面包含一行文本和一张图片时,布局看起来相同。
但当小型页面包含标题和图像时,\vspace*{\fill}\pagebreak[0]
布局更紧凑,反之,\vfill\null
布局相对松散。
梅威瑟:
\documentclass[a4paper]{article}
\usepackage[pass,showframe]{geometry}
\usepackage[demo]{graphicx}
\usepackage{pgffor}
\usepackage{caption}
\begin{document}
\foreach \img / \imgw / \imgh in {{xxx.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}}%
} {
\noindent%
\begin{minipage}[t]{\linewidth}%
\captionof{figure}{This is a caption}
\includegraphics[width=\imgw,height=\imgh]{\img}%
\end{minipage}\par\VFILL_PLACEHOLDER
}
\end{document}
问题是/null
空间行为如何改变?
答案1
\vfill
在分页符处被丢弃,\vspace*{\fill}
不是。
\documentclass[a4paper]{article}
\usepackage[pass,showframe]{geometry}
\usepackage[demo]{graphicx}
\usepackage{pgffor}
\usepackage{multicol}
\begin{document}
\foreach \img / \imgw / \imgh in {{xxx.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}}} {%
\noindent
\begin{minipage}[t]{\linewidth}%
\includegraphics[width=\imgw,height=\imgh]{\img}%
\end{minipage}\par\vspace*{\fill}
}
\end{document}
如果在此过程中需要分页,可以添加\pagebreak[0]
:
\documentclass[a4paper]{article}
\usepackage[pass,showframe]{geometry}
\usepackage[demo]{graphicx}
\usepackage{pgffor}
\usepackage{multicol}
\begin{document}
\foreach \img / \imgw / \imgh in {{xxx.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.2\textheight}},
{yyy.png/{\linewidth}/{0.7\textheight}}} {%
\noindent
\begin{minipage}[t]{\linewidth}%
\includegraphics[width=\imgw,height=\imgh]{\img}%
\end{minipage}\par\vspace*{\fill}\pagebreak[0]
}
\end{document}
答案2
答案3
问题是\null
空间行为如何改变?答案:
\vspace*{\fill}\pagebreak[0]
在 TeX 原始级别上确实如此\penalty10000\vfill\penalty0
。惩罚没有维度,也就是说,只有\vfill
从维度的角度来看。
\vfill\null
\vfill\hbox{}
在 TeX 原始级别上确实如此。如果\hbox
将 放入主垂直列表,\baselineskip
通常会添加 (不是整个 baselineskip,这取决于前一个框的深度)。因此,\vfill
从 加上一个维度\baselineskip
。这比第一种情况更大,它是不一样的。
此外,第二种情况在 之前不包含\nobreak
(别名\penalty10000
)\vfill
,因此分页符可以在 处发生,\vfill
并被\vfill
删除。但第一种情况保留\vfill
,并且分页符只能在 处进行\penalty0
。