Accueil > Trucs et astuces > Remettre à zéro le compteur d’exercices

Remettre à zéro le compteur d’exercices

Approfondir sa connaissance de LaTeX

jeudi 11 juillet 2024, par Michel Bovani

Toutes les versions de cet article : [English] [français]

La commande \exo permet de saisir des exercices numérotés (la version étoilée est non numérotée). Un de problèmes qui peuvent se poser est que le compteur n’est jamais remis à zéro tout au long du document, quelle que soit la longueur de ce dernier. Un autre choix était bien sûr possible, mais celui-là m’a semblé le plus simple.

Il est bien entendu toujours possible de remettre ce compteur à zéro « à la main » en saisissant là où cela paraît nécessaire : \setcounter{tgoexo}{0}, puisque la documentation précise que le nom du compteur est tgoexo. Cette méthode est sans inconvénient si son emploi demeure ponctuel (par exemple pour une feuille d’exercices en deux parties), mais peut devenir fastidieuse, voire un peu risquée, si on attend une remise à zéro plus systématique du compteur. « Plus systématique », cela peut signifier que l’on souhaite que le compteur soit remis à zéro à chaque nouveau chapitre (pour ceux qui utilisent la version book) ou chaque nouvelle section.

Or il existe une commande LaTeX (de portée générale, raison pour laquelle elle n’est pas documentée dans le mode d’emploi de tango) permettant d’assujettir un compteur à un autre. Cette commande est counterwithin (ou sa version étoilée counterwithin*).

Attention : cela ne peut fonctionner qu’avec une commande pourvue d’un compteur opérationnel. En particulier les commandes de sectionnement étoilées telles que \section* ne fonctionneront pas !

Syntaxe

counterwithin{<counter>}{<parent-counter>}

ou

counterwithin*{<counter>}{<parent-counter>}

Dans les deux cas, une fois la commande exécutée, <counter> est remis à zéro à chaque fois que <parent-counter> est incrémenté.

La version étoilée ne change pas l’affichage par défaut de \the<counter>, tandis que la version non étoilée transforme \the<counter> en \the<parent-counter>.\arabic{<counter>}

Noter qu’il existe des commandes \counterwithoutet \counterwithout*qui font tout le contraire de celles dont nous venons de parler.

Il est enfin possible de définir une commande permettant (par exemple) d’introduire les différentes parties d’une feuille d’exercice, pourvu d’un compteur apparent ou non et de subordonner la remise à zéro de \tgoexo au compteur de cette nouvelle commande.

Exemple 1 : \counterwithin

% !TEX TS-program = LuaLaTeX
\documentclass[french,ColorTheme=Red]{tango}
\counterwithin{tgoexo}{section}
\begin{document}
\section{Exercices de géométrie}
\exo Démontrer que les médiatrices des trois côtés d'un triangle sont concourantes.
\exo Démontrer que les trois médianes d'un triangle sont concourantes.
\section{Exercices d'arithmétique}
\exo Démontrer que la somme de deux entiers pairs est un entier pair.
\exo Démontrer que la somme de deux entiers impairs est un entier pair.
\end{document}

Exemple 2 : \counterwithin*

% !TEX TS-program = LuaLaTeX
\documentclass[french,ColorTheme=Red]{tango}
\counterwithin*{tgoexo}{section}
\begin{document}
\section{Exercices de géométrie}
\exo Démontrer que les médiatrices des trois côtés d'un triangle sont concourantes.
\exo Démontrer que les trois médianes d'un triangle sont concourantes.
\section{Exercices d'arithmétique}
\exo Démontrer que la somme de deux entiers pairs est un entier pair.
\exo Démontrer que la somme de deux entiers impairs est un entier pair.
\end{document}
</codee>

{Exemple 3 : commande personnelle avec compteur apparent}
<code class="latex">
% !TEX TS-program = LuaLaTeX
\documentclass[french,ColorTheme=Red]{tango}
\newcounter{partexo}
\newcommand\partexo[1]{%
\vspace{12pt plus 3pt minus 2pt}\par
\refstepcounter{partexo}
{\color{ColorOne}\bfseries\thepartexo.\hspace{0.5em}\MakeUppercase{#1}}
\vspace{2pt minus 1pt}\par\nobreak
}
\counterwithin*{tgoexo}{partexo}
\begin{document}
\partexo{Exercices de géométrie}
\exo Démontrer que les médiatrices des trois côtés d'un triangle sont concourantes.
\exo Démontrer que les trois médianes d'un triangle sont concourantes.
\partexo{Exercices d'arithmétique}
\exo Démontrer que la somme de deux entiers pairs est un entier pair.
\exo Démontrer que la somme de deux entiers impairs est un entier pair.
\end{document}

Exemple 4 : commande personnelle avec compteur non apparent

% !TEX TS-program = LuaLaTeX
\documentclass[french,ColorTheme=Red]{tango}
\newcounter{partexo}
\newcommand\partexo[1]{%
\vspace{12pt plus 3pt minus 2pt}\par
\stepcounter{partexo}
{\color{ColorOne}\bfseries\MakeUppercase{#1}}
\vspace{2pt minus 1pt}\par\nobreak
}
\counterwithin*{tgoexo}{partexo}
\begin{document}
\partexo{Exercices de géométrie}
\exo Démontrer que les médiatrices des trois côtés d'un triangle sont concourantes.
\exo Démontrer que les trois médianes d'un triangle sont concourantes.
\partexo{Exercices d'arithmétique}
\exo Démontrer que la somme de deux entiers pairs est un entier pair.
\exo Démontrer que la somme de deux entiers impairs est un entier pair.
\end{document}