子图网格将双栏页面中的所有内容移出页面

子图网格将双栏页面中的所有内容移出页面

我跟着发布以使图形在网格中对齐。我对文本使用了双列格式,似乎每当图形到达列的末尾时,它都会将原本应该在该列中的所有内容推到页面底部并浮动出页面(截屏)。

我发现,添加一段额外的文字,使图形从右列开始,这样一切看起来都很好。有没有优雅的解决方案,或者我只能确保图形永远不会到达页面底部?

为了避免混淆,我对子图使用了 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}

LaTeX 的屏幕截图

答案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以及行之间添加一些空间,不需要其他包。

最佳读物:影响图形和表格等浮动环境的位置

A

\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}

在此处输入图片描述

相关内容