是否可以\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}