--- myst: html_meta: keywords: LaTeX,latex,programmation,compteurs,dépendance --- # Comment définir un compteur dépendant d'un autre compteur ? Il est courant d'avoir des éléments numérotés tenant compte du numéro de chapitre (par exemple, dans les classes standard et , figures, tableaux et notes de bas de page sont tous numérotés ainsi). Le processus de réinitialisation se fait automatiquement, lorsque le compteur « maître » est incrémenté (lorsque la commande `\chapter` qui démarre le chapitre ⟨N⟩ est traitée, le compteur `chapter` est incrémenté, et tout les compteurs dépendants sont mis à zéro). Mais comment faire cela par vous-même ? Vous souhaitez peut-être numéroter les algorithmes en tenant compte du numéro de section, ou les corollaires en tenant compte du numéro de théorème, par exemple. ## Avec des commandes de base Si vous définissez cela manuellement, vous devez déclarer cette relation entre compteurs lorsque vous définissez le compteur qui dépend d'un autre (ici *esclave* qui dépend de *maitre*) : ```{noedit} \newcounter{esclave}[maitre] ``` Ainsi, à chaque fois le compteur nommé *maitre* est incrémenté, le compteur nommé *esclave* est réinitialisé. Mais que se passe-t-il si vous avez une extension qui définit les objets pour vous mais qui ne fournit pas d'interface de programmation pour que les compteurs se comportent comme vous le souhaitez ? ## Avec des commandes internes La commande `\newcounter` se sert d'une commande interne LaTeX que vous pouvez utiliser (avec, [au besoin](/2_programmation/macros/makeatletter_et_makeatother), `\makeatletter` et `\makeatother`) : ```{noedit} \@addtoreset{esclave}{maitre} ``` ## Avec l'extension « chngcntr » L'extension encapsule la commande `\@addtoreset` dans une commande `\counterwithin`, ce qui permet la solution suivante (rendant le compteur des corollaires dépendant du compteur des théorèmes nommé *theorem*) : ```{noedit} \counterwithin*{corollaire}{theorem} ``` La commande utilisée sans l'astérisque aura un comportement légèrement différent : ```{noedit} \counterwithin{corollaire}{theorem} ``` Par rapport à ce que fait `\counterwithin*`, elle ajoute une redéfinition de `\thecorollaire` sous la forme ⟨numéro du théorème⟩.⟨numéro du corollaire⟩, ce qui est une bonne approche si jamais vous voulez vous référer aux corollaires (il y a potentiellement beaucoup de « corollaire 1 » dans n'importe quel document, autant donc lier son numéro à celui du compteur du théorème auquel il appartient). Si vous n'utilisez pas , vous pouvez ici lire la question référez-vous à la réponse à « [](/2_programmation/syntaxe/compteurs/comment_fonctionnent_les_compteurs) » pour les techniques nécessaires. La version 2018 de LaTeX a intégré les commandes de au format : `\counterwithin` et `\counterwithout` sont donc désormais directement disponibles sans nécessiter d'extension. ## Cas particulier du compteur des pages Notez que la technique ne fonctionne pas si le compteur maître est `page`, le numéro de la page courante. Le compteur `page` est inséré profondément dans la routine de sortie, généralement appelée souvent bien après que le texte de la nouvelle page ait commencé à apparaître : des techniques spéciales sont donc nécessaires pour gérer ce cas, comme par exemple avec les [notes de bas de page numérotées par page](/3_composition/texte/pages/footnotes/numeroter_les_notes_de_bas_de_page_page_par_page). Une des techniques, utilisant l'extension , peut être appliquée à n'importe quel compteur. Pour que la réinitialisation du compteur ⟨compteur⟩ s'effecture à chaque page, l'extension met à disposition la commande : ```{noedit} \MakePerPage{⟨compteur⟩} ``` L'extension utilise un mécanisme semblable à une étiquette et peut nécessiter plus d'une exécution de LaTeX pour stabiliser les valeurs des compteurs. De fait, LaTeX générera les avertissements habituels concernant le changement d'étiquette. :::{sources} [Master and slave counters](faquk:FAQ-addtoreset) :::