如何删除计数器?

如何删除计数器?

我正在尝试删除“.sty”文件中的计数器。目前我有几个使用相同“.sty”的“.tex”文件。它们使用相同的“.sty”文件\newcommands。但是,当我要创建一个新的计数器时,计数器有时可能具有相同的名称。在这种情况下,我会收到编译器错误,因为我正在尝试创建已经定义的东西。有什么方法可以删除计数器吗?

下面是我的代码中发生的情况的一个示例:

\newcommand{\addMsg}[1] % This would be in the file.sty
{
    \newcounter{#1}
}

\addMsg{nameOfCounter}  % This would be in File1.tex
\addMsg{nameOfCounter}  % This would be in File1.tex

请记住,许多人可能会编辑这些文件,因此file1.tex有人可能会在 中放入\addMsg{Counter1}file2.tex有人也可能在 中放入\addMsg{Counter1}。因此,我不能只是简单地确保所有计数器都以不同的方式命名。

答案1

您无法取消定义计数器。您可以覆盖其定义,但这样会浪费计数器内存(现在这不是问题,但是……),或者您需要弄乱它们的较低级别实现。更简单的方法是定义一个宏,\providecounter仅在计数器尚不存在时才定义它:

\documentclass{article}
\makeatletter
\def\providecounter#1{%
  \@ifundefined{c@#1}%
    {\newcounter{#1}}{\@newctr}}
\makeatother

\providecounter{mycounter}
\providecounter{mycounter}

\begin{document}
\end{document}

相关内容