Personnaliser ses listes LaTeX avec enumitem

latex 21 mars 2013

Hello everybody,

aujourd’hui, un petit peu de LaTeX. Je suis en train de taper un rapport pour le boulot, et mon « super » méga-bouquin sur LaTeX est toujours sur le feu. Du coup, je me suis dit : pourquoi ne pas en faire un petit guide ?

On va donc parler des listes, vous savez, ces fameuses listes à puces ou non ! C’est vrai que de base, elles sont plutôt pauvres : des tirets, rien du tout, ou des numéros… C’est quand même sympa, parfois, de remplacer ces tirets par un p’tit cœur, non ? 🙂

Commençons par le début…

Rappels de typographie française

Eh oui… Parce que ça, c’est la base, et c’est jamais respecté. La (bonne) mise en page d’un document commence là, pourtant !

Chaque élément d’une liste non-numérotée (itemize, donc) commence par un tiret (de base, hein), et surtout par une minuscule. De la même façon, les éléments de premier niveau se terminent par un point-virgule (et pas autre chose), les éléments de niveaux supérieurs (dans une liste imbriquée… exemple plus bas) par une virgule. Le dernier élément se termine par un point.

Pour ce qui est des listes numérotées ou classifiées par des lettres : on met une majuscule au début de chaque élément. La ponctuation en fin de ligne est la même qu’au-dessus. Si on imbrique des énumérations, on commence par des chiffres arabes, le niveau du dessous se change en lettres minuscules, et encore en dessous on a des chiffres romains minuscules aussi. Si on veut faire plus de 3 niveaux, ça devient un pancake.

L’environnement « description » : là pour le coup, je fais un petit rappel, vu que je n’en ai jamais causé. Chaque élément est de la forme suivante :

1
2
3
4
\begin{description}
\item[élément 1 :] explication 1 ;
\item[élément 2 :] explication 2.
\end{description
}

Bien sûr, il est possible d’imbriquer des listes de types différents :

1
2
3
4
5
6
7
\begin{enumerate}
\item On commence par expliquer quelques termes ;
\begin{description}
\item[élément 1 :] explication 1 ;
\item[élément 2 :] explication 2.
\end{description
}
\item Et on termine par un second élément.

Personnaliser ses listes

Quelque chose me dit que c’est ce pourquoi tu es là. Il y a pas mal de façons de faire, mais je vais parler d’une solution qui, si elle me semble bien pratique et simple à maîtriser, n’est pas forcément la meilleure, selon le point de vue de chacun. On va donc utiliser le package enumitem (n’oublie pas de le charger dans ton préambule, parce que je sens poindre le syndrome du « samarchpa » ).

Je vous avais dit qu’on remplacerait le tiret par un cœur,  alors let’s do that. Un exemple sera plus parlant qu’un long discours ! 😉

1
2
3
4
5
\begin{itemize}[label=$\heartsuit$]
\item réponse A;
\item Obi-Wan Kenobi ;
\item 42.
\end{itemize
}

Tu noteras donc, cher lecteur, que l’option entre [ ] se place bien après le type de liste entre { }. Si tu places tes options avant, tu ne récolteras qu’une sorte de diarrhée textuelle (si si) au moment de la compilation.

Les options se cumulent. Ainsi, tu peux changer la taille du cœur pour le faire plus gros, et même le colorer (et dans ce cas, il faut charger le package xcolor et au besoin créer une nouvelle couleur) :

1
2
3
4
\begin{itemize}[label=$\heartsuit$, font=\color{magenta} \huge]
\item la réponse D ;
\item nyan cat.
\end{itemize
}

C’est quand même pas bien méchant !

Toujours plus de puces !

Point de pub pour un quelconque médicament pour chaton, simplement un petit « bonus » : avec LaTeX, il est possible de charger une police de symboles, un peu comme avec un traitement de texte classique. Pour cela, il suffit de charger le package pifont dans le préambule !

On appelle les symboles avec une commande spécifique : \ding{}, avec comme argument le numéro correspondant au symbole voulu. Numéro qu’il suffit de prendre dans la table suivante :

Table des symboles
Table des symboles

Par exemple, pour le petit cœur, ce sera \ding{164} !

Idem, on peut utiliser (comme je l’ai fait plus haut, en fait, mais sans le préciser — les plus balèzes d’entre vous l’auront remarqué au double $) le mode mathématique pour utiliser ses symboles, comme :

Quelques symboles du mode mathématique
Quelques symboles du mode mathématique

À placer entre deux $ pour qu’il soit reconnu/interprété !

Personnalisation des énumérations

Pas d’jaloux, tout le monde a droit au même traitement. On va jouer un peu avec les enumerate !

Changer le type de numérotation :

1
2
3
4
5
\begin{enumerate}[label=\Roman*]
\item Paul le poulpe ;
\item @Zilkos ;
\item hééé gentil canard.
\end{enumerate
}

C’est le label qui fait tout. Il y en a plusieurs :

  • Roman* : I , II …
  • roman* : i , ii …
  • Alph* : A, B, C…
  • alph* : a, b, c…

En plus de ça, vous pouvez ajouter un symbole supplémentaire. Je m’explique : si le a, b… ne convient pas et que tu veux un a), b)… il te suffit d’ajouter  le symbole après le * :

1
\begin{enumerate}[label=\alph*)]

Encore plus fort et pratique : on peut ajouter un mot ! Je m’en sers quand je crée des exercices pour les cours à domicile…

1
\begin{enumerate}[label=Exercice\Roman*--]

Cet exemple va me numéroter tous les éléments avec des chiffres romains majuscules, en les faisant précéder du mot « Exercice » et terminera par un tiret.

Comme pour les itemize, la coleur, taille de police… est modifiable, de façon identique.

Il y a aussi d’autres options, comme l’encadrement des numéros, la numérotation continue des sous-listes… Ce sera dans le bouquin (qui sera libre et gratuit, normalement 😀 ), mais si vous voulez, demandez en commentaire, je répondrai.

Changer la numérotation dans tout le document

Toutes ces modifs, aussi géniales qu’elles soient, ne sont que locales : elles ne s’appliquent qu’à la liste concernée. Comment faire pour qu’elles soient appliquées à l’ensemble du document ? En plaçant dans le préambule une/plusieurs ligne(s) du type :

1
\setenumerate[profondeur]{font=xxx, label=yyy}

La profondeur correspond au niveau de la liste, c’est donc un entier entre 1 et le niveau max de vos listes.

De même pour itemize, sauf que la commande sera \setitemize .

Créer son propre environnement de liste

Là, on attaque les choses sérieuses, pour les « grands ».

Imaginons que vous utilisiez 2 types de listes avec enumerate, pour des utilisations différentes. Vous ne pouvez pas définir l’environnement de façon globale et, reconnaissez-le, définir ponctuellement chacune des listes, c’est lourd. On va donc définir 2 environnements personnalisés, un pour chacune des listes. C’est parti !

Dans le préambule :

1
2
3
4
5
% on définit l'environnement de liste, de la forme \newlist{label}{type de liste}{niveau maxi}
\newlist{exo}{enumerate}{2}
% on définit maintenant chacun des niveaux de la liste : \setlist[label,niveau]{label=xxx}
\setlist[exo,1]{label=Exercice \arabic*--}
\setlist[exo,2]{label=question \alph*)
}

Et du coup, dans le document, il suffit de taper :

1
2
3
4
5
6
7
8
\begin{exo}
\item Premier énoncé ;
\begin{exo}
\item Une question,
\item Une autre question.
\end{exo}
\item Second énoncé.
\end{exo
}

Et hop, on a une liste et sous-liste qui dépote, qui correspond à ce qu’on voulait, et qui en plus est simple à appeler. Que demande le peuple ?

Modifier l’indentation des listes, l’interligne, et le début de la numérotation

Dernier élément de ce tutoriel qui, somme toute, est bien plus long que ce que je comptais faire au départ : lecteur, tu n’es pas sans remarquer que les listes sont (plus ou moins) légèrement décalées par rapport au texte. C’est l’indentation. Pour tout un tas de bonnes raisons, on peut vouloir changer cet écart, l’augmenter, le réduire, ou le supprimer (comme les utilisateurs d’iCraps).

De même, on peut avoir envie de changer l’interligne (l’espace vertical qui sépare deux éléments), ou même de vouloir commencer une énumération à 3.

Toutes ces options sont à placer comme les autres dans les [ ] avec les modifications de police, couleur, puce… et sont valables avec les 3 types de listes (y compris description, dont je n’ai que peu parlé) :

  • leftmargin=xxx modifie l’indentation, par exemple :
    leftmargin=* supprime l’indentation,
    leftmargin=1cm décale la liste d’1cm vers la droite,
    leftmargin=-1cm décale la liste d’1cm vers la gauche.
  • itemsep=6pt modifie l’interligne, qui prend la valeur indiquée ;
  • start=3 fait débuter la numérotation à 3.

Voilà-voilà, si avec tout ça vos listes ne sont pas parfaites… Je ne sais plus quoi faire. J’espère que ça en aidera plus d’un !

Des fois que : le package enumitem sur le CTAN.

Des bisous !

Mots clés