如何在 minipages 后添加均匀的垂直空格

如何在 minipages 后添加均匀的垂直空格

我想在同一页的小页面后添加均匀的垂直间距。换句话说,相邻小页面之间的垂直间距、最后一个小页面与页面底部之间的垂直间距应该相同。

预期页面布局: 预期页面布局

当所有小页面可以放在一页中时,排版是可以的。但是当所有小页面扩展到多页时,页面中最后一个小页面后没有垂直空间。

梅威瑟:

\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}
  • \vspace*{\fill}\pagebreak[0]作为\VFILL_PLACEHOLDER 在此处输入图片描述

  • \vfill\null作为\VFILL_PLACEHODER 在此处输入图片描述

问题是/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

    \end{minipage}\par\vfill\null % add empty box

在此处输入图片描述

答案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

相关内容