LaTeX工作台定位


98

我有一个LaTeX文档,其中包含一个段落,后面是4个表,然后是第二个段落。我希望这4个表出现在两个段落之间,根据我的阅读,这意味着我应该在启动表环境(例如\begin{table}[h])后使用[h]选项。

使用此方法,前两个表按预期出现在第1段之后,但是随后显示第2段,而后两个表显示在下一页上。如何使表格出现在正确的位置?

我已经尝试了各种方法来校正位置,例如使用,[h!]但是这似乎没有任何效果。\clearpage在表之后使用确实具有使表出现在第二段之前的预期效果,但是当我希望第二段在第二段之后立即开始时,它会将最后两个表留在自己的页面上,并留有空格。表。

Paragraph 1...

\begin{table}[h]
    table1...
\end{table}

\begin{table}[h]
   table2...
\end{table}[h]
...

Paragraph 2...

我也尝试过,但没有效果。
Jared Russell,

6
可选参数中字母(所有)的顺序无效。
罗伯逊

@Gacek,我敢打赌威尔·罗伯逊是对的。根据mintaka.sdsu.edu/GF/bibliog/latex/floats.html的说法,“括号中的参数告诉LaTeX可以在哪里放置浮点数;它们的顺序无关紧要。”
Waldir Leoncio

这只是稍微相关,但我认为重要的是要知道:[h]选项永远不能单独使用,实际上,较新的LaTeX版本会自动将其替换为[ht]。那可能也是您的问题。您可以在本指南的第17.2节“图形放置”中阅读更多内容。
vauhochzett

@Gacek [h!]是正确的版本。等同于[H]。两者都需要float包装。
winklerrr

Answers:


171

经过更多的谷歌搜索之后,我遇到了float包,它使您可以防止LaTeX重新定位表。

在序言中:

\usepackage{float}
\restylefloat{table}

然后,对于每个表格,您都可以使用H放置选项(例如\begin{table}[H])来确保它不会被重新放置。


22
也许值得强调的是应该使用“ H”而不是“ h”。这就是我为自己观察到的。
bikashg 2011年

@bikashg H等效于h!(有关参数的更多信息,请在这里检查我的答案)
winklerrr

1
如果有人使用组织模式,则将其放在顶部: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} 然后,#+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> 在注释中使用不良的换行格式。
Gaurav

23

这对我有用:

首先,usepackage定义包括:

\usepackage{placeins}

以及之前和之后添加:

\FloatBarrier
\begin{table}[h]
    \begin{tabular}{llll}
      .... 
    \end{tabular}
\end{table}
\FloatBarrier

这会将表格准确地放置在文本中所需的位置。


这是一个非常有用的软件包。感谢分享!
John David

11

桌子摆放

可用参数

可以使用以下参数轻松放置表格:

  • h将浮点放在此处,即,大约与源文本中的浮点同一点(但是,不完全在该点)
  • t放置在页面顶部
  • b定位在页面底部
  • p放在特殊页面上仅用于浮点数。
  • ! 覆盖LaTeX用于确定“良好”浮动位置的内部参数。
  • H 将浮子放置在 精确地放置在LATEX代码中的位置。需要float软件包。这有点等同于h!

如果您想利用H(或h!)进行精确定位,请确保获得float在前言中正确设置了程序包:

\usepackage{float}
\restylefloat{table}

如果要将表格放置在同一页面上,或者放置在页面的确切位置,或者至少放置在页面的顶部(最适合乳胶引擎),请使用参数ht如下所示:

\begin{table}[ht]
    table content ...
\end{table}

资料来源:Overleaf.com


7

如果文本加表格加文本不能放在单个页面上怎么办?通过尝试以这种方式强制进行排版,您很可能最终导致页面运行时间太短;即,由于默认情况下表格不能跨页,因此它将被推到下一页,并在该页之前留出间隙。您会发现您从未在已出版的书中看到这一点。

浮动行为是一件好事!我建议使用[htbp]在所有文档和表格完成之前,将其用作默认设置。只有那时,才应考虑微调其精确位置。

PS阅读FAQ ; 这里的大多数其他答案是那里给出的建议的部分组合。


1
浮动行为避免了留出空间,但是将图形移开会使阅读者的生活更艰难。因此,重要的设计师Edward Tufte建议将文本和图形/表格集成在一起-在他出版的书中,他不要按数字引用表格。因为该表就在其中,所以不会出现“请参阅表1”。他只是将它们放在正确的位置-句子中间。我想这意味着要做更多的工作来布置桌子,但对读者来说却减少了工作。
Blaisorblade

@Blaisorblade —当然,还有其他这样的著名示例,但是我建议以这种方式编写文本比使用浮点数对大多数人来说要困难一个数量级。您是在谈论放弃99%的书本设计以实现无法实现的最佳效果。考虑一下我在回答中提出的观点:“如果表格不能容纳在文字下方怎么办?” 在您的方案中,必须重新设计或重写,这在许多情况下都是站不住脚的。
罗伯逊

1
好吧,我们同意最优是什么-是的,大多数情况下实际上是无法实现的。在日常生活中,我通常也会坚持漂浮。但是我确实有一些内联的小表格和图形,而且效果很好(只要我检查最终版本,这很容易,因为我的文档最多20页)。我只是认为浮动是一种合理的权衡,而不是一件好事:-)。
Blaisorblade 2012年

设置[htbp]与完全不设置之间有什么区别?
Waldir Leoncio

@WaldirLeoncio至少对我来说,什么都默认为[ht],而不是[htbp]
MrJonas


4

如果要使两个表彼此相邻,可以使用:(float加载了包)

\begin{table}[H]
 \begin{minipage}{.5\textwidth}
  %first table
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  %second table
 \end{minipage}
\end{table}

每个人都有自己的标题和编号。另一种选择是subfigure包装。


3

您可能需要将此添加到您的序言,并根据需要调整值:

 %------------begin Float Adjustment
%two column float page must be 90% full
\renewcommand\dblfloatpagefraction{.90}
%two column top float can cover up to 80% of page
\renewcommand\dbltopfraction{.80}
%float page must be 90% full
\renewcommand\floatpagefraction{.90}
%top float can cover up to 80% of page
\renewcommand\topfraction{.80}
%bottom float can cover up to 80% of page
\renewcommand\bottomfraction{.80}
%at least 10% of a normal page must contain text
\renewcommand\textfraction{.1}
%separation between floats and text
\setlength\dbltextfloatsep{9pt plus 5pt minus 3pt }
%separation between two column floats and text
\setlength\textfloatsep{4pt plus 2pt minus 1.5pt}

特别地,\ floatpagefraction可能是令人感兴趣的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.