カウンターを削除するにはどうすればいいですか?

カウンターを削除するにはどうすればいいですか?

「.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}

関連情報