4

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}
...
3

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.

5

You can define floating parameter in \lstset with

float=H,

and further you can define label and caption with

\begin{lstlisting}[label={lst:firstLst},caption={The first listing}]

\end{lstlisting}

Then your listing is floating and has caption and label. The use of your algorithm enviroment is then imho not necessary anymore.

  • Will LaTeX be able to split the listing into multiple pages (if necessary) then? – Dušan Rychnovský Nov 29 '13 at 8:20
  • @DušanRychnovský: No, as it is still a float. – Daniel Nov 29 '13 at 9:10
  • 2
    @Cv4: To my understanding, this does not solve the OP's question. The point is the breaking across page boundaries. – Daniel Nov 29 '13 at 9:11
  • @Daniel In my current project the listings can break across page boundaries and I am using float option float=H. – Cv4 Dec 2 '13 at 13:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.