使用floats
和listings
包,我定义了一个用于代码列表的浮点数以及使用它的快捷方式,如下所示:
\usepackage{floats}
\usepackage{listings}
\newfloat{program}{tbphH}{lop}[section]
\floatname{program}{Program}
\newcommand{\codefrom}[2][Matlab]
{
\begin{program}[p]
\lstinputlisting[language=#1]{#2}
\caption{#2}
\label{#2}
\end{program}
}
现在,如果代码文件太长,它就会继续延伸到页面之外。相反,我想自动在页面末尾拆分浮动,然后继续到下一页。
有没有办法在不牺牲浮点结构的情况下实现这一点?如果没有,是否有其他方法可以像使用浮点数一样轻松地获得编号等?
答案1
前几天我花了一些时间尝试做类似的事情。似乎没有办法在 LaTeX 中分页浮动。例如这讨论,据我所知,它基本上说的是浮动的哲学是它们被放置在它们适合的地方,如果它们不适合,它们将继续在文本下方浮动。因此,如果浮动高于页面高度,它们将继续浮动。我真希望有办法……
至于像浮点数那样进行编号,我想你可以使用\newcounter
,\addtocounter{counter}{value}
和包装你自己的计数器\value{counter}
。
答案2
我不知道自动分页功能,但该listings
软件包能够将列表分成几部分,继续行号等。它也适用于浮动,但我不知道如何抑制编号。在此示例中,每个浮动都有自己的编号。
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{language=Pascal}
\begin{lstlisting}[float,name=Test,numbers=left,caption={our listing}]
for i:=maxint to 0 do
begin
{ do nothing }
end;
\end{lstlisting}
And we continue the listing.
\begin{lstlisting}[float,name=Test,numbers=right,caption={our listing continued}]
Write('Case insensitive ');
WritE('Pascal keywords.');
\end{lstlisting}
\end{document}