![是否有类似“\flushfloat”的命令?](https://linux22.com/image/448259/%E6%98%AF%E5%90%A6%E6%9C%89%E7%B1%BB%E4%BC%BC%E2%80%9C%5Cflushfloat%E2%80%9D%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
宏\clearpage
输出所有剩余的浮点数然后开始新的一页。
我正在寻找一个输出所有剩余浮点数的命令,它不会开始新的页面,并且允许将任何后续文本放在同一页面的最后一个浮点数之后。
我试过,但无济于事,
% hprob.tex SE 639516
\documentclass{memoir}
\usepackage{lipsum}
\usepackage{placeins} % provides \FloatBarrier
\usepackage{comment}
%\show\clearpage
\makeatletter
\newcommand{\flushfloats}{% A revision of \clearpage
\ifvmode
\ifnum \@dbltopnum = \m@ne
\ifdim \pagetotal <\topskip \hbox{} \fi
\fi
\fi
% \newpage
% \write \m@ne {} % \vbox {} % \penalty -\@Mi%
}
\makeatother
\begin{document}
\chapter{First}
%Introductory text.
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}
\centering A TABLE
\caption{A table}
\end{table}
%\clearpage
\FloatBarrier
\flushfloats
\lipsum[1]
\end{document}
我的\flushfloats
将输出所有浮点数,然后转到下一页,这是我不想要的。它仍然像 一样运行\clearpage
。
答案1
totalnumber
有趣的是,调整后似乎\textfraction
不允许每页有超过 4 个浮点数。唯一有效的是 [ht!]。
\flushqueue
复制并清空整个\@deferlist
,然后遍历复制的列表,将图形与表格分开,然后将它们重新提交为 [ht!] 浮点数。
\documentclass{memoir}
\usepackage{afterpage}
\usepackage{lipsum}
\makeatletter
\newcommand*{\flushqueue}{\bgroup
\let\mylist=\@deferlist
\gdef\@deferlist{}\par
\loop\@next\mybox\mylist{}{\let\mybox=\voidb@x}%
\ifvoid\mybox
\else
\ifnum\count\mybox<64
\begin{figure}[ht!]
\unvbox\mybox
\end{figure}\par
\else
\begin{table}[ht!]
\unvbox\mybox
\end{table}\par
\fi
\repeat
\egroup}
\makeatother
\begin{document}
\chapter{First}
\begin{table}[t]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[b]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[p]
\centering A TABLE
\caption{A table}
\end{table}
\begin{figure}[t]
\centering A FIGURE
\caption{A figure}
\end{figure}
\begin{figure}[b]
\centering A FIGURE
\caption{A figure}
\end{figure}
\begin{figure}[p]
\centering A FIGURE
\caption{A figure}
\end{figure}
\flushqueue
\lipsum[1]
\end{document}
答案2
如果强制使用浮动页面,则\clearpage
无法添加文本,但是在这里我认为您想采用另一种方式并仅允许在文本页面上添加更多浮动。
\documentclass{memoir}
\usepackage{lipsum}
\begin{document}
\chapter{First}
%Introductory text.
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\begin{table}[!hbp]
\centering A TABLE
\caption{A table}
\end{table}
\lipsum[1]
\end{document}
[!h]
这里已经足够了,但是如果您有一个附录或类似的仅包含图形的内容,您真的不希望它们浮动,因此一个可行的选择是[H]
从float
包中使用,因此嘿,它们本质上都是文本,并且后面的扩展名会自然地落在同一页面上。