如何包含 3 个垂直对齐的子图,同时使它们显示为 3 个独立的“主”图(而不是子图)?

如何包含 3 个垂直对齐的子图,同时使它们显示为 3 个独立的“主”图(而不是子图)?

我想将 3 个图形叠放在一起,我找到了一种使用subcaption包来实现这一点的方法。但是,它们显示为子图形而不是“主”图形。我认为这是因为我使用的包,但如果我只使用 3 个单独的图形,我发现将 3 个图形叠放在一起非常困难,\begin{figure}所以我使用了这个。我还能使用subcaption并将它们变成“主”图形吗?我想使用,subcaption因为我能够立即完成我需要做的事情,所以我真的很喜欢它的简单性。此外,还有其他问题:

  1. “主要”图形标题出现了,我无法隐藏它。
  2. 此标题和 3 个数字没有正确地放置在中心位置。
  3. 另外,3 个图的标题被推到了右边!我希望所有内容都位于中心并对齐。
  4. 图形标题数字是这样的 -(a), (b)我希望它们像1.: Title主标题显示的那样,但采用粗体字体。

有可能吗?以下是我使用过的方法:

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{subcaption}     
\begin{document}
\begin{figure}[htbp]
  \centering
  \begin{subfigure}{0.56\textwidth}
    \includegraphics{}
    \caption{First SUB-FLOAT}
    \label{fig:demo1}
  \end{subfigure}
   \begin{subfigure}{0.56\textwidth}
    \includegraphics{}
    \caption{Second SUB-FLOAT}
    \label{fig:demo2}
  \end{subfigure}
  \begin{subfigure}{0.56\textwidth}
    \includegraphics{}
    \caption{Third SUB-FLOAT}
    \label{fig:demo3}
  \end{subfigure}
  \caption{Demo}
\end{figure}
\end{document}

它看起来像这样:

在此处输入图片描述

请帮忙!

答案1

您可以使用最后的代码显示在这里subcaption根本不需要使用包就可以实现你想要的结果。

但是,由于您的问题具体是关于如何使用包实现结果subcaption,因此这里有一个解决您问题的方法。

现在,您的代码中缺少几个“基本”部分。那么,让我们逐一看看它们:

  1. 您只包含subcaption包。最好按顺序同时加载caption和包。因为,包将允许您以极大的灵活性自定义各种浮动字幕。subcaptioncaption

  2. 除了使用\usepackage[demo]{graphicx},您还可以使用 mwe包来显示示例图像。黑框被更好看的灰度图像所取代。

  3. 图形和标题的水平对齐偏离中心,因为您\centering只在外部figure 环境中使用了一次。为了正确对齐,您还必须\centering在所有 3 个subfigure环境中重复此操作。

  4. 此外,最好使用 \includegraphics[width=\textwidth]{example-image-a}after \begin{subfigure}{0.56\textwidth}而不是 \includegraphics{example-image-a}; 因为它有助于实现图像的正确缩放。

  5. 您的代码的另一个问题(这是一个很大的问题)是您缺少强制空行在两个subfigure 环境之间。看到这个进一步解释。由于您选择的图像缩放比例,您看不到任何差异。作为实验,更改\begin{subfigure}{0.56\textwidth}\begin{subfigure}{0.2\textwidth},看看会发生什么。如果您希望 3 个图形垂直对齐,一个在另一个之上,您必须保持所有必需的空行两个子图之间。

为了满足您的要求,我不得不添加几行代码,如下所示:

%%%%%% begin: caption/subcaption setup %%%%%%
\renewcommand\thefigure{Main-\arabic{figure}}
\DeclareCaptionLabelFormat{simplab}{Figure~#2}
\DeclareCaptionFormat{nocap}{}
\DeclareCaptionSubType*{figure}
\renewcommand\thesubfigure{\arabic{subfigure}}
\captionsetup[subfigure]{%
            font={normalsize},
            labelfont={bf},
            labelformat=simplab,
            labelsep=colon,
            singlelinecheck=true,
            position=bottom
            }%
%%%%%% end: caption/subcaption setup %%%%%%
  • 第一个定义\renewcommand\thefigure{Main-\arabic{figure}} 在这种情况下并不是绝对必要的,但它有助于区分对主要人物的引用(如果将来需要)和伪子人物,因为您需要它们看起来与主要人物完全一样!
  • \DeclareCaptionLabelFormat{}{}&\DeclareCaptionFormat{}{}来自caption包;而\captionsetup[subfigure]{}& \DeclareCaptionSubType*{figure}来自subcaption包。有关更多信息,请查看包文档 caption&subcaption
  • \DeclareCaptionFormat{nocap}{}为主图形环境定义特殊的空标题格式。
  • \DeclareCaptionLabelFormat{simplab}{Figure~#2}定义图形标签的排版方式。
  • \DeclareCaptionSubType*{figure}允许我们手动重新定义子图标题格式,\renewcommand\renewcommand\thesubfigure{\arabic{subfigure}}重新定义 \thesubfigure 计数器来打印阿拉伯数字。
  • \captionsetup[subfigure]{}将子图标题字体大小设置为normalsize、标签设置为\bfseries、标签分隔符设置为colon以及标签格式设置为simplab(上述设置均使用 进行先前定义) \DeclareCaptionFormat{}{}
  • 此外,为了隐藏主图标题,我们在主图标题中使用。format=nocap格式之前已使用 定义。\captionsetup{}nocap\DeclareCaptionFormat{}{}

实际上没有必要这样做,因为隐藏主标题就像\caption{}使用注释掉该行一样简单%。但是,如果用户仍然想集体引用这 3 个图,则主标题必须存在且处于活动状态(即取消注释)。无论是哪种情况,我发现最实用的方法是定义自定义空标题格式并根据需要在正常格式和空格式之间切换,同时保留整个标题行,而不是完全删除它。如果将来用户决定打印主标题,则在切换标签格式时它已经存在了!这不是很方便吗?:) ..删除后自己看看 format=nocap 来自 \captionsetup{} 主图标题!

我还在子标题中加入了对主标题的引用,只是为了表明即使主标题没有出现在输出 PDF 中,它也非常有效/活跃,并且可以轻松引用其标签。

这是 MWE 代码:

\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{mwe}    % for example figures!
%%%%%% begin: caption/subcaption setup %%%%%%
\renewcommand\thefigure{Main-\arabic{figure}}
\DeclareCaptionLabelFormat{simplab}{Figure~#2}
\DeclareCaptionFormat{nocap}{}
\DeclareCaptionSubType*{figure}
\renewcommand\thesubfigure{\arabic{subfigure}}
\captionsetup[subfigure]{%
            font={normalsize},
            labelfont={bf},
            labelformat=simplab,
            labelsep=colon,
            singlelinecheck=true,
            position=bottom
            }%
%%%%%% end: caption/subcaption setup %%%%%%         
\pagestyle{empty}           
\begin{document}
\begin{figure}[htbp]
 \centering
 \vspace*{5pt}%
 \hspace*{\fill}% 
  \begin{subfigure}{0.56\textwidth}     % start subfigure 1
    %\belowcaptionskip=8pt
    \centering
    \includegraphics[width=\textwidth]{example-image-a}%
    \captionsetup{skip=12pt}%
    \caption{First SUB-FLOAT (\ref{fig:demoMain})}
    \label{fig:demo1}
  \end{subfigure}%          % end subfigure 1
  \hspace*{\fill}%          % empty line absolutely necessary!

  \vspace*{8pt}%  

  \hspace*{\fill}%  
   \begin{subfigure}{0.56\textwidth}        % start subfigure 2
    %\belowcaptionskip=8pt
    \centering
    \includegraphics[width=\textwidth]{example-image-b}%
    \captionsetup{skip=12pt}%
    \caption{Second SUB-FLOAT (\ref{fig:demoMain})}
    \label{fig:demo2}
  \end{subfigure}%          % end subfigure 2  
  \hspace*{\fill}%          % empty line absolutely necessary!

  \vspace*{8pt}%

  \hspace*{\fill}%  
  \begin{subfigure}{0.56\textwidth}     % start subfigure 3
    \centering
    \includegraphics[width=\textwidth]{example-image-c}%
    \captionsetup{skip=12pt}%
    \caption{Third SUB-FLOAT (\ref{fig:demoMain})}
    \label{fig:demo3}
  \end{subfigure}%              % end subfigure 3
  \hspace*{\fill}%
  \captionsetup{skip=8pt, format=nocap}% % required to hide the figure (main) lable!
  \caption{This is a main Float}
  \label{fig:demoMain}
\end{figure}
\cleardoublepage
\end{document}

输出 PDF 的样子如下:

在此处输入图片描述

希望你觉得它有用! :)

答案2

该软件包可以很容易地使用其和命令以及和环境floatrow来绘制多行图形以及多行子图形。请参阅文档中的更多详细信息。\ffigbox{figure}{caption}\tabbox{table}{caption}floatrowsubfloatrow

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[demo]{graphicx}
\usepackage{caption, floatrow}
\captionsetup{labelfont={sc, small}}
\DeclareFloatVCode{myrowsep}{\vskip 4ex}

\begin{document}

\begin{figure}[!htbp]
  \floatsetup{justification =centering, rowpostcode=myrowsep}
  \begin{floatrow}
    \ffigbox[\FBwidth]{\includegraphics[width=0.56\textwidth]{\figa}}{\caption{First SUB-FLOAT}\label{fig:demo1}}
  \end{floatrow}
  \begin{floatrow}
    \ffigbox[\FBwidth]{\includegraphics[width=0.66\textwidth]{\figb}}{\caption{Second SUB-FLOAT}\label{fig:demo2}}
  \end{floatrow}
  \begin{floatrow}
    \ffigbox[\FBwidth]{\includegraphics[width=0.56\textwidth]{\figc}}{\caption{Second SUB-FLOAT}\label{fig:demo3}}
  \end{floatrow}
\end{figure}

\end{document}%

在此处输入图片描述

答案3

% figure vertical allignment 
\begin{figure}
    \centering
    \begin{subfigure}[t]{0.4\textwidth}
        \centering
        \includegraphics[width=0.9\textwidth]{images/figure01.png}
        %\caption{Choose any caption if you want to add }}
    \end{subfigure}%
    
    \begin{subfigure}[t]{0.4\textwidth}
        \centering
        \includegraphics[width=0.9\textwidth]{images/figure02.png}
        %\caption{Add second caption if you like}
    \end{subfigure}

    \begin{subfigure}[t]{0.4\textwidth}
        \centering
        \includegraphics[width=0.9\textwidth]{images/figure03.png}
        %\caption{Add third caption if you like}
    \end{subfigure}
    \caption{this is the overall caption}
\end{figure}

相关内容