从属重复计数器

从属重复计数器

是否可以创建一个计数器,它是另一个(主)计数器的“从属”,但也是完全重复的?

每当增加\@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}

相关内容