12

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

2 Answers 2

8

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.

3

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.

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .