按需临时计数器

按需临时计数器

是否可以\mycounter{<par>}在 LaTeX 中定义一个执行以下操作的命令:

  • 如果存在具有名称的计数器<par>,则增加该计数器的值并打印计数器的当前值;
  • 如果不存在同名的计数器<par>,则创建一个名为<par>值的新计数器1并打印当前值<par>

答案1

尽管在任何情况下都不建议这样做,但这会动态生成计数器。

如果作为第一个参数给出的计数器名称已经存在,则已经有一个命令,它是计数器的 LaTeX 表示(实际上,是寄存器\c@#1上的顶层) 。\count....

如果\@undefined{c@#1}为真,则定义新的计数器并将其设置为 1,以 显示\csname the#1\endcsname,即\thefoo例如

\documentclass{article}

\makeatletter
\newcommand{\counteronthefly}[1]{%
  \@ifundefined{c@#1}{%
    \newcounter{#1}%
    \setcounter{#1}{1}%
    \csname the#1\endcsname% print it
  }{%
    \stepcounter{#1}%
    \csname the#1\endcsname% print it
  }%
}
\makeatother

\begin{document}
\parindent=0pt
\section{First}

section counter exist -- increase and show: \counteronthefly{section}

foo counter does not exist -- define, set to zero and show: \counteronthefly{foo}

foo counter does exist now -- increase and show: \counteronthefly{foo}


\end{document}

在此处输入图片描述

相关内容