> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/es/articulos-en-profundidad/23-how-does-latex-typeset-headers-and-footers.md).

# ¿Cómo compone LaTeX los encabezados y pies de página?

## ¿Cómo compone LaTeX los encabezados y pies de página?

### Introducción

Si está buscando una guía práctica sobre cómo cambiar encabezados y pies de página, por favor [visite nuestra página de ayuda](/latex/es/formato/02-headers-and-footers.md) porque este artículo se centra en explicar los mecanismos de bajo nivel que usan los motores TeX y LaTeX para producir encabezados y pies de página.

* **Nota (actualización)**: Este artículo explora el mecanismo de marcas principal de LaTeX en uso antes de junio de 2022, momento en el que se introdujo una nueva y más versátil implementación del manejo de marcas de LaTeX. Consulte [Resumen del nuevo mecanismo de marcas de LaTeX](https://www.latex-project.org/help/documentation/ltmarks-doc.pdf) para más detalles. Por razones de compatibilidad con versiones anteriores, LaTeX sigue admitiendo su mecanismo de marcas heredado. El material del artículo que analiza el comportamiento de los motores TeX no se ve afectado por estos cambios en LaTeX.
* **Nota**: los términos “LaTeX”, “TeX” y “motor TeX” se usan a lo largo de estas discusiones, por lo que es útil entender su significado; consulte el artículo de Overleaf [Qué hay en un nombre: Una guía de las muchas variantes de TeX](/latex/es/articulos-en-profundidad/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) para obtener más información.

Para proporcionar un contexto/antecedentes útiles empezamos con un resumen de algunas áreas relevantes de bajo nivel de la composición tipográfica basada en TeX, incluido el almacenamiento temporal (interno) de contenido, los saltos de página y la construcción. Las discusiones se han simplificado considerando una página compuesta que contiene un “cuerpo” de texto más algunos encabezados y pies de página. No se tratan elementos de página como figuras (flotantes) y notas al pie porque implican un complejo mecanismo de TeX llamado *inserciones*, que queda muy fuera del alcance de este artículo.

Empezaremos con la noción básica de *nodos*: los bloques de construcción fundamentales que usan los motores TeX para el almacenamiento temporal (interno) de contenido.

### Algunas notas sobre el almacenamiento de contenido: nodos de TeX

A medida que el motor TeX subyacente procesa su código LaTeX para producir material compuesto, como párrafos, tablas y matemáticas, necesita almacenar temporalmente ese contenido dentro de la memoria del motor TeX que se esté usando para procesar su código LaTeX. Para almacenar contenido compuesto, los motores TeX usan una secuencia de llamados *nodos*, que puede pensar como “trozos” de memoria de computadora (dispositivo) de tamaño variable, enlazados entre sí para formar una lista (consulte este [artículo de Wikipedia sobre estructuras de datos enlazadas](https://en.wikipedia.org/wiki/Linked_data_structure)).

![Representación esquemática de cómo los motores TeX almacenan contenido usando nodos enlazados](/files/6fc90032f6270e038775638b244407895d02523a)

Para representar los elementos fundamentales de la composición tipográfica basada en TeX —como caracteres, pegamento, cajas, penalizaciones, kerns y [*marcas*](#why-were-here-understanding-mark-nodes) (por nombrar solo algunos)— los motores TeX usan diferentes *tipos* tipos de nodo. Algunos nodos, como los de las cajas, necesitan almacenar más datos en comparación con tipos de nodo más simples, como los nodos de caracteres; en consecuencia, algunos nodos son más grandes que otros y requieren más bytes para almacenarlos en memoria. Al leer sobre TeX puede encontrarse con términos como *nodos de caracteres*, *nodos de pegamento*, [*nodos de marca*](#why-were-here-understanding-mark-nodes) y así sucesivamente: ahora sabe que no son más que nombres dados a trozos de memoria asignados para almacenar datos que representan un elemento de la composición tipográfica de TeX.

#### Por qué estamos aquí: entender los nodos de marca

De los muchos tipos de nodo, el que necesitamos tratar se llama *nodo de marca* que es creado por el `\mark` comando:

```latex
\mark{stuff to store}
```

El `\mark` el comando no produce directamente ningún contenido compuesto: su argumento `*stuff to store*` se guarda en memoria para su uso posterior y se crea un *nodo de marca* para contener la ubicación en memoria de *stuff to store*. Como veremos, el `\mark` comando fue creado *específicamente* para ayudar a producir encabezados y pies de página.

Los nodos de marca creados por `\mark` comandos se “incrustan” en el contenido de la página listos para su uso durante las etapas finales de composición de la página cuando el motor TeX está listo para añadir encabezados y pies de página a la página compuesta (cuerpo). Típicamente, `*stuff to store*` contendrá material como números de página y títulos/números de capítulo o sección: los bloques de construcción de encabezados y pies de página.

#### ε-TeX añade el comando \marks

[La versión 2 de ε-TeX](https://texdoc.org/serve/e-TeX/0), una extensión del TeX original de Knuth, se publicó en 1998 y ofrece nuevas capacidades junto con mejoras en las funciones existentes. Hoy en día, la mayoría de las mejoras de ε-TeX se han incorporado a los motores TeX convencionales: pdfTeX, LuaTeX y XeTeX; consulte la opción de línea de comandos [**`-etex`** de los motores TeX](/latex/es/mas-temas/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md) que permite el uso de las extensiones de ε-TeX.

El software TeX original de Knuth proporciona el comando \mark, que crea solo 1 “clase”, o “tipo”, de nodo de marca. Su documento podría incluir muchos comandos \mark, pero todos crean nodos de marca del mismo “tipo” o “clase”; no existe un mecanismo integrado para agruparlos o clasificarlos. Esta restricción fue eliminada por una mejora de ε-TeX: el comando \marks, que es admitido por pdfTeX, LuaTeX y XeTeX:

```latex
\marks n {stuff to store}
```

donde `n` es un entero (`0` <= `n` < `32768`) que determina el nodo de marca *clase*.

Notas:

* escribir `\marks 0` (es decir, `n`=`0`) es sinónimo de usar el original de TeX `\mark` comando
* ε-TeX también introdujo variables de marca ([véase más adelante](#pre-output-checks-looking-for-mark-nodes)) para cada clase (`n`) de marca: `\firstmarks n`, `\topmarks n` y `\botmarks n`. Las clases seleccionadas de variables de marca podían usarse para proporcionar datos de marca para tareas tipográficas específicas.
* LuaTeX aumentó el valor máximo de `n` a `65535`, permitiendo $$2^{16}$$ clases de marcas

### Razones para el uso de marcas por parte de TeX

Para entender *por qué* (y cómo) los motores TeX usan el `\mark` (o `\marks`) comando para producir encabezados y pies de página necesitamos apreciar algunas “peculiaridades” de los mecanismos del motor TeX para construir páginas: encontrar saltos de página y enviar páginas terminadas a un archivo PDF. En realidad, esos procesos de construcción de páginas son complejos, pero los principios/conceptos básicos pueden simplificarse para proporcionar explicaciones de fondo suficientes que ayuden a comprender las marcas.

A medida que un motor TeX completa la composición de elementos individuales de contenido como párrafos, tablas o matemáticas, llama a una rutina interna (una función llamada `build_page(...)`) que intenta añadir esos elementos recién compuestos a la página que se está construyendo actualmente en memoria. Cuando se añade ese nuevo material a la página en construcción, TeX también comprueba si ese contenido recién añadido ha hecho que la página actual quede “suficientemente llena”. Si la página está llena, TeX puede crear un *salto de página*—enviando el contenido de esa página para su procesamiento final (“empaquetado”) y su posterior salida al archivo PDF.

Una característica clave de la etapa final del empaquetado de la página (composición) es algo llamado *rutina de salida* que, en efecto, es una secuencia de comandos definida por el usuario utilizada para empaquetar la página de contenido y dejarla lista para enviarla al archivo PDF. Una actividad de “empaquetado” es añadir encabezados y pies de página, pero hay numerosas formas de usar las rutinas de salida; por ejemplo, consulte [este artículo en TUGboat](https://tug.org/TUGboat/tb11-1/tb27salomon.pdf). Las rutinas de salida son un área bastante compleja de TeX, así que no entraremos en detalles aquí: por ahora, recuerde simplemente que la etapa final de la composición de la página implica usar alguna secuencia de comandos definida por el usuario (denominada colectivamente una *rutina de salida*).

Pero consideremos lo que podría ocurrir cuando TeX completa la composición de un párrafo largo de texto, dividiéndolo en una secuencia de líneas compuestas individuales. TeX querrá añadir ese párrafo recién compuesto, línea por línea, a la página que se está construyendo actualmente, pero quizá solo *algunas* de esas líneas quepan en la página actual. Tenga en cuenta que con “página” nos referimos al área principal del texto (cuerpo de la página), que *no* incluye otros elementos de la página como encabezados y pies de página, que se añaden más tarde (por la rutina de salida).

Después de que varias líneas del párrafo se hayan añadido a la página actual, esta podría quedar “suficientemente llena” y ser hora de que TeX cree un salto de página. Sin embargo, tenemos algo de material “sobrante” porque solo *part* del párrafo llegó a la página actual: el “contenido excedente del párrafo” se guarda para *la siguiente* página. El gráfico siguiente ilustra esta idea: parte del párrafo está en la *actual* página y parte se retiene para la *la siguiente* página.

![Representación esquemática de un párrafo que se extiende a ambos lados de un salto de página](/files/6c22918cee3a33d3b8112efda7be3dfc7deabffb)

Este ejemplo de párrafo demuestra que un motor TeX a menudo procesará (compondrá) piezas de contenido que no pueden, *en su totalidad*, caber en la página actual, porque ese contenido se extiende más allá del punto en el que se hace necesario un salto de página. Recuerde que los motores TeX encuentran los saltos de línea introduciendo, y luego componiendo, *párrafos completos* y, a diferencia de algunas aplicaciones, no adoptan un enfoque línea por línea para componer párrafos. En otras palabras, TeX compone el *párrafo completo* tanto si cabe como si no en la página actual (eso se determina más tarde). Por cierto, el principio de “componer primero por completo y luego añadir a la página actual” también es válido para otros tipos de contenido de TeX, incluidas las tablas, que se leen completamente del archivo .tex y se componen en su totalidad antes de cualquier intento de añadirlas a la página actual.

Para nuestro ejemplo de párrafo, el texto completo de ese párrafo, *incluidos los comandos dentro de ese texto*, se ha procesado por completo, lo que significa que la composición tipográfica de TeX ha alcanzado una determinada ubicación en su `.tex` archivo. El “estado interno actual” del motor TeX, como el valor de las variables o los parámetros almacenados, reflejará el material, incluidos los comandos, procesado hasta la ubicación actual: el final del párrafo.

Aunque el párrafo completo se ha compuesto, parte de él no puede acomodarse en la página actual, lo que provoca que el “contenido excedente del párrafo” se guarde para la *la siguiente* página. Dentro del código LaTeX (texto más comandos) que produjo el “contenido excedente del párrafo”, el motor TeX *podría* haber llamado a cualquier número de comandos y macros que cambiaron valores y variables almacenados internamente por el motor TeX; es decir, hicieron cambios en el “estado actual” de TeX.

El siguiente diagrama ilustra una “peculiaridad” extremadamente importante de TeX, una que afecta a varios aspectos de la composición tipográfica basada en TeX. Al observar el lado derecho del diagrama se ve una representación de los nodos que componen todo el contenido actualmente almacenado en memoria: el área gris claro contiene nodos que forman la *actual* página y el área gris oscuro contiene contenido compuesto destinado a la *la siguiente* página. Este escenario refleja nuestro ejemplo de párrafo: el área gris oscuro representa el “contenido excedente del párrafo”: líneas de texto retenidas porque no caben en la página actual.

![Representación esquemática de la ubicación del nodo donde TeX encuentra un salto de página, mostrando también el contenido retenido para la página siguiente](/files/aa1b2a4a53beb3a813a31e981f436e41639f713d)

Recuerde que, una vez que TeX tiene una página (cuerpo) “suficientemente llena”, pasa ese contenido a algo llamado *rutina de salida* que es una secuencia de comandos definida por el usuario. Entre otras cosas, la rutina de salida añade encabezados y pies de página al cuerpo de la página, finalizando la página y dejándola lista para enviarla al archivo PDF.

Nuestro gráfico (arriba) representa la instancia en que TeX ha elegido hacer un salto de página en algún nodo concreto, como `\baselineskip` pegamento entre líneas compuestas, y está listo para comenzar a empaquetar la página actual usando la rutina de salida: una secuencia de comandos integradas y macros definidas por el usuario. *Sin embargo*, además del contenido que compone la página actual (almacenado en memoria), TeX ya ha procesado y almacenado (en memoria) *material adicional*, de su `.tex` archivo. Ese material adicional se extiende *más allá del salto de página* y *podría* pueden haber incluido comandos que cambiaron valores o variables importantes relacionadas con la página, afectando al “estado interno actual” de TeX, que incluye valores de parámetros internos o datos almacenados por macros.

Cuando TeX empieza a empaquetar la página actual, su “estado interno actual” es *no* definido por todo lo compuesto hasta la ubicación del salto de página, porque TeX ya ha *pasado ese punto* en su archivo y procesado material adicional. Si considera la ubicación de su archivo correspondiente a donde tiene lugar el salto de página y la ubicación a la que TeX ha llegado realmente en su `.tex` archivo, los dos estados internos correspondientes de TeX, incluidos los datos almacenados y el valor de las variables, podrían ser muy diferentes. El estado actual de la composición tipográfica de TeX suele ir por delante de donde ocurre el salto de página; es decir, las actividades de composición tipográfica de TeX *no están sincronizadas* con el proceso de salida de páginas compuestas mediante la rutina de salida.

#### Ejemplo hipotético: cómo obtener encabezados incorrectos

El siguiente diagrama ilustra comandos hipotéticos `\myheader` y `\myfooter` utilizados para almacenar el texto deseado de encabezados y pies de página; por ejemplo, usando definiciones básicas como

```latex
\newtoks\headertoks% una nueva variable de lista de tokens para el texto del encabezado
\newtoks\footertoks% una nueva variable de lista de tokens para el texto del pie de página
% Use \global para asegurar que los datos almacenados del encabezado o pie de página estén
% accesibles en todas partes, incluidos los comandos de la
% rutina de salida
\newcommand{\myheader}[1]{\global\headertoks={#1}}
\newcommand{\myfooter}[1]{\global\footertoks={#1}}
```

en los que `\headertoks` y `\footertoks` son listas de tokens usadas para almacenar el texto de los encabezados y pies de página.

Además, nuestro ejemplo hipotético también tiene una rutina de salida que obtiene el texto del encabezado y del pie de página a partir de los valores actuales de `\myheader` y `\myfooter`. Como se muestra en el diagrama, dentro del contenido destinado a la página actual, `\myheader` y `\myfooter` establecer los valores apropiados (correctos). Sin embargo, sería posible que `\myheader` y/o `\myfooter` se llamara dentro de un párrafo que se extiende a ambos lados de un salto de página. Como TeX tiene que procesar el párrafo completo, `\myheader` y `\myfooter` se volvería a llamar para restablecer el texto del encabezado/pie de página guardado en el “estado interno de TeX”, produciendo valores que no son correctos para la página actual. Cuando la rutina de salida produzca el encabezado y el pie de página, contendrán texto destinado a la página siguiente.

![Gráfico que muestra encabezados y pies de página incorrectos producidos si la rutina de salida usa solo macros de TeX para recuperar el texto del encabezado y del pie de página](/files/fc88fd685b0ca95f517137860a1042a674f23e47)

#### El comportamiento asíncrono de TeX: el comando \mark al rescate

Las actividades de composición tipográfica (construcción de contenido) de TeX *no están sincronizadas* con el proceso final de salida de una página compuesta mediante comandos contenidos en la rutina de salida. Cuando llega el momento de sacar una página, el estado interno real de TeX va por delante de cualquier estado que pudiera haber tenido en la ubicación del salto de página, donde compuso la pieza final de contenido en la página actual que se está sacando.

En [El libro de TeX](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489), Donald Knuth, el creador de TeX, describe esta situación como

> ... la rutina de salida de TeX va por detrás de sus actividades de construcción de páginas

Debido a esta relación no sincronizada, se requieren “instalaciones especiales” en forma del *mecanismo de marcas*, aplicado mediante el `\mark` (o `\marks n`) comando, para asegurar que los encabezados y pies de página contengan material relevante para la página real que se está sacando. El `\mark` comando inserta nodos de marca en el contenido de la página, almacenando la ubicación en memoria del contenido que puede usarse para el encabezado y el pie de página de la página anfitriona.

El autor del conocido y respetado libro [TeX by Topic](https://www.eijkhout.net/tex/tex-by-topic.html) describe el `\mark` mecanismo como

> ... el mecanismo principal mediante el cual la rutina de salida puede obtener información sobre el contenido de la página que acaba de separarse, en particular su parte superior e inferior.

El `\mark` comando es un mecanismo diseñado para sortear la naturaleza asíncrona del algoritmo de salto de página y rutina de salida de TeX.

![Representación esquemática de los datos de marca (nodos) incrustados en el contenido del cuerpo de la página](/files/b859b2b63ab598962c028e233b80e1dac62cc104)

### Comprobaciones previas a la salida: búsqueda de nodos de marca

Después de que el motor TeX haya determinado la ubicación de un salto de página, llama a una rutina interna (llamada `fire_up()`) que realiza mucho preprocesamiento antes de que la rutina de salida complete la composición de la página y escriba la página terminada en el archivo PDF. Una parte importante de esos pasos de preprocesamiento es establecer el valor de tres *variables globales de marca*: `\botmark`, `\topmark` y `\firstmark` que se usan para proporcionar datos para construir encabezados y pies de página. Por supuesto, una página puede contener múltiples nodos de marca, pero estos se filtran para producir las tres variables de marca que actúan de la siguiente manera:

* **`\botmark`** es la marca vigente en el salto de página actual; es decir, la última marca vista en el *actual* page
* **`\topmark`** es el valor de `\botmark` del *anterior* page
* **`\firstmark`** es la primera marca de la *actual* página: la primera marca entre `\topmark` y `\botmark`

El siguiente esquema muestra los principios básicos del preprocesamiento del contenido compuesto de la página para determinar los valores de las tres variables globales de marca `\botmark`, `\topmark` y `\firstmark`:

![Representación esquemática de los principios básicos utilizados para determinar los valores de las tres variables globales de marca \botmark, \topmark y \firstmark](/files/134a289e9a71a082a446a5546c4de7760c2a8485)

La siguiente sección usa algunas de las explicaciones proporcionadas arriba para esbozar cómo LaTeX compone encabezados y pies de página.

### Las clases de LaTeX: estilos de página y encabezados/pies de página

Cuando escribe `\documentclass{*class*}` donde `*class*` puede ser `artículo`, `clase de documento`, `informe` o `letter`, LaTeX carga un archivo llamado `*class*.cls`; por ejemplo, `book.cls`, `article.cls` y así sucesivamente. Esos `.cls` archivos contienen código LaTeX para implementar variaciones específicas de la clase de varios comandos y funciones que se espera que estén presentes en, y sean proporcionados por, todas las clases de documento: los comportamientos compartidos por todas las clases de documento. Los ejemplos podrían incluir márgenes de diseño de página específicos de la clase junto con versiones específicas de la clase de comandos, como `\section`, `\subsection` y así sucesivamente.

Otro elemento importante de `.cls` los archivos es la implementación específica de la clase de estilos de página estándar que definen los encabezados y pies de página de documentos producidos usando una clase y un estilo de página concretos. Por ejemplo:

* **`book.cls`** y **`article.cls`** cada uno contiene implementaciones de los estilos de página `encabezados` y `myheadings`
* **`letter.cls`** contiene definiciones para los estilos de página `encabezados`, `empty`, `plain` y uno llamado `firstpage`
* **`report.cls`** contiene definiciones para los estilos de página `encabezados` y `myheadings`

Las implementaciones de los estilos de página a menudo dependen de la opción `twoside` de `\documentclass`: si el documento es a una o dos caras, de modo que los encabezados y pies de página se definan adecuadamente para páginas pares orientadas a la izquierda e impares orientadas a la derecha.

Las clases de documento pueden basarse en definiciones predeterminadas de los `plain` o `empty` estilos de página proporcionados en otra parte de LaTeX, externos al `.cls` archivo que se está usando.

#### Más sobre estilos de página

Cuando cambia el estilo de una página usando `\pagestyle{*somestyle*}` o `\thispagestyle{*somestyle*}` LaTeX espera encontrar un comando interno llamado `ps@*somestyle*`—normalmente proporcionado por el archivo de clase de documento `.cls` o quizá por un paquete como `fancyhdr`. Por cierto, por “comando interno” entendemos un comando que forma parte del código fuente de LaTeX y cuyo nombre contiene un `@` símbolo, lo que normalmente impide su uso casual (debido a su [código de categoría](/latex/es/mas-temas/43-table-of-tex-category-codes.md)).

La definición de `\ps@*somestyle*` es responsable de implementar las características/comportamientos de ese estilo de página, lo que incluye proporcionar definiciones de:

* comandos usados durante las etapas finales de la composición de la página (para añadir encabezados y pies de página, consulte [más adelante en el artículo](#commands-for-the-output-routine)):
  * `\@oddhead`
  * `\@oddfoot`
  * `\@evenhead`
  * `\@evenfoot`
* comandos para insertar datos de marca relacionados con secciones para usarlos en la generación de encabezados y pies de página del documento que contienen títulos, números y similares de secciones. Por ejemplo, el `encabezados` estilo de página (dentro de `book.cls`) define los siguientes comandos que producen marcas:
  * `\chaptermark`
  * `\sectionmark`

Exploraremos [más a fondo los comandos que generan marcas](#mark-commands-and-mark-data), como `\chaptermark`, pero solo a modo de ejemplo: cuando escribe `\chapter{chapter title}` la `\chaptermark` también se ejecuta el comando para insertar datos de marca relacionados con el capítulo para la posterior producción de encabezados de página.

#### Anatomía de los comandos de encabezado y pie de página basados en estilos de página

Esta sección explora algunos de los comandos/procesos esenciales de LaTeX usados para crear encabezados y pies de página, basándose en explicaciones o conceptos presentados antes en este artículo.

**El “modelo” de encabezados y pies de página de LaTeX**

El contenido de los encabezados y pies de página (predeterminados) de LaTeX se basa en una jerarquía de secciones de documento de dos niveles: una sección de “nivel superior” que contiene múltiples secciones de “nivel inferior”. Para las clases book y article esto se traduce en:

* `**book**` **clase**: las secciones de “nivel superior” se producen mediante comandos `\chapter` y las de “nivel inferior” mediante `\section`, reflejando capítulos que contienen muchas secciones.
* `**article**` **clase** (suponiendo documentos a dos caras): las secciones de “nivel superior” se producen usando comandos `\section` y las de “nivel inferior” mediante `\subsection`, reflejando múltiples subsecciones que aparecen dentro de la misma sección.

LaTeX aplica su “modelo” de encabezados y pies de página mediante sus comandos de seccionado, que “inyectan” nodos de marca (a través del `\mark` comando) para almacenar datos relevantes para la sección del documento que se está creando. Por ejemplo, cada vez que escribe `\section{*some section title*}` se creará un nodo de marca que contiene datos que reflejan `*some section title*` y el número de la sección.

LaTeX usa un sistema de marcas que contiene datos con la forma `{left}{right}`, generados en última instancia mediante `\mark` comandos

```latex
\mark{{left}{right}}
```

encapsulado en capas de macros diseñadas para proteger a los usuarios de los detalles de bajo nivel, que se exploran en secciones posteriores de este artículo.

#### Explorando la clase book

Cuando se carga el archivo `book.cls` , una de sus acciones finales es ejecutar `\pagestyle{headings}` que establece el estilo de página predeterminado en `encabezados`, así que veremos ese estilo de página con más detalle.

Como [se señaló arriba](#more-on-page-styles), las características/propiedades del `encabezados` estilo de página, tal como lo implementa la `clase de documento` clase, estarán definidas por el comando (interno) `\ps@headings` contenido en el archivo `book.cls`. La definición exacta de `\ps@headings` depende de si el documento es de una o dos caras (predeterminado para la clase `clase de documento` ).

**“Comandos de marca” y “datos de marca”**

Para documentos a dos caras producidos por la clase `clase de documento` , la definición de `\ps@headings` crea (define) dos “comandos de marca”: `\chaptermark` y `\sectionmark` que producen “datos de marca”, de la forma `{left}{right}`, para usarse en encabezados y pies de página. Esos comandos de marca reflejan el modelo de encabezados y pies de página de LaTeX, basado en la jerarquía de secciones del documento:

* el comando de sección de “nivel superior” (aquí, `\chapter`) se usa para proporcionar “datos de marca” para los encabezados de páginas pares orientadas a la izquierda. Cuando empieza un capítulo nuevo, escribiendo `\chapter{*chapter title*}`, `\chaptermark` se llama para crear “datos de marca” que reflejan ese nuevo capítulo, conteniendo su `*chapter title*` y número.
* el comando de sección de “nivel inferior” (aquí, `\section`) se usa para proporcionar “datos de marca” para páginas impares orientadas a la derecha. Cuando escribe `\section{*section title*}` la `\sectionmark` se llamará al comando para crear “datos de marca” que reflejen la nueva sección, conteniendo su `*section title*` y número. Cualquier dato de marca proporcionado por la anterior `\chapter` no se ve afectado por ningún comando \section posterior.

**\markboth y \markright**

Los comandos de marca específicos de secciones de LaTeX, como `\chaptermark` y `\sectionmark`, utilizan otros dos comandos llamados `\markboth` y `\markright` que proporcionan los datos de marca reales para los encabezados y pies de página. `\markboth` y/o `\markright` pueden incluir comandos para dar estilo al texto del encabezado o pie de página, como ponerlo en mayúsculas.

Para documentos producidos usando `clase de documento` los valores predeterminados de la clase (doble cara, `encabezados` estilo de página), los comandos generadores de marcas funcionan así:

* `\chaptermark` genera datos de marca usando `\markboth`
* `\sectionmark` genera datos de marca `\markright`

`\markboth` y `\markright` son macros que, en última instancia, usan el primitivo (incorporado, de bajo nivel) `\mark` comando para insertar realmente marcas generadas desde dentro de los comandos de seccionamiento.

`\markboth` toma la forma

* **`\markboth{left}{right}`**: inserta una marca (nodo) usando `\mark{{left}{right}}` lo que da como resultado un nodo de marca que contiene un par de valores entre llaves `{left}{right}`.

`\markright` toma la forma

* **`\markright{newright}`**: inserta una marca (nodo) usando `\mark{{currentleft}{newright}}`; es decir, cambia el valor actual de `derecha` a `newright` pero el valor actual de `izquierda` (es decir, `currentleft`) no cambia, lo que da como resultado un nodo de marca que contiene un par de valores entre llaves `{currentleft}{newright}`.

El comportamiento de `\markboth` y `\markright` admiten la jerarquía de secciones de dos niveles, como un documento que contiene varias secciones dentro de cada capítulo.

A modo de ejemplos para la clase de documento (de dos caras) `clase de documento` (usando el estilo de página headings):

* `\chaptermark` usa `\markboth` para establecer:
  * a `{left}` campo que compone CHAPTER . en mayúsculas.
  * un campo {right} que está en blanco (`{}`)
* `\sectionmark` usa `\markright` para establecer el `{right}` campo de marca para componer., también en mayúsculas.

Para entender por qué `\sectionmark` usa `\markright` podemos observar que cada nuevo `\section` comando debe:

* insertar una nueva marca que contenga datos para este `\section` (como su título y número).
* pero *no* afectar los valores de los datos de marca del `\chapter` en el que aparece ese particular `\section` comando

Por estas razones, el `\section` comando llama a `\sectionmark` que usa `\markright` para crear una marca relacionada con `\section`: actualiza el `{right}` campo de datos de marca pero no afecta al valor actual del `{left}` valor del campo de datos de marca que fue establecido por el actual `\chapter`.

Nota: el código fuente de LaTeX contiene el aviso:

> Los comandos de marcado funcionan razonablemente bien para marcas derechas «numeradas dentro de» marcas izquierdas—por ejemplo, la marca izquierda es cambiada por un comando \chapter y la marca derecha es cambiada por un comando \section. Sin embargo, sí produce resultados algo anómalos si ocurren 2 \markboth en la misma página.

**Comandos para la rutina de salida**

El `\ps@headings` comando implementa las definiciones de los siguientes comandos

* `\@oddhead`
* `\@oddfoot`
* `\@evenhead`
* `\@evenfoot`

que son usados por la rutina de salida para añadir encabezados y pies de página durante la etapa final de composición de la página. Por ejemplo, `book.cls` establece `\@oddfoot` y `\@evenfoot` al valor `\@empty`, que se define como `\def\@empty{}`, produciendo así `\ps@headings` pies de página vacíos en páginas de impar y par cara:

```latex
\let\@oddfoot\@empty
\let\@evenfoot\@empty
```

Los encabezados se definen como:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
```

donde

* `\leftmark` extrae el `{left}` valor de un `{left}{right}` par de marcas
* `\rightmark` extrae el `{right}` valor de un `{left}{right}` par de marcas
* \thepage muestra el número de página actual

En esencia, estas implementaciones de `\@evenhead` y `\@oddhead` producen los siguientes resultados:

* `\@evenhead`: el número de página aparece a la izquierda del encabezado y el contenido de `\leftmark`, estilizado con el comando de fuente `\slshape`, se muestra a la derecha del encabezado—el espacio en blanco intermedio lo proporciona el muy flexible `\hfil` espaciado.
* `\@oddhead`: el contenido de `\rightmark`, estilizado con el comando de fuente `\slshape`, aparece a la izquierda del encabezado y el número de página actual se muestra a la derecha del encabezado—de nuevo, el espacio en blanco intermedio lo proporciona `\hfil` espaciado.

Sin embargo, queda una pregunta clave: *qué* `{left}{right}` par de marcas se usan por `\leftmark` y `\rightmark`: en otras palabras, ¿de dónde obtienen sus valores de datos de marca?

Como [se señaló arriba](#filtering) pero [explicado más abajo](#explainfiltering), durante las etapas finales de composición de la página, cualquier marca contenida en las páginas del documento es «filtrada» y usada para establecer el valor de tres variables globales de marca: `\botmark`, `\topmark` y `\firstmark`. Debido a la [estructura de las marcas de LaTeX](#latexs-model-of-headers-and-footers), cada una de esas 3 variables de marca acabará conteniendo un valor de `{left}{right}` para algún par de valores `{left}` y `{right}` y son estas las que proporcionan el `{left}{right}` par de marcas (campos) reales para `\leftmark` y `\rightmark`:

* `\leftmark` extrae el `izquierda` valor del `{left}{right}` par de marcas (campos) proporcionado por `\botmark`
* `\rightmark` extrae el `derecha` valor del `{left}{right}` par de marcas proporcionado por `\firstmark`

Nota `\markboth` y `\markright` puede contener comandos para dar estilo al texto del encabezado y del pie de página, como la conversión a mayúsculas.

### Ejemplos usando comandos de bajo nivel de LaTeX

Los siguientes ejemplos demuestran cómo realizar cambios en los estilos de página o en los encabezados y pies de página redefiniendo algunos de los comandos de bajo nivel (internos) de LaTeX tratados en este artículo (los que contienen el símbolo @). No estamos recomendando este método para cambiar encabezados y pies de página, pero está disponible para quienes lo necesiten (por ejemplo, los autores de paquetes). La solución preferida para cambiar encabezados y pies de página es usar [`fancyhdr` paquete](https://ctan.org/pkg/fancyhdr?lang=en), que se discute en un [artículo de ayuda de Overleaf](/latex/es/formato/02-headers-and-footers.md).

#### Definir un estilo de página mínimo

El siguiente ejemplo define un nuevo estilo de página, extremadamente mínimo, llamado `demostyle` que usa texto estático para definir los encabezados y pies de página y no depende de los comandos de seccionamiento (`\chapter`, `\section` etc) para establecer el contenido del encabezado y del pie de página.

El ejemplo comienza cambiando el código de categoría del `@` carácter a 11 para que pueda usarse dentro de nombres de macro. El `\ps@demostyle` comando implementa nuestro estilo de página mínimo redefiniendo los comandos usados (en la rutina de salida) para producir los encabezados y pies de página: `\@oddhead`, `\@oddfoot`, `\@evenhead` y `\@evenfoot`. Nótese la `twoside` opción en nuestra `\documentclass` declaración—que usa la `artículo` clase.

```latex
\documentclass[twoside]{article}
\catcode`@=11
\newcommand{\ps@demostyle}{%
\renewcommand\@oddfoot{\hfil Pie de página de página impar\hfil}%
\renewcommand\@evenfoot{\hfil Pie de página de página par\hfil}%
\renewcommand\@evenhead{\thepage\hfil Encabezado de página par}%
\renewcommand\@oddhead{Encabezado de página impar\hfil\thepage}}
\catcode`@=12
\title{Demostrando un estilo de página}
\author{Overleaf}
\date{August 2022}
\begin{document}
\pagestyle{demostyle}
\maketitle
\newpage
\section{Introducción}
\newpage
\section{Más material}
\end{document}
```

[Abre este ejemplo en Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+new+page+style\&snip=%5Cdocumentclass%5Btwoside%5D%7Barticle%7D%0A%5Ccatcode%60%40%3D11%0A%5Cnewcommand%7B%5Cps%40demostyle%7D%7B%25%0A%5Crenewcommand%5C%40oddfoot%7B%5Chfil+The+odd-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenfoot%7B%5Chfil+The+even-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenhead%7B%5Cthepage%5Chfil+The+even-page+header%7D%25%0A%5Crenewcommand%5C%40oddhead%7BThe+odd-page+header%5Chfil%5Cthepage%7D%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+a+page+style%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bdemostyle%7D%0A%5Cmaketitle%0A%5Cnewpage%0A%5Csection%7BIntroduction%7D%0A%5Cnewpage%0A%5Csection%7BMore+material%7D%0A%5Cend%7Bdocument%7D)

#### Cambiar los encabezados para la clase book

El siguiente ejemplo cambia los encabezados para la clase book redefiniendo `\@oddhead` y `\@evenhead` de modo que los encabezados de las páginas de impar y par cara contengan el número de página actual y el título del capítulo. Observe cómo el segundo `\chapter` comando usa el título corto opcional del capítulo `[El título corto]` que ahora proporciona el texto del encabezado, en lugar del título largo.

`\section` los comandos no tienen efecto sobre el contenido del encabezado porque nuestras redefiniciones del encabezado usan solo `\leftmark` que obtiene detalles del capítulo actual. Para acceder a los detalles de la sección actual necesitaríamos usar `\rightmark` en la definición de `\@oddhead` y/o `\evenhead`.

```latex
\documentclass{book}
% NB: el código de categoría de '@' se cambia temporalmente a 11
% para permitir su uso en nombres de comando
\catcode `@=11
% Dejar \@oddfoot y \evenfoot equivalentes a \@empty
% para hacerlos en blanco (vacíos)
\let\@oddfoot\empty\let\evenfoot\empty
% Redefinir \@oddhead y \@evenhead
\renewcommand{\@oddhead}{\leftmark\hfil\thepage}
\renewcommand{\@evenhead}{\thepage\hfil\leftmark}
\catcode `@=12
% Usar un tamaño de página convenientemente pequeño
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memorias de un usuario de \TeX{}}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Esta es la parte preliminar, que usa numerales romanos.
\mainmatter
\chapter{¿Por dónde empiezo?}
Capítulo 1: Un capítulo corto.
\newpage
\section{Al principio...}
Una sección.
\chapter[El título corto]{Un capítulo con un título muy largo, lo que lo hace inadecuado para los encabezados}
\newpage
\section{Otra sección}
Con poco contenido.
\newpage
\section{¿Qué, otra sección?}
También con poco contenido.
\end{document}
```

[Abre este ejemplo en Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+headers+for+the+book+class\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%25+Let+%5C%40oddfoot+and+%5Cevenfoot+be+equivalent+to+%5C%40empty%0A%25+to+make+them+blank+%28empty%29%0A%5Clet%5C%40oddfoot%5Cempty%5Clet%5Cevenfoot%5Cempty%0A%25+Redefine+%5C%40oddhead+and+%5C%40evenhead%0A%5Crenewcommand%7B%5C%40oddhead%7D%7B%5Cleftmark%5Chfil%5Cthepage%7D%0A%5Crenewcommand%7B%5C%40evenhead%7D%7B%5Cthepage%5Chfil%5Cleftmark%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cchapter%5BThe+short+title%5D%7BA+chapter+with+a+very+long+title%2C+making+it+unsuitable+for+headers%7D%0A%5Cnewpage%0A%5Csection%7BAnother+section%7D%0AWith+little+content.%0A%5Cnewpage%0A%5Csection%7BWhat%2C+another+section%3F%7D%0AAlso+with+little+content.%0A%5Cend%7Bdocument%7D)

#### Usando los comandos de marcas extendidas de ε-TeX

El `clase de documento` la clase usa las siguientes definiciones de `\@evenhead` y `\@oddhead` para producir encabezados:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}
```

donde los comandos `\leftmark` y `\rightmark` se definen como

```latex
\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty}
\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty}
```

Usando los comandos extendidos de ε-TeX, y la equivalencia entre la clase de marcas 0 de ε-TeX y los comandos originales de TeX, podemos:

* reescribir `\leftmark` para reemplazar `\botmark` con `\botmarks0` equivalente, y
* reescribir `\rightmark` para reemplazar `\firstmark` con `\firstmarks0` equivalente

Estas redefiniciones producen

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
```

Nótese el uso de `\relax` para terminar la búsqueda de TeX de dígitos adicionales—también puedes reemplazar `\relax` con un espacio para actuar como terminador.

El siguiente ejemplo produce una salida idéntica a las definiciones originales de `\leftmark` y `\rightmark`.

```latex
\documentclass{book}
% Redefinir \leftmark y \rightmark para usar
% \botmarks0 y \firstmarks0 respectivamente
% NB: el código de categoría de '@' se cambia temporalmente a 11
% para permitir su uso en nombres de comando
\catcode `@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
\catcode `@=12
% Usar un tamaño de página convenientemente pequeño
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memorias de un usuario de \TeX{}}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Esta es la parte preliminar, que usa numerales romanos.
\mainmatter
\chapter{¿Por dónde empiezo?}
Capítulo 1: Un capítulo corto.
\newpage
\section{Al principio...}
Una sección.
\newpage
Otra sección.
\end{document}
```

[Abre este ejemplo en Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+%CE%B5-TeX%E2%80%99s+extended+marks+command\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks0+and+%5Cfirstmarks0+respectively%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cnewpage%0AAnother+section.%0A%5Cend%7Bdocument%7D)

**Notas sobre ε-TeX**

Como [hemos señalado arriba](#etex), ε-TeX introduce el `\marks` comando:

```latex
\marks n {stuff to store}
```

que amplía la característica original `\mark` del motor TeX de Knuth y está disponible en los tres motores TeX principales: pdfTeX, LuaTeX y XeTeX.

La implementación de ε-TeX también introduce nuevas variables globales de marca `\firstmarks n`, `\botmarks n` y `\topmarks n`: una para cada clase `n`. Estas variables de marca basadas en clases se determinan [usando los mecanismos descritos arriba](#pre-output-checks-looking-for-mark-nodes), y todas pueden usarse en la producción de encabezados y pies de página.

Puedes usar cualquiera de las $$2^{15}$$ = 32768 clases de marcas, que van de 0 a 32767, dentro de las redefiniciones de `\leftmark` o `\rightmark`. Eso supone que has proporcionado (insertado) datos de marca adecuados para la clase de marca elegida, `n`, mediante `\marks n{{left}{right}}`.

Nótese que LuaTeX proporciona $$2^{16}$$ = 65536 clases de marcas, con `n` que van de 0 a 65535.

**Ejemplo usando la clase de marcas 10**

Este ejemplo demuestra el uso de la clase de marcas 10 (elegida al azar) para crear encabezados de documento. El documento de muestra compone 6 páginas que contienen la secuencia de marcas presentada en el [ejemplo trabajado al final de este artículo](#a-worked-example-to-show-how-tex-engines-determine-values-for-botmark-topmark-and-firstmark). Un estudio de ese ejemplo mostrará por qué el motor TeX ha seleccionado una marca en particular, $$\alpha$$, $$\beta$$, $$\gamma$$ y $$\delta$$, para usarla en cada uno de los encabezados.

Empezamos definiendo una macro de conveniencia, `\domark`, que usa `\marks 10` para insertar datos de marca que siguen la `{left}{right}` convención de LaTeX:

```latex
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
```

Las marcas de la clase 10 se ponen a disposición del mecanismo de encabezado y pie de página de LaTeX redefiniendo `\leftmark` y `\rightmark`—con un poco de información adicional añadida:

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
```

Después de insertar varias marcas (de clase 10), el motor TeX (aquí, pdfTeX) crea obedientemente variables globales de marca para la clase 10—`\botmarks10`, `\topmarks10` y `\firstsmarks10` qué `\leftmark` y `\rightmark` que se usan para producir los encabezados.

```latex
\documentclass{book}
% Un comando breve para usar marcas de la clase 10
% y siguiendo la estructura de marcas de LaTeX {left}{right}
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
% Redefinir \leftmark y \rightmark para usar
% \botmarks10 y \firstmarks10 respectivamente
\catcode`@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
\catcode`@=12
\title{Demostrando las marcas mejoradas de \(\varepsilon\)-\TeX}
\author{Overleaf}
\date{August 2022}
\begin{document}

Página 1: no se añadieron marcas, así que todas las variables de marca permanecen en su estado inicializado: vacías (NULL).

\newpage
Página 2: marca $\alpha$ añadida a esta página mediante

\verb|\domark{$\alpha$-left}{$\alpha$-right}|\domark{$\alpha$-left}{$\alpha$-right}

\newpage
Página 3: no se añadieron marcas nuevas a esta página.

\newpage
Página 4: marca $\beta$ seguida de marca $\gamma$ añadidas a esta página mediante

\verb|\domark{$\beta$-left}{$\beta$-right}|

\verb|\domark{$\gamma$-left}{$\gamma$-right}|.
\domark{$\beta$-left}{$\beta$-right}
\domark{$\gamma$-left}{$\gamma$-right}

\newpage
Página 5: marca $\delta$ añadida a esta página mediante

\verb|\domark{$\delta$-left}{$\delta$-right}|
\domark{$\delta$-left}{$\delta$-right}

\newpage
Página 6: no se añadieron marcas a esta página.
\end{document}
```

[Abre este ejemplo en Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+e-TeX+global+marks+variables\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+A+short+command+to+use+marks+with+class+10%0A%25+and+following+LaTeX%27s+mark+structure+%7Bleft%7D%7Bright%7D%0A%5Cnewcommand%7B%5Cdomark%7D%5B2%5D%7B%5Cmarks+10%7B%7B%231%7D%7B%232%7D%7D%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks10+and+%5Cfirstmarks10+respectively%0A%5Ccatcode%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cbotmarks10%7D%29%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cfirstmarks10%7D%29%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+%5C%28%5Cvarepsilon%5C%29-%5CTeX%E2%80%99s+enhanced+marks%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%0APage+1%3A+No+marks+added+so+all+mark+variables+remain+in+their+initialized+state%3A+empty+%28NULL%29.%0A%0A%5Cnewpage%0APage+2%3A+%24%5Calpha%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%0A%0A%5Cnewpage%0APage+3%3A+No+new+marks+added+to+this+page.%0A%0A%5Cnewpage%0APage+4%3A+%24%5Cbeta%24-mark+followed+by+%24%5Cgamma%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%7C%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%7C.%0A%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%0A%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%0A%0A%5Cnewpage%0APage+5%3A+%24%5Cdelta%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%7C%0A%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%0A%0A%5Cnewpage%0APage+6%3A+No+marks+added+to+this+page.%0A%5Cend%7Bdocument%7D)

La siguiente imagen muestra los encabezados producidos por este ejemplo:

![Imagen que muestra la salida del código LaTeX usando los comandos de marcas extendidas de ε-TeX](/files/52cfed3f19ff812d44759f1b403610426dbca75e)

* **Nota**: El encabezado de la página 1 se crea en un momento en que las tres variables de marca para la clase 10—`\botmarks10`, `\topmarks10` y `\firstsmarks10`—están vacías. El resultado final es que `\rightmark` (para la página 1) inserta solo el último fragmento del encabezado: `(via \texttt{\string\firstmarks10})`, como se muestra en la imagen anterior.

## Un ejemplo trabajado que muestra cómo los motores TeX determinan los valores de \botmark, \topmark y \firstmark

![Db.gif](/files/97ebad5801b425b36578eacc0a23b5765b7758c4)![Db.gif](/files/97ebad5801b425b36578eacc0a23b5765b7758c4) Parece apropiado replicar el uso que hace Knuth de los dobles signos de peligro (imagen cortesía de [este sitio web](http://www.truetex.com/db.htm)) porque el material es algo de bajo nivel y «muestra lo que hay bajo el capó», aunque esperamos que pueda resultar interesante para lectores intrépidos que deseen entender algunos detalles más.

La siguiente discusión se basa estrechamente en el último ejemplo de la página 258 de [El libro de TeX](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489). Aquí hemos editado y vuelto a componer ese ejemplo para quienes no tienen acceso a The TeXbook:

![Versión editada y recompuesta de un ejemplo de la página 258 de The TeXbook](/files/ad813f64262e03eece65ea073d70a1f036195940)

La tabla presentada en esta imagen se reproduce a partir de una proporcionada por Knuth pero, como la original, no hay explicación de cómo se derivó. Aquí abordaremos eso para proporcionar detalles adicionales que muestran cómo se determinaron esos valores de `\botmark`, `\topmark` y `\firstmark` se determinaron—¡obtener estos detalles requirió explorar el código fuente de un motor TeX!

El proceso de asignar valores a `\botmark`, `\topmark` y `\firstmark` puede resumirse en 3 breves fragmentos de pseudocódigo como se muestra en el siguiente diagrama y las explicaciones posteriores:

1. Comprobación previa al contenido
2. Bucle de contenido
3. Comprobación posterior al contenido

Nota:

* Las pruebas en el paso 1 «Comprobación previa al contenido» y en el paso 3 «Comprobación posterior al contenido» se realizan una vez por página.
* El paso 2 «Bucle de contenido» implica que TeX recorra el contenido de la página buscando nodos de marca y usándolos para establecer los valores de las variables de marca como se muestra.

![Imagen que muestra versiones en pseudocódigo del código usado para establecer los valores de las tres variables globales de marca utilizadas por los motores TeX](/files/0d65d94ed0c2654a70015bfc358e33d867e90c5e)

Cada vez que TeX encuentra un salto de página adecuado envía el contenido de esa página para su procesamiento final, realizando estos (tres) pasos de procesamiento de marcas para cada página de tu documento. Los pasos de procesamiento etiquetados 1, 2 y 3 se referencian en el diagrama final dentro de esta sección.

Nótese que:

* antes de que se haya procesado la primera página, las tres variables globales de marca `\botmark`, `\topmark` y `\firstmark` se han inicializado como vacías (NULL).
* los valores finales de `\botmark`, `\topmark` y `\firstmark` determinados al final de la *anterior* página se convierten en los valores (de entrada) para procesar la *actual* página—la que se está procesando.

Los siguientes fragmentos de código son ***pseudocódigo*** derivados (resumidos) del código fuente real de un motor TeX. El objetivo es proporcionar un resumen conciso del código que ayude a demostrar los principios clave implicados.

**Paso 1: comprobación previa al contenido** Antes de que TeX examine el contenido real de la página actual, comprueba si el actual `\botmark` valor—es decir, resultante de la *anterior* página—está vacío (NULL):

```latex
if(\botmark != NULL)
{
   \topmark = \botmark;
   \firstmark= NULL;
}
```

En esta prueba, si `\botmark` (de la *anterior* página) *no* está

* `\topmark` vacío: *actual* para la *anterior* página se establece en la `\botmark` valor
* `\firstmark`página *actual* , para la `\mark` página (que se está procesando), se establece como vacía (NULL): empieza esta página suponiendo que no hay

Nótese que esta prueba se realiza *una vez* para cada página que se procesa.

**Paso 2: bucle de contenido** Después, TeX recorre en bucle el contenido de la página; parte de ese bucle incluye buscar `\mark` nodos:

```latex
if(type(node)==mark_node)
{
   if(\firstmark==NULL)
   {
      \firstmark=node(text);
   }
   \botmark= node(text);
}
```

Esta prueba se aplica a cada nodo de marca situado dentro de (contenido en) la página actual. La prueba anterior (Paso 1, arriba) podría haber establecido `\firstmark` a vacío, de modo que la primera marca encontrada en la página actual se convierte en el valor de `\firstmark` y `\botmark`. Cualquier *posterior* `\mark` nodo detectado mientras se ejecuta este bucle no cambiará el valor de `\firstmark`, porque ya no está vacío (NULL), pero `\botmark` se actualiza—porque ese es el propósito de `\botmark`: almacenar el último `\mark` nodo visto para esta página.

**Paso 3: comprobación posterior al contenido** Una vez que ha recorrido el contenido de la página, TeX aplica la siguiente prueba final, que también se realiza una vez por página:

```latex
if((\topmark != NULL)&&(\firstmark==NULL))
{
	\firstmark= \topmark;
}
```

* Si `\topmark` no está vacío (NULL), sabemos, por el Paso 1, que `\botmark` para la página anterior no estaba vacío (NULL).
* Si `\firstmark` sigue vacío, entonces no hemos visto ningún `\mark` nodos porque la prueba del Paso 2 no se activó; en consecuencia, `\firstmark` se establece en el valor de `\topmark` que también es el valor de `\botmark` de la página anterior.

Después de la aplicación secuencial de estos tres pasos a las 6 páginas de nuestro ejemplo, los valores de `\botmark`, `\topmark` y `\firstmark` se derivan utilizando las transiciones mostradas en el diagrama siguiente, donde:

* los rectángulos redondeados de color azul claro son los valores finales de la variable de marca para cada página
* los cuadrados redondeados de color gris claro representan valores intermedios que surgen durante el procesamiento
* las flechas etiquetadas representan cambios en los valores de las variables de marca según los pasos 1, 2 o 3 del diagrama anterior, o que un valor no ha sido modificado por ninguno de los pasos; etiquetadas «sin cambio».

El siguiente diagrama muestra cómo los tres fragmentos de pseudocódigo generan los valores finales de `\botmark`, `\topmark` y `\firstmark` enumerados en la tabla contenida en la página 258 de The TeXbook.

![Un diagrama de transición que acompaña el ejemplo de la página 258 de The TeXbook, mostrando las transiciones internas a medida que se asignan sus valores a las variables globales de marca](/files/67b4c1999f0a219766ca5eedae8d8733231ea7eb)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/es/articulos-en-profundidad/23-how-does-latex-typeset-headers-and-footers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
