> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Una nueva serie de artículos: tokens de TeX y conceptos relacionados—¿pero por qué (y cómo)?

Este artículo introductorio tiene como objetivo explicar por qué se escribió esta serie, qué espero lograr y proporcionar información de contexto sobre las técnicas utilizadas para explorar los tokens de TeX mediante la observación del funcionamiento interno de un motor de TeX. Esta página del artículo también está diseñada para contener los enlaces a todos los artículos de la serie y se actualizará para proporcionar esos enlaces a medida que se publique cada nuevo artículo.

### Enlaces a los artículos

Cada artículo contendrá un conjunto de enlaces a otros artículos de esta serie.

* [¿Qué es un “token de TeX”?](/latex/es/articulos-en-profundidad/53-what-is-a-tex-token.md)
* [¿Qué es una “lista de tokens de TeX”?](/latex/es/articulos-en-profundidad/54-what-is-a-tex-token-list.md)

## Contexto de esta serie de artículos

La motivación para escribir esta serie de artículos surgió al leer material sobre TeX que explicaba muchas de las actividades de TeX mediante el concepto de “tokens”, junto con el “proceso de tokenización” de TeX, las “listas de tokens” y conceptos relacionados como la “expansión de macros” y los “comandos expandibles”. Siempre que me encontraba con explicaciones relacionadas con TeX formuladas en términos de “tokens de TeX”, la misma pregunta seguía viniendo a mi mente: ¿qué es exactamente, *es* ¿un token de TeX? Tenía que averiguarlo.

El alcance y el contenido del primer artículo, [¿Qué es un “token de TeX”?](/latex/es/articulos-en-profundidad/53-what-is-a-tex-token.md), es, por su propia naturaleza, bastante “cercano al metal”, como dirían los programadores, y no cabe duda de que los “tokens de TeX” podrían clasificarse como un tema bastante arcano sobre el que escribir: entonces, ¿para qué molestarse? En última instancia, uno adopta una postura —o, quizá, da un salto de fe— y piensa que otras personas también pueden haberse estado preguntando sobre el mismo tema y que hay margen para uno o dos artículos que completen algunas lagunas. Mi objetivo es proporcionar algunas explicaciones útiles de contexto que puedan complementar otro material que quizá estés leyendo y, con suerte, ayudar a comprender mejor algunos conceptos clave que surgen a medida que aprendes sobre TeX y exploras macros y programación.

Está claro que, dentro de los límites de los artículos de blog, solo podemos arañar la superficie: simplemente no es práctico intentar explicar todos los temas relevantes ni adentrarse en las aguas más turbias. Por necesidad, omitiré muchos detalles y caminaré por la fina línea entre la simplificación excesiva y llevar las analogías hasta el punto de ruptura.

«Escribe artículos que te gustaría haber leído» es una guía útil y una que he intentado aplicar con ahínco al escribir esta serie.

## Tras plantear la pregunta, ¿ahora qué?

El reto inmediato estaba claro: ¿cómo se averigua algo sobre los tokens de TeX, si tales detalles (de los tokens, la tokenización, etc.) están enterrados muy profundamente en el código de software de los motores de TeX? En realidad no se supone que debas preocuparte por ello, salvo, por supuesto, que estés realmente interesado en esos detalles.

Una forma de explorar la respuesta a estas preguntas es intentar leer el código fuente original de TeX en [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—mediante la ejecución de [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) para extraer la documentación de TeX, o comprando una copia del libro [Computadoras y composición tipográfica, Volumen B: TeX: El programa](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). ¡Compré una copia del libro impreso! Sin duda, contar con el código fuente de TeX publicado en forma de libro es extremadamente útil y, por supuesto, a lo largo de la obra hay muchas explicaciones útiles. Sin embargo, el TeX de Knuth está escrito en Pascal y, naturalmente, el código fuente en Pascal está documentado mediante la metodología de programación literaria de Knuth, presentando el código en pequeños fragmentos, fáciles de digerir. Es fácil apreciar cómo el enfoque de Knuth para la documentación realmente ayuda en un software tan complejo como TeX, pero leer el libro sí implica bastantes referencias cruzadas y saltos de página.

Aunque útil, el libro por sí solo no me resultó suficiente para comprender mejor lo que sucede cuando TeX crea “tokens”, el tema que me interesaba particularmente. Solo hay una manera de averiguarlo de verdad: compilar el programa TeX, ejecutarlo sobre un pequeño archivo TeX y observar literalmente cómo se ejecuta el código mientras TeX analiza y lee la entrada. Los detalles de compilar TeX desde el código fuente son algo arcánicos —convertir Pascal a C—, pero hay una breve descripción en la siguiente sección junto con un enlace a una entrada personal de blog que entra en más detalle.

A diferencia de XeTeX y LuaTeX —que pueden procesar texto en formato UTF-8 y admiten la codificación de texto Unicode—, el TeX de Knuth es un motor de 8 bits, lo que significa que supone que los caracteres de entrada están en el rango de 0 a 255. Aunque esta es una distinción importante, no *materialmente* afecta a nuestra discusión sobre los tokens de TeX, porque tratamos temas y principios comunes a todos los motores de TeX: están en el corazón mismo del software.

## ¿Cómo se pueden estudiar los tokens de TeX?

Desentrañar el recorrido desde el texto de entrada hasta los tokens de TeX ha sido, para mí, todo un viaje —debo confesar que distintos grados de confusión fueron compañeros semipermanentes en el camino—: TeX es una pieza de software tan compleja.

Durante algunos años (desde alrededor de 2009) he compilado rutinariamente la versión más reciente de LuaTeX a partir de su código fuente —un proceso bastante sencillo gracias a la forma absolutamente magnífica en que se distribuye el código fuente de LuaTeX. Con esa experiencia me interesé en comprender mejor cómo compilar el TeX original de Knuth a partir de su código fuente, una *muy* distinta propuesta, porque TeX está escrito usando la metodología de programación literaria de Knuth. Esa compilación personal de TeX, en Windows pero usando compiladores y herramientas de código abierto, se llevó a cabo fuera de la distribución TeX Live y es un proyecto independiente. También requirió construir la cadena de herramientas necesaria para convertir `tex.web` en un programa en C que pudiera compilarse y luego ejecutarse en un depurador para ver qué hace realmente TeX mientras procesa los caracteres de entrada.

Se utilizó el TeX original de Knuth en lugar de pdfTeX, XeTeX o LuaTeX porque necesitaba una versión de TeX lo más cercana posible al código fuente impreso en el libro TeX: The Program. Ese libro se publicó por primera vez en 1986 y, aunque TeX ha recibido algunas actualizaciones desde entonces, la última versión de TeX (3.14159265, lanzada en enero de 2014) sin duda está lo suficientemente cerca del código fuente contenido en el libro.

Reflejando la metodología de programación literaria de Knuth, el código fuente de TeX se distribuye en un formato de texto llamado WEB: una mezcla de documentación de TeX y código fuente en Pascal. La idea básica es que se usan dos utilidades llamadas TANGLE y WEAVE, que procesan archivos WEB para extraer bien la documentación de TeX o bien el código fuente en Pascal:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extrae el código fuente en Pascal de un archivo WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extrae la documentación de TeX del archivo WEB

Sin embargo, antes de extraer el código fuente en Pascal hay que preprocesar el `tex.web` archivo de Knuth para aplicar una serie de cambios que permiten convertir el código Pascal de TeX a código C mediante un proceso llamado Web2C. A este paso de preprocesamiento se le denomina *aplicar archivos de cambios*.

El archivo de código original de Knuth (tex.web) no debe alterarse directamente de ninguna manera; en su lugar, se aplican modificaciones usando los llamados archivos de cambios (extensión `.ch`) que contienen los cambios que se desean aplicar al archivo principal `.web` —como `tex.web`. Los archivos de cambios se fusionan con el código fuente original de Knuth —mediante un programa de utilidad adicional llamado TIE— para crear un archivo llamado, por ejemplo, `mytex.web` que se procesa con TANGLE para extraer el código Pascal en `mytex.pas`. Una vez que se dispone de un archivo fuente en Pascal adecuado, se pueden aplicar los pasos finales del proceso Web2C para convertirlo en un archivo de código fuente en C que pueda compilarse en un programa ejecutable de TeX. Si quieres leer sobre el proceso de conversión Web2C, algo bastante enrevesado, hay más detalles en el [sitio web personal de este autor](http://www.readytext.co.uk/?p=2529).

El resultado final es un programa TeX que puede ejecutarse usando el excelente y gratuito [entorno de desarrollo Eclipse para C/C++](http://www.eclipse.org/home/index.php) para avanzar paso a paso por el código fuente de TeX (en C) y observar qué sucede mientras examina tu entrada. Sin duda no es el pasatiempo más entretenido, porque el código C está generado automáticamente y, en algunos lugares, es extremadamente difícil de seguir (el código fuente de TeX hace un uso muy generoso de GOTOs y variables globales). El libro TeX: The Program sigue siendo invaluable para ayudar a navegar por el código fuente en C, aunque el libro contiene el código fuente de TeX en código Pascal bellamente maquetado.

Para redondear la discusión, aquí hay una captura de pantalla de ejemplo que muestra TeX ejecutándose a través del entorno de desarrollo Eclipse con la ejecución en pausa en la función `getnext()`—que está en el corazón de los procesos de generación de tokens de TeX.

![Captura de pantalla que muestra TeX ejecutándose a través del entorno de desarrollo Eclipse](/files/450e09bec4a0ece36dda882f91a41f88a4cd8aea)

Avanzando paso a paso por el código fuente en C de TeX usando el entorno de desarrollo Eclipse de código abierto para C/C++.

## Conclusiones y agradecimiento

Escribir el primer artículo y reunir ideas para futuras entradas del blog en la serie ha llevado sin duda bastante tiempo. Estoy enormemente agradecido a John Hammersley y Mary Anne Baynes de Overleaf por su apoyo a esta idea de serie y por permitirme dedicar el tiempo necesario a una investigación de fondo adicional. Mi esperanza es que esta serie de artículos identifique y aborde con éxito temas de preocupación común y resulte valiosa para quienes los lean.


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
