将 \centering 附加到 \begin{subfigure} (来自 subcaption 包)

将 \centering 附加到 \begin{subfigure} (来自 subcaption 包)

我怎样才能附加\centering\begin{subfigure}(从副标题包)?我试过使用etoolbox,但由于某种原因,它不适用于subfigure环境(仅适用于figure环境)。

这里有一个 MWE 来演示我的问题。

\documentclass{article}

\usepackage{etoolbox}
\usepackage[margin=1em]{subcaption}

\usepackage{mwe}


\apptocmd\figure{\centering}
\apptocmd\subfigure{\centering}



\begin{document}

    \begin{figure}
        \includegraphics[width=4cm]{example-image}
        \caption{qqq qqq qqq qqq qqq qqq }
    \end{figure}

    \begin{figure}
        \begin{subfigure}{4cm}
            \includegraphics[width=2cm]{example-image-a}
            \caption{abc abc abc abc abc  }
        \end{subfigure}%
        \begin{subfigure}{4cm}
            \includegraphics[width=2cm]{example-image-b}
            \caption{abc abc abc abc abc abc abc abc abc abc }
        \end{subfigure}
        \caption{qqq qqq qqq qqq qqq qqq }
    \end{figure}
\end{document}

结果(图像 a、b 放错位置):

结果

我也尝试过\AtBeginEnvironment{subfigure}{\centering}并用 手动修补它\let,但没有成功。

答案1

您的修补程序\figure不正确:您失去了指定浮动定位参数的可能性,因此不行\begin{figure}[htp]

最好深入一点。我建议使用两个补丁figure:第一个\centering补丁只添加它(如果需要,请取消注释这三行),第二个补丁只是将它添加到所有浮点数中。

很难区分subfiguresubtable。将它们居中的补丁可以在使用 \g@addto@macro 将 \centering 添加到 subcaption 中的所有子图

\documentclass{article}

\usepackage{etoolbox}
\makeatletter
% Do the patch before loading caption!

% This patch adds \centering only to figure
%\apptocmd{\@xfloat}{\position@float{#1}}{}{}
%\def\position@float#1{\csname position#1\endcsname}
%\def\positionfigure{\centering}

% This patch adds \centering to all floats
\appto\@floatboxreset{\centering}
\makeatother

\usepackage[margin=1em]{subcaption}
\makeatletter
\apptocmd\subcaption@minipage{\centering}{}{}
\makeatother

\usepackage{mwe}

\begin{document}

\begin{figure}

\includegraphics[width=4cm]{example-image}

\caption{qqq qqq qqq qqq qqq qqq }

\end{figure}

\begin{figure}

\begin{subfigure}{4cm}
  \includegraphics[width=2cm]{example-image-a}
  \caption{abc abc abc abc abc  }
\end{subfigure}%
\begin{subfigure}{4cm}
  \includegraphics[width=2cm]{example-image-b}
  \caption{abc abc abc abc abc abc abc abc abc abc }
\end{subfigure}

\caption{qqq qqq qqq qqq qqq qqq }

\end{figure}
\end{document}

请注意必须\@xfloat在加载之前修补subcaptioncaption

在此处输入图片描述

答案2

说到使用表格......

\documentclass{article}

\usepackage{mwe}

\begin{document}

\null\vfil\begin{figure}[h]
        \centering
        \includegraphics[width=4cm]{example-image}
        \caption{qqq qqq qqq qqq qqq qqq }
    \end{figure}

    \begin{figure}[h]
        \centering
        \begin{tabular}{cc}
            \includegraphics[width=2cm]{example-image-a}&
            \includegraphics[width=2cm]{example-image-b}\\
            (a) abc abc abc abc abc&
            \parbox[t]{4cm}{(b) abc abc abc abc abc abc abc abc abc abc}
        \end{tabular}
        \caption{qqq qqq qqq qqq qqq qqq }
    \end{figure}
\end{document}

表格

相关内容