Estructura, encabezados e índice

Lo que \section hace de verdad no es agrandar el texto: declara un único número entero, el nivel del título. LaTeX ofrece siete niveles de seccionado, de \part hasta \subparagraph, numerados de −1 a 5, y las dos preguntas que vienen después —¿lleva número este título (secnumdepth)?, ¿aparece en el índice (tocdepth)?— no son más que comparaciones con ese entero. Al elegir la jerarquía se ha elegido casi también la numeración y el índice. Esta página recorre los siete niveles, las formas con estrella, por qué \tableofcontents exige una segunda compilación y cómo \appendix y las tres partes de un book reorganizan la numeración por debajo.

Los siete niveles de título y su valor de nivel

De arriba abajo son \part, \chapter, \section, \subsection, \subsubsection, \paragraph y \subparagraph. El «valor de nivel» no es una metáfora. Al abrir el código de las clases estándar se ve que \section está definido como \@startsection{section}{1}{…}: ese segundo argumento, 1, es el nivel. \subsection recibe 2, \subsubsection 3, \paragraph 4 y \subparagraph 5. El código del núcleo que decide si se imprime un número es la única línea \ifnum #2>\c@secnumdepth, donde #2 es justamente ese dígito. Un título no es un adorno para poner texto en negrita: es una señal que orienta al lector dentro del argumento y, a la vez, una declaración que fija el sistema de numeración de todo el documento.

ComandoNivelUnidadDisponible en
\part−1 (book/report), 0 (article)ParteTodas las clases
\chapter0Capítulosolo book / report
\section1SecciónTodas las clases
\subsection2SubsecciónTodas las clases
\subsubsection3SubsubsecciónTodas las clases (sin número por defecto en book/report)
\paragraph4Título al hilo del texto (el texto sigue en la misma línea)Todas las clases (sin número por defecto)
\subparagraph5Subtítulo al hilo del texto (el texto sigue en la misma línea)Todas las clases (sin número por defecto)

Las dos últimas filas se comportan de otro modo porque todo el diseño visual está plegado en un solo signo. El quinto argumento de \@startsection indica «cuánto espacio dejar después del título»: en \section vale 2.3ex, positivo; en \paragraph y \subparagraph vale -1em, negativo. El núcleo lee ese signo: positivo significa cortar la línea tras el título; negativo significa no cortarla, insertar ese espacio horizontal y seguir. Así, \paragraph{Punto clave} produce «Punto clave el texto continúa aquí»: un título al hilo del texto que se funde con el cuerpo. Es la herramienta adecuada para una etiqueta breve al comienzo de un párrafo; si se quiere un título en su propia línea, hay que detenerse en \subsubsection.

latex
\documentclass{report}   % \chapter is available here
\begin{document}
\chapter{Introduction}
\section{Background}
\subsection{Related work}
\paragraph{Key point}The body text continues on this same line.
\end{document}

Por qué \chapter solo existe en book y report

La clase article no tiene \chapter. Sencillamente no está definido, así que escribirlo en el cuerpo de un article detiene la compilación con ! Undefined control sequence. No falta ningún paquete: la clase se diseñó sin la unidad capítulo. El título de nivel superior en un article es por tanto \section, y quien necesite capítulos pasa a report (capítulos y resumen) o a book (capítulos, a doble cara por defecto, con materia preliminar y final). \part existe en todas las clases, pero no con el mismo rango: nivel 0 en article y nivel −1 —por encima de \chapter— en book y report.

Si se salta un nivel, la numeración guarda el recibo. En report, colocar una \subsection justo después de un \chapter da el número 1.0.1. Ese 0 central es el contador de sección, que nunca avanzó. LaTeX no cierra el hueco en silencio: imprime el valor del nivel omitido. Del mismo modo, empezar con \section en un report o un book antes de cualquier \chapter produce 0.1. Cuando aparece un 0 inesperado en un número de título, lo primero que hay que sospechar es un nivel saltado.

Quitar números: formas con estrella y secnumdepth

Hasta qué profundidad llega la numeración en todo el documento lo decide un solo contador, secnumdepth. Su valor es el nivel de la unidad más profunda que aún recibe número y, en las clases estándar que acompañan a TeX Live 2024, es 3 en article y 2 en book y report. Por eso article numera las subsubsecciones (nivel 3) mientras que book se detiene en las subsecciones (nivel 2). Para numerar subsubsecciones en un book, se pone \setcounter{secnumdepth}{3} en el preámbulo. En sentido contrario, \setcounter{secnumdepth}{0} elimina los números de sección hacia abajo y -2 los quita de todos los títulos.

Para quitar el número en un solo sitio se usa la forma con estrella. \section*{Agradecimientos} da un título sin número que además nunca llega al índice. Ambos efectos van juntos porque la macro del núcleo que atiende la forma con estrella sencillamente no escribe la entrada del índice. Para títulos que suenan raros con número —«Introducción», «Agradecimientos», «Conclusión»— eso es justo lo deseado; si aun así se quiere la entrada, se añade \addcontentsline{toc}{section}{Agradecimientos} justo después del título. Un título con estrella tampoco avanza el contador, de modo que los números siguientes no se desplazan.

Lo otro que conviene conocer es el argumento opcional. \section[Título corto]{El título largo impreso en el cuerpo} pone la forma larga en el título del cuerpo y la forma corta entre corchetes en el índice y en el encabezado. Los títulos de sección en artículos rara vez caben en una línea, así que esta es la salida práctica que mantiene legibles el índice y los encabezados. Si se omiten los corchetes, el título largo se usa en los tres sitios.

latex
\setcounter{secnumdepth}{3}          % number subsubsections too
\section{Results and discussion}      % numbered, e.g. "3 Results and discussion"
\section*{Acknowledgements}           % no number, and no TOC entry
\addcontentsline{toc}{section}{Acknowledgements}   % put it back in the TOC
\section[Method]{A detailed formulation of the proposed method}

Por qué \tableofcontents necesita una segunda compilación

El índice aparece con solo escribir \tableofcontents, pero no en la pasada en que se escribe. TeX lee el documento una sola vez, de principio a fin, así que en el momento de componer el índice no sabe qué títulos vendrán después. Por eso LaTeX escribe, cada vez que encuentra un título, una línea como \contentsline{section}{\numberline {1}First}{1}{} en el archivo auxiliar .toc, y la vuelve a leer al comienzo de la pasada siguiente. De ahí el mínimo de dos compilaciones. Lo incómodo es que la primera pasada solo deja en el registro No file document.toc.: no hay un aviso propiamente dicho. Así es como se entregan documentos con el índice vacío o desactualizado. Una herramienta como latexmk repite las pasadas necesarias y elimina el problema de raíz.

Las listas de figuras y tablas funcionan igual: \listoffigures pasa por .lof, \listoftables por .lot, y ambas necesitan también más de una pasada. Para añadir una entrada que no se lista automáticamente se usa \addcontentsline{ext}{unit}{text}: el primer argumento ext es la extensión destino (toc, lof, lot), el segundo, unit, el tipo de entrada (section, chapter, figure, …) y el tercero, text, la cadena que se listará. Para material que no es una entrada —espacio adicional entre grupos de títulos, por ejemplo— se usa \addtocontents{ext}{text}, que vuelca su contenido tal cual en el archivo auxiliar; por eso comandos como \vspace necesitan un \protect delante.

latex
\tableofcontents
\setcounter{tocdepth}{2}                       % list down to subsections

\section*{Introduction}                        % starred: never listed
\addcontentsline{toc}{section}{Introduction}   % list it by hand

\listoffigures                                % goes through the .lof file
\addtocontents{lof}{\protect\vspace{2ex}}      % extra space inside that list

tocdepth frente a secnumdepth

La profundidad del índice la decide tocdepth. Su valor significa el mismo nivel que secnumdepth, y los valores por defecto coinciden —3 en article, 2 en book y report—, pero ambos son independientes: numerar solo hasta secciones mientras el índice lista subsecciones es un ajuste de lo más corriente. La diferencia decisiva es cuándo actúa cada uno. secnumdepth decide en el acto si se compone un número. tocdepth no: LaTeX escribe todos los títulos en el archivo .toc sin importar la profundidad, y tocdepth se limita a filtrar esas líneas al releer el archivo. Puede comprobarse: la línea de \paragraph está en el .toc de un article por defecto; sencillamente no se imprime. Ese diseño tiene una ventaja práctica: subir tocdepth nunca obliga a regenerar el .toc, de modo que basta una compilación más.

\appendix y las tres partes de un book

\appendix se escribe exactamente una vez, en el punto donde empiezan los apéndices. No es un comando de título, sino un conmutador de numeración. En article reinicia los contadores de sección y subsección y redefine \thesection para imprimir letras. En book y report reinicia los contadores de capítulo y sección, convierte \thechapter en letras y sustituye la palabra que precede al título de capítulo, de Chapter a Appendix. Así, después de \appendix se sigue escribiendo \chapter{Notación} como antes y se obtiene «Appendix A Notación». Escrito dos veces, o antes de cada título de apéndice, reinicia los contadores cada vez: colóquese una sola vez.

La clase book añade comandos que dividen el libro en tres. \frontmatter abre la materia preliminar (prefacio, índice): pasa los números de página a romanos minúsculos y los reinicia en 1, y deja los capítulos sin número, aunque sus títulos siguen llegando al índice. \mainmatter empieza el cuerpo, devuelve los números de página a arábigos y los reinicia otra vez en 1, y restaura la numeración de capítulos. \backmatter marca la materia final (bibliografía, índice analítico): deja la paginación corriendo y solo vuelve a detener los números de capítulo. La asimetría es lo que hay que recordar: solo \frontmatter y \mainmatter reinician el contador de página.

latex
\documentclass{book}
\begin{document}
\frontmatter            % i, ii, ... and unnumbered chapters
\tableofcontents
\mainmatter             % 1, 2, ... and numbered chapters again
\chapter{Introduction}
\appendix               % chapters now read "Appendix A", "Appendix B"
\chapter{Notation}
\backmatter             % bibliography, index: page numbers keep running
\end{document}

Por cierto, quien diseñó todo este juego de comandos de seccionado fue Leslie Lamport. Recibió el Premio Turing de la ACM en 2013, pero no por LaTeX, sino por su trabajo en sistemas distribuidos: relojes lógicos, seguridad y vivacidad, máquinas de estados replicadas. Aquello que millones de estudiantes teclean a diario, \section, no aparece en ninguna línea de la mención.

Cuando la numeración o el índice parecen incorrectos

  • Un 0 en el número (1.0.1 y similares) — se saltó un nivel. Compruebe si hay una \subsection justo después de un \chapter en report/book, o una \section iniciada antes de cualquier \chapter.
  • El índice está vacío o desactualizado — el .toc que se ve lo escribió la pasada anterior. Compile dos veces. No hay aviso, así que lo fiable es dejárselo a latexmk.
  • ! Undefined control sequence. en \chapter — el documento es un article. Cambie a report o book, o use \section como nivel superior.
  • Un título con estrella no sale en el índice — es lo previsto. Ponga \addcontentsline{toc}{section}{…} justo después del título.
  • Faltan subsecciones en el índicetocdepth es demasiado superficial. Ponga \setcounter{tocdepth}{2} y compile una vez más; no hace falta regenerar el .toc.
  • La numeración de apéndices no es la esperada\appendix es un conmutador, no un título. Colóquelo una sola vez, justo antes del primer título de apéndice.