为什么环境的标签必须出现在标题之后?

为什么环境的标签必须出现在标题之后?
\documentclass{article}
\usepackage{algorithm}

\begin{document}
\setcounter{section}{54}
\section{A section with no label}
\begin{algorithm}
\label{myalg}
\caption{An algorithm with the label `myalg'.}
\end{algorithm}
Reference to myalg: \ref{myalg}.
\end{document}

使用此代码,参考给出 55(章节编号);如果我在标题命令后移动标签,我会得到正确的参考(1)。

为什么会这样?我觉得这很令人困惑:当将算法视为环境时,您希望能够在开始后立即对其进行标记。我至少希望出现某种错误或“??”,而不是之前使用的环境或可引用实体。

答案1

这与所有标题都是相同的:它是\caption生成数字的命令,因此它\label之前的 a 无法知道该数字。

当然,这可以有不同的设计,但你可以想象一个figure环境数字清楚的例如,为了节省空间,将字幕并排放置。

因此,请始终将 放在\label之后\caption

由于\label是“通用”命令,它将总是参考上次生成的编号(可以是章节、节、图题编号或直接来自用户的命令\refstepcounter)以及它最终所在的页面。实际上,它并不是最后生成的编号,而是在相同或更高分组级别上最后生成的编号。

答案2

\caption宏会增加已使用计数器并设置 使用的当前标签文本\label。如果在 之前使用\label,则会使用旧标签文本,这会导致数字错误。始终\label在 之后使用\caption,而不是在 之前或 之中使用。

相关内容