在此页面,我发现了一种方法,仅当至少使用两次时才显示一个计数器。
此解决方案的问题在于它不适用于两个计数器。有没有办法允许这种功能?
\documentclass{article}
\makeatletter
\newcommand{\defineoneshotcounter}[1]{%
\newcounter{#1}
\newcounter{#1@helper}
\expandafter\newcommand\csname show#1\endcsname[1][\arabic]{%
\stepcounter{#1}%
\stepcounter{#1@helper}%
\@ifundefined{#1@reset@\the\csname c@#1@helper\endcsname}{##1{#1}}{}%
}
\@namedef{reset#1}{%
\ifnum\csname c@#1\endcsname=1\if@filesw
\immediate\write\@auxout{%
\string\global\string\@namedef{#1@reset@\the\csname c@#1@helper\endcsname}{}%
}%
\fi\fi
\setcounter{#1}{0}%
}
}
\makeatother
\defineoneshotcounter{FirstCounter}
\newcommand{\FirstCounterStyle}[1]{\{\arabic{#1}\}}
\defineoneshotcounter{SecundCounter}
\newcommand{\SecundCounter}[1]{\{\arabic{#1}\}}
\setlength{\parindent}{0cm}
\begin{document}
\section{First counter}
TEST : \showFirstCounter,
TEST : \showFirstCounter,
TEST : \showFirstCounter,
RESET : \resetFirstCounter
TEST : \showFirstCounter[\alph],
TEST : \showFirstCounter[\alph],
RESET : \resetFirstCounter
TEST : \showFirstCounter,
RESET : \resetFirstCounter
TEST : \showFirstCounter[\FirstCounterStyle],
TEST : \showFirstCounter[\FirstCounterStyle],
TEST : \showFirstCounter[\FirstCounterStyle],
TEST : \showFirstCounter[\FirstCounterStyle],
RESET : \resetFirstCounter
TEST : \showFirstCounter,
RESET : \resetFirstCounter
TEST : \showFirstCounter,
TEST : \showFirstCounter,
RESET : \resetFirstCounter
\section{Secund counter}
TEST : \showSecundCounter,
TEST : \showSecundCounter,
TEST : \showSecundCounter,
RESET : \resetSecundCounter
TEST : \showSecundCounter[\alph],
TEST : \showSecundCounter[\alph],
RESET : \resetSecundCounter
TEST : \showSecundCounter
\end{document}
答案1
第二个解决方案如果计数器仅显示一次则隐藏它适用于同时或不同时间定义的多个计数器。
@Marc van Dongen:请参阅下面 projetmbc 的输出。
我猜他是说最后一个\showSecundCounter
不应该产生任何结果,因为它在SecundCounter
重置后只被调用了一次。