> 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/14-how-do-tex-engines-typeset-tables.md).

# Cómo maquetan tablas los motores TeX

## ¿Cómo componen tablas los motores TeX?

## Introducción: ¿Qué cubre esta serie?

Producir tablas estéticamente agradables puede ser una tarea que consume mucho tiempo, ya sea que estés usando una herramienta de diseño visual, LaTeX o un lenguaje de marcado como HTML o Markdown. Para los usuarios de LaTeX en particular, la composición tipográfica de tablas ocupa un lugar destacado en la lista de “puntos débiles” de muchas personas, como quizá lo evidencie que “tables” sea uno de los temas más [de los temas más etiquetados en tex.stackexchange](https://tex.stackexchange.com/tags).

Además de las respuestas y ejemplos en tex.stackexchange, incluso una revisión superficial del apoyo disponible sobre la composición tipográfica de tablas con LaTeX revela una serie de recursos informativos relacionados con tablas:

* de Overleaf [páginas de ayuda](https://www.overleaf.com/learn/latex/tables) y otros sitios como [learnlatex.org](https://www.learnlatex.org/en/lesson-08)
* CTAN, la red TeX integral, enumera más de [70 paquetes de TeX/LaTeX](https://ctan.org/topic/table) relacionados con la creación de tablas
* un libro entero [sobre la composición tipográfica de tablas usando LaTeX](https://www.amazon.co.uk/Typesetting-Tables-LaTeX-Herbert-Voss/dp/1906860254)
* un excelente [generador de tablas de LaTeX en línea](https://www.tablesgenerator.com/latex_tables)

Una búsqueda simple en Google de [tablas de LaTeX](https://www.google.com/search?q=latex+tables) arroja una enorme cantidad de resultados, enumerando muchos sitios que ofrecen ayuda, consejos, ejemplos y explicaciones.

### TeX, no LaTeX

Dada la abundancia de literatura disponible sobre la composición tipográfica de tablas usando LaTeX, ¿hay algo más que escribir sobre ellas —aún más ejemplos de tablas y enumeración/demostración de comandos de paquetes? ¿Hay alguna manera de abordar el tema de la composición tipográfica de tablas que destaque o se centre en los principios y conceptos fundamentales de la composición de tablas? La hay, pero exige pelar la cebolla de LaTeX…

Decidimos producir una serie de artículos que busca proporcionar a los lectores información de contexto y explicaciones de la *mecánica* de la composición tipográfica de tablas basada en TeX. En lugar de centrarnos en la composición de tablas usando macros/paquetes específicos de LaTeX, exploraremos el *comportamiento subyacente* de los motores TeX: explorando la maquinaria tipográfica de bajo nivel que proporciona los cimientos sobre los que se construyen los comandos macro de LaTeX. El objetivo final es desentrañar y explicar los métodos y algoritmos fundamentales de la composición tipográfica de tablas basada en TeX, con la esperanza de ayudar a los lectores/usuarios a entender mejor por qué las tablas se comportan como lo hacen. Una consecuencia inevitable de este enfoque, al ir retirando las capas protectoras del aislamiento de las macros de LaTeX, es la exposición a detalles desordenados de bajo nivel de los que los usuarios suelen estar (y felizmente) resguardados mediante capas de código macro de LaTeX.

Ha llevado mucho tiempo investigar, escribir e ilustrar estos artículos, así que esperamos que constituyan una adición valiosa a la literatura, proporcionando material que informe a los lectores y les ayude a comprender mejor esta compleja área de la composición tipográfica en TeX. Debemos subrayar que esta serie de artículos *contiene* se desviará hacia la discusión de *la estética* del diseño de tablas; ese es un tema repleto de preferencias subjetivas y cuyas discusiones deben desarrollarse en otro lugar…

### Explorando la mecánica de las tablas de TeX: ¿cómo puedes hacerlo?

Para explorar, y luego escribir sobre, los mecanismos y procesos de nivel inferior que tienen lugar dentro de los motores TeX, como la composición tipográfica de tablas, Overleaf compiló versiones “de depuración” de prueba del motor TeX de Knuth usando el [proceso Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html).

Tradicionalmente, compilar TeX implica un proceso llamado Web2C, usado dentro de TeX Live, que genera código C convirtiendo el código fuente original en Pascal de TeX a su equivalente en C. Ese proceso genera código C que nunca estuvo destinado a ser leído por humanos, solo por compiladores C. El código C generado mecánicamente es *excepcionalmente* difícil de leer o modificar con fines de experimentación.

En cambio, Web2W produce código fuente C (disponible [aquí](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/ctex.c)) que es *órdenes de magnitud* más legible que el código producido por Web2C. En consecuencia, el código fuente C de Web2W es mucho más adecuado para modificarlo con fines de aprendizaje/experimentación.

Web2W produce una versión de TeX (“CTeX”) que es *extremadamente* cercana al programa original de Knuth: “CTeX” no incluye los muchos cambios y mejoras introducidos por el proceso Web2C, como SyncTeX, el procesamiento de la línea de comandos y la búsqueda de archivos mediante Kpathsea. Aunque se renuncie a esas valiosas mejoras, el código C resultante (de Web2W) es relativamente fácil de recorrer usando el código fuente de TeX publicado por Knuth, aunque TeX fue escrito en Pascal.

* **Una nota sobre los nombres:** Estríctamente hablando, el nombre “TeX” solo debe referirse al software original escrito y publicado por Donald Knuth. Cualquier modificación de su software debe usar un nombre diferente para el software de composición tipográfica basado en TeX resultante. Aquí, usamos el proceso Web2W para construir un motor que sigue siendo, en efecto, el software original de Knuth. Sin embargo, para evitar dudas usaremos el término “CTeX” para designar la versión específica construida usando Web2W, pero también usaremos “TeX” para referirnos ya sea al motor original de Knuth o como término general para el lenguaje de composición tipográfica basado en los principios del TeX de Knuth. Esperamos que los lectores perdonen cualquier desliz ocasional en la aplicación/uso riguroso de la terminología estrictamente correcta: esperamos que el significado/intención se transmita por el contexto.

La versión de depuración de CTeX se ejecutó usando el [IDE Eclipse](https://www.eclipse.org/downloads/packages/), lo que hizo posible observar en tiempo real el procesamiento del código C que implementa los comandos primitivos (integrados) de TeX y los algoritmos diseñados por Knuth para respaldar la composición tipográfica de tablas.

El siguiente video breve (de aprox. 90 segundos) demuestra el motor CTeX ejecutándose dentro del [IDE Eclipse](https://www.eclipse.org/downloads/packages/):

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/7drdFwYR6h5xD88XnurDIH/36511f504755ab274f4da2e3f3fc1ce5/TeXtables.mp4>" %}

Además de CTeX, también compilamos e-TeX para acceder a algunos primitivos adicionales no presentes en el software original de Knuth. Aunque CTeX y e-TeX son, a estas alturas, motores antiguos basados en TeX, siguen siendo adecuados como base para explorar la mecánica de la composición tipográfica de tablas porque esos principios subyacentes siguen aplicándose a todos los motores de composición tipográfica basados en TeX.

### ¿Por qué usar un motor TeX más antiguo para explorar tablas?

En primer lugar, el libro impreso, [TeX:The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373), que enumera y explica el código fuente de TeX, sigue siendo una guía sumamente conveniente para las turbias aguas del funcionamiento interno de TeX, a pesar de haber sido publicado hace más de 30 años (1986). Por supuesto, puedes componer tú mismo la documentación del código fuente de TeX; por ejemplo, consulta el proyecto de Overleaf [Componga la documentación del código fuente de TeX, e-TeX o pdfTeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv). Desde la publicación de TeX:The Program en 1986, han evolucionado nuevos motores TeX, incluidos pdfTeX, XeTeX y LuaTeX, todos los cuales introducen funciones y comandos que no están documentados en TeX:The Program simplemente porque no estaban presentes en el software original de Knuth.

Para muchos procesos centrales, como la composición tipográfica de tablas de TeX, el código documentado en TeX:The Program sigue siendo relevante como base de estudio, aunque el código fuente de TeX esté escrito en Pascal. Además, el TeX de Knuth es comparativamente fácil y rápido de compilar, especialmente mediante el sumamente útil [Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html) proceso desarrollado por Martin Ruckert. La facilidad/velocidad de compilación hace mucho más conveniente modificar TeX de maneras sencillas, como la creación de gráficos SVG utilizados más adelante en esta serie de artículos.

### Entender la diferencia entre TeX y LaTeX

Muchos lectores ya sabrán que LaTeX en realidad no es un *ejecutable* programa de composición tipográfica, sino una gran colección de comandos (*macros*) que, en última instancia, están escritos en un lenguaje de composición/programación de nivel inferior llamado TeX. Tu código LaTeX produce salida tipográfica solo después de haber sido procesado por un programa ejecutable llamado *motor TeX*—el software que se sitúa entre tu código LaTeX (documento) y el PDF compuesto. Hoy en día, los usuarios pueden elegir entre varios motores TeX para componer su código LaTeX, incluidos pdfTeX, XeTeX y variantes de LuaTeX.

Quienes son nuevos en el ecosistema TeX/LaTeX suelen, y con razón, sentirse abrumados por la plétora de nombres de sonido críptico usados para las herramientas que encuentran: TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX y LuaLaTeX. Si sientes lo mismo, la ayuda está al alcance en el artículo de Overleaf [¿Qué hay en un nombre? Una guía de los muchos sabores de TeX](/latex/es/articulos-en-profundidad/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) que explica el origen y significado de todos esos términos.

#### Dialectos y primitivas de TeX

Todo motor TeX tiene un conjunto de comandos integrados llamados *primitivas* que, en conjunto, constituyen el “dialecto” de ese motor del lenguaje de composición tipográfica TeX, reflejando las capacidades incorporadas en cada motor. Aquí, el término “primitiva” utilizado para describir los comandos integrados de los motores TeX no *contiene* quiere decir que esos comandos sean básicos o simplistas, sino que son fundamentales e indivisibles: no están construidos a partir de otros comandos (a diferencia de las macros). Todos los motores TeX comparten un gran conjunto central de primitivas, pero algunos contienen primitivas específicas de ese motor, lo que da lugar a la noción de un “dialecto” de TeX.

Independientemente del motor TeX que se use para componer tu documento LaTeX, su tarea es procesar (“ejecutar”) la colección de comandos LaTeX (es decir, macros) utilizados para escribir y construir tu documento. En efecto, el motor TeX “convierte” tu código LaTeX (macros) *de vuelta en* sus comandos primitivos constituyentes del motor TeX, que el motor puede ejecutar para realizar la composición tipográfica real. No necesitas *tengas que* usar comandos LaTeX para componer documentos con motores TeX — tú *podrías* elegir construir tus documentos enteramente con primitivas de TeX, es decir, directamente en el *lenguaje de programación TeX* integrado en los motores TeX. Sin embargo, según los estándares actuales, el lenguaje TeX es bastante arcano y, en general, se considera difícil de programar; además, puede requerir un gran número de primitivas integradas para lograr tu objetivo tipográfico, lo que convierte la tarea en una programación propensa a errores y potencialmente repetitiva.

Para evitar tener que escribir directamente en el lenguaje TeX, o volver a teclear constantemente la misma serie de comandos, los motores TeX te permiten crear “atajos” llamados *macros*. Al crear macros defines tus propios comandos que empaquetan secuencias potencialmente largas y complejas de primitivas del lenguaje TeX (u otras macros) en un solo comando de “nivel superior”. Los programadores de TeX pueden escribir macros muy sofisticadas que encapsulan una gran cantidad de funcionalidad dentro de un solo comando, como los comandos proporcionados por LaTeX. Al usar paquetes de macros, como LaTeX (o [ConTeXt](https://wiki.contextgarden.net/Main_Page)), los autores de documentos quedan (en su mayor parte) aislados de muchos detalles tediosos, lo que les permite centrarse en escribir y componer tipográficamente en lugar de lidiar constantemente con las complejidades y matices del lenguaje TeX.

## Al principio...

Además de diseñar algoritmos para la composición tipográfica de matemáticas y un sofisticado particionado de líneas, Knuth se enfrentó al desafío de programar su software TeX para componer tablas. Está claro que cualquier algoritmo(s) de construcción de tablas no debe ser excesivamente restrictivo, porque eso frustraría a los usuarios que necesitan la libertad de crear un rango casi infinito de diseños de tablas. Además, las celdas de las tablas pueden contener una amplia variedad de contenido, incluidas matemáticas, gráficos y fragmentos de texto divididos en líneas bien compuestas; de hecho, cualquier cosa que TeX sea capaz de componer tipográficamente. Proporcionar esta flexibilidad requiere que los algoritmos de construcción de tablas de TeX trabajen de la mano con otras partes de la maquinaria tipográfica de TeX.

Sin embargo, los motores TeX cobran un precio por la flexibilidad que proporcionan sus capacidades de construcción de tablas: numerosas sutilezas y matices en el comportamiento de bajo nivel de los comandos de composición de tablas integrados (primitivos), de los cuales hay 9:

* **`\halign`**, **`\valign`**: comandos centrales de construcción de tablas
* **`\tabskip`**: pegamento colocado entre las columnas de \halign o las filas de \valign
* **`\cr`**: terminador obligatorio de “retorno de carro” para todas las líneas de una tabla
* **`\noalign`**: insertar material entre las filas de \halign o las columnas de \valign
* **`\everycr`**: comandos (registro de tokens) que se leen después de detectar \cr
* **`\span`**: un comando de doble función: \span crea celdas que abarcan columnas o filas, o expande comandos en el preámbulo de la tabla (lo consideraremos en detalle)
* **`\omit`**: omitir las plantillas para una celda concreta
* **`\crcr`**: se usa en macros para evitar errores si los usuarios olvidan un \cr obligatorio

Nos encontraremos con estos comandos en nuestro recorrido por la construcción de tablas.

### Lejanos ecos de los desafíos

Enterrado en [el código fuente de TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) hay una introducción algo intimidante al tema de implementar los comandos de bajo nivel \halign y \valign diseñados para componer tablas:

> “Es algo así como un milagro cuando \halign y \valign funcionan, porque atraviesan tantas de las estructuras de control de TeX. Por lo tanto, la página actual probablemente no sea el mejor lugar para que un principiante empiece a leer este programa; es mejor dominar todo lo demás primero.”

Knuth continúa diciendo

> “Obsérvese que, a medida que se procesa \halign, cedemos sin temor el control al resto de TeX. En momentos críticos, se llama a una rutina de alineación para intervenir y hacer alguna pequeña acción, pero la mayor parte del tiempo estas rutinas simplemente permanecen al acecho en segundo plano. Es algo parecido a la sugerencia posthipnótica.”

A partir de estos comentarios parece razonable concluir que, incluso para Knuth, implementar la composición tipográfica de tablas de TeX fue “algo así como un desafío”: proporcionar control y flexibilidad al usuario, pero al mismo tiempo garantizar que los algoritmos automatizados de construcción de tablas de TeX estuvieran bien coordinados con los procesos centrales de composición tipográfica de TeX.

El autor da fe con gusto de la complejidad del código y los algoritmos detrás de las capacidades de composición de tablas de TeX, pero también de la admiración por la enorme cantidad de capacidad contenida en una cantidad relativamente pequeña de código Pascal (o C), aunque denso.


---

# 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/14-how-do-tex-engines-typeset-tables.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.
