Al anidar una lista dentro de otra, LaTeX cambia la etiqueta de encabezado según el nivel. Sin embargo, un enumerate colocado dentro de una entrada de itemize —visualmente el segundo nivel— empieza en «1.» y no en «(a)». Porque lo que LaTeX cuenta no es la profundidad sobre el papel sino cuántas listas de la misma clase te rodean. Escribir listas anidadas sin conocer ese único dato garantiza sorpresas al mirar la salida. Esta página trata de cómo se elige la etiqueta, de por qué un muro llamado Too deeply nested se alza en el cuarto nivel, de un segundo techo que comparten todos los entornos de lista, y de la anchura de línea que se pierde sin remedio con cada nivel añadido.
La etiqueta sigue el número de listas del mismo tipo, no la profundidad en la página
LaTeX cuenta la profundidad con dos contadores separados. En latex.ltx, itemize incrementa \@itemdepth y enumerate incrementa \@enumdepth; cada uno construye después, a partir de su propio valor, un nombre de comando —\labelitem o \labelenum más un número romano— y lo llama. Los dos nunca se consultan, de modo que un enumerate dentro de un itemize está en \@enumdepth 1: se aplica \labelenumi y la numeración arranca en «1.». La afirmación, muy repetida, de que la etiqueta la determina la profundidad de anidamiento con independencia del tipo es falsa. Basta una compilación para comprobarlo.
\begin{enumerate}
\item Make the dough
\begin{itemize}
\item Flour
\item Water
\begin{enumerate}
\item Add half
\item Add the rest
\end{enumerate}
\end{itemize}
\item Let it rest
\end{enumerate}Esto es lo que producen realmente esos tres niveles. El enumerate exterior da «1.» y «2.»; el itemize que contiene recibe la viñeta • del primer nivel, no el guion – del segundo; y el enumerate más interno recibe el (a) del segundo nivel, no el i. romano del tercero. Desde el punto de vista del itemize, este es el primer itemize alrededor; desde el del enumerate interior, hay exactamente un enumerate por fuera. Alternando los tipos hacia abajo, cada tipo recorre su propia secuencia de etiquetas de forma independiente.
| Profundidad | Entorno | Nivel dentro del tipo | Etiqueta obtenida |
|---|---|---|---|
1 | itemize | 1 | • (\labelitemi) |
2 | enumerate | 1 | 1. (\labelenumi) |
3 | itemize | 2 | – (\labelitemii) |
4 | enumerate | 2 | (a) (\labelenumii) |
5 | itemize | 3 | * (\labelitemiii) |
6 | enumerate | 3 | i. (\labelenumiii) |
El muro del cuarto nivel: ! LaTeX Error: Too deeply nested.
Al anidar cinco listas del mismo tipo, la compilación se detiene con ! LaTeX Error: Too deeply nested. El mensaje no indica la profundidad: son solo esas tres palabras, y contar cuál de los \begin es el quinto queda de tu parte; el número de línea que se informa es el del \begin{itemize} que lo abrió. La razón no es una prohibición tipográfica sino una simple falta de nombres: la comprobación en latex.ltx se reduce a \ifnum \@itemdepth >\thr@@, «mayor que tres». Hay comandos de etiqueta para cuatro niveles, no hay nombre que entregar al quinto, y ahí se para. Lo que también significa que cargar enumitem no derriba el muro: abrir un quinto nivel sin añadir configuración produce el mismo error, exactamente igual.
% raising the ceiling really does take all four lines
\usepackage{enumitem}
\setlistdepth{9}
\renewlist{itemize}{itemize}{9}
\setlist[itemize]{label=$\cdot$}
\setlist[itemize,1]{label=$\bullet$}Derribar el muro de verdad exige más que el \setlistdepth de enumitem por sí solo. \setlistdepth{9} únicamente eleva el techo global de listas; itemize sigue parándose en cuatro. Hay que reconstruir el entorno para nueve niveles con \renewlist{itemize}{itemize}{9} y después dar etiquetas a los niveles nuevos con \setlist[itemize]{label=…} para que un quinto nivel llegue a componerse. Abrir un quinto nivel sin darle etiqueta solo cambia el error a ! Package enumitem Error: Undefined label. Si lo que se busca es una jerarquía numerada profunda, un paquete como easylist, diseñado desde el principio para profundidad arbitraria, es la herramienta más honesta. Pero conviene detenerse antes: casi ningún lector sigue cinco niveles de anidamiento. Anidar tanto suele ser señal de que esa estructura pide convertirse en títulos de sección.
Un segundo techo: el presupuesto de seis niveles que comparten todos los entornos de lista
Por encima del límite de cuatro por tipo hay un segundo techo de seis niveles, compartido por todas las listas. Tanto itemize como enumerate se construyen sobre el mismo entorno subyacente list, y list lleva su propia comprobación: \ifnum \@listdepth >5. Alternar itemize y enumerate llega por tanto hasta el sexto nivel, y el séptimo falla igualmente con Too deeply nested. Lo incómodo es que las listas no son lo único que gasta de ese presupuesto. Recorriendo article.cls aparecen quote, quotation, verse, description e incluso thebibliography, todos construidos sobre \list. Dos bloques de cita anidados dentro de una lista con viñetas profunda bastan para agotar lo que queda. Como el culpable no parece una lista, esta es la variante más difícil de diagnosticar.
La sangría se acumula: en el cuarto nivel ha desaparecido un cuarto de la medida
El verdadero coste del anidamiento no aparece en las etiquetas sino en la anchura de la línea. Cada vez que se abre un entorno list, este suma su \leftmargin al total acumulado por la izquierda, de modo que la sangría se apila nivel a nivel. En un article de 10pt compuesto a una columna, \leftmargini vale 25,0pt, \leftmarginii 22,0pt, \leftmarginiii 18,7pt y \leftmarginiv 17,0pt. En el cuarto nivel los márgenes izquierdos suman 82,7pt —alrededor de un cuarto de los 345pt de la caja de texto— y quedan 262,3pt de línea para escribir. Que los valores decrezcan ligeramente en cada nivel busca precisamente frenar esa acumulación; y aun así, cuatro niveles cuestan eso.
| Longitud | Valor | Acumulado | Anchura de línea restante (textwidth 345pt) |
|---|---|---|---|
\leftmargini | 25,0pt (2,5em) | 25,0pt | 320,0pt |
\leftmarginii | 22,0pt (2,2em) | 47,0pt | 298,0pt |
\leftmarginiii | 18,7pt (1,87em) | 65,7pt | 279,3pt |
\leftmarginiv | 17,0pt (1,7em) | 82,7pt | 262,3pt |
Puesto en cifras, el motivo de que el anidamiento profundo se lea mal se vuelve concreto. Una medida de 262pt se acerca a una columna de una composición a dos columnas; si se vierten frases largas, el algoritmo de corte dispone de menos margen, los blancos entre palabras se abren de forma antinatural y los avisos Overfull \hbox se multiplican. En composición a dos columnas \leftmargini ya está reducido a 2em de partida: cuanta más estrecha es la medida, menos holgura tiene el anidamiento. Cuando hay que apretar el margen izquierdo, fijar leftmargin= por nivel con enumitem es la vía práctica. Casi siempre, sin embargo, revisar la estructura resulta más rápido: las entradas por debajo del tercer nivel suelen poder replegarse como prosa dentro de la entrada padre.
Dónde detener el anidamiento
LaTeX permite cuatro niveles, lo cual no equivale a decir que cuatro niveles se lean. El anidamiento profundo comunica jerarquía, y el lector debe reconstruirla solo a partir de la forma del marcador y de la posición del borde izquierdo. El asterisco del tercer nivel y el punto centrado del cuarto se parecen, y apenas 17pt de sangría los separan. Dicho de otro modo, en el cuarto nivel al lector no le queda casi ninguna pista. Sigue una lista de comprobación para revisar el anidamiento una vez escrito.
- Comprobar si bastan dos niveles. Todo lo que pase del tercero suele poder replegarse como prosa en la entrada padre.
- Si la profundidad hace falta de verdad, usar títulos de sección en lugar de una lista.
\subsectiony\subsubsectiontraen consigo índice y referencias cruzadas. - Mirar siempre la salida al mezclar tipos. La etiqueta depende de cuántas listas del mismo tipo la rodean, así que puede no salir el marcador esperado.
- Mantener
quoteyversefuera del anidamiento profundo. Gastan del mismo presupuesto de seis niveles y provocan errores cuyo origen cuesta ver. - Cuando aparezca
Too deeply nested, recontar la profundidad. El mensaje nunca nombra el nivel: hay que remontar los\begindesde la línea informada.