如何让 LaTex 准确填满有列的页面?

如何让 LaTex 准确填满有列的页面?

类似问题#1:如何让 LaTeX 精确填满一页?

类似问题#2:用方程填满一页,然后切换到一栏

我需要创建多个页面,每个页面的长度应为一页,格式相同。格式是页面顶部有一列,页面底部有两列。每页将包含不同的文字和图片。

我看过如何让 LaTeX 精确填满一页?我觉得这是让文本适合一页的巧妙方法。但是,我无法对两列使用相同类型的技术。

下面是最简单的无列填充页面的例子:

\documentclass{article}
\usepackage[pass,showframe]{geometry} % just to show the page is filled up
\usepackage{kantlipsum}
\usepackage{multicol}

\begin{document}

\addtolength{\baselineskip}{\fill}

\kant*[1]

\kant[2-3]

\end{document}

页面无列填充的简单示例

如果我添加列,则页面仅通过扩展第一个段落而不是列中的段落来填充。

\documentclass{article}
\usepackage[pass,showframe]{geometry} % just to show the page is filled up
\usepackage{kantlipsum}
\usepackage{multicol}

\begin{document}

\addtolength{\baselineskip}{\fill}

\kant*[1]

\begin{multicols}{2}
\kant[2-3]
\end{multicols}

\end{document}

页面填充列的示例

它可能是用方程填满一页,然后切换到一栏有我的问题的解决方案。但是,我目前对 LaTex 的了解还不足以理解那里是否存在解决方案。

我尝试过下面代码的多种变体,但无法使其在列上运行:

\newcommand{\addstretch}[1]{\addtolength{#1}{\fill}}
\newenvironment{onepage}
  {\newpage\flushbottom
   \addstretch{\baselineskip}
   \addstretch{\abovedisplayskip}
   \addstretch{\abovedisplayshortskip}
   \addstretch{\belowdisplayskip}
   \addstretch{\belowdisplayshortskip}
   \setlength{\parskip}{0pt}}
  {\newpage} 

我将非常感激任何帮助,使列中的文本与其他文本一起扩展,以便页面很好地填充。

答案1

它不会填充到页面末尾的原因是,multicol在平衡列时计算了不需要额外填充的必要高度,并将这些列输出到该高度,因此没有多余的空间需要填充。

此解决方案修补了multicol\s 平衡例程,默认情况下强制列高填满页面上所有剩余空间。我还没有用极端情况测试过,所以我不知道它会有多强健。这种方法的一个缺点是,您不会看到\baselineskip上面单列段落的任何填充,因为 2 列部分占用了所有剩余空间。

作为手动解决方法,我还添加了一个可选参数,让您明确指定列的空间,但除非您精确调整它,否则您将无法再将其推到文本区域的底部。此外,如果您取消注释注释的命令\addtolength,列的底部multicols将被推到文本区域底部的略下方。

\documentclass{article}
\usepackage[pass,showframe]{geometry}
\usepackage{kantlipsum}
\usepackage{multicol}
\usepackage{xparse,xpatch}

\makeatletter

\newlength{\fillcol@height}
\let\fill@columns\balance@columns

\xpatchcmd{\fill@columns}{\vfuzz\z@
  \setbox\count@\vbox to\dimen@}
{\vfuzz\z@
  \ifdim\fillcol@height>\z@ \else
    \fillcol@height\@colroom
  \fi
  \setbox\count@\vbox to\fillcol@height}{}{}

\NewDocumentEnvironment{fillcols}{m o}{
  \IfValueT{#2}{\setlength{\fillcol@height}{#2}}
  \renewcommand{\balance@columns}{\fill@columns}
  \begin{multicols}{#1}
  \addtolength{\baselineskip}{\fill}
}{
  \end{multicols}
}
\makeatother

\begin{document}
%\addtolength{\baselineskip}{\fill}

\kant*[1]

\begin{fillcols}{2}
\kant[2-3]
\end{fillcols}

\end{document}

结果:

在此处输入图片描述

相关内容