我已经在我正在编写的书籍章节中为游览定义了一个新的LaTeX环境。环境是多页的,通常包括内嵌图像。此外,我正在使用阴影环境为环境赋予背景色以使其突出一点。
然而,如下所示,环境被浮动的表格和图像分割,这使得视觉上的环境流更难以遵循。例如,现在很难看到浮动图像或表是否是一部分(缺少的背景颜色没有帮助)。所以,我喜欢扩展我的环境以禁止它被浮动元素打断,但不知道如何完成它。
\newcounter{bioclipse}
\def\thebioclipse{\thechapter-\arabic{bioclipse}}
\newenvironment{bioclipse}[2][]{\begin{small}\begin{shaded}\refstepcounter{bioclipse} \par\medskip\noindent%
\textbf{Bioclipse Excursion~\thebioclipse #1: #2
\vspace{0.1cm} \hrule \vspace{0.1cm}}
\rmfamily}{\medskip \end{shaded}\end{small}}
任何不允许中断的解决方案都很好,即使背景颜色不同也是如此。
答案 0 :(得分:1)
插入算法相当复杂。基本上,您希望任何挂起的插入都不能放入env bioclipse
适用的页面中。作为第一个快速解决方案,您可以先刷新所有插入,然后启动新章节。如果你想把数字或其他东西放到环境中,你希望它们只能在env工作的最后一页之后“刷新”......第二个快速解决方案是:直接将它们放在环境之后!所以他们根本不会“惹恼”页面(当然,避免使用脚注)。
另一种解决方案(使其自动化)有点棘手。在输出例程中构造作为页面(“候选”)的垂直列表时,选择“待定”材料的插入位置。这意味着你必须在最坏的情况下玩输出程序;但也许它太多了,除非你计划自己的TeX格式,也许LaTeX提供了更容易的选择......
在LaTeX代码中挖掘一下,我发现有一个条件你可以尝试使用,它是\@insert*
,即\@insertfalse
和\@inserttrue
。如果你很幸运,他们会“推动”插入的可能性,这样在你的环境开始时你可以说\@insertfalse
并在结尾\@inserttrue
。 尝试,我不是说它有效。
也许您知道使用@作为字母catcode以便它可以成为“命令”名称的一部分,您必须在完成时使用\makeatletter
和\makeatother
(可能是默认类/样式序言为你做了)。
您还可以看一下placeins
样式(它可能已经在您的安装中,否则,see here),这显然可以解决(部分)您的问题。