我在我的毕业论文中使用该lstlisting
软件包来包含代码片段。不幸的是,其中一个代码片段无法放在一页上。Stil LaTeX 不会将其拆分到多页上,而是将文本放在页面底部。
我做错了什么?我的设置如下。
...
\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}
...
答案1
因为浮动元素在定义和概念上是单页(最多)实体,所以您必须解决这个问题 - 这里有一些建议:
- 不要让它成为浮点数,把长段代码放在附录中(通常在风格上更好,但我不知道代码与你正在写的内容有何关系)
- 不要让它浮动,只需将其放在内联即可(可能作为其自身的(子)部分)
- 通过指定每个浮点数中包含的行号,使其成为多个浮点数。有点杂乱,但可以实现你想要的效果
- 仅包含代码真的必需的。
我个人的做法是(可能很快就会)将 1、3 和 4 结合起来——我敢打赌,有很多内容实际上不需要在正文中讨论,但为了完整性应该包括在内。因此,将所有内容放在附录中,并将需要讨论的部分放在讨论附近的浮动部分中。如果代码运行到多页,它将与讨论它的任何文本分开。
我承认这可能不是您想要的答案,它来自物理学的角度,其中浮点数(通常意义上的图形和表格)在正文中讨论,理想情况下不要距离它们出现的位置太远。
答案2
您可以使用定义浮动\lstset
参数
float=H,
您还可以使用以下方式定义标签和标题
\begin{lstlisting}[label={lst:firstLst},caption={The first listing}]
\end{lstlisting}
然后你的列表就会浮动,并带有标题和标签。我认为,你的算法环境就不再有必要了。