Composición del documento: La estructura

Si en el tema anterior se ha estudiado la composición del documento desde el punto de vista del texto que introducimos en él (caracteres, palabras, párrafos), ahora vamos a examinarlo desde otro punto de vista que en LaTeX resulta fundamental: la estructura del documento. Entendiendo por tal la organización, distribución y jerarquización de las distintas partes que componen el documento.

Una característica importante de LaTeX es que con él es muy difícil escribir documentos mal estructurados: su propio diseño lo dificulta.

La estructura básica del documento

Las unidades estructurales

Un documento en LaTeX se compone de unidades estructurales las cuales varían según el tipo de documento de que se trate. La siguiente tabla expone las diferentes unidades estructurales que se admiten:

Nombre Comando 1 Comando 2
Parte \part[nombre1]{nombre2} \part*{nombre}
Capítulo \chapter[nombre1]{nombre2} \chapter*{nombre}
Sección \section[nombre1]{nombre2} \section*{nombre}
Subsección \subsection[nombre1]{nombre2} \subsection*{nombre}
Subsubsección \subsubsection[nombre1]{nombre2} \subsubsection*{nombre}
Parágrafo \paragraph[nombre1]{nombre2} \paragraph*{nombre}
Subparágrafo \subparagraph[nombre1]{nombre2} \subparagraph*{nombre}

Como regla usaremos la primera versión de cada uno de los comandos. El uso de la versión con asterisco se explica más adelante.

En cuanto a las concretas unidades estructurales, la primera, las partes, no siempre se incluye y, de hecho LaTeX no espera que los documentos la contengan. En cuanto a los capítulos, sólo existen en los libros (documentos de tipo "book"). Por lo tanto en un artículo la más alta unidad estructural es, cuando no haya partes (como es lo normal) la sección.

Como, por otra parte, es fácil observar en la tabla anterior, todos los comandos relativos a las unidades estructurales admiten dos argumentos: uno opcional y otro obligatorio. El argumento obligatorio se refiere al título o rúbrica de la unidad estructural. Ese título se imprimirá en el punto en el que empieza el capítulo, sección, o unidad que sea. Pero el mismo título se usa también para otras finalidades. Por ejemplo si el documento tiene una índice sistemático, se usará ese texto; o, en algunos casos, ese mismo texto se usará también en el encabezado de las páginas.

Si queremos que en el índice y en el encabezado no se use exactamente el mismo texto, sino otro diferente, hay que introducir ese otro texto como argumento opcional. Así por ejemplo:

\chapter{La vida feliz}
\section[Prefacio]{Prefacio, o como 
la felicidad es una apreciación subjetiva}

Incluirá un capítulo denominado "La vida feliz" que también se incluirá en el índice con ese mismo nombre, y una sección que se incluirá en el índice como "Prefacio" aunque su nombre es más largo.

Las unidades estructurales, por otra parte, son formateadas directamente por LaTeX. Podemos añadir algún comando de formateo en su interior, pero en general no es buena idea añadir ahí comandos que hagan algo más que incluir texto.

Numeración de las unidades estructurales

LaTeX numera automáticamente las unidades estructurales. Tratándose de partes y capítulos, añade, además, las palabras "parte" y "capítulo".

Si no queremos que alguna unidad estructural resulte numerada, debemos usar la versión del comando recogido en la segunda columna de la tabla anterior: la acabada en asterisco. El efecto de usar esta versión del comando es que ni el título se numerará, ni se incluirá en el índice, ni tampoco se tendrá en cuenta a efectos de numeración de los próximos títulos. Asimismo, tratándose de partes o capítulos, el uso de la versión con asterisco implica que tampoco se imprimirá la palabra "parte" o "capítulo".

Como he dicho, el título no numerado es ignorado a efectos de numeración de los restantes títulos. Así en el siguiente ejemplo:

\section{La vida feliz}
...
\section*{La vida breve}
...
\section*{La vida útil}

la primera sección recibiría el número "1", la segunda ningún número, y la tercera el número "2", porque la segunda, al no numerarse, no se cuenta.

LaTeX numera internamente todas las unidades estructurales (salvo las introducidas con asterisco). Pero en el documento sólo imprime el número de alguna de ellas. Por defecto en los libros se imprime la numeración de partes, capítulos, secciones y subsecciones, y en los artículos: partes, secciones, subsecciones y subsubsecciones.

Este funcionamiento por defecto depende de la variable interna de LaTeX \secnumdepth, cuyo nombre es bastante significativo: se compone de "sec" (de sección) "num" (numeración) y "depth" (profundidad). Cambiando esta variable (mediante \setcounter) cambiaremos el funcionamiento por defecto de LaTeX. Así, por ejemplo:

\setcounter{secnumdepth}{3}

en un documento tipo "book" haría que se numeraran también las subsubsecciones.

Una característica de secnumdepth que no suele indicarse explícitamente es que a efectos de profundidad no se cuentan ni las partes, ni los capítulos. LaTeX asume que esas unidades estructurales deben numerarse siempre. Por ello secnumdepth empieza a contar siempre en las secciones. Por eso el valor "3" hace que se numeren las subsubsecciones. De hecho los valores absolutos de \secnumdepth funcionan igual en documentos tipo book que en documentos tipo article. 3 es siempre la subsubsección, 4 es siempre el parágrafo. Por lo tanto, si en un libro queremos que se numeren sólo los capítulos, habría que dar a \secnumdepth el valor de 0. Y con \secnumdepth=-1 sólo se numerarían las partes.

Si la anterior característica de \secnumdepth nos lía un poquito, podemos, en lugar de indicarle como valor un número absoluto, comprobar hasta qué nivel enumera, y si queremos que llegue más allá, aumentar el valor de \secnumdepth; para lo que, usando \addotocounter no necesitaríamos saber cuál es su valor previo. Así por ejemplo:

\addtocounter{\secnumdepth}{1}

Hará que se numere una unidad estructural más de las que LaTeX numera por defecto, lo que significa, en un libro, que se numerarán también las subsubsecciones, y en un capítulo que se numerarán también los parágrafos; mientras que

\addtocounter{\secnumdepth}{-1}

provocará que se numere una unidad estructural menos de las que antes se venían numerando.

Por supuesto las alteraciones de \secnumdept deben realizarse en el preámbulo del documento y antes de la orden que genera el índice sistemático (de la que me ocuparé más adelante).

Alterar el formato de la numeración

Cada unidad estructural lleva asociada un contador del mismo nombre que la unidad estructural; así las secciones llevan asociado el contador "section", los capítulos el contador "chapter", etc. Al igual que ocurre con cualquier contador, podemos controlar el formato en el que el contador se imprime, en los lugares en los que lo hace, redefiniendo el comando \theNombreContador; y así, por ejemplo, redefiniendo \thechapter modificarémos el formato de los números de los capítulos, y redefiniendo \theparagraph modificaremos el formato de los números de los parágrafos (suponiendo que hayamos decidido que estos se impriman también, véase, al respecto, la sección anterior).

Recuérdese en este punto lo que ya se dijo sobre los comandos \arabic, \alpha, \Alpha, \roman, \Roman y \fnsymbol, en relación con el formato de impresión de los contadores.

Así por ejemplo, para imprimir los capítulos con números romanos, deberíamos escribir, en el preámbulo del documento:

\renewcommand{\thechapter}{\Roman{chapter}}

Al redefinir el comando de impresión de alguna unidad estructural, también podemos añadir todo tipo de texto. Por ejemplo, si queremos que las secciones se denominen "apartado", podríamos escribir en nuestro preámbulo:

\renewcommand{\thesection}{Apartado \arabic{section}: }

OJO: Lo anterior no funcionará para cambiar la denominación de los "Capítulos. Esta exige redefinir (mediante \renewcommand) la variable \chaptername. Tampoco sirve para cambiar la denominación de las partes (controlada por \partname).

Asimismo, en la numeración de las unidades estructurales podemos usar los números de las unidades estructurales superiores. Así en las siguientes dos líneas:

\renewcommand{\thesection}{\arabic{chapter}.\arabic{section}}
\renewcommand{\thesection}{\thechapter - \arabic{section}}

En la primera línea hemos redefinido \thesection para que en el número de las secciones se incluya también el número del capítulo al que pertenecen, separado por un punto. El efecto sería que las secciones se numerarían como 1.1, 1.2, 1.3, etc. Este es, por otra parte, el formateo estándar que para la numeración de secciones realiza LaTeX.

En la segunda línea, por el contrario, hemos introducido un cambio sutil. También usamos en las secciones la numeración de los capítulos, pero ahora no indicamos cómo hay que numerar los capítulos, sino que lo que estamos indicando es que se debe imprimir el número de capítulo tal y como estos se impriman en general, y luego, separado por un guión, el número de la sección.

La diferencia entre ambos comandos se ve clara en el caso de que hayamos redefinido el formato de numeración de los capítulos. Si por ejemplo estos se numeran con letras mayúsculas, el segundo comando numeraría las secciones como "A - 1", "A - 2", "A - 3", etc., pero el primer comando seguiría numerándolas como "1.1", 1.2", "1.3", etc.

Partes del documento

Además de las unidades estructurales propiamente dichas, un documento puede tener una "portada", un resumen o abstract, uno o varios prólogos, apéndices.

La portada

Ya en nuestro primer documento en LaTeX vimos un ejemplo de portada. El comando que imprime la portada es \maketitle. Pero antes de usar este comando hemos debido indicar, mediante otros comandos, el contenido de la portada. Este contenido incluye:

  • El título del documento, que se introduce mediante el comando \title{título}. Si el nombre del título es largo podemos incluir en él saltos forzados de línea (mediante el comando \\), pero no líneas en blanco ni saltos de párrafo.
  • El nombre del autor, que se introduce mediante el comando \author{nombre}. Si hubiera más de un autor podemos separar los nombres de los autores como queramos. No obstante el comando \and entre los distintos nombres hace que estos se formateen correctamente alineados.
  • La fecha del documento, que se introduce mediante el comando \date. Aunque en realidad mediante \date podemos incluir los comentarios que queramos, porque LaTeX no controla que lo que se introduzca aquí sea necesariamente una fecha.
  • Los agradecimientos, que se incluyen mediante el comando \thanks. El contenido de los agradecimientos se imprime como una nota a pie de página. El comando \thanks puede insertarse él solo, o dentro de alguno de los anteriores. Esto último es preferible porque cuando se inserta él sólo, generará una nota fantasma es decir, una nota que se ve al pié de página, pero que en el cuerpo de la página no tiene ningún punto que remita a ella.

Algunos paquetes que definen tipos especiales de documentos, añaden, para esos tipos, otros campos interesantes a la página de título, como organization o institution para representar la organización para la que trabaja el autor, etc.

Otra posibilidad es, en lugar de usar \maketitle y sus comandos asociados, usar el entorno "titlepage". En este caso deberemos ser nosotros los que nos ocupemos de formatear cada uno de los elementos del título, lo que es un inconveniente; como ventajas hay que mencionar que es más flexible y permite introducir campos que LaTeX no ha previsto y que, además, en un documento puede haber tantos entornos "titlepage" como queramos, a diferencia del comando \maketitle, que sólo puede haber uno, y si hay dos, sólo se imprime el primero.

El resumen

En los documentos de tipo "article" existe un entorno denominado "abstract" pensado para escribir con él un resumen del contenido del documento, al modo en que es habitual en las revistas científicas. Se trata de un resumen dirigido a que el lector potencial pueda decidir si le interesa o no leer el total del artículo.

Habitualmente el resumen se imprime inmediatamente después del título, aunque con LaTeX se imprimirá en el lugar en el que se encuentre el entorno "abstract".

En los libros este entorno no está disponible.

Los apéndices

Los apéndices aparecen al final del documento y normalmente reciben una numeración distinta.

LaTeX no los considera unidades estructurales en el sentido estricto de la palabra, sino más bien, modalidades de otras unidades estructurales. Por ello en LaTeX existe, en relación con los apéndices, la orden \appendix. Esta orden le indica a LaTeX que en ese punto del documento empiezan los apéndices, y a partir de entonces, se interpretará:

  • En los libros, que la orden \chapter{} introduce ahora apéndices.
  • En los artículos, que la orden \section{} introduce ahora apéndices.

Al mismo tiempo se reinicia la numeración de capítulos o secciones (según se trate de libros o artículos) y se cambia el formato de numeración de los mismos (los apéndices suelen numerarse alfabéticamente); tratándose de libros, además, la orden \appendix hace que a partir de entonces los \chapter ya no se denominen "Capítulo" sino "Apéndice".

\frontmatter, \mainmatter y \backmatter

Tratándose de libros, LaTeX incluye tres comandos que permiten distinguir, dentro de un libro, tres grandes unidades estructurales. Se trata de \frontmatter, \mainmatter y \backmatter:

  • \frontmatter Se supone que se refiere a las partes previas al cuerpo del libro propiamente dicho: prólogo, introducción, índices. Si introducimos ese comando al principio del fichero haremos que las páginas se numeren en números romanos y que el comando \chapter no incluya el número ni la palabra "Capítulo" (como ocurriría si usáramos \chapter*), pero sí incluya el título en el índice (cosa que no ocurriría de usar \chapter*).
  • \mainmatter Con este comando le indicamos a LaTeX que ha terminado la parte inicial y a continuación viene el libro propiamente dicho. Hay que usarlo cuando se ha usado previamente \frontmatter. El efecto de \mainmatter es que se reinicia la numeración de las páginas, que pasan además a volver a numerarse con números arábigos. El comando \chapter vuelve además a su comportamiento habitual.
  • \backmatter se debe usar (si se usa) al final del documento. Provoca que \chapter funcione igual que en \frontmatter, pero no afecta a la numeración de las páginas.

Los índices en LaTeX

LaTeX asume que los documentos pueden tener varios índices, y en consecuencia proporciona varias órdenes diferentes para generarlos. En esta lección vamos a estudiar los índices "generales". Otro tipo de índices que pueden incluirse en un documento son los índices terminológicos o glosarios, que serán tratados (muy por encima) en el tema 7.

El índice sistemático

El índice sistemático se introduce mediante la orden \tableofcontents, cuya inclusión provoca que en el lugar en donde se encuentre, se imprima el índice, el cual se compone de un "título" (que varía según el tipo de documento de que se trate) y una línea para cada una de las unidades estructurales que integran el documento y que deban insertarse en el índice.

¿Qué es eso de "que deban insertarse en el índice"?

Ya hemos visto que los comandos con asterisco insertan unidades estructurales que no van a parar al índice. Asimismo por defecto LaTeX no incluye en el índice todas las unidades estructurales, sino exclusivamente hasta cierto nivel de profundidad.

La variable que controla qué unidades estructurales hay que incluir en el índice es \tocdepth. Esta variable funciona exactamente igual que \secnumdepth y a lo dicho a propósito de ella nos remitimos.

La inclusión de un índice implica que LaTeX necesitará más de una compilación para generar el documento. En la primera compilación, LaTeX escribirá el nombre del índice y, al mismo tiempo se generará un fichero auxiliar de extensión "toc" (iniciales de table of contents en inglés) en el que se irá almacenando información sobre las distintas entradas del índice. Esta información será leída en una segunda compilación en la que ya se escribirá el índice adecuadamente. Eventualmente, no obstante, puede ser precisa una tercera compilación para ajustar la numeración de las páginas en el índice, en el caso de que la longitud del índice finalmente exceda de una página.

Índices de tablas y de figuras

Junto al índice de contenido LaTeX admite los siguientes dos comandos adicionales:

  • \listoffigures Genera un índice de imágenes.
  • \listoftables Genera un índice de tablas.

Se usan, obviamente, en los documentos donde se han insertado varias figuras y tablas. Estos índices funcionan de modo similar a \tableofcontents, aunque con la salvedad de que:

  • \listoffigures genera un índice de las imágenes (u objetos) incluidas en el documento mediante el entorno "figure".
  • \listoftables genera un índice de las tablas incluidas en el documento mediante el entorno "table".

Sobre estos entornos, véase el tema 6.

Del mismo modo que el índice sistemático genera un fichero auxiliar de extensión "toc", el índice de figuras genera un fichero de extensión "lof" y el índice de tablas genera un fichero de extensión "lot".

Todos estos ficheros auxiliares pueden borrarse una vez que tengamos nuestro documento perfectamente compilado. Pero recuérdese que si son borrados, para generar de nuevo el documento necesitaremos dos o tres compilaciones.

Incluir manualmente entradas en el índice

En cualquier punto del documento podemos añadir una entrada en cualquiera de los tres índices explicados, mediante la orden \addcontentsline, cuyo formato es:

\addcontentsline{índice}{unidad}{texto}

Donde:

  • Índice se refiere al índice en el que hay que incluir la entrada. Puede ser "toc" para el índice sistemático, "lof" para el de figuras, o "lot" para el de tablas.
  • Unidad indica cómo queremos que se formatee la nueva entrada. El contenido de este campo depende del índice que se trate. En el índice de figuras hay que poner "figure" y en el de tablas "table". En el índice sistemático hay que escribir aquí el nombre de la unidad sistemática a la que se equiparará la línea que se añade en el índice, es decir: si será considerada un capítulo, una sección.
  • Texto es el texto de la línea a introducir en el índice.

Lo que nos queda por aprender

Entre las cuestiones tratadas en esta lección podría haberse dicho mucho más sobre casi todo. A título de ejemplo mencionaré algunas cuestiones que no han sido objeto de tratamiento:

  1. En relación con el contenido del título de las unidades estructurales, habría bastante que decir respecto al uso de \protect; pero no se ha hecho.
  2. Tampoco se ha explicado de forma sistemática cómo cambiar el nombre que LaTeX asocia a las distintas partes del documento.
  3. Hay varios paquetes que mejoran el funcionamiento de latex en materia de títulos, como titlesec. No se ha dicho nada al respecto.
  4. En relación con la generación de índices, no se ha dicho nada de la instrucción \addtocontents (más general que la sí explicada \addcontentsline) ni sobre el uso de \numberline para rescatar la numeración de una entrada del índice.
  5. El paquete hyperref, aunque no tiene como utilidad principal la generación de índices, hace que en estos se inserten hipersaltos, lo que es bastante interesante.

Puede parecer que en este tema he sido más exhaustivo que en otros, porque las cuestiones poco mencionadas son menos. Pero lo que ocurre en realidad es que me ha dado más pereza confeccionar la lista de cuestiones no tratadas. Los plazos para terminar de escribir este curso van transcurriendo inexorablemente y empiezo a ir con mucho retraso.

Todas las Secciones