我正在使用algorithm2e
来开发 LaTeX 文档中的算法构造。但是,如果我想使用[!t]
或[!b]
将算法构造放置在适当的位置,有时构造会下降到最后一页而不是当前页。因此,我想用图形构造将其包装如下,以使用压缩函数(例如\vpsace{-0.5cm}
介于\end{algorithm}
和之间)来压缩算法构造后的空间\end{figure}
。但它给出了错误:! LaTeX Error: Not in outer par mode
。请帮我解决这个问题。
\begin{figure}[!t]
\begin{algorithm}
....
...
\end{algorithm}
\end{figure}
答案1
@kkp:包algorithm
提供的环境algorithm2e
是“浮动”环境,就像浮动环境table
一样figure
。因此,它不能被包装在另一个浮动组中。您遇到的情况——您无法让 LaTeX 将浮动放置在您希望它们去的任何位置附近——这是许多 LaTeX 用户共同的挫败感。我的主要建议是检查所讨论的算法浮动是否占据了超过半页。如果是这种情况,您可能需要更改部分或所有参数、、\topfraction
和。在我的许多文档中,我在序言中都有以下命令: \bottomfraction
\textfraction
\floatpagefraction
\renewcommand\topfraction{0.85}
\renewcommand\bottomfraction{0.85}
\renewcommand\textfraction{0.1}
\renewcommand\floatpagefraction{0.85}
使用这些命令,您可以指示 LaTeX 允许浮动元素(实际上是一组浮动元素)占据包含一些文本的页面的 85% 以内。(如果浮动元素大于该值,它将单独出现在页面上。)
我的另一个建议是不是指定放置选项[t!]
和[h!]
,如果 LaTeX 不能立即满足这个要求,那么有点反常的是(并且违反直觉),浮动元素和所有后续相同类型的浮动元素(figure
、、table
或algorithm
)将被推回到文档末尾,而不仅仅是下一个合适的页面。
附录:讨论如何减少文本和浮动之间的空间:
要更改这些空间量,您可以向文档的序言中添加以下说明(或类似内容):
\setlength\floatsep{1.25\baselineskip plus 3pt minus 2pt}
\setlength\textfloatsep{1.25\baselineskip plus 3pt minus 2pt}
\setlength\intextsep{1.25\baselineskip plus 3pt minus 2 pt}
第一个长度控制两个相邻浮动元素之间的间隔,第二个长度设置页面顶部(或底部)浮动元素与其下方(上方)文本之间的间隔,第三个长度设置页面中间浮动元素与其上方和下方文本之间的间隔。从本例中可以看出,我已将所有三个长度设置为相同(“弹性”)值。除非您真的非常缺乏空间,否则我不会进一步缩短长度。
答案2
LaTeX 根据特定页面的可用性将浮动元素放置在页面上。这些可用性是根据长度或比率定义的。
在里面文档的layouts
包裹它显示与浮动位置相关的页面相关量(请参阅6 浮动布局):
因此,浮动位置受以下因素影响:
\topfraction
(默认为0.699
)\topnumber
(默认为2
)\textfraction
(默认为0.199
)\bottomfraction
(默认为0.300
)\bottomnumber
(默认为1
)\totalnumber
(默认为3
)
t
改变这些应该会促使 LaTeX 增加特定区域(如或)中的浮点数b
。 的重新定义\...number
是通过 完成的\setlength
,而 是\...fraction
使用 进行修改的\renewcommand
。请参阅章节6.3 更改文档中的浮动布局了解有关如何执行此操作的更多详细信息。修改这些设置可能非常特定于文档。
还可以修改有关页面组件之间空间的更多布局选项。以下是同一文档中的一张图,显示了其中的一些重要选项:
\setlength
根据您的喜好通过调整布局来修改这些长度。