Quelloffene Layout-Engine · v1.33.9
Das programmierbare Satzsystem für das Web
Postext nimmt semantisches Markdown und wendet darauf jahrhundertealte Satzregeln an – Blocksatz nach Knuth-Plass, ausgeglichene Spalten, Gleitobjekte, die ihren Platz kennen –, um Seiten in Verlagsqualität als HTML, Canvas oder druckfertiges PDF zu erzeugen.
Jede Seite wird in Ihrem Browser berechnet
Postext
Kurz gesagt
Postext ist freie, quelloffene Software, die die Seiten von Büchern, Zeitschriften und Berichten gestaltet. Sie schreiben Text mit ein paar einfachen Zeichen, und Postext macht daraus fertige Seiten, wie die Seiten eines gedruckten Buches. Postext folgt Regeln, die Drucker seit Jahrhunderten anwenden, damit sich der Text gut lesen lässt. Die Seiten können auf eine Website, in eine App oder in ein druckfertiges PDF. Postext ist für Autoren, Verlage, Gestalter und Entwickler gemacht.
Transkript
Alles, was der Sprecher sagt, mit einer Beschreibung dessen, was auf dem Bildschirm zu sehen ist.
- 0:00
Auf dem BildschirmEine dunkle Karte zeigt „MAINZ · 1455“ über einer feinen goldenen Linie. Hinter der Schlagzeile „For five centuries, print learned to set a page.“ („Fünf Jahrhunderte lang hat der Buchdruck gelernt, eine Seite zu setzen.“) zählt die Jahreszahl in riesigen Konturziffern von 1455 bis 2026 hoch, und ringsum landen Begriffe aus dem Druckwesen, auf Englisch: Blocksatz (Justification), Unterschneidung (Kerning), Witwen und Waisen (Widows, orphans), ausgeglichene Spalten (Balanced columns), Zeilenabstand (Leading), Grundlinienraster (Baseline grid), Silbentrennung (geschrieben „hy·phen·a·tion“), Zeilenlänge (Measure), Gleitobjekte (Floats), Kolumnentitel (Running heads), Gießbäche (Rivers). Die Kamera fährt in den Schlusspunkt hinein, der den Bildschirm mit Gold flutet.
SprecherFünf Jahrhunderte lang hat der Buchdruck gelernt, wie man eine Seite setzt.
- 0:05
Auf dem BildschirmSchlagzeile: „The web learned to lay out interfaces. It never learned to set a page.“ („Das Web hat gelernt, Oberflächen zu gestalten. Eine Seite zu setzen, hat es nie gelernt.“) Ein Browserfenster mit der Adresse example.com/longform/article zeigt einen dreispaltigen Artikel im Blocksatz, „Why the web can’t set a page“ („Warum das Web keine Seite setzen kann“); rote Etiketten markieren Gießbäche aus Weißraum, eine Witwe, eine Waise, ein Bild, das auf dem Text landet, und eine unausgeglichene letzte Spalte. Daneben zeigt ein Code-Chip „column-count: 3;“, dann „…and little else.“ („…und kaum mehr.“) und eine durchgestrichene Liste derselben fünf Fehler. Das Fenster flackert und fällt in sich zusammen.
SprecherDas Web hat gelernt, Oberflächen zu gestalten. Nie Seiten. Deshalb bricht langer Text noch immer auseinander: Gießbäche, Witwen, Waisen, Kollisionen.
- 0:18
Auf dem BildschirmNach einem weißen Blitz und einem Wisch aus blauen, goldenen und roten Streifen steigen Logo und Schriftzug von Postext an ihren Platz, mit dem Slogan „The programmable typesetter for the web“ („Das programmierbare Satzsystem für das Web“). Darunter: OPEN SOURCE · MIT LICENCE · v1.7.0 · RUNS IN YOUR BROWSER (Open Source, MIT-Lizenz, läuft in Ihrem Browser).
SprecherDas ist Postext: das programmierbare Satzsystem für das Web.
- 0:24
Auf dem BildschirmAbschnitt 01 von 07, „Content in“ („Der Inhalt kommt herein“): „Markdown says what things are.“ („Markdown sagt, was die Dinge sind.“) Eine Markdown-Datei, 03-why-postext.md, schreibt sich von selbst: eine Teil-Direktive, die Überschrift „Why Postext“ mit einem Vorspann, ein Absatz, der mit :ref auf die Abbildung fig-flow verweist, eine Zeile ::resource und ein Block :::callout. Daneben ruft config.ts buildDocument mit einem zweispaltigen Layout, Grundtext im Blocksatz und Silbentrennung für en-us auf, unter dem Satz „Configuration decides how they look. Nothing about layout lives in the text.“ („Die Konfiguration entscheidet, wie sie aussehen. Nichts vom Layout steckt im Text.“)
SprecherSie schreiben semantisches Markdown, das sagt, was die Dinge sind. Eine Konfiguration entscheidet, wie sie aussehen.
- 0:32
Auf dem BildschirmAbschnitt 02, „Pretext measures“ („Pretext misst“): „Measured without touching the DOM.“ („Gemessen, ohne das DOM anzufassen.“) Eine Überschrift, ein Absatz und ein Kasten werden nacheinander abgetastet, und Maßlinien geben ihre Höhe in Punkt an; ein Code-Feld zeigt prepare(text, '25px Lora') und layout(prepared, width, 38), die eine Höhe und eine Zeilenzahl zurückgeben. Zwei Balken liefern sich ein Rennen durch 10.000 Absätze: „Browser reflow · DOM“ (der Neuumbruch im Browser) kommt kaum voran, während sich „Pretext · canvas metrics + arithmetic“ (Canvas-Metriken und Arithmetik) auf einen Schlag füllt, und ein Zähler klettert auf 600× über „faster text measurement than the DOM, so a whole book reflows as you type“ („schnellere Textmessung als über das DOM, sodass ein ganzes Buch beim Tippen neu umbricht“) und „Powered by @chenglou/pretext“.
SprecherJeder Absatz wird gemessen, ohne das DOM anzufassen, bis zu sechshundertmal schneller, dank Pretext, der Bibliothek, die das möglich gemacht hat.
- 0:42
Auf dem BildschirmAbschnitt 03, „Postext decides“ („Postext entscheidet“): „Every line placed before a pixel is drawn.“ („Jede Zeile steht, bevor ein Pixel gezeichnet ist.“) Ein Ring aus sieben Segmenten leuchtet der Reihe nach auf, Structure, Measure, Place, Float, Refine, Balance und Rhythm (gliedern, messen, platzieren, gleiten lassen, verfeinern, ausgleichen, rhythmisieren), jedes mit einer einzeiligen Beschreibung, während sich daneben eine zweispaltige Seite des Postext-Leitfadens zusammensetzt: Beschriftete Blöcke fliegen in ihre Spalten, eine Abbildung gleitet unter der Notiz „:ref{id="fig-flow"} → column foot“ (Spaltenfuß) an ihren Platz, das Farbband des Kapitelauftakts fällt herein, die Zeilen erscheinen, die Spalten gleichen sich aus, und ein Grundlinienraster streicht über die Seite nach unten. Der Ring durchläuft die Iterationen 1 bis 3 und zeigt mit einem Häkchen „Settled in 3 iterations“ („Nach 3 Iterationen stabil“); eine Beschriftung gibt den Begrenzungsrahmen und die Grundlinie einer Zeile an.
SprecherDann entscheidet Postext. Sieben Durchgänge platzieren jede Zeile, lassen jede Abbildung gleiten und gleichen jede Spalte aus, immer wieder, bis sich nichts mehr bewegt.
- 0:54
Auf dem BildschirmAbschnitt 04, „The virtual document“ („Das virtuelle Dokument“): „Change a word. Only what changed is set again.“ („Ändern Sie ein Wort. Nur was sich geändert hat, wird neu gesetzt.“), mit der Notiz „Like React’s virtual DOM, but for pages: the VDT, a virtual document tree.“ („Wie das virtuelle DOM von React, aber für Seiten: der VDT, ein virtueller Dokumentbaum.“) Sieben Seiten, S. 7 bis S. 13, stehen in einer Reihe; eine Einfügemarke zeigt eine Änderung auf S. 11, der Rest dieser Spalte färbt sich golden und trägt DIRTY (neu zu setzen), und ein schmaler Rest fließt auf S. 12 über, die ein Häkchen und SETTLED (stabil) erhält, während die Seiten davor SKIPPED (übersprungen) und die danach UNTOUCHED (unberührt) zeigen. Drei Aufzählungspunkte nennen die Regel, und ein Feld mit der Überschrift renderToHtmlIndexed() markiert die geänderten Knoten des Dokumentbaums als PATCHED (aktualisiert).
SprecherAll das lebt in einem virtuellen Dokument, wie das virtuelle DOM von React. Ändern Sie ein Wort, und nur was sich geändert hat, wird neu gesetzt.
- 1:03
Auf dem Bildschirm„A long document? Only what’s on screen gets painted.“ („Ein langes Dokument? Gezeichnet wird nur, was auf dem Bildschirm ist.“) Eine Kolonne von Buchseiten läuft durch einen goldenen Rahmen mit der Aufschrift VIEWPORT (sichtbarer Bereich), mit einem Rand von 200 Pixeln darüber und darunter: Seiten innerhalb werden vollständig gezeichnet, Seiten außerhalb sind gestrichelte Umrisse. Ein großer Zähler zeigt, wie viele der 48 Seiten in diesem Moment gezeichnet sind (IntersectionObserver · +200 px), neben „Geometry: every page. Pixels: only what you see.“ („Geometrie: jede Seite. Pixel: nur was Sie sehen.“)
SprecherUnd in einem langen Buch werden nur die Seiten gezeichnet, die auf dem Bildschirm sind.
- 1:10
Auf dem BildschirmAbschnitt 05, „Knuth–Plass justification“ („Blocksatz nach Knuth-Plass“): „Every way to break the paragraph. At once.“ („Jede Art, den Absatz umzubrechen. Auf einmal.“) Links wird ein Absatz über den Zeilenumbruch so gesetzt, wie es ein Browser tut, mit der ersten passenden Lösung für jede Zeile, und seine lockersten Zeilen färben sich rot. Darunter wird jedes Wort zu einem Punkt auf einer Linie: Rote Bögen markieren die gierigen Umbrüche, blasse blaue Bögen probieren jeden möglichen Umbruch aus, und ein goldener Pfad wählt die beste Kombination. Rechts ist die Fassung nach Knuth-Plass gleichmäßig verteilt, mit der Badness jeder Zeile, der Formel „(1 + badness + penalty)²“ und einer niedrigeren Summe der Demerits.
SprecherEin Browser bricht Zeilen gierig um, eine nach der anderen. Postext verwendet Knuth-Plass, den Algorithmus hinter TeX. Er wägt jede Art ab, den ganzen Absatz umzubrechen, und behält die gleichmäßigste.
- 1:24
Auf dem BildschirmAbschnitt 06, „One layout, five outputs“ („Ein Layout, fünf Ausgaben“): „What you see is what goes to press.“ („Was Sie sehen, geht in den Druck.“) Unter der Codezeile const vdt = buildDocument(content, config); teilt sich eine Seite in fünf. Canvas (renderToCanvas(), pixelgenaue Bitmaps) bekommt eine Lupe über seinem Pixelraster; bei HTML (renderToHtml(), markierbarer Text, passt sich der Fenstergröße an) wird jeder Block umrandet und mit <h1>, <p>, <figure> usw. beschriftet; bei PDF (renderToPdf(), druckfertig, PDF/UA, CMYK) gleiten vier Farbauszüge passgenau übereinander, dann erscheinen Schnittmarken und ein Farbkontrollstreifen. EPUB 3 (renderToEpub(), E-Book, fest oder umfließend) zeigt die Seite in einem E-Reader mit der Aufschrift „Fixed layout“ (festes Layout); der Bildschirm schrumpft auf Handygröße, der Text bricht neu um, und die Aufschrift wechselt zu „Reflowable“ (umfließend). Folio (postext-folio, ein 3D-Buch mit Seiten, die sich umblättern lassen) öffnet die Seite zu einer Doppelseite und blättert ein Blatt über den Rücken um.
SprecherEin Layout, fünf Ausgaben: Canvas, HTML, druckfertiges PDF, EPUB 3, fest oder umfließend, und ein Buch in 3D. Was Sie sehen, geht in den Druck.
- 1:41
Auf dem BildschirmAbschnitt 07, „Why an open standard“ („Warum ein offener Standard“): „LaTeX set the bar for print. Publishing now lives on every screen, too.“ („LaTeX hat die Messlatte für den Druck gelegt. Publizieren findet heute auch auf jedem Bildschirm statt.“) Zwei Karten: LaTeX, 1984, mit Kreuzen bei „Built for the printed page“ (für die gedruckte Seite gebaut), „Builds tied to one machine’s fonts & packages“ (Builds an die Schriften und Pakete eines Rechners gebunden), „Compile, wait, repeat“ (kompilieren, warten, wiederholen) und „No editorial layout on the responsive web“ (kein redaktionelles Layout im responsiven Web); Postext, 2026, mit Häkchen bei „Web, print-ready PDF & EPUB 3 from one layout“ (Web, druckfertiges PDF und EPUB 3 aus einem Layout), „One portable .postext file carries it all“ (eine portable .postext-Datei enthält alles), „Reflows live, as you type“ (bricht beim Tippen live neu um) und „Runs in any browser · zero servers · MIT“ (läuft in jedem Browser, ohne Server, MIT). Die Postext-Karte leuchtet auf.
SprecherLaTeX hat den Standard für den Druck gesetzt. Aber Publizieren findet heute auf jedem Bildschirm statt.
- 1:48
Auf dem BildschirmDachzeile „One file, the whole book“ („Eine Datei, das ganze Buch“), Schlagzeile „An open standard for publishing, beyond where LaTeX reaches.“ („Ein offener Standard für das Publizieren, über die Reichweite von LaTeX hinaus.“) Ein Dateisymbol .postext zerfällt in fünf Teile: preset.json (Konfiguration und Gestaltung), chapters/*.md (eine Markdown-Datei pro Kapitel), fonts/*.woff2 (die Schriften selbst), images/ · SVG (jedes Bild, eingebettet) und resources (Tabellen, Abbildungen und Bildunterschriften). Bildtext: „A plain ZIP: open, documented, MIT-licensed. Any tool can read and write it.“ („Ein einfaches ZIP: offen, dokumentiert, unter MIT-Lizenz. Jedes Werkzeug kann es lesen und schreiben.“)
SprecherPostext ist ein offener Standard: eine portable Datei, dokumentiert und unter MIT-Lizenz, die jedes Werkzeug lesen und schreiben kann.
- 1:58
Auf dem Bildschirm„The showcase · set by the real engine“ („Das Schaufenster, gesetzt von der echten Engine“): Eine Wand aus Buchseiten weicht perspektivisch zurück, während ein Zähler 48 Seiten erreicht. Text: „12 chapters, 3 parts, a cover, laid out in about half a second. Every page of the Postext guide, computed in a browser by postext v1.7.0 for this film. Nothing placed by hand.“ („12 Kapitel, 3 Teile, ein Umschlag, in etwa einer halben Sekunde gesetzt. Jede Seite des Postext-Leitfadens, für diesen Film von postext v1.7.0 in einem Browser berechnet. Nichts von Hand platziert.“) Es folgen Schlagwörter: Textbooks, Magazines, Literary editions, Catalogues (Lehrbücher, Zeitschriften, literarische Ausgaben, Kataloge).
SprecherDeshalb kann es Bücher mit Hunderten von Seiten in Zehntelsekunden setzen.
- 2:05
Auf dem BildschirmAbspann: das Postext-Logo mit dem Slogan „The programmable typesetter for the web“ („Das programmierbare Satzsystem für das Web“), die Adresse postext.dev, eine Terminalzeile, die „$ pnpm add postext“ tippt, und die Fußzeile „Open source · MIT · github.com/drnachio/postext“.
SprecherPostext. Open Source, auf postext.dev.
Kapitel 1 · Warum Postext
Seitengestaltung, berechnet für das Web
Die Drucktypografie hat fünf Jahrhunderte gebraucht, um zu lernen, wie man eine Seite setzt; Browser haben gelernt, eine Benutzeroberfläche anzuordnen. Postext bringt das eine zum anderen.
CSS bietet responsives Layout – Flexbox, Grid, Spalten. Aber es kann keine Spalten ausgleichen, keine Überschrift bei ihrem Absatz halten, keine Witwen und Waisen verhindern und keine Abbildung an den Kopf der nächsten Spalte gleiten lassen. Das sind Satzentscheidungen, verfeinert in Jahrhunderten des Drucks.
Postext schließt diese Lücke. Sie geben semantisches Markdown und ein Konfigurationsobjekt hinein. Postext misst Text 300- bis 600-mal schneller als das DOM, mithilfe von @chenglou/pretext (öffnet in neuem Tab), berechnet dann die vollständige Seitengeometrie – jede Zeile, jedes Gleitobjekt, jede Legende – und gibt sie über HTML-, Canvas- oder PDF-Backends für den Druck aus.
Markdown hinein
:::part{number="I" title="Grundlagen"
palette="band=#2b4acb"}
:::
# Warum Postext {lead="Der Buchdruck
hat fünf Jahrhunderte …"}
Postext ist eine **quelloffene
Layout-Engine**, die das Handwerk
der Buchtypografie ins Web bringt,
wie :ref{id="fig-flow"} zeigt.
:::callout{type="try"}
Ändern Sie ein Wort: Die Seite
setzt sich neu.
:::Seiten heraus
In Zahlen
- schnellere Textmessung als das DOM, sodass ein ganzes Buch beim Tippen neu umbricht
- 300–600×schnellere Textmessung als das DOM, sodass ein ganzes Buch beim Tippen neu umbricht
- Ausgaben aus einem Layout: HTML, Canvas, druckfertiges PDF und EPUB 3
- 4Ausgaben aus einem Layout: HTML, Canvas, druckfertiges PDF und EPUB 3
- getaggte, barrierefreie PDF-Ausgabe mit Lesezeichen und CMYK-Farben
- PDF/UAgetaggte, barrierefreie PDF-Ausgabe mit Lesezeichen und CMYK-Farben
- Server: Die Engine läuft vollständig im Browser, unter MIT-Lizenz
- 0Server: Die Engine läuft vollständig im Browser, unter MIT-Lizenz
Kapitel 2 · Fähigkeiten
Was Schriftsetzer schon immer wussten
Sechs Dinge, die eine Seite braucht und für deren Entscheidung CSS nie gedacht war – berechnet von der Engine, jedes Mal auf dieselbe Weise.
- 2.1
Blocksatz nach Knuth-Plass
Derselbe optimale Zeilenumbruch-Algorithmus wie in TeX, mit Silbentrennung nach TeX-Mustern und Kontrolle von Waisen – gleichmäßig gesetzte Textblöcke ohne Gießbäche, weit über das hinaus, was CSS ausdrücken kann.
In der Doku lesen - 2.2
Ressourcen und Querverweise
Abbildungen, SVG-Diagramme und Tabellen gleiten an den Kopf oder Fuß von Spalten und Seiten – so, wie Gleitobjekte im Druck funktionieren –, mit typisierter Nummerierung und :ref-Querverweisen, die immer stimmen.
In der Doku lesen - 2.3
Tabellen und Legenden
Tabellen mit eigener Typografie für Tabellenkörper und Kopfzeile, über Seiten geteilt mit wiederholtem Tabellenkopf, und Legenden, die Ihrer Konfiguration folgen – nummeriert und neben der Ressource platziert, die sie beschreiben.
In der Doku lesen - 2.4
Einfarbige Diagramme
SVG-Diagramme nach Helligkeit in Tonwerte einer einzigen Druckfarbe umfärben, damit jede Illustration zu Ihrer Gestaltung passt – bereit für den Druck mit Sonderfarbe.
In der Doku lesen - 2.5
Mathematik in LaTeX
Formeln im Fließtext und abgesetzt, in LaTeX geschrieben, von der Engine gemessen und gesetzt, sodass sie neben dem Text auf dem Grundlinienraster stehen.
In der Doku lesen - 2.6
Web, druckfertiges PDF und EPUB
Eine Layout-Engine, vier Ausgaben. Dieselben berechneten Seiten werden als HTML, Canvas oder druckfertiges PDF ausgegeben – mit Lesezeichen, CMYK-Farben und getaggter, barrierefreier PDF/UA-Ausgabe – und erscheinen als E-Book im Format EPUB 3, seitengetreu oder umfließend.
In der Doku lesen
Jede Seite des Postext-Leitfadens – Umschlag, Inhaltsverzeichnis, Teiltitel und alles andere – wird von Postext gesetzt, in Ihrem Browser, während Sie lesen.
Schaufenster
Echte Bücher, gesetzt in Ihrem Browser
Ein Lehrbuch, ein Magazin, ein kommentiertes Versepos, ein Ausstellungskatalog, ein chinesischer Klassiker in 120 Kapiteln, Tausendundeine Nacht auf Arabisch, ein japanischer Roman im vertikalen Satz, ein Comic in zehn Sprachen. Öffnen Sie eines davon in der Sandbox, ändern Sie eine Regel und sehen Sie zu, wie jede Seite neu umbricht.
- Quelloffene Layout-EnginePostextJede Seite wird in Ihrem Browser berechnet
Der Postext-Leitfaden
Der eingebaute Leitfaden: 13 Kapitel, drei Teile, ein Umschlag

Biochemie (Feduchi) · Kapitel 1
Ein Biochemie-Lehrbuch in anderthalb Spalten, die Hauptspalte am Bund und eine Außenspalte mit Abbildungen, Schlüsselbegriffen und Aufgaben

Deep Sky
Ein zweispaltiges Astronomiemagazin mit randabfallenden Auftaktseiten, Kästen und hervorgehobenen Zitaten

Don Quijote · Gustave Doré
Eine literarische Ausgabe in anderthalb Spalten mit Randglossen und Dorés Tafeln

Physik (OpenStax)
Ein Lehrbuch in anderthalb Spalten mit durchgerechneten Beispielen, Kontrollfragen, Tabellen und Formeln

Das verlorene Paradies · Gustave Doré
Eine kommentierte Ausgabe von Miltons Gedicht in zwölf Büchern: Veritys Anmerkungen am Fuß der Seite und Dorés fünfzig Tafeln. Nur auf Englisch

Spanische Malerei
Ein einspaltiger Ausstellungskatalog, Katalogeintrag und Kommentar gegenüber der ganzseitigen Tafel

Signale 2020
Ein zweispaltiges Magazin der EUA mit Fotoauftaktseiten, Kästen, hervorgehobenen Zitaten und Datentafeln

Tausendundeine Nacht · ألف ليلة وليلة
Die vollständige Tausendundeine Nacht auf Arabisch nach dem Bulaq-Text: ein klassisches ägyptisches Buch mit Bindung rechts, jede Seite in einem doppelt linierten Rahmen, die Nächte in Worten benannt und mit den Aquarellen von Sani ol-Molk. Nur auf Arabisch

Der Traum der Roten Kammer · 紅樓夢
Ein klassischer chinesischer Roman in 120 Kapiteln mit den Tafeln von 1884: der Text von 1792 in traditionellem Chinesisch, vertikal gesetzt und rechts gebunden, derselbe Text in vereinfachtem Chinesisch und Jolys englische Übersetzung der ersten 56 Kapitel

Kokoro · こころ
Natsume Sōsekis Roman von 1914 auf Japanisch, vertikal gesetzt und rechts gebunden nach der Erstausgabe bei Iwanami, mit dem Umschlag, den Vorsatzblättern und der Titelseite, die Sōseki selbst gestaltete, drei seiner Gemälde und Furigana über den schwierigeren Wörtern. Nur auf Japanisch

Pepper&Carrot · Peppers Geburtstagsfeier
Episode 8 von David Revoys Webcomic in zehn Sprachen: die textlosen Originalpanels, mit Sprechblasen und Lettering, die die Engine aus jeder offiziellen Übersetzung setzt. Die japanische Ausgabe ist in Spalten gelettert und wird, wie die arabische, von rechts nach links gelesen und von rechts aufgeschlagen
Kapitel 3 · Arbeitsablauf
Drei Schritte zum Layout in Verlagsqualität
Inhalt in Markdown, Gestaltung in einem Konfigurationsobjekt, Seiten aus einem einzigen Funktionsaufruf.
- 3.1
Semantisches Markdown schreiben
Verfassen Sie Ihren Inhalt in erweitertem Markdown: Überschriften, Listen, Tabellen, Formeln, Kästen und :ref-Querverweise auf Ihre Abbildungen. Keine Layoutfragen – nur Inhalt.
- 3.2
Layoutregeln festlegen
Legen Sie Seitenformat, Spalten, Typografie, Überschriftengestaltung, Kolumnentitel und die Platzierung der Gleitobjekte in einem Objekt PostextConfig fest – oder gestalten Sie alles visuell in der Sandbox.
- 3.3
Als HTML, Canvas oder PDF ausgeben
Rufen Sie buildDocument auf und erhalten Sie die vollständige Layoutgeometrie – dann geben Sie sie mit dem Backend für HTML, Canvas oder druckfertiges PDF aus.
API
Eine Funktion, volle Kontrolle
Rufen Sie buildDocument mit Ihrem Inhalt und einem Konfigurationsobjekt auf. Sie erhalten die vollständige Seitengeometrie zurück: Zeichnen Sie jede Seite als Bild mit renderPage, oder setzen Sie das ganze Buch als druckfertiges PDF mit renderToPdf.
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" },
},
}
);
// Jede Seite als Bild …
const cover = renderPage(doc.pages[0], doc);
cover.toBlob((png) => save(png, "cover.png"));
// … oder das ganze Buch als druckfertiges PDF
// fontProvider: TTF-Bytes je Schriftfamilie und Schriftstärke (siehe Doku)
const pdf = await renderToPdf(doc, { fontProvider });Kapitel 4 · Offenes Format
Eine Datei, das ganze Buch
Eine .postext-Datei enthält alles, was ein Dokument braucht, um auf jedem Rechner neu gesetzt zu werden: ein offenes, bearbeitbares Format, das jeder übernehmen kann.
Die meisten Publikationsformate verstreuen ein Projekt. Ein LaTeX-Build hängt von den Schriften und Paketen ab, die auf einem bestimmten Rechner installiert sind, und die nativen Dateien der großen Layoutprogramme verknüpfen Bilder und Schriften, die außerhalb von ihnen liegen. Verschiebt man das Projekt, fehlt etwas. Mit LaTeX sind wir selbst an diese Grenzen gestoßen.
Eine .postext-Datei ist ein schlichtes ZIP-Archiv, das jeder öffnen, lesen und bearbeiten kann: ein JSON-Manifest, eine Markdown-Datei pro Kapitel und die Schriftdateien und Bilder selbst. Die Sandbox exportiert es, der Agenten-Skill postext-port schreibt es, und postext/bundle öffnet es in jedem Programm, um dieselben Seiten erneut zu setzen. Das Format ist dokumentiert und steht unter MIT-Lizenz, bereit zum Lesen und Schreiben für jedes Werkzeug.
- 4.1
preset.jsonKonfiguration. Seite, Raster, Schriften, Überschriften- und Absatzformate, Farben und Kolumnentitel als lesbares JSON.
- 4.2
chapters/<lang>/*.mdKapitel. Eine Markdown-Datei pro Kapitel: hier 14 Kapitel in 2 Sprachen.
- 4.3
fonts/*.woff2Schriften. Die Schriftdateien selbst, nicht nur ihre Namen: 18 Dateien aus Lora, Fraunces, Geist und Bricolage Grotesque.
- 4.4
preset.json › resourcesRessourcen. Legenden, Nummerierung, Platzierung und Tabelleninhalt für die 26 Abbildungen und Tabellen, auf die der Text verweist.
- 4.5
resources/*.svgBilder. Die Bilder selbst, als SVG oder Bitmap, mit der Fassung für jede Sprache: 38 Dateien.
Ausprobieren
Den Leitfaden öffnen, seine Seiten erhalten
Das erste Beispiel der Sandbox, der Postext-Leitfaden, ist eine einzige .postext-Datei. Öffnen Sie sie im Browser und machen Sie aus jeder Seite ein Bild: Schriften, Abbildungen und Tabellen kommen aus der Datei selbst.
Leitfaden herunterladenpostext-guide.postext · 847 KBimport { openBundle, loadBundleFonts, registerBundleImages,
buildBundle, renderPageToCanvas } from "postext";
// Der Leitfaden der Sandbox: Konfiguration, Kapitel, Schriften und Bilder
const file = await fetch("postext-guide.postext").then((r) => r.blob());
const book = await openBundle(file, { locale: "en" });
await loadBundleFonts(book); // seine eigenen Schriften
await registerBundleImages(book); // seine eigenen Abbildungen
// Jede Seite jedes Kapitels als Bild
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);
}Installation
In weniger als einer Minute starten
Ein Paket, kein Server, keine nativen Abhängigkeiten. Fügen Sie postext-pdf hinzu, wenn Sie drucken wollen.
// Schnellstart
import { buildDocument, renderPage } from "postext";
import { renderToPdf } from "postext-pdf";
const doc = buildDocument({
markdown: "# Hello World\n\nYour content here.",
});
// Die erste Seite, auf ein Canvas gezeichnet
document.body.append(renderPage(doc.pages[0], doc));
// Das ganze Dokument als PDF
const pdf = await renderToPdf(doc, { fontProvider });