所有可引用的命令/环境都有计数器吗?

所有可引用的命令/环境都有计数器吗?

大多数可以引用的东西,例如分段命令、图形、表格、定理等,似乎都有与之关联的计数器,LaTeX 引用系统使用这些计数器来跟踪所有内容。所有可参考的事物都是如此吗?


继我的较早 问题,我正在想办法收集环境列表,以便稍后在文档中引用它们。环境定义的要求之一是 — — 这是最难的部分 — — 编号需要由包用户配置。

我正在考虑使用两个类似计数器的东西,其中一个是用于引用的“真实”计数器,另一个是用户将自定义的“显示”计数器。当引用其中一个环境的实例时,LaTeX 内部应该使用前一个计数器,但在标签中显示后一个计数器。目前这一切都有点模糊,而且我承认我还没有 MWE,但 90% 的编码都是思考和计划,我不知道我所寻求的是否可行。

答案1

标签利用的常用机制是每次使用\@currentlabel时重新定义的“临时”宏。基本上包含计数器步进后的扩展值。\refstepcounter\@currentlabel\theXX

\@currentlabel基本上可以在任何地方使用来包含“任何东西”,并且以下内容\label(在同一组内)将获取该\@currentlabel值,最终依赖标签名称真正连接到计数器并不是一个好主意。

同样的情况也适用于使用\@currentlabelname时通常保存某个部分的名称。\nameref

\autoref然而,和所有其他相关的宏hyperref都依赖于超锚点,因此在这里使用\phantomsection是合适的。

有关提取计数器信息的更多信息refcount,您可以使用zrefHeiko Oberdiek 或我的“简短”包crossreftools,该包将在接下来的几天内更新。

当然,下面的例子相当“学术”:

\documentclass{article}

\usepackage{blindtext}
\usepackage{hyperref}
\makeatletter
\newcommand{\fakelabel}[2]{%
  \phantomsection%
  \protected@edef\@currentlabel{#1}%
  \protected@edef\@currentlabelname{#2}#1%
}
\makeatother

\begin{document}

\begin{tabular}{ll}
  \fakelabel{This is a table cell}{But is given a different name}\label{table:cell}
\end{tabular}

\clearpage
See \ref{table:cell} or \nameref{table:cell}



\end{document}

在此处输入图片描述

使用 crossreftools v0.4

有一个宏\crtcrossreflabel可以“立即”进行伪标记:

\documentclass{article}

\usepackage{blindtext}
\usepackage{hyperref}
\usepackage{crossreftools}

\begin{document}

\begin{tabular}{ll}
  \crtcrossreflabel[But is given a different name]{This is a table cell}[table:cell]
\end{tabular}

\clearpage
See \ref{table:cell} or \nameref{table:cell}
\end{document}

crossreftoolsCTAN、TL 和 MikTeX 提供 v0.8。

相关内容