如何防止 \lstinputlisting 跨页面分割?

如何防止 \lstinputlisting 跨页面分割?

这个问题展示了如何防止将代码直接写入 tex 文件时将长列表拆分为多页。我希望在将代码包含在单独的文件中时实现相同的效果,如下所示\lstinputlisting

\lstinputlisting[label=lst:mylist,caption=A Caption]{code/parametrised.xml}

我该如何修改上述问题中给出的列表环境定义来实现这一点?

\lstnewenvironment{code}[1][]%
  {\minipage{\linewidth} 
   \lstset{basicstyle=\ttfamily\footnotesize,frame=single,#1}}
  {\endminipage}

任何帮助将不胜感激!

编辑:为了清晰起见,问题已重新表述 - 这里的答案与通过确保将列表视为不可破坏的浮动来防止列表跨页拆分有关。但是,这也意味着长度超过一页的列表将不会被分页,并且会超出页面底部。

答案1

将列表声明为浮点数,则它将自动设置在一个框中:

\lstinputlisting[float=h]{<file>}
    

答案2

不要使用 来定义新环境,而是\lstnewenvironment使用常规的 来定义新环境\newenvironment

\newenvironment{filecode}[1][]
  {\minipage{\linewidth}% \begin{filecode}[#1]
   \lstset{basicstyle=\ttfamily\footnotesize,frame=single,#1}}
  {\endminipage}% \end{filecode}

现在你使用

\begin{filecode}[label=lst:mylist,caption=A Caption]
  \lstinputlisting{parametrised.xml}
\end{filecode}

相关内容