考虑下面的代码。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\end{document}
输出为:
和
我的问题是为什么第一个图形没有垂直居中以及如何使其居中无需改变htbp
参数。
答案1
最简单的方法是用一些垂直空间填充图形:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}[htbp]
\vspace{5cm}
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\end{document}
另一个更好的选择是使用\vfill
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\null
\vfill
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\vfill
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\end{document}
请注意,您需要在开始时使用 \null 来为 LaTeX 提供一些参考。
至于为什么这种现象会发生。我认为这与 LaTeX 从页面顶部向下排版的方式有关。如果你在两张图片之间添加\newpage
或 ,\clearpage
那么第二张图片也不会居中。
第一页是普通页面,图形位于 here[h] 和 on top[t]。第二页是图形 page[p],图形位于中间。如果您定义\newpage
第二页将是“普通”页面,图形也将放在顶部。
- 编辑 -
最好的选择取决于常见问题页面。将计数器设置totalnumber
为 0,这样每个图形都会被推送到图形页面,即使它是第一个并且可以与文本一起容纳。此外,在浮动之间定义一个非常大的间隔fpsep
,以强制每个浮动到其自己的页面:
\documentclass{article}
\usepackage{graphicx}
\usepackage{lipsum}
\setcounter{totalnumber}{0}
\makeatletter
\setlength\@fpsep{\textheight}
\makeatother
\begin{document}
%\lipsum[1-2] %with or without text, the figure will get pushed to a float page
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\begin{figure}[htbp]
\includegraphics[width = \linewidth]{example-image-golden}
\end{figure}
\end{document}
这是一种 hack:将计数器设置为 0 基本上意味着 LaTeX 根本无法将图形放在此处[h]、顶部[t] 或底部[b]。这是因为您不能在同一页上放置文本和图形。它强制任何图形转到浮动页面。