在交叉引用具有无机复合物分子式的物品时,我经常需要在各种标签中使用“[”和“]”。一切都很顺利,直到我注意到包装存在\subref{...}
问题subcaption
。
在主标题中使用时,任何带有方括号的标签的条目都无法正确引用,并且不会为子图分配任何字母。标签中的括号和花括号不会引起任何问题:
\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{hyperref}
\hypersetup{colorlinks = true}
\begin{document}
Check out Figure~\ref{fig:as[many]square[brackets]as[i]want[and]still[works]fine}. Subfigures~\ref{fig:foo{bar}-a} and \ref{fig:foo(bar)-b} are referenced properly in the main caption, whereas \ref{fig:foo[bar]-c} isn't.
\begin{figure}
\centering
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-a}
\caption{}
\label{fig:foo{bar}-a}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-b}
\caption{}
\label{fig:foo(bar)-b}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-c}
\caption{}
\label{fig:foo[bar]-c}
\end{subfigure}
\caption{
\subref{fig:foo{bar}-a} -- OK;
\subref{fig:foo(bar)-b} -- OK;
\subref{fig:foo[bar]-c} -- WTF?
}
\label{fig:as[many]square[brackets]as[i]want[and]still[works]fine}
\end{figure}
\end{document}
我无法直接替换或停止使用标签中的方括号。我该如何\subref{...}
正确处理它们?
作为尼丁评论中指出,这很可能与软件包有关hyperref
。禁用它实际上会恢复预期的功能。不幸的是,我hyperref
也需要。
答案1
这是 中的一个愚蠢的错误subcaption
,我只是在将参数作为可选参数传递给 时忘记在参数周围加上花括号\hyperref
。这是我的错;hyperref
这里的包没问题。
我将在接下来的几天内修复它(并将新版本上传到 CTAN),在此之前,加载包后可以使用以下错误修复subcaption
:
\makeatletter
% fix usage of [] within \subref{...}
\renewcommand*\@subref[2]{%
\caption@ifundefined\hyperref
{\subcaption@ref{#1}{#2}}%
{\hyperref[{#2}]{\subcaption@ref{*#1}{#2}}}}
\makeatother
答案2
更新答案
问题是由 引起的hyperref
。\subref
展开时,标签作为可选参数(在方括号内)传递给hyperref
命令。如下所示:
\hyperref[fig:foo[bar]-c]{
...
}
由于标签中有]
,可选参数在该点终止。因此,-c]
在打印实际子标题之前先打印剩余部分。
将标签中的右方括号括在括号内可以解决此问题。将标签更改为:
\label{fig:foo[bar{]}-c}
\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{hyperref}
\hypersetup{colorlinks = true}
\begin{document}
Check out Figure~\ref{fig:as[many]square[brackets]as[i]want[and]still[works]fine}. Subfigures~\ref{fig:foo{bar}-a} and \ref{fig:foo(bar)-b} are referenced properly in the main caption, whereas \ref{fig:foo[bar{]}-c} isn't.
\begin{figure}
\centering
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-a}
\caption{}
\label{fig:foo{bar}-a}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-b}
\caption{}
\label{fig:foo(bar)-b}
\end{subfigure}
\begin{subfigure}[b]{0.3\linewidth}
\includegraphics[width=\linewidth]{example-image-c}
\caption{}
\label{fig:foo[bar{]}-c}
\end{subfigure}
\caption{
\subref{fig:foo{bar}-a} -- OK;
\subref{fig:foo(bar)-b} -- OK;
\subref{fig:foo[bar{]}-c} -- WTF?
}
\label{fig:as[many]square[brackets]as[i]want[and]still[works]fine}
\end{figure}
\end{document}
另一个解决方法是使用\subref*
而不是\subref
。但它不会创建链接,如下图所示。