不知道为什么,但在我的长文档中\begin{algorithm}[h]
导致算法和所有后续算法都被放在最后,但\begin{algorithm}[]
导致算法被放在正确的位置。
在做什么[h]
?并且 [] 会做什么?
另外,有人能解释一下为什么 [h] 会将算法移到文档末尾吗?我似乎无法构造一个这种情况的小例子,或者一个不使用一堆我想暂时保密的东西的例子。
答案1
可以放置浮子
h
(此处,环境位于源中)
t
(页面顶部)
b
(页面底部)
p
(在仅有浮动元素的浮动页面上)
默认位置由文档类设置,但通常tbp
如此,[h]
允许“此处”浮动,但阻止将浮动放置在任何其他位置。由于通常无法将浮动放置在该h
位置,因此 LaTeX 会将其更改为[ht]
并发出警告。
LaTeX Warning: `h' float specifier changed to `ht'.
[]
方法浮点数在任何地方都不允许,所以这确实是一个语法错误。LaTeX 会对此发出警告,并用默认选项代替
LaTeX Warning: No positions in optional float specifier.
Default added (so using `tbp') on input line 25.
获取默认位置的预期方法是不使用该选项,而不是使用[]
答案2
(这个答案仅针对原帖者的后续问题)
你问:
另外,有人能解释一下为什么
[h]
要将 [float] 移到文档末尾吗?我似乎无法构造一个这种情况发生的小例子...
首先,请务必研究@DavidCarlisle 的先前的答案。其次,关于 LaTeX 如何放置浮动的极其详细的讨论,请务必阅读 Frank Mittelbach 的回答针对这个问题如何影响 LaTeX 中图形和表格等浮动环境的位置?
如果你愿意,你可以将以下答案视为弗兰克论文的极其精简和有选择性的总结,重点关注h
和t
位置说明符的作用以及鲜为人知的参数所起的重要作用\topfraction
。
你写了,
我似乎无法构造一个小例子
让我们考虑以下一个小例子:
\documentclass{article}
\usepackage{lipsum} % filler text
\begin{document}
% Uncomment the next line to get the float placed at the top of page 2:
%\renewcommand\topfraction{0.8} % default value: 0.7
\lipsum[1-3]
\begin{figure}[h] % <-- note: "h"
\rule{1\textwidth}{0.7\textheight} % print a black rectangle
\caption{Hello World}
\end{figure}
\lipsum[4-6]
\end{document}
请在您的系统上编译此示例,以验证浮动元素将被放置在测试文档的末尾,即第 3 页,而不是第 1 页或第 2 页。
发生了什么事?首先,做一些准备工作。
正如 David 在他的回答中所指出的,如果浮动元素不能立即放置, LaTeX 实际上会自动更改
[h]
为。[ht]
根据设计,浮筒的总高度略微超过了
0.7\textheight
。通过指定
[ht]
,可以排除b
(“底部”)或p
(在页面上单独)作为浮动的潜在位置。在
article
document 类中(可能在许多其他文档类中也是如此),参数\topfraction
和的默认值分别\bottomfraction
为0.7
和0.3
。它们的测量单位是\textheight
。这意味着浮动(或可能几个浮动)不得超过0.7\textheight
放置在页面顶部时占用的空间,并且0.3\textheight
如果放置在页面底部(您猜对了!),则不得超过空间。参数选择确实给人留下了这样的印象:LaTeX 不应将较大的浮动放置在页面中间或底部,不是吗?
现在来看看文档内容:
LaTeX 首先排版三段填充文字。这大约占了页面的三分之二。
LaTeX 接下来遇到一个
figure
环境(LaTeX 术语中的“浮动”),并注意到[h]
指定了。LaTeX 必须立即决定是否可以放置浮动。考虑到图形的总高度略大于0.7\textheight
,因此图形可以不是放置“此处”,因为这样做会导致页面过度溢出。因此,LaTeX 将定位说明符从 更改为[h]
并将[ht]
浮动放置在特殊堆栈中,其潜在的放置适用性将在下一页开始时考虑。LaTeX 接下来遇到该指令
\lipsum[4-6]
并开始排版更多填充文本。但在它完全排版所有三段填充文本之前,会出现分页符。在每一页的顶部,LaTeX 检查累积的浮动堆栈是否为空。如果不是,即如果有浮动等待放置,LaTeX 接下来检查是否允许放置浮动。现在位置[t]
说明符开始起作用。但是因为\topfraction
(0.7) 小于图形的高度,LaTeX 确定它也无法在此位置排版图形,并且浮动被放回堆栈,以在下一页的顶部考虑。与此同时,LaTeX 开始着手
\end{document}
并意识到还有最后一项任务:放置浮动元素。在手边的文本文档中,唯一可能/允许的位置恰好是文档的最末尾,确切地说是在最后一页,完全独立。
我希望鼓励您重新编译测试文档,但现在\topfraction
设置为 0.8:瞧,浮点数现在排版在第 2 页的顶部。生活很美好。