2

我在我正在写的一本书章节中为短途旅行定义了一个新的 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}}

任何禁止中断的解决方案都可以,即使背景颜色不同。

4

1 回答 1

1

插入算法相当复杂。基本上,您希望不得将任何待处理的插入放入 envbioclipse应用的页面中。作为第一个快速解决方案,您可以先刷新所有插入,然后开始新章节。如果您想将数字或其他内容放入环境中,并且您希望它们仅在 env 工作的最后一页之后“刷新”......第二个快速解决方案是:直接将它们放在环境之后!所以他们根本不会“惹恼”页面(当然,避免使用脚注)。

另一个解决方案(使其以某种方式自动)有点棘手。在输出例程中构建作为页面(“候选”)的垂直列表时,选择“待处理”材料的插入位置。这意味着您必须在最坏的情况下使用输出例程;但也许它太多了,除非你正在计划你自己的 TeX 格式,也许 LaTeX 提供了更容易的选择......

在 LaTeX 代码中挖掘了一下,我发现有一个条件可以尝试使用,它是\@insert*ie\@insertfalse\@inserttrue. 如果你幸运的话,他们“推动”了插入的可能性,这样在你的环境开始时你可以说\@insertfalse和在结尾\@inserttrue试试看,我不是说它有效。

也许您知道将 @ 用作字母 catcode 以便它可以成为“命令”名称的一部分,您必须使用\makeatletter,并且\makeatother当您完成时(可能默认的类/样式序言会为您完成)。

您也可能会感兴趣地查看placeins样式(它可能已经在您的安装中,否则,请参见此处),这显然可以解决(部分)您的问题。

于 2010-06-13T15:28:26.100 回答