如果标签出现在图形之后,autoref 将使用错误的部分名称

如果标签出现在图形之后,autoref 将使用错误的部分名称

我有一个文档,其中标签出现在部分内,即不仅出现在部分的开头。如果部分包含环境,则autorefwronlgy 会将此环境的名称用于所有后续标签,但仍使用部分的正确编号。在我的设置中,将标签定义移动到部分顶部不是一个选项。这是一个最小示例:

\documentclass{article}
\usepackage{hyperref}

\begin{document}
\section{ABC}
\section{DEF}
\label{sec:DEFup}

Correctly is section 2: \autoref{sec:DEFup}

\begin{figure}
  \centering
  XXX
  \caption{Three X's}
\end{figure}

\label{sec:DEFdown}
\noindent
Should be section 2, but is Figure 2, which does not even exist:
\autoref{sec:DEFdown}

\end{document}

答案1

事实上,根据 hyperref 语法规则,您所描述的错误行为是完全正确的:命令的参数\label“附加”到最近遇到的实体可以接收标签。

在您的示例中,第二个\label命令是在figure设置环境后遇到的,并被赋予caption。因此,hyperref包(提供autoref命令的包)必须将标签分配sec:DEFdownfigure环境。示例中的标签字符串包含子字符串“sec:”这一事实并不影响它将被分配给的元素。

吸收:

  • 总是旨在\label立即在相关分段或字幕命令之后发出指令。请记住,诸如equations 之类的环境也可以分配\labels 以用于交叉引用目的。
  • 对于图形和表格等浮动对象,请务必提供\label命令浮动环境结束 —— 但当然,也是在浮动的\caption命令发出之后。

相关内容