\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
,而不是在 之前或 之中使用。