我正在尝试使用 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