使用 \g@addto@macro 将 \centering 添加到 subcaption 中的所有子图

使用 \g@addto@macro 将 \centering 添加到 subcaption 中的所有子图

我正在尝试将subcaption子图居中这个答案

但是,编译失败,

! Argument of \subcaption@minipage has an extra }.
<inserted text> 
                \par 
l.6 \g@addto@macro\subcaption@minipage\centering

? 
Process interrupted by user

有任何想法吗?

\documentclass{article}

\usepackage{subcaption}

\makeatletter
\g@addto@macro\subcaption@minipage\centering
\makeatother

\begin{document}
\begin{figure}
\begin{minipage}[b]{.5\linewidth}
\large A
\subcaption{A subfigure}\label{fig:1a}
\end{minipage}%
\begin{minipage}[b]{.5\linewidth}
\large B
\subcaption{Another subfigure}\label{fig:1b}
\end{minipage}
\caption{A figure}\label{fig:1}
\end{figure}
\end{document}

答案1

该函数\g@addto@macro只能与无参数的宏一起使用。

\apptocmd有了以下选择,您将更加幸运etoolbox

\usepackage{etoolbox}
\makeatletter
\apptocmd\subcaption@minipage{\centering}{}{}
\makeatother

但是,当然,您必须使用subfigure而不是minipage

完整示例:

\documentclass{article}

\usepackage{subcaption}
\usepackage{etoolbox}
\makeatletter
\apptocmd\subcaption@minipage{\centering}{}{}
\makeatother

\begin{document}
\begin{figure}
\begin{subfigure}[b]{.5\linewidth}
\large A
\subcaption{A subfigure}\label{fig:1a}
\end{subfigure}%
\begin{subfigure}[b]{.5\linewidth}
\large B
\subcaption{Another subfigure}\label{fig:1b}
\end{subfigure}
\caption{A figure}\label{fig:1}
\end{figure}
\end{document}

在此处输入图片描述

答案2

在 2020 年,subcaption将使用minipage而不是subcaption@minipage来创建新的“子”环境。这意味着\apptocmd\subcaption@minipage ....不会改变包的实际行为,因为\subcaption@minipage从未使用过。

subcaption从1.3 版的源代码来看-

\caption@For{subtypelist}{%
  \newenvironment{sub#1}%
    { ....
       \subcaption@iminipage
      ....}%
    {\subcaption@endminipage
     \endminipage}}%
\def\subcaption@iminipage[#1]{%
  \caption@withoptargs{\subcaption@iiminipage{#1}}}
\newcommand*\subcaption@iiminipage[3]{%
    ....
    \minipage[#1]#2{#3}%
    ....}

修补所subcaption@iiminipage取得的效果与七年前相同。

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{subcaption}
\usepackage{etoolbox}
\usepackage{lipsum}

\makeatletter
\apptocmd\subcaption@iiminipage{\centering}{}{}
\makeatother

\begin{document}

\section{Introduction}
\lipsum[1][1-2]

\begin{figure}
    \begin{subfigure}{\textwidth}
    B
    \caption{A}
    \end{subfigure}
    \caption{Caption}
\end{figure}

\end{document}

在此处输入图片描述

相关内容