備忘録:TeXの自作カウンター:addtocounter{num}{1}とstepcounter{num}の違い、親カウンターと子カウンター

レポート課題をTeXで作成するにあたり、レポート番号を自作カウンターで振っていた。各レポートの最初に出力される定形文で、カウンターが1つずつ更新される仕組みにしていた。

%宿題の定型文
\newcommand{\teikei}{
\addtocounter{reportnumber}{1}
\setcounter{problemcounter}{0}
\clearpage
\textbf{\LARGE レポート課題\arabic{reportnumber} }
\par\vspace{3mm}
\begin{shadebox}
\begin{itemize}
\item 提出課題を解きkibacoに答を入力して下さい。
\item 自習課題は提出する必要はありません。理解を深めるために自習しましょう。
\end{itemize}
\end{shadebox}
}

図表の番号は、各レポートごとに分けて出力したい。そこで
http://rexpit.blog29.fc2.com/blog-entry-99.html
などを参照して

\makeatletter
	\renewcommand{\thefigure}{% 図番号の付け方
	\thereportnumber.\arabic{figure}}
	\@addtoreset{figure}{reportnumber}
	\renewcommand{\thetable}{% 表番号の付け方
	\thereportnumber.\arabic{table}}
	\@addtoreset{table}{reportnumber}
\makeatother

としてみた。

ところが、これでは各レポートごとに図表番号が初期化されない。レポート1で図1.1、図1.2と出力されたあと、レポート2では図2.1と出力して欲しいのに、図2.3になってしまう。

上記の参照記事だと、カウンターはデフォルトでリセットされるはずなんだけど…

問題は

\addtocounter{reportnumber}{1}

にあった。カウンターを1つずつ進めるには

\stepcounter{reportnumber}

を使う。そうすると@addtoresetというコマンドによって、カウンター
reportnumber がstepcounterによって増えるたびにリセットされるようだ。

\@addtoreset{カウンタ}{親カウンタ}:親カウンタが増えると(子)カウンタがリセットされる。

なるほど、親カウンターと子カウンターという概念があるんだ。知らなかった。

あれ?そうすると、待てよ。problemcounterというカウンター(問題番号をカウントする)を作っているんだが...レポート番号をリセットするためにヘッダーに

カウンターの定義
\newcounter{problemcounter}

各問題ごとにカウンターを進めるとき
\addtocounter{reportnumber}{1}  %これまで
\setcounter{problemcounter}{0}  %ヘッダーでカウンターをリセット

としてきた。こちらも親カウンターをreportnumberと考えて

カウンターの定義
\newcounter{problemcounter}[reportnumber]
\stepcounter{reportnumber}

とすれば良くて、\setcounter{problemcounter}{0} はいらないのではないかな?

やってみるとうまく行って、その通りだった。なるほど!!

次の問題:
\label{…}、\ref{…}で親カウンターを含めて参照するにはどうしたらいいんだ??