
Estou trabalhando em um documento que contém muitas listagens (ou seja, exemplos de código), mas não muito texto. A maioria dessas listagens tem apenas algumas linhas e algumas abrangem várias páginas. No final de uma página, é inserida uma quebra no meio de uma listagem.
(fonte:Warmonkey.org)
Não quero que as listagens curtas sejam divididas nas páginas. Em vez disso, as listagens curtas devem ser movidas para a próxima página, deixando algum espaço em branco no final da página anterior.A solução ideal seria se eu pudesse definir um limite para o tamanho da listagem além do qual as listagens seriam divididas nas páginas, mas abaixo do qual as listagens seriam movidas automaticamente para o início da próxima página.
(fonte:Warmonkey.org)
Não encontrei nada parecido com isso na web.Pelo menos descobri como evitar que listagens únicas sejam quebradas nas páginas, ou seja, colocando-as em uma minipágina.Ao colocar listagens pequenas em minipáginas, mas deixando listagens longas como estão (à mão), quase consigo o que quero.
O problema que tenho, entretanto, é que quando uma listagem é movida para a próxima página, as listagens (e o texto) da página anterior são "sugadas" para o final da página.! Isso resulta em espaços em branco entre o título e o início do conteúdo, em vez de entre o final do conteúdo e o final da página, o que não faz muito sentido para mim. Tenho certeza de que há alguma maneira de evitar isso, só não tenho ideia de como...
(fonte:Warmonkey.org)
Abaixo está um código de exemplo(observe que é apenas esse tempo porque não encontrei nenhuma maneira de preencher as listagens com texto aleatório, então tive que inserir muitos textos de espaço reservado manualmente). Os comandos da minipágina são comentados, o código corresponde à captura de tela nº 1. Se os comandos da minipágina não forem comentados, o resultado será semelhante à captura de tela nº 2. A aparência que desejo é mostrada na captura de tela nº 3 (conseguida descomentando a quebra de página).
EDITAR: Adicionado dois lados à documentclass(o código de amostra inicial não conseguiu reproduzir o comentário porque removi o dois lados logo antes de postar, agora sabendo que isso realmente causou o problema).
%#############################################################################
\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}
%#############################################################################
Desde já, obrigado!
Responder1
As imagens mostram a diferença entre \flushbottom
e \raggedbottom
, adicionar \raggedbottom
ao seu preâmbulo (que é o padrão para artigo de lado único) fará com que o LaTeX preencha quaisquer páginas curtas com espaço extensível na parte inferior da página.