代码跨越两页,包含标题和内部列表

代码跨越两页,包含标题和内部列表

我正在尝试使用 minted 在我的文档中显示一些代码,但是代码很长并且跨越两页,这可以正常工作,但是当我将代码放在里面时

\begin{listing}
  \inputminted{java}{code/JavaCode.java}
  \caption{Some caption}
  \label{label1}
\end{listing}

然后我的代码就不会出现并且我收到警告:

LaTeX 警告:浮动对于页面来说太大

H我曾尝试使用中的选项listing,但代码仅显示在一页中且不适合,所以我只能看到其中的一部分。

我也尝试直接在乳胶文档中使用代码,即:

\begin{listing}
  \begin{minted}{java} 
    Java code
  \end{minted}
  \caption{Some caption}
  \label{label1}
\end{listing}

但同样的事情发生了,有什么想法吗?

答案1

据我所知,这是浮动的基本限制。您不能使用跨多页的浮动,因此您需要删除周围的listing

为了使标题仍然有效,您可以加载caption包并使用\captionof命令代替\caption

\inputminted{java}{code/JavaCode.java}
\captionof{listing}{Some caption}

现在标题也应该出现在 中\listoflistings。如果您想在此处使用标签,则需要将其放在里面命令\captionof

\captionof{listing}{Some caption\label{lst:some-label}}

也可以看看:问题“无浮动的标签和标题”

答案2

建议和接受的答案无法正常工作,因为\captionof命令需要在环境内。caption文档中指出了这一点。例如,在我的例子中,标题后没有适当的垂直空间。

一个合适的解决方案是定义一个新的环境:

\usepackage{caption}
% ...
\newenvironment{code}{\captionsetup{type=listing}}{}

\begin{code}
\begin{minted}[frame=single]{py}
def my_func(x):
    print x
\end{minted}
\caption{My Func}
\label{lst:my_func}
\end{code}

答案3

将@Konrad Rudolph 的解决方案调整为简单且不会破坏任何东西:

\inputminted[linenos]{python}{code.py}
\begin{figure}[H]
    \caption{Hello.}
    \label{fig:foo}
\end{figure}

当然,这将被命名并列为图形,但这对我来说不是问题。

答案4

为了解决此类问题,我使用两个列表(分成两半)并结合使用\ContinuedFloat

\begin{listing}
    \ContinuedFloat*
    \begin{codeblock}{}{C}
        \cfile[lastline=33]{code/xxx.c}
    \end{codeblock}
    \caption{My caption}
    \label{lst:xxx}
\end{listing}

\begin{listing}
    \ContinuedFloat
    \begin{codeblock}{}{C}
        \cfile[firstline=35]{code/xxx.c}
    \end{codeblock}
    \caption{My caption (contd.)}
\end{listing}

致谢:https://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions#Figures_in_multiple_parts

相关内容