Latex 浮动体位置设定

本文参考资料如下:

前言

figure 环境和 table 环境是最常见的浮动体环境,将这些浮动体插入文档中时,难免会出现 Latex 排版的图表位置和我们想要插入位置不同的情况,这篇文章将会对浮动体的一些概念和误区做一些较为详细的说明,希望对我还有阅读的你们有用 o (^▽^) o。自己接触 Latex 也还只有一个月左右,文中若有错误之处还请指正。

为什么会有浮动体

内容丰富的文章或者书籍往往包含许多图片和表格等内容。这些内容的尺寸往往太大,导致分页困难。Latex 为此引入了浮动体的机制,令大块的内容可以脱离上下文,放置在合适的位置。
LATEX 预定义了两类浮动体环境 figure 和 table。习惯上 figure 里放图片,table 里放表格,但并没有严格限制,可以在任何一个浮动体里放置文字、公式、表格、图片等等任意内容。
实际上,插入图片也可以不放入 figure 环境当中,直接通过 includegraphics 命令插入图片即可(比如有的简历模板中插入照片时不推荐使用 figure 浮动体环境)

为什么叫做浮动体

  1. 排版出来供阅读的文本是主体,而图、表为辅;
  2. 插在页面的文本段落之间,打断或妨碍阅读节奏( reading flow);
  3. 那么浮动体的意义在于:图、表都尽量闪一边去,不要打断我的阅读节奏,闪到页面顶部、底部,甚至是页面之后都行,就是插在段落之间影响我阅读

实际上,这和我们使用 Word 插入图片在概念上有比较大的出入,我们习惯于在提及到图表内容的段落的下一段插入相应的图表,但这排版出来的效果确实影响到整体的阅读体验了,页面看起来也不美观。

Q:有人会说:我插入的图和表不应该就在我交叉引用的下一段出现吗,图和说明不在同一页,那读者怎么读得明白啊?
A:那么交叉引用 \label 和 \ref 的意义何在呢

07-Word排版插入的思路.png

浮动体位置参数

1
2
3
\begin{table}[位置参数]
...
\end{table}

位置参数提供了一些符号用来表示浮动体允许排版的位置,如 hbp 允许浮动体排版在当前位置、底部或者单独成页。
h:here, 就摆这里
t:top, 页面顶端
b:bottom, 页面低端
p:float page(也就是只有浮动体的页面,通常由于浮动体太长了,页面插入了浮动体之后,只能塞下几行文字了,此时 latex 不会再插入那几行文字,而是单独的排版这个浮动体,即浮动体单独成页)
!:求你了,听听我的请求吧…(在决定位置时忽视限制)

注意:

  • 排版位置的选取与参数里符号的顺序无关,LATEX 总是以 h-t-b-p 的优先级顺序决定浮动体位置。也就是说 [!htp][ph!t] 没有区别
  • 但是如果只给了某一个参数,比如 [h],那么肯定按 h 这个参数来排版
  • 图、表缺省的位置参数是 [t]

浮动体的位置选取受到先后顺序的限制(注意这里所说的先后顺序与上方所说顺序没有关系)。如果某个浮动体由于参数限制、空间限制等原因在当前页无法放置,就要推迟到之后处理,并使得之后的同类浮动体一并推迟。
比如说我论文中的图片太多了,Latex 排版时,将许多图片一并推迟到了非常靠后的页面,此时使用 \clearpage 命令,会在另起一页之前,先将所有推迟处理的浮动体排版成页,此时 htbp 等位置限制被完全忽略(clearpage 可以将之前推迟的所有浮动体一口气全排出来)。

案例分析

为了演示方便,本案例使用了 blindtext 宏包以用来生成假文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\documentclass[a4paper,twocolumn]{article}
\usepackage{blindtext} %生成假文宏包

\begin{document}
\section{Table position}
\blindtext[3] %生成假文

\begin{table}
\centering
\begin{tabular}{ccc}
\hline
1 & 2 & 3 \\
1 & 2 & 3 \\
1 & 2 & 3 \\
\hline
\end{tabular}
\end{table}

\blindtext[3] %生成假文
\end{document}

如果不给表格添加位置参数,其默认的位置参数是 t

01-不给位置参数则默认为顶部.png

对于双栏排版,如果想要图、表跨栏显示,如何处理?
双栏排版环境下,LATEX 提供了 table*figure* 环境用来排版跨栏的浮动体。它们的用法与 table 和 figure 一样,不同之处为双栏的 ⟨placement⟩ 参数只能用 tp 两个位置。

1
2
3
4
5
6
7
8
9
10
\begin{table*}[t]
\centering
\begin{tabular}{ccc}
\hline
1 & 2 & 3 \\
1 & 2 & 3 \\
1 & 2 & 3 \\
\hline
\end{tabular}
\end{table*}

注意是 table 带星,不是 tabular 带星

待续