Menu
Dossiers

Les secrets des pros pour une numérotation personnalisée parfaite dans LaTeX: découvrez comment ils le font!

Maîtriser l’environnement enumerate en LaTeX : Guide complet pour des listes numérotées personnalisées #

Numéroter autrement qu’en 1, 2, 3 n’a rien d’un tour de passe-passe : LaTeX expose ses compteurs, et quelques commandes suffisent pour passer en lettres, en romains, repartir de zéro ou indexer une numérotation sur la section en cours. Voici la syntaxe exacte, vérifiée dans la documentation des paquets concernés, avec un exemple par point.

L’essentiel en 30 secondes
  • Listes : le paquet enumitem et sa clé label= (\alph*, \roman*, \arabic*).
  • Compteurs : \setcounter, \addtocounter, \stepcounter, \value.
  • Pages : \pagenumbering{roman} puis \pagenumbering{arabic}.
  • Sections : \renewcommand{\thesection}{...}, \numberwithin, \counterwithin.
Ce qu’il vous faut
  • Une distribution TeX à jour (TeX Live ou MiKTeX) et un préambule que vous pouvez éditer.
  • Les paquets enumitem, babel, multicol, amsmath, et selon les cas titlesec ou chngcntr.
  • Niveau intermédiaire : savoir compiler un document et lire un fichier .log. Comptez une vingtaine de minutes.

Syntaxe fondamentale de enumerate pour structurer ses listes #

L’environnement enumerate reste la méthode de référence pour présenter des idées dans un ordre précis. Sa syntaxe repose sur une paire d’ouverture et de fermeture qui encadre les entrées, chaque \item produisant un numéro croissant :

\begin{enumerate}
  \item Premier point
  \item Deuxième point
  \item Troisième point
\end{enumerate}

On distingue enumerate de itemize (puces non ordonnées) et de description (entrées définies par l’auteur). La distinction n’est pas cosmétique dans des contenus techniques : une énumération ordonnée signale une progression, une liste à puces une simple collection.

À lire Découvrez le Guide Ultime pour Maîtriser les Listes Numérotées en LaTeX : Optimisez Vos Documents Académiques en Un Clin d’Œil !

LaTeX standard autorise quatre niveaux d’imbrication, pilotés par les compteurs enumi, enumii, enumiii et enumiv ; au-delà, il faut enumitem et sa commande \setlistdepth{10}. Dans un texte long, mieux vaut s’arrêter à trois niveaux : la lisibilité se dégrade bien avant la limite technique.

Adapter et personnaliser le style de numérotation des listes #

La numérotation arabe est le défaut, mais le paquet enumitem permet de la remplacer par tout ce dont vous avez besoin, via une syntaxe clé=valeur :

\usepackage{enumitem}
% quatre variantes de la clé label, au choix :
\begin{enumerate}[label=\alph*)]      % a) b) c)
\begin{enumerate}[label=(\roman*)]    % (i) (ii) (iii)
\begin{enumerate}[label=\Alph*.]      % A. B. C.
\begin{enumerate}[label=Q\arabic*.]   % Q1. Q2. Q3.

Les variantes étoilées \alph*, \Alph*, \arabic*, \roman* et \Roman* désignent le compteur courant : pas besoin de le nommer. Le manuel d’enumitem donne ainsi l’exemple label=\emph{\alph*}), qui produit des lettres en italique suivies d’une parenthèse.

La clé ref= dissocie l’étiquette affichée du format des renvois : [label=(\arabic*), ref=\arabic*] affiche « (1) » dans la liste mais « 1 » dans un \ref. Et l’option shortlabels autorise la notation compacte de l’ancien paquet enumerate, \begin{enumerate}[(1)].

À lire Découvrez les Secrets des Grands Groupes pour Fusionner des Fichiers CSV et Boostez Vos Analyses de Données

Gestion avancée de la hiérarchie et de l’imbrication des énumérations #

Plutôt que de répéter les options à chaque liste, \setlist les fixe globalement, niveau par niveau :

\setlist[enumerate,1]{label=\arabic*.}
\setlist[enumerate,2]{label=\arabic{enumi}.\arabic{enumii}}

Pour une numérotation dite juridique — 1., 1.1., 1.1.1. — la clé label* ajoute l’étiquette du niveau parent devant celle du niveau courant. Combinée à \newlist, elle produit un environnement dédié et réutilisable :

\newlist{legal}{enumerate}{10}
\setlist[legal]{label*=\arabic*.}

L’alignement se règle avec les noms de paramètres classiques : leftmargin, rightmargin, labelwidth, labelsep, itemindent. Différencier nettement les marqueurs d’un étage à l’autre reste le meilleur garde-fou contre les structures illisibles.

Compatibilité des listes numérotées avec le multilinguisme et les paramètres locaux #

Les exigences typographiques françaises se règlent en chargeant le support français de babel, qui gère notamment les espaces devant la ponctuation haute et la présentation des listes :

À lire VPN et Hadopi : Ce que les internautes français doivent vraiment savoir

\usepackage[french]{babel}
\frenchsetup{StandardEnumerateEnv=true}

C’est là que ça coince : babel-french redéfinit les environnements de liste et entre donc en conflit avec une extension qui fait la même chose, enumitem en tête. Sa documentation prévoit le cas avec StandardItemizeEnv=true, StandardEnumerateEnv=true, StandardListSpacing=true, ou StandardLists=true qui neutralise d’un coup toute action sur les listes.

Un mot sur le nom de la commande : \frenchsetup s’appelait \frenchbsetup dans les versions antérieures, conservé comme alias. Deux réglages voisins méritent d’être connus : ThinColonSpace=true remplace l’espace-mot insécable placée avant les deux-points par une espace fine insécable, et \NoAutoSpacing, utilisée dans un groupe, inhibe localement l’insertion automatique d’espaces.

Techniques pour intégrer des listes énumérées dans des mises en page complexes #

Reste à insérer ces listes dans des contextes contraints : colonnes, tableaux, encadrés. Le paquet multicol définit l’environnement multicols, qui compose le texte sur jusqu’à dix colonnes et équilibre par défaut leur hauteur en fin d’environnement :

\usepackage{multicol}
\begin{multicols}{2}
\begin{enumerate}[label=\arabic*., itemsep=0pt]
  \item Entrée courte
  \item Entrée courte
\end{enumerate}
\end{multicols}

Pour densifier sans casser la lecture, jouez sur topsep, parsep, itemsep et partopsep. enumitem fournit trois raccourcis : noitemsep (espace entre items), nosep (tout espace vertical), et le réglage global \setlist{nosep}.

À lire cat Linux : Maîtrisez la concaténation et la lecture de fichiers en ligne de commande

Personnalisation dynamique : numérotations spéciales et extensions originales #

Trois clés d’enumitem couvrent le sur-mesure : start= fixe le numéro du premier item, resume reprend le compteur là où la liste précédente l’a laissé, et series= regroupe plusieurs listes en une unité numérotée continue.

\begin{enumerate}[start=5]
  \item Cet item porte le numéro 5
\end{enumerate}
Texte intercalaire.
\begin{enumerate}[resume]
  \item La numérotation reprend à 6
\end{enumerate}

La variante resume* reprend en plus les options de la liste précédente ; associée à start=1, elle conserve le style tout en repartant de un. Pour un marqueur atypique, la clé font= habille l’étiquette : la documentation d’enumitem va jusqu’à label=\protect\fcolorbox{blue}{yellow}{\protect\ding{\value*}}, révélateur de ce que label accepte.

Piloter les compteurs LaTeX : setcounter, addtocounter et value #

Derrière chaque numéro se cache un compteur. LaTeX en définit une série standard — part, chapter, section, page, figure, table, footnote, equation, enumi à enumiv — et vous pouvez créer les vôtres :

\newcounter{exercice}
\newcounter{question}[exercice]   % remis à zéro quand exercice avance
\setcounter{exercice}{3}          % valeur explicite
\addtocounter{exercice}{2}        % incrément (ou décrément si négatif)
\stepcounter{exercice}            % +1, et réinitialise les compteurs dépendants
\refstepcounter{exercice}         % +1, et rend le compteur référençable par \label
Exercice \theexercice{} sur \arabic{exercice} au total.

Retenez la distinction qui fait perdre le plus de temps : \theexercice imprime la représentation formatée, tandis que \value{exercice} renvoie la valeur numérique, destinée aux calculs, pas à l’affichage. Le format se choisit avec \arabic, \roman, \Roman, \alph, \Alph ou \fnsymbol.

À lire Découvrez les secrets de Java: techniques de test pour une qualité logicielle infaillible

Numéroter les pages autrement : pagenumbering et remise à zéro #

La pagination obéit à la même mécanique. \pagenumbering accepte arabic, roman, Roman, alph et Alph — de quoi paginer les pages liminaires en romains puis basculer en arabe au début du corps :

\pagenumbering{roman}
% pages liminaires : i, ii, iii...
\newpage
\setcounter{page}{5}
\pagenumbering{arabic}
% le corps du document repart à 1

Attention à l’ordre : \pagenumbering remet le numéro de page à sa valeur initiale pour chaque style. Pour démarrer à une valeur précise, appelez donc \setcounter{page}{...} après le changement de style, jamais avant.

Changer la numérotation des sections : thesection, numberwithin et counterwithin #

Chaque compteur possède une commande d’affichage \the... redéfinissable. C’est le levier le plus direct pour imposer un format éditorial :

\renewcommand{\thesection}{\thepart.\arabic{section}}
\renewcommand{\thetable}{\Roman{table}}
\setcounter{secnumdepth}{3}   % jusqu'où les titres sont numérotés
\section*{Avant-propos}       % titre non numéroté
\addcontentsline{toc}{section}{Avant-propos}

Pour rattacher un compteur à un autre, amsmath fournit \numberwithin{equation}{section} : les équations deviennent 1.1, 1.2, puis repartent à 2.1 à la section suivante, à accompagner d’un \renewcommand{\theequation}{\thesection\arabic{equation}} pour éviter les points en double. Côté structure, \counterwithin{compteur}{parent} remet un compteur à zéro chaque fois que son parent avance, et \counterwithout défait ce lien : ce sont les deux commandes du paquet chngcntr.

Si c’est l’apparence du titre et non le numéro qui doit changer, passez à titlesec, une interface aux commandes de sectionnement : \titlelabel{\thetitle.\quad} ajoute un point après le numéro, \titleformat*{\section}{\itshape} change la fonte. L’interface avancée expose \titleformat{commande}[forme]{format}{label}{sep}{code-avant}[code-après] et \titlespacing*{commande}{gauche}{avant}{après}[droite].

Erreurs fréquentes et dépannage #

À faire
  • Charger enumitem après les paquets de langue et de classe qui touchent aux listes.
  • Déclarer les réglages globaux avec \setlist dans le préambule, pas liste par liste.
  • Utiliser ref= dès que l’étiquette contient des parenthèses ou de la mise en forme.
  • Recompiler deux fois après avoir touché aux compteurs : les renvois se stabilisent au second passage.
À éviter
  • Imbriquer au-delà de quatre niveaux sans \setlistdepth : erreur « too deeply nested ».
  • Laisser babel-french et enumitem se disputer les listes sans StandardEnumerateEnv.
  • Écrire \value{page} dans le texte : cette commande n’imprime rien, elle renvoie un nombre.
  • Appeler \setcounter{page}{...} avant \pagenumbering, qui écrasera la valeur.
À retenir
  • Une liste se personnalise avec enumitem et la clé label= ; tout le reste en découle.
  • Un compteur se pilote avec \setcounter, \addtocounter et \stepcounter ; \value sert aux calculs, pas à l’affichage.
  • La pagination se change avec \pagenumbering, qui réinitialise le numéro : ajustez ensuite avec \setcounter{page}.
  • Un format de section se redéfinit via \renewcommand{\thesection} ; \numberwithin et \counterwithin gèrent les dépendances entre compteurs.
  • Un conflit de listes en français se résout par \frenchsetup{StandardEnumerateEnv=true}.

Questions fréquentes sur la numérotation personnalisée #

Comment obtenir des lettres au lieu des chiffres dans une liste ?
Chargez enumitem et écrivez \begin{enumerate}[label=\alph*)] pour a), b), c), ou label=\Alph*. pour A., B., C. La variante étoilée renvoie au compteur de la liste en cours.
Comment reprendre la numérotation d’une liste interrompue ?
Utilisez la clé resume sur la seconde liste. Si vous voulez aussi conserver les options de style de la première, employez resume*. Pour un enchaînement sur tout le document, préférez la clé series=.
Pourquoi ma personnalisation de liste ne s’applique-t-elle pas en français ?
Parce que babel-french agit lui aussi sur la présentation des listes. Ajoutez \frenchsetup{StandardEnumerateEnv=true} après le chargement de babel, ou StandardLists=true pour désactiver entièrement son intervention sur les listes.
Comment numéroter les équations par section ?
Avec amsmath, placez \numberwithin{equation}{section} dans le préambule, et ajoutez \renewcommand{\theequation}{\thesection\arabic{equation}} si vous voyez des points en double.
Quelle différence entre \thesection et \value{section} ?
\thesection imprime la représentation formatée, telle qu’elle apparaît dans le document. \value{section} renvoie un nombre exploitable par TeX dans un test ou un calcul, et ne compose pas de texte.

À noter également : découvrir.

Digga est édité de façon indépendante. Soutenez la rédaction en nous ajoutant dans vos favoris sur Google Actualités :

Dans la même rubrique : Outils & Tech