> 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/19-how-tex-macros-actually-work-part-1.md).

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

[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: Objetivos de esta serie

Esta serie de artículos tiene un objetivo ambicioso: explicar *cómo* Las macros de TeX (como los comandos de LaTeX) en realidad funcionan —en el nivel más fundamental, dentro del propio software del motor TeX—. En lugar de depender *únicamente* de un conjunto de macros de ejemplo diseñadas para demostrar diversas funciones, casos límite y comportamientos de TeX, examinaremos el interior de TeX mismo para ver *cómo* y *por qué* por qué sus métodos de programación de macros funcionan como lo hacen.

Para lograr nuestro objetivo necesitamos empezar tratando temas que son bastante de bajo nivel y, al principio, estos pueden parecer algo alejados de la tarea de componer tus documentos. Con suerte, después de profundizar, saldrás con una base para construir una mejor comprensión que, al final, te ahorrará mucho tiempo y, tal vez, también reduzca el nivel de frustración.

### El lenguaje de programación de TeX: ¿conoces esa sensación?

No es excesivamente duro describir el lenguaje de programación de TeX como algo arcano, porque lo es —al menos según los estándares de la mayoría de los lenguajes de programación convencionales que se usan hoy en día—. A medida que empiezas tu recorrido para aprender más sobre TeX/LaTeX, particularmente si quieres escribir macros no triviales, te encuentras rápidamente con nociones como códigos de categoría, tokens/tokenización y la “expansión” de comandos o macros. Esa avalancha de conceptos probablemente resulte muy ajena, quizá dejándote desconcertado y, en ocasiones, posiblemente un poco frustrado, ya que tu camino hacia el éxito no siempre se ve ayudado por algunos de los mensajes de error casi impenetrables de TeX/LaTeX.

## Entonces, ¿por dónde empezamos? Con los códigos de categoría.

Los motores TeX pertenecen a una clase de software llamada [compiladores](https://en.wikipedia.org/wiki/Compiler): programas que toman un archivo escrito en un *lenguaje* fuente y lo *compilan* (transforman) en un archivo de salida escrito en un *lenguaje* de destino. Más específicamente, TeX es un *compilador de documentos*. Para los motores TeX (compiladores), el archivo de entrada está escrito en el lenguaje de composición tipográfica TeX y el objetivo es un archivo de salida escrito en otro “lenguaje” como [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) o PDF—aunque estamos siendo un poco laxos con nuestra noción de “lenguaje”.

Veamos más de cerca el “lenguaje” fuente, o de entrada, usado para escribir tu archivo TeX. Un `.tex` archivo es, en última instancia, una larga secuencia de caracteres (incluidos los caracteres de salto de línea): compuesta por texto destinado a la composición tipográfica intercalado con `\`, `}`, `$`, `[` y todo tipo de caracteres que pueden aparecer en un rango aparentemente casi infinito de combinaciones. Cualquiera que no use TeX/LaTeX podría mirar un típico `.tex` archivo y se le podría perdonar por percibirlo como una mezcolanza bastante confusa de caracteres con poca, si es que alguna, estructura visible del archivo. El paquete de macros de LaTeX ciertamente va en cierta medida a “imponer” alguna estructura básica en un archivo de entrada .tex. Sin embargo, entre los `\begin{document}` y `\end{document}` le corresponde al autor del documento decidir qué va allí. Si miras `.tex` archivos escritos usando el paquete original de macros Plain TeX de Knuth, verás que la estructura del documento está casi completamente ausente.

Así pues, en general, un archivo de entrada TeX puede parecer bastante desestructurado, una mezcla aparentemente arbitraria de contenido que debe componerse intercalado con instrucciones (comandos) que guían la composición de ese contenido. ¿Cómo es siquiera posible que TeX entienda un típico `.tex` archivo de entrada: para filtrar ese revoltijo entrante de caracteres y convertirlo en instrucciones accionables para el motor de composición y en contenido que debe componerse?

### Filtrando el revoltijo: saludemos a los códigos de categoría

Cualquier observador humano, que no sepa nada sobre TeX, podría mirar un `.tex` archivo y reconocer ciertos caracteres como `$` y saber que ese es el símbolo de una moneda, o ver un `&` e identificarlo como una y comercial. Ese observador infiere un *significado* para cada carácter que ve —un significado basado en el papel que ese carácter desempeña dentro de la comunicación humana. Además, puede ver caracteres como `a`, `e`, `o` y saber que se clasifican como vocales, mientras que otros como `b`, `c` o `d` se clasifican como consonantes. Como humanos, tenemos una especie de tabla de consulta incorporada (en nuestra memoria) mediante la cual asignamos un significado a cada carácter que vemos —un significado basado en el papel que ese carácter desempeña en los idiomas en los que somos capaces de comunicarnos.

Para procesar un `.tex` archivo, el software TeX también tiene que mirar cada carácter de tu entrada y también necesita asignar un *significado* a cada uno de los caracteres que “ve”. Sin embargo, TeX es solo una máquina basada en software que se ocupa de procesar texto —almacenado como una secuencia de enteros (códigos de caracteres) ubicados en un archivo de entrada. Como máquina, TeX debe ser programado con los datos relevantes que le indiquen cómo determinar el significado de un carácter que está “mirando” y, posteriormente, qué necesita hacer con él. ¿Cómo logra TeX esto?

La respuesta es uno de esos conceptos exclusivos de TeX: *los códigos de categoría,* de los cuales hay 16, que van de 0 a 15. En lo que respecta a TeX, cada carácter que espera ver dentro de un `.tex` archivo tiene un llamado *código de categoría* preasignado. Dentro del software TeX hay una especie de “tabla de búsqueda” que enumera el código de categoría *actualmente* asignado a cada carácter que TeX podría ver dentro de un archivo .tex de entrada. Debes pensar en los códigos de categoría de TeX como si asignaran un *significado* a cada carácter individual dentro del flujo de entrada que TeX tiene que examinar (escanear).

Para componer tu documento, un motor TeX tiene que leer (escanear) cada carácter, pero el interés inmediato de TeX no son los caracteres reales (códigos de caracteres): el *código de categoría* de un carácter es de mayor importancia al analizar la entrada. El *actual* código de categoría de un carácter determina el *significado actual* de ese carácter *en el momento en que TeX lo lee*: ese código de categoría determina cómo tratará/procesará TeX cada carácter —explicaremos por qué decimos “código de categoría actual” y “significado actual”. Es mediante los códigos de categoría que TeX puede filtrar el revoltijo entrante de caracteres para distinguir entre caracteres (contenido) destinados a la composición tipográfica y caracteres que forman instrucciones que deben procesarse —*comandos* que TeX necesita ejecutar.

La siguiente tabla enumera esos 16 códigos de categoría: lo que significa cada uno junto con ejemplos de caracteres típicamente asignados a cada categoría.

| **Código de categoría** | **Descripción**                                                             | **LATEX/TEX estándar**                                                    |
| ----------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| 0                       | Carácter de escape—indica a TEX que empiece a buscar un comando             | `\`                                                                       |
| 1                       | Iniciar un grupo                                                            | {                                                                         |
| 2                       | Finalizar un grupo                                                          | }                                                                         |
| 3                       | Cambio matemático—entra/sale del modo matemático                            | $                                                                         |
| 4                       | Tabulador de alineación                                                     | &                                                                         |
| 5                       | Fin de línea                                                                | Código ASCII 13 (`\r`)                                                    |
| 6                       | Parámetro de macro                                                          | #                                                                         |
| 7                       | Superíndice—para componer matemáticas: `$y=x^2$` $$y=x^2$$                  | ˆ                                                                         |
| 8                       | Subíndice—para componer matemáticas: `$y=x_2$` $$y=x\_2$$                   | \_                                                                        |
| 9                       | Carácter ignorado                                                           | ASCII 0 `<nulo>`                                                          |
| 10                      | Espaciador                                                                  | Códigos ASCII 32 (espacio) y 9 (carácter de tabulación)                   |
| 11                      | Letra                                                                       | A...Z, a...z, (y miles de caracteres Unicode)                             |
| 12                      | Otros                                                                       | 0...9 más ,.;?" y muchos otros                                            |
| 13                      | Carácter activo                                                             | Código de categoría especial para crear macros de un solo carácter como ˜ |
| 14                      | Carácter de comentario—ignora todo lo que sigue hasta el final de la línea  | %                                                                         |
| 15                      | Carácter inválido, no se permite que aparezca en el archivo de entrada .tex | Código ASCII 127 (`DEL`)                                                  |

El uso de códigos de categoría es el mecanismo esencial de TeX para filtrar su flujo entrante de caracteres, dando sentido a tu entrada para determinar:

* caracteres que componen el texto que se va a componer;
* contenido delimitador que debe componerse como matemáticas;
* secuencias de caracteres que son nombres de comandos que deben procesarse o ejecutarse;
* … y muchas otras operaciones de composición tipográfica.

Al principio, podrías pensar que el código de categoría de cada carácter (su significado) es una especie de asignación fija: inmutable y permanentemente incrustada en los fundamentos internos del software TeX, pero no es así. Como se señaló, TeX mantiene una tabla de búsqueda interna para almacenar detalles de cuál código de categoría está *actualmente* asignado a cada carácter —decimos muy deliberadamente *asignado actualmente* porque el código de categoría de cualquier carácter (aún no leído) puede cambiarse usando un comando primitivo (incorporado) llamado `\catcode`. Esto aporta una flexibilidad considerable porque, si lo deseas, puedes cambiar por completo la manera en que TeX tratará o interpretará el significado de cualquier carácter leído posteriormente desde la entrada, ofreciendo un enorme margen para aplicaciones sofisticadas de composición tipográfica.

Si te interesa principalmente usar LaTeX para “sacar el trabajo adelante”, es probable que no hayas encontrado directamente los códigos de categoría, salvo quizá a través de mensajes de error que hayas visto. Pero ten la seguridad de que los códigos de categoría son un componente central de las operaciones de un motor TeX: permiten que LaTeX (y los paquetes de LaTeX) hagan realmente el trabajo de componer tu documento.

Cuando tu motor TeX se inicia (“[arranca](https://en.wikipedia.org/wiki/Bootstrapping)”) utilizará un conjunto de asignaciones predeterminadas de caracteres a códigos de categoría, pero, mediante el `\catcode` comando, esos valores predeterminados pueden ser modificados por el código central de LaTeX (macros) y/o por los paquetes de LaTeX que hayas cargado —o incluso por tu propio código TeX o macros. Sin embargo, con el tiempo y por tradición/uso, ciertos caracteres asignados a códigos de categoría particulares han sido aceptados como “estándares” y adherirse a esos estándares es sin duda deseable si quieres que tus documentos sean portables y se compartan fácilmente con colegas u otros usuarios. Por ejemplo, el `\` carácter se le asigna el código de categoría 0 para indicar el inicio de un comando de TeX/LaTeX—véase la [tabla anterior](#tbl-0).

### Lectura (escaneo) de la entrada

Cuando TeX lee (escanea) el siguiente carácter de tu archivo de entrada, lo primero que hace es mirar su código de categoría, así que echemos un vistazo más de cerca a lo que sucede cuando TeX lee una línea típica de entrada.

Supongamos que tenemos un archivo .tex que contiene el texto `Hello World \jobname` en algún lugar dentro de un párrafo. Si miramos dentro del `.tex` archivo usando un [editor hexadecimal](https://en.wikipedia.org/wiki/Hex_editor), vemos que la secuencia de caracteres `Hello World \jobname` en nuestro `.tex` archivo es solo una serie de enteros, o *códigos de caracteres*, mostrados en la captura de pantalla inferior como la secuencia hexadecimal:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Códigos de caracteres hexadecimales en un archivo TeX](/files/4b3294269f660fcc025591a1fad27ef8f21cf8f9)

Si convertimos de hexadecimal (base 16) a decimal (base 10), la secuencia de códigos de caracteres es:

![Códigos de caracteres decimales en un archivo TeX](/files/fb53632d00b526695685504fcb7fb382e5b6b170)

También sabemos que, para TeX, cada carácter tiene un código de categoría correspondiente; así que, con base en la [tabla anterior](#tbl-0) sabemos que probablemente también se están usando las siguientes asignaciones predeterminadas de códigos de categoría:

![Códigos de categoría de TeX](/files/1303ba04bb84cbe3353e3f487c22b685581e1a5b)

Así, para TeX, cada carácter del archivo de entrada está representado por *dos* valores numéricos: su código de carácter y su código de categoría:

![Códigos de caracteres y códigos de categoría de TeX correspondientes](/files/9bb73a4f7dc63756cf6556e5c27861097cfc7d2d)

En este punto solo estamos considerando la primera etapa en el procesamiento de tu archivo por parte de TeX: el escaneo de los caracteres individuales. Entonces, ¿qué hace exactamente TeX con estos pares de códigos de caracteres y códigos de categoría? Una vez que TeX ha escaneado un carácter individual y ha buscado su correspondiente código de categoría, ¿cómo usa exactamente esta información para “filtrar” los caracteres entrantes?

## Parte 2

En la parte 2 examinamos más de cerca cómo TeX lee tu entrada: fingiendo ser los “ojos” de TeX mientras mira tu entrada, carácter por carácter.

[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/19-how-tex-macros-actually-work-part-1.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.
