浮点说明符 [h] 和无说明符 [] 有什么区别?

浮点说明符 [h] 和无说明符 [] 有什么区别?

不知道为什么,但在我的长文档中\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 中图形和表格等浮动环境的位置?

如果你愿意,你可以将以下答案视为弗兰克论文的极其精简和有选择性的总结,重点关注ht位置说明符的作用以及鲜为人知的参数所起的重要作用\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(在页面上单独)作为浮动的潜在位置。

  • articledocument 类中(可能在许多其他文档类中也是如此),参数\topfraction和的默认值分别\bottomfraction0.70.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 页的顶部。生活很美好。

相关内容