[Tex/LaTex] LaTeX – a single code listing over multiple pages

listings

I'm using the lstlisting package in my diploma thesis to include code snippets. Unfortunately one of them won't fit on a single page. Stil LaTeX won't split it over multiple pages and instead the text goes under the bottom of the page.

What am I doing wrong? My setup follows.

...
\newfloat{Algorithm}{t}{lop}
...
\lstset{ %
basicstyle=\footnotesize,       % the size of the fonts that are used for the code
numbers=left,           % where to put the line-numbers
numberstyle=\footnotesize,  % the size of the fonts that are used for the line-numbers
stepnumber=1,           % the step between two line-numbers. If it is 1 each line will be numbered
numbersep=5pt,          % how far the line-numbers are from the code
backgroundcolor=\color{white},  % choose the background color. You must add \usepackage{color}
showspaces=false,           % show spaces adding particular underscores
showstringspaces=false,     % underline spaces within strings
showtabs=false,         % show tabs within strings adding particular underscores
frame=single,           % adds a frame around the code
tabsize=2,              % sets default tabsize to 2 spaces
captionpos=b,           % sets the caption-position to bottom
breaklines=true,            % sets automatic line breaking
breakatwhitespace=false,        % sets if automatic breaks should only happen at whitespace
escapeinside={\%*}{*)}      % if you want to add a comment within your code
}
...
\begin{Algorithm}[!htp]
   \begin{lstlisting}[mathescape]
... a code snippet which is way too long ...
   \end{lstlisting}
   \caption{caption}
   \label{label}
\end{Algorithm}
...

Best Answer

As floats are by definition and concept single-page (at most) entities, you're going to have to work around this - here are a few suggestions:

  1. Don't make it a float, put long bits of code in an appendix (often stylistically better but I don't know how the code relates to what you're writing)
  2. Don't make it a float, just put it inline (maybe as a (sub)subsection of its own)
  3. Make it multiple floats by specifying the line numbers to include in each float. A bit of a kludge but would achieve what you're after
  4. Include only the code really required.

My personal approach would (and probably soon will) be a combination of 1,3 and 4 - I bet there's quite a bit that doesn't really need discussion in the body, but should be included for completeness. So stick the lot in an appendix, and put the bit that needs discussion in a float near the discussion. If the code runs to multiple pages, it will be divorced from any text discussing it anyway.

I admit this may not be the answer you were looking for, and it comes from a physics perspective, where floats (in the normal sense of figures and tables) are discussed in the body, ideally not too far from where they occur.