2009-12-20 26 views
24

Existe-t-il un moyen d'augmenter le niveau d'imbrication maximal des listes (énumération, etc.) dans Latex? J'ai besoin de cinq niveaux pour une classe, et Google ne me trouve rien ...Niveau maximal d'imbrication des listes dans Latex

+4

Cette question semble être hors-sujet car il est sur le point LaTex, qui appartient à la sous-site Tex de sE – puk

Répondre

5

Vous devez copier les définitions de \enumerate et \itemize du fichier latex.ltx et changer le code de

\ifnum \@itemdepth >\[email protected]@\@toodeep\else 

à

\ifnum \@itemdepth >4\@toodeep\else 

et vous aurez également besoin de définir des compteurs enumv, séquence de contrôle \labelitemv , et tas d'autres choses pour soutenir la profondeur 5.

N.B. Si vous voulez faire en dehors d'un fichier .sty, vous aurez besoin d'entourer vos nouvelles définitions par

\makeatletter 
.... 
\makeatother 

En tout, c'est une bonne quantité de travail de détail, mais si vous êtes habitué à LATEX le piratage, il est assez simple. Si la tâche vous semble trop longue et que vous n'avez pas le temps d'apprendre, vous pouvez essayer de publier une prime ici ou ailleurs :-)

2

IIRC, la limite est dans le nombre de compteurs d'énumération fournis par défaut. Je n'ai jamais eu à le faire mais vous pourriez vouloir vérifier le LaTeX Wikibook pour quelques conseils. La dernière fois que j'ai eu à modifier sérieusement les listes, j'ai fini par retomber sur l'utilisation de macros TeX droites basées sur des trucs dans TeX for the Impatient.

+0

Je ne pense pas --- Ajout d'un compteur avec \ newcounter et un label avec \ newcommand {\ labelenumv} et je reçois toujours "Trop imbriqué." Peut-être qu'il me manque quelque chose? – c4757p

+0

J'ai fait un peu plus d'exploration (dans 'ltlists.dtx') et il semble que les limites soient assez durement codées si vous utilisez les listes fournies par LaTeX. '\ list' vous limite à six niveaux où' \ enumerate' et '\ itemize' vous limitent à quatre niveaux. –

+0

Vous pouvez définir votre propre macro de liste basée sur '\ list' et étendre la limite ou écrire votre propre environnement à partir de zéro. Il ne semble pas que les environnements standards de liste LaTeX vont vous permettre de les imbriquer beaucoup plus profondément. –

3

Vous pouvez également utiliser un itemize-environment dans un .

13

Vous pouvez utiliser le package enumitem. Après ce que vous venez de mettre le niveau de profondeur que vous voulez:

\usepackage{enumitem} 
... 
\setlistdepth{9} 

Et vous pouvez avoir jusqu'à 9 niveaux imbriqués pour vos listes, facile ;-)

Cette fonction est disponible dans le package depuis 3.0 (Ubuntu m'a installé le 2.2 par exemple). Dans le cas où vous avez une ancienne version il suffit de le remplacer par: http://ctan.mackichan.com/macros/latex/contrib/enumitem/enumitem.sty

Hope that helps!

+1

Ne fonctionne pas pour moi. J'ai copié le récent enumitem.sty et je peux appeler \ setlistdepth {9} - mais je reçois toujours l'erreur "Trop imbriqué". – Alex

+1

J'ai trouvé une solution et je l'ai affichée ci-dessous. – Alex

28

Solution en utilisant package enumitem

  1. Si vous ne possédez pas la version 3 du enumitem.sty installé, puis download enumitem.sty manually et placez-le dans le dossier de votre projet.
  2. Pour les listes de Détaillez, ajoutez ce qui suit au préambule de votre document:
 
\usepackage{enumitem} 
\setlistdepth{9} 

\setlist[itemize,1]{label=$\bullet$} 
\setlist[itemize,2]{label=$\bullet$} 
\setlist[itemize,3]{label=$\bullet$} 
\setlist[itemize,4]{label=$\bullet$} 
\setlist[itemize,5]{label=$\bullet$} 
\setlist[itemize,6]{label=$\bullet$} 
\setlist[itemize,7]{label=$\bullet$} 
\setlist[itemize,8]{label=$\bullet$} 
\setlist[itemize,9]{label=$\bullet$} 

\renewlist{itemize}{itemize}{9} 

Pour les autres types de liste ce doit être adaptée.

Aide au dépannage

  • si vous obtenez "! Séquence de contrôle non définie. \ Setlistdepth", la version de enumitem.sty qui utilise est plus LATEX alors la version 3.
  • si vous obtenez toujours le « trop profondément imbriqué » erreur, la commande renewlist est manquant pour le type de liste que vous utilisez
  • si vous obtenez « paquet enumitem Erreur: Étiquette non définie. », L'étiquette pour l'un des niveaux n'a pas été DÉFINIES avec la commande \setlist[itemize,$LEVEL] ...
Questions connexes