lstlisting 前缀内的标签在 \ref 上产生奇怪的输出

lstlisting 前缀内的标签在 \ref 上产生奇怪的输出

为了我自己的方便,我定义了各种标签类型,例如“sec:”,“cha:”,“fig:”,“lst:”等等。

现在我想指出我的某个列表中的某一行代码。该列表不需要标签,但我想在其他页面上放置“(参见第 X 页)”,特别是因为列表可能会被自然分页符分割。

在代码行的末尾我写了$\label{lbl:mySpecialLineOfCode}$。 在我想要放置页码的位置\pageref{lbl:mySpecialLineOfCode},它会输出正确的页码。

出于实验原因,我输入\ref{lbl:mySpecialLineOfCode}了 14,它打印了出来。我不明白 Latex 如何确定这个数字。标签既没有放在第 14 章,也没有放在第 X.14 节,也不是第 14 个标签或第 14 个列表(我在该位置之前有更大的数字)。

我唯一担心的是,它占据了一个“位置”/“数字”,文档开头的 listofwhatever 会在下一行从 13 变为 15。那太糟糕了。我最好事先知道这样的事情可能会发生(我不能说它会发生 - 虽然就我的情况而言)。

有人可以给我提示吗?

答案1

LaTeX 的\label-\ref系统默认的工作方式如下:

  • 随着问题出现\label{<lab>},LaTeX 存储了最后更新计数器使用\refstepcounter以及文件中关联的页码.aux\label实际使用\@currentlabel,由 设定\refstepcounter。此步骤仅在页面发货时发生,以确保正确的页码与标签关联;
  • 问题检索在()\ref期间写入的计数器,同时检索随附的页码。\label\@currentlabel\pageref

listings对每个列表都有一个计数器lstlisting(计数器lstlisting),而且对特定列表的每一行也都有一个计数器(计数器lst@lineno)。

如果您希望引用清单中的计数器,请将您的 放在\label清单后面\caption。如果您希望引用清单中某一行的计数器,请将您的 放在\label相应的行上。

相关内容