Motor de maquetación de código abierto · v1.70.5

El tipógrafo programable para la web

Postext parte de markdown semántico y aplica reglas editoriales con siglos de historia (justificación Knuth-Plass, columnas equilibradas, flotantes que saben cuál es su sitio) para producir páginas de calidad editorial en HTML, canvas o PDF listo para imprenta.

Cada página se calcula en tu navegador

Postext

En pocas palabras

Postext es un programa libre y gratuito que compone las páginas de libros, revistas e informes. Escribes el texto con unas pocas marcas sencillas y Postext lo convierte en páginas terminadas, como las de un libro impreso. Sigue reglas que los impresores usan desde hace siglos, para que el texto se lea bien. Las páginas pueden ir a una web, a una aplicación o a un PDF listo para imprenta. Está pensado para quien escribe, edita, diseña o programa.

Transcripción

Todo lo que dice el narrador, con una descripción de lo que aparece en pantalla.

  1. 0:00

    En pantallaSobre fondo oscuro, «MAGUNCIA · 1455» encima de un filete dorado. Detrás del titular «Durante cinco siglos, la imprenta aprendió a componer la página.», el año avanza de 1455 a 2026 en grandes cifras perfiladas y alrededor caen términos del oficio: Justificación, Kerning, Viudas, huérfanas, Columnas equilibradas, Interlineado, Retícula base, guio·na·do, Medida, Flotantes, Cabeceras, Ríos. La cámara se mete en el punto final, que llena la pantalla de dorado.

    NarraciónDurante cinco siglos, la imprenta aprendió a componer la página.

  2. 0:06

    En pantallaTitular: «La web aprendió a maquetar interfaces. Nunca aprendió a componer una página.» Una ventana de navegador en example.com/longform/article muestra un artículo justificado a tres columnas, «Por qué falla la web»; etiquetas rojas señalan ríos de blanco, una huérfana, una viuda, una imagen que cae sobre el texto y una última columna desequilibrada. Al lado, una pastilla de código dice «column-count: 3;», seguida de «…y poco más.» y de una lista tachada con los mismos cinco defectos. La ventana se distorsiona y se desploma.

    NarraciónLa web aprendió a maquetar interfaces. Nunca páginas. Por eso el texto largo sigue rompiéndose: ríos, viudas, huérfanas, colisiones.

  3. 0:19

    En pantallaTras un destello blanco y un barrido de franjas azul, dorada y roja, el logotipo de Postext sube a su sitio con el lema «El tipógrafo programable para la web». Debajo: CÓDIGO ABIERTO · LICENCIA MIT · v1.7.0 · FUNCIONA EN TU NAVEGADOR.

    NarraciónEsto es Postext: el tipógrafo programable para la web.

  4. 0:25

    En pantallaSección 01 de 07, «Entra el contenido»: «Markdown dice qué es cada cosa.» Un archivo Markdown, 03-por-que-postext.md, se escribe solo: una directiva de parte, el título «Por qué Postext» con entradilla, un párrafo que cita la figura fig-flow con :ref, una línea ::resource y un bloque :::callout. Al lado, config.ts llama a buildDocument con maquetación a dos columnas, texto justificado y guionado para «es», bajo la frase «La configuración decide cómo se ve. El texto no contiene ni una decisión de maquetación.»

    NarraciónEscribes Markdown semántico, que dice qué es cada cosa. La configuración decide cómo se ve.

  5. 0:33

    En pantallaSección 02, «Pretext mide»: «Medido sin tocar el DOM.» Un título, un párrafo y un recuadro se escanean uno tras otro y unas cotas dan su altura en puntos; un panel de código muestra prepare(text, '25px Lora') y layout(prepared, width, 38), que devuelve una altura y un número de líneas. Dos barras compiten con 10.000 párrafos: «Reflow del navegador · DOM» apenas avanza y «Pretext · canvas + aritmética» se llena al instante, y un contador sube hasta 600× sobre «más rápido que el DOM midiendo texto, para que un libro entero se recomponga al escribir» e «Impulsado por @chenglou/pretext».

    NarraciónCada párrafo se mide sin tocar el DOM, hasta seiscientas veces más rápido, gracias a Pretext, la librería que lo ha hecho posible.

  6. 0:43

    En pantallaSección 03, «Postext decide»: «Cada línea colocada antes de pintar un píxel.» Un anillo de siete segmentos se ilumina por turnos, Estructura, Medición, Colocación, Flotantes, Refinado, Equilibrio y Ritmo, cada uno con una línea de explicación, mientras al lado se monta una página a dos columnas de la guía de Postext: los bloques etiquetados vuelan a sus columnas, una figura se desplaza a su sitio con la nota «:ref{id="fig-flow"} → pie de columna», cae la banda de apertura, aparecen las líneas, las columnas se nivelan y baja la retícula base. El anillo recorre las iteraciones 1 a 3 y muestra «Estable en 3 iteraciones» con una marca; un recuadro da la caja y la línea base de una línea.

    NarraciónDespués, Postext decide. Siete pasadas colocan cada línea, llevan cada figura a su sitio y equilibran las columnas, hasta que nada se mueve.

  7. 0:55

    En pantallaSección 04, «El documento virtual»: «Cambia una palabra. Solo se recompone lo que cambia.», con la nota «Como el virtual DOM de React, pero para páginas: el VDT, un árbol de documento virtual.» Siete páginas, de la p. 7 a la p. 13, en fila; un cursor marca una edición en la p. 11, el resto de esa columna se vuelve dorado como SUCIO y una franja pasa a la p. 12, que recibe una marca y ESTABLE, mientras las anteriores dicen SE SALTA y las siguientes INTACTA. Tres viñetas explican la regla y un panel titulado renderToHtmlIndexed() marca como PARCHEADO los nodos del árbol que han cambiado.

    NarraciónTodo vive en un documento virtual, como el virtual DOM de React. Cambias una palabra, y solo se recompone lo que cambia.

  8. 1:05

    En pantalla«¿Un documento largo? Solo se pinta lo que está en pantalla.» Una columna de páginas pasa por un marco dorado rotulado VIEWPORT, con un margen de 200 píxeles arriba y abajo: las páginas de dentro se dibujan enteras y las de fuera son contornos discontinuos. Un contador grande indica cuántas de las 48 páginas están pintadas en cada momento (IntersectionObserver · +200 px), junto a «Geometría: todas las páginas. Píxeles: solo lo que ves.»

    NarraciónY en un libro largo, solo se pintan las páginas que están en pantalla.

  9. 1:12

    En pantallaSección 05, «Justificación Knuth–Plass»: «Todas las formas de cortar el párrafo. A la vez.» A la izquierda, un párrafo sobre el corte de líneas compuesto de forma voraz, como lo hace el navegador, con sus líneas más abiertas en rojo. Debajo, cada palabra es un punto sobre una recta: arcos rojos para los cortes voraces, arcos azules tenues que prueban todos los cortes posibles y un camino dorado con la mejor combinación. A la derecha, la versión Knuth–Plass, de espaciado uniforme, con la fealdad de cada línea, la fórmula «(1 + fealdad + penalización)²» y una suma de deméritos menor.

    NarraciónUn navegador corta las líneas de forma voraz, una a una. Postext usa Knuth-Plass, el algoritmo de TeX: sopesa todas las formas de cortar el párrafo entero y se queda con la más uniforme.

  10. 1:27

    En pantallaSección 06, «Una maquetación, cinco salidas»: «Lo que ves es lo que va a imprenta.» Bajo la línea de código const vdt = buildDocument(content, config); una página se divide en cinco. Canvas (renderToCanvas(), mapas de bits exactos al píxel) lleva una lupa sobre su rejilla de píxeles; HTML (renderToHtml(), seleccionable y adaptable) recuadra cada bloque con su etiqueta <h1>, <p>, <figure>, etc.; en PDF (renderToPdf(), para imprenta, PDF/UA, CMYK) cuatro planchas de color entran en registro y aparecen marcas de corte y una tira de color. En EPUB 3 (renderToEpub(), libro electrónico, fijo o fluido) la página aparece en un lector de libros electrónicos con la etiqueta «Maquetación fija»; la pantalla se estrecha hasta el tamaño de un móvil, el texto se redistribuye y la etiqueta pasa a «Maquetación fluida». En Folio (postext-folio, un libro en 3D que pasa páginas) la página se abre en una doble página y una hoja gira sobre el lomo.

    NarraciónUna maquetación, cinco salidas: canvas, HTML, PDF para imprenta, EPUB 3, fijo o fluido, y un libro en 3D. Lo que ves es lo que se imprime.

  11. 1:43

    En pantallaSección 07, «Por qué un estándar abierto»: «LaTeX marcó el listón del papel. Hoy la edición vive también en cada pantalla.» Dos tarjetas: LaTeX, 1984, con aspas junto a «Pensado para la página impresa», «Atado a las fuentes y paquetes de una máquina», «Compilar, esperar, repetir» y «Sin maquetación editorial en la web adaptable»; Postext, 2026, con marcas junto a «Web, PDF de imprenta y EPUB 3, una maquetación», «Un solo archivo .postext lo lleva todo», «Se recompone en vivo mientras escribes» y «En cualquier navegador · sin servidores · MIT». La tarjeta de Postext se ilumina.

    NarraciónLaTeX marcó el estándar del papel. Pero hoy la edición vive en todas las pantallas.

  12. 1:51

    En pantallaRótulo «Un archivo, el libro entero» y titular «Un estándar abierto para la edición, más allá de donde llega LaTeX». Un icono de archivo .postext se abre en cinco piezas: preset.json (configuración y diseño), chapters/*.md (un Markdown por capítulo), fonts/*.woff2 (las propias tipografías), images/ · SVG (cada imagen, incluida) y resources (tablas, figuras y pies). Pie: «Un ZIP corriente: abierto, documentado y con licencia MIT. Cualquier herramienta puede leerlo y escribirlo.»

    NarraciónPostext es un estándar abierto: un único archivo portátil, documentado y con licencia MIT, que cualquier herramienta puede leer y escribir.

  13. 2:04

    En pantalla«La muestra · compuesta por el motor real»: un muro de páginas de la edición española de la guía se aleja en perspectiva mientras un contador llega a 48 páginas. Texto: «12 capítulos, 3 partes y una portada, maquetados en torno a medio segundo. Cada página de la guía de Postext, calculada en un navegador por postext v1.7.0 para esta pieza. Nada colocado a mano.» Después, etiquetas: Libros de texto, Revistas, Ediciones literarias, Catálogos.

    NarraciónPor eso es capaz de maquetar libros de cientos de páginas en décimas de segundo.

  14. 2:11

    En pantallaCierre: el logotipo de Postext con el lema «El tipógrafo programable para la web», la dirección postext.dev, una línea de terminal que escribe «$ pnpm add postext» y el pie «Código abierto · MIT · github.com/drnachio/postext».

    NarraciónPostext. Código abierto, en postext.dev.

Capítulo 1 · Por qué Postext

Maquetación editorial, calculada para la web

La tipografía impresa pasó cinco siglos aprendiendo a componer una página; los navegadores aprendieron a maquetar una interfaz. Postext lleva lo primero a lo segundo.

CSS ofrece maquetación adaptable: flexbox, grid, columnas. Pero no sabe equilibrar columnas, mantener un título junto a su párrafo, evitar viudas y huérfanas ni llevar una figura a la cabeza de la columna siguiente. Son decisiones editoriales, depuradas durante siglos de imprenta.

Postext cubre ese vacío. Pásale markdown semántico y un objeto de configuración. Mide texto entre 300 y 600 veces más rápido que el DOM gracias a @chenglou/pretext (se abre en una nueva pestaña), y después calcula la geometría completa de cada página (cada línea, cada flotante y cada pie) y la dibuja con los backends de HTML, canvas o PDF listo para imprenta.

Entra markdown

:::part{number="I" title="Fundamentos"
  palette="band=#2b4acb"}
:::

# Por qué Postext {lead="La tipografía
impresa pasó cinco siglos…"}

Postext es un **motor de maquetación
de código abierto** que lleva a la web
el oficio de la tipografía impresa,
como muestra :ref{id="fig-flujo"}.

:::callout{type="try"}
Cambia una palabra: la página
vuelve a componerse.
:::

Salen páginas

Figura 1.1 El mismo markdown, antes y después del motor: una apertura de capítulo, dos columnas equilibradas y una figura llevada a la cabeza de una columna.

En cifras

más rápido que el DOM al medir texto: un libro entero se recompone mientras escribes
300–600×más rápido que el DOM al medir texto: un libro entero se recompone mientras escribes
salidas de una sola maquetación: HTML, canvas, PDF listo para imprenta y EPUB 3
4salidas de una sola maquetación: HTML, canvas, PDF listo para imprenta y EPUB 3
PDF etiquetado y accesible, con marcadores y color CMYK
PDF/UAPDF etiquetado y accesible, con marcadores y color CMYK
servidores: el motor funciona íntegramente en el navegador, con licencia MIT
0servidores: el motor funciona íntegramente en el navegador, con licencia MIT

Capítulo 2 · Capacidades

Lo que los tipógrafos siempre supieron

Seis cosas que una página necesita y que CSS nunca se pensó para decidir: el motor las calcula, siempre de la misma manera.

  1. 2.1

    Justificación Knuth-Plass

    El mismo algoritmo óptimo de corte de líneas que usa TeX, con separación silábica por patrones de TeX y control de huérfanas: bloques de texto homogéneos, sin ríos de blanco, más allá de lo que CSS puede expresar.

    Leer en la documentación
  2. 2.2

    Recursos y referencias cruzadas

    Figuras, diagramas SVG y tablas que flotan a la cabeza o al pie de columnas y páginas, como los flotantes de imprenta, con numeración por tipo y referencias cruzadas :ref que siempre se mantienen sincronizadas.

    Leer en la documentación
  3. 2.3

    Tablas y pies

    Tablas con tipografía propia para el cuerpo y la cabecera, divididas entre páginas con la cabecera repetida, y pies que siguen tu configuración: numerados y colocados junto al recurso que describen.

    Leer en la documentación
  4. 2.4

    Diagramas a una tinta

    Pasa los diagramas SVG a matices de una sola tinta según su luminancia, para que cada ilustración encaje con tu diseño y quede lista para imprimir con tinta directa.

    Leer en la documentación
  5. 2.5

    Matemáticas en LaTeX

    Ecuaciones en línea y en bloque escritas en LaTeX, que el motor mide y compone para que se asienten en la rejilla base junto al texto.

    Leer en la documentación
  6. 2.6

    Web, PDF para imprenta y EPUB

    Un motor de maquetación, cuatro salidas. Las mismas páginas calculadas se generan en HTML, canvas o PDF listo para imprenta (con marcadores, color CMYK y PDF etiquetado y accesible, PDF/UA) y salen como libro electrónico EPUB 3, página a página o con maquetación fluida.

    Leer en la documentación
Cada página de la guía de Postext —cubierta, índice, portadillas y todo lo demás— la compone Postext, en tu navegador, mientras la lees.
— Colofón de la guía incluida

Escaparate

Libros de verdad, compuestos en tu navegador

Un libro de texto, una revista, un poema épico anotado, un catálogo de exposición, un clásico chino en 120 capítulos, Las mil y una noches en árabe, una novela japonesa compuesta en vertical, un cómic en diez idiomas. Ábrelos en el Sandbox, cambia una regla y mira cómo se recompone cada página.

Capítulo 3 · Flujo de trabajo

Maquetación editorial en tres pasos

El contenido en markdown, el diseño en un objeto de configuración y las páginas en una sola llamada.

  1. 3.1

    Escribe markdown semántico

    Escribe tu contenido en markdown enriquecido: encabezados, listas, tablas, fórmulas, recuadros y referencias cruzadas :ref a tus figuras. Sin preocuparte por la maquetación: solo contenido.

  2. 3.2

    Configura las reglas de maquetación

    Define el tamaño de página, las columnas, la tipografía, el diseño de los títulos, los titulillos y la colocación de los flotantes en un objeto PostextConfig, o diséñalo visualmente en el Sandbox.

  3. 3.3

    Genera HTML, canvas o PDF

    Llama a buildDocument y obtén la geometría completa de la maquetación; después, dibújala con el backend de HTML, canvas o PDF listo para imprenta.

API

Una función, control total

Llama a buildDocument con tu contenido y un objeto de configuración. Recibes la geometría completa de las páginas: dibuja cualquier página como imagen con renderPage o compón el libro entero como PDF listo para imprenta con renderToPdf.

book.ts
import { buildDocument, renderPage } from "postext";
import { renderToPdf } from "postext-pdf";

const doc = buildDocument(
  { markdown },
  {
    page: { sizePreset: "21x28" },
    layout: { layoutType: "double" },
    bodyText: {
      fontSize: { value: 12, unit: "pt" },
      textAlign: "justify",
      hyphenation: { enabled: true, locale: "en-us" },
    },
  }
);

// Cada página, como imagen…
const cover = renderPage(doc.pages[0], doc);
cover.toBlob((png) => save(png, "cover.png"));

// …o el libro entero, como PDF listo para imprenta
// fontProvider: bytes TTF por familia y peso (consulta la documentación)
const pdf = await renderToPdf(doc, { fontProvider });

Capítulo 4 · Formato abierto

Un archivo, el libro entero

Un archivo .postext incluye todo lo que un documento necesita para volver a componerse en cualquier máquina: un formato abierto y editable que cualquiera puede adoptar.

La mayoría de los formatos editoriales dispersan un proyecto. Una compilación de LaTeX depende de las fuentes y los paquetes instalados en una máquina concreta, y los archivos nativos de los grandes programas de maquetación enlazan imágenes y tipografías que quedan fuera de ellos. Al mover el proyecto, algo se pierde. Nosotros mismos chocamos con esos límites en LaTeX.

Un .postext es un archivo ZIP corriente que cualquiera puede abrir, leer y editar: un manifiesto JSON, un archivo Markdown por capítulo y los propios archivos de fuentes e imágenes. El Sandbox lo exporta, el skill de agente postext-port lo escribe y postext/bundle lo abre en cualquier programa para componer de nuevo las mismas páginas. El formato está documentado y tiene licencia MIT, listo para que cualquier herramienta lo lea y lo escriba.

Dentro de postext-guide.postext
  1. 4.1preset.json

    Configuración. Página, retícula, tipografías, estilos de encabezado y de párrafo, colores y titulillos, en JSON legible.

  2. 4.2chapters/<lang>/*.md

    Capítulos. Un archivo Markdown por capítulo: aquí, 22 capítulos en 2 idiomas.

  3. 4.3fonts/*.woff2

    Tipografías. Los propios archivos de fuentes, no solo sus nombres: 23 archivos de Lora, Fraunces, Geist, Bricolage Grotesque y Geist Mono.

  4. 4.4preset.json › resources

    Recursos. Pies, numeración, colocación y contenido de las 30 figuras y tablas a las que remite el texto.

  5. 4.5resources/*.svg

    Imágenes. Las propias ilustraciones, en SVG o mapa de bits, con la versión de cada idioma: 41 archivos.

Figura 4.1 El .postext de la guía, 1364 KB: todo lo que el libro necesita y nada que tenga que ir a buscar.

Pruébalo

Abre la guía, obtén sus páginas

El primer ejemplo del Sandbox, la guía de Postext, es un único archivo .postext. Ábrelo en el navegador y convierte cada página en una imagen: sus tipografías, figuras y tablas salen del propio archivo.

Descargar la guíapostext-guide.postext · 1364 KB
open-guide.js
import { openBundle, loadBundleFonts, registerBundleImages,
  buildBundle, renderPageToCanvas } from "postext";

// La guía del Sandbox: configuración, capítulos, fuentes e imágenes
const file = await fetch("postext-guide.postext").then((r) => r.blob());
const book = await openBundle(file, { locale: "es" });

await loadBundleFonts(book);      // sus propias tipografías
await registerBundleImages(book); // sus propias figuras

// Cada página de cada capítulo, como imagen
for (const doc of buildBundle(book))
  for (const page of doc.pages) {
    const canvas = document.createElement("canvas");
    renderPageToCanvas(page, doc, canvas, { scale: 0.5 });
    document.body.append(canvas);
  }

Instalación

Empieza en menos de un minuto

Un paquete, sin servidor y sin dependencias nativas. Añade postext-pdf cuando necesites imprimir.

quick-start.ts
// Inicio rápido
import { buildDocument, renderPage } from "postext";
import { renderToPdf } from "postext-pdf";

const doc = buildDocument({
  markdown: "# Hello World\n\nYour content here.",
});

// La primera página, dibujada en un canvas
document.body.append(renderPage(doc.pages[0], doc));

// El documento entero, como PDF
const pdf = await renderToPdf(doc, { fontProvider });