获取当前计数器的值

获取当前计数器的值

我想恢复当前环境计数器的值并将其存储以供自己使用,例如在下面的例子中我想存储(不是print) 数字 1. 通过\@currenvir我可以获得当前环境的名称。获取我所在环境的计数器值最方便的方法是什么?

如果我知道我处于一个lemma如下所示的状态,那么解决方案很简单,但我正在寻找一种独立于我所处环境类型的解决方案。

(编辑:)最好是能与各种扰乱标签系统的包一起使用的东西(,,,hyperref等等)cleverefautoref

\documentclass{article}

\newtheorem{lemma}{Lemma}
\newcommand{\storecurrentlabelvalue}[1]{}


\begin{document}

\begin{lemma}
blabla\storecurrentlabelvalue{\mylabelvalue}
\end{lemma}
\end{document}

答案1

并非每个环境都有一个计数器,即使它有一个计数器,也不能保证该计数器具有与环境相同的名称(反之亦然)。

这用于\xpatchcmd{}入侵\refstepcounter(即标签),并定义\mylabelvalue\number\value{#1}#1作为计数器名称。

它不会干扰hyperref等等。

\documentclass{article}

\usepackage{xpatch}
\newtheorem{lemma}{Lemma}

\xdef\mylabelvalue{}

\xpatchcmd{\refstepcounter}{%
  \stepcounter{#1}%
}{%
  \stepcounter{#1}%
  \xdef\mylabelvalue{\number\value{#1}}%
}{\typeout{success}}{\typeout{failure}}


\begin{document}

\begin{lemma}
blabla
\end{lemma}

Value is \mylabelvalue


\begin{equation}
   E = mc^2
\end{equation}


\begin{equation}
   E = mc^2
\end{equation}

\begin{equation}
   E = mc^2
\end{equation}


Value is \mylabelvalue



\end{document}

这是另一个版本

它使用我的assoccnt包和命令\LastRefSteppedCounter,而且还有\LastSteppedCounter

\documentclass{article}

\usepackage{assoccnt}
\newtheorem{lemma}{Lemma}




\begin{document}

\begin{lemma}
blabla
\end{lemma}

The last counter refstepped was \LastRefSteppedCounter\ and its value is  \number\value{\LastRefSteppedCounter}


\section{A section}

\section{Another section}

The last counter refstepped was \LastRefSteppedCounter\ and its value is  \number\value{\LastRefSteppedCounter}


\end{document}

在此处输入图片描述

编辑-- 的后续软件包assoccntxassoccnt并提供\LastCounterValue新功能。我已上传xassoccnt v0.6到 CTAN(最近),当前版本v1.5已经是。

\documentclass{article}

\usepackage{xassoccnt}
\newtheorem{lemma}{Lemma}

\begin{document}

\begin{lemma}
blabla
\end{lemma}

\begin{lemma}
Other one
\end{lemma}

\begin{lemma}
Yet another one
\end{lemma}


The last counter refstepped was \LastRefSteppedCounter\ and its value is \LastCounterValue

\edef\storedlastvalue{\LastCounterValue}


\section{A section}

\section{Another section}

The last counter refstepped was \LastRefSteppedCounter\ and its value is \LastCounterValue

\subsection{Even deeper sectioning}

The last counter refstepped was \LastRefSteppedCounter\ and its value is \LastCounterValue\ contrary to \storedlastvalue

\end{document}

在此处输入图片描述

相关内容