当我在文档中添加几个相当不起眼的表格时,它停止了编译(使用pdflatex
):
“超出 TeX 容量(主内存)”
我在网上搜索了一下(实际上主要是 tex.SE),发现使用lualatex
可以避免内存问题。所以我尝试使用 运行代码lualatex
,结果
“未处理的浮动过多”
因此,我尝试提出一个最小的工作示例,并惊讶地发现,这一小段代码足以触发这个问题:
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\begin{table*}\begin{tabular}{|c|}Foo\\\end{tabular}\end{table*}
\end{document}
显然,我在这里遗漏了一些重要的东西,因为 19 个“简单”的表格不应该让 LaTeX 性能下降……?!?
答案1
您可以使用命令\clearpage
。这将打印所有尚未放置的浮动元素并开始新的一页。
答案2
每个浮点数被推入一个队列,该队列只能包含 18 个对象(分配为盒子\bx@A
)\bx@R
。
这可能会扩展:包更多浮点数就是为此而编写的。然而,“未处理的浮点数太多”的错误通常是由于对浮点定位的限制太严格而引起的:使用
\begin{table}[!h]
无法放置在“那里”的 and 将阻止所有后续浮点数,直到到达\clearpage
命令(可能是由 发出的\chapter
)或文档末尾。如果后面有 18 个浮点数,则会发出错误。
答案3
从 LaTeX 2015/10/01 开始,浮动队列的默认大小从 18 增加到 52。也可以使用\extrafloats
2015/01/01 版本中添加的命令将其变得更大(几千)。
尽管如此,egreg 的答案仍然有效,如果浮点选项或约束阻碍了良好的浮点放置,则拥有更长的浮点队列意味着需要更长的时间才能被告知浮点不能放置。