我跟着这发布以使图形在网格中对齐。我对文本使用了双列格式,似乎每当图形到达列的末尾时,它都会将原本应该在该列中的所有内容推到页面底部并浮动出页面(截屏)。
我发现,添加一段额外的文字,使图形从右列开始,这样一切看起来都很好。有没有优雅的解决方案,或者我只能确保图形永远不会到达页面底部?
为了避免混淆,我对子图使用了 subcaption 包。
代码如下:
\lipsum[1-10]
\begin{figure}
\centering
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{a.png}
\caption{a caption}
\label{fig:a}
\end{subfigure}
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{b.png}
\caption{b caption}
\label{fig:b}
\end{subfigure}
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{c.png}
\caption{c}
\label{fig:c}
\end{subfigure}
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{d.png}
\caption{d caption}
\label{fig:d}
\end{subfigure}
\caption{fig caption}
\label{fig:fig_all}
\end{figure}
答案1
我不知道你的代码的其余部分是什么,也许它改变了 LaTeX 的默认设置。默认情况下,浮动是顶部对齐的,后面跟着文本。不应该将任何内容向下推。
根据请求图像前的文本量,浮动将放置在左侧或右侧列中,甚至放置在另一页上;例如,在代码中,将注释行更改为\kant[1-2]
和\kant[3]
。如果附加[tbh]
到\begin{figure}
,浮动也可以放置在段落之间
\documentclass[twocolumn]{article}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{tabularx}
\usepackage{kantlipsum}
\begin{document}
\kant[1-2]
% \kant[1]
\begin{figure}
\centering
\begin{tabularx}{1.0\linewidth}{@{}XX@{}}
\subfloat[]{\label{fig:a}%
\includegraphics[width=\linewidth]{example-image}}
& \subfloat[]{\label{fig:b}%
\includegraphics[width=\linewidth]{example-image}}
\\
\subfloat[]{\label{fig:c}%
\includegraphics[width=\linewidth]{example-image}}
& \subfloat[]{\label{fig:d}%
\includegraphics[width=\linewidth]{example-image}}
\end{tabularx}
\caption{fig caption}\label{fig:fig_all}
\end{figure}
\kant[3]
% \kant[2-3]
\end{document}
答案2
您可以为浮动添加“放置说明符参数”,以建议 LaTeX 将图形放置在何处。如果不这样做,图形将移到左列的顶部。
要在每行(此处)的图形之间\hfill
以及行之间添加一些空间,不需要其他包。
最佳读物:影响图形和表格等浮动环境的位置
\documentclass[12pt, twocolumn]{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{lipsum}
\begin{document}
\lipsum[1-10]
\begin{figure}[htb!] % placement specifier parameter <<<<
\begin{subfigure}{0.4\columnwidth}
\includegraphics[width=\columnwidth]{example-image-a}
\caption{a caption}
\label{fig:a}
\end{subfigure}
\hfill
\begin{subfigure}{0.4\columnwidth}
\includegraphics[width=\columnwidth]{example-image-a}
\caption{b caption}
\label{fig:b}
\end{subfigure}
\vspace*{3ex}%some vertical space
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{example-image-b}
\caption{c caption}
\label{fig:c}
\end{subfigure}\hfill
\begin{subfigure}{.4\columnwidth}
\includegraphics[width=\columnwidth]{example-image-b}
\caption{d caption}
\label{fig:d}
\end{subfigure}
\caption{fig caption}
\label{fig:fig_all}
\end{figure}
\lipsum[1-10]
\end{document}
答案3
使用环境的另一个解决方案subfloat
:
\documentclass[twocolumn]{article}
\usepackage{graphicx}
\usepackage{subcaption} % must be version 1.3 or later
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\begin{figure}[htb] % <---
\centering
\setkeys{Gin}{width=0.47\linewidth} % assumed that allimages have the same size
\subfloat[ \label{fig:a}]%
{\includegraphics{example-image}}
\hfil
\subfloat[ \label{fig:b}]%
{\includegraphics{example-image}}
\medskip
\subfloat[ \label{fig:c}]%
{\includegraphics{example-image}}
\hfil
\subfloat[ \label{fig:d}]%
{\includegraphics{example-image}}
\caption{fig caption}
\label{fig:fig_all}
\end{figure}
\lipsum[3-4]
See images `\ref{fig:a} \ref{fig:b}, \ref{fig:c} and \ref{fig:d} in figure \ref{fig:fig_all}
\end{document}