> 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/mas-temas/20-how-tex-macros-actually-work-part-2.md).

# Cómo funcionan realmente las macros de TeX: Parte 2

[Parte 1](/latex/es/mas-temas/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/es/mas-temas/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/es/mas-temas/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/es/mas-temas/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/es/mas-temas/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/es/mas-temas/24-how-tex-macros-actually-work-part-6.md)

## Introducción: Una historia en imágenes

Como se señaló en la Parte 1, TeX tiene que «leer» cada carácter dentro de tu `.tex` archivo y a ese proceso de lectura se le denomina más correctamente *escaneo*. Tradicionalmente, el procesamiento de entrada de TeX (escaneo) se compara con que TeX tenga «ojos» con los que observar la entrada, así que adoptaremos esa analogía probada en las imágenes de abajo.

### Gráfico 1: Los ojos están listos

Supondremos que TeX ha obtenido alguna entrada de un `.tex` archivo y está a punto de procesar nuestra cadena de caracteres `Hello World \jobname` contenida dentro de un párrafo de texto. Comprobará cada carácter por turno y examinará su código de categoría.

![Los ojos de TeX listos para escanear una línea de texto](/files/9d9a7dfb56c7598bdf2b7cb4e6c86437e4eae562)

### Gráfico 2: Procesamiento de códigos de categoría

En el siguiente gráfico vemos, a grandes rasgos (con más detalles abajo), cómo reacciona TeX ante varios códigos de categoría distintos. Observa que hay 16 códigos de categoría en total, pero, para simplificar, estamos mostrando el uso de solo tres: 11, 10 y 0. Otros códigos de carácter cobran importancia durante los procesos de composición tipográfica de TeX, como la construcción de tablas, la composición de matemáticas y el reconocimiento de parámetros de macros.

![TeX reaccionando a varios códigos de categoría distintos](/files/da62c234ff5a7f0153b4e11c574e87a3fafbae12)

#### Notas para el Gráfico 2

Aquí estamos considerando a TeX mientras lee (escanea) caracteres que forman parte de un párrafo de texto. TeX inspecciona cada carácter, comprueba su código de categoría y toma la acción adecuada en función del código de categoría y del «modo» de TeX (un estado basado en lo que está haciendo en ese momento).

* **(ojos verdes)** TeX verá que cada uno de esos caracteres tiene el código de categoría 11 («letra») y enviará esos caracteres para su composición como parte del párrafo que está construyendo. Sin embargo, TeX no transmite (usa) solo el código de carácter, sino que utiliza el par de números (código de carácter, código de categoría) para calcular un valor entero compuesto llamado un *token de carácter* (véase más abajo). Una vez producido ese token de carácter, entra en los procesos/algoritmos internos de composición tipográfica de TeX.
* **(ojos azules)** TeX ve un carácter de espacio (ASCII 32) con el código de categoría 10 («espaciadores») —obsérvese que, como se comentó, es perfectamente posible que el código de categoría de un espacio (ASCII 32), o de cualquier carácter, haya sido cambiado a otro valor antes de que TeX lo lea.

La forma en que TeX procesa realmente los caracteres con código de categoría 10 («espaciadores») sí varía según cuándo/dónde TeX lo vea —el «modo» actual de TeX. Por ejemplo, hay ocasiones en que TeX simplemente los omitirá. Aquí, TeX sabrá que ha detectado un carácter con código de categoría 10 (que resulta ser un espacio, ASCII 32) mientras procesa texto de párrafo, así que finalmente lo convertirá en lo que se llama pegamento interpalabra: una especie de espacio flexible que puede estirarse o encogerse.

* **(ojos rojos)** Aquí, TeX ha observado un carácter que tiene un código de categoría muy importante: 0 (carácter de escape).

Un carácter de escape—*cualquier* carácter con código de categoría 0—indica a TeX que cambie a un modo de lectura especial y escanee cuidadosamente (lea) los caracteres subsiguientes porque identifican el nombre de un *comando*, no texto que vaya a componerse. En la literatura de TeX verás que el término «comando» también se denomina *secuencia de control*. Después de ver un carácter de escape, TeX comprueba el código de categoría del carácter que sigue *inmediatamente después de él*; esto se debe a que TeX reconoce dos tipos de comandos:

* comandos de varias letras llamados *palabras de control*: el carácter que sigue inmediatamente después del carácter de escape tiene código de categoría 11. Todos los caracteres posteriores que tienen código de categoría 11 se consideran parte del nombre de un comando. TeX dejará de buscar caracteres que formen parte del nombre de un comando cuando detecte cualquier carácter que *no* no tenga código de categoría 11, como un carácter de espacio con código de categoría 10.
* comandos de una sola letra llamados *símbolos de control*: el carácter que sigue inmediatamente después del carácter de escape *no* no tenga código de categoría 11.

Puedes pensar en un carácter de escape como algo que hace que TeX «escape» de su comportamiento habitual de escaneo y adopte un enfoque distinto para los siguientes pocos caracteres —esto lo indica el recuadro rojo punteado que muestra que TeX **Empieza a escanear en busca de un comando**.

### Gráfico 3: Procesamiento del código de categoría 11 («letras»)

En la Parte 1 de esta serie señalamos que cada carácter que TeX lee de su entrada se describe mediante dos enteros:

* código de carácter: un entero que define la reprepresentación numérica de un carácter;
* código de categoría: un valor de 0 a 15 que TeX asigna a cada carácter que podría aparecer en su entrada.

TeX utiliza estas dos piezas de información en la siguiente etapa de su procesamiento: la creación de tokens de carácter.

El Gráfico 3 amplía el Gráfico 2 para mostrar qué hace TeX con estos caracteres de entrada que tienen código de categoría 11 (letra): crea *tokens de caracteres*—valores enteros que TeX calcula utilizando una combinación del código de categoría y del código de carácter de ese carácter.

**Nota**: En este ejemplo solo estamos hablando de caracteres con código de categoría 11, pero debes tener en cuenta que TeX también crea valores de token para caracteres de entrada que tienen otros códigos de categoría, excepto el código de categoría 0, que nunca se convierte en un token: el carácter de escape simplemente actúa como un «interruptor» para activar un procesamiento especial.

![TeX procesando caracteres con código de categoría 11](/files/e210011f370abc198bf3ca59c6a06985fcda7794)

El Gráfico 5, abajo, mostrará qué hace TeX cuando ve un carácter con código de categoría 0 (un carácter de escape).

#### Notas para el Gráfico 3: Procesamiento del código de categoría 11 («letra»)

Aquí nos centraremos en la **verde** actividad: qué sucede cuando TeX ve caracteres que tienen código de categoría 11 («letra»). Después de que TeX ha leído un carácter y ha determinado su código de categoría (aquí es 11), lo que TeX hace a continuación es *combinar* este par de números en un solo entero llamado token de carácter: estos tokens (enteros) se envían a la siguiente etapa de los algoritmos/procesamiento internos de composición tipográfica de TeX. Como se señaló, TeX también creará tokens de carácter para caracteres con otros códigos de categoría (es decir, no 11); aquí solo estamos usando el código de categoría 11 como ejemplo.

Cada token de carácter (un entero) vincula de forma permanente un carácter de entrada con el código de categoría asignado a ese carácter **en el momento en que fue escaneado (leído) por TeX**: ese hecho es de crucial importancia para comprender el comportamiento de las macros de TeX/LaTeX. Por supuesto, durante el procesamiento posterior, TeX a veces necesitará separar un token de carácter para determinar qué par (código de carácter, código de categoría) se utilizó para construir ese token. Sin embargo, una vez que un carácter es leído por el proceso de entrada (escaneo) de TeX, el valor del token de carácter calculado por TeX hace que ese carácter quede *permanentemente* acoplado al código de categoría asignado a él *en el momento en que fue leído*.

**Cálculo de tokens de carácter**

Los motores de TeX utilizan una fórmula simple para calcular un token de carácter, $$T$$, a partir de un carácter con código de categoría $$C$$ y código de carácter $$A$$:

$$T = \text{constant} \times C + A$$

Los motores de 8 bits, como pdfTeX, usan:

$$T = 256\times C + A$$

Los motores compatibles con Unicode, como XeTeX o LuaTeX, tienen que usar una fórmula diferente porque, en Unicode, los códigos de carácter pueden ser mucho mayores que el máximo de 255 del antiguo mundo de codificación ASCII de 8 bits. XeTeX, por ejemplo, usa:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Una vez más, conviene señalar que los caracteres con código de categoría 0 no se convierten en tokens de carácter: el código de categoría 0 ocupa un lugar muy especial en el filtrado de entrada de TeX y se usa únicamente como un «interruptor» para hacer que TeX entre en un modo especial de escaneo de los siguientes pocos caracteres. El Gráfico 5 trata este tema.

### Gráfico 4: Procesamiento del código de categoría 10 («espaciador»)

El manejo que TeX hace de los caracteres con código de categoría 10 («espaciador») depende de en qué esté trabajando TeX en ese momento cuando detecta un carácter con código de categoría 10 dentro de la entrada. En nuestro ejemplo, TeX está realizando el procesamiento rutinario de un párrafo y el carácter de espacio, con código de categoría 10, se convertirá en pegamento interpalabra.

![TeX procesando caracteres con código de categoría 10](/files/7431336677d3858bd75ed4c7baea58cc56fbfabc)

El manejo que TeX hace de los espacios puede parecer bastante idiosincrático, pero puede encontrarse una buena introducción en los capítulos 1 y 2 de [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) de Victor Eijkhout —puedes [descargar una copia gratuita en PDF](https://bitbucket.org/VictorEijkhout/tex-by-topic) desde su sitio web.

Por ejemplo, cuando TeX ve un carácter con código de categoría 10, hay ocasiones en que TeX:

* omite (ignora) todos ellos —p. ej., cuando TeX está en modo vertical;
* convierte varios espaciadores en un solo espaciador —omitiendo espacios adicionales, como cuando procesa un párrafo;
* los absorbe —por ejemplo, absorbiendo un solo espacio después del nombre de un comando;

Ten en cuenta también que hay ocasiones en que TeX también *genera* espacios —convirtiendo los caracteres de fin de línea en un espacio. El comportamiento/tratamiento de los caracteres de espacio (cualquier carácter con código de categoría 10) es una de las «idiosincrasias» de TeX: hace falta tiempo/práctica para familiarizarse (sentirse cómodo) con este aspecto de TeX.

### Gráfico 5a: Procesamiento del código de categoría 0 (un «carácter de escape»)

En este gráfico, TeX ha procesado todos los caracteres hasta el `\` carácter, que tiene un código de categoría 0: el «carácter de escape» —usaremos otra secuencia de gráficos para mostrar cómo TeX procesa un carácter de escape e identifica el nombre de un comando.

![TeX procesando caracteres con código de categoría 0](/files/d6e80fc453aa730fc1e0ae655644768ea4cbf873)

### Gráfico 5b: Buscando un nombre de comando

En este gráfico miramos dentro de la sección del recuadro rojo punteado (**Empieza a escanear en busca de un comando**) para ver qué hace TeX después de haber visto un carácter de escape.

![TeX buscando el nombre de un comando](/files/9fdf507f520694ec3658d312fa0b9854805e2f64)

**Notas para el Gráfico 5b**

* Una vez reconocido, el carácter de escape ha cumplido su función: actuó como interruptor y no participa en ningún procesamiento posterior; concretamente, no es **no** convertido en un token de carácter.
* Por comodidad, repetiremos algunos detalles mencionados anteriormente. Después de ver un carácter de escape, TeX comprueba el código de categoría del carácter que sigue *inmediatamente después de él*; esto se debe a que TeX reconoce dos tipos de comandos:
* * comandos de varias letras llamados *palabras de control*: el carácter que sigue inmediatamente después del carácter de escape tiene código de categoría 11. Todos los caracteres posteriores que tienen código de categoría 11 se consideran que forman parte del nombre de un comando (*palabra de control*). TeX dejará de buscar caracteres que formen parte del nombre de un comando cuando detecte cualquier carácter que *no* no tenga código de categoría 11, como un carácter de espacio con código de categoría 10.
  * comandos de una sola letra llamados *símbolos de control*: el carácter que sigue inmediatamente después del carácter de escape *no* no tenga código de categoría 11.
* En nuestro ejemplo, el primer carácter después del `\` es una `j` (código de categoría 11), lo que indica a TeX que busque un comando que sea (potencialmente) una secuencia de varios caracteres con código de categoría 11.
* TeX sigue comprobando si hay más caracteres con código de categoría 11. En cuanto detecta un carácter con cualquier otro código de categoría, como un espacio con código de categoría 10, TeX sabe que ha llegado al final del nombre del comando. Solo para enfatizarlo: aquí fue un carácter de espacio (código de categoría 10) el que «terminó» el comando, pero podría haber sido cualquier carácter que **no** no tenga código de categoría 11.

## Parte 3

En la Parte 3 continuaremos a partir del Gráfico 5b para completar esta parte de la historia —cómo TeX identifica un comando— y pasar a lo que hace después. También echaremos un vistazo más profundo a algunos aspectos internos del procesamiento de TeX —partes de los cuales pueden saltarse en la primera lectura, a menos que realmente disfrutes de los detalles.

[Parte 1](/latex/es/mas-temas/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/es/mas-temas/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/es/mas-temas/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/es/mas-temas/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/es/mas-temas/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/es/mas-temas/24-how-tex-macros-actually-work-part-6.md)


---

# 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/mas-temas/20-how-tex-macros-actually-work-part-2.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.
