行和列中多个图形的对齐

行和列中多个图形的对齐

我有七幅图像,我想将它们显示在一张图中。两张大图像应在第一行的两列中对齐。第二行应由第一幅图像下方的四张半尺寸图像组成(位于 row=0 和 col=0),其中半尺寸图像在 2x2 网格上对齐,但只占用一行。最后一幅图像与前两幅图像大小相同,应在第二幅图像下方对齐(位于 row=0 和 col=1)。我已经得到了这个,它几乎满足了我的需求,但有一些小缺点:

\documentclass[12pt,a4paper,twoside, draft]{article}
\usepackage{graphicx}
\usepackage{subcaption} %to have subfigures available

\begin{document} 
\begin{figure}[h!]
     \centering
    \begin{subfigure}[t]{0.49\textwidth}
        \includegraphics[width=\textwidth]{img1.png}
        \caption{caption of first image}
    \end{subfigure}
    \hfill
    \begin{subfigure}[t]{0.49\textwidth}
        \includegraphics[width=\textwidth]{img2.png}
        \caption{caption of second image\\second line}
    \end{subfigure}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%second row
    \begin{subfigure}[ht]{0.49\textwidth}
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img3.png}
            \end{subfigure}
            %
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img4.png}
            \end{subfigure}

            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img5.png}
            \end{subfigure}
            %
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img6.png}
            \end{subfigure}
        \caption{caption of the four small images\\second line\\third line}
    \end{subfigure}
    \hfill
    \begin{subfigure}[ht]{0.49\textwidth}
        \includegraphics[width=\textwidth]{img7.png}
    \caption{caption of last image\\second line} 
    \end{subfigure}
    \caption{caption of main figure}
\end{figure}
\end{document}

缺点是指 1) 第二行图像的顶部边框对齐不准确。我该如何解决这个问题?2) 2x2 网格中的四幅图像彼此相邻时显示空间,但彼此之间的距离太近。我如何在 2x2 网格中的第一行和第二行之间留出一些空间。

编辑:我刚刚注意到问题可能只是部分出现在这里,因为所有标题都适合一行。如果前两张图片的标题占用的行数不同,则会出现 1)。

答案1

[t] 选项使用第一行的基线(与 minipage 相同)。您可以使用 查看基线\leavevmode\rlap{\rule{\textwidth}{1pt}}。因此,使用 [t] 的子图实际上是与图像的底部对齐的,而不是顶部。要对齐顶部,您需要\raisebox{-\height}{...}需要每一个图像。

\documentclass[12pt,a4paper,twoside, draft]{article}
\usepackage{graphicx}
\usepackage{subcaption} %to have subfigures available

\begin{document} 
\begin{figure}
     \centering
    \begin{subfigure}[t]{0.49\textwidth}
        \raisebox{-\height}{\includegraphics[width=\textwidth]{img1.png}}
        \caption{caption of first image}
    \end{subfigure}
    \hfill
    \begin{subfigure}[t]{0.49\textwidth}
        \raisebox{-\height}{\includegraphics[width=\textwidth]{img2.png}}
        \caption{caption of second image\\second line}
    \end{subfigure}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%second row
    \begin{subfigure}[t]{0.49\textwidth}
        \raisebox{-\height}{\includegraphics[width=0.49\textwidth]{img3.png}}
        \raisebox{-\height}{\includegraphics[width=0.49\textwidth]{img4.png}}%
        \vspace{.6ex}
        \raisebox{-\height}{\includegraphics[width=0.49\textwidth]{img5.png}}
        \raisebox{-\height}{\includegraphics[width=0.49\textwidth]{img6.png}}
        \caption{caption of the four small images\\second line\\third line}
    \end{subfigure}
    \hfill
    \begin{subfigure}[t]{0.49\textwidth}
        \raisebox{-\height}{\includegraphics[width=\textwidth]{img7.png}}
    \caption{caption of last image\\second line} 
    \end{subfigure}
    \caption{caption of main figure}
\end{figure}
\end{document}

演示

答案2

我通常使用 subfloat 而不是 subfig,并且不嵌套它们。尝试以下 MWE 代码:

\usepackage{subfig}

%%%%%%%%%%%%

\begin{figure}[htb]
\caption{Caption of Figure}
\label{fig:figlabel}
\begin{center}
\subfloat[Subcaption a]      {
\includegraphics[width=.45\linewidth]{image1}
}\quad
\subfloat[Subcaption b]      {
\includegraphics[width=.45\linewidth]{image2}
}\\
\subfloat[Subcaption c]      {
\includegraphics[width=.45\linewidth]{image3}
}\quad
\subfloat[Subcaption d]      {
\includegraphics[width=.45\linewidth]{image4}
}
\end{center}

我通常使用\\\quad分别设置垂直和水平间距。如果您希望每行有 3 张图片、每行有 1 张图片等,则可以相应地调整图形的宽度。

答案3

您的代码无法编译,所以我不确定我是否理解正确。您想要这个吗?

% arara: pdflatex

\documentclass[12pt,a4paper,twoside]{article}
\usepackage{subcaption}
\usepackage[demo]{graphicx}

\begin{document} 
    \begin{figure}
        \centering
        \begin{subfigure}[t]{0.49\textwidth}
            \includegraphics[width=\textwidth]{img1}
            \caption{caption of first image}
        \end{subfigure}
        \hfill
        \begin{subfigure}[t]{0.49\textwidth}
            \includegraphics[width=\textwidth]{img2}
            \caption{caption of second image}
        \end{subfigure}

        \begin{subfigure}[t]{0.49\textwidth}
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img3}
            \end{subfigure}
            %
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img4}
            \end{subfigure}\vspace{.6ex}

            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img5}
            \end{subfigure}
            %
            \begin{subfigure}[t]{0.49\textwidth}
                \includegraphics[width=\textwidth]{img6}
            \end{subfigure}
            \caption{caption of the four small images}
        \end{subfigure}
        \hfill
        \begin{subfigure}[t]{0.49\textwidth}
            \includegraphics[width=\textwidth]{img7}
            \caption{caption of last image} 
        \end{subfigure}
        \caption{caption of main figure}
    \end{figure}
\end{document}

在此处输入图片描述

请注意,如果要换行,则必须留出一个空行。为此,我删除了您的 %%%%%。

此外,我从未见过[ht]的限定词subfigure。我不确定,但我猜想它不存在。

相关内容