# Konfiguration: Listen und Mathematik

> Aufzählungen und nummerierte Listen, ihre Listenzeichen, Einzüge und Verschachtelung, Aufgabenlisten sowie Größe, Farbe und Abstände mathematischer Formeln

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

## Kurz gesagt

Diese Seite behandelt Listen und Formeln. Eine Aufzählung kennzeichnet jeden Punkt mit einem Zeichen, eine nummerierte Liste zählt ihre Punkte mit Zahlen oder Buchstaben. Sie legen für jede Liste das Zeichen, den Einzug und den Abstand fest und können sie für Listen in Listen ändern. Aufgabenlisten zeichnen ein Kästchen, das sich abhaken lässt. Der letzte Abschnitt legt Größe, Farbe und Abstand mathematischer Formeln fest.

## Aufzählungen

Die Eigenschaft `unorderedLists` steuert, wie Aufzählungen (`-`, `*`, `+`) und GFM-Aufgabenlisten (`- [ ]`, `- [x]`) dargestellt werden. Bis zu fünf Verschachtelungsebenen werden unterstützt.

### Standardwerte für Aufzählungen

| Eigenschaft | Typ | Standard | Beschreibung |
| --- | --- | --- | --- |
| `fontFamily` | `string` | erbt `bodyText.fontFamily` | Schrift des Punkttexts. |
| `color` | `ColorValue` | Hauptfarbe (`#295AA3`) | Farbe von Text und Aufzählungszeichen der Punkte. An den Eintrag `main-color` der Standardpalette gebunden. |
| `fontWeight` | `number` | `700` | Schriftstärke des Punkttexts (100–900). Aufzählungszeichen erben diese Schriftstärke, sofern sie nicht pro Ebene überschrieben wird. |
| `italic` | `boolean` | `false` | Setzt den Punkttext kursiv. |
| `bulletChar` | `string` | `'•'` | Glyphe, die als Aufzählungszeichen dient. |
| `bulletFontSize` | `Dimension` | `1 em` | Größe der Glyphe des Aufzählungszeichens. Relative Einheiten wachsen mit der Schriftgröße des Fließtexts. |
| `gap` | `Dimension` | `0.5 em` | Horizontaler Abstand zwischen Aufzählungszeichen und Punkttext. |
| `indent` | `Dimension` | `0 em` | Grundeinzug der Ebene 1. Tiefere Ebenen schließen an den Textanfang der übergeordneten Ebene an, sofern nicht überschrieben (siehe unten). |
| `bulletVerticalOffset` | `Dimension` | `0 em` | Feinjustierung der vertikalen Position des Aufzählungszeichens. Negative Werte schieben es nach oben, positive nach unten. |
| `marginTop` / `marginBottom` | `Dimension` | `1.5 em` | Abstand vor und nach der Liste als Ganzes. |
| `itemSpacing` | `Dimension` | `0 em` | Zusätzlicher vertikaler Abstand zwischen den Punkten, über den Zeilenabstand hinaus. Um eine Liste, die in einem Punkt einer anderen verschachtelt ist, gilt auf beiden Seiten der Abstand der äußeren Liste, vor dem ersten Punkt der verschachtelten Liste und nach ihrem letzten (bis postext 1.4 nahm der Punkt nach einer verschachtelten Liste deren Abstand an). |
| `snapTopToGrid` | `boolean` | `false` | Rundet den Abstand über der Liste auf, sodass ihr erstes Aufzählungszeichen auf dem Grundlinienraster sitzt, wie der Text unter einer Überschrift; `marginTop` ist dann ein Mindestwert. Das Ende einer Liste rastet den Textfluss in jedem Fall wieder auf das Raster ein, sodass mit `itemSpacing` auf 0 jeder Punkt mit dem Text in der Spalte daneben fluchtet. Standardmäßig aus, wie bis postext 1.4: Ein `marginTop`, das keine ganze Zahl von Zeilen ist, lässt die Punkte bis zum Ende der Liste neben dem Raster stehen. Listen in Kästen, deren Inneres nicht auf dem Raster liegt, sind nicht betroffen. |
| `hangingIndent` | `boolean` | `true` | Wenn aktiviert, richten sich umbrochene Zeilen am ersten Textzeichen aus statt unter dem Aufzählungszeichen. |
| `levels` | `UnorderedListLevelConfig[]` | — | Überschreibungen pro Tiefe für die Ebenen 1–5. Siehe unten. |

### Erweiterungen für Aufgabenlisten

GFM-Aufgabenpunkte (`- [ ] …`, `- [x] …`) werden als Punkte einer Aufzählung mit einem Kontrollkästchen anstelle des Aufzählungszeichens dargestellt. Die Engine zeichnet das Kästchen selbst, einen quadratischen Umriss mit einem Häkchen, wenn der Punkt erledigt ist: Dafür wird keine Schrift angefordert, es sieht also auf jedem Rechner gleich aus, auf dem Canvas, im PDF, im HTML und im EPUB, und assistive Technologien lesen `☐` oder `☑`. Seine Seitenlänge beträgt 0,6 em der Größe des Zeichens (`bulletFontSize` oder `fontSize` der Ebene), und das ist der Raum, den es vor dem `gap` einnimmt; in Textgröße steht es auf der Grundlinie der ersten Zeile des Punkts. Seine Strichstärke folgt dem `fontWeight` des Zeichens und seine Farbe dessen `color`. Die folgenden Felder gelten nur für Aufgabenpunkte:

| Eigenschaft | Typ | Standard | Beschreibung |
| --- | --- | --- | --- |
| `taskCheckboxChar` | `string` | `'☐'` | Zeichen einer offenen Aufgabe. Der Standard wird nicht als Text gesetzt: Die Engine zeichnet das Kästchen. Jedes andere Zeichen wird als Text in der Schrift der Liste gesetzt, die es dann enthalten muss. |
| `taskCheckedChar` | `string` | `'☑'` | Zeichen einer erledigten Aufgabe. Auch der Standard wird gezeichnet, als Kästchen mit Häkchen; jedes andere Zeichen wird als Text in der Schrift der Liste gesetzt. |
| `taskBox` | `'drawn' \| 'character'` | `'drawn'` | Wie die beiden Standardzeichen gesetzt werden. `'drawn'`: Die Engine zeichnet das Kästchen. `'character'`: `☐` und `☑` sind Text in der Schrift der Liste, wie bis postext 1.28; in einer Schrift, der sie fehlen, wählt der Browser eine Systemschrift, und der Text des Punkts beginnt nach der Breite, die diese Schrift ergibt. Eine vor Version 13 gespeicherte Konfiguration wird mit `'character'` gelesen, sodass ihre Zeilen bleiben, wo sie waren. |
| `taskCompletedStrikethrough` | `boolean` | `true` | Streicht den Text erledigter Aufgaben durch. |
| `taskCompletedColor` | `ColorValue` | erbt die Farbe des Punkts | Optionale Farbe für den Text erledigter Aufgaben. Fehlt sie, wird die normale Farbe des Punkts verwendet. |

### Überschreibungen pro Ebene für Aufzählungen

Jeder Eintrag in `levels` gilt für eine Tiefe (1–5) und kann jede der folgenden Eigenschaften überschreiben:

| Eigenschaft | Typ | Beschreibung |
| --- | --- | --- |
| `bulletChar` | `string` | Glyphe des Aufzählungszeichens für diese Tiefe. |
| `fontFamily` | `string` | Schriftfamilie der Punkte für diese Tiefe. |
| `fontSize` | `Dimension` | Größe der Glyphe des Aufzählungszeichens für diese Tiefe. |
| `color` | `ColorValue` | Farbe der Punkte. |
| `fontWeight` | `number` | Schriftstärke der Punkte. |
| `italic` | `boolean` | Kursiv ein/aus. |
| `indent` | `Dimension` | Ausdrücklicher Einzug des Aufzählungszeichens in dieser Tiefe. Siehe die Kaskadenregel unten. |
| `verticalOffset` | `Dimension` | Vertikale Feinjustierung des Aufzählungszeichens in dieser Tiefe. |

**Kaskade der Einzüge.** Ebene 1 beginnt immer beim allgemeinen Wert `indent` (standardmäßig `0 em` – die Aufzählungszeichen stehen an der Spaltenkante). Lassen Sie `indent` für die Ebenen 2–5 undefiniert, setzt die Engine das Aufzählungszeichen an den Textanfang der *vorigen* Ebene (Einzug der übergeordneten Ebene + Breite des Aufzählungszeichens + `gap`). Setzen Sie auf einer Ebene ein ausdrückliches `indent`, um die Kaskade zu unterbrechen und diese Tiefe an beliebiger Stelle festzulegen.

```ts
unorderedLists: {
  bulletChar: '—',
  gap: { value: 0.4, unit: 'em' },
  hangingIndent: true,
  levels: [
    { level: 2, bulletChar: '·' },
    { level: 3, bulletChar: '◦', color: { hex: '#666666', model: 'hex' } },
  ],
}
```

## Nummerierte Listen

Die Eigenschaft `orderedLists` steuert nummerierte Listen (`1.`, `2)` usw.). Bis zu fünf Verschachtelungsebenen werden unterstützt, und jede Tiefe kann ein anderes Zahlenformat verwenden.

### Standardwerte für nummerierte Listen

| Eigenschaft | Typ | Standard | Beschreibung |
| --- | --- | --- | --- |
| `fontFamily` | `string` | erbt `bodyText.fontFamily` | Schrift des Punkttexts und der Nummer. |
| `color` | `ColorValue` | Hauptfarbe (`#295AA3`) | Farbe von Text und Nummer der Punkte. An den Eintrag `main-color` der Standardpalette gebunden. |
| `fontWeight` | `number` | `700` | Schriftstärke von Punkttext und Nummern (100–900). |
| `italic` | `boolean` | `false` | Setzt den Punkttext kursiv. |
| `numberFormat` | `OrderedListNumberFormat` | `'arabic'` | Zahlenstil: `'arabic'`, `'lower-alpha'`, `'upper-alpha'`, `'lower-roman'`, `'upper-roman'`. Die Schreibweisen der anderen Einstellungen funktionieren ebenfalls (`'decimal'`, `'roman-lower'`, `'i'` …; siehe [Schreibweisen der Nummernformate](https://postext.dev/de/docs/configuration-page-layout.md#schreibweisen-der-nummernformate)); ein unbekannter Wert nummeriert mit arabischen Ziffern und wird gemeldet. |
| `prefix` | `string` | `''` | Text vor der Nummer, im Stil des Trenners: Mit `'（'` hier und `'）'` als Trenner lautet eine chinesische Liste （一）, （二）. Wird der Trenner als eigener Abschnitt gezeichnet, ist es das Präfix ebenfalls, direkt vor der Nummer. |
| `separator` | `string` | `'.'` | Zeichen zwischen Nummer und Text – typischerweise `'.'` oder `')'`. |
| `separatorFontFamily` | `string` | erbt `fontFamily` | Schrift des Trenners. Weicht irgendein Stilmerkmal des Trenners von dem der Nummer ab, wird der Trenner als eigener Abschnitt nach der (rechtsbündigen) Nummer gezeichnet – z. B. `1` in Optima Bold schwarz, gefolgt von `•` in DIN Pro Bold blau. |
| `separatorFontWeight` | `number` | erbt `fontWeight` | Schriftstärke des Trenners (100–900). |
| `separatorItalic` | `boolean` | erbt `italic` | Setzt den Trenner kursiv. |
| `separatorColor` | `ColorValue` | erbt `color` | Farbe des Trenners. Palettenverweise werden berücksichtigt. |
| `separatorGap` | `Dimension` | `0 em` | Abstand zwischen Nummer und Trenner. Der Punkttext beginnt weiterhin `gap` nach dem Trenner. |
| `numberFontSize` | `Dimension` | `1 em` | Größe der Nummer. |
| `gap` | `Dimension` | `0.5 em` | Horizontaler Abstand zwischen Nummer und Punkttext. |
| `indent` | `Dimension` | `0 em` | Grundeinzug der Ebene 1; tiefere Ebenen schließen an den Textanfang der übergeordneten Ebene an, sofern nicht überschrieben. |
| `numberVerticalOffset` | `Dimension` | `0 em` | Feinjustierung der vertikalen Position der Nummer. |
| `marginTop` / `marginBottom` | `Dimension` | `1.5 em` | Abstand vor und nach der Liste als Ganzes. |
| `itemSpacing` | `Dimension` | `0 em` | Zusätzlicher vertikaler Abstand zwischen den Punkten. Um eine Liste, die in einem Punkt einer anderen verschachtelt ist, gilt auf beiden Seiten der Abstand der äußeren Liste, vor dem ersten Punkt der verschachtelten Liste und nach ihrem letzten (bis postext 1.4 nahm der Punkt nach einer verschachtelten Liste deren Abstand an). |
| `snapTopToGrid` | `boolean` | `false` | Rundet den Abstand über der Liste auf, sodass ihre erste Nummer auf dem Grundlinienraster sitzt, wie der Text unter einer Überschrift; `marginTop` ist dann ein Mindestwert. Das Ende einer Liste rastet den Textfluss in jedem Fall wieder auf das Raster ein, sodass mit `itemSpacing` auf 0 jeder Punkt mit dem Text in der Spalte daneben fluchtet. Standardmäßig aus, wie bis postext 1.4: Ein `marginTop`, das keine ganze Zahl von Zeilen ist, lässt die Punkte bis zum Ende der Liste neben dem Raster stehen. Listen in Kästen, deren Inneres nicht auf dem Raster liegt, sind nicht betroffen. |
| `numberWidth` | `'run' \| 'level' \| 'item'` | `'run'` | Wie breit die Nummernspalte eines Punkts ist, was festlegt, wo sein Text beginnt; die Nummern stehen darin rechtsbündig. `'run'`: die breiteste Nummer der eigenen Folge des Punkts, der Punkte einer Tiefe, zwischen denen nur tiefere Punkte stehen. Eine Abbildung, ein Absatz oder ein Kasten zwischen zwei Punkten beginnt eine neue Folge, sodass `ii)` nach einer Tabelle seinen Text etwas weiter rechts beginnen kann als `i)` davor und eine Liste mit neun Punkten ihren Text weiter links setzt als eine mit zwölf. `'level'`: die breiteste Nummer in der Tiefe des Punkts im ganzen Dokument (in einem Buch im Kapitel), sodass jede Liste und jeder Teil einer unterbrochenen Liste ihren Text an derselben Stelle beginnt, wie es die Einzüge der tieferen Ebenen bereits tun. `'item'`: die eigene Nummer des Punkts, sodass der Text jedes Punkts einen `gap` nach seiner eigenen Bezeichnung beginnt: 第九條 und 第十一條 folgt jeweils derselbe Abstand, und ihre Texte beginnen an verschiedenen Stellen, wie das japanische Amtsblatt die Artikel eines Gesetzes druckt. Umbrochene Zeilen folgen `hangingIndent`: `false` führt sie auf den Einzug der Liste zurück, `true` hängt sie unter den eigenen Text des Punkts. Der Einzug einer tieferen Ebene bleibt ein Wert pro Ebene. Seit postext 1.28. |
| `numberAlign` | `'end' \| 'start'` | `'end'` | Wie eine Nummer in ihrer Spalte sitzt. `'end'`: am Text, sodass die Nummern einer Folge gemeinsam enden und `9.` und `10.` an ihren Punkten fluchten. `'start'`: am Anfang der Spalte (links auf einer Seite von links nach rechts, rechts auf einer von rechts nach links, am Zeilenkopf in vertikalem Text), sodass Bezeichnungen unterschiedlicher Länge gemeinsam beginnen, wie die Artikel eines Gesetzes (第九條, 第十一條). Die Spalte behält die Breite, die `numberWidth` ihr gibt, sodass der Text der Punkte in beiden Fällen an derselben Stelle beginnt; bei einem Trenner in eigenem Stil folgt der Trenner seiner Nummer. Seit postext 1.26. Unter `numberWidth: 'item'` ist die Spalte die Nummer selbst, daher setzen beide Werte dieselbe Liste. |
| `hangingIndent` | `boolean` | `true` | Umbrochene Zeilen richten sich am ersten Textzeichen aus statt unter der Nummer. |
| `levels` | `OrderedListLevelConfig[]` | — | Überschreibungen pro Tiefe für die Ebenen 1–5. |

### Überschreibungen pro Ebene für nummerierte Listen

Jeder Eintrag in `levels` kann `numberFormat`, `prefix`, `separator`, `fontFamily`, `fontSize`, `color`, `fontWeight`, `italic`, `indent`, `verticalOffset` und den Stil des Trenners (`separatorFontFamily`, `separatorFontWeight`, `separatorItalic`, `separatorColor`, `separatorGap`) überschreiben – es gilt dieselbe Kaskade der Einzüge wie bei Aufzählungen. Der Trennerstil einer Ebene erbt den eigenen Nummernstil der Ebene, sofern keine listenweite Einstellung für den Trenner angegeben ist.

**Rechtsbündige Ausrichtung.** Die Pipeline misst die breiteste formatierte Nummer innerhalb einer Folge und rückt alle Punkte dieser Folge so ein, dass die Nummern an ihrer rechten Kante fluchten. In einer Liste mit zehn Punkten, gesetzt als `1.` – `10.`, werden die einstelligen Nummern rechts aufgefüllt, sodass der Trenner in derselben Spalte bleibt.

```ts
orderedLists: {
  numberFormat: 'arabic',
  separator: '.',
  levels: [
    { level: 2, numberFormat: 'lower-alpha' },
    { level: 3, numberFormat: 'lower-roman', separator: ')' },
  ],
}
```

Das ergibt die klassische verschachtelte Mischung:

```
1. First item
   a. Sub-item
      i) Deep note
   b. Sub-item
2. Second item
```

Die Gliederung chinesischer Dokumente (GB/T 15834—2011, Anhang B.3) hat fünf Ebenen, 一、, dann （一）, dann 1., dann （1）, dann ①:

```ts
orderedLists: {
  levels: [
    { level: 1, numberFormat: 'simp-chinese-informal', separator: '、' },
    { level: 2, numberFormat: 'simp-chinese-informal', prefix: '（', separator: '）' },
    { level: 3, numberFormat: 'arabic', separator: '.' },
    { level: 4, numberFormat: 'arabic', prefix: '（', separator: '）' },
    { level: 5, numberFormat: 'circled-decimal', separator: '' },
  ],
}
```

## Mathematik

Die Eigenschaft `math` steuert, wie LaTeX-Formeln zwischen den Begrenzern `$...$` (inline) und `$$...$$` (abgesetzt) geparst und dargestellt werden. Die zugrunde liegende Engine ist MathJax (das Paket `mathjax-full`) im SVG-Ausgabemodus, auf dem Canvas gerastert und im PDF als skalierbare Glyphen eingebettet.

```ts
interface MathConfig {
  enabled?: boolean;        // Render LaTeX. When false, spans pass through as literal TeX.
  fontSizeScale?: number;   // × the surrounding text's size (the body size for display maths).
  color?: ColorValue;       // Formula colour; inherits body colour if omitted.
  marginTop?: Dimension;    // Space above display math blocks.
  marginBottom?: Dimension; // Minimum space below; baseline grid snap may enlarge it.
  indentAfterDisplay?: boolean; // Indent a paragraph that follows a display formula.
  keepWithLeadIn?: boolean; // Keep a display formula with the line that leads into it.
  equationNumbering?: {      // Number the display formulas that carry a \label.
    enabled?: boolean;           // default true
    numberingTemplate?: string;  // '{n}'; '{h1}.{n}' numbers by chapter
    resetOn?: ResourceCounterReset; // 'never' | 'h1' … 'h6'
    counterFormat?: ResourceCounterFormat; // 'decimal'
    format?: string;             // '({n})': what the formula and \eqref print
  };
}
```

| Eigenschaft | Typ | Standard | Beschreibung |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `true` | Mit false werden Abschnitte `$...$` und `$$...$$` weiterhin geparst (sodass Warnungen über nicht geschlossene Begrenzer weiterhin ausgelöst werden), aber als ihr wörtlicher TeX-Quelltext dargestellt. Nützlich, wenn der Inhalt absichtlich Dollarzeichen enthält oder wenn Sie die Darstellung von Mathematik ganz abschalten möchten. |
| `fontSizeScale` | `number` | `1.0` | Faktor, der vor dem Setzen auf die Größe des umgebenden Texts angewandt wird: Ein Geviert der TeX-Schrift der Formel ist diese Größe × `fontSizeScale` – `bodyText.fontSize` für eine abgesetzte Formel und für Inline-Mathematik im Fließtext, die Größe des umschließenden Blocks für Inline-Mathematik in einer Überschrift, einem Absatzformat, einer Legende oder einem Kastentext. 1,0 entspricht dem umgebenden Text; Werte im Bereich 0,9–1,1 sind üblich, wenn die Mathematikschrift etwas größer oder kleiner wirkt als die Textschrift. **Geändert in postext 1.5:** Bis 1.4 fielen Formeln etwa 13 % größer aus (siehe unten). |
| `color` | `ColorValue` | erbt die Farbe des Fließtexts | Farbe der gesetzten Formel. Weglassen, um `bodyText.color` zu erben. Setzen Sie sie ausdrücklich, wenn Formeln anders getönt sein sollen als der Text – z. B. passend zu einer Akzentfarbe der Überschriften. |
| `marginTop` | `Dimension` | `0.8em` | Abstand über einem Block abgesetzter Mathematik. Bei Inline-Mathematik ignoriert. |
| `marginBottom` | `Dimension` | `0.8em` | Abstand unter einem Block abgesetzter Mathematik. Er ist ein **Mindestwert**: Das Einrasten auf das Raster kann ihn vergrößern, damit die nächste Grundlinie auf eine Rasterlinie fällt (ob `page.baselineGrid` das Raster zeichnet oder nicht). |
| `indentAfterDisplay` | `boolean` | `true` | Rückt die erste Zeile eines Absatzes, der auf eine abgesetzte Formel folgt, wie jeden anderen Absatz ein. `false` setzt jeden Absatz direkt nach einer abgesetzten Formel stumpf, als Fortsetzung des Satzes, den die Formel unterbrochen hat („wobei *L* …“). Auf eine Formel, die innerhalb eines Absatzes steht – ohne Leerzeile darüber oder darunter –, folgt immer stumpfer Text: Der Text unter ihrem schließenden `$$` setzt diesen Absatz fort und wird nie eingerückt (siehe [Mathematische Formeln](https://postext.dev/de/docs/document-format-inline.md#mathematische-formeln)). |
| `keepWithLeadIn` | `boolean` | `false` | Hält eine abgesetzte Formel in der Spalte der Zeile, die zu ihr hinführt – die Predisplay-Penalty von TeX. Passt die Formel nicht unter die letzte Zeile des Absatzes davor, geht diese Zeile mit der Formel in die nächste Spalte oder auf die nächste Seite; blieben weniger als `bodyText.widowMinLines` Zeilen zurück (weniger als eine, wenn `bodyText.avoidWidows` aus ist), rückt ein Absatz, der in dieser Spalte beginnt, ganz weiter (unter `headings.keepWithNext` mit den Überschriften, die die Spalte darüber schließen). Die mitgenommene Zeile steht allein am Kopf der nächsten Spalte, was auch immer die Waisenregel verlangt. Mit `false` rückt die Formel allein weiter, und die Zeile, die sie einleitet, kann die Spalte darüber schließen oder über einer Abbildung stehen, die die nächste anführt. |
| `equationNumbering` | `{ enabled, numberingTemplate, resetOn, counterFormat, format }` | `true`, `'{n}'`, `'never'`, `'decimal'`, `'({n})'` | Wie die abgesetzten Formeln mit einem `\label` nummeriert werden (siehe *Nummerierte Gleichungen* unten). `numberingTemplate`, `resetOn` und `counterFormat` funktionieren wie bei einem Ressourcentyp: `'{h1}.{n}'` mit `resetOn: 'h1'` nummeriert (2.1), (2.2) … nach Kapitel, `'{h1}.{h2}.{n}'` mit `'h2'` nach Abschnitt. `format` ist die Nummer, wie die Formel und `\eqref` sie drucken, wobei `{n}` für die Nummer steht: `'[{n}]'` setzt [3]. `enabled: false` nummeriert nichts: Ein `\label` wird verworfen, und ein Verweis darauf druckt seine Seite. Ein Token nimmt nach einem Doppelpunkt auch einen Stil an (`'{h1:A}.{n}'`: (A.1) in einem mit Buchstaben gezählten Anhang). |

```ts
math: {
  enabled: true,
  fontSizeScale: 1.0,
  color: { hex: '#295AA3', model: 'hex' },
  marginTop: { value: 1, unit: 'em' },
  marginBottom: { value: 1, unit: 'em' },
}
```

**Formelgröße, geändert in postext 1.5.** MathJax gibt den Rahmen einer Formel in `ex` an, und ein `ex` seiner TeX-Schrift misst 0,442 em. Bis postext 1.4 nahm die Engine ein halbes Geviert dafür an, sodass jede Formel etwa 13 % größer als `bodyText.fontSize × fontSizeScale` gesetzt wurde. Formeln erscheinen jetzt in der dokumentierten Größe, und Zeilen und Seiten mit Mathematik werden neu umbrochen. Eine für 1.4 im Code geschriebene Konfiguration behält die Formelgröße von 1.4, indem sie einmal, wie geschrieben, durch `pinLegacyMathSize` aus `postext/bundle` geschickt wird:

```ts
import { pinLegacyMathSize } from 'postext/bundle';

config = pinLegacyMathSize(config); // formulas, and the space around display formulas, as 1.4 set them
```

Auch andere Regeländerungen in 1.5 können ihre Seiten verschieben: die Umbrüche vor Überschriften, der Abstand um eine Inline-Abbildung (im laufenden Text und in Kästen), die Inline-Auszeichnungen ihrer Überschriften, die Größe ihrer Initialen, der Raum unter einer Doppelpunktzeile für die Liste, die sie einleitet, die Zeilen, die ein Kastenschnitt von einem Absatz oder Listenpunkt übrig lässt, die Zeilenumbrüche nach einem Strich, der Umbruch von Flattersatz, die Teilung eines Absatzes unter einer Überschrift, die Zeilenumbrüche nach dem Bindestrich eines Kompositums und der Abstand unter einem Container `:::paragraphs`. `migrateConfig`, einmal mit dem Markdown ausgeführt, das die Konfiguration setzt, fixiert diejenigen, die dieser Text braucht, die Formelgröße eingeschlossen (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-bundles.md#pakete-die-postext-14-oder-früher-geschrieben-hat)):

```ts
import { migrateConfig } from 'postext/bundle';

config = migrateConfig(config, undefined, { content: markdown }); // heading breaks, formulas, inline gaps, heading marks, drop caps, colon lines, box cuts, dash breaks, compound breaks, ragged breaking, splits under a heading and container space as 1.4 set them
```

Das hält zurück, was diese Regeländerungen verschieben würden, bewahrt aber nicht jede Seite von 1.4. Version 1.5 behebt auch Layoutfehler, und eine Korrektur hat keine Fixierung: Eine alte Konfiguration erhält sie wie eine neue, sodass sich eine davon betroffene Seite dennoch verschieben kann. Darunter: Eine Überschrift über die ganze Seitenbreite ohne eigene Gestaltung wird über die Seite gemessen und im Zeilenabstand ihrer Ebene gesetzt; unter der Grundlinie einer Initiale in einer Überschriftengestaltung wird nichts reserviert; eine Initiale nimmt die Palettenfarbe des Abschnitts an und wird auch in einem Gestaltungstext gesetzt, dessen `overflow` nicht `'wrap'` ist, der dann umbricht; ein Absatz in einem Kasten malt die Laufweite, mit der er gemessen wurde; ein geteilter Kasten behält seine Symbolspalte auf jedem Fragment; eine Kastenzeile, die ihre Leerzeichen über das 3-Fache dehnen würde, wird wie im laufenden Text im Flattersatz gesetzt; der Hebel für lockere Absätze setzt nie eine Blocksatzzeile breiter, als `maxWordSpacing` zulässt; ein gleitender Kasten behält ein `marginBottom` (in einem oberen Band) oder `marginTop` (in einem unteren Band), das breiter als der Gleitobjektabstand ist; ein zentrierter oder rechtsbündiger Gestaltungstext mit Laufweite (ein lebender Kolumnentitel, ein Auftakttitel) wird nach seinen Buchstaben platziert, ohne die Laufweite nach dem letzten; unter einem Auftakt über die ganze Seitenbreite beginnt der Text, der die zweite Spalte eröffnet, dort, wo Text direkt unter dem Auftakt beginnen würde, auch wenn eine Überschrift auf den Auftakt folgt; die Punkte des Inhaltsverzeichnisses enden vor der Seitenzahl in einer Schrift, die eine Folge von Punkten auseinanderkernt; ein lebender Kolumnentitel liest eine Überschrift wie geschrieben, ohne Leerzeichen, wo eine ihrer Zeilen nach einem Bindestrich oder einem Strich oder innerhalb eines aus Breitengründen geschnittenen Worts endet (`MEDIOAMBIENTALES`, nicht `MEDIOAMBIENTALE S`), und das `{titleText}` einer Überschriftengestaltung liest sie ebenso (`thousand-colour`, nicht `thousand- colour`); ein am Fuß oder an der Mitte des Bands einer Überschriftengestaltung verankerter Text hält das Band hoch genug, um ihn zu fassen, sodass er nicht mehr über den Text über der Überschrift steigt; ein Wort, das breiter als seine Zeile ist und neben einem eigenen Bindestrich geschnitten wird, wird nach diesem Bindestrich geschnitten und erhält keinen zweiten; der Punkt nach einer in einer anderen verschachtelten Liste nimmt das `itemSpacing` seiner eigenen Liste an, nicht das der verschachtelten; und der Rest eines Worts, das wegen Überbreite geschnitten wurde, behält seine eigenen Umbruchstellen, sodass eine Webadresse weiter an ihren Fugen umbricht und ein Kompositum an seinen Bindestrichen statt an den Silben des Wörterbuchs.

`pinLegacyMathSize` multipliziert den Faktor mit 1,1312 (0,5 ÷ 0,442) und teilt die Abstände abgesetzter Formeln in `em` durch denselben Faktor. Der Faktor allein reicht für ein Buch mit abgesetzten Formeln nicht: Ihre Abstände sind Längen in der eigenen Größe der Formel, sie würden also um dieselben 13 % wachsen und den Text darunter nach unten schieben. Für die Standardabstände ausgeschrieben, lauten die drei Werte:

```ts
math: {
  fontSizeScale: 1.131,
  marginTop: { value: 0.7072, unit: 'em' },
  marginBottom: { value: 0.7072, unit: 'em' },
} // formulas as large as 1.4 set them, with the space 1.4 left around them
```

Wo die Konfiguration gespeichert wurde, erkennt die Engine das und erledigt es für Sie: `openBundle` / `readBundle` für ein `.postext`-Paket, das vor 1.5 geschrieben wurde (siehe [Pakete, die postext 1.4 oder früher geschrieben hat](https://postext.dev/de/docs/configuration-bundles.md#pakete-die-postext-14-oder-früher-geschrieben-hat)), und die Sandbox für die Bücher, die Arbeitskopie und die Dateien `postext-config.json`, die damals gespeichert wurden (siehe **Sandbox → Persistenz**). Sie werden durch `migrateConfig` gelesen, das die Größe fixiert (`pinLegacyMathSize`): `fontSizeScale` wird zum gespeicherten Faktor (1, wenn nicht gesetzt) × 1,1312, und ein Abstand abgesetzter Formeln in `em` oder `rem` – eine Länge in der eigenen Größe der Formel – wird durch denselben Faktor geteilt, sodass der Abstand um eine abgesetzte Formel bleibt, wie 1.4 ihn ließ (aus dem Standard 0,8 em werden 0,7072 em). Ein Abstand in einer Seiteneinheit (`pt`, `mm` …) bleibt, wie er ist, ebenso eine Konfiguration mit `enabled: false` oder eine, deren Buch kein `$` enthält. Das alte Buch wird dann so gesetzt, wie 1.4 es setzte, und sein Abschnitt `math` zeigt die Größe, in der es gesetzt wird. Um ein solches Buch stattdessen in der heutigen Größe zu setzen, setzen Sie diese Werte zurück – **Formeln → Größenfaktor**, *Abstand oben (abgesetzt)* und *Abstand unten (abgesetzt)* in der Sandbox, oder im Code:

```ts
math: { ...config.math, fontSizeScale: 1, marginTop: undefined, marginBottom: undefined } // today's size and margins
```

**Nummerierte Gleichungen.** Eine abgesetzte Formel mit Nummer überspannt ihre Satzbreite (die Spalte oder die Innenbreite des Kastens, in dem sie steht): Die Gleichung wird zentriert und ihre Nummer rechtsbündig auf die Zeile der Gleichung gesetzt, auf jede nummerierte Zeile eines `align`. Eine Nummer kommt von einem `\label{eq:x}` (seit postext 1.19): Die beschrifteten Formeln und die beschrifteten Zeilen eines `align`, `gather`, `alignat`, `flalign` oder `eqnarray` werden in Lesereihenfolge mit `equationNumbering` nummeriert, sofern eine Zeile nicht `\nonumber` oder `\notag` sagt. Umgebungen wie `equation` werden nicht von selbst nummeriert: Eine Formel ohne Label hat keine Nummer. `\tag{…}` druckt die angegebene Bezeichnung in Klammern und `\tag*{…}` wie geschrieben; keine von beiden wird gezählt, und ein `\label` daneben benennt sie. Eine nummerierte Gleichung, die breiter als ihre Satzbreite ist, läuft wie jede abgesetzte Formel nach rechts über. (Bis postext 1.4 wurde eine Formel mit `\tag` gar nicht gezeichnet; bis 1.18 nummerierte nur `\tag` eine.)

`\eqref{eq:x}` im Text druckt die Nummer in ihrem `format`, (3), und `\ref{eq:x}` die bloße Nummer; ebenso `:ref{id="eq:x"}` und `@eq:x` (siehe [Querverweise](https://postext.dev/de/docs/document-format-notes-references.md#querverweise-und-anker)), und innerhalb einer Formel druckt `\eqref` sie als Text. In einem Kapitel für Kapitel gesetzten Buch läuft der Zähler ab dem vorigen Kapitel weiter: `continuationAfter` trägt ihn in `LayoutContinuation.statementCounters` (`equation`), und die Gliederung des Buchs gibt jedem Label seine Nummer (`OutlineEntry.numberLabel`), sodass ein Verweis auf eine Gleichung eines anderen Kapitels sie druckt.

```ts
math: {
  equationNumbering: { numberingTemplate: '{h1}.{n}', resetOn: 'h1' }, // (1.1), (1.2)… (2.1)
}
```

Resolver und Stripper entsprechen denen der anderen Abschnitte:

```ts
import {
  DEFAULT_MATH_CONFIG,
  resolveMathConfig,
  stripMathDefaults,
} from 'postext';

const resolved = resolveMathConfig(config.math);
const minimal  = stripMathDefaults(config.math);
```

### Die Mathematik-Engine starten

MathJax wird bei Bedarf geladen, nicht mit dem Rest der Engine. Setzen Sie im Hauptthread, starten Sie es, bevor Sie ein Dokument mit Formeln bauen:

```ts
import { buildDocument, initMathEngine, renderPage } from 'postext';

await initMathEngine(); // loads MathJax once; later calls resolve at once
const doc = buildDocument({ markdown: 'Euler: $e^{i\\pi}+1=0$.' }, config);
document.body.append(renderPage(doc.pages[0], doc));
```

- **Bis die Engine läuft, sind Formeln Platzhalter.** Jede wird als grauer Kasten in geschätzter Größe gesetzt. Wird ein Dokument mit Mathematik gesetzt, bevor `initMathEngine()` je aufgerufen wurde, zeigt die Konsole eine Warnung dazu.
- **Der Layout-Worker startet sie für Sie.** Ein Build in `postext/worker` ruft `initMathEngine()` selbst auf, wenn das Markdown ein `$` enthält.
- **Jetzt setzen, erneut, wenn sie bereit ist.** `isMathReady()` sagt, ob die Engine läuft. `onMathReady(fn)` ruft `fn` auf, sobald sie es tut (sofort, wenn sie es schon tut), und gibt eine Funktion zurück, die den Aufruf abbricht. Ein Editor kann sofort Platzhalter zeigen und erneut setzen, wenn MathJax eintrifft; solange `initMathEngine()` läuft, wird keine Warnung ausgegeben.
- **Fehlschlag.** `initMathEngine()` wird abgelehnt, wenn MathJax nicht geladen werden kann, und ein späterer Aufruf versucht es erneut.
- **Jeder Bundler, Node oder ein CDN.** MathJax liegt dem Paket als ein vorgebündeltes Modul bei (etwa 1,8 MB vor der Kompression, nur von `initMathEngine` abgerufen). Das einfache `import { initMathEngine } from 'https://esm.sh/postext'` funktioniert; kein `?bundle` nötig. Das Paket `mathjax-full` wird nur zum Bauen von postext gebraucht, die Installation von postext installiert es also nicht. MathJax und der mitgebündelte mhchem-Parser stehen unter der Apache-2.0-Lizenz: Ihre Hinweise und der Lizenztext liegen neben dem Modul, als `dist/math/THIRD_PARTY_LICENSES.txt`.
- **Eine Engine pro Seite.** Die Engine und ihr Cache gesetzter Formeln werden von allem geteilt, was `postext` im selben JavaScript-Realm importiert (siehe [Globaler Zustand innerhalb einer Seite](https://postext.dev/de/docs/configuration-programmatic-usage.md#globaler-zustand-innerhalb-einer-seite)).

Die Grammatik auf der Dokumentseite (`$...$`, `$$...$$`, ein wörtliches Dollarzeichen maskieren) finden Sie unter [Dokumentformat](https://postext.dev/de/docs/document-format-inline.md#mathematische-formeln).
