
Вводящее в заблуждение сообщение об ошибке из следующего кода:
\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}
Другое решение — избегать subfig
for 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}