Zum Hauptinhalt springen

Kapitel 3.7 · Teil II · Das Handwerk

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

Aktualisiert 2026-10-1616 minIm Kapitel 3 Konfigurationenescadefritptzhjaar

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

EigenschaftTypStandardBeschreibung
fontFamilystringerbt bodyText.fontFamilySchrift des Punkttexts.
colorColorValueHauptfarbe (#295AA3)Farbe von Text und Aufzählungszeichen der Punkte. An den Eintrag main-color der Standardpalette gebunden.
fontWeightnumber700Schriftstärke des Punkttexts (100–900). Aufzählungszeichen erben diese Schriftstärke, sofern sie nicht pro Ebene überschrieben wird.
italicbooleanfalseSetzt den Punkttext kursiv.
bulletCharstring'•'Glyphe, die als Aufzählungszeichen dient.
bulletFontSizeDimension1 emGröße der Glyphe des Aufzählungszeichens. Relative Einheiten wachsen mit der Schriftgröße des Fließtexts.
gapDimension0.5 emHorizontaler Abstand zwischen Aufzählungszeichen und Punkttext.
indentDimension0 emGrundeinzug der Ebene 1. Tiefere Ebenen schließen an den Textanfang der übergeordneten Ebene an, sofern nicht überschrieben (siehe unten).
bulletVerticalOffsetDimension0 emFeinjustierung der vertikalen Position des Aufzählungszeichens. Negative Werte schieben es nach oben, positive nach unten.
marginTop / marginBottomDimension1.5 emAbstand vor und nach der Liste als Ganzes.
itemSpacingDimension0 emZusä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).
snapTopToGridbooleanfalseRundet 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.
hangingIndentbooleantrueWenn aktiviert, richten sich umbrochene Zeilen am ersten Textzeichen aus statt unter dem Aufzählungszeichen.
levelsUnorderedListLevelConfig[]—Ü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:

EigenschaftTypStandardBeschreibung
taskCheckboxCharstring'☐'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.
taskCheckedCharstring'☑'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.
taskCompletedStrikethroughbooleantrueStreicht den Text erledigter Aufgaben durch.
taskCompletedColorColorValueerbt die Farbe des PunktsOptionale 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:

EigenschaftTypBeschreibung
bulletCharstringGlyphe des Aufzählungszeichens für diese Tiefe.
fontFamilystringSchriftfamilie der Punkte für diese Tiefe.
fontSizeDimensionGröße der Glyphe des Aufzählungszeichens für diese Tiefe.
colorColorValueFarbe der Punkte.
fontWeightnumberSchriftstärke der Punkte.
italicbooleanKursiv ein/aus.
indentDimensionAusdrücklicher Einzug des Aufzählungszeichens in dieser Tiefe. Siehe die Kaskadenregel unten.
verticalOffsetDimensionVertikale 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.

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

EigenschaftTypStandardBeschreibung
fontFamilystringerbt bodyText.fontFamilySchrift des Punkttexts und der Nummer.
colorColorValueHauptfarbe (#295AA3)Farbe von Text und Nummer der Punkte. An den Eintrag main-color der Standardpalette gebunden.
fontWeightnumber700Schriftstärke von Punkttext und Nummern (100–900).
italicbooleanfalseSetzt den Punkttext kursiv.
numberFormatOrderedListNumberFormat'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); ein unbekannter Wert nummeriert mit arabischen Ziffern und wird gemeldet.
prefixstring''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.
separatorstring'.'Zeichen zwischen Nummer und Text – typischerweise '.' oder ')'.
separatorFontFamilystringerbt fontFamilySchrift 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.
separatorFontWeightnumbererbt fontWeightSchriftstärke des Trenners (100–900).
separatorItalicbooleanerbt italicSetzt den Trenner kursiv.
separatorColorColorValueerbt colorFarbe des Trenners. Palettenverweise werden berücksichtigt.
separatorGapDimension0 emAbstand zwischen Nummer und Trenner. Der Punkttext beginnt weiterhin gap nach dem Trenner.
numberFontSizeDimension1 emGröße der Nummer.
gapDimension0.5 emHorizontaler Abstand zwischen Nummer und Punkttext.
indentDimension0 emGrundeinzug der Ebene 1; tiefere Ebenen schließen an den Textanfang der übergeordneten Ebene an, sofern nicht überschrieben.
numberVerticalOffsetDimension0 emFeinjustierung der vertikalen Position der Nummer.
marginTop / marginBottomDimension1.5 emAbstand vor und nach der Liste als Ganzes.
itemSpacingDimension0 emZusä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).
snapTopToGridbooleanfalseRundet 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.
hangingIndentbooleantrueUmbrochene Zeilen richten sich am ersten Textzeichen aus statt unter der Nummer.
levelsOrderedListLevelConfig[]—Ü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.

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 ①:

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.

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
  };
}
EigenschaftTypStandardBeschreibung
enabledbooleantrueMit 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.
fontSizeScalenumber1.0Faktor, 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).
colorColorValueerbt die Farbe des FließtextsFarbe 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.
marginTopDimension0.8emAbstand über einem Block abgesetzter Mathematik. Bei Inline-Mathematik ignoriert.
marginBottomDimension0.8emAbstand 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).
indentAfterDisplaybooleantrueRü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).
keepWithLeadInbooleanfalseHä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).
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:

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):

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:

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), 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:

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), 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.

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

Resolver und Stripper entsprechen denen der anderen Abschnitte:

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:

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).

Die Grammatik auf der Dokumentseite ($...$, $$...$$, ein wörtliches Dollarzeichen maskieren) finden Sie unter Dokumentformat.