我想恢复当前环境计数器的值并将其存储以供自己使用,例如在下面的例子中我想存储(不是print) 数字 1. 通过\@currenvir
我可以获得当前环境的名称。获取我所在环境的计数器值最方便的方法是什么?
如果我知道我处于一个lemma
如下所示的状态,那么解决方案很简单,但我正在寻找一种独立于我所处环境类型的解决方案。
(编辑:)最好是能与各种扰乱标签系统的包一起使用的东西(,,,hyperref
等等)cleveref
autoref
\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}
编辑-- 的后续软件包assoccnt
是xassoccnt
并提供\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}