# Konfiguration: Seite und Layout

> Seitenformat, Ränder und Grundlinienraster, die Spalten und ihre Abstände sowie die Kopf- und Fußzeilen

- HTML-Fassung: https://postext.dev/de/docs/configuration-page-layout
- Zuletzt aktualisiert: 2026-10-10
- Lesezeit: 6 min
- Andere Sprachen: [en](https://postext.dev/en/docs/configuration-page-layout.md), [es](https://postext.dev/es/docs/configuration-page-layout.md), [ca](https://postext.dev/ca/docs/configuration-page-layout.md), [fr](https://postext.dev/fr/docs/configuration-page-layout.md), [it](https://postext.dev/it/docs/configuration-page-layout.md), [pt](https://postext.dev/pt/docs/configuration-page-layout.md), [zh](https://postext.dev/zh/docs/configuration-page-layout.md), [ja](https://postext.dev/ja/docs/configuration-page-layout.md), [ar](https://postext.dev/ar/docs/configuration-page-layout.md)

## Kurz gesagt

Diese Seite behandelt die Einstellungen für das Blatt selbst. Sie wählen das Seitenformat, die Ränder, die Seite, auf der das Buch gebunden wird, und das Raster, auf dem die Textzeilen stehen. Sie legen fest, wie viele Spalten eine Seite hat und wie viel Abstand zwischen ihnen liegt. Außerdem bestimmen Sie, was oben und unten auf jeder Seite gedruckt wird, etwa die Seitenzahl oder der Kapiteltitel. Sie ist eine der neun Seiten der Konfigurationsreferenz.

## Seite

Die Eigenschaft `page` steuert die physischen Maße und das Erscheinungsbild der Seite.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `sizePreset` | `PageSizePreset` | `'17x24'` | Vordefiniertes Seitenformat. Setzen Sie `'custom'`, um ausdrücklich angegebene Breite und Höhe zu verwenden. |
| `width` | `Dimension` | `17 cm` | Seitenbreite. Wird aus `sizePreset` übernommen, wenn sie fehlt; ein ausdrücklicher Wert hat immer Vorrang (verwenden Sie `sizePreset: 'custom'` für vollständig eigene Formate). |
| `height` | `Dimension` | `24 cm` | Seitenhöhe. Wird aus `sizePreset` übernommen, wenn sie fehlt; ein ausdrücklicher Wert hat immer Vorrang. |
| `margins` | `PageMargins` | `2 cm` auf allen Seiten | Abstand zwischen Seitenrand und Inhaltsbereich. Jede Seite (oben, unten, links, rechts) wird unabhängig eingestellt. Mit `mirror: true` sind die Ränder *Ränder für gegenüberliegende Seiten*: `left` ist der Bundsteg (zum Rücken hin) und `right` der Außensteg; ungerade Seiten (Seite 1 ist ungerade) behalten sie wie angegeben, gerade Seiten vertauschen sie, sodass der Inhaltsbereich – und mit ihm die Spalten, die Bänder für Gleitobjekte, die Container für Kopf- und Fußzeile und die Bänder der Kapitelauftakte – über die Doppelseite wandert. Standardwert `false`. Siehe unten. |
| `backgroundColor` | `ColorValue` | `transparent` | Hintergrundfarbe der Seite. |
| `dpi` | `number` | `300` | Die Pixel pro Zoll, mit denen das Layout arbeitet: wie physische Einheiten (cm, mm, in, pt) zu seinen Pixeln werden. Eine Bitmap ohne eigene Auflösung erhält ein Layout-Pixel pro Bildpixel und wird daher mit so vielen ppi gedruckt: Behalten Sie 300 für den Druck bei, oder geben Sie den Bildern eine Auflösung (`Resource.bitmap.resolution`, `layout.bitmapResolution`; siehe [Dokumentformat › Bitmap-Größe](https://postext.dev/de/docs/document-format.md#bitmap-größe)). Der [Preflight](https://postext.dev/de/docs/configuration-fonts-colors-viewers.md#preflight) prüft die effektive Auflösung jedes Bilds. |
| `cutLines` | `CutLinesConfig` | deaktiviert | Zeigt Schnittmarken an den Seitenecken für den Beschnitt im Druck. Wenn aktiviert, vergrößert sich der Canvas um den Anschnitt und die Schnittmarken. Siehe unten. |
| `baselineGrid` | `BaselineGridConfig` | deaktiviert | Zeichnet das Grundlinienraster über die Seiten, um den vertikalen Rhythmus zu prüfen. Das Layout rastet im Raster ein, ob es gezeichnet wird oder nicht. Siehe unten. |
| `binding` | `'auto' \| 'left' \| 'right'` | `'auto'` | Die Kante, an der das Buch gebunden wird. `'auto'` ist `'right'`, wenn `layout.writingMode` den Wert `'vertical-rl'` hat, wenn das Dokument von rechts nach links läuft ([`direction`](https://postext.dev/de/docs/configuration-text.md#schreibrichtung)) oder wenn sein Abschnitt [`comics`](https://postext.dev/de/docs/configuration-comics.md#comics) von rechts nach links gelesen wird (ein Manga, eine japanische oder traditionell-chinesische Ausgabe), sonst `'left'`. Ein rechts gebundenes Buch beginnt auf einer linken Seite und spiegelt seine Ränder umgekehrt. Gilt für das ganze Buch: Das eigene `layout` eines Überschriftenformats ändert es nie. Siehe [Bindung](https://postext.dev/de/docs/configuration-page-layout.md#bindung). |

### Gespiegelte Ränder

Bücher werden als Doppelseiten gelesen, und der Bundsteg unterscheidet sich meist vom Außensteg. `margins.mirror` macht aus den vier Rändern Ränder für gegenüberliegende Seiten:

```json
{
  "page": {
    "margins": {
      "top": { "value": 2, "unit": "cm" },
      "bottom": { "value": 2.5, "unit": "cm" },
      "left": { "value": 2.2, "unit": "cm" },
      "right": { "value": 1.4, "unit": "cm" },
      "mirror": true
    }
  }
}
```

Mit dieser Konfiguration hat jede ungerade Seite links (am Rücken) einen Rand von 2,2 cm und rechts (am Vorderschnitt) einen von 1,4 cm; jede gerade Seite hat links (am Vorderschnitt) 1,4 cm und rechts (am Rücken) 2,2 cm. Jede umbrochene Seite trägt ihren eigenen `contentArea` auf der `VDTPage`, sodass alles, was davon abgeleitet ist – Spalten, Bänder für Gleitobjekte über die ganze Breite, Container für Kopf- und Fußzeile und Bänder der Kapitelauftakte mit `span: 'page'` –, automatisch der gespiegelten Geometrie folgt. Seiten- und Anschnittrahmen, die von Gestaltungselementen mit Verankerung an `'page'` / `'bleed'` verwendet werden, sind nicht betroffen: Sie beschreiben das physische Blatt, nicht die Ränder.

### Bindung

„Vertikal gesetzte chinesische Dokumente werden auf der rechten Seite gebunden, horizontal gesetzte Dokumente auf der linken Seite“ ([clreq §7.1.1.1](https://www.w3.org/TR/clreq/#x7-1-1-1-basic-elements-of-page-formatting)). `page.binding: 'right'` umbricht ein Buch für die rechte Kante:

- Seite 1 ist weiterhin ungerade und weiterhin das Recto, sodass `breakBefore.parity`, `:::pagebreak{parity}`, Gestaltungselemente mit einer `parity` und jede Seitenzählung ihre Bedeutung behalten. Es ändert sich die Seite, auf der das Recto liegt: die linke Seite der Doppelseite. Ein Kapitel, das auf einem neuen Recto beginnt, beginnt auf einer linken Seite ([clreq §7.1.3.3](https://www.w3.org/TR/clreq/#x7-1-3-3-how-to-handle-headings-with-new-recto-and-page-break)).
- Mit `margins.mirror` ist `left` weiterhin der Bundsteg, aber nun sind es die ungeraden Seiten, die tauschen: Seite 1 hat ihren Bundsteg rechts, Seite 2 links. Eine Seitenspalte von `oneAndHalf` bei `'outer'` / `'inner'`, ein gedrehtes Gleitobjekt, das am Rücken anliegt, die Ränder von Teiltitelseiten und Eckicons von Kästen bei `'outer'` / `'inner'` folgen derselben Regel.
- Das Dokument gibt es an (`VDTDocument.binding: 'right'`), sodass eine Host-Anwendung die Konfiguration nie lesen muss: Die Sandbox zeigt ihre Doppelseiten als `[3 | 2]` mit Seite 1 allein links vom Rücken, und ihr HTML-Betrachter lässt die Seiten von rechts nach links laufen, öffnet am rechten Ende, und der Pfeil nach links führt zur nächsten Seite. `renderToHtml` im Modus multi legt die Reihe von rechts nach links an.
- Das PDF enthält `/ViewerPreferences << /Direction /R2L >>` und `/PageLayout /TwoPageRight` (Seite 1 allein, dann Paare), getaggt oder nicht. Acrobat und Foxit folgen diesen Angaben; der integrierte Betrachter von Chrome ignoriert beide.

Paginas und Kolumnentitel wandern nicht von selbst: Eine Vorlage, die die Seitenzahl in der äußeren Ecke druckt, braucht für die rechte Kante eingestellte Elemente für ungerade und gerade Seiten (Elemente nehmen eine `parity` an).

Ein Buch, das von rechts nach links geschrieben wird (Arabisch, Persisch, Hebräisch …), wird ebenfalls rechts gebunden: `'auto'` ergibt die rechte Kante, wenn die [`direction`](https://postext.dev/de/docs/configuration-text.md#schreibrichtung) des Dokuments zu `'rtl'` aufgelöst wird. Ein solches Buch spiegelt außerdem seinen gesamten Fluss, sodass seine erste Spalte die rechte ist und seine Einzüge, Aufzählungszeichen, Gleitobjekte und Anmerkungen rechts stehen; die Plätze von Kopf- und Fußzeile bleiben physisch. Siehe [Arabischer Satz](https://postext.dev/de/docs/arabic-layout.md#seitenfolge-und-bindung-rechts).

Ein Comic, der von rechts nach links gelesen wird, wird ebenfalls rechts gebunden: `'auto'` ergibt die rechte Kante, wenn die Konfiguration einen Abschnitt `comics` hat, dessen Leserichtung zu `'rtl'` aufgelöst wird. Das ist bei einem Manga der Fall (`comics.artDirection: 'rtl'`) und bei einer japanischen oder traditionell-chinesischen Ausgabe eines westlichen Comics. Der Abschnitt entscheidet für das ganze Buch, nicht die `:::page`-Blöcke eines einzelnen Kapitels. Siehe [Comics](https://postext.dev/de/docs/comics.md#leserichtung).

### Vorgegebene Seitenformate

| Vorgabe | Breite | Höhe | Übliche Verwendung |
| --- | --- | --- | --- |
| `'11x17'` | 11 cm | 17 cm | Taschenbücher |
| `'12x19'` | 12 cm | 19 cm | Standard-Paperback |
| `'17x24'` | 17 cm | 24 cm | Fachbücher, Lehrbücher |
| `'21x28'` | 21 cm | 28 cm | Zeitschriften, Berichte (nahe A4) |
| `'broadsheet'` | 375 mm | 597 mm | Zeitungen im Broadsheet-Format |
| `'berliner'` | 315 mm | 470 mm | Zeitungen im Berliner Format |
| `'tabloid'` | 280 mm | 430 mm | Zeitungen im Tabloid-Format |
| `'compact'` | 297 mm | 420 mm | Zeitungen im Kompaktformat (ein halb gefaltetes Broadsheet) |

> **Abbildung: Vorgegebene Seitenformate**
> Vier mitgelieferte Seitenformate im richtigen Größenverhältnis gezeichnet: Taschenbuch 11x17, Paperback 12x19, Fachbuch 17x24 und nahe A4 21x28 cm.
>
> *Vorgaben im richtigen Größenverhältnis gezeichnet.*

Die vier Zeitungsformate sind neu in postext 1.18 und fehlen in der Zeichnung: Eine Broadsheet-Seite hat fast die vierfache Fläche einer Seite von 21 × 28. Sie werden meist mit dem [Layout `'multiple'`](https://postext.dev/de/docs/configuration-page-layout.md#layout-typen) gesetzt; sechs Spalten sind bei einem Broadsheet üblich, fünf bei einem Tabloid.

### Grundlinienraster

Das Grundlinienraster ist der Rhythmus des Fließtexts: Linien im Abstand einer Fließtextzeile, gezählt von der Oberkante des Inhaltsbereichs. Das Layout verwendet es, ob es gezeichnet wird oder nicht: Überschriften, Listenenden, Kästen, Abbildungen und abgesetzte Formeln bringen den Text wieder ins Raster zurück (sofern ihr eigenes `snapToGrid` nicht ausgeschaltet ist), sodass die Zeilen benachbarter Spalten registerhaltig bleiben. `enabled` zeichnet nur die Linien, im Canvas, im PDF und in den Ansichten der Sandbox, um diesen Rhythmus zu prüfen; Ein- oder Ausschalten verschiebt nichts. Die Linien reichen nur über den tatsächlichen Text der Seite – von der ersten bis zur letzten Textzeile –, sodass Bänder für Gleitobjekte, leere Seiten zum Ausgleich der Seitenparität und ungenutzter Raum am Ende kein Raster zeigen.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | Ob die Rasterlinien gezeichnet werden (Canvas und PDF). Betrifft nur die Darstellung: Das Layout ist in beiden Fällen dasselbe. |
| `color` | `ColorValue` | `#cccccc` | Farbe der Rasterlinien. |
| `lineWidth` | `Dimension` | `0.5 pt` | Stärke der Rasterlinien. |

```ts
page: {
  baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}
```

### Schnittmarken

Wenn aktiviert, vergrößert sich der Canvas um einen Anschnittbereich, und die Engine zeichnet für die Druckproduktion Schnittmarken an jeder Ecke. Das PDF gibt jeder Seite eine TrimBox und eine BleedBox; eine [PDF/X](https://postext.dev/de/docs/configuration-fonts-colors-viewers.md#pdfx-1a-und-pdfx-4)-Datei hat sie auch ohne Schnittmarken. In der Sandbox werden sie unter **Export › Druckvorbereitung** eingestellt.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | Ob der Canvas um den Anschnitt erweitert wird und Schnittmarken gezeichnet werden. |
| `bleed` | `Dimension` | `3 mm` | Zusätzlicher Bereich um die Seite, der als Anschnitt für den Druck dient. |
| `markLength` | `Dimension` | `5 mm` | Länge jeder Schnittmarke. |
| `markOffset` | `Dimension` | `3 mm` | Abstand zwischen der Schnittkante und dem Anfang jeder Schnittmarke. Eine Marke beginnt nie innerhalb des Anschnitts: Ist `bleed` breiter, beginnt die Marke an der Anschnittkante. |
| `markWidth` | `Dimension` | `0.25 pt` | Stärke der Schnittmarken. |
| `color` | `ColorValue` | `#000000` | Farbe der Schnittmarken im Canvas (der Bildschirmvorschau). Das PDF zeichnet sie immer in Passerfarbe (siehe unten). |

Das Blatt wächst auf jeder Seite um `bleed + markOffset + markLength`, und die beschnittene Seite liegt in seiner Mitte. Jede Ecke des Endformats erhält zwei Marken der Länge `markLength`, jede in der Flucht einer der beiden Kanten, die sich dort treffen. Eine Marke beginnt `markOffset` außerhalb des Endformats oder an der Anschnittkante, wenn `bleed` der größere der beiden Werte ist, sodass keine Marke über Motiven liegt, die in den Anschnitt laufen. Mit den Standardwerten (3 mm Anschnitt, 3 mm Abstand) reichen die Marken von 3 bis 8 mm außerhalb des Endformats, und außerhalb von ihnen läuft ein 3 mm breiter leerer Streifen um das Blatt. `cropMarkSegments(page, doc.config.page, doc.trimOffset)` gibt die acht Marken einer Seite in Seitenpixeln zurück, die Marken, die die Canvas- und PDF-Backends zeichnen. Das dritte Argument ist die Lage des Endformats im Blatt, der Wert, aus dem die `TrimBox` des PDFs geschrieben wird; fehlt es, wird es auf dieselbe Weise aus `cutLines` berechnet.

Außerhalb des Anschnitts wird nichts außer den Marken gedruckt. Alles, was die Seite zeichnet, einschließlich der Gestaltungselemente mit Verankerung an `'page'` oder `'bleed'`, wird im Canvas, im PDF und in der HTML-Ausgabe auf die Anschnittbox beschnitten, so wie ein DTP-Export es beschneidet: Ein Band oder ein Bild, das absichtlich über den Anschnitt hinaus gesetzt ist, wird an der Anschnittkante abgeschnitten, wo es beim Beschnitt ohnehin verloren ginge. Bis postext 1.4 lief ein solches Element über die Marken hinweg bis an den Rand des Blatts.

Im PDF (`postext-pdf`) ist die MediaBox jeder Seite das ganze Blatt. Die Seite enthält außerdem eine TrimBox, die beschnittene Seite, und eine BleedBox, das Endformat zuzüglich Anschnitt, die Ausschieß- und Preflight-Werkzeuge auslesen. Die Marken werden in Passerfarbe gezeichnet, der Separation `/All`, sodass sie auf jeder Druckplatte erscheinen. Das gilt unabhängig vom Farbraum, in dem das PDF geschrieben wird (RGB, Graustufen oder CMYK): Ein einfaches Schwarz käme beim Drucker als Tiefschwarz oder nur als Schwarzplatte an. `color` gilt nur für den Canvas.

### Seitennummerierung

Der Block `page.pageNumbering` steuert, wie Seitenbezeichnungen formatiert werden und wo der Zähler beginnt. Er legt nur den Standardwert für das ganze Dokument fest – um die Nummerierung mitten im Dokument neu zu beginnen (z. B. eine Titelei mit römischen Zahlen, auf die dezimal ab 1 nummerierte Kapitel folgen), verwenden Sie die Direktive `:::numbering` (siehe **Dokumentformat → Direktiven**).

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `format` | `'decimal' \| 'lower-roman' \| 'upper-roman' \| 'lower-alpha' \| 'upper-alpha'` oder ein ostasiatischer Stil | `'decimal'` | Zahlenstil, mit dem Seitenbezeichnungen dargestellt werden. Die ostasiatischen Stile (`'trad-chinese-informal'` nummeriert die Seiten mit 一, 二, 三) sind unter [Schreibweisen der Nummernformate](https://postext.dev/de/docs/configuration-page-layout.md#schreibweisen-der-nummernformate) aufgeführt. |
| `startAt` | `number` | `1` | Zahlenwert, den die erste Seite unabhängig vom Format erhält. `format: 'lower-roman', startAt: 1` ergibt `i, ii, iii, …`; `format: 'decimal', startAt: 17` ergibt `17, 18, 19, …`. |

Die berechnete Bezeichnung wird auf jeder `VDTPage` als `pageLabel` gespeichert und ist das, worauf der Platzhalter `{pageNumber}` in Kopf- und Fußzeile aufgelöst wird. PDFs schreiben einen Zahlenbaum `/PageLabels`, sodass die Seitenanzeige und die Navigation „Gehe zu Seite“ in Vorschau und Acrobat genau den gedruckten Bezeichnungen entsprechen. Ein Stil, für den PDF keinen Code hat (chinesische Zahlzeichen, eingekreiste Ziffern und Ziffern voller Breite), wird Seite für Seite ausgeschrieben, sodass der Betrachter ebenfalls 一, 二, 三 anzeigt.

#### Schreibweisen der Nummernformate

Drei Einstellungen wählen ein Nummernformat, und jede hat ihre eigene Schreibweise entwickelt: Seitenbezeichnungen (`page.pageNumbering.format` und `:::numbering{format=…}`) sagen `lower-roman`, nummerierte Listen (`orderedLists.numberFormat`) sagen `arabic` für dezimal, und Ressourcentypen (`counterFormat`) sagen `roman-lower`. Jede von ihnen akzeptiert alle unten aufgeführten Schreibweisen, sodass ein Format, das aus einer Einstellung kopiert wurde, auch in den anderen funktioniert. Bei Namen spielt die Groß- und Kleinschreibung keine Rolle; bei den Formen aus einem Zeichen schon (`i` und `I` unterscheiden sich).

| Format | Druckt | Akzeptierte Schreibweisen |
| --- | --- | --- |
| Dezimal | `1, 2, 3` | `decimal`, `arabic`, `1` |
| Römisch, klein | `i, ii, iii` | `lower-roman`, `roman-lower`, `i` |
| Römisch, groß | `I, II, III` | `upper-roman`, `roman-upper`, `I` |
| Buchstaben, klein | `a, b, c` | `lower-alpha`, `alpha-lower`, `lower-latin`, `a` |
| Buchstaben, groß | `A, B, C` | `upper-alpha`, `alpha-upper`, `upper-latin`, `A` |
| Chinesische Zahlzeichen, vereinfacht | 一, 十二, 一百零一 | `simp-chinese-informal`, `一` in einem Dokument in vereinfachter Schrift |
| Chinesische Zahlzeichen, traditionell | 一, 十二, 一萬 | `trad-chinese-informal`, `cjk-ideographic`, `一` in einem Dokument in traditioneller Schrift |
| Chinesische Finanzzahlzeichen, vereinfacht | 壹, 壹拾贰, 壹佰贰拾 | `simp-chinese-formal`, `壹` in einem Dokument in vereinfachter Schrift |
| Chinesische Finanzzahlzeichen, traditionell | 壹, 壹拾貳, 壹佰貳拾 | `trad-chinese-formal`, `壹` in einem Dokument in traditioneller Schrift |
| Chinesische Ziffern | 一二〇, 二〇二六 | `cjk-decimal`, `〇` |
| Himmelsstämme | 甲, 乙, 丙 … 癸 | `cjk-heavenly-stem`, `甲` |
| Erdzweige | 子, 丑, 寅 … 亥 | `cjk-earthly-branch`, `子` |
| Japanische Zahlzeichen | 一, 十二, 百一, 一万一 | `japanese-informal`, `一` in einem japanischen Dokument |
| Japanische formelle Zahlzeichen | 壱, 壱拾弐, 壱百 | `japanese-formal`, `壱` |
| Hiragana, Gojūon-Reihenfolge | あ, い, う … ん, ああ | `hiragana`, `あ` |
| Katakana, Gojūon-Reihenfolge | ア, イ, ウ … ン, アア | `katakana`, `ア` |
| Hiragana, Iroha-Reihenfolge | い, ろ, は … す, いい | `hiragana-iroha`, `い` |
| Katakana, Iroha-Reihenfolge | イ, ロ, ハ … ス, イイ | `katakana-iroha`, `イ` |
| Eingekreist | ①, ②, ③ … ㊿ | `circled-decimal`, `①` |
| Ziffern voller Breite | １, ２, ３ | `fullwidth-decimal`, `１` |
| Arabisch-indische Ziffern | ١, ٢, ٣ … ١٠ | `arabic-indic`, `١` |
| Persische Ziffern | ۱, ۲, ۳ … ۱۰ | `persian`, `urdu`, `۱` |
| Arabische Buchstaben, Abdschad-Reihenfolge | أ, ب, ج, د, هـ … غ, أأ | `abjad`, `أبجد` |
| Arabische Buchstaben, alphabetische Reihenfolge | أ, ب, ت, ث … ي, أأ | `hijai`, `arabic-alpha`, `arabic-alphabetic`, `أبتث` |
| Abdschad-Zahlzeichen | ا, ب … يا (11), غتمو (1446) | `arabic-abjad` |
| Abdschad-Zahlzeichen, maghrebinische Werte | ص (60), ض (90), ش (1000) | `arabic-abjad-maghrebi`, `maghrebi-abjad` |

Die ostasiatischen Stile behalten in allen drei Einstellungen ihre Namen aus [CSS Counter Styles](https://www.w3.org/TR/css-counter-styles-3/#limited-chinese). Die informellen chinesischen Zahlzeichen schreiben 十 für 10 bis 19 ohne vorangestelltes 一 (十二, aber 一百一十), ein einziges 零 für eine Folge von Nullen innerhalb der Zahl (一百零一, 一千零五十) und 万 oder 萬 für zehntausend, 亿 oder 億 für hundert Millionen (一万零一十). Nur `cjk-decimal` verwendet 〇, Ziffer für Ziffer, wie Jahreszahlen geschrieben werden (二〇二六, GB/T 15835—2011). Die Stämme enden bei 10, die Zweige bei 12 und die eingekreisten Ziffern bei 50; darüber hinaus wird die Zahl in Ziffern gedruckt. `一` und `壹` folgen der Schrift des `locale` des Dokuments: traditionell für `zh-Hant`, `zh-TW` oder `zh-HK`, sonst vereinfacht. Manche älteren Ausgaben schreiben 101 als 一百一 ohne 零; Postext druckt diese Form nicht.

Die japanischen Stile (seit postext 1.16) folgen ebenfalls CSS Counter Styles. `japanese-informal` schreibt 十 ohne vorangestelltes 一 und kein 零 für eine leere Stelle (百一, 千十), und `japanese-formal` die 大字 壱 弐 参 拾 百 阡, wobei 壱 vor jeder Einheit erhalten bleibt (壱拾, 壱百). CSS beendet beide bei 9.999; Postext fährt in Vierergruppen von Ziffern mit 万 億 兆 fort (formell 萬 億 兆), wobei jede Gruppe ihr 一 vor einer Einheit behält: 一万一 ist 10.001, 一億一万 100.010.000. In einem japanischen Dokument (`ja`, `ja-JP` …) bedeutet `一` dasselbe wie `japanese-informal`, sodass `第{1:一}章` dort 第百一章 druckt und in einem chinesischen 第一百零一章; `壹` bleibt bei den chinesischen formellen Zahlzeichen. Die Kana-Reihen sind die CSS-Listen: 48 Kana in Gojūon-Reihenfolge (ゐ und ゑ eingeschlossen) und 47 in der Reihenfolge des Iroha-Gedichts; nach dem letzten fahren sie mit zwei Kana fort (ああ, いい), und sie haben keine Null, sodass ein mit 0 nummerierter Punkt `0` druckt. Kanji-Ziffern im Stellenwertsystem (二〇二六), die Form von Jahreszahlen und Paginas, sind `cjk-decimal`.

Die arabischen Stile behalten die CSS-Namen, wo CSS einen hat (`arabic-indic`, `persian`; `urdu` und `maghrebi-abjad` aus den *Ready-made Counter Styles* des W3C werden als `persian` und `arabic-abjad-maghrebi` gelesen). `arabic` behält seine alte Bedeutung, die europäischen Ziffern. `arabic-abjad` schreibt die additiven Abdschad-Zahlzeichen des klassischen Arabisch und der Blattzählung von Handschriften, höchster Wert zuerst: 11 ist يا, 1446 غتمو, und die Anzahl der Tausender steht vor غ (2000 بغ, 1002 غب); über 999.999 hinaus wird die Zahl in Ziffern gedruckt. Die W3C-Notiz verwendet den Namen für eine Reihe aus 28 Buchstaben, in der 11 ك ist; Postext nennt diese Reihe `abjad`, die Buchstabenzählung von Listenpunkten in Abdschad-Reihenfolge (أ، ب، ج، د، هـ), und `hijai` die alphabetische Reihenfolge (أ، ب، ت، ث). Beide schreiben den ersten Buchstaben mit seiner Hamza (أ) und ein He, das allein stünde, als هـ mit einem Tatweel, sodass keiner als die Ziffern ١ und ٥ gelesen wird; über 28 hinaus verdoppeln sie sich, wie `lower-alpha` es tut (أأ, أب). Die maghrebinischen Werte folgen dem Merkspruch صعفض قرست ثخذ ظغش (ص 60, ض 90); die W3C-Liste vertauscht ص und ض. Ein einzelnes أ kann die beiden Buchstabenreihen nicht unterscheiden, deshalb sind ihre Kürzel ihre ersten vier Buchstaben: `{1:أبجد}`, `{1:أبتث}`. Die eigenen Ziffern eines Dokuments werden mit [`numerals`](https://postext.dev/de/docs/configuration-text.md#ziffern-des-dokuments) eingestellt.

Die übrigen Schreibweisen sind für Konfigurationen gedacht, die keine Typprüfung durchlaufen: JSON-Vorlagen und reines JavaScript. Die TypeScript-Typen nennen weiterhin nur die eigene Schreibweise jeder Einstellung – die, die die Sandbox schreibt und `resolveAllConfig` zurückgibt, die ostasiatischen Namen eingeschlossen –, sodass eine typisierte `PostextConfig` bei ihr bleibt und eine andere Schreibweise einen Cast braucht.

```js
// JavaScript or a JSON preset (in TypeScript, each setting's own spelling)
orderedLists: { numberFormat: 'decimal' },          // same as 'arabic'
page: { pageNumbering: { format: 'roman-lower' } }, // same as 'lower-roman'
resourceTypes: [{ id: 'plate', counterFormat: 'upper-roman', … }], // same as 'roman-upper'
```

`resolveAllConfig` wandelt die Listen- und Seitenformate in die Schreibweise ihrer jeweiligen Einstellung um – `'decimal'` wird in `orderedLists` zu `'arabic'` aufgelöst, `'roman-lower'` in `page.pageNumbering` zu `'lower-roman'` –, und `stripConfigDefaults` verwirft eine Schreibweise des Standardwerts. Die Bedienfelder der Sandbox zeigen jede der drei Einstellungen in ihrer eigenen Schreibweise, gleich welche die Konfiguration verwendet. Jeder andere Wert – `roman`, `01`, ein Tippfehler – nummeriert dezimal, statt `undefined` zu drucken, und wird als [Konfigurationswarnung](https://postext.dev/de/docs/configuration-fonts-colors-viewers.md#konfigurationswarnungen) gemeldet. Die Nummerierungsvorlagen für Überschriften nehmen dieselben Namen nach dem Doppelpunkt an (`{1:roman-upper}` ist `{1:I}`), neben ihrem eigenen mit Nullen aufgefüllten `{1:01}`.

## Layout

Die Eigenschaft `layout` steuert, wie die Spalten im Inhaltsbereich angeordnet werden.

> **Abbildung: Spalten, Spaltenabstand und Rand**
> Eine Seite, in drei Spalten geteilt: Jede Spalte ist der Inhaltsbereich für Text, die Spaltenabstände sind die senkrechten Lücken zwischen den Spalten, und der Rand ist die leere Fläche zwischen der Seitenkante und der ersten Spalte.
>
> *Spalten nehmen den Text auf. Spaltenabstände trennen sie. Ränder rahmen den Inhalt.*

> **Abbildung: Randsystem**
> Eine Seite mit unabhängigen Rändern oben, rechts, unten und links um den Inhaltsbereich.
>
> *Jede Seite des Blatts kann ihren eigenen Rand haben.*

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `layoutType` | `'single' \| 'double' \| 'oneAndHalf' \| 'multiple'` | `'double'` | Anordnung der Spalten. Einzelheiten zu jedem Typ finden Sie unten. |
| `columnCount` | `number` | `3` | In wie viele gleich breite Spalten ein Layout `'multiple'` den Fließtext teilt: eine ganze Zahl von 3 bis 8. Ein Wert außerhalb dieses Bereichs oder eine nicht ganze Zahl wird begrenzt und gemeldet (siehe [Layout-Typen](https://postext.dev/de/docs/configuration-page-layout.md#layout-typen)). Das eigene Layout `'multiple'` eines Überschriftenformats übernimmt die Spaltenzahl des Dokuments, sofern es keine eigene setzt. Seit postext 1.18. |
| `gutterWidth` | `Dimension` | `0.75 cm` | Horizontaler Abstand zwischen den Spalten. Gilt nur für mehrspaltige Layouts. |
| `sideColumnPercent` | `number` | `33` | Breite der Seitenspalte als Prozentsatz des Inhaltsbereichs. Jeder Wert, der beiden Spalten etwas Breite lässt, wird wie angegeben verwendet; einer, der das nicht täte, wird begrenzt, und der Build meldet es (siehe [Layout-Typen](https://postext.dev/de/docs/configuration-page-layout.md#layout-typen)). Gilt nur für das Layout `'oneAndHalf'`. |
| `sideColumnRole` | `'text' \| 'floats'` | `'text'` | Was die Seitenspalte enthält: Fließtext (er fließt nach der Hauptspalte dorthin) oder nur die mit `span: 'side'` platzierten Ressourcen und Kästen – eine Randspalte nur für Gleitobjekte. Nur `'oneAndHalf'`. Mit `'text'` wird ein Absatz, der von einer Spalte in die andere weiterläuft, für die Breite der Spalte, in der er fortgesetzt wird, neu umbrochen; bis postext 1.4 behielt er die Zeilen der Spalte, in der er begann, und eine für die Hauptspalte gesetzte Zeile ragte über die Seitenspalte hinaus, die sie abschnitt. |
| `sideColumnSide` | `'right' \| 'left' \| 'outer' \| 'inner'` | `'right'` | Kante des Inhaltsbereichs, an der die Seitenspalte steht. `'outer'` / `'inner'` folgen der Seitenparität, wenn die Ränder gespiegelt sind (die Außenkante eines Rectos ist seine rechte Kante, die eines Versos seine linke). Nur `'oneAndHalf'`. |
| `columnRule` | `ColumnRuleConfig` | deaktiviert | Optionale Linie, die zwischen den Spalten gezeichnet wird. Siehe unten. |
| `fitFiguresToPage` | `boolean` | `false` | Verkleinert eine Abbildung (Bitmap oder SVG), deren Bild, Legende und Anmerkung höher wären als der Inhaltsbereich, bis sie hineinpassen (ein Bild mit einem Sicherheitsbereich, `Resource.safeArea`, wird zuerst in voller Breite innerhalb dieses Bereichs beschnitten und nur dann verkleinert, wenn es immer noch nicht passt), und setzt eine Abbildung im Textfluss, die für den in ihrer Spalte verbleibenden Platz etwas zu hoch ist, kleiner (bis auf die Hälfte ihrer Breite, wobei die Legende die Satzbreite der Spalte behält), damit sie bei ihrem Text bleibt. Ein verkleinertes Bild steht in seinem Platz gemäß `placement.align`. Der HTML-Betrachter schaltet die Einstellung ein, da seine Seiten nur so hoch wie der Bildschirm sind; gedruckte Seiten werden für ihre Abbildungen bemessen. |
| `bitmapResolution` | `'document' \| 'file' \| number` | `'document'` | Wie eine Bitmap ohne eigenes `bitmap.resolution` ihre natürliche Druckgröße erhält. `'document'` liest ihre Pixel mit `page.dpi`; eine Zahl ist die ppi jeder solchen Bitmap (`300`: Ein Bild von 2400 px ist 203,2 mm breit, gleich welche dpi die Seite hat); `'file'` verwendet die Auflösung, die ihre Datei angibt (`bitmap.fileResolution`), wobei 72 und 96 als nicht gesetzt gelten, sonst `page.dpi`. Die Spalte begrenzt das Bild weiterhin, und ein kleineres wird nie vergrößert. Siehe [Dokumentformat › Bitmap-Größe](https://postext.dev/de/docs/document-format.md#bitmap-größe). Seit postext 1.24. |
| `floatShrink` | `FloatShrinkConfig` | `mode: 'never'` | Der Standardwert des Dokuments für `placement.shrink` eines gleitenden Bilds (`mode`: `'never'`, `'page'` oder `'slot'`) und `placement.minScale` (`minScale`, 0,7, wenn nicht gesetzt): Das Bild wird unter Beibehaltung seiner Proportionen auf den Platz seines Slots verkleinert, statt weiterzuwandern (siehe [Dokumentformat › Platzierung](https://postext.dev/de/docs/document-format.md#platzierung)). Die Platzierung einer Ressource und danach die `defaultPlacement` ihres Typs haben Vorrang. `fitFiguresToPage` begrenzt jede Abbildung auf den Inhaltsbereich; `floatShrink` betrachtet das Band, das ein Gleitobjekt tatsächlich einnähme, unter einem Kapitelauftakt, neben anderen Gleitobjekten oder über Fußnoten. Seit postext 1.24. |
| `wrap` | `TextWrapConfig` | `minTextWidth: 12em`, `minLinesBeside: 2`, `defaultWidth: 0.45` | Text, der neben einem Bild oder einem Kasten läuft, das schmaler als seine Spalte ist (`placement.wrap`, `wrap` eines Kastens): `gap`, der Abstand zwischen dem Element und dem Text (eine Fließtextzeile, wenn nicht gesetzt); `minTextWidth`, die schmalste Satzbreite, die der Text daneben einnehmen darf, eine Länge oder ein Anteil der Spalte (schmaler: Das Element nimmt sein Band ganz ein, mit einer Warnung `textWrap`); `minLinesBeside`, die Mindestzahl an Zeilen, für die sich das Setzen daneben lohnt; `defaultWidth`, der Anteil der Spalte, den ein umflossenes Element einnimmt, wenn es keine `width` setzt. Siehe [Dokumentformat › Textumfluss](https://postext.dev/de/docs/document-format.md#textumfluss). Seit postext 1.24. |
| `floatsAtCitingPage` | `boolean` | `false` | Der Standardwert des Dokuments für `placement.citingPage`: Ein Gleitobjekt `'top'` oder `'auto'` darf den Kopf der Seite (ein Gleitobjekt über die ganze Seitenbreite) oder der Spalte (ein Spaltengleitobjekt) einnehmen, auf der die Zeile landet, die es zuerst zitiert, statt des ersten freien Platzes nach dieser Zeile; der Text über dem Verweis rückt darunter nach unten (siehe [Dokumentformat › Platzierung](https://postext.dev/de/docs/document-format.md#platzierung)). Die Platzierung einer Ressource und danach die `defaultPlacement` ihres Typs haben Vorrang. Seit postext 1.25. |
| `maxTopFraction` | `number` | `0.7` | Der größte Anteil an der Höhe einer Spalte, von 0 bis 1, den ein Gleitobjekt am Kopf der Seite oder Spalte, die es zitiert, zusammen mit den dort bereits stehenden Gleitobjekten einnehmen darf, damit die Seite Platz für ihren Text behält (`\topfraction` von LaTeX). Ein Gleitobjekt, das mehr einnähme, kommt an seinen üblichen Platz. Seit postext 1.25. |
| `hugClosingFloats` | `boolean` | `true` | Auf der Schlussseite eines Kapitels (und des Dokuments) rücken die unter dem letzten Textband gesetzten Abbildungen und Tabellen über die ganze Seitenbreite nach oben, bis sie einen Gleitobjektabstand darunter stehen, gestapelt in ihrer Reihenfolge: Dort folgt ihnen nichts mehr. `false` lässt sie, wo ihre Platzierung sie hingesetzt hat, sodass ein Gleitobjekt mit `position: 'bottom'` auf der Schlussseite wie auf jeder anderen Seite am Seitenfuß endet – etwa in einem Datenblatt, dessen Umriss auf jeder Seite auf derselben Höhe endet. Seiten mit einer Seitenspalte verschieben sie nie. |
| `inlineResourceGap` | `'around' \| 'above'` | `'around'` | Wo eine Ressource im Textfluss (`placement.position: 'here'`, eingebettet mit `::resource`) den Gleitobjektabstand, eine Zeile, einhält. `'around'` hält ihn über und unter der Ressource ein, und der Text danach kehrt unter diesem Abstand ins Grundlinienraster zurück; eine Überschrift, eine Liste, ein Kasten oder eine weitere Ressource im Textfluss direkt danach teilt sich den Abstand darunter mit ihrem eigenen Abstand oberhalb, wobei der größere von beiden gilt. `'above'` hält ihn nur darüber ein: Der Text nach der Ressource setzt an der nächsten Rasterlinie fort, wie nah diese auch ist – irgendwo zwischen null und einer Zeile –, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel eine Ressource einbetten, werden mit `'above'` gelesen, damit sich ihre Seiten nicht verschieben (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-programmatic-usage.md#pakete-die-postext-14-oder-früher-geschrieben-hat)). Eine für 1.4 in Code geschriebene Konfiguration behält den alten Abstand, indem sie `'above'` selbst setzt oder über `pinLegacyInlineGap` aus `postext/bundle`. |
| `inlineResourceGapInBoxes` | `boolean` | `true` | Ob eine Ressource im Textfluss innerhalb eines Kastens (`:::callout`) den Abstand einhält, den `inlineResourceGap` festlegt, eine Zeile des eigenen Texts des Kastens: über der Ressource und mit `'around'` auch darunter, wobei der größere Wert aus diesem Abstand und dem eigenen Abstand des nächsten Blocks gilt. Am Kopf oder Fuß des Kastens oder eines Fragments eines geteilten Kastens setzt stattdessen der Innenabstand die Ressource ab, und es wird kein Abstand hinzugefügt. `false` setzt die Ressource direkt unter den Text davor und den Text danach direkt unter die Ressource, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel eine Ressource in einem Kasten einbetten, werden mit `false` gelesen (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-programmatic-usage.md#pakete-die-postext-14-oder-früher-geschrieben-hat)); in Code bewirkt `pinLegacyBoxResourceGap` aus `postext/bundle` dasselbe. |
| `inlineCaptionSide` | `boolean` | `true` | Ob eine im Text gesetzte Ressource (`position: 'here'`) `placement.captionSide` so übernimmt wie ein Spaltengleitobjekt. In einem Layout mit anderthalb Spalten, dessen Seitenspalte Gleitobjekten vorbehalten ist (`sideColumnRole: 'floats'`), kommen ihre Legende und Anmerkung in die Seitenspalte, auf Höhe der Oberkante ihres Körpers, wo diese Spalte daneben frei ist; der Block in der Textspalte ist dann nur so hoch wie der Körper allein. Wo die Seitenspalte belegt ist und auf einer Seite ohne Seitenspalte bleibt die Legende unter dem Körper. `false` beschränkt seitliche Legenden auf Spaltengleitobjekte, wie bis postext 1.27. Seit postext 1.28. Konfigurationen, die von früheren Versionen mit einem Layout `'oneAndHalf'` gespeichert wurden und deren Kapitel eine Ressource einbetten, werden mit `false` gelesen; in Code bewirkt `pinLegacyInlineCaptionSide` aus `postext/bundle` dasselbe. |
| `boxChildSplitMinLines` | `number` | `2` | Mindestzahl an Zeilen eines Absatzes oder Listenpunkts, die ein Schnitt darin auf jeder Seite stehen lässt, wenn ein Kasten geteilt wird (`splitMinLines`, unter [Kastenstile](https://postext.dev/de/docs/configuration-styles.md#kastenstile), zählt weiterhin alle Zeilen des Kastens auf jeder Seite des Schnitts). Eine ganze Zahl, mindestens 1. Mit dem Standardwert lässt ein Schnitt nie eine einzelne Zeile eines Absatzes oder Punkts am Fuß einer Spalte oder am Kopf der nächsten zurück; ein Kastenformat, dessen `splitMinLines` niedriger ist, setzt stattdessen die Grenze. `1` erlaubt einem Schnitt, eine Zeile des Absatzes oder Punkts auf einer Seite zu lassen, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel ein `:::callout` enthalten, werden mit `1` gelesen (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-programmatic-usage.md#pakete-die-postext-14-oder-früher-geschrieben-hat)); in Code bewirkt `pinLegacyBoxChildCut` aus `postext/bundle` dasselbe. |
| `flowColumns` | `boolean` | `true` | Ein Zaun `:::columns` außerhalb eines Kastens setzt seine Blöcke in Unterspalten der Textspalte (oder mit `span="page"` über die ganze Seite), und eine Gruppe, in einem Kasten oder im Text, wird zwischen ihren Unterspalten geschnitten, wenn sie nicht passt, und in der nächsten Spalte oder auf der nächsten Seite fortgesetzt (siehe [Dokumentformat › `:::columns`](https://postext.dev/de/docs/document-format.md#columns)). `false` ignoriert den Zaun außerhalb eines Kastens und schneidet nie innerhalb einer Gruppe, wie bis postext 1.24; Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel einen Zaun `:::columns` enthalten, werden mit `false` gelesen; in Code bewirkt `pinLegacyFlowColumns` aus `postext/bundle` dasselbe. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.25. |
| `floatsUnderOpener` | `boolean` | `true` | Unter einem Kapitelauftakt über die ganze Seitenbreite (eine Überschriftenebene oder ein Format mit `span: 'page'`), der über zwei oder mehr Textspalten steht, ist der Kopf der eigenen Spalte des Auftakts, direkt unter seinem Band, ein Platz für ein Gleitobjekt `'top'` oder `'auto'`, auf Höhe der Köpfe der anderen Spalten: Ein gleitender Kasten, dessen Zaun direkt nach dem Auftakt steht, oder eine dort eingebettete Ressource steht unter dem Auftakt in der ersten Spalte (mit `columns` ab dort über mehrere Spalten), und der Text der Spalte beginnt darunter. Ein im laufenden Text zitiertes Gleitobjekt folgt weiterhin der Zeile, die es zitiert. `false` bietet dort keinen Platz an, sodass ein solches Gleitobjekt ab der zweiten Spalte landet, wie bis postext 1.24; Konfigurationen, die von früheren Versionen gespeichert wurden und eine Überschrift über die ganze Seitenbreite setzen, werden mit `false` gelesen; in Code bewirkt `pinLegacyOpenerHeadFloats` aus `postext/bundle` dasselbe. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.25. |
| `openerFloats` | `'allow' \| 'warn' \| 'avoid'` | `'allow'` | Gleitobjekte auf einer Auftaktseite: der Seite, mit der ein Teil beginnt, der Seite, die eine Überschrift mit ihrem eigenen Umbruch beginnt (`breakBefore` oder eine Überschrift mit `span: 'page'`, die eine Seite eröffnet), und der ersten Seite eines Dokuments, das mit einer Überschrift beginnt. Ein Gleitobjekt ist eine Abbildung, eine Tabelle oder ein Comicstreifen mit gleitender Platzierung oder ein `:::callout`, der an den Kopf oder Fuß einer Seite gleitet, gleich ob er eine Spalte, die Seitenbreite oder die Seitenspalte einnimmt; eine im Textfluss eingebettete Ressource (`'here'`), ein Kasten `'fixed'` und ein Kasten mit `span: 'side'` sind keine. `'allow'` setzt dort Gleitobjekte wie auf jeder Seite. `'warn'` umbricht die Seite genauso und meldet jedes Gleitobjekt darauf (eine Warnung `openerFloat`, siehe [Warnungen im Dokument](https://postext.dev/de/docs/configuration-programmatic-usage.md#warnungen-im-dokument)). `'avoid'` hält die Auftaktseite frei: Ein Gleitobjekt, das dort landen würde, nimmt den ersten freien Platz danach ein, sodass die Seite nur ihren Auftakt und Text enthält. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.28. |
| `writingMode` | `'horizontal-tb' \| 'vertical-rl'` | `'horizontal-tb'` | Wie die Zeilen laufen. `'vertical-rl'` setzt chinesischen und japanischen Text vertikal: die Zeichen von oben nach unten, jede Zeile links von der vorigen. Das `layout` eines Überschriftenformats übernimmt die Einstellung, sofern es keine eigene setzt, sodass ein horizontaler Anhang auf ein vertikales Buch folgen kann. Siehe [Vertikale Schrift](https://postext.dev/de/docs/configuration-page-layout.md#vertikale-schrift). |

### Vertikale Schrift

Mit `writingMode: 'vertical-rl'` wird eine Seite wie eine horizontale Seite umbrochen, die eine Vierteldrehung im Uhrzeigersinn gedreht ist. Der Fluss wird in einem Rahmen gesetzt, der so breit ist, wie das Blatt hoch ist; seine Zeilen sind die Spalten des vertikalen Texts, von rechts gelesen, und alles, was die Engine mit Zeilen tut (Umbruch, Ausschluss, Gleitobjekte, Fußnoten, Regeln zum Zusammenhalten), funktioniert in diesem Rahmen. Auf dem Blatt gilt also:

- Eine Spalte des Layouts ist eine **Stufe** (栏): `layoutType: 'double'` ergibt zwei übereinander gestapelte Stufen, von oben rechts gefüllt; `gutterWidth` ist der Abstand zwischen ihnen und die Spaltenlinie eine waagerechte Linie zwischen ihnen. Stufen werden am Ende eines Kapitels nicht ausgeglichen ([clreq §7.1.3.4](https://www.w3.org/TR/clreq/#x7-1-3-4-handling-of-spaces-just-before-the-new-recto-page-breaks-and-new-edges)): Der Spaltenausgleich ist in einem vertikalen Dokument ausgeschaltet, sofern `headings.balancing.enabled` nicht gesetzt ist.
- Was der Fluss „oben“ nennt, ist die **rechte** Kante des Blatts, wo das Lesen beginnt: Ein Gleitobjekt oben steht rechts auf der Seite, ein Gleitobjekt unten links, ein Kapitelauftakt über die ganze Seite ist ein Band an der rechten Kante entlang, Fußnoten landen am linken Ende jeder Stufe. Ein Gestaltungselement, das am Kopf der Seite verankert ist (eine Überschriftengestaltung, ein fest platzierter Kasten), ist an der rechten Kante verankert. `sideColumnSide` `'left'` ist die obere Stufe, `'right'` die untere; `'outer'` und `'inner'` gelten als `'right'` und `'left'`.
- Die Ränder des Flusses sind die gedrehten Ränder des Blatts: Der rechte Rand ist der Kopf des Flusses, der obere Rand seine linke Seite. `page.margins` behalten ihre Namen auf dem Blatt.
- Kolumnentitel, Paginas, Schnittmarken und der Seitenhintergrund bleiben auf dem Blatt und werden horizontal gesetzt, wie clreq es für vertikale Bücher beschreibt.
- **Abbildungen und Tabellen stehen aufrecht.** Eine Abbildung füllt die Höhe ihrer Stufe, soweit ihre Legende es zulässt, höchstens so breit wie die Seite; die Breite, die sie einnimmt, ist der Platz, den sie im Fluss belegt. Ihre Legende wird horizontal darunter gesetzt, ebenso die Zellen einer Tabelle: Beide werden als horizontaler Text gemessen. Eine Tabelle wird aufrecht über die Seite gesetzt, ihre Zeilen auf die Stufe zugeschnitten, wenn sie höher ist. `placement.align` setzt eine Abbildung an den Kopf (`'left'`), in die Mitte oder an den Fuß ihrer Stufe. Ein `placement.rotate` wird dort, wo die Abbildung in vertikalem Text zuerst erwähnt wird, nicht angewendet: Der Build meldet eine Inhaltswarnung `rotateIgnoredVertical`. Ein horizontaler Abschnitt des Buchs (ein Überschriftenformat, dessen `layout` `'horizontal-tb'` setzt) dreht seine Abbildungen wie gewünscht.
- Ein Bild einer Gestaltung (die Illustration eines Kapitelauftakts, einer Teiltitelseite) steht ebenfalls aufrecht. Sein Kasten im Fluss wird mit vertauschter Breite und Höhe des Bilds bemessen, sodass `size.width` angibt, wie weit das Bild die Spalte hinunterreicht, und seine Breite auf dem Blatt sich aus seinen Proportionen ergibt.
- Zeichen: Han-Zeichen, Kana und Formen voller Breite stehen aufrecht, je ein Geviert; lateinische Wörter und Zahlen werden mit ihren horizontalen Breiten seitwärts gedreht; Satzzeichen nehmen die vertikale Form der Schrift an. Pausen- und Schlusszeichen werden nie gedreht: Eine Schrift für das Festland setzt 、。，． in die obere rechte Ecke der Zelle und ！？：； in ihre rechte Hälfte, eine Schrift für Taiwan oder Hongkong zentriert sie (`cjk.region`). Klammern nehmen ihre vertikalen Formen an, und “ ” ‘ ’ werden in Festlandtext als 『』「」 gelesen. Striche, Auslassungspunkte und der Wellenstrich nehmen die vertikale Form der Schrift an, wo sie eine hat (Noto CJK ordnet die von — zusammen mit `fwid` dem Feature `vert` zu: eine Linie mitten durch die Zelle nach unten), sonst werden sie gedreht, mit ihrer Farbe zentriert auf der Achse der Spalte. Ein 破折号 (——) in chinesischem Text ist eine einzige Linie die Spalte hinunter: Seine vertikalen Formen ließen an beiden Enden jeder Zelle eine Lücke, deshalb wird jeder Strich mit der Zeile gedreht und wie in horizontalem Text gedehnt (siehe [Breite der Satzzeichen](https://postext.dev/de/docs/configuration-east-asian.md#breite-der-satzzeichen)). Eine Zahl mit höchstens zwei Ziffern steht in einer aufrechten Zelle, es sei denn, sie steht in einem lateinischen Satz, dessen Wörtern sie folgt (siehe [Zahlen im vertikalen Text](https://postext.dev/de/docs/configuration-east-asian.md#zahlen-im-vertikalen-text)). Der Mittelpunkt (·) nimmt in Festlandtext eine halbe Zelle ein und in Text aus Taiwan und Hongkong eine ganze. Die Zeichen, die Unicode aufrecht setzt (× © ± § ℃ ① und ähnliche), stehen in einer eigenen Zelle, auch innerhalb einer Zahl: `3×4` sind 3 und 4 seitwärts mit einem aufrechten × dazwischen. Ein Apostroph oder ein Mittelpunkt zwischen zwei Buchstaben eines lateinischen Worts (`don’t`, `l·l`) bleibt im Wort, seitwärts. Ein lateinischer Absatz in einem vertikalen Fluss folgt denselben Regeln. Formeln im Textfluss, Chips und Farbfelder werden mit der Zeile seitwärts gedreht.
- Jedes Zeichen wird so gemessen, wie es gezeichnet wird: Eine Zelle rückt um ihre Zelle die Zeile hinunter, eine seitwärts gedrehte Folge um ihre horizontale Breite. Text, der auf dem Blatt horizontal bleibt (Kolumnentitel, Paginas, Legenden, Tabellenzellen), wird horizontal gemessen.
- Die [Breite der Satzzeichen](https://postext.dev/de/docs/configuration-east-asian.md#breite-der-satzzeichen), die [hängenden Satzzeichen](https://postext.dev/de/docs/configuration-east-asian.md#hängende-satzzeichen) und der [Abstand zwischen Han und Latein](https://postext.dev/de/docs/configuration-east-asian.md#abstand-zwischen-han-und-latein) gelten die Zeile hinunter so, wie sie quer gelten. Der Leerraum vor einer Glyphe liegt über ihr und der danach unter ihr: Ein 、 nach Kaiming nimmt eine halbe Zelle ein, `」「` werden auf anderthalb Zellen gestaucht, eine öffnende Klammer, die am Zeilenanfang gekürzt wird, beginnt eine halbe Zelle höher, ein hängendes 。 steht unter dem Fuß seiner Zeile, und der Abstand zwischen Han und Latein beträgt über und unter einem seitwärts gedrehten Wort ein Viertelgeviert der Spalte. `：；？！` behalten in vertikalem Text in jeder Region eine ganze Zelle.
- Das [Zeichenraster](https://postext.dev/de/docs/configuration-east-asian.md#zeichenraster) zählt Zeichen die Zeile hinunter und Zeilen quer über die Seite: `charsPerLine` legt fest, wie lang eine Stufe ist, `linesPerPage`, wie viele Zeilen eine Seite fasst, und `layoutType: 'double'` ergibt zwei Stufen aus ganzen Zeichen mit einem Abstand aus ganzen Geviert dazwischen.

Für Host-Anwendungen, die das Layout auslesen: Eine vertikale Seite trägt `VDTPage.flow`. Ihr `contentArea`, ihre Spalten, Blöcke, Zeilen, Gleitobjekte, Fußnotenbereiche, das Auftaktband und die Gestaltungsüberlagerungen der Blöcke liegen in Flusskoordinaten; `width`, `height`, `header` und `footer` liegen auf dem Blatt. `flowToPage`, `pageToFlow`, `flowRectToPage` und `pageRectToFlow` rechnen zwischen beiden um, und `verticalOrientation(char, region)` gibt an, wie ein Zeichen steht. `flow.centralBaselines` gibt pro Schriftfamilie die Achse an, auf der das Layout aufrechte Zeichen zentriert hat: die Mitte der Farbe von 中, dessen langer Strich über die Höhe des Geviertkastens läuft (0,38 em über der Grundlinie in Noto Serif und Noto Sans, SC und TC gleichermaßen) und das jede chinesische, japanische und koreanische Schrift enthält. Jede Zeile wird auf dieser Achse zentriert: Die Grundlinie einer vertikalen Zeile liegt eine halbe Zeilenhöhe plus die zentrale Grundlinie der Familie unter der Oberkante ihres Zeilenkastens (die einer horizontalen Zeile 0,8 ihrer Zeilenhöhe darunter), sodass eine Spalte von Zeichen in der Mitte ihres Rasterschritts steht und eine Linie, die im Abstand eines ganzen Rasterschritts zwischen zwei Spalten gezeichnet wird, genau in die Mitte zwischen sie fällt. Ein vertikaler Gestaltungstext wird in seinen eigenen Zeilen genauso gesetzt. Der Canvas zeichnet eine vertikale Seite selbst; um Satzzeichen mit den eigenen vertikalen Formen der Schrift zu zeichnen, lädt eine Browser-Host-Anwendung einmal pro Familie eine Zwillingsschrift, in der diese eingeschaltet sind: `loadVerticalAlternates(family, faces)`, wobei `faces` die Quellen (URLs oder Bytes) und Deskriptoren der Familie sind. Der Zwilling wird nur dort behalten, wo der Browser das Feature auf Canvas-Text anwendet (Chrome 140 und neuer): Er zeichnet 「（《 mit dem Zwilling und mit einer Kopie derselben Schnitte, die ohne das Feature geladen wurden, in Schriftstärke und Stil der angegebenen Schnitte, und behält den Zwilling, wenn sich ihre Farbe unterscheidet. Ein späterer Aufruf für weitere Schnitte einer Familie, deren Zwilling verwendet wird (der fette nach dem normalen), fügt sie ihm hinzu. Die Sandbox tut das für jede Familie eines vertikalen Dokuments. Ohne Zwilling werden Klammern um ihren Geviertkasten gedreht und Pausen- und Schlusszeichen des Festlands innerhalb ihrer Zelle dorthin verschoben, wo die vertikalen Formen der Schrift sie hinsetzen: 、。，． in die obere rechte Ecke (innerhalb von 0,07 em der vertikalen Formen von Noto Serif SC), ！？：； ein halbes Geviert nach rechts und etwas nach oben (innerhalb von 0,02 em). PDF und HTML setzen dieselbe Seite: siehe [Vertikaler Text im PDF](https://postext.dev/de/docs/configuration-programmatic-usage.md#vertikaler-text-im-pdf) und die Tabelle unter [Wie sich die HTML-Ausgabe von Canvas und PDF unterscheidet](https://postext.dev/de/docs/configuration-programmatic-usage.md#wie-sich-die-html-ausgabe-von-canvas-und-pdf-unterscheidet). Zelle für Zelle mit HarfBuzz verglichen (vertikales Layout mit `vert`) in Noto Serif TC und SC, steht jedes Zeichen von 「賈雨村」云云，宜乎？故曰！；：、。“引”‘單’…… im Canvas und im PDF innerhalb von 0,02 em davon und im HTML innerhalb von 0,05 em (Chrome zentriert eine gedrehte Glyphe auf die Mitte von Ober- und Unterlänge der Schrift, die bei Noto 0,05 em über der Mitte ihres Geviertkastens liegt). `flow.dashAdvances` gibt pro Familie die horizontale Dickte in Geviert jedes Strichs an, den die Seite dehnt, um seine Zelle zu füllen (— – ― ⸺ ⸻ －), für einen Renderer ohne eigene Schriftmetriken: Das HTML dehnt den Strich danach, so wie Canvas und PDF es anhand ihrer eigenen tun. Auch Kolumnentitel und Paginas lassen sich vertikal setzen: siehe [Vertikale Textelemente](https://postext.dev/de/docs/configuration-page-layout.md#vertikale-textelemente).

### Spaltenlinie

Zeichnet eine dünne senkrechte Linie in den Spaltenabstand, um die Spalten optisch zu trennen.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | Ob die Spaltenlinie gezeichnet wird. |
| `color` | `ColorValue` | `#cccccc` | Farbe der Linie. |
| `lineWidth` | `Dimension` | `0.5 pt` | Stärke der Linie. |

Unter einer Überschrift über die ganze Seitenbreite (`span: 'page'`) beginnt die Linie dort, wo der Text der Spalten beginnt, unter dem Band der Überschrift, gleich ob der Standardauftakt oder eine eigene Gestaltung das Band zeichnet. Bis postext 1.4 lief sie von der Oberkante des Textblocks durch das Band.

Ein Überschriftenformat kann in seinem `layout` eine eigene Linie setzen (siehe [Überschriftenstile](https://postext.dev/de/docs/configuration-styles.md#überschriftenstile)), und die Seiten seines Abschnitts zeichnen diese. Ein Feld, das das Format nicht setzt, übernimmt den Wert des Dokuments, sodass ein Abschnitt, der nur seine Spalten ändert, die Linie des Dokuments behält. Bis postext 1.4 wurde die Linie eines Formats nie gezeichnet: Jede Seite zeichnete die des Dokuments.

### Layout-Typen

- **`'single'`** – Eine Spalte über die ganze Breite des Inhalts. Am besten für schmale Seiten oder textlastige Inhalte mit langen Absätzen.

- **`'double'`** – Zwei gleich breite Spalten. Das klassische redaktionelle Layout – hält die Zeilenlänge im optimalen Bereich von 40–50 Zeichen für angenehmes Lesen.

- **`'oneAndHalf'`** – Ein asymmetrisches Layout mit einer Hauptspalte und einer schmaleren Seitenspalte. Die Seitenspalte (gesteuert durch `sideColumnPercent`) eignet sich für Marginalien, kleine Abbildungen oder ergänzende Inhalte. Werte zwischen 25–40 % funktionieren gut, und ein schmaler Kanal für Zeilennummern oder Randzeichen braucht etwa 10–15 %. Die Seitenspalte ist `sideColumnPercent` % der Inhaltsbreite, und die Hauptspalte ist das, was nach dem Spaltenabstand übrig bleibt – bei 50 % ist die Seitenspalte also um einen Spaltenabstand breiter als die Hauptspalte. Jeder Wert wird wie angegeben umgesetzt, solange beide Spalten mindestens 1 % der Inhaltsbreite behalten; einer, der eine der beiden schmaler ließe – 0 oder weniger, oder einer so breit, dass die Hauptspalte hinter dem Spaltenabstand verschwindet –, wird auf den nächsten Wert begrenzt, der beide erhält, und ein Wert, der keine Zahl ist, erhält den Standardwert 33. Die `configWarnings` des Dokuments enthalten dann `{ kind: 'sideColumnPercentClamped', path: 'layout.sideColumnPercent', value, used }` – der Pfad des eigenen `layout` eines Überschriftenformats nennt das Format, wie in `headingStyles[2].layout.sideColumnPercent`, und wird an den Rändern dieses Formats gemessen –, die die Sandbox in ihrem Bedienfeld **Prüfungen** auflistet; `collectConfigWarnings(config)` gibt dieselbe Liste zurück, ohne etwas zu umbrechen. Ein Layout, das nicht `'oneAndHalf'` ist, liest den Wert nie und meldet ihn nie. Mit `sideColumnRole: 'floats'` betritt der Fließtext die Seitenspalte nie: Sie wird zu einem Kanal für die Abbildungen, Tabellen und Kästen, die mit `span: 'side'` platziert sind. Eine seitliche Abbildung oder Tabelle stapelt sich vom Kopf des Kanals aus auf der Seite, die sie zuerst zitiert – die Randabbildung eines Lehrbuchs steht oben auf ihrer Seite, auch wenn der Text sie weiter unten zitiert; eine, die nicht in den Rest des Kanals passt, wartet auf den der nächsten Seite. Ein seitlicher Kasten stapelt sich neben dem Text, den er unterbricht, und wenn der Rest des Kanals ihn dort nicht aufnehmen kann, rückt er bis zur tiefsten Position hinauf, an der er noch passt (sein Fuß auf dem Fuß des Kanals), oder wartet auf die nächste Seite. Wenn der Text nach dem Zaun eines Kastens auf der nächsten Seite weitergeht (die Spalte ist voll, oder die Umbruchregeln verschieben diesen Text), bleibt der Kasten an seinem Zaun, neben dem Text davor; ein Format mit `sideAtColumnEnd: 'after'` setzt ihn stattdessen auf Höhe der ersten Zeile des Texts nach dem Zaun, in den Kanal der nächsten Seite, wie es Zeilennummern und Randüberschriften brauchen, die vor ihrer Zeile geschrieben werden. Ein Element einer Überschriftengestaltung, das im Kanal steht – eine Kapitelziffer, die im Außensteg verankert ist –, wird ebenfalls vom Stapel freigehalten (siehe [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe)). Gleitobjekte und Kästen mit `span: 'page'` überqueren weiterhin beide Spalten, und ein Spaltengleitobjekt mit `placement.captionSide` setzt seine Legende in den Kanal, auf Höhe der Abbildung. Zusammen mit gespiegelten Rändern und `sideColumnSide: 'outer'` liegt der Kanal am Außenrand jeder Seite – die Randspalte eines Lehrbuchs. Ab postext 1.28 setzt eine im Text gesetzte Abbildung oder Tabelle (`position: 'here'`) mit `captionSide` ihre Legende ebenfalls in den Kanal (`inlineCaptionSide`).

- **`'multiple'`** – Drei bis acht gleich breite Spalten, so viele, wie `columnCount` angibt (Standardwert 3): das Raster von Zeitungen und vielen Zeitschriften (seit postext 1.18). Jede Spalte ist `(content width − (n − 1) × gutterWidth) / n` breit. Der Text läuft wie in einem zweispaltigen Layout von einer Spalte in die nächste weiter; die Spaltenlinie wird in jedem Spaltenabstand gezeichnet, der Spaltenausgleich gleicht alle Spalten auf der Schlussseite eines Kapitels und vor einem Kasten über die ganze Seitenbreite aus, Fußnoten funktionieren in jeder Spalte, und Abbildungen, Kästen und Überschriften über die ganze Seitenbreite überqueren die ganze Seite. Eine Abbildung oder ein gleitender Kasten kann auch nur einige der Spalten einnehmen: `placement.columns` (siehe [Ressourcentypen](https://postext.dev/de/docs/configuration-resources.md#ressourcentypen)) und `columns` eines Kastenformats. Ein `columnCount` außerhalb von 3–8 oder eine nicht ganze Zahl wird gerundet und auf die nächste gültige Spaltenzahl begrenzt (ein Wert, der keine Zahl ist, erhält 3), und die `configWarnings` des Dokuments enthalten `{ kind: 'columnCountClamped', path: 'layout.columnCount', value, used }` (der Pfad des eigenen `layout` eines Überschriftenformats nennt das Format, wie in `headingStyles[1].layout.columnCount`). Ein Layout eines anderen Typs liest den Wert nie. Ein Überschriftenformat, dessen `layout` `'multiple'` ist, übernimmt den `columnCount` des Dokuments, sofern es keinen eigenen setzt, sodass eine Zeitung, die in fünf Spalten gesetzt ist, ihre Meinungsseiten in vier setzen kann.

## Kopf- und Fußzeilen

Die Eigenschaften `header` und `footer` steuern die Plätze für Kopf- und Fußzeile jeder Seite. Kopf- und Fußzeilen werden **innerhalb der vorhandenen Seitenränder** dargestellt – sie reservieren keinen zusätzlichen Platz und verkleinern den Inhaltsbereich nicht.

**Container-Rahmen.** Ein Element, das an `'container'` verankert ist, wird in das Randband zwischen dem Satzspiegel und der Schnittkante gesetzt und erstreckt sich über die Breite des Inhaltsbereichs. Der Container der Kopfzeile reicht von der **oberen Schnittkante** bis zur Oberkante des Satzspiegels; der Container der Fußzeile von der Unterkante des Satzspiegels bis zur **unteren Schnittkante**. Anker `top-*` der Kopfzeile und Anker `bottom-*` der Fußzeile messen also von der Schnittkante aus, Anker `bottom-*` der Kopfzeile und Anker `top-*` der Fußzeile dagegen von der Kante des Satzspiegels. Der Container schließt nie den Anschnitt oder das Band der Schnittmarken ein, sodass eine Kopf- oder Fußzeile auf der beschnittenen Seite an derselben Stelle landet, ob `page.cutLines` ein- oder ausgeschaltet ist. Verankern Sie an `'page'` (der Trim-Box) oder `'bleed'`, um über die Breite des Inhaltsbereichs hinaus oder in den Anschnitt zu reichen.

Die Plätze verwenden das einheitliche Modell der **Gestaltungsplätze**: Jedes Element hat eine `placement` mit einem `anchor` (am Container oder über `#id` an einem anderen Element), einem optionalen `offset` und einer optionalen `size`. Die alten flachen Felder `align`, `marginFromBody`, `marginFromEdge` und `width: 'full'` werden bei der Eingabe weiterhin akzeptiert und automatisch in die neue Form überführt; die entsprechende Beschreibung in der neuen Form ist unten dokumentiert.

Jeder Platz enthält eine Liste von Elementen der Arten **Text**, **Linie** und **Kasten**. Die Reihenfolge im Array ist die Zeichenreihenfolge (das erste Element wird zuerst gezeichnet, das letzte obenauf). Das gilt unabhängig von den Ankern: Ein Element kann an einem später aufgeführten verankert sein (`anchor.to: '#ttl'`), sodass ein Hintergrundkasten zuerst kommen und trotzdem an dem Text ausgerichtet werden kann, hinter dem er liegt.

**Mitgelieferte Standardwerte.** Wenn `header` oder `footer` `undefined` ist, wendet postext einen sinnvollen mitgelieferten Standard an statt eines leeren Platzes:

- **Standard-Kopfzeile:** `{title}` rechtsbündig auf ungeraden Seiten, `{chapterTitle}` linksbündig auf geraden Seiten und eine Linie über die ganze Breite – alles in der Hauptfarbe der Palette, Open Sans 8 pt/600, `marginFromBody` `16pt` (Text) / `13pt` (Linie).
- **Standard-Fußzeile:** `{pageNumber}` zentriert auf jeder Seite in der Hauptfarbe der Palette, Open Sans 8 pt/600, `marginFromBody` `16pt`.

Um auf die mitgelieferten Standardwerte zu verzichten, setzen Sie `header: { elements: [] }` (oder `footer: { elements: [] }`). Ein ausdrücklich leeres Array `elements` bleibt als „keine Elemente“ erhalten – nur `undefined` löst die Standardwerte aus.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `elements` | `HeaderFooterElement[]` | mitgelieferte Standardwerte bei `undefined`; `[]` schaltet ab | Geordnete Liste von Text- und Linienelementen. |

### Textelemente

Textelemente stellen eine Vorlagenzeichenkette dar, in der Platzhalter ersetzt werden. Platzhalter verwenden die Syntax `{name}`; `{{` und `}}` geben wörtliche geschweifte Klammern aus.

Die Standardwerte in der folgenden Tabelle sind die eines Textelements, das Sie selbst hinzufügen. Die oben unter **Mitgelieferte Standardwerte** beschriebene Kopf- und Fußzeile sind fertige Elemente mit eigenen Werten (Open Sans 8 pt/600 in der Hauptfarbe der Palette), nicht die Standardwerte der Elemente.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `kind` | `'text'` | — | Unterscheidungsmerkmal. |
| `id` | `string` | — | Stabile ID, eindeutig innerhalb des Platzes. Andere Elemente verankern sich daran mit `anchor.to: '#id'`. Die Sandbox vergibt beim Anlegen eine. |
| `content` | `string` | `''` | Vorlagenzeichenkette. Unterstützt die unten aufgeführten Platzhalter sowie `{attr.<key>}` – ein Attribut, das in der H1-Zeile des aktuellen Kapitels steht (`# Title {author="I. Zango"}`). Ein fehlendes Attribut wird ohne Warnung zu einer leeren Zeichenkette aufgelöst. Ein Zeilenumbruch – oder die beiden Zeichen `\n`, in der Vorlage oder in einem Attributwert geschrieben – beginnt immer eine neue Zeile, gleich welcher `overflow` gilt. Text, den ein Platzhalter aus dem Dokument übernimmt (ein Titel, ein Feld des Frontmatters), wird so gedruckt, wie er geschrieben ist: Dort beginnt nur ein echter Zeilenumbruch, etwa ein Titelumbruch, eine neue Zeile. |
| `align` | `'left' \| 'center' \| 'right' \| 'justify' \| 'start' \| 'end'` | `'center'` | Horizontale Ausrichtung der Zeilen im Kasten des Elements. `'justify'` dehnt die Wortzwischenräume jeder umbrochenen Zeile außer der letzten jedes Absatzes, sodass die Zeile den Kasten füllt; die Zeilen neben einer Initiale füllen den Platz daneben. Mit `hyphenate` wird ein Wort, das nicht in den Rest einer Blocksatzzeile passt, zusätzlich an einer Silbe getrennt, um sie zu füllen. Die letzte Zeile eines Absatzes, eine Zeile ohne dehnbaren Zwischenraum und ein Text, der nicht umbricht, werden linksbündig gesetzt. Text im Blocksatz wird Absatz für Absatz umbrochen, sodass Leerzeilen zwischen Absätzen als eine zählen. Canvas und PDF setzen jedes Wort dorthin, wo das Layout es platziert hat; das HTML vergrößert die Zwischenräume mit `word-spacing`. `'start'` und `'end'` folgen der `direction` des Texts: rechts und links bei einem Text von rechts nach links. `'left'` und `'right'` sind die eigenen Seiten des Kastens; in einer Gestaltung, die im Fluss einer Seite von rechts nach links umbrochen wird (ein Auftaktband, eine Überschriftengestaltung), ist der Fluss gespiegelt, sodass sie dessen Anfang und Ende sind, wie im Fließtext. |
| `direction` | `'ltr' \| 'rtl' \| 'auto'` | die des Dokuments | Grundrichtung des Texts: wohin seine neutralen Zeichen gehen, in welcher Reihenfolge seine Folgen auf einer Zeile stehen und welche Seiten `'start'` und `'end'` bedeuten. `'auto'` liest den ersten stark gerichteten Buchstaben des aufgelösten Texts und greift sonst auf die [`direction`](https://postext.dev/de/docs/configuration-text.md#schreibrichtung) des Dokuments zurück. Arabische und hebräische Folgen laufen unabhängig von der Grundrichtung von rechts nach links. Ein Text, der einen arabischen Buchstaben enthält, wird nie gesperrt (`letterSpacing` wird für den ganzen Text ignoriert), und seine Wörter werden beim Umbrechen oder Kürzen nie getrennt; ein Wort, das breiter als der Kasten ist, läuft über und wird als `unbreakableWordOverflow` gemeldet. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | Auf welchen Seiten das Element erscheint (Parität der Seitenzahl: Seite 1 ist ungerade). |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | Auf welchen *Seitenrollen* das Element erscheint, kombiniert mit `parity`. Nach der Platzierung wird jede Seite eingeordnet als `'blank'` (Auffüllung zur Parität oder als Trennseite, oder kein Inhalt), `'part'` (eine Teiltitelseite), `'opener'` (ihr erster Block ist eine Überschrift, deren Ebene über die ganze Seite reicht oder einen Seitenumbruch davor erzwingt – die erste Seite eines Kapitels) oder `'body'` (alles andere). `pages: 'body'` blendet einen Kolumnentitel auf Kapitelauftakten aus; `pages: 'opener'` zeigt eine Pagina nur dort. |
| `fontFamily` | `string` | `'EB Garamond'` | Schriftfamilie. |
| `fontSize` | `Dimension` | `8 pt` | Schriftgröße. |
| `fontWeight` | `number` | `400` | Schriftstärke (100–900). |
| `italic` | `boolean` | `false` | Ob kursiv gesetzt wird. |
| `color` | `ColorValue` | `#000000` | Textfarbe. |
| `overflow` | `'wrap' \| 'ellipsis-start' \| 'ellipsis-middle' \| 'ellipsis-end' \| 'clip'` | `'wrap'` in Überschriften- und Teilgestaltungen, sonst `'ellipsis-end'` | Wie die Engine Text behandelt, der die verfügbare Breite des Elements überschreitet. `'wrap'` bricht die Zeile in mehrere Zeilen um; die Varianten mit Auslassungspunkten halten jede Zeile auf einer Zeile und kürzen sie mit `…` am Anfang, in der Mitte oder am Ende; `'clip'` schneidet hart am Begrenzungsrahmen des Elements ab, ohne ein Zeichen einzufügen. Zeilenumbrüche im Inhalt gelten in jedem Modus: Die Modi mit Auslassungspunkten und Abschneiden kürzen bzw. beschneiden jede Zeile für sich. Ein Element, das `overflow` weglässt, übernimmt den Standardwert seines Platzes: In einer Überschriftengestaltung (`advancedDesign.slot`) oder auf einer Teiltitelseite (`parts.design`, `parts.versoDesign`) bricht es um, in einem Kolumnentitel, einer Pagina oder einer Teilzeile des Inhaltsverzeichnisses (`toc.parts.design`, eine Zeile fester Höhe) endet es mit `…`. Setzen Sie `'wrap'` bei einem Kolumnentitel, der mehrere Zeilen lang werden kann (eine Adresse), oder Auslassungspunkte bei einer Dachzeile, die in einem Auftakt auf einer Zeile bleiben muss. Eine durch Auslassungspunkte gekürzte Zeile oder eine, deren Farbe über den Kasten hinaus abgeschnitten wird, wird als Inhaltswarnung `designTextTruncated` gemeldet, einmal pro Element und Seite (bei einem Kolumnentitel oder einer Pagina einmal pro Element und Kapitel). Eine Konfiguration, die vor postext 1.24 gespeichert wurde (`configVersion` 9 oder älter), wird bei jedem Überschriften- und Teiltext, der keinen Wert setzt, mit `'ellipsis-end'` gelesen, damit sich ihre Seiten nicht verschieben. Ein Text mit einer `dropCap` bricht unabhängig von dieser Einstellung um; mit `'clip'` werden seine Zeilen weiterhin am Rand eines Kastens fester Höhe abgeschnitten. `'ellipsis-end'` und `'ellipsis-start'` kürzen an einer Wortgrenze – *The history of…*, nicht *The history of th…* –, und kein Leerzeichen und kein verbindendes Satzzeichen (Komma, Doppelpunkt, Strich, Schrägstrich, öffnende Klammer) berührt die Auslassungspunkte. Ein Wort wird nur dann an beliebiger Stelle gekürzt, wenn die Wortgrenze ohne dieses Satzzeichen weniger als die Hälfte dessen behielte, was passt: ein einziges langes Wort oder eine URL (*http://exampl…*, nicht *http…*). Ein geschütztes Leerzeichen oder ein geschützter Bindestrich (U+2011, wie in *MS‑DOS*) ist keine Wortgrenze; `'ellipsis-middle'` kürzt an beliebiger Stelle, verwirft aber die Leerzeichen daneben. Bis postext 1.4 kürzte jeder Modus beim letzten Zeichen, das passte, Leerzeichen eingeschlossen. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom'` | `'middle'` | Wo der Text in einem Kasten steht, der höher ist als seine Zeilen – eine feste `placement.size.height` oder ein Kasten, den ein verankerter Nachbar streckt. Sind die Zeilen höher als der Kasten (eine große Ziffer in einem Kasten fester Höhe, ein knapper `lineHeight`), laufen sie auf der Seite hinaus, die die Ausrichtung frei lässt, wie bei der Flex-Ausrichtung in CSS: `'bottom'` hält den Fuß des letzten Zeilenkastens auf dem Fuß des Kastens und läuft oben hinaus, `'middle'` läuft an beiden Enden gleichmäßig hinaus, `'top'` am Fuß. Bis postext 1.4 hingen solche Zeilen unabhängig von der Ausrichtung immer am oberen Rand. Eine `dropCap` bewegt sich mit ihren Zeilen (bis postext 1.4 blieb sie oben in einem Kasten, in dem `'middle'` oder `'bottom'` die Zeilen nach unten verschob). |
| `lineHeight` | `number \| Dimension` | `1.2` | Zeilenabstand der Zeilen des Elements. Eine Zahl ist ein Vielfaches von `fontSize`. Eine `Dimension` wird ebenfalls akzeptiert, so wie jeder andere Zeilenabstand der Konfiguration geschrieben wird: `em` / `rem` ist dasselbe Vielfache, und eine absolute Länge (`pt`, `mm`, `px` …) ist der Abstand zwischen den Grundlinien – `{ value: 15.5, unit: 'pt' }` setzt 15,5 pt Zeilenabstand unabhängig von der Schriftgröße. Alles andere (null, eine negative Zahl, eine fehlerhafte Dimension) erhält den Standardwert. Bis postext 1.4 machte eine `Dimension` hier die Höhe der Gestaltung unmessbar: Ein Auftakt reservierte dann überhaupt keinen Platz, nicht einmal seine `minHeight`, und der Fließtext lief unter den Titel. |
| `letterSpacing` | `Dimension` | `0` | Laufweite: zusätzlicher Vorschub nach jedem Zeichen, Leerzeichen eingeschlossen, genau wie bei `letter-spacing` in CSS. Gemessene Breiten wachsen mit, sodass ein Kasten mit automatischer Breite eng bleibt. Die Glyphen ändern sich nie: Die Ligaturen der Schrift bleiben im Canvas, im HTML, im EPUB und im PDF erhalten (bis postext 1.27 verwarfen Canvas und HTML sie in gesperrtem Gestaltungstext, der dadurch breiter ausfiel als gemessen). Eine hebräische Folge wird wie lateinischer Text gesperrt; nur ein Text mit arabischen Buchstaben nicht. Die Sperrung nach dem letzten Zeichen einer Zeile bleibt bei ihrer Ausrichtung und bei einem Kasten mit automatischer Breite unberücksichtigt, sodass ein zentrierter gesperrter Titel auf seinen Buchstaben zentriert ist, ein rechtsbündiger an der Kante endet und der letzte Buchstabe einer Blocksatzzeile die Kante erreicht (bis postext 1.4 standen sie eine halbe oder ganze Sperreinheit weiter links, und ein Element, das rechts an einem gesperrten verankert war, stand eine Sperreinheit weiter entfernt). Ein negativer Wert rückt die Buchstaben enger zusammen – ein Displaytitel in 36 pt erhält oft `{ value: -0.3, unit: 'pt' }` –, und die Breiten schrumpfen entsprechend; Canvas, HTML und PDF zeichnen ihn gleich (bis postext 1.4 wurde ein negativer Wert ohne Warnung als `0` gesetzt). |
| `textTransform` | `'none' \| 'uppercase'` | `'none'` | Umwandlung der Groß- und Kleinschreibung, angewendet auf den aufgelösten Text, Platzhalter eingeschlossen – etwa ein Teiltitel, der im Inhaltsverzeichnis in Versalien gesetzt wird. |
| `box` | `ElementBoxStyle` | — | Optionaler Hintergrund und Rahmen, die hinter dem Text gezeichnet werden: `backgroundColor`, `borderColor`, `borderWidth`, `borderRadius` und ein `padding` pro Seite, das den Kasten über den Text hinaus vergrößert (die Felder siehe [Kastenelemente](https://postext.dev/de/docs/configuration-page-layout.md#kastenelemente)). |
| `dropCap` | `{ lines, fontFamily, fontWeight, fontSize, color, gap }` | — | Initiale: der erste Buchstabe groß neben den ersten `lines` Zeilen gesetzt (Standardwert 2), in eigener Schrift, Schriftstärke und Farbe, im Abstand `gap` vom Text. Der Buchstabe steht auf der Grundlinie der letzten Zeile, die er überspannt, und `fontSize` ist standardmäßig die Größe, die seine Oberkante auf die Höhe der Versalien der ersten Zeile bringt: die Textgröße plus `lines` − 1 Zeilenabstände, wobei die Versalhöhe als 0,72 der Schriftgröße angenommen wird (eine Schrift, deren Versalien deutlich höher oder niedriger sind, braucht eine eigene `fontSize`). Ein Text mit einer Initiale bricht unabhängig von seinem `overflow` um; mit `'clip'` werden seine Zeilen weiterhin am Rand eines Kastens fester Höhe abgeschnitten. Eine mit der Palette verknüpfte `color` folgt wie der Rest der Gestaltung den Paletten von Teilen und Abschnitten. In einer Überschriftengestaltung reserviert der Buchstabe keinen Platz unter dem Text: Der Teil seines Zeilenkastens unter seiner Grundlinie schiebt den Fließtext nicht nach unten. Ein Buchstabe mit Unterlänge (ein Q oder ein J in vielen Schriften) kann dann in den Raum unter der Gestaltung reichen: Geben Sie der Überschrift dafür einen `marginBottom`. Bis postext 1.4 machte die Standardgröße den Buchstaben so hoch wie alle Zeilenkästen, die er überspannt, sodass seine Oberkante über der ersten Zeile stand; ein `overflow` außer `'wrap'` ließ den Buchstaben ohne Warnung weg; eine Palette eines Abschnitts oder Teils ließ seine Farbe unverändert; und ein Buchstabe, der so tief war wie der Text daneben, konnte den Fließtext eine Rasterlinie tiefer schieben. Früher gespeicherte Konfigurationen behalten die Größe von 1.4, ausgeschrieben als `fontSize` (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-programmatic-usage.md#pakete-die-postext-14-oder-früher-geschrieben-hat)). Eine Initiale im laufenden Text wird stattdessen über die Absatz- und Überschriftenformate eingestellt (siehe [Initialen](https://postext.dev/de/docs/configuration-text.md#initialen)), wobei ihre Versalhöhen aus den Schriften gemessen werden. |
| `paragraphIndent` | `Dimension` | `0` | Erstzeileneinzug jedes Absatzes nach dem ersten. Ein Zeilenumbruch im Inhalt – oder die beiden Zeichen `\n` bei Text aus einem Attributwert – trennt Absätze; aufeinanderfolgende Zeilenumbrüche zählen als einer. |
| `hyphenate` | `boolean` | `false` | Bei `true` und umbrechendem Text (`overflow: 'wrap'` oder eine `dropCap`, die immer umbricht) werden lange Wörter, die nach einem regulären Zeilenumbruch immer noch überlaufen würden, an Silbengrenzen getrennt (mit dem aktiven Silbentrennungs-Locale des Dokuments), mit einem weichen Trennstrich an der Trennstelle. In einem Text im Blocksatz (`align: 'justify'`) wird ein Wort, das nicht in den Rest einer Zeile passt, zusätzlich an seiner letzten passenden Trennstelle getrennt, um die Zeile zu füllen. |
| `inlineMarks` | `boolean` | `false` | Liest den aufgelösten Text – Platzhalterwerte eingeschlossen – als Inline-Markdown: `**bold**`, `*italic*`, `^superscript^`, `~subscript~`. Ausgeschaltet werden die Auszeichnungszeichen so gedruckt, wie sie geschrieben sind. In einer Überschriftengestaltung behält `{titleText}` dann die eigenen fetten, kursiven, hoch- und tiefgestellten Folgen der Überschrift (`*Pneumocystis*`, `CO~2~`), während ihre übrigen Zeichen maskiert werden, damit sie so gedruckt werden, wie sie geschrieben sind (seit postext 1.19). Siehe [Inline-Auszeichnungen und Konturen](https://postext.dev/de/docs/configuration-page-layout.md#inline-auszeichnungen-und-konturen). |
| `stroke` | `{ width, color?, hollow? }` | — | Kontur um die Buchstaben: `width` (eine `Dimension`, auf den Glyphenkanten zentriert), `color` (Standardwert: die Textfarbe; eine Initiale nimmt ihre eigene Farbe) und `hollow` (`true` zeichnet nur die Kontur). Siehe [Inline-Auszeichnungen und Konturen](https://postext.dev/de/docs/configuration-page-layout.md#inline-auszeichnungen-und-konturen). |
| `writingMode` | `'horizontal-tb' \| 'vertical-rl'` | `'horizontal-tb'` | `'vertical-rl'` setzt den Text von oben nach unten, die Zeilen von rechts nach links, die Zeichen aufrecht: ein Kolumnentitel am Vorderschnitt entlang, ein vertikaler Titel neben einem horizontalen Kapitel. Siehe [Vertikale Textelemente](https://postext.dev/de/docs/configuration-page-layout.md#vertikale-textelemente). |
| `reserve` | `boolean` | `true` | Nur Überschriftengestaltungen: ob das Element zur Höhe zählt, die die Überschrift im Textfluss reserviert. `false` für Dekoration, die unter dem Text liegen darf (ein Siegel am Seitenfuß, ein Rahmen, ein seitliches Band). Siehe [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe). Kopfzeilen-, Fußzeilen- und Teilgestaltungen ignorieren es. |
| `marginFromBody` | `Dimension` | `6 pt` | Absoluter Abstand zwischen der dem Satzspiegel zugewandten Kante des Elements und der Kante des Satzspiegels. Unabhängig von anderen Elementen. Wird in `placement.offset.y` überführt. |
| `marginFromEdge` | `Dimension` | `0 pt` | Horizontaler Einzug von der ausgerichteten Inhaltskante. Gilt nur, wenn `align` `'left'` oder `'right'` ist. Wird in `placement.offset.x` überführt. |
| `placement` | `ElementPlacement` | abgeleitet aus `align` + `marginFromBody` + `marginFromEdge` | Erweiterte Platzierung (siehe unten). Wenn gesetzt, hat sie Vorrang vor den alten flachen Feldern. |

Verfügbare Platzhalter:

- `{pageNumber}` – Seitenzahl der aktuellen Seite, ab 1 gezählt.
- `{totalPages}` – Gesamtzahl der Seiten des Dokuments. In einem Buch, das Kapitel für Kapitel umbrochen wird (die Sandbox, `buildBundle`), ist jedes Kapitel ein Dokument, dies ist also die eigene Seitenzahl des Kapitels.
- `{bookTotalPages}` – Gesamtzahl der Seiten des ganzen Buchs: jedes Kapitel, Vakatseiten eingeschlossen. Bei einem für sich allein umbrochenen Dokument entspricht sie `{totalPages}`. Siehe [Seitenzahl des ganzen Buchs](https://postext.dev/de/docs/configuration-page-layout.md#seitenzahl-des-ganzen-buchs) unten.
- `{title}`, `{subtitle}`, `{author}`, `{publishDate}` – Werte aus `content.metadata`. Unbekannte oder leere Metadaten ergeben eine leere Zeichenkette (und lösen in der Sandbox eine Warnung aus).
- `{chapterTitle}` – Text der letzten H1 auf oder vor der aktuellen Seite. Eine H1, deren [Überschriftenformat](https://postext.dev/de/docs/configuration-styles.md#überschriftenstile) `runningChapter: false` setzt (eine Tafel, eine Karte), wird übergangen.
- `{chapterTitleAtTop}`, `{chapterNumberAtTop}` – Titel und Nummer des Kapitels, das am Kopf der Seite gilt; sie unterscheiden sich von `{chapterTitle}` und `{chapterNumber}` auf einer Seite, auf der ein neues Kapitel unterhalb anderen Texts beginnt. Siehe [Kapitel am Kopf der Seite](https://postext.dev/de/docs/configuration-page-layout.md#kapitel-am-kopf-der-seite) unten.
- `{partTitle}`, `{partNumber}` – Titel und Nummer des aktuellen Teils (die letzte `:::part`-Seite auf oder vor der aktuellen Seite; leere Paritätsseiten direkt vor einer Teiltitelseite gehören bereits zu ihr). Leer vor dem ersten Teil.
- `{firstMark.<key>}`, `{lastMark.<key>}` – das erste und letzte Leitwort der Seite: eine Überschrift einer Ebene (`h1`–`h6`) oder ein Eintrag eines Absatzformats. Siehe [Leitwörter](https://postext.dev/de/docs/configuration-page-layout.md#leitwörter-erste-und-letzte-marke) unten.

#### Seitenzahl des ganzen Buchs

`{bookTotalPages}` druckt die Seitenzahl des ganzen Buchs, die Zahl, die ein Leser in „Seite 12 von 348“ sieht. Sie zählt physische Seiten, leere eingeschlossen, wie `{totalPages}`, aber über alle Kapitel hinweg:

- **Ein für sich allein umbrochenes Dokument** (`buildDocument` ohne `continuation`) ist das ganze Buch: `{bookTotalPages}` entspricht `{totalPages}`.
- **`buildBundle`** umbricht das Buch, addiert die Seiten aller Kapitel und umbricht es mit dieser Summe ein weiteres Mal, sodass jedes Kapitel dieselbe Zahl druckt. Die Zahl verschiebt nie einen Seitenumbruch, deshalb genügt eine weitere Runde; eine Konfiguration, die `{bookTotalPages}` nicht druckt, kostet nichts.
- **Die Sandbox** übergibt jedem Kapitel die Summe, sobald die Seiten aller Kapitel bekannt sind. Bis dahin druckt ein Kapitel die Seiten bis zu seinem eigenen Ende. Der Export des ganzen Buchs im Tab PDF zählt die Seiten, die er umbricht: Hat ein Kapitel eine andere Zahl gedruckt, weil seine Seiten noch nicht bekannt waren, umbricht er das Buch ein weiteres Mal mit der Zahl, auf die die Kapitel gekommen sind.
- **Eine Host-Anwendung, die Kapitel selbst umbricht,** übergibt die Summe als `continuation.bookPageCount` (auch dem ersten Kapitel). Ohne sie zählt `{bookTotalPages}` die Seiten bis zum Ende des Dokuments (`continuation.pageIndexOffset` plus seine eigenen Seiten), was nur für das letzte Kapitel stimmt.

```ts
footer: {
  elements: [{
    kind: 'text', id: 'folio', content: '{pageNumber} / {bookTotalPages}',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'top' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

`configUsesPlaceholder(config, 'bookTotalPages')` teilt einer Host-Anwendung mit, ob sich die Berechnung der Zahl lohnt.

#### Leitwörter: erste und letzte Marke

Ein Wörterbuch druckt das erste und letzte Stichwort jeder Seite in ihrem Kolumnentitel („Aback – Anchor“); ein Nachschlagewerk druckt den ersten und letzten Abschnitt. `{firstMark.<key>}` und `{lastMark.<key>}` drucken sie. Der Schlüssel benennt, was eine Seite markiert:

- **`h1` bis `h6`**: eine Überschrift dieser Ebene. Die Marke ist ihr Text, ohne die Nummer.
- **Die ID eines Absatzformats** (`entry`): ein Absatz eines Containers `:::paragraphs{style="entry"}`. Die Marke ist die fette Folge, mit der der Absatz beginnt, das Stichwort, ohne das schließende Satzzeichen: `**Aback.** Said of…` markiert `Aback`. Ein Absatz, der nicht mit fettem Text beginnt, setzt keine Marke.

`{firstMark.<key>}` ist die erste Marke, die auf der Seite beginnt, und `{lastMark.<key>}` die letzte. Eine Seite, auf der keine Marke beginnt (ein langer Eintrag, der weiterläuft), druckt für beide die geltende Marke, die letzte davor. Seiten vor der ersten Marke drucken nichts; in einem Buch, das Kapitel für Kapitel umbrochen wird, ist das die erste Marke des Kapitels, da Marken nicht von einem Kapitel ins nächste übernommen werden. Eine Überschrift oder ein Absatz, der über Seiten geteilt ist, markiert nur die Seite, auf der er beginnt. Der Schlüssel wird nach dem Punkt aus Buchstaben, Ziffern, `_` und `-` geschrieben und beginnt mit einem Buchstaben oder `_`; ein unbekannter Schlüssel druckt nichts.

```md
:::paragraphs{style="entry"}
**Aback.** Said of the sails when pressed back against the mast.

**Abaft.** Towards the stern, or behind a given point.
:::
```

```ts
header: {
  elements: [{
    kind: 'text', id: 'guide', content: '{firstMark.entry} – {lastMark.entry}',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'bottom' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

Leitwörter sind Kolumnentitel: Sie werden in den Plätzen von Kopf- und Fußzeile aufgelöst (einschließlich `header` und `footer` eines Überschriftenformats) und drucken in Überschriften-, Teil- und Inhaltsverzeichnisgestaltungen nichts; in Überschriften- und Teilgestaltungen markiert das Bedienfeld Prüfungen sie als unbekannte Platzhalter. Um das erste Stichwort auf linken und das letzte auf rechten Seiten zu zeigen, geben Sie zwei Elementen `parity: 'even'` und `parity: 'odd'`. Eine H1, deren Überschriftenformat `runningChapter: false` setzt, setzt keine Marke `h1`.

#### Kapitel am Kopf der Seite

`{chapterTitle}` und `{chapterNumber}` nennen das letzte Kapitel, das auf oder vor der Seite begonnen hat. In einem Buch, dessen Kapitel ohne Seitenumbruch dazwischen fortlaufend gesetzt sind, trägt eine Seite, die ein Kapitel abschließt und das nächste nahe ihrem Fuß beginnt, dann den Titel des neuen Kapitels über Text, der noch zum alten gehört. `{chapterTitleAtTop}` und `{chapterNumberAtTop}` nennen stattdessen das Kapitel, das am Kopf der Seite gilt, wie es Romane mit fortlaufenden Kapiteln und viele Nachschlagewerke tun:

- Eine Seite, deren erster Block die H1 eines Kapitels ist, nennt dieses Kapitel;
- jede andere Seite nennt das Kapitel, aus dem sie weiterläuft, auch wenn weiter unten ein neues Kapitel beginnt;
- eine zur Parität eingefügte Vakatseite gehört zur Seite danach, die Trennseite der Modi `always-*` zur Seite davor (siehe [Zugehörigkeit leerer Seiten](https://postext.dev/de/docs/configuration-text.md#zugehörigkeit-leerer-seiten)); beginnt die Seite nach einer Paritäts-Vakatseite mit dem Ende eines Kapitels statt mit seiner H1, behält auch die Vakatseite dieses Kapitel;
- eine H1 mit `runningChapter: false` wird übergangen.

```ts
header: {
  elements: [{
    kind: 'text', id: 'chapter', content: '{chapterTitleAtTop}', parity: 'odd', pages: 'body',
    fontSize: { value: 8, unit: 'pt' },
    placement: { anchor: { to: 'container', edge: 'bottom-right' }, size: { width: 'auto', height: 'auto' } },
  }],
}
```

Wie Leitwörter sind beide Kolumnentitel: Sie werden in den Plätzen von Kopf- und Fußzeile aufgelöst und drucken in Überschriften-, Teil- und Inhaltsverzeichnisgestaltungen nichts. `{attr.<key>}` liest immer das zuletzt begonnene Kapitel.

#### Aus der Kante abgeleitete Ausrichtung

Wenn `placement.anchor.to` eines Textelements über `#id` auf ein anderes Element verweist, legt die Ankerkante eine Standardausrichtung für umbrochene Zeilen nahe:

- `right-of` und `align-left` bedeuten Text mit `align: 'left'` – umbrochene Zeilen laufen vom Anker aus nach rechts.
- `left-of` und `align-right` bedeuten `align: 'right'` – umbrochene Zeilen schmiegen sich an die Seite, die dem Ankerziel am nächsten liegt.

Der Überschriftenseditor der Sandbox wendet diese abgeleiteten Ausrichtungen automatisch an, wenn Sie Ankerkante oder Ankerziel ändern. Sie halten mehrzeiligen umbrochenen Text optisch an dem Element verankert, auf das er sich bezieht (sodass z. B. das „P“ eines umbrochenen „Postext“ senkrecht unter dem „I“ von „Introduction“ steht).

#### Inline-Auszeichnungen und Konturen

Ein Textelement setzt seinen Text standardmäßig in einer einzigen Schrift: `**`, `^` und die anderen Markdown-Zeichen werden so gedruckt, wie sie geschrieben sind. Mit `inlineMarks: true` wird der aufgelöste Text als Inline-Markdown gelesen, mit denselben Auszeichnungen, die der Fließtext annimmt (siehe **Dokumentformat → Inline-Formatierung**):

- `**bold**` setzt die Schriftstärke 700 (oder die eigene `fontWeight` des Elements, wenn diese kräftiger ist); `*italic*` kehrt die Neigung des Elements um, sodass eine Hervorhebung in einem kursiven Element aufrecht erscheint; `***both***` tut beides. Die Formen mit Unterstrich (`__bold__`, `_italic_`) funktionieren ebenfalls.
- `^superscript^` und `~subscript~` werden in 58 % der Größe gesetzt, hochgestellt um ein Drittel davon angehoben und tiefgestellt um 0,15 davon abgesenkt; ein tief- und ein hochgestelltes Zeichen, die aneinanderstoßen (`T~0~^2^`), werden übereinander gestapelt, wie im Fließtext.
- Ein Backslash setzt ein Auszeichnungszeichen als solches (`\*`, `\_`, `\^`, `\~`). Ein Link behält seinen Text; Backticks für Code werden verworfen.

Auszeichnungen werden gelesen, nachdem die Platzhalter ausgefüllt sind, sodass ein Wert sie enthalten kann: Eine Autorenzeile in einem Überschriftenattribut erhält ihre Zugehörigkeitsnummern hochgestellt. Umbruch, Blocksatz, die Modi mit Auslassungspunkten, `dropCap` und `paragraphIndent` funktionieren alle mit ausgezeichnetem Text; jede Folge behält die Farbe des Elements.

```json
{ "kind": "text", "id": "authors", "content": "{attr.authors}", "inlineMarks": true, "overflow": "wrap",
  "fontSize": { "value": 11, "unit": "pt" },
  "placement": { "anchor": { "to": "#title", "edge": "below" }, "offset": { "y": { "value": 6, "unit": "pt" } } } }
```

```md
# Snow cover and river flow {authors="Ana Ruiz^1^, Luis Gil^2^ and Marta Sanz^1,3^"}
```

`stroke` zeichnet eine Kontur um die Buchstaben: `width` ist die Linienstärke, auf den Glyphenkanten zentriert (die Hälfte fällt in die Buchstaben, die Hälfte nach außen; die gemessene Textbreite ändert sich nicht), `color` ist standardmäßig die Textfarbe, und `hollow: true` lässt die Buchstaben ungefüllt, sodass nur die Kontur sichtbar ist – eine konturierte Displayziffer, ein Titel, der sich von einem Foto abhebt. Die Kontur wird über die Füllung gezeichnet, auf dieselbe Weise im Canvas, im HTML (`-webkit-text-stroke`) und im PDF (Textdarstellungsmodus 2, oder 1 bei hohlen Buchstaben).

```json
{ "kind": "text", "id": "year", "content": "1863", "fontFamily": "Bitter", "fontSize": { "value": 120, "unit": "pt" }, "fontWeight": 700,
  "color": { "hex": "#1d3557", "model": "hex" },
  "stroke": { "width": { "value": 1.5, "unit": "pt" }, "hollow": true },
  "placement": { "anchor": { "to": "page", "edge": "bottom-right" }, "offset": { "x": { "value": -15, "unit": "mm" }, "y": { "value": -20, "unit": "mm" } } } }
```

Im PDF betten fette und kursive Folgen die passenden Schnitte der Schriftfamilie des Elements ein, der Schriftanbieter muss sie also liefern.

#### Standardwerte für Text und Fallstricke beim Verankern

Ein Textelement, das Sie selbst schreiben, beginnt mit diesen Werten, von denen einige überraschen:

- **`overflow` folgt dem Platz.** In einer Überschriftengestaltung oder auf einer Teiltitelseite bricht ein langer Titel auf weitere Zeilen um; in einem Kolumnentitel, einer Pagina oder einer Teilzeile des Inhaltsverzeichnisses wird ein Text, der für seinen Platz zu breit ist, mit `…` auf eine Zeile gekürzt. Setzen Sie `overflow: 'wrap'` bei einem Kolumnentitel, der lang werden kann (eine Adresse, eine Autorenzeile), und sehen Sie sich die Warnungen `designTextTruncated` für die gekürzten Texte an. Ein Zeilenumbruch im Inhalt (ein Zeilenumbruchzeichen oder `\n` in der Vorlage oder in einem Attributwert) beginnt in jedem Modus eine neue Zeile; die Modi mit Auslassungspunkten kürzen jede Zeile für sich.
- **`align` ist `'center'` und `verticalAlign` ist `'middle'`.** Ein Element mit automatischer Breite schmiegt sich an seine längste Zeile, sodass seine Zeilen zueinander zentriert sind; setzen Sie `align: 'left'` für einen linksbündigen Block (ein Element mit automatischer Breite, das an einem anderen Element verankert ist, richtet seine Zeilen von selbst auf der Seite seines Ankers aus, siehe oben).
- **Die Schrift ist EB Garamond 8 pt, schwarz, `lineHeight` 1,2**, gleich was der Fließtext verwendet. Anders als die übrigen Zeilenabstände der Konfiguration ist der `lineHeight` eines Gestaltungstexts meist ein einfaches Vielfaches (`1.2`); eine `Dimension` funktioniert ebenfalls (siehe oben).

Ein Element ohne `placement.size.width` (oder mit `'auto'`) passt seine Größe an seinen Text an, aber nur innerhalb des Platzes zwischen seinem Ankerpunkt und der Kante des Containers, zu der hin es wächst – bei einem Anker `top` oder `bottom` das Doppelte des Abstands zur näheren Kante. Sein `offset` zählt mit. Ein Versatz weg von dieser Kante kostet nichts: Ein Kolumnentitel mit Anker `top-left` und negativem `x` (der in den linken Rand hängt) verliert keinen Platz, denn er wächst nach rechts. Ein Versatz zu dieser Kante hin verkleinert den Platz um denselben Betrag (bei einem Anker `top` oder `bottom` um das Doppelte), und einer, der den Anker über die Kante hinausschiebt, lässt keinen übrig: ein Anker `top-right`, dessen `x` unter minus der Containerbreite liegt, oder ein Anker `top`, der um mehr als die halbe Breite seitlich verschoben ist. Bleibt kein Platz, druckt ein Modus mit Auslassungspunkten nichts, und `'wrap'` stapelt ein Zeichen pro Zeile. Drei Auswege:

- Geben Sie dem Element eine feste `size.width` – feste Breiten werden nie begrenzt;
- verankern Sie es an `'page'` oder `'bleed'`, wodurch die Seite (oder der Anschnitt) seinen Platz einrahmt;
- verankern Sie es an der gegenüberliegenden Kante des Containers.

Der Container einer Kopfzeile reicht von der oberen Schnittkante bis zum Satzspiegel, der einer Fußzeile vom Satzspiegel bis zur unteren Schnittkante: In einer Kopfzeile messen Anker `top-*` von der Schnittkante und Anker `bottom-*` vom Satzspiegel aus, in einer Fußzeile umgekehrt (siehe **Container-Rahmen** oben). Eine Kopf- oder Fußzeile verschiebt den Fließtext nie und wird über ihn gezeichnet, sodass ein Element, das in den Bereich des Satzspiegels geschoben wird, den Text verdeckt. Ein Auftaktband dagegen wird unter den Fließtext gezeichnet; wie viel Platz es im Fluss einnimmt, ist unter [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe) beschrieben.

### Vertikale Textelemente

Ein Textelement mit `writingMode: 'vertical-rl'` wird vertikal in einem Platz gesetzt, dessen Text horizontal ist: die Kolumnentitel und Paginas jedes Buchs, die auf dem Blatt bleiben, und jede Gestaltung einer horizontalen Seite. Es wird als horizontaler Text in einem eigenen Rahmen umbrochen, der eine Vierteldrehung im Uhrzeigersinn gedreht ist, und dann zurück auf die Seite gedreht:

- Sein Kasten bleibt dort, wo die Platzierung ihn hinsetzt. Seine Höhe ist die Länge einer Zeile: `size.height` legt sie fest (oder `'auto'`, die Länge des Texts; `'fill'`, bis zur Kante des Containers), `size.width` legt fest, wie viele Zeilen nebeneinander passen, und `size.maxWidth` begrenzt die Länge einer Zeile.
- `align` setzt die Zeilen entlang des Kastens (`'left'` oben), `verticalAlign` quer dazu (`'top'` rechts, wo die erste Zeile steht), und der Innenabstand eines Kastens bleibt auf der Seite, für die er geschrieben ist.
- Die Zeichen werden wie auf einer vertikalen Seite gemessen und gezeichnet: Han-Zeichen aufrecht, je ein Geviert, Satzzeichen in ihrer vertikalen Form, lateinische Wörter seitwärts, kurze Zahlen in einer Zelle (`cjk.uprightDigits`). Canvas, PDF und HTML setzen es in dasselbe Rechteck.
- Mit `inlineMarks: true` heben die Ausrichtungsauszeichnungen eine Folge wie im Fließtext ab: `第:tcy[3.0]回` setzt 3.0 in eine Zelle, `:upright[GDP]` stellt die Buchstaben aufrecht untereinander, `:sideways[…]` dreht eine Folge; innerhalb einer solchen bricht eine Zeile nie um. Ein horizontales Element ignoriert sie.
- Auf einem vertikalen Element wird keine Initiale gesetzt.
- Im Fluss einer vertikalen Seite (ein Auftakt, eine Teiltitelseite, ein Kastentitel) läuft Text bereits nach unten, und `writingMode` ändert dort nichts.

Vertikal gesetzte chinesische Bücher stellen ihre Kolumnentitel und Paginas an eine von drei Stellen ([clreq §7.2](https://www.w3.org/TR/clreq/#x7-2-page-headers-footers-etc); [JLREQ §2.6](https://www.w3.org/TR/jlreq/#running_heads_and_page_numbers) für Japanisch):

| Konvention | Wo | Einstellung |
| --- | --- | --- |
| Horizontaler Kopf und Fuß | Über und unter dem Satzspiegel, wie in horizontalen Büchern; am häufigsten. | Kopf- und Fußzeile, wie sie sind. |
| Vorderschnitt (Stil 中缝, in Taiwan 邊峰) | Den Außensteg hinunter: der Kapitel- oder Buchtitel ab etwa vier Zeichen unter dem Kopf des Satzspiegels, die Pagina etwa fünf Zeichen über seinem Fuß endend, in chinesischen Zahlzeichen, in etwa 80 % der Grundschriftgröße. | Zwei vertikale Elemente, verankert an `'outer'`, siehe unten. |
| Äußere untere Ecke | Die Pagina am Fuß der Seite, in der äußeren Ecke (die Regeln Taiwans für Bücher im Stil 中式). | Ein horizontales Element in der Fußzeile bei `'bottom-left'` mit `parity: 'odd'` und eines bei `'bottom-right'` mit `parity: 'even'` in einem rechts gebundenen Buch (in einem links gebundenen umgekehrt). |

Die Kolumnentitel am Vorderschnitt, wie die Sandbox sie hinzufügt (**Kopfzeile › Kolumnentitel am Außenrand (vertikal)**), hier für einen Fließtext von 10 pt (die Sandbox setzt sie in 80 % der Grundschriftgröße):

```json
{
  "page": { "pageNumbering": { "format": "trad-chinese-informal" } },
  "header": { "elements": [
    { "kind": "text", "id": "head", "content": "{chapterTitle}", "writingMode": "vertical-rl",
      "fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
      "placement": { "anchor": { "to": "outer", "edge": "top" }, "offset": { "y": { "value": 4, "unit": "em" } } } },
    { "kind": "text", "id": "folio", "content": "{pageNumber}", "writingMode": "vertical-rl",
      "fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
      "placement": { "anchor": { "to": "outer", "edge": "bottom" }, "offset": { "y": { "value": -5, "unit": "em" } } } }
  ] }
}
```

`anchor.to: 'outer'` (siehe [Platzierung von Elementen](https://postext.dev/de/docs/configuration-page-layout.md#platzierung-von-elementen)) ist der Außensteg jeder Seite, sodass die beiden Elemente in einem rechts gebundenen Buch (`page.binding`) am linken Rand eines Rectos und am rechten Rand eines Versos hinunterlaufen. `{pageNumber}` wird im Nummernformat der Seiten gedruckt: `trad-chinese-informal` ergibt auf Seite 103 一百零三, `cjk-decimal` 一〇三. Die Regeln pro Platz gelten weiterhin: `pages: 'body'` hält einen Kolumnentitel von den Kapitelauftakten fern. Ein kurzes Ornament zwischen Kolumnentitel und Pagina (ein Fischschwanz ︻, eine Linie) ist ein gewöhnliches Element, das am selben Rahmen verankert ist.

Im VDT trägt ein vertikaler Block `vertical` (`VDTDesignTextBlock.vertical`: die Region, die aufrechten Ziffern und die zentrale Achse jeder Familie); seine Zeilen liegen im eigenen gedrehten Rahmen des Blocks, `xOffset` von der Oberkante des Kastens nach unten, `baselineY` von seinem rechten Rand nach links. Eine Folge einer ausgezeichneten Zeile trägt `tcy` oder `orientation`, wie ein Segment des Fließtexts.

### Linienelemente

Linienelemente zeichnen eine Linie: waagerecht über den Platz oder senkrecht an ihm hinunter.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `kind` | `'rule'` | — | Unterscheidungsmerkmal. |
| `id` | `string` | — | Stabile ID, eindeutig innerhalb des Platzes, für Verweise mit `anchor.to: '#id'`. |
| `direction` | `'horizontal' \| 'vertical'` | `'horizontal'` | Eine waagerechte Linie verläuft entlang `placement.size.width` (`'fill'` = bis zur Kante des Containers) und ist `thickness` hoch. Eine senkrechte Linie verläuft entlang `placement.size.height` nach unten (`'fill'` oder nicht gesetzt = bis zur Kante des Containers) und ist `thickness` breit – eine Trennlinie zwischen Kolumnentitel und Pagina. |
| `color` | `ColorValue` | `#000000` | Linienfarbe. |
| `thickness` | `Dimension` | `0.5 pt` | Linienstärke. Eine Linie, die sie weglässt, wird mit dem Standardwert gezeichnet (bis postext 1.4 zeichnete sie nichts). |
| `width` | `Dimension \| 'full'` | `'full'` | `'full'` reicht über den Inhaltsbereich; eine Dimension begrenzt die Linie auf eine feste Länge, die über `align` positioniert wird. |
| `align` | `'left' \| 'center' \| 'right'` | `'center'` | Ausrichtung, wenn `width` nicht `'full'` ist. |
| `marginFromBody` | `Dimension` | `6 pt` | Absoluter Abstand zwischen der dem Satzspiegel zugewandten Kante der Linie und der Kante des Satzspiegels. Unabhängig von anderen Elementen. |
| `marginFromEdge` | `Dimension` | `0 pt` | Horizontaler Einzug von der ausgerichteten Inhaltskante. Gilt nur, wenn `width` eine feste `Dimension` und `align` `'left'` oder `'right'` ist. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | Auf welchen Seiten die Linie erscheint. |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | Seitenrollen, auf denen die Linie erscheint (siehe das Feld `pages` der Textelemente). |
| `reserve` | `boolean` | `true` | Nur Überschriftengestaltungen: ob die Linie zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe)). |
| `placement` | `ElementPlacement` | abgeleitet aus `align` + `marginFromBody` + `marginFromEdge` | Erweiterte Platzierung (siehe [Platzierung von Elementen](https://postext.dev/de/docs/configuration-page-layout.md#platzierung-von-elementen)). `size.width` / `size.height` legen die Linienlänge fest; `width: 'fill'` ist das alte `'full'`. |

### Kastenelemente

Kastenelemente zeichnen ein abgerundetes Rechteck in den Platz – nützlich als Hintergrund hinter Text in Kapitelauftakten, Randspalten oder Fußzeilen. Kastenelemente werden ausschließlich über das Feld `placement` positioniert; sie haben keine alte flache Kurzform. Füllung, Kontur und Eckenradius stehen im verschachtelten Objekt `style` (`ElementBoxStyle`), wie im JSON-Beispiel unter „Platzierung von Elementen“.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `kind` | `'box'` | — | Unterscheidungsmerkmal. |
| `id` | `string` | — | Stabile ID, eindeutig innerhalb des Platzes. Benachbarte Elemente verankern sich daran mit `anchor.to: '#id'`. Die Sandbox vergibt beim Anlegen eine. |
| `style.backgroundColor` | `ColorValue` | `transparent` | Füllfarbe. Setzen Sie `transparent` für einen Kasten nur mit Kontur. |
| `style.borderColor` | `ColorValue` | `transparent` | Konturfarbe. |
| `style.borderWidth` | `Dimension` | `0 pt` | Konturstärke. Konturen werden an der Innenseite des Begrenzungsrechtecks des Kastens gezeichnet, damit die Außenmaße gleich bleiben: Die Außenkante der Kontur verläuft entlang der Kastenkante, und ein abgerundeter Kasten behält seinen äußeren Radius. Eine Kontur, die so breit ist wie der Kasten, füllt ihn. Canvas, HTML und PDF zeichnen sie gleich (bis postext 1.4 zentrierten Canvas und PDF die Kontur auf der Kante, zur Hälfte außerhalb des Kastens). |
| `style.borderRadius` | `Dimension` | `0 pt` | Eckenradius. Wird beim Zeichnen auf die Hälfte der kürzeren Seite begrenzt. |
| `placement` | `ElementPlacement` | — | Erforderlich. Siehe „Platzierung von Elementen“ unten. |
| `parity` | `'all' \| 'odd' \| 'even'` | `'all'` | Auf welchen Seiten der Kasten erscheint. |
| `pages` | `'all' \| 'body' \| 'opener' \| 'part' \| 'blank'` | `'all'` | Seitenrollen, auf denen der Kasten erscheint (siehe das Feld `pages` der Textelemente). |
| `reserve` | `boolean` | `true` | Nur Überschriftengestaltungen: ob der Kasten zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe)). |

### Bildelemente

Ein Element `image` zeichnet eine Bitmap- oder SVG-Ressource des Dokuments – das Verlagslogo auf einer Titelseite, ein Zeichen in einem Kolumnentitel. Seine Größe ergibt sich aus seiner `placement.size`: Bleibt eine von `width` / `height` auf `'auto'` (dem Standardwert), folgt die andere Seite dem Seitenverhältnis des Bilds; sind beide gesetzt, wird das Bild in den Kasten eingepasst und zentriert. Eine fehlende Ressource oder eine, die kein Bild ist, zeichnet nichts.

```ts
{
  kind: 'image', id: 'logo', resourceId: 'logo-publisher',
  placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: { value: 64, unit: 'mm' }, y: { value: 233, unit: 'mm' } }, size: { width: { value: 83, unit: 'mm' }, height: 'auto' } },
}
```

`resourceId` nimmt dieselben Platzhalter an wie `content` eines Textelements, sodass eine Gestaltung für jede Überschrift ein anderes Bild zeichnen kann. Mit `resourceId: '{attr.vignette}'` in einem Überschriftenformat zeichnet `# Chapter I {style="opener" vignette="log"}` die Ressource `log` und `# Chapter II {style="opener" vignette="wig"}` die Ressource `wig`: Die Kapitel teilen sich das Format, statt eines Klons pro Bild. Eine Kopf- oder Fußzeile liest die Attribute des Kapitels der Seite, wie es `{attr.<key>}` in einem Kolumnentitel tut, und auch andere Platzhalter funktionieren (`'map-{chapterNumber}'`). Eine ID, die leer ausfällt, etwa bei einer Überschrift ohne das Attribut, zeichnet nichts. Seit postext 1.8.

| Eigenschaft | Typ | Standardwert | Beschreibung |
| --- | --- | --- | --- |
| `id` | `string` | — | Stabiler Bezeichner; andere Elemente können sich daran als `#id` verankern. |
| `resourceId` | `string` | — | ID einer Bitmap- oder SVG-`Resource` des Dokuments. Sie darf Platzhalter enthalten, darunter `{attr.<key>}`, die pro Überschrift, Teil oder Seite ausgefüllt werden. |
| `decorative` | `boolean` | `false` | Das Bild ist reine Dekoration (ein Ornament, ein Band): Es gibt keinen Alternativtext an die Ausgabe weiter, auch wenn seine Ressource einen hat (siehe unten). |
| `placement` | `ElementPlacement` | — | Anker, Versatz und Größe (siehe [Platzierung von Elementen](https://postext.dev/de/docs/configuration-page-layout.md#platzierung-von-elementen)). Eine Seite mit `'fill'` reicht bis zur Kante des Containers. |
| `parity`, `pages` | wie oben | `'all'` | Auf welchen Seiten das Bild erscheint. |
| `reserve` | `boolean` | `true` | Nur Überschriftengestaltungen: ob das Bild zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe)). |

Das PDF-Backend bettet die Ressource wie eine Abbildung ein (ein SVG mit einer Druckvorlage verwendet diese); der HTML-Betrachter löst sie über `resourceImageUrl` auf.

Ein Bild, das eine Gestaltung zeichnet, ist Inhalt, wenn seine Ressource es beschreibt: Der `altText` der Ressource, sonst ihre Legende als reiner Text (ein Chip gelesen über seine Beschriftung, ein `:ref` über seinen `text`, wenn er einen hat), kommt in den VDT (`VDTDesignImageBlock.altText`), wird zum `alt` seines `<img>` im HTML und zu einer `Figure` mit `/Alt` in einem getaggten PDF, gelesen direkt nach dem Text seiner Gestaltung (die Tafel eines Kapitels nach dessen Überschrift). Ein Bild, dessen Ressource beides nicht hat, und eines, das als `decorative` gekennzeichnet ist, ist Dekoration: `alt=""` mit `role="presentation"` und ein Artefakt im PDF. Das Bild eines Kolumnentitels oder einer Fußzeile wiederholt sich auf jeder Seite und ist daher Seitenausstattung, gleich was seine Ressource sagt: kein `altText` im VDT, `alt=""` mit `role="presentation"` im HTML, ein Artefakt der Seite im PDF.

### Platzierung von Elementen

`ElementPlacement` ist das einheitliche Positionierungsmodell, das jeder Elementtyp (Text, Linie, Kasten) in jedem Gestaltungsplatz verwendet – Kopfzeile, Fußzeile oder der erweiterte Gestaltungsplatz einer Überschriftenebene. Drei Zustandsangaben beschreiben eine Platzierung:

```ts
interface ElementPlacement {
  /** What this element anchors to and which edge of that target. */
  anchor: {
    to: 'container' | 'page' | 'bleed' | 'outer' | `#${string}`; // container = the slot; page = trim box; bleed = trim box + bleed; outer = the outer margin (header, footer); #id = another element
    edge: AnchorEdge;
  };
  /** Distance from the anchor point. */
  offset?: { x?: Dimension; y?: Dimension };
  /** Optional fixed width / height. Width also accepts 'fill' (span the slot).
   *  `maxWidth` caps an 'auto' width (text): the element still shrink-wraps its
   *  content, so elements anchored to it stay attached, but a long text wraps or
   *  ellipsizes there — a running head can reserve room for the label hanging
   *  off it instead of squeezing that label out. */
  size?: { width?: Dimension | 'fill' | 'auto'; height?: Dimension | 'fill' | 'auto'; maxWidth?: Dimension };
}
```

`AnchorEdge` akzeptiert:

- **Containerkanten** (wenn `anchor.to` `'container'`, `'page'` oder `'bleed'` ist): `top`, `top-left`, `top-right`, `bottom`, `bottom-left`, `bottom-right`, `left`, `right`.
- **Kanten relativ zu einem Element** (wenn `anchor.to === '#someId'`): `right-of`, `left-of`, `below`, `above`, `align-top`, `align-bottom`, `align-left`, `align-right`.

Jede elementrelative Kante setzt eine Ecke des Elements auf eine Ecke des Elements, an dem es verankert ist, und `offset` verschiebt es von dort:

- `right-of`: seine obere linke Ecke auf die obere rechte Ecke des Ziels (daneben, Oberkanten auf gleicher Höhe); `left-of`: seine obere rechte Ecke auf die obere linke Ecke des Ziels;
- `below`: seine obere linke Ecke auf die untere linke Ecke des Ziels (darunter, linke Kanten bündig); `above`: seine untere linke Ecke auf die obere linke Ecke des Ziels;
- `align-top` und `align-left`: seine obere linke Ecke auf die obere linke Ecke des Ziels. Beide Namen ergeben dieselbe Platzierung: Sowohl die Ober- als auch die linken Kanten fluchten;
- `align-bottom`: seine untere linke Ecke auf die untere linke Ecke des Ziels;
- `align-right`: seine obere rechte Ecke auf die obere rechte Ecke des Ziels.

Eine elementrelative Kante zusammen mit `'container'`, `'page'` oder `'bleed'` und eine Containerkante zusammen mit `'#id'` werden als obere linke Ecke gelesen.

`anchor.to: 'page'` verankert das Element an der **Trim-Box** (der physischen Seite nach dem Beschnitt) und `'bleed'` an der Trim-Box, die auf jeder Seite um `cutLines.bleed` vergrößert ist (identisch mit der Trim-Box, solange Schnittmarken ausgeschaltet sind). Beide Rahmen werden außerdem zum Bezug für `size: 'fill'` und für die automatische Breitenbegrenzung, sodass ein farbiges Band unabhängig von den Seitenrändern von Kante zu Kante laufen kann:

```json
{ "kind": "box", "id": "band", "placement": { "anchor": { "to": "bleed", "edge": "top-left" }, "size": { "width": "fill", "height": { "value": 6, "unit": "cm" } } }, "style": { "backgroundColor": { "hex": "#1d3557", "model": "hex" } } }
```

Bei eingeschalteten Schnittmarken wird alles, was ein Element über die Anschnittbox hinaus zeichnet, abgeschnitten (siehe [Schnittmarken](https://postext.dev/de/docs/configuration-page-layout.md#schnittmarken)).

`anchor.to: 'outer'` (Plätze von Kopf- und Fußzeile) verankert das Element am **Außensteg** der Seite: von der Kante des Satzspiegels bis zur Schnittkante auf der vom Bund abgewandten Seite und vom Kopf des Satzspiegels bis zu seinem Fuß. Er liegt in einem links gebundenen Buch rechts auf einem Recto und links auf einem Verso, in einem rechts gebundenen umgekehrt (`page.binding`), sodass ein Element beiden Seiten einer Doppelseite dient: ein Kolumnentitel am Vorderschnitt entlang (siehe [Vertikale Textelemente](https://postext.dev/de/docs/configuration-page-layout.md#vertikale-textelemente)). In jedem anderen Platz gilt es als `'container'`. Der `offset` eines Textelements kann in `em` angegeben werden, Geviert seiner eigenen `fontSize`: vier Zeichen unter dem Kopf des Satzspiegels sind `{ "y": { "value": 4, "unit": "em" } }`.

Im erweiterten Gestaltungsplatz einer Überschrift vergrößern Elemente, die an Seite oder Anschnitt verankert sind, die für die Überschrift reservierte Höhe nicht, es sei denn, sie reichen unter die Oberkante der Überschrift (ein Band über den Kopf der Seite liegt hinter dem Auftakt; ein Band, das unter die Überschrift reicht, schiebt den Fließtext nach unten). Verwenden Sie `advancedDesign.minHeight`, um unabhängig davon eine feste Auftakthöhe zu reservieren, und `reserve: false` bei einem Element, das den Text überhaupt nicht verschieben soll. Die vollständigen Regeln stehen unter [Reservierte Höhe](https://postext.dev/de/docs/configuration-text.md#reservierte-höhe).

Jedes Element hat eine stabile `id` (von der Sandbox automatisch vergeben; Sie können sie auch von Hand setzen). Elemente, die an anderen Elementen verankert sind, bilden einen kleinen Abhängigkeitsgraphen, den die Engine vor dem Messen auflöst, sodass ein Element sich ohne manuelle Koordinaten an ein anderes anhängen kann.

Die alte Form aus `align` + `marginFromBody` + `marginFromEdge` wird bei der Eingabe geparst und beim Auflösen der Konfiguration in eine Platzierung umgeschrieben, sodass bestehende Konfigurationen unverändert weiter funktionieren.
