我有一个文档,其中标签出现在部分内,即不仅出现在部分的开头。如果部分包含环境,则autoref
wronlgy 会将此环境的名称用于所有后续标签,但仍使用部分的正确编号。在我的设置中,将标签定义移动到部分顶部不是一个选项。这是一个最小示例:
\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:DEFdown
给figure
环境。示例中的标签字符串包含子字符串“sec:”这一事实并不影响它将被分配给的元素。
吸收:
- 总是旨在
\label
立即在相关分段或字幕命令之后发出指令。请记住,诸如equation
s 之类的环境也可以分配\label
s 以用于交叉引用目的。 - 对于图形和表格等浮动对象,请务必提供
\label
命令前浮动环境结束 —— 但当然,也是在浮动的\caption
命令发出之后。