我正在写一个文档,其中有很多长列表。我使用包铸造排版列表,我总是将其嵌入浮动中。由于列表很长,而 LaTeX 通常无法正确放置浮动,因此我还使用了包后页\clearpage
在每个长列表之后强制执行。
不幸的是,我有时会收到来自 LaTeX 的消息说
... Float(s) lost
... This may be a LaTeX bug.
如果 float / afterpage 命令位于页面第一段之后,似乎就会发生这种情况。以下是应触发错误消息的最小工作示例(使用 编译latex -shell-escape example.tex
):
\documentclass[a4paper,11pt]{report}
\usepackage{afterpage}
\usepackage{minted}
\begin{document}
a
a
% ...
% Insert as many paragraphs 'a' such that 'begin' below appears
% as the first line on 2nd page (in my case I need 44 x 'a').
%
a
begin
\afterpage{\clearpage}
\begin{figure}[p]
abracadabra
\end{figure}
end
% Even adding more text below won't help
\end{document}
请注意,如果包铸造不包括,尽管铸造未使用。
我的问题是如何解决这个问题?我做错了什么?
我找到了一种方法,就是简单地重新定位文本中的浮动,例如将其移到上一个或下一个段落。但这并不方便,因为进一步编辑文本可能再次需要更改浮动位置。请注意,只要\afterpage
新包提供类似的功能,我就可以替换。
编辑:上面的代码只是为了触发问题。我实际的“用例”是figure
用浮点数替换listing
浮点数:
\begin{listing}[p]
\begin{minted}[gobble=2]{python}
print "Hello, World!"
#
# Typically much
# ... much
# ... longer listing (like 3/4 of a page)
#
\end{minted}
\end{listing}
编辑 2:我更新了浮动放置选项,告诉 LaTeX 我们想要将浮动放在单独的页面上(即)。实际上,无论我使用什么选项,问题都会发生。此外,如果 LaTeX 不坚持将所有浮动推迟到 10 页之外,[p]
我很乐意使用[p]
without 。\afterpage{\clearpage}
答案1
我想回答我自己的问题会很丑陋,但在与 David 交流后,我找到了一种解决上述问题的方法。我只是强制 LaTeX 将浮动放在下一页,即使用 specifier[p!]
%\afterpage{\clearpage} % No longer needed
\begin{listing}[p!] % Force float on next page
\begin{minted}[gobble=2]{python}
print "Hello, World!"
#
# Typically much
# ... much
# ... longer listing (like 3/4 of a page)
#
\end{minted}
\end{listing}
编辑:使用[p!]
似乎比强制冲洗更好clearpage
,所以我将其保留为答案。
但事实证明,使用[htpb]
放置说明符 对所有列表都有效。我认为它在测试中最初不起作用,因为我可能忘记了一个带有说明符的列表[htb]
,然后它将所有列表推到了末尾。
\begin{listing}[htpb] % Give all freedom to LaTeX
\begin{minted}[gobble=2]{python}
# ...
# ...
# ...
\end{minted}
\end{listing}