是否可以创建一个计数器,它是另一个(主)计数器的“从属”,但也是完全重复的?
每当增加\@addtoreset{<slave>}{<master>}
时重置(类似的功能由<slave>
<master>
chngcntr
),但我不知道每当<slave>
另一个计数器( <master>
) 增加时是否会自动增加一个计数器 ( )。
这个想法是使用一个宏(比如说)\dupcntr{<slave>}{<master>}
来模拟\@addtoreset
。这种应用可能是,人们可能有兴趣将包使用/提供的计数器重命名为对用户更有意义的东西(比如说<slave>
),而不必引用<master>
。或者,如果原始计数器包含@
每次使用时都需要转义的 ,那么使用“更用户友好”的计数器有时更方便。
我知道一种解决方法是使用返回 值的宏<master>
,但使用宏是否可以执行与计数器相同的操作?这里的操作是指打印计数器(通过\the<slave>
)及其表示(如\arabic
、\alph
、...)。
答案1
如果两者应始终具有相同的值,为什么不简单地将\let
从属设备复制到主设备?这会将内部引用复制到寄存器\count
。
\newcommand*{\dupcntr}[2]{%
\expandafter\let\csname c@#1\expandafter\endcsname\csname c@#2\endcsname
}
这是用于 LaTeX 计数器的。对于 TeX 计数,只需删除c@
(如果由 cs 名称给出)或使用\let#1#2
如果由控制序列给出。
答案2
查看我的“amsthm 调整”:发布在这里。我就是这么做的,因为该amsthm
包在制作下属定理数字方面很懒惰,这破坏了该fncylab
包自定义输出的方式\ref
。代码如下:
\makeatletter
\newcommand{\clonecounter}[2]{
\@xp\xdef\csname c@#1\endcsname{\@xp\@nx\csname c@#2\endcsname}
\@xp\xdef\csname the#1\endcsname{\@xp\@nx\csname the#2\endcsname}
% This is for hyperref compatibility
\@xp\xdef\csname theH#1\endcsname{\@xp\@nx\csname theH#2\endcsname}
% Don't copy p@#2 or cl@#2!
\global\@xp\let\csname p@#1\endcsname = \@empty
\global\@xp\let\csname cl@#1\endcsname = \@empty
% This is wrong, for some reason. So it's commented out.
%\@addtoreset{#1}{@ckpt}
}
\makeatother
这会创建一个新的计数器#1
,它从诞生之日起就完全服从于#2
:相同的计数寄存器,相同的打印方式。它设置了 LaTeX 认为构成“计数器”的所有内部量,因此您可以正确地计算\addtocounter
和\refstepcounter
打印\@addtoreset
。
答案3
Heiko Oberdiek 的aliascnt
包裹提供了此功能。它提供\newaliascnt{<slave>}{<master>}
并可用于定理共享基数计数器的情况:
\documentclass{article}
\usepackage{aliascnt}% http://ctan.org/pkg/aliascnt
\newtheorem{foo}{Foo}% counter "foo"
\newaliascnt{bar}{foo}% alias counter "bar"
\setlength{\parindent}{0pt}% Just for this example
\begin{document}
\setcounter{foo}{10}%
\begin{foo}Something\end{foo}
\verb|foo:|\ \thefoo \par
\verb|bar:|\ \thebar
\end{document}
正如预期的那样,它与hyperref
。
答案4
包裹assoccnt
及其继任者xassoccnt
提供了这个功能,“一种将计数器与现有驱动计数器关联起来的方法,这样增加驱动计数器也会增加其关联计数器。”
以下是一个小例子:
\documentclass{article}
\usepackage{assoccnt}
\newcounter{mysection}
\DeclareAssociatedCounters{section}{mysection}
\begin{document}
\thesection\ \themysection
\section{A section} \thesection\ \themysection
\end{document}