以 2x2 方式排列 3 个子图和 1 个对齐标题

以 2x2 方式排列 3 个子图和 1 个对齐标题

我有 3 个大图和相应的标题,它们很长且没有补偿(有些比其他的长)。我想以 2x2 的方式排列它们,这样我在第一行中有子图 a 和 b,在第二行中有子图 c 和标题,占据子图 c 留下的空间。到目前为止,我设法通过以下方式实现了这一点:

\documentclass[pra,aps,onecolumn,eqsecnum,notitlepage]{revtex4-1}
\usepackage{epsf}
\usepackage{epsfig}
\usepackage{psfrag}
\usepackage{color}
\usepackage{graphicx}
\usepackage{lmodern,bm}
\usepackage{subcaption}
\usepackage[inline]{enumitem}

\begin{document}    
\begin{figure*}[ht!]

\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{./subfig_a.png}
\caption{}
\end{subfigure}
\hfill
\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{./subfig_b.png}
\caption{}
\end{subfigure}

\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{./subfig_c.png}    
\caption{}
\end{subfigure}
\hfill
\begin{minipage}[b]{.495\textwidth}
\captionsetup{singlelinecheck=off}
\caption{\label{wholefig} \footnotesize 
(a) Long text caption for subfig a.
(b) Not so long text caption for subfig b.   
(c) More text caption for subfig c.}
\end{minipage}

\end{figure*}
\end{document}

这样,我只能得到子图后面的 (a)(b)(c),并在小页面中手动写入位于右下角的子标题。非常烦人的是,我无法对齐其中的文本,而且由于它很长,所以在我看来非常丑陋。我尝试使用 \captionsetup{singlelinecheck=off},但这没有帮助。

编辑:正如下文所述,问题的一部分似乎是 Revtex 无法与标题或子标题包很好地配合使用。我在这里添加了 Revtex 标签。

有人遇到过类似的问题吗?谢谢!

答案1

Revtex4 定义了\@makecaption标题包中未改变的内容。此定义用于\unhbox格式化的标题,删除了格式。

该解决方案替代了\@makecaption标题\caption@makecaption包提供的解决方案。

\documentclass[pra,aps,onecolumn,eqsecnum,notitlepage]{revtex4-1}
%\documentclass{article}
\usepackage{epsf}
\usepackage{epsfig}
\usepackage{psfrag}
\usepackage{color}
\usepackage{graphicx}
\usepackage{lmodern,bm}
\usepackage[inline]{enumitem}

\usepackage{subcaption}
\makeatletter
\let\@makecaption=\caption@makecaption
\makeatother

\begin{document}  
\begin{figure*}[ht!]

\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{example-image-a}
\caption{}
\end{subfigure}
\hfill
\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{example-image-b}
\caption{}
\end{subfigure}

\begin{subfigure}[b]{.495\textwidth}
\includegraphics[width=\linewidth]{example-image-c}    
\caption{}
\end{subfigure}
\hfill
\begin{minipage}[b]{.495\textwidth}
%\captionsetup{justification=justified}
\caption{\footnotesize 
(a) Long text caption for subfig a.
(b) Not so long text caption for subfig b.
(c) More text caption for subfig c.}
\label{wholefig}
\end{minipage}

\end{figure*}
\end{document}

演示

答案2

您可以使用floatrow包来做到这一点:它定义了一个\RawCaption用于将标题放置为浮动框的命令:

\documentclass{article}%
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[demo]{graphicx}
\usepackage{caption,subcaption}
\usepackage[inline]{enumitem}
\usepackage{floatrow}
\captionsetup[subfigure]{singlelinecheck=off, labelfont={bf}}
\captionsetup[figure]{font={footnotesize}}

\begin{document}

\begin{figure}[!htb]
\ffigbox{}{%
\begin{subfloatrow*}
\ffigbox[.495\textwidth]{\subcaption{}\label{subf:a}}{\includegraphics[width=\linewidth]{./subfig_a.png}}
\ffigbox[.495\textwidth]{\subcaption{}\label{subf:b}}{\includegraphics[width=\linewidth]{./subfig_b.png}}%
\end{subfloatrow*}%
\renewlengthtocommand\settowidth\Mylen{\subfloatrowsep}\vskip\Mylen
\CenterFloatBoxes\floatsetup[subfigure]{heightadjust=object}%none
\begin{subfloatrow*}
\ffigbox[.495\textwidth]{\subcaption{}\label{subf:c}}{\includegraphics[width=\linewidth]{./subfig_c.png}}
\ffigbox[][][b]{}{\captionsetup{justification=RaggedRight}\RawCaption{\caption{\label{wholefig}\footnotesize
(a) Long text caption for subfig a.
(b) Not so long text caption for subfig b.
(c)~More text caption for subfig c. \vspace{\baselineskip}
}}}
\end{subfloatrow*}
}%
\end{figure}

\end{document} 

在此处输入图片描述

相关内容