![小页面中的列表将上一页的内容拖到底部](https://linux22.com/image/305930/%E5%B0%8F%E9%A1%B5%E9%9D%A2%E4%B8%AD%E7%9A%84%E5%88%97%E8%A1%A8%E5%B0%86%E4%B8%8A%E4%B8%80%E9%A1%B5%E7%9A%84%E5%86%85%E5%AE%B9%E6%8B%96%E5%88%B0%E5%BA%95%E9%83%A8.png)
我正在处理一个包含许多列表(即代码示例)但文本不多的文档。大多数列表只有几行,少数列表跨越多页。在页面末尾,列表中间会插入一个换行符。
(来源:warmonkey.org)
我不希望短列表跨页显示。相反,短列表应该直接移到下一页,在上一页末尾留出一些空白。理想的解决方案是,如果我可以定义列表大小的阈值,超过该阈值列表就会跨页拆分,但低于该阈值列表会自动移动到下一页的开头。
(来源:warmonkey.org)
我在网上还没找到类似的东西。至少我已经找到了如何防止单个列表跨页显示的方法,即将它们放入小页面中。通过将小列表放入小页面但保留长列表原样(手动),我几乎得到了我想要的东西。
然而,我遇到的问题是,当列表移动到下一页时,上一页的列表(和文本)会被“吸”到页面底部!这会导致标题和内容开头之间出现空白,而不是内容结尾和页面结尾之间出现空白,这对我来说毫无意义。我确信有某种方法可以防止这种情况,但我不知道该怎么做……
(来源:warmonkey.org)
下面是示例代码(请注意,它只有那么长,因为我没有找到任何方法用随机文本填充列表,所以我不得不手动插入大量占位符文本)。minipage 命令已注释,代码与屏幕截图 #1 相对应。如果取消注释 minipage 命令,结果将与屏幕截图 #2 类似。我想要的效果显示在屏幕截图 #3 中(通过取消注释分页符实现)。
编辑:将 twoside 添加到 documentclass(最初的示例代码无法重现该评论,因为我在发布之前删除了 twoside,现在知道这实际上导致了问题)。
%#############################################################################
\documentclass[11pt,twoside,a4paper]{article}
%#############################################################################
\usepackage{lipsum} % dummy text
\usepackage{fixltx2e} % textsubscript and textsuperscript
\usepackage{listings}
\lstset{frame=single}
%#############################################################################
\begin{document}
%#############################################################################
%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
\section{A few listings}
%------------------------------------------------------------------------------
\lipsum[2]
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%###\noindent\begin{minipage}{\hsize}
\begin{lstlisting}[caption=foo]
not
such
a
huge
listing
\end{lstlisting}
%###\end{minipage}
%###\noindent\begin{minipage}{\hsize}
\begin{lstlisting}[caption=foo]
yet
another
short
one
,
though
a
bit
longer
\end{lstlisting}
%###\end{minipage}
%###\newpage
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%###\noindent\begin{minipage}{\hsize}
\begin{lstlisting}[caption=foo]
this
one
is
a
bit
larger
,
so
it
doesn
not
fit
onto
the
page
anymore
!
but
it
still
fits
on
one
page
!
\end{lstlisting}
%###\end{minipage}
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{lstlisting}[firstnumber=494,label=code:assoc494,caption=foo]
this
particular
listing
on
the
other
hand
is
a
lot
longer
than
the
one
before
!
...
finally
it
is
coming
to
an
end
!!
\end{lstlisting}
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%#############################################################################
\end{document}
%#############################################################################
提前致谢!
答案1
图像显示了\flushbottom
和之间的区别\raggedbottom
,添加\raggedbottom
到你的序言(这是单面`文章的默认设置)将导致 LaTeX 在页面底部用可伸缩空间填充任何短页。