通过标题中的内联枚举,autoref 不会选择正确的类型(图形)而是使用item
。
有解决方法吗?
测试.aux文件:
\newlabel{figure:foo}{{1}{1}{}{Item.2}{}}
测试.tex 文件:
\documentclass{article}
\usepackage{hyperref}
\usepackage[inline]{enumitem}
\setlist[enumerate,1]{label=\textit{(\alph*)}}
\begin{document}
\begin{figure}
figure-content
\caption[]{figure-caption \begin{enumerate*}\item 1\item2\end{enumerate*}}
\label{figure:foo}
\end{figure}
\autoref{figure:foo}
\end{document}
答案1
默认情况下(不带hyperref
),在设置 s 时,只有一件事需要跟踪\label
- 一个数字。并且,由于数字更改(通过\stepcounter
、\refstepcounter
和)是\addtocounter
\setcounter
全球的,人们会认为将 放在\label
计数器后面不久就会捕获适当的数字进行\ref
纠正。然而,捕获的不是实际的数字,而是它的表示(可能不同;例如,\thesection
通常<chapter>.<section>
或技术上是\thechapter.\arabic{section}
)。此表示被捕获在宏中\@currentlabel
并存储本地您可以通过以下 MWE 看到这一点:
\documentclass{article}
\begin{document}
\makeatletter% Just for this example
\setcounter{figure}{5}% Just for this example
Figure counter and current label (1): \thefigure~/~\@currentlabel
\begin{figure}[h]
Figure counter and current label (2): \thefigure~/~\@currentlabel
\caption{A figure}
Figure counter and current label (3): \thefigure~/~\@currentlabel
\end{figure}
Figure counter and current label (4): \thefigure~/~\@currentlabel
\end{document}
注意,尽管数字计数器的值是在 (2) 和 (3)(环境figure
)中设置为一组,但它的值是如何从 (1) 到 (4) 变化的。但是,唯一一次捕获正确数字的\label
情况是后 \caption
, 但前本地组已终止(这里figure
再次指环境)。
这证实了“要求”接近\label
适当的计数器的步进位置,特别是在处理组(如浮点数或列表)时。
然而,对于hyperref
,还有一个额外的组件与每个一起存储\label
-超链接锚点(技术上\@currentHref
)。此锚点的作用与 相同\@currentlabel
。也就是说,它是一个使用每个适当的 进行更新的宏\refstepcounter
。但有一个变化是hyperref
更新\@currentHref
全球;因此它在当前组的范围中仍然存在。上述 MWE 的扩展显示了这一点:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\makeatletter% Just for this example
\setcounter{figure}{5}% Just for this example
Figure counter, current label and anchor name (1): \thefigure~/~\@currentlabel~/~\@currentHref
\begin{figure}[h]
Figure counter, current label and anchor name (2): \thefigure~/~\@currentlabel~/~\@currentHref
\caption{A figure}
Figure counter, current label and anchor name (3): \thefigure~/~\@currentlabel~/~\@currentHref
\end{figure}
Figure counter, current label and anchor name (4): \thefigure~/~\@currentlabel~/~\@currentHref
\end{document}
请注意,在位置 (3) 处,\@currentlabel
和都\@currentHref
具有指向图形的正确更新值。然而,在该组之外,\@currentlabel
丢失了,而仍然\@currentHref
存在(由于它的全球的自然)。
为了解决所有这些问题,最好将您的\label
尽可能靠近适当的计数器更改的位置,尤其是在使用时,hyperref
以避免与指向不正确内容的锚点混淆。您的示例,带有\label
之内\caption
在内部之前的某处更新enumerate*
如下:
\documentclass{article}
\usepackage[inline]{enumitem}
\setlist[enumerate,1]{label=\textit{(\alph*)}}
% https://tex.stackexchange.com/q/1863/5764
\usepackage{hyperref}% Load hyperref last
\begin{document}
\begin{figure}
\caption[]{\label{fig:foo1}figure-caption \begin{enumerate*}\item 1\item2\end{enumerate*}}
\label{fig:foo2}
\end{figure}
\autoref{fig:foo1}
\autoref{fig:foo2}
\end{document}
fig:foo1
提供了正确的锚点名称,因此通过 提供了正确的解释\autoref
,而fig:foo2
(在全球的\@currentHref
内部变化enumerate*
)则不然。