
Я работаю над документом, который содержит много листингов (а именно, примеры кода), но не так много текста. Большинство из этих листингов состоят всего из пары строк, а некоторые занимают несколько страниц. В конце страницы в середине листинга вставляется разрыв.
(источник:warmonkey.org)
Я не хочу, чтобы короткие списки были разбиты по страницам. Вместо этого короткие списки должны быть просто перемещены на следующую страницу, оставляя немного свободного места в конце предыдущей страницы.Идеальным решением было бы определение порогового значения размера листинга, при превышении которого листинги разбиваются по страницам, а при превышении которого листинги автоматически перемещаются в начало следующей страницы.
(источник:warmonkey.org)
Ничего подобного в интернете я не нашел.По крайней мере, я узнал, как предотвратить разбиение отдельных списков на страницы, а именно, поместить их на мини-страницу.Помещая небольшие списки на мини-страницы, а длинные списки оставляя как есть (вручную), я почти получаю то, что хочу.
Однако проблема, с которой я столкнулся, заключается в том, что при перемещении листинга на следующую страницу листинги (и текст) на предыдущей странице «засасываются» в нижнюю часть страницы.! Это приводит к пробелам между заголовком и началом контента, а не между концом контента и концом страницы, что для меня не имеет особого смысла. Я уверен, что есть способ предотвратить это, просто я понятия не имею, как...
(источник:warmonkey.org)
Ниже приведен пример кода.(обратите внимание, что он такой длинный только потому, что я не нашел способа заполнить списки случайным текстом, поэтому мне пришлось вручную вставлять много текста-заполнителя). Команды мини-страницы прокомментированы, код соответствует скриншоту № 1. Если команды мини-страницы раскомментированы, результат будет выглядеть как скриншот № 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
к вашей преамбуле (которая является значением по умолчанию для односторонней `article) заставит LaTeX дополнить все короткие страницы растягиваемым пространством внизу страницы.