Аргумент \caption@ydblarg имеет дополнительный }

Аргумент \caption@ydblarg имеет дополнительный }

Вводящее в заблуждение сообщение об ошибке из следующего кода:

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}

\begin{document}

\begin{figure}[!ht]
\centering%
\subfloat[]{
    \label{subfig1}
    \includegraphics[width=.4\linewidth]{fig1.pdf}%
}%
\qquad%
\subfloat[]{
    \label{subfig2}
    \includegraphics[width=.4\linewidth]{fig2.pdf}
}%
\label{myfig}
\caption{A caption for figures \subref{subfig1} and \subref{subfig2}.}
\end{figure}

\end{document}

дает

! Argument of \caption@ydblarg has an extra }.
<inserted text> 
                \par 
l.19 ...es \subref{subfig1} and \subref{subfig2}.}

?

Что я сделал не так? Я }нигде ничего лишнего не вижу.

решение1

Самым простым решением в таких случаях является добавление \protectперед обычными подозреваемыми; \subrefявляется одним из них, поскольку имеет *-вариант.

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}

\begin{document}

\begin{figure}[!ht]
\centering
\subfloat[]{%
    \label{subfig1}%
    \includegraphics[width=.4\linewidth]{fig1.pdf}%
}%
\qquad
\subfloat[]{%
    \label{subfig2}%
    \includegraphics[width=.4\linewidth]{fig2.pdf}%
}

\caption{A caption for figures \protect\subref{subfig1} and \protect\subref{subfig2}.}
\label{myfig}

\end{figure}

\end{document}

Обратите внимание, что я добавил/удалил %в конце строк и положение\label{myfig} после \caption.

Это может раздражать, если у вас есть несколько появлений \subrefв движущихся аргументах. В этом случае вы можете «укрепить» команду:

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{etoolbox} % for \robustify

\robustify{\subref}

\begin{document}

\begin{figure}[!ht]
\centering
\subfloat[]{%
    \label{subfig1}%
    \includegraphics[width=.4\linewidth]{fig1.pdf}%
}%
\qquad
\subfloat[]{%
    \label{subfig2}%
    \includegraphics[width=.4\linewidth]{fig2.pdf}%
}

\caption{A caption for figures \subref{subfig1} and \subref{subfig2}.}
\label{myfig}

\end{figure}

\end{document}

Другое решение — избегать subfigfor subcaption, и я бы рекомендовал именно такой путь:

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}

\begin{document}

\begin{figure}[!ht]
\centering
\subcaptionbox{\label{subfig1}}{%
    \includegraphics[width=.4\linewidth]{fig1.pdf}%
}%
\qquad
\subcaptionbox{\label{subfig2}}{%
    \includegraphics[width=.4\linewidth]{fig2.pdf}%
}

\caption{A caption for figures \subref{subfig1} and \subref{subfig2}.}
\label{myfig}

\end{figure}

\end{document}

Связанный контент