我已经阅读过该网站上的多个问题,例如如何影响 LaTeX 中图形和表格等浮动环境的位置?在我看来浮点数的默认行为不是我所需要的。
我想要的行为:如果页面上有足够的剩余空间 -> 将浮动元素放置在调用它的位置。在浮动元素之后开始下一个段落。否则将其放入队列中,并在每段之后进行检查 -> 浮动元素是否可以放在那里 -> 执行。
浮动实际上所做的就是分割一些段落(在分页符上),在浮动之后留下段落的最后一个单词,或者等待很长时间跳过浮动本来可以很好地适合段落之间的位置。
是否有任何包或工具可以满足我的要求 - 只要页面上有空间,就可以在段落之间放置图形和表格?
我理解浮动可能不是正确的术语,因为这种行为可能有其他名称,但它是什么呢?
答案1
类似这样的情况,如果命令\flushhere
放置在段落之间,它会尝试从延迟列表中取出一个浮点数,并使其成为此处的浮点数,如果成功,它会尝试弹出下一个延迟浮点数,依此类推,直到用完为止。
因此,如果您[hp]
在段落之间使用浮动并将其放在\flushhere
后续段落之后,则任何未放置在“此处”的浮动都应在段落之间被清除...
仅在这个文件中测试过,我可能错过了一些东西......
\documentclass{article}
\setcounter{totalnumber}{30}% lots of here floats
\def\a{One two \stepcounter{enumi}\roman{enumi} three four five six. }
\def\b{\a\a red \stepcounter{enumi}\roman{enumi} red green yellow
random longer typesetting expressions that might invoke hyphenation. }
\def\c{\a\b\a\a\b\b\a}
\def\f#1{\begin{figure}[hp]\centering\rule{2cm}{1cm}\par\caption{ff: #1}\end{figure}}
\def\t#1{\begin{table}[hp]\centering\caption{tt: #1}\par\bigskip\begin{tabular}{cc}1&2\\33&44\\555&666\end{tabular}\end{table}}
\makeatletter
\def\flushhere{\par{%
\let\s@deferlist\@deferlist
\let\@currbox\relax
\@next\@currbox\@deferlist{%
\ifodd\count\@currbox
\typeout{Trying \meaning\@currbox (\number\@currbox/\the\count\@currbox),
adding to \meaning\@currlist}%
\@cons\@currlist\@currbox
\typeout{added: to \meaning\@currlist}%
\typeout{deferlist was \s@deferlist, now \@deferlist}%
\let\s@@deferlist\@deferlist\@empty
\global\let\@deferlist\@empty
\@floatpenalty -\@Miii
\penalty -\@Miv
\@tempdima\prevdepth
\vbox{}%
\prevdepth\@tempdima
\penalty\@floatpenalty
\@@par
\ifx\@deferlist\@empty
\typeout{float placed here}%
\global\let\@deferlist\s@@deferlist
\flushhere
\else
\typeout{float not placed here}%
\global\let\@deferlist\s@deferlist
\fi
\else
\typeout{not h}%
\global\let\@deferlist\s@deferlist
\fi
}%
{%
\typeout{no pending float}%
}\par}}
\makeatother
%\let\flushhere\relax
\begin{document}
AA \c \verb|\t{a}\f{a}|
\t{a}\f{a}
BB \c\b \verb|\t{b}\t{c}|
\t{b}\t{c}
BB2 \b \verb|\f{b}\f{c}|
\flushhere
\f{b}\f{c}
CC2 \a
\flushhere
CC \c \verb|\t{d}|
\flushhere
\t{d}
DD \c
\typeout{before DD2}
\flushhere
DD2 \c
\flushhere
\f{d}
EE \c
\typeout{before FF}
\flushhere
FF \c\b
%\flushhere
\end{document}