当我添加图形和标题时,我有两个选择:
- 使用
figure
选项
这意味着我的代码很可能
\begin{figure}
\centering
\includegraphics{my picture}
\caption{my caption here}
\label{my label here}
\end{figure}
- 使用
caption
包
这意味着我的代码很可能
\usepackage{caption}
...
\begin{center}
\includegraphics{my picture}
\end{center}
\captionof{figure}{my caption here}
\label{my label here}
在这里,我应该避免其中之一,还是我可以使用我喜欢的任何选项?我个人更喜欢第二个选项,因为它的行为符合我的预期,而第一个选项将图片放在了一些奇怪的位置。
虽然我对它们各有偏好,但我之所以问这个问题,是因为我发现有些编写 LaTeX 的方法并不推荐,比如eqnarray 与 align。
如果您能让我了解它们之间任何我没有注意到的区别,我将不胜感激。
答案1
有些地方您无法放置浮动figure
,例如迷你页面,但您想要一个带有编号标题的图形。那么请考虑第二种选择。
否则,即使您不想要移动图形,也请使用第一种方法。相反,使用选项[h]
,甚至[H]
使用包“float”。原因是浮动还会处理标题上方和下方的空间,另一个浮动会处理周围的文本,您可以在序言中一致地更改该设置。
而下一个 MWE 中的第二种方法则存在两个问题:
(1)Ulrike Fisher 指出,风险可能会延续到下一页
(2)标题与正文之间缺少空格。
\documentclass{article}
\usepackage{caption}
\usepackage{lipsum}
\usepackage{graphicx}
\begin{document}
\lipsum[1]
\begin{figure}[h]
\centering
\includegraphics[scale=.2]{example-image}
\caption{my caption here}
\label{my label here}
\end{figure}
\lipsum[2-7][1-38] % wrong result 2: caption in another page
\begin{center}
\includegraphics[scale=.2]{example-image}
\end{center}
\captionof{figure}{my caption here}
\label{my label here}
\lipsum[3] % wrong result: No space under caption
\end{document}
中间段落变短后,您仍会注意到第三个问题:标题上方的空间不同。正如您在评论中看到的那样,这是对 \captionof 的错误使用,导致出现“超出框或环境”警告,因此如果您改用选项 B:
\begin{center}
\includegraphics[scale=.2]{example-image}
\captionof{figure}{my caption here}
\end{center}
这样,您就避免了任何警告,以及图像和标题之间的过大空间,但请注意,这仍然不等同于选项 A:
\begin{figure}[h]
\centering
\includegraphics[scale=.2]{example-image}
\caption{my caption here}
\end{figure}
现在仅使用 A+A+A+B+B+B+B 制作 MWE。您可以注意到:
1)中心仍然是一个易破坏的环境(在最后一个B中)。
2)每个浮动下方的空间(A)比每个中心环境标题下方的空间(B)更大(并且看起来更好)。
解决(1)的一个选项是,正如多次指出的那样,使用minipage
:
选项C:
\noindent\begin{minipage}{\linewidth}
\centering
\includegraphics[scale=.2]{example-image}
\captionof{figure}{my caption here}
\end{minipage}
但是现在与 A+A+A+C+C+C+C 进行比较:小页面标题后面的小空格确实很难看。但在实际文档中,它可能与浮动中的空格相似或更高,具体取决于\parskip
设置。您还应该注意段落中的空白\parindent
在哪里minipage
。在空白行之后,小页面开始一个段落,它将缩进,从而改变图形的明显中心,而另一个小页面之后将位于段落的第二行,因此没有缩进。
另一方面,浮动永远不会被破坏,也永远不会被缩进,浮动的间距将独立于 \parskip,而是由\textfloatsep
、\floatsep
和控制\intextsep
(参见文章默认在这里)。
然而,请考虑非浮动框还存在一些其他固有问题。
1) 它无法从所需位置移动。是的,也许这就是你想要的,但如果它对于页面上的剩余空间来说太大了,会发生什么?图形传递到下一页,留下所有空间为空。使用带有 的浮动[h]
,图形可以均匀地传递到下一页的顶部(如果需要,会[ht]
自动更改为 ),但用以下文本填充该空间。文档布局将无可比拟地好,如果您使用标签在文本中引用,这种位移会略显不便。
2) 浮动规则对非浮动无效(显然)。浮动规则会阻止您使用,例如,将四个大数字放在页面顶部,这样您只能在底部添加 4 或 5 行文本。但是非浮动数字会忽略\topfraction
和 topnumer
计数器或totalnumber
计数器,因此没有人会避免这种可怕的布局。这些规则可以更改,甚至忽略(例如[h!]
),它们的重要性取决于正在执行的文档类型,但对于书籍或论文文档,很可能它们的布局会根据这些规则看起来更好。
如果问题只是浮标移动性太差,你应该先阅读如何影响 LaTeX 中图形和表格等浮动环境的位置?,然后使用 h
选项(例如\begin{figure}[h] ...
:),甚至h!
,如果它仍然不够固定,请添加包float
并将该选项更改为H
。但我的建议是,避免使用这些选项(事实上,所有浮动选项)并在最终草稿中只考虑这些选项。首先检查是否值得更改默认浮动位置,调整浮动规则(例如,允许每页多一个或两个浮动),最后根据需要设置一些浮动选项。
考虑到以上所有因素,figure
环境是先验在我看来是更好的选择,并且不需要任何包,而\captionof
在 minipage 中它是一个很好的救星当你不能使用浮点数时,就像使用multicol
包一样。