Kapitel 5 · Teil II · Das Handwerk
Konfiguration: Text und Überschriften
Typografie des Fließtexts, Silbentrennung und Dokumentsprache; Überschriften, Aufzählungen, nummerierte Listen und Mathematik
Kurz gesagt
Diese Seite behandelt die Einstellungen für die Wörter auf der Seite. Sie wählen Schrift, Größe und Zeilenabstand des Haupttexts und legen fest, wie Wörter am Zeilenende getrennt werden. Sie teilen Postext mit, in welcher Sprache das Buch geschrieben ist. Sie bestimmen, wie jede Überschriftenebene aussieht und wie Aufzählungen und nummerierte Listen gesetzt werden. Der letzte Abschnitt legt Größe und Farbe mathematischer Formeln fest.
#Fließtext
Die Eigenschaft bodyText steuert die Typografie aller Absätze.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
fontFamily | string | 'EB Garamond' | Schriftfamilie des Fließtexts. Jede Google-Schrift, Systemschrift oder eigene Familie, die in customFonts deklariert ist. Eine einzige Familie, kein CSS-Font-Stack (siehe unten). |
fontSize | Dimension | 8 pt | Grundschriftgröße des Fließtexts. |
lineHeight | Dimension | 1.5 em | Vertikaler Abstand zwischen den Zeilen. Relative Einheiten (em, rem) wachsen mit der Schriftgröße. |
paragraphSpacing | boolean | false | Fügt, wenn aktiviert, zwischen aufeinanderfolgenden Absätzen eine Leerzeile (so hoch wie lineHeight) ein, wie es Verlage zur Trennung von Absätzen tun. |
color | ColorValue | #000000 | Textfarbe. |
boldColor | ColorValue | Hauptfarbe (#295AA3) | Farbe fetter (bold/strong) Textstellen. Sie wird aus dem Eintrag main-color der Standardpalette aufgelöst; ändern Sie die Palettenfarbe, färben sich alle fetten Stellen im ganzen Dokument neu. |
italicColor | ColorValue | Hauptfarbe (#295AA3) | Farbe kursiver (italic/emphasis) Textstellen. Derselbe an die Palette gebundene Standard wie bei boldColor. |
referenceColor | ColorValue | Hauptfarbe (#295AA3) | Farbe der Inline-Bezeichnungen von :ref (Verweise auf Ressourcen). Derselbe an die Palette gebundene Standard wie bei boldColor. Seit postext 1.5 folgt sie der Palette; bis 1.4 blieb sie #295AA3, gleich welche Hauptfarbe galt. |
referenceBold | boolean | true | Setzt die Inline-Bezeichnungen von :ref in der fetten Schrift. Ein Verweis behält die Hervorhebung des umgebenden Texts (innerhalb von … bleibt er bei beiden Werten fett kursiv); diese Option fügt nur Fett hinzu. |
referenceItalic | boolean | false | Setzt die Inline-Bezeichnungen von :ref kursiv. Ein Verweis in kursivem Text bleibt bei beiden Werten kursiv. |
emphasis | 'auto' | 'italic' | 'bold' | 'color' | 'overline' | 'auto' | Wie … gesetzt wird: kursiv, in der fetten Schrift und in boldColor, aufrecht in italicColor oder aufrecht mit einer Linie über den Wörtern. 'auto' ist in einem Dokument in arabischer Schrift 'bold' und in jedem anderen 'italic'. Siehe Arabischer Text. |
tashkil | 'keep' | 'strip' | 'strip-vowels' | 'keep' | Arabische Vokalzeichen: wie geschrieben gesetzt, alle entfernt oder bis auf die Schadda entfernt. Siehe Arabischer Text. |
textAlign | 'left' | 'justify' | 'start' | 'end' | 'justify' | Textausrichtung. 'left' (oder 'start') ist die Seite, an der eine Zeile beginnt: in einem Absatz von rechts nach links die rechte (siehe Schreibrichtung). Blocksatz verteilt den Weißraum über jede Zeile, sodass beide Kanten gerade sind. Die letzten Zeilen von Absätzen im Blocksatz laufen in ihrer natürlichen Breite aus – außer wenn Knuth-Plass eine überlange letzte Zeile in Kauf genommen hat, die auf das Stauchen des Leerraums angewiesen ist; dann werden die Wortabstände gestaucht, bis die Zeile genau die Satzbreite füllt (die Leimsetzung von TeX, im Canvas-, HTML- und PDF-Backend identisch angewendet). |
fontWeight | number | 400 | Schriftstärke des normalen Texts (100–900). |
boldFontWeight | number | 700 | Schriftstärke des fetten (bold/strong) Texts (100–900). |
hyphenation | HyphenationConfig | aktiviert, 'en-us' | Einstellungen der automatischen Silbentrennung. Siehe unten. |
firstLineIndent | Dimension | 1.5em | Einzug der ersten Zeile jedes Absatzes (oder aller Zeilen außer der ersten, wenn der hängende Einzug aktiviert ist). |
hangingIndent | boolean | false | Wenn aktiviert, gilt der Einzug für alle Zeilen außer der ersten (hängender Einzug). |
indentAfterHeading | boolean | true | Mit false wird der erste Absatz direkt nach einer Überschrift ohne Erstzeileneinzug gesetzt – eine typografische Konvention, die in wissenschaftlichen Publikationen und vielen Buchgestaltungen üblich ist. Dasselbe gilt für einen Absatz direkt nach einer Zeile :::space. Ein Kasten, der außerhalb des Texts dazwischen steht – in der Seitenspalte (span: 'side'), an Kopf oder Fuß einer Seite gleitend oder fixiert –, und eine gleitende Abbildung werden übergangen: In seiner Spalte folgt der Absatz weiterhin der Überschrift und wird stumpf gesetzt. Ein im Text gesetzter Kasten (placement: 'here') zählt, und der Absatz danach wird eingezogen. Ohne Wirkung, wenn hangingIndent aktiviert ist. |
maxWordSpacing | number | 2 | Obergrenze des Wortabstands im Blocksatz, als Vielfaches der normalen Leerzeichenbreite. Knuth-Plass hält jede Zeile darunter, bei der der Absatz es zulässt, und trennt dafür zuerst ein Wort oder verteilt den Überschuss auf die Nachbarzeilen; eine Zeile, die keine Wahl der Umbrüche darunter hält, wird darüber hinaus gedehnt, und eine über das 3-Fache des normalen Leerzeichens hinaus wird im Flattersatz gesetzt. Zeilen, die dieses Verhältnis überschreiten, gelten als „locker“: Siehe Zeilen, die der Umbruch nicht füllen kann, und maxJustifyTracking, damit sie stattdessen etwas Laufweite aufnehmen. |
minWordSpacing | number | 0.6 | Untergrenze des Wortabstands im Blocksatz, als Vielfaches der normalen Leerzeichenbreite. Beide Grenzen beschränken die Änderung jedes Leerzeichens gegenüber seiner eigenen Breite, gezählt in Leerzeichen des normalen Schnitts: Eine Zeile mit einem kursiven oder fetten Leerzeichen, das schmaler oder breiter ist als das normale, wird einige Hundertstel eines Leerzeichens unter oder über der Grenze gemalt, innerhalb derer sie umbrochen wurde. lineWordSpacing(line) liefert die Zahl, die die Grenzen beschränken; siehe Blocksatz. |
maxJustifyTracking | number | 0 | Höchste Laufweite, die eine Blocksatzzeile aufnehmen darf, in Tausendstel eines Gevierts in beide Richtungen (die InDesign-Einheit: 10 = 0,01 em pro Zeichen), wenn ihre Wortabstände allein über maxWordSpacing hinaus gedehnt oder unter minWordSpacing gestaucht würden. Der Teil der Anpassung jenseits der Grenze geht in die Buchstaben, sodass die Leerzeichen einer lockeren Zeile auf maxWordSpacing zurückkommen und eine enge Zeile bei minWordSpacing passt. Knuth-Plass berücksichtigt sie bei der Wahl der Umbrüche, und zwar nur für die Zeilen, die der Wortabstand allein über die Grenzen brächte: Die übrigen, die letzte Zeile eines Absatzes (sofern sie nicht überläuft), eine Zeile aus einem Wort und eine Zeile mit einem Chip nehmen keine auf. Die Zeile speichert sie als letterSpacing, und Canvas, HTML und PDF malen sie. Erfordert optimalLineBreaking. 0 schaltet sie ab. Siehe Laufweite als letztes Mittel. |
kashida | 'auto' | 'none' | 'auto' in einem Dokument in arabischer Schrift, sonst 'none' | Blocksatz mit Kaschida: Eine Blocksatzzeile in arabischer Schrift nimmt ihren Überschuss in den Wortabständen auf (bis zu einem Viertel ihrer Breite) und danach in Kaschidas, ganzen Tatwils (U+0640), die zwischen zwei verbundenen Buchstaben eingefügt werden, nie als Sperrung. Knuth-Plass zählt die Dehnung jedes Worts als dehnbaren Raum. Nie in lateinischen Wörtern, Ziffern, Überschriften, Flattersatzzeilen oder der letzten Zeile eines Absatzes. Die Tatwils werden gemalt, aber aus reinem und kopiertem Text herausgelassen. Siehe Kaschida in arabischem Text. |
kashidaPatterns | 'auto' | 'naskh' | 'simple' | 'nastaliq' | 'auto' | Welche Verbindungen eine Kaschida erhalten und in welcher Reihenfolge: die klassischen Naschi-Regeln, die Prioritäten von Microsoft oder die für Nastaʿlīq angepassten Naschi-Regeln (nach raqim-kashida). 'auto' liest die Fließtextschrift: keine in einer Ruqʿa- oder Dīwānī-Schrift (Aref Ruqaa), Nastaʿlīq-Regeln in einer Nastaʿlīq-Schrift, sonst Naschi. |
kashidaPerWord | number | 1 | Höchstzahl der Dehnungen in einem Wort. |
kashidaMaxLength | number | 0.6 | Längste Dehnung an einer Verbindung, in Geviert; sie nimmt so viele ganze Tatwils auf, wie hineinpassen. |
optimalLineBreaking | boolean | true | Verwendet den optimalen Zeilenumbruch nach Knuth-Plass statt des gierigen First-Fit-Verfahrens. Ergibt gleichmäßigere Wortabstände über den ganzen Absatz. Ein chinesischer, japanischer oder koreanischer Absatz (siehe Ostasiatische Typografie) oder einer mit einem Wort, das breiter als die Spalte ist, wird weiterhin Zeile für Zeile gesetzt; ein lateinischer Absatz, der ein paar CJK-Wörter zitiert, behält ihn. Flattersatz nutzt ihn mit optimalRagged ebenfalls. Siehe Silbentrennung und Blocksatz. |
optimalRagged | boolean | true | Umbricht auch den laufenden Text im Flattersatz mit Knuth-Plass: Fließtext, Zitate und Listenpunkte, die links- oder rechtsbündig oder zentriert gesetzt sind, sowie Absatzformate im Flattersatz, Kastentexte und die Texte von Teilen und Abschnittsformaten. Die Wortabstände behalten ihre Breite. Der Umbruch bewertet, wie weit jede Zeile hinter der Satzbreite zurückbleibt (eine um 3 em zu kurze Zeile kostet so viel wie eine Blocksatzzeile bei maxWordSpacing), und gleicht so die Kante aus, statt jede Zeile vor der nächsten zu füllen; die Regeln für zu kurze Ausgangszeilen (avoidRunts, tightenRunts) und hyphenateAcrossColumns wirken im Flattersatz wie im Blocksatz. Mit hyphenation.ragged entscheidet weiterhin die Zone, welche Silben eine Zeile beenden dürfen (siehe Flattersatz). Überschriften, Legenden, Anmerkungen, Tabellenzellen und das Inhaltsverzeichnis im Flattersatz werden weiterhin Zeile für Zeile gesetzt. Erfordert optimalLineBreaking. false setzt Flattersatz Zeile für Zeile wie bis postext 1.4; früher gespeicherte Konfigurationen, die laufenden Text im Flattersatz setzen, werden damit gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). |
breakAfterDashes | boolean | true | Erlaubt ein Zeilenende nach einem Geviert- oder Halbgeviertstrich, der ohne Abstand zwischen Wörtern steht: say—that’s, riddles.—I, Hamburg–Berlin, auch wenn das Wort nach dem Strich in einem anderen Stil gesetzt ist (see—and). Knuth-Plass behandelt die Stelle wie einen Wortzwischenraum, und die Zeile endet ohne Zusatz auf dem Strich. Nie nach einem Strich, der einen Einschub oder eine Dialogzeile eröffnet (—dijo, said "—Hola, sagte »—Ich: ein Leerzeichen oder ein Leerzeichen und ein Anführungszeichen vor dem Strich; nach einem Anführungszeichen, das ein Wort schließt, wie in "no"—and, deutsch „nein“—und oder französisch « non »—et, darf die Zeile enden), vor Satzzeichen (él—,), vor einem Anführungszeichen oder einer Klammer (thinking—" and, says—“no”, says—(no): Ein Anführungszeichen nach einem Strich schließt oft die Rede, die der Strich abgebrochen hat), innerhalb einer Folge von Strichen oder innerhalb eines Zahlenbereichs mit Halbgeviertstrich (1914–1918). false behält die Umbrüche von 1.4: Knuth-Plass bricht nie nach einem Strich um, und der zeilenweise Umbruch von formatiertem oder getrenntem Flattersatz nur zwischen zwei Buchstaben; früher gespeicherte Konfigurationen, deren Text einen solchen Strich setzt, werden damit gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Gilt für laufenden Text, Überschriften, Listen, Zitate und Kästen. Legenden, Anmerkungen, Tabellenzellen und das Inhaltsverzeichnis behalten die Umbrüche von 1.4, und ein einfacher Absatz im Flattersatz, der Zeile für Zeile gesetzt wird, folgt in jedem Fall den eigenen Regeln von Pretext. |
breakAfterHyphens | boolean | true | Erlaubt ein Zeilenende nach dem Bindestrich eines Kompositums, einem Bindestrich zwischen zwei Buchstaben (well- · known, vencer- · se), in jedem Absatz, den Knuth-Plass umbricht. Die Zeile endet auf dem Bindestrich, und nichts wird hinzugefügt; der Umbruch kostet so viel wie eine Silbe. Nie nach einem Bindestrich neben einer Ziffer oder einem Zeichen (COVID-19, -5 °C). Ein Absatz im Blocksatz ohne Inline-Formatierung bricht dort nur mit zwei Buchstaben auf jeder Seite des Bindestrichs um, sodass keine Zeile auf dem e- von e-mail endet. false behält die Umbrüche von 1.4: Ein Absatz im Blocksatz ohne Inline-Formatierung bricht dort nie um, während derselbe Absatz mit einem einzigen kursiven Wort darin, ein Absatz im Flattersatz und ein zeilenweise gesetzter Absatz es tun; früher gespeicherte Konfigurationen, deren Text ein Kompositum setzt, werden damit gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Gilt für laufenden Text, Überschriften, Listen, Zitate und Kästen. Siehe Zusammengesetzte Wörter. |
repeatHyphen | boolean | false | Beginnt die Zeile nach einem Umbruch am Bindestrich eines Kompositums ebenfalls mit einem Bindestrich: vencer- · -se, wie es die portugiesische Rechtschreibung verlangt, und léxico- · -semántico, wie es die Regeln der Spanischen Akademie seit 2010 verlangen. Der wiederholte Bindestrich wird mit seiner Zeile gemessen und gemalt, die ihn als repeatedHyphen speichert; ihre Werte plainStart und sourceStart zeigen hinter ihn, sodass Links, lebende Kolumnentitel und die Sandbox das Wort so lesen, wie es geschrieben ist. Das PDF malt ihn unter einem /ActualText, das ihn auslässt, sodass aus dem PDF kopierter oder extrahierter Text das Wort einmal enthält. Eine Webadresse erhält nie einen. Gilt für laufenden Text, Überschriften, Listen, Zitate und Kästen; ein Absatz ohne Formatierung, der ein Kompositum enthält, wird dann von dem Umbruchverfahren umbrochen, das formatierten Text setzt. |
hardLineBreaks | boolean | true | Liest einen Backslash am Ende einer Quellzeile und vor einem Leerzeichen als erzwungenen Zeilenumbruch innerhalb eines Absatzes, eines Zitats oder eines Listenpunkts (der harte Umbruch von CommonMark): Die folgenden Wörter beginnen eine neue Zeile desselben Absatzes, und die Zeile davor wird wie eine letzte Zeile in ihrer natürlichen Breite gesetzt. Ein Backslash am Ende des Absatzes wird gedruckt, und zwei Leerzeichen am Zeilenende sind kein Umbruch (siehe Dokumentformat › Zeilenumbrüche). false behält die Lesart von 1.22: Die Backslashes werden gedruckt, und die Zeilen werden mit einem Leerzeichen verbunden; früher gespeicherte Konfigurationen, deren Text einen solchen Backslash enthält, werden damit gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Titel, Legenden, Anmerkungen und Tabellenzellen brechen in jedem Fall bei um. |
scriptContext | boolean | true | Formt ein Wort ohne Buchstaben (46., 1367), ».: nur Ziffern, Satzzeichen oder Symbole) in der Schrift des umgebenden Texts. Eine Schriftart kann solche Zeichen je nach Schriftsystem zeichnen (Amiri setzt Punkt und Klammern in lateinischem Text lateinisch und sonst arabisch, in anderen Breiten), und ein Shaper, dem man das Wort allein übergibt, wählt das Schriftsystem nach einer eigenen Regel, die sich zwischen Browserversionen und dem PDF unterscheidet. Ist die Option an, nimmt das Wort das Schriftsystem des nächsten Buchstabens davor in seiner Isolierung an (sonst danach), das des nächsten Buchstabens von rechts nach links, wenn es von rechts nach links gemalt wird, und das der Dokumentsprache, wenn kein Buchstabe in der Nähe ist; das Layout misst es in diesem Schriftsystem, und Canvas, HTML, EPUB mit festem Layout und PDF malen diese Formen in dieser Breite. Die Option wirkt in lateinischem, griechischem, kyrillischem, arabischem und hebräischem Umfeld und nur in einer Schriftart, deren Satzzeichen oder Ziffern sich mit dem Schriftsystem ändern; ein in arabischer Schrift geformtes Wort erhält keine Sperrung. Ein buchstabenloses Stück eines Worts, das Buchstaben hat (10.1006/ und .2001 einer DOI, die eine Zeile an ihren Fugen beendet), nimmt das Schriftsystem an, das es innerhalb des Worts hat. In einem chinesischen oder japanischen Dokument behalten ein doppeltes Auslassungszeichen oder ein doppelter Strich (……, ——), die in einem Satz eines anderen Schriftsystems zitiert werden, die Formen des Han-Texts. Listenmarken, die Bezeichnungen von Querverweisen, Gestaltungstexte, Comic-Lettering und vom CJK-Setzer gesetzte Absätze bleiben unberührt. false formt ein solches Wort allein, wie bis postext 1.27; eine vor configVersion 12 gespeicherte Konfiguration wird damit gelesen (pinLegacyScriptContext). Siehe Wörter ohne Buchstaben. |
shapingLanguage | 'document' | 'host' | 'document' | Die Sprache, in der der Text geformt wird: gemessen, gemalt und eingebettet. Eine Schrift antwortet unter einer Sprache mit anderen Glyphen (OpenType locl): Noto Serif SC setzt ihre Ziffern im Chinesischen anders, eine Schrift mit katalanischer Form zeichnet l·l anders, eine mit der türkischen Regel hält fi getrennt. 'document' (Standard seit postext 1.30): die Sprache des Dokuments (locale, sonst die Sprache der Silbentrennung; ein Dokument, das keine nennt, ist Englisch, en-US, und eines, dessen locale kein Sprach-Tag ist, wird in keiner Sprache geformt) und die eines Abschnitts, wo er eine nennt (:ltr[…]{lang=en}). Das Layout setzt sie auf jedem Kontext, mit dem es misst, sodass ein Dokument seine Zeilen auf einer Seite in jeder Sprache und in einem Layout-Worker gleich umbricht; der Canvas malt in ihr, der HTML-Betrachter und das EPUB deklarieren sie für das Dokument und für jede Seite, und das PDF formt mit dem OpenType-Sprachsystem der Sprache. Seit postext 1.30 wird der Text unter ihr gemessen, so wie er gemalt wird. Eine Zeichenkette hat eine Breite, gleich was vor ihr gemessen wurde: Chrome merkt sich die Wörter, die es geformt hat, und Noto Serif SC setzt 2026 in einer Zeichenkette ohne Zeichen jenseits von U+00FF 2,20 em breit und in einer mit einem solchen Zeichen 2,23 em, deshalb werden die beiden Arten von Zeichenketten auf getrennten Kontexten gemessen. Ein Wort von rechts nach links wird in jeder Schrift von rechts nach links gemessen. Ein Wort, das der Zeilenumbruch teilen darf (an einer Silbe oder einem Bindestrich), wird ganz gemessen und ganz gesetzt, wo es auf einer Zeile bleibt, auf dem Canvas, im HTML-Betrachter und im PDF, in jedem Absatz (seit postext 1.31: bis 1.30.1 maß ein Absatz ohne Formatierung jedes Stück eines solchen Worts für sich, sodass das, was eine Schrift über eine Trennstelle hinweg zeichnet, das ff von of·fice in EB Garamond oder der breite katalanische Punkt von Crimson Pro in l·l, in einem Wort eines Absatzes mit einer Kursiven darin erschien und im selben Wort eines einfachen Absatzes nicht). Unter 'host' misst ein Absatz ohne Formatierung weiterhin jedes Stück eines solchen Worts für sich. Von einem am Zeilenende getrennten Wort wird jeder Teil so gemessen, wie der Text gemalt wird: der Teil, der die nächste Zeile eröffnet, als eigener Text, und der erste Teil eines katalanischen col·lecció als col-. Ein Gestaltungstext (ein lebender Kolumnentitel, ein Kapitelauftakt, eine Überschriftengestaltung) wird Abschnitt für Abschnitt gemessen, jeder in der Richtung, in der er gemalt wird. Das PDF formt Wort für Wort wie der Canvas des Browsers (ein Wort endet an einem Leerzeichen, einem Tabulator, U+3000 oder U+200B und vor einem Han-Zeichen), setzt die chinesischen und japanischen Zeichen, die das Layout einzeln gemessen hat, einzeln und nimmt jedes Zeichen aus der Schriftdatei, aus der der Browser es genommen hat, sofern der Schrift-Provider das angibt (siehe Chinesische, japanische und koreanische Schriften). 'host': wie bis postext 1.28 misst das Layout in der Sprache der Seite, die es einbettet (in einem Worker in keiner), und der Canvas malt in derselben Sprache; der HTML-Betrachter deklariert die Sprache eines chinesischen, japanischen, koreanischen oder von rechts nach links laufenden Dokuments. Ein Dokument mit 'host' behält seine Breiten und sein PDF; in einem Absatz mit Formatierung setzen Canvas und HTML-Betrachter ein Wort, das auf einer Zeile bleibt, ebenfalls ganz (bis postext 1.29.2 malten sie es Stück für Stück). Darunter wird der Teil eines getrennten Worts, der die nächste Zeile eröffnet, als das ganze Wort ohne seinen ersten Teil gemessen, sodass eine Schrift, deren Form für die Sprache die Buchstaben auf beiden Seiten der Trennung braucht (das katalanische l·l von Crimson Pro, ein breiter Punkt, der nur zwischen zwei l gesetzt wird), nach dem Rest des Worts eine Lücke lässt, in dieser Schrift ein Drittelgeviert, auf einer Seite in dieser Sprache. Der Standard war 'document' allein in postext 1.29.0, dessen Canvas und PDF der Messung nicht folgten, 'host' in 1.29.1 und 1.29.2 und ab 1.30.0 wieder 'document'. Eine vor configVersion 14 gespeicherte Konfiguration, die die Einstellung nicht nennt, erhält 'host' ausgeschrieben (pinLegacyShapingLanguage), sodass ein gespeichertes Dokument seine Zeilen behält; eine, die einen Wert nennt, behält ihn. Ein Browser, dessen Canvas kein lang hat (Chrome vor 136 sowie Firefox und Safari, wo es fehlt), erhält keine Sprache und behält die Formen, die er immer gemessen hat, und die Kommandozeile setzt immer mit 'host' (siehe Unterschiede zur Sandbox). |
tabStops | TabStop[] | nicht gesetzt | Tabulatoren jedes Absatzes, Listenpunkts und Zitats: wohin ein Tabulator (:tab oder ein Tabulatorzeichen im Text) die Wörter nach ihm schickt. Ein Absatzformat oder ein Kastentext, der eigene setzt, ersetzt sie. Ohne Wert ist ein Tabulatorzeichen ein Wortzwischenraum, wie bisher, und ein :tab ohne erreichbaren Tabulator ebenfalls. Siehe Tabulatoren. Seit postext 1.23. |
tabInterval | Dimension | nicht gesetzt | Standardtabulatoren in diesem Abstand vom Anfang der Satzbreite, jenseits des letzten von tabStops. Ohne Wert ist ein Tabulator nach dem letzten Tabstopp ein Wortzwischenraum. Seit postext 1.23. |
blockquote | BlockquoteConfig | siehe unten | Wie Markdown-Zitate (> …) gesetzt werden: Farbe, Kursive und Einzüge. Siehe Zitate. |
#Zitate
Ein Zitat (Zeilen, die mit > beginnen) übernimmt Familie, Größe, Zeilenabstand, Schriftstärken, Ausrichtung und Silbentrennung des Fließtexts. bodyText.blockquote legt den Rest fest; ohne Wert sieht ein Zitat aus wie bis postext 1.4: grau, kursiv, mit dem Erstzeileneinzug des Fließtexts und ohne seitlichen Einzug.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
color | ColorValue | #666666 | Textfarbe. Eine an einen Paletteneintrag gebundene Farbe (paletteId) folgt diesem Eintrag, wie überall; Fett-, Kursiv- und Verweisfarbe des Fließtexts gelten in einem Zitat nicht. |
italic | boolean | true | Setzt den Text kursiv. Eine Stelle … darin wird wieder aufrecht; mit false ist sie kursiv wie in einem Absatz. |
indent | Dimension | 0 | Einzug jeder Zeile von der linken Kante der Spalte oder des Kastens. Die Satzbreite verringert sich um ihn, sodass Blocksatzzeilen an der rechten Kante enden. em ist die Größe des Fließtexts. |
firstLineIndent | Dimension | der des Fließtexts | Einzug der ersten Zeile jedes zitierten Absatzes, gezählt ab indent (mit hangingIndent des Fließtexts der Einzug jeder Zeile außer der ersten). Ohne Wert: bodyText.firstLineIndent. |
bodyText: {
firstLineIndent: { value: 1.5, unit: 'em' },
// Upright verse in the body colour, set in by 2 em, no first-line indent.
blockquote: { color: { hex: '#241f26', model: 'hex' }, italic: false, indent: { value: 2, unit: 'em' }, firstLineIndent: { value: 0, unit: 'em' } },
}In der Sandbox ist das die Gruppe Blockzitate des Abschnitts „Grundtext“.
#Vers
Ein Gedicht :::verse, dessen Zeilen keinen Halbverstrenner tragen, wird Zeile für Zeile gesetzt (siehe Dokumentformat › :::verse). bodyText.verse liefert die Standardwerte solcher Gedichte; ein gleichnamiges Attribut am Direktivenblock eines Gedichts setzt den Wert für dieses Gedicht.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
layout | 'auto' | 'bayt' | 'auto' | Wie ein Gedicht gesetzt wird, dessen Direktivenblock kein Layout nennt. 'auto': als Bayts, wenn eine Zeile einen Trenner (||) trägt, sonst Zeile für Zeile. 'bayt': immer als Bayts, ein Gedicht ohne Trenner als zentrierte einzelne Halbverse, wie bis postext 1.22. |
indentStep | Dimension | 0.5em | Breite eines führenden Leerzeichens einer Verszeile (ein Tabulator zählt vier, ein ideografisches Leerzeichen zwei); em ist die Größe des Gedichts. |
turnover | 'hang' | 'right' | 'hang' | Wie eine Zeile, die breiter als die Satzbreite ist, umbricht: hängend auf der nächsten Zeile oder bündig mit dem Ende der Satzbreite hinter turnoverMark. |
hang | Dimension | 2em | Einzug eines hängenden Umbruchs vom Anfang seiner Zeile, wenn das Absatzformat des Gedichts kein hangingIndent setzt. |
turnoverMark | string | '[' | Das Zeichen vor einem rechtsbündig gesetzten Umbruch. |
stanzaSpace | number | 1 | Abstand zwischen Strophen, in Zeilen des Zeilenabstands des Gedichts. Auf dem Grundlinienraster ergibt er ganze Rasterzeilen; ein Absatzformat mit snapToGrid: false hält ihn genau. |
keepStanzas | number | 0 | Hält jede Strophe mit höchstens so vielen Verszeilen ungeteilt in einer Spalte. 0 ist aus. |
tighten | boolean | true | Staucht die Wortabstände einer Zeile, die etwas breiter als die Satzbreite ist, bis auf bodyText.minWordSpacing ihrer natürlichen Breite und hält sie auf einer Zeile; nur eine Zeile, die dann noch zu breit ist, bricht um. Die Buchstaben werden dafür nie gesperrt. false bricht jede Zeile um, die breiter als die Satzbreite ist, wie postext 1.23. Das umfließende EPUB, dessen Zeilen das Lesesystem umbricht, staucht nicht. |
bodyText: {
// Turnovers flush right behind a bracket; tankas kept whole.
verse: { turnover: 'right', keepStanzas: 5 },
}Eine vor diesen Einstellungen gespeicherte Konfiguration (configVersion 8 oder älter), die ein Gedicht ohne Trenner setzt, wird mit layout: 'bayt' gelesen, sodass das Gedicht die zentrierten Zeilen behält, die postext 1.22 ihm gab. Eine von postext 1.23 gespeicherte (configVersion 9), die ein Gedicht Zeile für Zeile setzt, wird mit tighten: false gelesen, sodass ihre Zeilen dort umbrechen, wo 1.23 sie umbrach.
In der Sandbox ist das die Gruppe Verse des Abschnitts „Grundtext“.
#Tabulatoren
bodyText.tabStops listet die Tabstopps auf, zu denen ein Tabulator springt: :tab oder ein Tabulatorzeichen in einem Absatz mit Tabstopps (siehe Dokumentformat › Tabulatoren und Tabstopps für die Auszeichnung und dafür, wie eine Zeile gesetzt wird). Die tabStops eines Absatzformats ersetzen sie für dessen Absätze und body.tabStops eines Kastenformats in dessen Kästen; eine leere Liste setzt keine. Jeder Tabstopp ist ein TabStop:
bodyText: {
tabStops: [
{ position: { value: 30, unit: 'mm' } },
{ position: 'end', align: 'end', leader: '.', leaderGap: { value: 2, unit: 'pt' } },
],
tabInterval: { value: 10, unit: 'mm' },
}| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
position | | erforderlich | Wo der Tabstopp steht, gemessen von der Anfangskante der Satzbreite des Absatzes (nach dem indent eines Absatzformats; em ist die eigene Größe des Absatzes): eine Länge, 'end' für die Endkante der Satzbreite oder ein Anteil der Satzbreite ('50%'). In Text von rechts nach links ist die Anfangskante die rechte. |
align | 'start' | 'end' | 'center' | 'decimal' | 'start' | Wie der Text nach dem Tabulator am Tabstopp steht: Er beginnt dort, endet dort (der Text bis zum nächsten Tabulator oder zum Ende des Absatzes), ist darauf zentriert oder hat sein Dezimaltrennzeichen dort (ein Abschnitt ohne endet dort). |
leader | string | keine | Füllzeichen, das über den Raum vor dem Tabstopp wiederholt wird: '.', '. ', '·', '_', '-' oder ein beliebiger kurzer Text, in Schrift und Farbe des Absatzes; 'rule' zieht eine Linie etwas unterhalb der Grundlinie. Die Füllzeichen enden bündig mit dem Ende ihres Raums, sodass die Füllzeichen mehrerer Zeilen fluchten. Sie werden als ein ganzer Abschnitt gemessen, wie die einer Zeile des Inhaltsverzeichnisses. |
leaderGap | Dimension | 0.5em | Raum, der zwischen den Füllzeichen und dem Text auf beiden Seiten frei bleibt, wie leader.gap des Inhaltsverzeichnisses. Keiner vor den Füllzeichen, wenn der Tabulator seine Zeile eröffnet, keiner danach, wenn nichts folgt. |
decimalChar | string | das der Dokumentsprache | Das Trennzeichen, an dem ein Tabstopp 'decimal' ausrichtet: . im Englischen, Chinesischen, Japanischen und Arabischen, , im Spanischen, Katalanischen, Portugiesischen, Französischen, Deutschen und anderen. |
tabInterval fügt jenseits des letzten Tabstopps der Liste Tabstopps in diesem Abstand vom Anfang der Satzbreite hinzu; ohne die Option ist ein Tabulator nach dem letzten Tabstopp ein Wortzwischenraum. Ein im Text getipptes Tabulatorzeichen ist nur in einem Absatz ein Tabulator, dessen Format Tabstopps oder einen Abstand hat, eigene oder die des Fließtexts; überall sonst bleibt es der Wortzwischenraum, der es immer war, sodass ein gespeichertes Dokument wie bisher gesetzt wird und keine Fixierung braucht.
Die Tabstopps werden mit dem Rest der Konfiguration geprüft (siehe Konfigurationswarnungen): Ein unbekannter Schlüssel in einem Tabstopp (leaders) wird als unknownConfigKey mit dem nächstliegenden Schlüssel gemeldet; ein align, das keiner der vier Werte ist, als unknownConfigValue, und der Tabstopp wird als 'start' gesetzt; eine position, die weder Länge noch 'end' noch Prozentwert ist, als unknownConfigValue mit used: 'none', und der Tabstopp entfällt.
Farbe und Schrift der Füllzeichen sind die des Absatzes; eine eigene Einstellung dafür gibt es noch nicht.
#Initialen
Ein Absatz des Fließtexts kann mit einer Initiale beginnen: Sein erster Buchstabe wird groß neben seine ersten Zeilen gesetzt, die um die Breite des Buchstabens und einen Abstand verkürzt und wie alle anderen Zeilen gesetzt werden (nach Knuth-Plass umbrochen, im Blocksatz, mit Silbentrennung). Ein Absatzformat gibt dem ersten Absatz jeder Gruppe :::paragraphs des Formats eine (mit each: true jedem Absatz, etwa für einen Katalog von Einträgen); eine Überschriftenebene oder ein Überschriftenformat gibt dem ersten Absatz des Fließtexts nach der Überschrift eine (siehe das Feld dropCap unter Überschreibungen pro Ebene, Absatzformate und Überschriftenstile). Der Absatz nach der Überschrift wird über Direktivenblöcke von Containern, Direktiven, Kästen, die den Textfluss verlassen haben, und gleitende Abbildungen hinweg gefunden, so wie indentAfterHeading ihn findet; ein Absatz in einem Kasten, einem Listenpunkt, einem Zitat, einem Gedicht oder einer Anmerkung erhält nie eine. Im Text schalten {dropcap}, {dropcap=false} und {dropcap=N} auf einer Überschriftenzeile oder einem Direktivenblock :::paragraphs sie für dieses Kapitel oder diese Gruppe ein oder aus oder setzen ihre Zeilenzahl (siehe Dokumentformat › Initialen). Seit postext 1.23.
headings: {
levels: [
{ level: 1, dropCap: { lines: 3, fontFamily: 'Libre Bodoni', fontWeight: 700, color: { hex: '#8b2e2a', model: 'hex', paletteId: 'accent' }, leadIn: { words: 3 } } },
],
},| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
lines | number | 3 | Zeilen, über die sich die Initiale erstreckt, von der Oberkante ihrer Versalien bis zu ihrer Grundlinie. 1 mit einer größeren fontSize ist eine erhabene Initiale, die auf der ersten Grundlinie steht. |
sink | number | lines | Zeilen, um die die Initiale in den Text absinkt: Sie steht auf der Grundlinie der Zeile sink, und diese Zeilen werden verkürzt. Weniger als lines hebt sie über die erste Zeile. |
characters | number | 1 | Groß gesetzte Graphem-Cluster: É, ein Buchstabe mit einem kombinierenden Zeichen oder ein Zeichen außerhalb der Basic Multilingual Plane zählt als eins. Nicht über das erste Wort hinaus. |
fontFamily, fontWeight, italic | string, number, boolean | die des Absatzes; false | Schrift der Initiale. Sie wird mit den übrigen Schriften des Dokuments geladen und eingebettet. |
fontSize | Dimension | siehe unten | Größe der Initiale. Ohne Wert: die Größe, bei der die Oberkante ihrer Versalien auf der Höhe der Versalien der ersten Zeile liegt, während sie lines Zeilen tiefer steht. |
color | ColorValue | die des Absatzes | Eine an die Palette gebundene Farbe folgt den Paletten von Teilen und Abschnitten. |
gap | Dimension | 0.15em | Abstand zwischen der Initiale und den verkürzten Zeilen; em ist die Textgröße. |
punctuation | 'with-cap' | 'hang' | 'text' | 'with-cap' | Ein öffnendes Anführungszeichen, ¿, ¡ oder eine Klammer vor dem Buchstaben: groß als Teil der Initiale gesetzt, in Textgröße außerhalb der Satzbreite davor hängend oder in Textgröße am Anfang der ersten Zeile nach der Initiale gesetzt. |
leadIn | { words, smallCaps, uppercase } | keiner | Die ersten words Wörter nach der Initiale in Kapitälchen (Standard) oder in Versalien (uppercase: true); words: 'line' nimmt die Wörter der ersten Zeile. Ein Auftakt über die erste Zeile wird in einem ersten Satzlauf gezählt und in einem zweiten gesetzt: In Kapitälchen kann die Zeile dann ein Wort mehr fassen, das wie geschrieben gesetzt wird. |
shortParagraph | 'reserve' | 'shrink' | 'skip' | 'reserve' | Ein Absatz mit weniger Zeilen als sink: den Block sink Zeilen hoch halten, damit der nächste Block unter der Initiale beginnt, die Initiale über die eigenen Zeilen des Absatzes setzen oder den Absatz ohne Initiale setzen. Jeder Fall löst eine Inhaltswarnung dropCap aus. |
each | boolean | false | Nur Absatzformate: Jeder Absatz der Gruppe beginnt mit der Initiale, nicht nur der erste. |
Wie der Buchstabe gesetzt wird:
- Größe. Beide Versalhöhen, die des Texts und die der Initiale, werden an ihren Schriften gemessen (an der Farbe eines
H; im chinesischen oder japanischen Text an der Initiale selbst), und eine Schrift ohne Angaben zur Farbe zählt ihre Versalien als 0,72 ihrer Größe. Die Standardgröße passt zu jedem Schriftpaar, eine Korrektur pro Schrift ist also nicht nötig. DasdropCapeines Gestaltungstexts behält seine festen 0,72 (siehe Textelemente). - Der Buchstabe und sein Wort. Die Initiale nimmt ganze Graphem-Cluster. Der Rest des ersten Worts folgt ohne Zwischenraum; ein Wort aus einem Buchstaben (A, Y) behält seinen Wortzwischenraum am Anfang der ersten Zeile. Der eigene Erstzeileneinzug des Absatzes entfällt. Kopieren, Suche, die Source-Map und die Einfügemarke der Sandbox lesen den Absatz wie geschrieben: Der reine Text des Blocks enthält den Buchstaben,
plainStartder ersten Zeile zählt über ihn hinaus, undVDTBlock.dropCaphält seinen Bereich und seine Geometrie auf dem Fragment mit der ersten Zeile. - Eine erhabene Initiale (
lines: 1mit einer größerenfontSizeodersinkunterlines) ragt über die erste Zeile hinaus, und der Absatz hält über sich diesen Überstand in ganzen Rasterzeilen frei, sodass sie den Text darüber nicht überdruckt. - Umbruch. Der Absatz bricht nie vor der Zeile
sinkum: Er rückt stattdessen ganz in die nächste Spalte oder auf die nächste Seite, es sei denn, er steht allein in einer leeren Spalte, die diese Zeilen nicht fassen kann; dann bricht er trotzdem um und löst eine WarnungdropCapaus. Eine Überschrift, die mit ihrem Text zusammengehalten wird, behält diese Zeilen unter sich. Der Teil, der in der nächsten Spalte weitergeht, trägt keine Initiale und hat Zeilen in voller Breite; wird er für eine Spalte anderer Breite erneut umbrochen, behalten die ersten Zeilen ihren Einzug. Der Spaltenausgleich darf den Absatz wie jeden anderen lockerer oder enger setzen und fügt nie Abstand zwischen den verkürzten Zeilen ein. - Schriftsysteme. Die Zeilen werden auf der Anfangsseite verkürzt: links in lateinischem Text, rechts im Arabischen und Hebräischen. Ein Buchstabe, der mit dem nächsten verbunden wird (Arabisch, Syrisch, N’Ko), wird nicht abgesetzt, und der Absatz löst eine Warnung
dropCapaus; horizontales Chinesisch und Japanisch nehmen eine Initiale aus einem Zeichen (首字下沉). Vertikaler Text nimmt keine (Warnung). Ein Absatz, der ohne Buchstaben oder Ziffer beginnt (ein Verweis, eine Formel, ein Anmerkungszeichen), nimmt ebenfalls keine (Warnung). - Ausgaben. Canvas, HTML-Betrachter und EPUB mit festem Layout malen die Initiale neben die Zeilen; das HTML schreibt sie unmittelbar vor den Text der ersten Zeile, ohne etwas dazwischen, sodass ein Screenreader das Wort ganz liest. In einem getaggten PDF ist die Initiale Teil des
Pdes Absatzes und bildet mit dem Rest ihres Worts einenSpan, dessen/ActualTextdas Wort ist: Die Textextraktion liest Long before, nie L ong before. Ein umfließendes EPUB setzt sie als CSS-initial-letter(lines, sink), gleitend, wo das Lesesystem das nicht unterstützt.
Die Einstellungen werden mit dem Rest der Konfiguration geprüft (siehe Konfigurationswarnungen): Ein unbekannter Schlüssel in einer Initiale oder ihrem Auftakt wird als unknownConfigKey gemeldet, eine punctuation oder ein shortParagraph, das keines seiner Wörter ist, oder ein lines, sink oder characters, das keine ganze Zahl ab 1 ist, als unknownConfigValue, und der Standardwert wird verwendet. Initialen sind standardmäßig aus, daher ändert sich kein gespeichertes Dokument.
#Eine Familie pro fontFamily
fontFamily – hier und in jedem anderen Feld für Schriftfamilien (headings.fontFamily, tableStyle.bodyFontFamily, separatorFontFamily, fontFamily eines Chip-Formats oder eines Gestaltungselements …) – nennt eine Familie. Canvas, HTML-Ausgabe und PDF müssen dieselbe Schrift setzen, und das PDF bettet eine Schrift pro Familie ohne Ersatzkette ein, sodass ein CSS-Font-Stack nichts hätte, worauf er zurückfallen könnte. Ein Stack wird in seiner ersten Familie gesetzt und als Konfigurationswarnung gemeldet:
bodyText: { fontFamily: "'EB Garamond', Georgia, serif" } // set in EB GaramondLaden Sie diese Familie vor dem Setzen (siehe Eigene Schriften und den Schrift-Provider unter PDFs erzeugen); fehlt sie, misst der Browser mit seiner Standardschrift, gleich was der Rest des Stacks sagt. Ein Komma in Anführungszeichen ist Teil eines Namens ('"Foo, Bar"' ist eine Familie).
#Silbentrennung
Ist die Textausrichtung auf 'justify' gesetzt, verhindert die Silbentrennung übermäßige Wortabstände, indem sie lange Wörter an Silbengrenzen trennt. Die Engine findet natürliche Trennstellen an Silbengrenzen mit Mustern nach TeX/Liang. Eine ausführliche Erklärung finden Sie unter Silbentrennung und Blocksatz. Flattersatz wird nur getrennt, wenn Sie es verlangen: siehe Flattersatz weiter unten.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
enabled | boolean | true | Ob Silbentrennung erlaubt ist. |
locale | LocaleTag | locale der obersten Ebene, sonst 'en-us' | Sprachregeln für Silbengrenzen: eine der unten unterstützten Sprachen oder ein beliebiges BCP-47-Tag ('es-ES', 'pt-BR'). |
ragged | boolean | false | Trennt auch Flattersatz (links- oder rechtsbündig oder zentriert) innerhalb der zone. Siehe Flattersatz. |
zone | Dimension | 3em | Trennzone des Flattersatzes: Ein Wort, das nicht passt, wird nur getrennt, wenn es ganz auf die nächste Zeile zu schicken eine Lücke hinterließe, die breiter als dieser Wert ist. em bezieht sich auf die eigene Schriftgröße des Texts. Im Blocksatz ignoriert. |
compounds | boolean | true | Lässt das Wörterbuch die Wörter eines Kompositums trennen, eines Worts mit einem Bindestrich zwischen zwei Buchstaben (af-ter-dinner). false hält ein solches Wort bis auf seinen eigenen Bindestrich ganz, an dem die Zeile weiterhin enden darf (after- · dinner), wie es TeX tut. Ein im Wort getipptes weiches Trennzeichen bricht weiterhin, und ein Kompositum, das breiter als die ganze Zeile ist, wird weiterhin getrennt. Gilt für laufenden Text, Überschriften, Listen, Zitate und Kästen; Legenden, Anmerkungen, Tabellenzellen und das Inhaltsverzeichnis trennen Komposita weiterhin. Siehe Zusammengesetzte Wörter. |
exceptions | string[] | keine | Wörter, die das Wörterbuch nicht oder nur an den im Eintrag angegebenen Stellen trennen darf: 'Alice' wird nie getrennt, 'You-Tube' nur an seinem Bindestrich. Siehe Ungetrennte Wörter. |
capitalized | boolean | true | Trennt großgeschriebene Wörter wie alle anderen. false hält jedes Wort ganz, das mit einem Großbuchstaben beginnt (Alice, Ámsterdam, UNESCO), das erste Wort eines Satzes eingeschlossen. Siehe Ungetrennte Wörter. |
Unterstützte Sprachen: 'en-us' (Englisch), 'es' (Spanisch), 'fr' (Französisch), 'de' (Deutsch), 'it' (Italienisch), 'pt' (Portugiesisch), 'ca' (Katalanisch), 'nl' (Niederländisch).
Region-, Schrift- und Varianten-Subtags werden bei der Wahl der Muster ignoriert, ebenso Groß- und Kleinschreibung und Trenner _: 'es-ES', 'es-MX' und 'es_419' trennen mit 'es', 'pt-BR' mit 'pt' und jedes englische Tag ('en', 'en-GB') mit 'en-us' – den einzigen mitgelieferten englischen Mustern, britischer Text erhält also amerikanische Trennungen. Eine Sprache ohne mitgelieferte Muster ('sv', 'pl', 'fi' …) wird mit den Mustern von 'en-us' getrennt, was falsche Trennungen statt gar keiner ergibt; die Engine meldet das einmal pro Tag mit einem console.warn, und die Sandbox führt es in ihrem Bedienfeld „Prüfungen“ auf. Setzen Sie für ein solches Dokument enabled: false; das bringt auch die Warnung zum Schweigen. Chinesisch, Japanisch und Koreanisch (zh, ja, ko, gleich mit welcher Region oder Schrift) brauchen keine Muster und geben keine Warnung aus: Ein Dokument in einer dieser Sprachen wird ohne Silbentrennung gesetzt. Um die darin zitierten lateinischen Wörter zu trennen, setzen Sie enabled: true und nennen deren Sprache in locale ('en-us' für Englisch). enabled: true ohne locale oder mit einer chinesischen, japanischen oder koreanischen lässt die Silbentrennung aus und meldet das einmal auf der Konsole. matchHyphenationLocale(tag) gibt die mitgelieferte Sprache zurück, der ein Tag zugeordnet wird (undefined, wenn es keine gibt), und HYPHENATION_LOCALES listet die mitgelieferten auf. Die aufgelöste Konfiguration (doc.config.bodyText.hyphenation) nennt in locale die tatsächlich verwendeten Muster und behält in tag das von Ihnen angegebene Tag, wenn es abweicht. Das PDF-Backend deklariert die Dokumentsprache aus dem locale der obersten Ebene und nur dann aus diesem Tag, wenn locale nicht gesetzt ist (siehe Dokumentsprache).
import { matchHyphenationLocale } from 'postext';
matchHyphenationLocale('es-MX'); // 'es'
matchHyphenationLocale('en-GB'); // 'en-us'
matchHyphenationLocale('sv'); // undefined: hyphenated with 'en-us', with a console warningWörter mit weniger als 5 Zeichen werden nie getrennt. Die Engine verlangt mindestens 2 Zeichen vor und 3 Zeichen nach einer Trennstelle.
Ungetrennte Wörter
Ein Wörterbuch trennt einen Namen wie jedes andere Wort: Al-ice, Áms-ter-dam, You-Tu-be. Drei Einstellungen halten Wörter ganz, und alle drei folgen standardmäßig dem Wörterbuch.
hyphenation.exceptions ist eine Liste von Wörtern wie \hyphenation{…} in TeX. Ein ohne Bindestrich geschriebener Eintrag wird nie getrennt; ein mit Bindestrichen geschriebener wird nur dort getrennt, sodass 'You-Tube' You- · Tube ergibt und sonst nichts. Ein Eintrag passt auf eine Folge von Buchstaben, gleich was darum steht: 'Alice' deckt (Alice, und Alice’s ab, und ein Kompositum wird Teil für Teil abgeglichen (Blender-based passt auf 'Blender'). Eine flektierte Form ist ein anderes Wort und braucht einen eigenen Eintrag. Ein kleingeschriebener Eintrag passt auf das Wort in jeder Schreibung ('blender' deckt Blender und BLENDER ab); ein Eintrag mit großem Anfangsbuchstaben passt nur auf die Vorkommen, die mit einem Großbuchstaben beginnen, sodass 'Rose' den Namen ganz hält und rose dem Wörterbuch überlässt. Einträge enthalten nur Buchstaben und Bindestriche; alles andere wird verworfen.
hyphenation.capitalized: false hält jedes Wort ganz, das mit einem Großbuchstaben beginnt: Namen, Akronyme und auch das erste Wort jedes Satzes. Es entspricht dem ausgeschalteten Schalter „Großgeschriebene Wörter trennen“ von InDesign und \uchyph=0 in TeX. Ein Eintrag in exceptions mit Bindestrichen trennt sein Wort weiterhin dort. Im Deutschen wird jedes Substantiv großgeschrieben, sodass der Schalter einem deutschen Text kaum ein trennbares Wort ließe: Nennen Sie dort die Wörter in exceptions oder verwenden Sie citations.hyphenateNames.
citations.hyphenateNames: false hält die Familiennamen der vom Dokument zitierten Autorinnen und Autoren ganz, wo immer sie stehen: in einem Zitat, im laufenden Text und im Literaturverzeichnis. Siehe Zitationen.
const config: PostextConfig = {
locale: 'es',
bodyText: {
hyphenation: { exceptions: ['Ámsterdam', 'Blender', 'You-Tube'] },
},
};Die drei erreichen jeden Text, den das Wörterbuch trennt: Fließtext, Überschriften, Listen, Kästen, Legenden, Tabellenzellen, Anmerkungen, lebende Kolumnentitel und die übrigen Gestaltungstexte. Das ist mehr als bei compounds, das Legenden, Anmerkungen, Zellen und Inhaltsverzeichnis ignorieren. Zwei Dinge bleiben, wie sie sind. Ein in einem Vorkommen eines Worts getipptes weiches Trennzeichen entscheidet weiterhin über dieses Vorkommen, und ein weiches Trennzeichen vor dem ersten Buchstaben hält ein Vorkommen ohne Liste ganz (siehe Wo eine Zeile nie umbricht). Und ein Wort, das breiter als seine ganze Satzbreite ist, wird weiterhin getrennt: an den Stellen seines Eintrags, wenn es welche hat, sonst an den Silben des Wörterbuchs. Weniger getrennte Wörter lassen einer schmalen Blocksatzspalte weniger Möglichkeiten, ihre Zeilen zu füllen; prüfen Sie daher die Wortabstände, nachdem Sie capitalized auf einer dreispaltigen Seite ausgeschaltet haben. Das umfließende EPUB überlässt die Silbentrennung dem Lesesystem, das von diesen Regeln nichts weiß.
Flattersatz
Standardmäßig wird nur Blocksatz getrennt: Mit textAlign: 'left' und in links, zentriert oder rechts gesetzten Absatzformaten bleibt jedes Wort ganz, wie stark die Kante auch flattert, außer an einem im Text getippten weichen Trennzeichen (U+00AD). Setzen Sie hyphenation.ragged: true, um auch Flattersatz zu trennen.
Eine Flattersatzzeile wird nie gedehnt, deshalb würde das Trennen jedes Worts, das nicht passt, die Kante mit Trennstrichen säumen. Die Trennzone begrenzt das, so wie es der Einzeilen-Setzer eines DTP-Programms tut. Passt ein Wort am Ende einer Zeile nicht, betrachtet die Engine die Lücke, die das ganze Wort auf der nächsten Zeile hinterließe. Ist diese Lücke breiter als zone, wird das Wort an der letzten passenden Silbe getrennt; sonst rückt es ganz hinunter. Eine Zone in em bezieht sich auf die eigene Schriftgröße des Texts. Der Standard 3em trennt nur die Wörter, die eine merklich kurze Zeile hinterließen. Eine breitere Zone ergibt weniger Trennstriche und eine stärker flatternde Kante; 0 trennt jedes Wort, das nicht passt. Beim zeilenweisen Setzen enden höchstens zwei Zeilen in Folge auf einer Silbe. Harte Bindestriche (enseñanza-aprendizaje), URL-Fugen, im Text getippte weiche Trennzeichen und Wörter, die breiter als die ganze Zeile sind, brechen wie immer um: Die Zone und die Grenze von zwei Zeilen gelten nur für die Silben des Wörterbuchs.
Die Einstellung gilt für das ganze Dokument. Sie wirkt auf Fließtext und Zitate, wenn sie im Flattersatz stehen, und auf jedes Absatzformat im Flattersatz und jeden Kastentext, deren eigenes hyphenation an ist (Standard ist hyphenation.enabled des Fließtexts); hyphenation: false hält also die Wörter eines Formats ganz. Überschriften, Legenden, Anmerkungen, Tabellenzellen und das Inhaltsverzeichnis werden nicht getrennt; dort wird, wie überall, nur ein Wort getrennt, das breiter als die ganze Satzbreite ist. Gestaltungstexte – lebende Kolumnentitel, Kapitelauftakte, Teiltitelseiten – folgen dem eigenen Schalter hyphenate jedes Textelements, den die eingebauten ganzseitigen Kapitelauftakte und Teiltitelseiten setzen, und verwenden ebenfalls das Wörterbuch des Dokuments. Blocksatz ignoriert ragged und zone.
const config: PostextConfig = {
locale: 'es',
bodyText: {
textAlign: 'left',
// A little more hyphenation than the 3 em default.
hyphenation: { ragged: true, zone: { value: 2, unit: 'em' } },
},
};Mit optimalRagged (Standard) wird laufender Text im Flattersatz mit Knuth-Plass umbrochen, und die Zone behält dort ihre Bedeutung: Ein Wort wird nur getrennt, wenn es nicht in den Rest der Zeile passt und es ganz hinunterzuschicken mehr als die Zone leer ließe. Zwei Silben in Folge werden nicht verweigert, kosten aber so viel wie zwei Trennstriche in Folge im Blocksatz, sodass eine dritte selten ist. Mit optimalRagged: false oder optimalLineBreaking: false wird jede Zeile gefüllt, bevor die nächste beginnt, wie bis postext 1.4.
Die Silbentrennung im Flattersatz setzt Absätze mit dem Umbruchverfahren, das Absätze mit Inline-Formatierung (fett, kursiv, Links, Mathematik) immer verwenden; sie einzuschalten kann daher auch einige Umbrüche verschieben, die keine Trennungen sind. In einer Flattersatzzeile bricht dieses Verfahren neben Leerzeichen und den Silben des Wörterbuchs nach einem harten Bindestrich oder einem Strich zwischen zwei Wörtern um (largas—separadas; mit breakAfterDashes nach jedem Strich, der ohne Abstand zwischen Wörtern steht, auch riddles.—I und riddles—*and*), an URL-Fugen und zwischen Ideogrammen, und es hält ein in mehreren Abschnitten gesetztes Wort zusammen (**Nota**:, (*véase*). Ohne Silbentrennung im Flattersatz wird ein Flattersatzabsatz ohne Formatierung mit Knuth-Plass umbrochen, wenn optimalRagged an ist (Standard): an Wortzwischenräumen, nach einem harten Bindestrich zwischen zwei Buchstaben (meta- · analyses), wie es das andere Verfahren tut, und mit breakAfterDashes nach Strichen ohne Abstand. Zeile für Zeile gesetzt, durchläuft er das Umbruchverfahren von Pretext, das sich in drei Punkten unterscheidet: Es darf auch vor einem Strich umbrechen, der einen Einschub schließt, oder nach einem, der ihn eröffnet (él · — y), beim Trennen nach einem Schrägstrich (km/ · h), und es schneidet ein Wort, das breiter als die Zeile ist, an einem beliebigen Zeichen ohne Trennstrich, wo das andere Verfahren es zuerst an einer Silbe trennt.
In der Sandbox heißt der Schalter Flattersatz trennen; er steht unter der Absatzausrichtung im Abschnitt „Grundtext“, mit der Zone darunter. Bei Fließtext im Blocksatz steht derselbe Schalter bei den Blocksatzeinstellungen, für die Absatzformate und Kästen im Flattersatz.
#Dokumentsprache
Das locale der obersten Ebene ist die Sprache des Dokuments als Ganzes. Es nimmt dieselben Werte wie hyphenation.locale an und dient als Ersatz, wenn dieses Feld nicht gesetzt ist; ein spanisches Buch braucht also nur locale: 'es', um spanisch zu trennen. Es wählt auch die Sprache der eingebauten Fortsetzungstexte von Tabellen und geteilten Kästen ((cont.) / Continued gegenüber Continúa, siehe Tabellen, die höher als die Seite sind und Hinweise an einem geteilten Kasten) und der ausgeschriebenen Überschriftennummern (Chapter One gegenüber Capítulo uno, siehe Ausgeschriebene Zahlen) und ist die Sprache, die in ein barrierefreies PDF getaggt wird. Ohne Wert nimmt die Engine 'en-us' an; die Sandbox fällt auf die Sprache der Oberfläche zurück und setzt das Feld unter Gestaltung › Schriftsystem.
Es wählt auch die eingebauten Ressourcentypen. Ist resourceTypes nicht gesetzt, nummeriert und beschriftet buildDocument mit defaultResourceTypes(locale), sodass locale: 'de' allein Abbildung 1.1 und Tabelle 1.1 ergibt. Ist locale nicht gesetzt, vertritt es die Sprache der Silbentrennung, für die Ressourcentypen wie für die Tabellentexte. Eine ausdrückliche Liste resourceTypes hat immer Vorrang. Frühere Versionen verwendeten die englischen Typen, gleich welches locale galt, es sei denn, Sie übergaben selbst defaultResourceTypes(locale); ein Dokument, das locale setzt und die englischen Bezeichnungen behalten will, übergibt resourceTypes: defaultResourceTypes('en'). Bücher und Pakete der Sandbox bringen ihre eigene Liste mit und sind daher nicht betroffen.
Jedes BCP-47-Tag funktioniert hier wie in hyphenation.locale: 'de-AT' erhält die deutschen Texte. Die eingebauten Texte gibt es in den acht Sprachen, die die Silbentrennung unterstützt, in Chinesisch (in vereinfachten und in traditionellen Schriftzeichen), in Japanisch und in Arabisch; jede andere Sprache erhält die englischen.
Chinesisch nimmt zh, zh-Hans, zh-Hant, zh-CN, zh-SG, zh-TW, zh-HK, zh-MO und die langen Formen (zh-Hant-TW) an, in jeder Schreibung und mit - oder _. Die Texte folgen der Schrift, gelesen mit Intl.Locale(tag).maximize(): zh, zh-CN und zh-SG sind vereinfacht, zh-TW, zh-HK und zh-MO traditionell. Die typografischen Standardwerte, die von der Sprache abhängen, folgen dagegen der Region, wie es clreq §1.2 empfiehlt: CN, SG und MY zählen als Festland, TW als Taiwan, HK und MO als Hongkong, und ein Tag ohne Region richtet sich nach seiner Schrift (zh-Hant ist Taiwan, zh und zh-Hans das Festland). Japanisch nimmt ja, ja-JP, ja-Jpan und jedes andere Tag ja an (isJapaneseLanguage(tag)); seit postext 1.16 hat es eigene Texte und eine eigene Region, japan, deren typografische Standardwerte JLReq folgen (siehe Japanischer Satz). Eine Tabelle von Texten ohne japanischen Eintrag liefert Englisch, nie Chinesisch. localeScript(tag), cjkRegionOf(tag), stringsKeyOf(tag) und sameContentLocale(a, b) liefern diese Lesarten, und DOCUMENT_LANGUAGES listet die Sprachen mit eingebauten Texten, jede in ihrer eigenen Sprache benannt (日本語 zwischen den chinesischen Einträgen und العربية), so wie die Auswahl „Dokumentsprache“ der Sandbox sie zeigt.
| Sprache | Abbildung: Name, Plural, Kurzbezeichnung | Tabelle: Name, Plural, Kurzbezeichnung | Tabellenfortsetzung: continuedSuffix, continuesMarker |
|---|---|---|---|
Englisch (en) | Figure, Figures, Fig. | Table, Tables, Tab. | (cont.), Continued |
Spanisch (es) | Figura, Figuras, Fig. | Tabla, Tablas, Tabla | (cont.), Continúa |
Französisch (fr) | Figure, Figures, Fig. | Tableau, Tableaux, Tabl. | (suite), À suivre |
Deutsch (de) | Abbildung, Abbildungen, Abb. | Tabelle, Tabellen, Tab. | (Forts.), Wird fortgesetzt |
Italienisch (it) | Figura, Figure, Fig. | Tabella, Tabelle, Tab. | (segue), Continua |
Portugiesisch (pt) | Figura, Figuras, Fig. | Tabela, Tabelas, Tab. | (cont.), Continua |
Katalanisch (ca) | Figura, Figures, Fig. | Taula, Taules, Taula | (cont.), Continua |
Niederländisch (nl) | Figuur, Figuren, Fig. | Tabel, Tabellen, Tab. | (vervolg), Wordt vervolgd |
Chinesisch, vereinfacht (zh-Hans, zh, zh-CN) | 图, 图, 图 | 表, 表, 表 | (续), 接下页 |
Chinesisch, traditionell (zh-Hant, zh-TW, zh-HK) | 圖, 圖, 圖 | 表, 表, 表 | (續), 接下頁 |
Japanisch (ja, ja-JP) | 図, 図, 図 | 表, 表, 表 | (続き), 次ページへ続く |
Arabisch (ar, ar-EG, ar-MA …) | شكل, أشكال, شكل | جدول, جداول, جدول | (تابع), يتبع |
Das Präfix der Legende ist der Name des Typs (Abbildung 1.1.). Die chinesischen Typen nummerieren innerhalb des Kapitels mit einem Bindestrich, {h1}-{n} (图 1-1); mit den Legendeneinstellungen labelNumberGap: '' und labelSeparator: ' ' lautet die Legende 图1-1 标题 (siehe Legendenstil). Auch das Register folgt der Sprache: 见 und 另见 vor einem Querverweis, 符号 und 数字 über den Symbolen und den Zahlen in vereinfachten Schriftzeichen; 見, 另見, 符號 und 數字 in traditionellen. Japanisch nummeriert seine Typen ebenso und setzt seine Legenden ohne die beiden Einstellungen als 図1-1 題, schreibt Querverweise als 第3章, 2.3節 und 12ページ, betitelt das Literaturverzeichnis mit 参考文献, und sein Register druckt 記号 und 数字 über Symbole und Zahlen und schreibt seine Querverweise mit einem Pfeil, →夏目漱石 für siehe und →夏目漱石、森鷗外も見よ nach den Seitenzahlen für siehe auch, die Bezeichnungen aufrecht. Arabisch nummeriert seine Typen ebenso, {h1}-{n} (شكل 2-3), schreibt Querverweise als الفصل 3, القسم 2-1 und ص 12, betitelt das Literaturverzeichnis mit المراجع, und sein Register druckt انظر / انظر أيضًا, رموز und أرقام, mit dem arabischen Komma und Semikolon (، ؛).
Ein chinesisches, japanisches oder koreanisches Dokument deklariert seine Sprache in der HTML-Ausgabe (lang auf der Wurzel .pt-doc, zh-Hant-TW ungekürzt) und auf dem Canvas, den es malt (ctx.lang, in Chrome 136 und neuer), sodass der Browser die Glyphenformen der Region zeichnet: Unicode vereinheitlicht die Han-Zeichen, und ein Codepoint sieht in einer taiwanischen und in einer japanischen Schrift verschieden aus. Seit postext 1.30 tut das auch jedes andere Dokument, in der Sprache, in der sein Text geformt wird (bodyText.shapingLanguage: 'document', der Standard); mit 'host' tragen die übrigen Dokumente kein lang, und jeder Canvas malt in der Sprache der Seite, die ihn einbettet. Das PDF deklariert für jedes Dokument, getaggt oder nicht, /Lang aus locale, mit Schrift und Region. Ein Dokument in einer Sprache, die von rechts nach links geschrieben wird (Arabisch, Persisch, Urdu, Hebräisch …), deklariert seine Sprache ebenfalls: Die Sprachformen der Schrift (locl) und die Ersatzschrift folgen ihr.
const config: PostextConfig = {
locale: 'es',
bodyText: { textAlign: 'justify', hyphenation: { enabled: true } }, // hyphenates in Spanish
};Ziffern des Dokuments
numerals auf oberster Ebene legt die Ziffern jeder Zahl fest, die die Engine schreibt: Seitenzahlen und die Seitenangaben von Inhaltsverzeichnis, Register und Seitenverweisen; Nummern geordneter Listen und Fußnoten; Zähler von Überschriften und Kapiteln, {chapterNumber}; {h1} und {n} einer Abbildungsnummer und eines Verweises darauf; {totalPages}, {bookTotalPages} und {numberDecimal}. 'latn' schreibt 0–9, 'arab' die arabisch-indischen Ziffern ٠–٩ und 'arabext' die persischen Ziffern ۰–۹. Nur das Dezimalformat ändert sich – decimal, arabic der Listen oder eine auf dem Standard belassene Einstellung –, sodass ein vom Autor genanntes Format wie genannt gedruckt wird: lower-roman bleibt i, ii, iii, und arabic-indic schreibt auch in einem lateinischen Dokument ١, ٢, ٣. Der Text des Dokuments wird nie umgeschrieben.
Der Standard 'auto' nimmt die Ziffern von locale (defaultNumeralsFor(tag)): 'arab' für Arabisch ohne Region oder mit einer Region außerhalb des Maghreb (ar, ar-EG, ar-SA, ar-AE …), 'latn' für ar-MA, ar-DZ, ar-TN, ar-LY, ar-MR und ar-EH, 'arabext' für Persisch (fa), Paschtu (ps) und das Urdu Indiens (ur-IN) und 'latn' für alles andere, das Urdu Pakistans eingeschlossen. CLDR gibt latn für ein bloßes ar und für ar-AE an; arabische Bücher des Maschrek und der Golfstaaten drucken ٠–٩, und dem folgt Postext. Ein Tag, das seine Ziffern nennt, behält sie: ar-MA-u-nu-arab. Eine in den Ziffern des Dokuments nummerierte Seite speichert arabic-indic oder persian als ihr pageNumberFormat, sodass die Seitenbezeichnungen des PDFs dieselben Ziffern zeigen. Ein unbekannter Wert folgt der Sprache und wird als unknownNumerals gemeldet.
Zahlen, die der Autor tippt, werden in jedem der drei Systeme gelesen: Ein Listenpunkt ٣. beginnt bei 3, und {startAt=٥}, :::numbering{startAt=٥}, :::space{lines=٢} und :::part{number="٣"} (für {numberDecimal}) lesen den Wert.
const config: PostextConfig = { locale: 'ar' }; // ١، ٢، ٣
const maghreb: PostextConfig = { locale: 'ar-MA' }; // 1, 2, 3
const forced: PostextConfig = { locale: 'ar', numerals: 'latn' }; // 1, 2, 3Schreibrichtung
direction auf oberster Ebene legt die Grundrichtung des Dokuments fest: 'ltr', 'rtl' oder 'auto' (Standard), das 'rtl' ist, wenn die Schrift von locale von rechts nach links geschrieben wird (Arabisch, Persisch, Urdu, Hebräisch, Syrisch, Thaana, N’Ko, Adlam …, gelesen mit directionOf(tag)), und sonst 'ltr'. Ein Dokument von rechts nach links wird in einem gespiegelten Rahmen gesetzt: Seine Zeilen beginnen rechts, seine erste Spalte ist die rechte, seine Einzüge, Listenmarken, Gleitobjekte, Fußnoten und Kästen stehen rechts, und page.binding: 'auto' bindet es rechts. Die aufgelöste Konfiguration trägt direction: 'rtl' nur für ein solches Dokument, sodass ein Dokument von links nach rechts wie bisher aufgelöst wird. Ein unbekannter Wert wird als 'auto' gelesen und als unknownConfigValue gemeldet. Der Unicode-Bidi-Algorithmus (UAX #9) ordnet die Abschnitte jeder Zeile in beiden Richtungen: Ein arabisches Zitat in einem englischen Buch liest sich an Ort und Stelle von rechts nach links.
Innerhalb des Dokuments nimmt eine Überschrift oder ein Container ::: {dir=ltr} oder {dir=rtl} an, und die Inline-Auszeichnungen :ltr[…] und :rtl[…] isolieren einen Textabschnitt (siehe Schreibrichtung in der Auszeichnung); eine Tabellenressource nimmt table.direction an. Ein Block, der gegen die Richtung des Dokuments gesetzt ist, behält seine eigene Anfangsseite: Sein Einzug, seine Listenmarken und das bündige Ende seiner letzten Zeile wechseln auf die Seite, an der sein Text beginnt.
Eine Einstellung, die eine Seite nennt, meint eine Seite des Texts oder des Textflusses, nie des Bogens, sodass eine für ein englisches Buch gemachte Gestaltung funktioniert, wenn das Buch auf Arabisch umgestellt wird. 'start' und 'end' werden als ausdrückliche Namen angenommen:
| Einstellung | 'left' / 'right' | 'start' / 'end' |
|---|---|---|
textAlign von Fließtext, Überschriften, Absatzformaten, Teilen, Fußnoten und Kastentexten; align von Legende und Legendenanmerkung | Die Seiten des Texts: 'left' ist die Seite, an der eine Zeile beginnt, bei einem arabischen Absatz die rechte, wohin die letzte Zeile eines Blocksatzabsatzes geht. | Synonyme von 'left' und 'right'. Aufgelöste Konfigurationen tragen 'left' / 'right'; gespeicherte Konfigurationen behalten, was geschrieben wurde. |
align einer Tabellenzelle | Die Seiten des Zelltexts, gelesen in der Richtung der Tabelle (table.direction). | Synonyme, gelesen in der Richtung der Tabelle. |
placement.align (Gleitobjekte, schmale Abbildungen) | Die Seiten des Textflusses: In einem Buch von rechts nach links ist 'left' die rechte Seite des Bogens. | Synonyme. |
stripe.side, icon.cornerSide, labelTab.position ('top-start', 'top-end') eines Kastens | Die Seiten des Textflusses, für jeden Kasten der Seite gleich. | Die eigene Richtung des Kastens (ein :::callout{dir=ltr} in einem arabischen Buch beginnt links auf dem Bogen). |
| Felder von Kopf- und Fußzeile; am Bogen verankerte Gestaltungselemente | Die Seiten des Bogens. | Nur Textelemente: Anfang und Ende der eigenen direction des Elements. |
placement.rotate behält auf einer gespiegelten Seite seine physische Bedeutung: Eine im Uhrzeigersinn gedrehte Abbildung ist auf dem Bogen im Uhrzeigersinn gedreht. Ein Host, der das Layout liest, findet auf jeder Seite den gespiegelten Rahmen (VDTPage.flow mit direction: 'rtl', pageIsMirrored(page)) und die visuelle Reihenfolge der Segmente jeder Zeile in VDTLine.order; flowToPage und pageToFlow rechnen zwischen Textfluss und Bogen um. Siehe Arabischer Satz.
const arabic: PostextConfig = { locale: 'ar' }; // right to left, bound on the right
const english: PostextConfig = { locale: 'en', direction: 'rtl' }; // forced; rarely what you want#Sprachen und Schriftsysteme
Postext setzt alphabetische Schriften, die von links nach rechts geschrieben werden, sowie Chinesisch und Japanisch quer über die Seite und von oben nach unten. Chinesischer Satz und Japanischer Satz erklären, wie sie gesetzt werden und welche Einstellungen sie steuern; die Schlüssel stehen unter Ostasiatische Typografie, Vertikale Schrift und Bindung. Was jedes Schriftsystem erhält:
- Chinesisch wird vom CJK-Setzer gesetzt, wenn ein Absatz mehr CJK-Zeichen als Wortzwischenräume enthält: Seine Zeilen brechen zwischen Zeichen um, nach den Regeln für Zeilenanfang und -ende von
cjk.lineBreak(keine Zeile beginnt mit 。、」 oder ー, keine endet mit 「 oder (), halten —— und …… sowie eine Zahl mit ihren Zeichen und ein lateinisches Wort ganz, und eine Blocksatzzeile wird zwischen ihren Zeichen auf die Satzbreite verteilt. Breiten der Satzzeichen, hängende Satzzeichen, der Abstand zwischen Han und Latein, das Zeichenraster, Betonungspunkte, die Markierungen für Eigennamen und Buchtitel, Ruby und Warichu-Anmerkungen folgen der Region vonlocale, quer über die Zeile oder an ihr hinab (layout.writingMode: 'vertical-rl'). Ein lateinischer Absatz, der ein paar CJK-Wörter zitiert, behält den optimalen Zeilenumbruch und darf neben ihnen umbrechen; eine CJK-Klammer, der Mittelpunkt oder ein Vollbreitenzeichen in lateinischem Text (〈h〉, %) ändert nichts. - Japanisch durchläuft seit postext 1.16 denselben Setzer mit eigenen Regeln, denen der W3C-Requirements for Japanese Text Layout (JLReq) und von JIS X 4051: Ein
ja-Locale ergibt die Regionjapan, deren automatische Werte die Kinsoku-Stufen von JLReq setzen (kleine Kana und ー eröffnen nie eine Zeile), Satzzeichen in voller Breite mit Paarstauchung, ein Geviert nach ?!, die Klammer, die einen Absatz eröffnet, in der zweiten Hälfte des Einzugs, Sesam-Betonungszeichen über dem Text, Buchtitel in 『』, Furigana im Verhältnis 1:2:1, japanische Zählwörter, Anmerkungen und ein nach Lesung sortiertes Register. Frühere Versionen setzten Japanisch mit den Standardwerten für das chinesische Festland. - Koreanisch durchläuft denselben Setzer und wird ohne Silbentrennung gesetzt, aber mit den Standardwerten für das chinesische Festland: Seine eigenen Regeln (KLREQ) sind nicht umgesetzt. Koreanischer Text bricht zwischen Silben wie auch an seinen Leerzeichen um.
- Arabisch und andere Schriften von rechts nach links (Persisch, Urdu, Hebräisch …) werden von rechts nach links gesetzt: Arabischer Satz erklärt, wie. Die
directiondes Dokuments ergibt sich aus der Schrift vonlocale, der Unicode-Bidi-Algorithmus ordnet die lateinischen Wörter und Zahlen in jeder Zeile, das Buch wird rechts gebunden, mit seiner ersten Spalte rechts, und jede Zahl, die die Engine schreibt, nimmt die Ziffern der Region an. Ein Wort mit einem Buchstaben in arabischer Schrift wird nie getrennt, gesperrt oder geschnitten, und eine arabische Blocksatzzeile wird an ihren Leerzeichen und mit Kaschidas gedehnt. Vokalzeichen, Hervorhebung, Fußnoten und die Texte des Arabischen stehen unter Arabischer Text. Persisch, Urdu und Hebräisch erhalten die Richtung, die Ziffern und die Regeln für ganze Wörter, aber keine eigenen eingebauten Texte.
Trennmuster werden für acht Sprachen mitgeliefert (en-us, es, fr, de, it, pt, ca, nl); die eingebauten Ressourcentypen und Fortsetzungstexte gibt es in diesen acht, in Chinesisch, in Japanisch und in Arabisch. Chinesisch, Japanisch, Koreanisch und die Sprachen, die von rechts nach links geschrieben werden, werden ohne Silbentrennung gesetzt. Jede andere Sprache wird mit den Mustern für US-Englisch getrennt, mit einer Warnung auf der Konsole, und erhält die englischen Texte. Setzen Sie für ein solches Dokument hyphenation.enabled: false und übergeben Sie resourceTypes und die Fortsetzungstexte von tableStyle in seiner Sprache.
#Arabischer Text
Diese Einstellungen dienen Text in arabischer Schrift; keine ändert ein Dokument in einer anderen Schrift. Arabischer Satz erklärt sie zusammen mit dem Rest eines arabischen Buchs: Richtung, Bindung, Ziffern, Vers, Inhaltsverzeichnis und Register.
- Vokalzeichen und Zeilenabstand. Die Vokalzeichen eines vokalisierten Texts (Fatha, Kasra, Schadda, Tanwīn, das hochgestellte Alif, die koranischen Zeichen) stapeln sich über und unter den Buchstaben, im Zeilenabstand, der für sie nie wächst. Jede Zeile mit Zeichen speichert, wie weit deren Farbe reicht (
VDTLine.markInk), und der Spaltenzuschnitt der Renderer schließt die Zeichen der ersten und letzten Zeile einer Spalte ein. Trifft ein Zeichen über einem Wort auf die Buchstaben oder Zeichen, die unter dem Wort darüber hängen, meldet der Build den Absatz (arabicMarksExceedLeading, im Bedienfeld „Prüfungen“ der Sandbox). Nur übereinanderstehende Wörter werden verglichen. Teilweise vokalisierter Text braucht etwa 1,7–1,85 emlineHeight, voll vokalisierte Verse 1,9–2,1 em. - Hervorhebung. Arabische Schrift kennt keine Kursive, daher wird
*…*in einem Dokument, dessenlocalein arabischer Schrift geschrieben wird, standardmäßig fett gesetzt (bodyText.emphasis: 'auto').'color'setzt es aufrecht initalicColor, und'overline'zieht eine Linie über die Wörter, das khaṭṭ fawqī arabischer Bücher. Die Einstellung erreicht jeden Text, der in den Schriften des Fließtexts gesetzt wird: Absätze, Listen, Zitate, Absatzformate, Kastentexte, Anmerkungen und Überschriften. Legenden, Tabellenzellen, Inhaltsverzeichnis und Register behalten ihre eigenen Kursiveinstellungen. Was auch gewählt ist, die Engine neigt nie arabische Buchstaben: Die arabischen Wörter eines kursiv gesetzten Abschnitts stehen aufrecht, seine lateinischen Wörter behalten ihre Kursive. Ein Zitat ist in einem solchen Dokument standardmäßig aufrecht. - Taschkīl.
bodyText.tashkil: 'strip'entfernt die Vokal- und koranischen Zeichen aus dem Text, den das Layout setzt, für eine unvokalisierte Ausgabe aus einer vokalisierten Quelle: Fatha, Damma, Kasra und ihr Tanwīn, Sukūn, Schadda, das hochgestellte Alif (هٰذا wird zu هذا) und die Zeichen U+0656–U+065F und U+06D6–U+06ED.'strip-vowels'behält die Schadda, wie die meisten modernen Bücher sie drucken. Hamza und Madda bleiben (أ إ آ sind Buchstaben, auch wenn sie mit kombinierenden Zeichen getippt werden). Die Quelle behält ihre Zeichen; die Zeilen, die Überschriften und das Inhaltsverzeichnis werden ohne sie gesetzt, und jedes gesetzte Zeichen verweist weiterhin auf seine Stelle in der Quelle. - Fußnoten.
footnotes.markerTemplate: '({n})'schreibt die Marken «(١)» in den Ziffern des Dokuments,numbering: 'page'beginnt sie auf jeder Seite neu, undnoteNumberPosition: 'inline'setzt die eigene Nummer der Anmerkung auf die Zeile. Die Trennlinie und die Anmerkungsnummern stehen am Anfang der Spalte, in einem Buch von rechts nach links also rechts. - Ganze Wörter. Ein Wort mit einem Buchstaben in arabischer Schrift wird nie getrennt, geschnitten oder gesperrt, weder in einem arabischen Buch noch als Zitat in einem anderen. Ein Format, das
letterSpacingauf arabischen Text setzt, wird gemeldet (joiningScriptLetterSpacing), und ein Wort, das breiter als seine Zeile ist, läuft über sie hinaus und wird gemeldet (unbreakableWordOverflow). Siehe Arabischer Satz. - Kaschida und Vers. Eine arabische Blocksatzzeile wird mit Kaschidas wie auch an ihren Leerzeichen gedehnt (
bodyText.kashida, siehe Kaschida in arabischem Text), und ein klassisches Gedicht wird mit:::verseein Bayt pro Zeile in zwei gleich breiten Halbversen gesetzt (siehe:::verse). - Register. Ein Register auf Arabisch sortiert alphabetisch und ignoriert den Artikel ال (
index.ignoreArticle), die Vokalzeichen und die Träger der Hamza; siehe Register.
#Waisen, Witwen, zu kurze Ausgangszeilen und Regeln zum Zusammenhalten
Die Mechanik hinter diesen Strafpunkten erklärt Silbentrennung und Blocksatz. Dieser Abschnitt ist die Referenz der Schlüssel von bodyText, die sie steuern.
Über Silbentrennung und Abstandsgrenzen hinaus stellt die Konfiguration des Fließtexts die weichen Regeln bereit, die strukturell ungeschickte Absatzumbrüche verhindern. Sie alle gehen als Strafpunkte in den Zeilenumbruch-Algorithmus von Knuth-Plass ein – sie lenken das Layout zu sauberen Umbrüchen, ohne je eine harte Regel zu erzwingen. Setzen Sie die Werte *Penalty auf 0, um eine von ihnen praktisch abzuschalten.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
avoidOrphans | boolean | true | Wirkt dem entgegen, dass ein Absatz mit weniger als orphanMinLines Zeilen oben in der nächsten Spalte endet. Auf einem Zeichenraster (cjk.grid) in der Region japan ist der Standard false. |
orphanMinLines | number | 2 | Mindestzahl der Zeilen oben in der nächsten Spalte, wenn ein Absatz geteilt wird. Nur wirksam, wenn avoidOrphans true ist. |
orphanPenalty | number | 1000 | Strafpunkte, die hinzukommen, wenn die Bedingung gegen Waisen verletzt wird. Höhere Werte lenken den Algorithmus stärker gegen Waisen; 0 schaltet die Strafe ab. |
avoidOrphansInLists | boolean | true | Mit true erhalten auch Listenpunkte den Schutz vor Waisen (nicht nur Absätze). Nur wirksam, wenn avoidOrphans true ist. |
avoidWidows | boolean | true | Wirkt dem entgegen, dass ein Absatz mit weniger als widowMinLines Zeilen unten in der aktuellen Spalte beginnt. Auf einem Zeichenraster (cjk.grid) ist der Standard false: Die Seite fasst die Zeilen, die ihr Raster zählt. |
widowMinLines | number | 2 | Mindestzahl der Zeilen unten in der aktuellen Spalte, wenn ein Absatz geteilt wird. Nur wirksam, wenn avoidWidows true ist. |
widowPenalty | number | 1000 | Strafpunkte, die hinzukommen, wenn die Bedingung gegen Witwen verletzt wird. 0 schaltet die Strafe ab. |
avoidWidowsInLists | boolean | true | Mit true erhalten auch Listenpunkte den Schutz vor Witwen. Nur wirksam, wenn avoidWidows true ist. |
shortListSplit | 'allow' | 'warn' | 'avoid' | 'allow' | Eine kurze Liste, die zwischen zwei Spalten oder Seiten geteilt wird: eine Liste mit bis zu shortListMaxItems Punkten im laufenden Text, etwa eine mit drei Punkten, aufgeteilt in 1 + 2. avoidOrphansInLists und avoidWidowsInLists halten die Zeilen eines Punkts zusammen; diese Regel hält die Punkte einer Liste zusammen. 'allow' teilt eine solche Liste wie jede andere dort, wo die Spalte endet. 'warn' setzt sie ebenso und meldet jede geteilte Liste (eine Warnung shortListSplit, siehe Warnungen im Dokument). 'avoid' setzt die Liste ungeteilt: Passt sie nicht unter das, was die Spalte fasst, eröffnet sie die nächste Spalte, und die Überschriften direkt über ihr und die Doppelpunktzeile, die sie einleitet (keepColonWithList), gehen mit. Eine Liste, die höher als eine leere Spalte ist, wird wie jede andere geteilt und gemeldet. Listen in einem :::callout folgen den eigenen Teilungsregeln des Kastens, und die Einträge von :::toc und :::index sind keine Listen. Seit postext 1.28. |
shortListMaxItems | number | 3 | Die Höchstzahl an Punkten, bis zu der eine Liste für shortListSplit als kurz gilt, die Punkte ihrer verschachtelten Listen eingeschlossen. Eine ganze Zahl, mindestens 1. Seit postext 1.28. |
avoidRunts | boolean | true | Wirkt dem entgegen, dass Absätze mit einer sehr kurzen letzten Zeile enden – einer zu kurzen Ausgangszeile, z. B. einem einzelnen kurzen Wort. Mit optimalRagged auch im Flattersatz. Ein chinesischer, japanischer oder koreanischer Absatz endet nicht auf einer Zeile mit einem einzigen Zeichen, allein oder mit seinen schließenden Zeichen (孤字): Die Zeile darüber gibt ihr ihr letztes Zeichen, wenn diese Zeile sich noch innerhalb der Laufweitengrenze in Blocksatz bringen lässt. Eine links, rechts oder zentriert gesetzte Zeile gibt das Zeichen ebenfalls ab und steht ein Zeichen kürzer; mit cjk.grid.fullLines (Manuskriptpapier) behält sie jedes Kästchen, und der Absatz darf auf einem Zeichen enden. |
runtMinCharacters | number | 20 | Schwelle für die letzte Zeile eines Absatzes, gezählt in Wortzwischenräumen, nicht in Buchstaben: Die Zeile ist zu kurz, wenn sie schmaler als runtMinCharacters × normalSpaceWidth Pixel ist. Ein Wortzwischenraum misst in den meisten Textschriften ein Viertel bis ein Drittel Geviert, etwa einen halben Kleinbuchstaben, sodass der Standard 20 letzte Zeilen unter 4 bis 7 em erfasst – grob 8 bis 12 Buchstaben. Um die letzten Zeilen unter etwa N Buchstaben zu erfassen, setzen Sie den Wert auf etwa 2 × N. |
runtPenalty | number | 1000 | Äquivalente Schlechtigkeit (badness), die in die quadrierte Strafpunktformel von Knuth-Plass eingespeist wird (auf derselben Skala wie die badness einer Zeile, die bei 10000 sättigt). 0 schaltet die Strafe ab. |
gradedRuntPenalty | boolean | false | Staffelt die Strafe für zu kurze Ausgangszeilen danach, wie kurz die letzte Zeile ausfällt: Eine letzte Zeile der Breite w unter der Schwelle t kostet runtPenalty × (1 − w / t) statt der ganzen Strafe. Ein Ausgang aus zwei Wörtern kostet dann weniger als einer aus einem Wort, und der Umbruch zieht ein Wort hinunter, wenn eine Zeile darüber es entbehren kann („…sallies of“ / „our minds.“ statt „…sallies of our“ / „minds.“). Standardmäßig aus: Jede zu kurze Ausgangszeile kostet gleich viel, und der Umbruch behält die engeren Zeilen darüber. |
avoidRuntsInLists | boolean | true | Mit true erhalten auch Listenpunkte die Strafe für zu kurze Ausgangszeilen. Nur wirksam, wenn avoidRunts true ist. |
tightenRunts | boolean | true | Konnte die Strafe eine zu kurze Ausgangszeile nicht vermeiden, wird der Absatz stattdessen eine Zeile kürzer gesetzt: Die Wortabstände werden enger (nie unter minWordSpacing), und reicht das allein nicht, um die Zeile aufzunehmen, kommt eine kleine negative Laufweite hinzu. Ein kürzerer Satz wird verworfen, und die zu kurze Ausgangszeile bleibt, wenn er eine Blocksatzzeile über maxWordSpacing hinaus dehnen würde oder, wenn der Absatz bereits eine lockerere Blocksatzzeile hat, über diese hinaus, oder wenn er mehr Zeilen im Flattersatz (über das 3-Fache des normalen Leerzeichens hinaus) setzen würde, als der Absatz hatte. Die Wortabstände im Flattersatz behalten ihre Breite, dort wirkt also nur die Laufweite mit. Erfordert optimalLineBreaking und avoidRunts (und für Flattersatz optimalRagged). |
maxRuntTracking | number | 10 | Höchste Laufweite, die die Korrektur einer zu kurzen Ausgangszeile nehmen darf, in Tausendstel eines Gevierts (die InDesign-Einheit: 10 = 0,01 em pro Zeichen), angewandt als Verengung. 0 überlässt die Korrektur allein dem Wortabstand. |
slackWeight | number | 10 | Gewicht der quadrierten Kosten für „ungenutzten Spaltenraum“. Höhere Werte lassen das Layout eng gefüllte Spalten bevorzugen; 0 schaltet den Druck durch ungenutzten Raum ganz ab. |
keepColonWithList | boolean | true | Endet ein Absatz mit einem Doppelpunkt, der unmittelbar eine Liste einleitet, bleibt die letzte Zeile mit dem Doppelpunkt mit der Liste verbunden: Ließe das Platzieren des Absatzes keinen Raum, damit der erste Listenpunkt in derselben Spalte bzw. auf derselben Seite beginnt, wird die letzte Zeile (oder der ganze Absatz, wenn er nur eine Zeile hat) zusammen mit der Liste in die nächste Spalte verschoben. Wie viel Raum genügt, legt colonListRoom fest. Würde diese Regel den ganzen Absatz verschieben und steht direkt davor in der Spalte eine Folge von Überschriften, werden diese ebenfalls mitgezogen, damit headings.keepWithNext weiter gilt. |
colonListRoom | 'item' | 'line' | 'item' | Der Raum, den keepColonWithList unter der Doppelpunktzeile verlangt. 'item': was die Regeln gegen Waisen und Witwen in Listen vom ersten Punkt am Fuß der Spalte übrig ließen, eine Zeile, wenn er dort geteilt werden darf, der ganze Punkt, wenn sie ihn zusammenhalten (etwa ein zweizeiliger Punkt). 'line': eine Zeile, wie bis postext 1.4; ein erster Punkt, den diese Regeln zusammenhalten, geht dann allein in die nächste Spalte weiter und lässt die Doppelpunktzeile am Fuß zurück. Eine vor configVersion 6 gespeicherte Konfiguration in einem Buch, das eine Liste mit einem Doppelpunkt einleitet, wird mit 'line' gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Jeder andere Wert wird als 'item' gelesen. |
hyphenateAcrossColumns | boolean | 'withinPage' | true | Erlaubt, dass eine Spalte oder eine Seite auf einem getrennten Wort endet (Silbentrennung über Spalten hinweg in InDesign). false bricht den Absatz, der den Spaltenumbruch überquert, erneut um, sodass seine letzte Zeile in der Spalte auf einem ganzen Wort endet; die Wortabstände der Zeilen darüber nehmen den Unterschied auf, innerhalb von maxWordSpacing und minWordSpacing. Es ist eine Vorliebe: Wo kein Umbruch innerhalb dieser Grenzen es vermeidet, bleibt der Trennstrich. Die Option probiert jeden Spaltenumbruch eines Absatzes: den ersten und die späteren, die dort liegen, wo eine volle Spalte endet, in einem neuen Umbruch; und einen späteren Umbruch, der woanders liegt (eine gehaltene Witwe, eine ausgeglichene Schnittkante eines Bands), in einem weiteren ab dieser Spalte, der die bereits in den vorigen Spalten gesetzten Zeilen an ihren Umbrüchen lässt und nur den Rest umbricht. 'withinPage' schützt die Zeilen, die eine Seite schließen, und keine anderen: Ein Wort darf zwischen zwei Spalten einer Seite getrennt werden, und die letzte Zeile einer Seite endet auf einem ganzen Wort, wo immer die Grenzen es zulassen. Die Option ändert weniger Zeilen als false, was bei drei oder mehr Spalten zählt, wo zwei von drei Spaltenenden innerhalb der Seite liegen; in einer einzigen Spalte ergeben beide Werte dieselben Zeilen. Eine Spalte schließt ihre Seite, wenn keine spätere Spalte der Seite Text aufnimmt: Eine für Gleitobjekte freigehaltene Seitenspalte tut es nicht, ebenso wenig eine Spalte, die eine Tabelle oder Abbildung gefüllt hat. Kastentexte sind nicht betroffen. Mit optimalRagged wird ein Absatz im Flattersatz auf dieselbe Weise neu umbrochen: Seine Wortabstände behalten ihre Breite, sodass sich nur die Enden seiner Zeilen verschieben. Jeder neue Umbruch misst den Absatz noch einmal, ein Buch mit vielen Trennstrichen am Spaltenende wird also etwas langsamer gesetzt. Erfordert optimalLineBreaking und für Flattersatz optimalRagged. |
paragraphContainerSpacing | 'collapse' | 'add' | 'collapse' | Der Abstand unter einem Container :::paragraphs, der mit einem Absatz schließt, zwischen diesem Absatz und dem Block danach (siehe Der Container :::paragraphs). 'collapse': der größere Wert aus spaceBetween und marginBottom des Formats und dem Absatzabstand des Texts um den Container (eine Zeile mit paragraphSpacing; in einem Kasten der des Kastens), zusammengeführt mit dem Abstand, den der nächste Block über sich hält, wie zwischen zwei Absätzen des laufenden Texts: Eine Überschrift unter einem Literaturverzeichnis steht ihr eigenes marginTop darunter, nicht diesen Rand plus den Abstand der Einträge. 'add': wie bis postext 1.4 wird der Abstand des Formats allein unter die letzte Zeile gesetzt, bevor auf das Raster eingerastet wird, der eigene obere Abstand des nächsten Blocks darunter addiert und der Absatzabstand weggelassen, sodass der Absatz nach dem Container ihm näher stehen konnte als jedem anderen. Eine vor configVersion 8 gespeicherte Konfiguration, die ein Absatzformat deklariert, in einem Buch mit einem solchen Container, wird mit 'add' gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Ein negatives marginBottom zieht den nächsten Block in jedem Fall hinauf. Ein Absatzformat kann für seine Container eine eigene Regel setzen (containerSpacing, seit postext 1.28). |
Zu kurze Ausgangszeilen. Eine zu kurze Ausgangszeile hat ein Absatz, dessen letzte Zeile zu kurz ist, um als richtige Textzeile zu wirken – typischerweise ein oder zwei kurze Wörter, die am Ende eines Absatzes gestrandet sind. Da die Prüfung auf der Länge der Zeile in Pixeln relativ zur normalen Leerzeichenbreite beruht, passt sich runtMinCharacters automatisch der aktuellen Schriftgröße an. Ein kurzes Wort, das optisch breiter als runtMinCharacters × spaceWidth ist, ist in Ordnung; ein Wort, das schmaler ist (oder wirklich allein steht), zieht die Strafe auf sich. Die Schwelle zählt Wortzwischenräume, die etwa halb so breit wie Buchstaben sind: Der Standard 20 entspricht einer letzten Zeile von grob 8 bis 12 Buchstaben. Jede zu kurze Ausgangszeile kostet die ganze Strafe, sodass der Umbruch von zwei Ausgängen unter der Schwelle die engeren Zeilen darüber behält; gradedRuntPenalty bewertet jeden stattdessen nach seinem Fehlbetrag, und der längere Ausgang gewinnt. Für mathematisch Interessierte: Beim Standardwert 1000 für runtPenalty überwiegt das Vermeiden einer zu kurzen Ausgangszeile jede andere Wahl der Umbrüche, die eine Dehnung des Wortabstands bis etwa r≈2,15 erfordert.
Weich, nicht hart. Keine dieser Regeln kann einen Umbruch verhindern – die Engine liefert immer ein Layout. Es sind Strafpunkte: Der Algorithmus wägt Schlechtigkeit, Trennkosten, Gleichmäßigkeit der Fitness-Klassen und diese strukturellen Strafen in einer einzigen globalen Optimierung gegeneinander ab und wählt die Umbrüche mit den geringsten Gesamtkosten. Brauchen Sie eine härtere Garantie, erhöhen Sie die Strafe; liest sich ein bestimmtes Dokument mit einer gelockerten Strafe besser, senken Sie sie.
#Überschriften
Die Eigenschaft headings steuert die Typografie aller Überschriftenebenen (H1–H6). Sie können allgemeine Standardwerte setzen, die für alle Ebenen gelten, und dann einzelne Eigenschaften pro Ebene überschreiben.
#Allgemeine Standardwerte
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
fontFamily | string | 'Open Sans' | Schriftfamilie aller Überschriften. |
lineHeight | Dimension | 1.2 em | Zeilenabstand der Überschriften. Enger als beim Fließtext. |
color | ColorValue | Hauptfarbe (#295AA3) | Textfarbe der Überschriften. An den Eintrag main-color der Standardpalette gebunden; tauschen Sie die Palettenfarbe aus, färbt sich jede Überschrift neu. |
textAlign | 'left' | 'justify' | 'center' | 'right' | 'start' | 'end' | 'left' | Ausrichtung aller Überschriftenebenen (einen Wert pro Ebene gibt es nicht): linksbündiger Flattersatz, Blocksatz, zentriert oder rechtsbündiger Flattersatz. Eine Überschrift im Blocksatz setzt ihre letzte Zeile linksbündig, wie ein Absatz, sodass eine einzeilige Überschrift wie 'left' aussieht. Canvas, HTML und PDF platzieren die Zeilen gleich, ein Nummernpräfix eingeschlossen. Der Standardauftakt einer Überschrift mit span: 'page' ohne erweiterte Gestaltung folgt ihr ebenfalls (Blocksatz wird linksbündig gesetzt); eine erweiterte Gestaltung richtet ihre eigenen Textelemente mit deren align aus. |
fontWeight | number | 700 | Schriftstärke der Überschriften (100–900). |
marginTop | Dimension | 1.5 em | Abstand über Überschriften. Entfällt bei einer Überschrift, die eine Spalte eröffnet (siehe columnHeadSpace). |
marginBottom | Dimension | 0.5 em | Abstand unter Überschriften. |
keepWithNext | boolean | true | Mit true steht eine Überschrift nie als letztes Element einer Spalte oder Seite. Hätte der folgende Block nach der Überschrift nicht mindestens bodyText.widowMinLines Zeilen Platz (oder eine Zeile, wenn bodyText.avoidWidows false ist), wird die Überschrift weitergeschoben, damit sie mit ihrem Text verbunden bleibt. Wirkt mit bodyText.keepColonWithList zusammen: Muss diese Regel einen Doppelpunktabsatz ganz verschieben, wandern Überschriften am Ende der Spalte mit, statt gestrandet zurückzubleiben. |
keepWithNextSpread | boolean | false | Lässt mit keepWithNext eine Überschrift dennoch die letzte Textspalte einer geraden Seite schließen, da ihr Text dann die gegenüberliegende ungerade Seite derselben Doppelseite eröffnet (JLReq §4.1.7). Die Doppelseiten sind Seite 1 allein, dann 2–3, 4–5 …, gezählt mit pageIndexOffset, in links wie rechts gebundenen Büchern. Seit postext 1.16. |
keepWithNextSplit | 'rules' | 'fill' | 'rules' | Wie der Absatz unter einer Überschrift geteilt wird, wenn die Überschrift am Fuß einer Spalte landet und das Verschieben des ganzen Absatzes die Überschrift zurücklassen würde. 'rules': so viele Zeilen, wie passen, sofern mindestens bodyText.widowMinLines unter der Überschrift bleiben und mindestens bodyText.orphanMinLines in die nächste Spalte weitergehen; erfüllt keine Teilung beides, rückt die Überschrift mit ihrem Absatz weiter, und der Spaltenausgleich füllt den Raum, den sie hinterlässt. 'fill': so viele Zeilen, wie passen, wie wenige auch weitergehen, sodass ein vierzeiliger Absatz mit Platz für drei als 3 + 1 geteilt wird. Bis postext 1.4 wurde jede Überschrift so geteilt, und vor configVersion 8 gespeicherte Konfigurationen behalten das bei (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Ist avoidWidows oder avoidOrphans aus, entfällt diese Seite der Regel. |
snapToGrid | boolean | true | Ob der Textfluss unter einer Überschrift wieder auf das Grundlinienraster einrastet. Mit true wird das marginBottom der Überschrift auf ganze Rasterzeilen aufgerundet; mit false bleibt der genaue Rand erhalten, und der Text unter der Überschrift darf bis zum nächsten Einrastpunkt (dem Ende einer Liste, dem Ende eines :::paragraphs, abgesetzter Mathematik) neben dem Raster stehen – so, wie viele Bücher anderthalb Zeilen unter eine Überschrift setzen. Eine Ebene (levels[].snapToGrid) oder ein Überschriftenformat kann einen eigenen Wert setzen; dieser hier ist der, den sie erben. |
columnHeadSpace | 'none' | 'remainder' | 'none' | Was eine auf das Raster einrastende Überschrift von ihrem Abstand darüber behält, wenn sie eine Spalte eröffnet, am Kopf der Seite oder unter einer Abbildung oder Tabelle, die die Spalte anführt. 'none': Der ganze Abstand entfällt, und die Überschrift steht auf der ersten Zeile der Spalte, auf gleicher Höhe mit der Spalte daneben; das Einrasten setzt dann den nötigen Zeilenbruchteil unter die Überschrift, sodass ihr Text weiter von ihr entfernt stehen kann als nach einem Absatz. 'remainder': Der Abstand entfällt nur in ganzen Rasterzeilen, und der verbleibende Zeilenbruchteil bleibt über der Überschrift, sodass der Text darunter im selben Abstand beginnt wie nach einem Absatz; die Überschrift beginnt etwas tiefer als der Kopf der Spalte, und keine Zeile des Fließtexts verschiebt sich. Das passt zu einem einspaltigen Buch, in dem kein Spaltenkopf daneben den Unterschied zeigt. Jeder andere Wert wird als 'none' gelesen. Nicht unter einem Auftakt über die ganze Seitenbreite und nicht für eine Überschrift mit span: 'page', lineSpan, eine verborgene oder eine gestaltete (advancedDesign). Seit postext 1.28. |
inlineMarks | boolean | true | Ob eine Überschrift ihre Inline-Auszeichnungen wie ein Absatz liest: italic, bold, ^superscript^, ~subscript~, :smallcaps[…] und Links. Ein kursiver Abschnitt kehrt die Neigung der Überschrift um, sodass er in einer kursiven Überschrift aufrecht erscheint; ein fetter Abschnitt nimmt bodyText.boldFontWeight an oder die eigene Schriftstärke der Überschrift, wenn diese kräftiger ist. Das Inhaltsverzeichnis übernimmt die fetten und kursiven Abschnitte ebenfalls; die lebenden Kolumnentitel und die PDF-Lesezeichen drucken nur den Text. Mit false werden die Auszeichnungen entfernt, und die Wörter erscheinen im eigenen Stil der Überschrift, wie bis postext 1.4. Der Standardauftakt einer Überschrift mit span: 'page' ohne Gestaltung setzt die fetten, kursiven, hoch- und tiefgestellten Abschnitte ebenfalls; eine Überschriftengestaltung (ein gestaltetes Auftaktband oder ein advancedDesign in der Spalte) druckt in jedem Fall als reinen Text, es sei denn, ihr Textelement liest Inline-Auszeichnungen (inlineMarks: true): Dort behält die fetten, kursiven, hoch- und tiefgestellten Abschnitte der Überschrift (seit postext 1.19). Früher gespeicherte Konfigurationen, deren Überschriften Auszeichnungen tragen, werden mit false gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat). |
balancing | ColumnBalancingConfig | aktiviert | Vertikaler Spaltenausgleich – zusätzlicher Abstand über Überschriften, damit Spalten bündig mit dem Seitenfuß enden. Siehe unten. |
Zentrierte Überschriften für Gedichte oder die Akte eines Theaterstücks, ohne Gestaltungsfeld:
headings: {
textAlign: 'center',
levels: [{ level: 2, textTransform: 'uppercase' }],
}Übergeben Sie ein Objekt headings, bleibt jeder Standardwert einer Ebene erhalten, den Sie nicht erneut angeben, der Seitenumbruch vor der H1 eingeschlossen (siehe Überschreibungen pro Ebene).
#Spaltenausgleich
Verlage erwarten, dass jede Spalte oben auf der Seite beginnt und bündig mit ihrem Fuß endet. Umbruchregeln (Schutz vor Waisen und Witwen, mit ihrem Text zusammengehaltene Überschriften, unteilbare Abbildungen) hinterlassen naturgemäß kurze Spalten – eine oder mehrere leere Zeilen des Grundlinienrasters am Fuß. Ist der Ausgleich aktiviert, tut die Engine, was ein Setzer täte, und setzt ihre Hebel in redaktioneller Rangfolge ein:
- Ein Kasten, der die Spalte schließt – ein Kasten am Ende einer kurzen Spalte wird um genau den Raum unter seinem Fuß nach unten geschoben, sodass seine Unterkante auf dem letzten Rasterplatz der Seite landet, auf gleicher Höhe mit der letzten Zeile der Spalte daneben. Er nimmt diesen Raum auch dann, wenn er kleiner als eine Zeile ist, solange nichts in eine andere Spalte rückt. Standardmäßig läuft er vor jedem anderen Hebel und nimmt die ganze Lücke, sodass ein Kasten, der den Absatz darüber kommentiert, mehrere Zeilen unter ihm landen kann;
closingBox: 'last'lässt die Überschriften, die Listenenden und die übrigen Abstandshebel zuerst die ganzen Zeilen nehmen und dem Kasten nur, was sie übrig lassen, undclosingBox: 'off'bewegt ihn nie. - Bilder mit Sicherheitsbereich – ein Bild mit Sicherheitsbereich (
Resource.safeArea, siehe Dokumentformat › Sicherheitsbereich), das inline in der kurzen Spalte steht oder an ihrem Kopf oder Fuß allein über dieser Spalte gleitet, wächst um ganze Rasterzeilen, beschnitten innerhalb seines Sicherheitsbereichs, bis die Spalte voll ist oder der Beschnitt den Sicherheitsbereich erreicht. Ein höheres Bild hinterlässt kein Loch auf der Seite, daher läuft dieser Hebel, bevor Abstand hinzugefügt wird; ein Gleitobjekt am Kopf einer Spalte auf einer Seite oder in einem Band, dessen Spaltenköpfe auf gleicher Höhe bleiben (siehe unten), wächst nicht. Gespeichert alsflexFigure. Er hat keine eigene Einstellung: Nur ein Bild, dessen Ressource einen Sicherheitsbereich markiert, kann wachsen. - Überschriften – ganze Rasterzeilen werden dem oberen Rand der Überschriften in der kurzen Spalte hinzugefügt. Werden mehrere Zeilen gebraucht und enthält die Spalte mehrere Überschriften, werden die Zeilen auf sie verteilt, wobei die wichtigste Überschrift stets den größten Anteil erhält (eine
h2erhält mehr als eineh3). Überschriften ganz oben in einer Spalte erhalten nie zusätzlichen Abstand, damit Spalten weiter am Seitenkopf beginnen – außer einer Überschrift direkt unter einer Abbildung oder Tabelle, die ihre Spalte auf einer weiterlaufenden Seite anführt: Der Raum kommt über diese Überschrift, unter die Abbildung. Eine Überschrift nimmt auf diese Weise höchstensmaxLinesBeforeLooseZeilen (standardmäßig zwei), bevor die Hebel weiter unten probiert werden, und ihre weiteren Zeilen bismaxLinesPerHeadingnur, wenn jene nichts mehr zu geben haben. - Listenenden – können die Überschriften nicht die ganze Lücke aufnehmen, wird dort eine Rasterzeile eingefügt, wo eine Liste oder Aufzählung endet (Abstand nach einer Liste wirkt natürlich), begrenzt pro Listenende.
- Unter Formeln, Kästen und Abbildungen – dann kommt eine Rasterzeile unter eine abgesetzte Formel oder einen Kasten, nach dem der Text weiterläuft (
stretchAfterDisplays; sie wirkt wie der eigene Rand des Elements), und unter eine Abbildung oder Tabelle, die die Spalte anführt (stretchAfterFloats, begrenzt durchmaxLinesAfterFloat). - Lockere Absätze – als letztes Mittel wird ein Absatz der Spalte eine Zeile länger neu umbrochen (
\looseness=+1in TeX), wobei der längste Absatz gewählt wird, damit sich der zusätzliche Wortabstand unsichtbar verteilt. Die lockere Lösung wird nur angenommen, wenn jede Zeile unterbodyText.maxWordSpacingbleibt – der Grauwert überschreitet nie die Grenze, die Sie bereits eingestellt haben. ErfordertbodyText.optimalLineBreaking.
Auf einem Zeichenraster (cjk.grid, siehe Chinesischer Satz › Das Zeichenraster) steht jedes Zeichen in einer Zelle von einem Geviert Breite und jede Zeile im Zeilenschritt des Rasters, der auch das Grundlinienraster ist. Der Ausgleich ist dort standardmäßig aus, wie im vertikalen Text: Eine Seite, die Zeile für Zeile auf einem Raster gesetzt ist, so wie GB/T 9704 22 Zeilen zu 28 Zeichen zählt, lässt eine kurze Spalte kurz. Eine Konfiguration mit enabled: true erhält Hebel, die das Raster einhalten: Überschriften, Listenenden, abgesetzte Elemente und Abbildungen nehmen ganze Rasterzeilen, sodass sich der Text darunter um ganze Zeilen verschiebt, und gridLines: 'off' hält diese für einen Standard heraus, der keine leere Zeile herzugeben hat. Ein chinesischer oder japanischer Absatz läuft nur dann eine Zeile länger, wenn sich keine Lücke zwischen zwei seiner Zeichen über maxTracking hinaus dehnt, und nimmt keine Laufweite auf seine Buchstaben: Eine Zeile, der ein Zeichen fehlt, verteilt ein Geviert auf ihre Lücken, weit über den Standard von 0,01 em hinaus, sodass der Hebel für lockere Absätze auf einem Raster aus ganzen Zellen meist nichts findet. Der Kasten, der eine Spalte schließt, und die Bilder mit Sicherheitsbereich liegen bewusst außerhalb des Rasters und funktionieren wie überall.
Die letzte Spalte einer Seite wird nur ausgeglichen, wenn die Seite natürlich in die nächste weiterläuft – die Schlussseite eines Kapitels endet zu Recht kurz. Eine solche Seite und ein von trailing auf gleicher Höhe abgeschnittenes Schlussband halten auch ihre Spaltenköpfe auf gleicher Höhe: Unter einer Abbildung oder Tabelle, die eine ihrer Spalten anführt, wird keine Zeile hinzugefügt (der Hebel nach Gleitobjekten), und eine Überschrift oder ein Kasten, der unter einer solchen Abbildung eine Spalte eröffnet, bleibt an ihrem Kopf, was auch immer stretchAfterFloats sagt, ebenso wie die Überschrift direkt unter einem Auftakt mit span: 'page' in dessen eigener Spalte, sodass eine Spalte nie tiefer beginnt als die daneben, nur damit die Füße fluchten.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
enabled | boolean | true | Ob die Spaltenfüße ausgeglichen werden. Standardmäßig aus in vertikalem Text (layout.writingMode: 'vertical-rl') und auf einem Zeichenraster (cjk.grid.enabled, seit postext 1.25); true schaltet ihn auch dort ein. |
maxLinesPerHeading | number | 4 | Höchstzahl zusätzlicher Rasterzeilen, die über einer einzelnen Überschrift eingefügt werden dürfen. |
maxLinesBeforeLoose | number | 2 | Rasterzeilen, die eine Überschrift nehmen darf, bevor die Hebel nach ihr probiert werden: die Listenenden, die Formeln und Kästen, die Abbildungen und die lockeren Absätze. Ihre weiteren Zeilen bis maxLinesPerHeading erhält eine Überschrift nur, wenn jene nichts mehr zu geben haben, sodass eine Seite mit einer Überschrift nicht vier Zeilen über ihr aufreißt, während ihre Absätze eine Zeile länger laufen könnten. Ein Wert ab maxLinesPerHeading gibt den Überschriften zuerst alle ihre Zeilen, wie bis postext 1.27; 0 probiert die anderen Hebel, bevor irgendeine Zeile über eine Überschrift kommt. Seit postext 1.28; früher gespeicherte Dokumente behalten die alte Reihenfolge (pinLegacyLooseOrder). |
stretchAfterLists | boolean | true | Erlaubt zusätzliche Rasterzeilen am Ende einer Liste, wenn Überschriften nicht die ganze Lücke aufnehmen können. |
maxLinesAfterList | number | 1 | Höchstzahl zusätzlicher Rasterzeilen nach einem einzelnen Listenende. |
stretchAfterDisplays | boolean | true | Erlaubt in der kurzen Spalte nach dem Hebel für Listenenden eine zusätzliche Rasterzeile unter einer abgesetzten Formel und unter einem Kasten: Der Block danach rückt eine Zeile nach unten. Setzen Sie die Option auf false, um den Abstand unter Formeln und Kästen so zu lassen, wie ihre eigenen Ränder ihn setzen; die Lücke geht an die Hebel nach diesem weiter, und die Spalte endet kurz, wenn sie sie nicht schließen. Seit postext 1.28. |
stretchAfterFloats | boolean | true | Erlaubt nach dem Hebel für Listenenden zusätzliche Rasterzeilen unter einer Abbildung oder Tabelle, die die kurze Spalte anführt (ein Gleitobjekt oben), sodass der Text darunter nach unten rückt, statt dass die Spalte kurz endet. Nie auf einer Seite, die nicht weiterläuft (der Schlussseite eines Kapitels), und nie in einem von trailing auf gleicher Höhe abgeschnittenen Schlussband: Dort bleiben die Spaltenköpfe auf gleicher Höhe, und die letzte Spalte darf eine Zeile kürzer enden. Der erste Block unter der Abbildung kann der Rest eines Absatzes sein, der auf der vorigen Seite begonnen hat: Er rückt trotzdem nach unten, um die Zeile, die die Umbruchregeln am Fuß der Spalte freigelassen haben (eine Zeile, die die Witwenregel leer gehalten hat, oder ein Absatzabstand ohne Platz für Text danach). Setzen Sie die Option auf false, um den Text direkt unter der Abbildung zu halten. Unter einem Gleitobjekt über mehrere Spalten bewegen sich die Spalten gemeinsam oder gar nicht, siehe stretchAfterWideFloats. |
maxLinesAfterFloat | number | 1 | Höchstzahl zusätzlicher Rasterzeilen unter einem einzelnen Gleitobjekt oben. |
stretchAfterWideFloats | 'flush' | 'always' | 'flush' | Unter einer Abbildung oder Tabelle, die über zwei oder mehr Textspalten steht. Mit 'flush' rückt eine Spalte darunter nur dann nach unten, wenn jede Textspalte unter dem Gleitobjekt dieselben Zeilen nimmt, sodass ihre Köpfe auf gleicher Höhe bleiben, oder wenn die Zeilen diese Spalte bündig abschließen; eine Zeile, die den Kopf einer Spalte senken und sie dennoch kurz lassen würde, wird nicht eingefügt, und die Lücke geht an die lockeren Absätze weiter. 'always' dehnt eine solche Spalte wie unter jedem Gleitobjekt, wie bis postext 1.27. Jeder andere Wert wird als 'flush' gelesen. Seit postext 1.28; früher gespeicherte Dokumente behalten 'always' (pinLegacyWideFloatStretch). |
looseParagraphs | boolean | true | Letztes Mittel: Absätze einer kurzen Spalte eine Zeile lockerer neu umbrechen (je eine zusätzliche Zeile), innerhalb von bodyText.maxWordSpacing. |
maxLooseParagraphs | number | 2 | Wie viele Absätze einer kurzen Spalte eine Zeile länger laufen dürfen, die längsten zuerst. |
trackParagraphs | boolean | true | Kann der Wortabstand allein die Zeile nicht gewinnen, darf ein lockerer Absatz auch die kleinste positive Laufweite (Sperrung) nehmen, die es schafft. |
maxTracking | number | 10 | Obergrenze dieser Laufweite, in Tausendstel eines Gevierts pro Zeichen (10 = 0,01 em). |
trailing | boolean | true | Gleicht das Schlussband eines Kapitels und des Dokuments aus: Endet der Textfluss, bevor die Seite voll ist (an einem Kapitelauftakt, einem :::part, einem kapitelschließenden Kasten mit placement: 'fixed' oder am Ende des Dokuments), und sind seine Spalten ungleich, werden sie auf gleicher Höhe abgeschnitten – eine Bandgrenze von ceil(Σ used / N / grid) Zeilen, aufgelöst, nachdem die Hebel oben die früheren Seiten festgelegt haben –, sodass ein kurzes Literaturverzeichnis in jeder Spalte auf derselben Höhe endet, statt die erste Spalte zu füllen und die letzte halb leer zu lassen. Der Schnitt hält die Regeln ein, die ein ungeschnittenes Band einhält: Würde ein Block, der nicht über ihn hinweg geteilt werden kann (ein Absatzende, das die Mindestzeilen gegen Waisen und Witwen zusammenhalten, ein zusammenzuhaltender Kasten), über ihn hinauslaufen – und seine letzten Zeilen verlieren, da die Renderer eine Spalte auf ihren Rahmen zuschneiden – oder würde eine Überschrift eine Spalte schließen, während ihr Text die nächste eröffnet (mit headings.keepWithNext, dem Standard), wird der Schnitt eine Zeile tiefer gesetzt, bis zu dreimal, und sonst verworfen. Ein Block, der in den Zeilen, die der Schnitt unter einer eine Spalte anführenden Abbildung lässt, nicht beginnen kann (ein Absatz braucht dort sein Mindestmaß gegen Waisen), geht stattdessen in die nächste Spalte des Bands weiter, wie er es aus einer ungeschnittenen Spalte täte, und die Abbildung steht allein in ihrer Spalte. Spalten, deren Füße sich um eine Rasterzeile oder weniger unterscheiden, bleiben, wie sie sind: Ein Schlussband, dessen letzte Spalte eine Zeile kürzer endet, ist der übliche Abschluss, und ihn zu schneiden würde nur eine Zeile verschieben. Der Schnitt gilt dem Band, in dem er gemessen wurde, ebenso wie der Schnitt, den ein Kasten über die ganze Seitenbreite mitten auf der Seite verlangt: Bis postext 1.4 wurde der Schnitt, wenn der erste Text der Schlussseite zuerst einem Band ohne Platz dafür angeboten worden war (einer Seite, die ein Gleitobjekt ganz einnimmt, dem schmalen Band, das ein Kasten über die ganze Seitenbreite am Fuß der vorigen Seite lässt), an dieses Band vergeben, und die Schlussseite behielt jede Zeile in ihrer ersten Spalte. Spalten unterschiedlicher Breite (ein Anderthalb-Spalten-Layout mit Text in beiden) werden nach Fläche geschnitten, die Höhe jeder Spalte gewichtet mit ihrer Breite, da eine Zeile der schmalen Spalte weniger Text fasst. Nur wirksam, wenn enabled true ist. |
trailingStep | 'lines' | 'grid' | 'lines' | Die Einheit des Ausgleichsschnitts, den trailing nimmt (und des Schnitts, den beforeSpan hinter einem weiterrückenden Kasten nimmt). 'lines': Ein Band, dessen Text auf einem eigenen Zeilenabstand gesetzt ist (ein Register, ein Literaturverzeichnis, ein Container in kleiner Schrift), wird in ganzen Zeilen dieses Zeilenabstands geschnitten und neu versucht: der Höhe, die die meisten Zeilen des Bands teilen, Überschriften und Kästen beiseite. Seine Spalten enden dann innerhalb einer Zeile voneinander, wie ein Band aus Fließtext. Ein Band aus Fließtext und eines, das zwei Zeilenabstände zu gleichen Teilen mischt, wird wie bisher auf dem Grundlinienraster geschnitten. Ebenso ein Band, dessen Zeilen eine Höhe teilen und einen Zeilenbruchteil auseinanderstehen (Literaturangaben mit Abstand zwischen den Einträgen, Registergruppen auf einem von Hand gesetzten Rand): Vier von fünf Zeilen jeder Spalte müssen eine ganze Zahl von Zeilen voneinander entfernt sein. 'grid': Jeder Schnitt ist eine ganze Zahl von Zeilen des Grundlinienrasters, wie bis postext 1.27, wo ein Schnitt auf dem Raster eine Zeile mehr in eine Spalte eines Bands außerhalb des Rasters ließ und ein misslungener Schnitt um mehr als eine seiner Zeilen gesenkt wurde (Spalten bis zu drei Zeilen auseinander). Jeder andere Wert wird als 'lines' gelesen. Seit postext 1.28; früher gespeicherte Dokumente behalten 'grid' (pinLegacyTrailingStep). |
beforeSpan | boolean | true | Gleicht das Band aus, das ein Block über die ganze Seitenbreite hinter sich lässt: Passt ein Kasten mit span: 'page' auch nach einem Ausgleichsschnitt nicht unter die aktuellen Spalten und muss er auf die nächste Seite rücken oder geteilt werden (calloutStyles[].keepTogether: false), werden die Spalten, die er unterbricht, auf gleicher Höhe abgeschnitten – mit derselben Grenze, die ein Schlussband erhält –, statt dass die erste die Seite füllt und die letzte kurz endet. Die Seite wird als ausdrücklicher Umbruch belassen, damit die Hebel oben ihre letzte Spalte nicht wieder bis zum Seitenfuß dehnen; der Kasten oder der Teil davon, der passt, steht dann unter den ausgeglichenen Spalten. Nur wirksam, wenn enabled true ist. |
closingBox | 'first' | 'last' | 'off' | 'first' | Wann ein Kasten, der eine kurze Spalte schließt, den Raum unter seinem Fuß nimmt (Hebel 1, gespeichert als trailingCallout). 'first': vor jedem anderen Hebel, wie bis postext 1.4 – der Kasten nimmt die ganze Lücke, auch mehrere Zeilen, und die Überschriften darüber erhalten nichts. 'last': nach den Hebeln für Überschriften, Listenenden, abgesetzte Elemente und Gleitobjekte, die zuerst ganze Zeilen nehmen; der Kasten rückt mit dem Text darüber nach unten und nimmt dann nur, was sie übrig ließen, meist einen Zeilenbruchteil, sodass sein Fuß dennoch den letzten Rasterplatz trifft und er nah am Text bleibt, den er kommentiert. 'off': nie; der Kasten behält den Raum unter seinem Fuß, auch wenn die anderen Hebel ihn um ganze Zeilen nach unten bewegen können, wenn sie Abstand über ihm einfügen, und der Zeilenbruchteil unter ihm bleibt. Auf einer Schlussseite, wo der Kasten der einzige Hebel ist, der seinen Fuß mit der Spalte daneben fluchten lässt, lässt 'off' ihn dort, wo der Textfluss ihn hingesetzt hat. Jeder andere Wert wird als 'first' gelesen. Ein Kasten, der die einzige Textspalte seines Bands schließt (eine einspaltige Seite, die früh endet und deren nächster Block die nächste Seite eröffnet), wird nie bewegt: Es gibt keine Spalte daneben, mit der er fluchten müsste (seit postext 1.19). |
gridLines | 'allow' | 'off' | 'allow' | Auf einem Zeichenraster: ob die Hebel laufen dürfen, die ganze Rasterzeilen einfügen (über einer Überschrift, am Ende einer Liste, unter einem abgesetzten Element oder einem Kasten, unter einer die Spalte anführenden Abbildung). Sie halten jedes Zeichen in seiner Zelle; 'off' passt zu einem Standard, der die Zeilen einer Seite zählt, und lässt die Spalte stattdessen kurz. Ohne Wirkung außerhalb des Rasters. Jeder andere Wert wird als 'allow' gelesen. Seit postext 1.25. |
Welcher Hebel gegriffen hat
Das Layout speichert jeden angewandten Hebel an dem Block, auf den er angewandt wurde: block.balancing im VDT, den buildDocument zurückgibt. Ein Korrekturbogen, ein Test oder ein Bericht kann so sagen, warum eine Spalte bündig endet – und welche Spalten kein Hebel schließen konnte. Blöcke, die der Ausgleich unberührt ließ, tragen kein balancing, und ein mit enabled: false gebautes Dokument hat keines.
Auf einem Zeichenraster sagt das Dokument, warum eine Spalte kurz enden darf: doc.gridBalancing ist { off: true }, wenn der Ausgleich aus ist, weil die Seite auf einem Raster steht und die Konfiguration ihn nicht einschaltet, und { gridLines: 'off' }, wenn er ohne die Hebel für ganze Zeilen läuft; eine noch kurze Spalte trägt column.gridRefused, die Hebel, die das Raster ihr vorenthielt ('looseParagraph', wenn ein Absatz seine Zeile nur gewinnen könnte, indem er seine Zeichen aus ihren Zellen schiebt, die Hebel für ganze Zeilen unter gridLines: 'off'). Beide fehlen außerhalb des Rasters.
interface VDTBalancing {
levers: BalanceLever[]; // usually one: a paragraph after a list can take the list-end line and run a line long too
spaceAbove: number; // px the spacing levers added above the block (0 when only looseParagraph or flexFigure fired)
bodyGrowth?: number; // flexFigure: px the picture grew, cropped within its safe area
extraLines?: number; // looseParagraph: lines the paragraph gained
tracking?: number; // looseParagraph: the tracking that gained them, in thousandths of an em (0 = word spacing alone)
}
type BalanceLever = 'trailingCallout' | 'flexFigure' | 'heading' | 'listEnd' | 'afterDisplay' | 'afterFloat' | 'looseParagraph';| Hebel | Gespeichert an | Was er bewirkt hat |
|---|---|---|
trailingCallout | dem Rahmenblock des Kastens | Ein Kasten, der die Spalte schließt, ist um genau den Raum unter seinem Fuß nach unten gerückt (spaceAbove; ein Zeilenbruchteil ist zulässig). |
flexFigure | dem Block (inline) oder Gleitobjekt des Bilds | Ein Bild mit Sicherheitsbereich, um bodyGrowth px höher gesetzt, in ganzen Rasterzeilen, innerhalb des Sicherheitsbereichs beschnitten. bodySource des Ressourcenblocks ist der gezeigte Teil und bodyFlex.delta dasselbe Wachstum. |
heading | der Überschrift | Ganze Rasterzeilen über der Überschrift, bis maxLinesPerHeading. |
listEnd | dem ersten Block nach der Liste | Eine Rasterzeile am Ende einer Liste, bis maxLinesAfterList. |
afterDisplay | dem Block nach der Formel oder dem Kasten | Eine Rasterzeile unter einer abgesetzten Formel oder einem Kasten. |
afterFloat | dem ersten Block der Spalte | Eine Rasterzeile zwischen einem Gleitobjektband, das die Spalte anführt, und ihrem Text, bis maxLinesAfterFloat. |
looseParagraph | dem Absatz | Der Absatz wurde um extraLines länger neu umbrochen, mit der kleinsten Laufweite, die es schaffte (tracking; block.letterSpacing ist derselbe Wert in px). |
Die Ausgleichsschnitte werden an den Spalten gespeichert, die sie schneiden: column.bandCapped ist an jeder auf gleicher Höhe geschnittenen Spalte true (das Band, das ein Kasten über die ganze Seitenbreite hinter sich lässt, ein Schlussband), und column.trailingCap markiert zusätzlich das Schlussband eines Kapitels oder des Dokuments (trailing).
import { buildDocument } from 'postext';
const doc = buildDocument(content, config);
for (const page of doc.pages) {
page.columns.forEach((column, i) => {
const levers: string[] = column.blocks.flatMap((block) => block.balancing?.levers ?? []);
if (column.trailingCap) levers.push('closing band cut level');
else if (column.bandCapped) levers.push('band cut level');
if (levers.length > 0) console.log(`page ${page.index + 1}, column ${i + 1}: ${levers.join(', ')}`);
});
}
// page 3, column 1: heading, heading
// page 3, column 2: listEnd, looseParagraph#Überschreibungen pro Ebene
Jede Überschriftenebene kann die allgemeinen Standardwerte über das Array levels überschreiben. Standardmäßig unterscheidet sich nur fontSize (dazu breakBefore der H1, siehe unten) – alle anderen Eigenschaften werden von den allgemeinen Überschrifteneinstellungen geerbt.
| Ebene | Standard-Schriftgröße | Standard für breakBefore |
|---|---|---|
| H1 | 18 pt | { enabled: true, parity: 'always-odd' } |
| H2 | 15 pt | { enabled: false, parity: 'any' } |
| H3 | 12 pt | { enabled: false, parity: 'any' } |
| H4 | 10 pt | { enabled: false, parity: 'any' } |
| H5 | 9 pt | { enabled: false, parity: 'any' } |
| H6 | 8 pt | { enabled: false, parity: 'any' } |
Der Standard der H1 bildet den Kapitelaufbau eines Buchs nach: Jede Überschrift der obersten Ebene beginnt auf einer neuen rechten (ungeraden) Seite, mit einer zwingenden leeren Trennseite nach dem vorigen Kapitel. Überschreiben Sie ihn über levels[0].breakBefore, wenn Ihr Dokument flacher gegliedert ist als ein Buch.
Das breakBefore einer Ebene wird Feld für Feld über diesen Standard gelegt, und ein Objekt headings, das es nicht erwähnt, behält ihn. { parity: 'odd' } auf der H1 behält den Umbruch und ändert nur die Parität; { enabled: false } lässt die Kapitel fortlaufend weiterlaufen:
headings: {
fontFamily: 'Merriweather', // H1 still breaks to a fresh recto (always-odd)
levels: [{ level: 1, breakBefore: { parity: 'odd' } }], // …or: a recto, with no mandatory blank
}
headings: { levels: [{ level: 1, breakBefore: { enabled: false } }] } // chapters run onGeändert in postext 1.5. Bis postext 1.4 schaltete jedes Objekt headings den Umbruch der H1 aus, sofern levels[0].breakBefore nicht erneut angegeben wurde, und ein unvollständiges breakBefore füllte sein fehlendes Feld aus dem Standard ohne Umbruch. Eine für 1.4 im Code geschriebene Konfiguration mit einem Objekt headings und ohne Umbruch der H1 eröffnet daher jetzt jedes Kapitel auf einer neuen rechten Seite, mit leeren linken Seiten, wo nötig. Damit die Kapitel fortlaufend weiterlaufen, geben Sie dem Eintrag der H1 in levels ein Feld:
headings: { fontFamily: 'Merriweather', levels: [{ level: 1, breakBefore: { enabled: false } }] } // as 1.4 laid it outWo die Konfiguration gespeichert wurde, erkennt die Engine das und erledigt es für Sie: die Sandbox für die Bücher und Konfigurationen, die sie damals gespeichert hat (siehe Sandbox → Persistenz), und openBundle / readBundle für ein .postext-Paket, das postext 1.4 oder älter geschrieben hat (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Eine Konfiguration, die Sie selbst gespeichert haben, können Sie durch migrateConfig(config) aus postext/bundle schicken, das die Umbrüche ausschreibt, die 1.4 gesetzt hat (pinLegacyHeadingBreaks): enabled: false auf einer H1, die keinen Umbruch hatte, und parity: 'any' neben einem enabled: true ohne Parität, auf der H1 und auf Überschriftenformaten. Es fixiert außerdem, wie 1.4 sie setzte, die Größe der Mathematik, den Abstand um Inline-Abbildungen (auch in Kästen), die Inline-Auszeichnungen der Überschriften, die Größen der Initialen, den Raum unter einer Doppelpunktzeile, die eine Liste einleitet, die Zeilen, die ein Kastenschnitt von einem Absatz oder Listenpunkt übrig lässt, die Zeilenumbrüche an Strichen, den zeilenweisen Umbruch von Flattersatz, die Teilung eines Absatzes unter einer Überschrift, die Zeilenumbrüche am Bindestrich eines Kompositums und den Abstand unter Containern :::paragraphs. Übergeben Sie das Markdown des Buchs als drittes Argument, { content }, dann lässt es die Mathematik-Fixierung weg, wenn der Text kein $ enthält, die Abstandsfixierungen, wenn keine Zeile eine Ressource einbettet (die Fixierung des Kastenabstands, wenn keine es in einem Kasten tut), die Fixierung der Überschriftenauszeichnungen, wenn keine Überschrift eine Auszeichnung trägt, die Fixierung der Doppelpunktzeile, wenn keine Liste auf eine Zeile mit Doppelpunkt am Ende folgt, die Fixierung des Kastenschnitts, wenn der Text kein :::callout öffnet, die Strich-Fixierung, wenn kein Strich ohne Abstand zwischen Wörtern steht, die Fixierung der Teilung unter Überschriften, wenn der Text keine Überschrift hat, die Container-Fixierung, wenn der Text keinen Container :::paragraphs öffnet, und die Kompositum-Fixierung, wenn kein Bindestrich zwischen zwei Buchstaben steht; die Fixierung des Flattersatzumbruchs erhält nur eine Konfiguration, die laufenden Text im Flattersatz setzt, und die Container-Fixierung nur eine, die ein Absatzformat deklariert (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Nur für die Umbrüche rufen Sie pinLegacyHeadingBreaks(config) auf.
Überschreibungen pro Ebene unterstützen dieselben Eigenschaften wie die allgemeinen Standardwerte – fontSize, lineHeight, fontFamily, color, fontWeight, marginTop, marginBottom, snapToGrid – sowie diese nur für Ebenen vorhandenen Felder (ein Überschriftenstil nimmt sie ebenfalls an):
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
italic | boolean | false | Setzt die Überschrift kursiv. Wird zusätzlich zu fontWeight angewandt. |
textTransform | 'none' | 'uppercase' | 'none' | Setzt den Titel der Überschrift in Versalien (ein Nummernpräfix bleibt wie geschrieben, ebenso ein Chip und die Bezeichnung eines :ref darin). Längenerhaltend, damit die Source-Map des Editors 1:1 bleibt: Zeichen, deren Großform länger ist (ß → SS), bleiben, wie sie sind. Der umgewandelte Titel speist auch den Platzhalter {titleText} erweiterter Gestaltungen und Kapitelauftakte. Die PDF-Lesezeichen behalten den Titel wie geschrieben – Author contributions, nicht AUTHOR CONTRIBUTIONS –, so wie CSS-text-transform den Text selbst unberührt lässt (bis postext 1.4 übernahmen sie die Versalien). |
letterSpacing | Dimension | 0 | Laufweite nach jeder Glyphe der Überschrift – Leerzeichen und Nummernpräfix eingeschlossen –, wie CSS-letter-spacing. Positive Werte sperren die Buchstaben (mit textTransform: 'uppercase' gesetzte Versalien brauchen meist etwas: { value: 0.12, unit: 'em' }), negative ziehen einen Schaugrad enger. Ein Wert in em bezieht sich auf die fontSize der Ebene. Die Zeilen der Überschrift werden damit gemessen, sodass sie dort umbrechen, wo der gesperrte Text endet, und Canvas, HTML und PDF malen sie gleich. Sperrung ändert nie die Glyphen: Die Ligaturen der Schrift (fi, fl) bleiben, in jeder Ausgabe. Eine zentrierte oder rechtsbündige Zeile wird nach ihren Buchstaben platziert: Die Laufweite nach ihrer letzten Glyphe entfällt, wie in Gestaltungstexten, sodass eine zentrierte Überschrift mit dem Standardauftakt einer Überschrift mit span: 'page' fluchtet. Eine Ebene, die aus ihrem advancedDesign gezeichnet wird, ignoriert sie, wie die übrigen typografischen Felder hier: Jedes Textelement einer Gestaltung hat sein eigenes letterSpacing. Ein Überschriftenstil setzt sie ebenfalls, für die Überschriften, die es verwenden. Bis postext 1.4 hatten Überschriften keine Laufweite, und der Schlüssel wurde stillschweigend verworfen. |
lineSpan | number | nicht gesetzt | Belegte Zeilen (行取り, JLReq §4.1.6): Die Überschrift wird in einem Band von so vielen Fließtextzeilen gesetzt, ihre Zeichen darin zentriert, anstelle von marginTop und marginBottom; 3 ist eine 3行取り-Überschrift. Das Band beginnt auf einer Fließtextzeile, wenn die Überschrift auf das Raster einrastet, und der Text danach bleibt auf dem Raster, in beiden Schreibrichtungen und mit cjk.grid; eine Überschrift, deren Zeilen mehr brauchen, nimmt die nächste ganze Zahl. Die Mitte ist die der Zeichen (die Grundlinie abzüglich der ideografischen Mitte der Schrift), wie JLReq sie misst, nicht die der Zeilenrahmen. Nicht angewandt auf Auftakte (span: 'page'), aus einem advancedDesign gezeichnete Überschriften, verborgene Überschriften oder Überschriften in Kästen. Ein Überschriftenformat kann 0 setzen, um den Wert seiner Ebene abzuschalten. Seit postext 1.16. |
indent | Dimension | 0 | Einzug der Überschrift vom Zeilenanfang (字下げ), wobei em die Größe des Fließtexts ist, da japanische Bücher Einzüge von Überschriften in Zeichen des Fließtexts zählen (JLReq §4.1.3): { value: 6, unit: 'em' } ist 6字下げ, gleich wie groß die Überschrift ist. Die Satzbreite verringert sich darum, und eine zentrierte Überschrift zentriert sich im Rest. Seit postext 1.16. |
firstLineIndent | Dimension | 0 | Einzug nur der ersten Zeile der Überschrift, gemessen ab indent und wie dieser in Geviert des Fließtexts: Die Zeilen, auf die eine lange Überschrift umbricht, beginnen bei indent (am Zeilenanfang, wenn es nicht gesetzt ist), so wie GB/T 9704 jede Überschriftenebene zwei Zellen eingerückt setzt, mit dem Umbruch am Rand: { value: 2, unit: 'em' }. Mit eingeschaltetem cjk.grid sind zwei Geviert des Fließtexts zwei Zellen des Rasters. Eine nummerierte Überschrift druckt ihre Nummer nach dem Einzug, sodass die Nummerierungsvorlage keine ideografischen Leerzeichen braucht, die auch im Inhaltsverzeichnis und in den PDF-Lesezeichen erscheinen würden. Funktioniert in vertikalem Text (ab dem Zeilenanfang oben), mit dem CJK-Setzer (eine öffnende Klammer am Anfang der Überschrift folgt wie in einem Absatz den Regeln für den Zeilenanfang) und mit Knuth-Plass. Eine zentrierte Überschrift nimmt ihn wie ein zentrierter Absatz: Ihre erste Zeile zentriert sich im Raum nach dem Einzug. {firstLineIndent=N} nach dem Titel einer Überschrift setzt ihn für eine Überschrift, und {firstLineIndent=0} schaltet den Wert ihrer Ebene ab. Seit postext 1.24. |
jidori | number | nicht gesetzt | Gleichmäßige Verteilung (字取り): Eine einzeilige Überschrift, die schmaler als so viele ihrer eigenen Geviert ist, wird gleichmäßig auf genau diese Breite verteilt, sodass 3 序章 als 序 章 setzt. Breitere Titel und mehrzeilige Überschriften bleiben, wie sie sind. {jidori=N} nach dem Titel einer Überschrift setzt eine Überschrift, und {jidori=0} schaltet den Wert ihrer Ebene ab. Seit postext 1.16. |
dropCap | ParagraphDropCap | false | keine | Eine Initiale, die den ersten Absatz des Fließtexts nach einer Überschrift dieser Ebene eröffnet (siehe Initialen): Eine Einstellung gibt jedem Kapitel seine Initiale. Eine Überschrift schaltet sie mit {dropcap=false} ab oder setzt ihre Zeilenzahl mit {dropcap=2}. Seit postext 1.23. |
numberingTemplate | string | '' | Vorlage der automatischen Nummer der Ebene. Ein Token … druckt den laufenden Zähler dieser Überschriftenebene, optional mit einem Suffix formatiert – große römische Ziffern, kleine römische Ziffern, / alphabetisch, mit führenden Nullen, ausgeschrieben (twenty-one), als Ordinalzahl (twenty-first), in chinesischen Zahlzeichen (in einem japanischen Dokument in japanischen: 第百一章), Ziffer für Ziffer, in Finanzzahlzeichen und eingekreist, oder ein beliebiger Name aus Schreibweisen der Nummernformate –, und jeder andere Text ist wörtlich ('Chapter . ', '.', '第回' für 第一百二十回; ein Backslash maskiert eine wörtliche geschweifte Klammer). Ein Token, dessen Zähler noch leer ist, entfällt zusammen mit seinem angrenzenden Trenner. Leer (der Standard) bedeutet keine automatische Nummer. Die gesetzte Nummer wird dem Titel im Textfluss vorangestellt, speist den Platzhalter eines Felds der erweiterten Gestaltung (wo das Präfix selbst nicht vorangestellt wird) und erscheint im Inhaltsverzeichnis. Siehe Ausgeschriebene Zahlen für die Wörter und Überschriftenstile für eine eigene Vorlage bei einigen Überschriften einer Ebene. |
numberSeparator | string | ' ' | Was zwischen Nummer und Titel steht: in der Spalte, im Standardauftakt einer Ebene mit span: 'page', in den lebenden Kolumnentiteln, die die Überschriftenzeile drucken, und in den PDF-Lesezeichen. Der Trenner der Ebene 1 verbindet auch Nummer und Titel eines Teils auf der Standard-Teiltitelseite und in der Standardzeile für Teile im Inhaltsverzeichnis. Chinesische Kapitelköpfe nehmen ein ideografisches Leerzeichen oder nichts (' ': 第一回 甄士隱夢幻識通靈). Das Inhaltsverzeichnis behält seine eigene Nummernspalte (toc.levels[].numberGap). Ein Überschriftenstil kann einen eigenen setzen. Wird ein Titel mit zweigeteilt, wie die Verspaartitel chinesischer Romane, verbinden die einzeiligen Formen (die Spalte, das Inhaltsverzeichnis, die lebenden Kolumnentitel) die Hälften mit einem ideografischen Leerzeichen, wenn beide Seiten chinesische oder japanische Zeichen sind, und sonst mit einem Leerzeichen. |
numberPosition | 'before' | 'replace' | 'before' | Wo die erzeugte Nummer steht. 'before': vor dem Titel, verbunden durch numberSeparator. 'replace': Die Nummer ist der ganze Titel, und der in der Quelle geschriebene Titel wird nicht gedruckt, sodass # Night unter numberingTemplate: 'الليلة {1:ordinal-feminine}' الليلة الثانية druckt. Das Inhaltsverzeichnis führt die Nummer als Titel des Eintrags (ohne Nummernspalte), und die lebenden Kolumnentitel (, ) und die PDF-Lesezeichen lesen sie ebenfalls; ist für eine solche Überschrift leer. Nur für nummerierte Überschriften mit Vorlage (der der Ebene oder ihres Formats); jede andere behält ihren Titel. Ein Überschriftenstil kann einen eigenen Wert setzen, 'before', um die Titel zu behalten, die seine Ebene ersetzen würde. |
breakBefore | HeadingBreakBeforeConfig | H1: { enabled: true, parity: 'always-odd' }H2–H6: { enabled: false, parity: 'any' } | Erzwingt einen Seitenumbruch vor jeder Überschrift dieser Ebene. parity: 'odd' / 'even' legt zusätzlich fest, auf welcher Seite der Doppelseite die Überschrift beginnt – bei Bedarf wird eine leere Füllseite eingefügt (die in der Seitenzählung mitzählt). 'always-odd' / 'always-even' garantieren zusätzlich mindestens eine zwingende leere Trennseite zwischen dem vorigen Inhalt und der neuen Überschrift (die Trennseite gehört zum vorigen Kapitel; jede weitere Füllseite für die Parität gehört zum neuen). Ist die Überschrift der allererste Block des Dokuments und die erste Seite noch leer, wird die Parität nicht erzwungen – die Überschrift landet wie geschrieben auf Seite 1. Ein nicht gesetztes Feld behält den Standard der Ebene: { parity: 'odd' } auf der H1 bricht weiterhin um. |
hidden | boolean | false | Eine strukturelle Überschrift: Sie druckt nichts und nimmt in der Spalte oder in einem Kasten keinen Raum ein – kein Text, keine Ränder, kein Auftaktband –, tut aber alles andere, was eine Überschrift tut. Ihr breakBefore eröffnet weiterhin eine Seite, sie eröffnet den Abschnitt ihres Formats, sie zählt (es sei denn, ihr Format sagt numbered: false), und sie wird von :::toc aufgeführt, von lebenden Kolumnentiteln mit genannt und im PDF als Lesezeichen geführt. Für eine Widmung, eine Mottoseite oder ein Impressum, die das Inhaltsverzeichnis und die Lesezeichen des Lesers brauchen, die Seite aber nicht zeigt. Setzen Sie sie lieber auf ein Überschriftenstil als auf eine ganze Ebene; eine Überschrift überschreibt sie mit / . |
headings: {
fontFamily: 'Merriweather',
levels: [
// Canonical book preset: chapters on a right-hand (odd) page.
{ level: 1, fontSize: { value: 24, unit: 'pt' }, breakBefore: { enabled: true, parity: 'odd' } },
{ level: 2, fontSize: { value: 18, unit: 'pt' }, italic: true },
]
}snapToGrid funktioniert auch pro Ebene. Ohne Wert folgt eine Ebene headings.snapToGrid; mit Wert überschreibt sie es – so kann ein Dokument seine H2 anderthalb Zeilen über ihren Text setzen, bis zum nächsten Einrastpunkt neben dem Raster, während seine H3 den Abstand unter sich auf ganze Rasterzeilen aufrunden. Ein Überschriftenformat kann es ebenfalls setzen, für die Überschriften, die es verwenden.
headings: {
marginBottom: { value: 1.5, unit: 'em' },
levels: [
{ level: 2, snapToGrid: false }, // exactly 1.5 em under every H2
{ level: 3 }, // inherits headings.snapToGrid: true
],
}#Umbruch davor
breakBefore ist unabhängig von den Nummerierungseinstellungen: Ist es eingeschaltet, erzwingt es einen Seitenumbruch, aber der Zähler wird nur zurückgesetzt, wenn Sie ausdrücklich eine Direktive :::numbering einfügen. Leere Paritätsseiten zählen als echte Seiten der Folge und erhalten Kopf- und Fußzeilen nach ihren normalen Regeln für ungerade und gerade Seiten.
Ein :::pagebreak direkt vor einer solchen Überschrift ersetzt ihren Umbruch nicht: Die Überschrift wendet ihre Parität nach der Seite an, die die Direktive eröffnet hat, was eine leere Seite hinzufügen kann. Siehe Überschriftenstile für eine Überschrift, die direkt nach einem manuellen Umbruch beginnen soll.
Paritätswerte
| Wert | Verhalten |
|---|---|
'any' (Standard) | Keine Paritätsbedingung. Die Überschrift beginnt einfach auf der nächsten Seite. |
'odd' | Stellt sicher, dass die Überschrift auf einer ungeraden (rechten) Seite beginnt. Eine einzelne leere Seite wird nur eingefügt, wenn die natürliche nächste Seite gerade ist. |
'even' | Dasselbe für eine gerade (linke) Seite. |
'always-odd' | Garantiert mindestens eine zwingende leere Trennseite zwischen dem vorigen Inhalt und der neuen Überschrift und stellt dann die ungerade Parität sicher. Nützlich, wenn jedes Kapitel auf einer neuen Doppelseite beginnen muss. |
'always-even' | Dasselbe für eine gerade Seite. |
Zugehörigkeit leerer Seiten
Leere Seiten, die breakBefore einfügt, tragen Kopfzeilen mit Kapiteltitel danach, warum sie eingefügt wurden:
- Seiten, die eingefügt werden, um eine Paritätsbedingung zu erfüllen (
'odd','even'oder das Paritätsende von'always-*'), gehören zum kommenden Kapitel. Ihr Platzhalter{chapterTitle}in der Kopfzeile wird zum Titel des neuen Kapitels aufgelöst – denn die leere Seite existiert nur, um das neue Kapitel auf die richtige Parität zu schieben. - Die zwingende vorangehende Trennseite, die
'always-odd'/'always-even'einfügen, gehört zum vorigen Kapitel. Sie ist ein bewusstes Atemholen am Kapitelende, daher zeigt die Kopfzeile mit{chapterTitle}weiterhin den Titel des alten Kapitels.
Lebende Kolumnentitel und Palette eines gestalteten Abschnitts (siehe Überschriftenstile) folgen auf leeren Seiten denselben beiden Regeln.
Ausnahme am Dokumentanfang
Ist der allererste Block des Dokuments eine Überschrift mit eingeschaltetem breakBefore – oder beginnt die Quelle mit :::pagebreak –, wird die Parität nicht erzwungen, solange die erste Seite noch leer ist. Die Überschrift landet wie geschrieben auf Seite 1, unabhängig von der eingestellten Parität, sodass ein Dokument, das mit einem auf parity: 'odd' eingestellten # Chapter 1 beginnt, keine unnötige leere Seite am Anfang erbt. Sobald Inhalt platziert wurde, verhält sich die Parität normal.
#Seitenbreite und erweiterte Gestaltung
Jede Überschriftenebene nimmt zwei weitere Felder an, die steuern, wie die Überschrift als Kapitelauftakt über die ganze Seitenbreite dargestellt wird.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
span | 'column' | 'page' | 'column' | Mit 'page' wird die Überschrift als Kapitelauftakt behandelt, und ihre erweiterte Gestaltung (sofern aktiviert) wird der Seite als Auftaktband über dem Fließtext angefügt. Kombinieren Sie das mit breakBefore.enabled: true, damit der Auftakt zuverlässig eine neue Seite beginnt. Ohne eigene Gestaltung wird der Titel von einem Standardauftakt über den ganzen Inhaltsbereich gemalt, in Typografie und Zeilenabstand der Ebene, mit seinen fetten, kursiven, hoch- und tiefgestellten Abschnitten (headings.inlineMarks), und das Band wird in dieser Breite gemessen. Das Band fasst jede Zeile, die der Auftakt malt: Wo der Auftakt mehr Zeilen braucht als die eigene Satzbreite der Überschrift (ein Titel im Blocksatz, dessen Leerzeichen sich auf eine Zeile stauchen würden, ein erzwungener Umbruch ), nimmt das Band sie ebenfalls auf. Bis postext 1.4 wurde das Band mit dem in Spaltenbreite umbrochenen Titel gemessen, sodass ein Titel, der auf einer Zeile in den Inhaltsbereich passt, ein zwei Zeilen hohes Band mit der Zeile in seiner Mitte erhielt. Die übrigen Spalten beginnen unter dem Band wie die eigene Spalte der Überschrift. Text, der eine von ihnen eröffnet, beginnt dort, wo Text direkt unter dem Auftakt beginnen würde, gleich was in dessen eigener Spalte auf den Auftakt folgt: das marginBottom des Auftakts unter seinem Titel oder seiner Gestaltung, bis zur nächsten Rasterzeile, wenn die Ebene einrastet. Eine Überschrift, eine abgesetzte Formel oder eine Zeile des Inhaltsverzeichnisses, die eine von ihnen eröffnet, wird auf gleicher Höhe mit der ersten Überschrift oder abgesetzten Formel unter dem Auftakt gesetzt, Ränder wie dort eingeschlossen; läuft die Spalte des Auftakts mit etwas anderem weiter, beginnt sie dort, wo dieser Text beginnt. Eine verborgene Überschrift unter dem Auftakt zählt nicht, und der Abstand, den der Spaltenausgleich über der Überschrift unter dem Auftakt einfügt, wird in den anderen Spalten nicht wiederholt. Was diese Spalten auf das Raster einrasten, landet auf dem Raster der Seite. Bis postext 1.4 stand ihr erster Block am Fuß des Bands: neben dem Raster, wenn das Band zwischen zwei Zeilen endete, und direkt am Band, ohne Rand, wenn eine Überschrift auf den Auftakt folgte (eine Zeile höher als jetzt, wenn das Band auf dem Raster endete); eine Überschrift dort verlor auch den oberen Rand, den die Überschrift der ersten Spalte behielt. |
spanBreak | boolean | true | Ob eine Überschrift mit span: 'page' eine neue Seite beginnt. true eröffnet die nächste Seite (deren Seite breakBefore wählt). false eröffnet sie zusammen mit breakBefore.enabled: false dort, wo der Text hinreicht, wie ein Kasten über die ganze Seitenbreite: Die Spalten darüber enden auf gleicher Höhe (das Band wird ausgeglichen, wenn headings.balancing.trailing an ist), die Gestaltung oder der Standardauftakt der Überschrift wird darunter über den Inhaltsbereich gesetzt, und der Text läuft darunter in jeder Spalte weiter: ein zweiter Artikel eines Mitteilungsblatts unter dem Ende des ersten. Fasst der verbleibende Raum die Überschrift und die Mindestzeilen gegen Witwen darunter nicht, eröffnet sie wie mit true die nächste Seite. Die Rolle der Seite bleibt die, die ihr erster Block ihr gibt. Ohne Wirkung auf eine Überschrift mit span: 'column'. Auch für ein Überschriftenformat. Seit postext 1.19. |
advancedDesign | HeadingAdvancedDesignConfig | | Gestaltungsfeld mit freier Komposition für diese Ebene. Mit enabled bilden die Elemente des Felds den Auftakt. Verwenden Sie in einem Textelement, um den Titeltext der Überschrift zu setzen; verwenden Sie , usw., um die formatierte Überschriftennummer einzufügen. |
advancedDesign.minHeight | Dimension | — | Mindesthöhe, die im Spaltenfluss für die Überschrift reserviert wird. Die Überschrift nimmt max(design content bottom, minHeight), darunter das marginBottom der Überschrift (aus ihrem Überschriftenformat, ihrer Ebene oder headings.marginBottom; standardmäßig 0,5 em der Überschriftengröße), und die Summe wird auf das Grundlinienraster aufgerundet, wenn Überschriften einrasten. So kann ein Auftakt den Fließtext nach unten schieben (oder die ganze Seite beanspruchen), auch wenn seine Elemente kurz sind oder über der Überschrift an Seiten- oder Anschnittrahmen verankert sind. Für ein Band von genau minHeight Höhe setzen Sie dieses marginBottom auf 0 und machen minHeight zu einer ganzen Zahl von Rasterzeilen. Gilt immer, wenn enabled true ist, auch bei leerem Feld. Was die Unterkante des Gestaltungsinhalts zählt, steht unter Reservierte Höhe. |
Ein Auftakt so hoch wie die Seite. Reicht die reservierte Höhe über den Fuß der Spalte hinaus – ein Umschlag, dessen minHeight die Seitenhöhe ist, ein Bild oder ein Kasten, der an der Seite oder am Anschnitt verankert ist und bis zum Beschnitt hinabreicht –, beansprucht der Auftakt den Rest der Seite: Der Text danach beginnt auf der nächsten Seite, in jeder Spalte eines zweispaltigen wie eines Anderthalb-Spalten-Layouts. Ein Umschlag braucht daher kein :::pagebreak danach (eines schadet nicht: Es fügt keine leere Seite hinzu). Eine Überschrift in der Spalte (span: 'column'), deren Gestaltung höher als ihre Spalte ist, beansprucht diese Spalte, und der Text beginnt am Kopf der nächsten. Der Block der Überschrift reicht dann bis zum Fuß der beanspruchten Spalte, und ihre Gestaltung wird an diesem Band ausgelegt: Oben verankerte Elemente bleiben, wo sie verankert sind, und die, die dem Band folgen – an seiner Mitte oder seinem Fuß verankert oder mit Höhe 'fill' –, halten sich an den Raum, den die Überschrift beansprucht, wie sie sich an die reservierte Höhe halten, wenn sie passt (bis postext 1.4 behielt der Block die Höhe seines Texts, sodass diese Elemente an einem Band von einer Titelhöhe ausgelegt wurden und der Text danach unter der Gestaltung weiterlief). Seitenausstattung, die die Seite nicht beanspruchen soll – ein Streifen am Vorderschnitt über die ganze Seite, ein Ornament am Seitenfuß –, gehört stattdessen in die Gestaltung von Kopf- oder Fußzeile: An 'page' oder 'bleed' verankert und mit pages: 'opener' angezeigt, wird sie auf der Auftaktseite gemalt und reserviert keinen Raum im Fließtext.
Beispiel – ein minimalistischer Kapitelauftakt, der „Chapter N“ über dem Titel zeigt:
{
"headings": {
"levels": [
{
"level": 1,
"span": "page",
"breakBefore": { "enabled": true, "parity": "always-odd" },
"advancedDesign": {
"enabled": true,
"slot": {
"elements": [
{
"kind": "text",
"id": "chapterLabel",
"placement": {
"anchor": { "to": "container", "edge": "top" },
"offset": { "y": { "value": 48, "unit": "pt" } },
"size": { "width": "fill" }
},
"content": "Chapter {numberRoman}",
"fontSize": { "value": 10, "unit": "pt" },
"align": "center",
"overflow": "ellipsis-end"
},
{
"kind": "text",
"id": "chapterTitle",
"placement": {
"anchor": { "to": "#chapterLabel", "edge": "below" },
"offset": { "y": { "value": 12, "unit": "pt" } },
"size": { "width": "fill" }
},
"content": "{titleText}",
"fontSize": { "value": 24, "unit": "pt" },
"fontWeight": 700,
"align": "center",
"overflow": "wrap",
"hyphenate": true
}
]
}
}
}
]
}
}Platzhalter für Überschriften im Gestaltungsfeld einer Ebene:
{titleText}– der reine Text der Überschrift (ohne Nummernpräfix). Ein erzwungener Umbruch im Titel (\\) ist hier ein Zeilenumbruch, in einem Auftaktband wie in einer Gestaltung in der Spalte (bis postext 1.4 druckte eine Gestaltung in der Spalte dort ein Leerzeichen, während ihre Höhe mit dem Umbruch gemessen wurde). Die Zeilen, auf die die verborgene Überschrift in ihrer Spalte umbricht, werden wieder zum Titel wie geschrieben verbunden: Ein nach seinem eigenen Bindestrich umbrochenes Wort behält den Bindestrich ohne Leerzeichen danach, ein Wort, das die Spalte getrennt hat, ist wieder ganz, ohne den Trennstrich, den der Umbruch hinzufügte, eine durch ein geschütztes Leerzeichen verbundene Gruppe, die breiter als die Spalte war und an diesem Leerzeichen geteilt wurde, erhält ihr geschütztes Leerzeichen zurück (Capítulo XVIII, nichtCapítuloXVIII), und jeder andere Umbruch gibt sein eines Leerzeichen zurück. Bis postext 1.4 wurde jeder Zeilenumbruch zu einem Leerzeichen, sodass ein Titel, der an einem Bindestrich umbrach,Word- Bookdruckte, und ein erzwungener Umbruch in einem solchen Titel entfiel.{number}– die formatierte Nummer nach demnumberingTemplateder Ebene.{numberDecimal},{numberRoman},{numberRomanLower},{numberAlpha},{numberAlphaLower}– der Zähler der Überschrift (die laufende Zählung ihrer Ebene, gleich was die Vorlage druckt) in anderen Zahlformaten: Das dritte Kapitel ergibt3,III,iii,C,c, mit oder ohnenumberingTemplate. Eine nicht nummerierte Überschrift (ein Format mitnumbered: false) lässt sie leer.{numberWords},{numberWordsLower},{numberOrdinalWords},{numberOrdinalWordsLower}– derselbe Zähler ausgeschrieben, mit großem Anfangsbuchstaben oder klein: Three / three, Third / third (siehe Ausgeschriebene Zahlen).{numberHan}– derselbe Zähler in chinesischen Zahlzeichen, in der Schrift deslocaledes Dokuments: Ein mit第{numberHan}回gesetzter Auftakt druckt für das zwölfte Kapitel 第十二回, während das Inhaltsverzeichnis12aufführt.{chapterNumber},{chapterTitle},{pageNumber},{totalPages},{bookTotalPages},{title},{subtitle},{author},{publishDate}– gemeinsame Metadaten-Platzhalter.{attr.<key>}– ein Attribut, das auf der Überschriftenzeile selbst steht (# Title {author="I. Zango Martín"}), ersatzweise das Attribut der H1 des aktuellen Kapitels. Fehlende Attribute werden ohne Warnung zu einer leeren Zeichenkette aufgelöst.
{chapterNumber} druckt, was die lebenden Kolumnentitel für das Kapitel drucken: die Nummer der H1, wenn ihre Ebene (oder ihr Format) ein numberingTemplate hat, sonst die Ordnungszahl des Kapitels – 1, 2 …, fortgesetzt über die vor diesem gesetzten Kapitel hinaus – und nichts für ein nicht nummeriertes Kapitel oder ein Format, dessen Vorlage '' ist. Eine Überschriftengestaltung liest das Kapitel, zu dem ihre Überschrift gehört: eine Überschrift der Ebene 1 ihr eigenes, eine tiefere Überschrift die letzte Überschrift der Ebene 1 vor ihr. Das gilt auch, wo zwei Kapitel auf einer Seite aufeinandertreffen, während die lebenden Kolumnentitel dieser Seite das spätere Kapitel drucken. Die Höhe, die ein Auftakt reserviert, wird mit demselben Wert gemessen. Bis postext 1.4 wurde sie mit dem Nummernpräfix der Überschrift gemessen (ohne Vorlage leer), sodass eine Gestaltung, deren Höhe von {chapterNumber} abhängt, höher malen konnte als der Raum, den sie nahm; und die Gestaltung druckte das Kapitel der Seite, sodass das erste von zwei Kapiteln, die sich eine Seite teilen, die Nummer des zweiten zeigte.
Die Zähler-Platzhalter folgen dem Buch über Kapitel hinweg, die einzeln gesetzt werden (die Zähler, die continuationAfter() weitergibt), und das Attribut startAt einer Überschrift setzt sie neu (siehe Dokumentformat → Attribute von Überschriften). Ein Auftakt, der Chapter III über einem Titel sagt, der im Textfluss und im Inhaltsverzeichnis mit 3. nummeriert ist:
{
level: 1,
span: 'page',
numberingTemplate: '{1}.',
advancedDesign: {
enabled: true,
slot: { elements: [
{ kind: 'text', id: 'label', content: 'Chapter {numberRoman}', fontSize: { value: 10, unit: 'pt' }, overflow: 'ellipsis-end',
placement: { anchor: { to: 'container', edge: 'top-left' }, size: { width: 'fill', height: 'auto' } } },
{ kind: 'text', id: 'title', content: '{titleText}', fontSize: { value: 24, unit: 'pt' }, overflow: 'wrap',
placement: { anchor: { to: '#label', edge: 'below' }, size: { width: 'fill', height: 'auto' } } },
] },
},
}Reservierte Höhe
Eine Überschrift mit erweiterter Gestaltung nimmt in der Spalte Raum ein wie jeder Block: Der Fließtext danach beginnt unter diesem Raum. Der Raum ist die größte von drei Höhen, alle von der Oberkante der Überschrift abwärts gemessen (bei einem Auftakt, der seine Seite beginnt, von der Oberkante des Inhaltsbereichs):
- der eigene Text der Überschrift, in der Typografie der Ebene gesetzt (er ist unter der Gestaltung verborgen, behält aber seine Zeilen);
- die Unterkante des Gestaltungsinhalts – die tiefste Unterkante unter den Elementen, die zählen (siehe unten);
advancedDesign.minHeight.
Danach kommt das marginBottom der Überschrift hinzu (aus ihrem Überschriftenformat, ihrer Ebene oder headings.marginBottom; standardmäßig 0,5 em), und das Ergebnis wird auf das Grundlinienraster aufgerundet, wenn Überschriften einrasten. Bei einem Auftakt (span: 'page') wird dasselbe Band in jeder Spalte der Seite freigehalten. Bei einer Überschrift in der Spalte, die in ihre Spalte passt, wird die Gestaltung im Rahmen der Überschrift ausgelegt, der genau so hoch ist.
Welche Elemente zählen. Jedes Element der Gestaltung zählt – Text, Linien, Kästen und Bilder gleichermaßen (bis postext 1.4 zählte ein Element image nie, sodass der Text über einem Bild im Band beginnen konnte, wenn minHeight ihn nicht fernhielt) –, außer:
- Elementen mit
reserve: false– Dekoration, die unter dem Text liegen darf; - Elementen, die dem Band selbst folgen – an der mittleren Reihe (
left,center,right) oder der unteren Reihe (bottom-left,bottom,bottom-right) des Containers verankert, mit einer Höhe'fill'gegenüber dem Container (ein Kasten oder eine senkrechte Linie ohne Höhe füllt ihn standardmäßig), und jedem Element, das an einem davon verankert ist. Der Container ist das reservierte Band, daher sitzen diese auf seinem Fuß oder überspannen es: eine Linie unter dem Band, eine getönte Fläche hinter dem Titel. Sie folgen der Höhe; sie legen sie nie fest. Ein Text darunter, der seine eigene Höhe behält, braucht dennoch Platz: Ein am Fuß des Bands verankerter Titel macht das Band mindestens so hoch wie den Titel, sodass der Titel nie über der Oberkante der Überschrift beginnt. MitminHeight: 36mmund dem Titel anbottom-leftverankert ist der Rahmen der Überschrift 36 mm plus ihrmarginBottomhoch, auf das Raster aufgerundet, und der Titel sitzt am Fuß dieses Rahmens, direkt über dem folgenden Text; ohneminHeightmacht ein Titel, der mehr Zeilen braucht als der eigene Text der Überschrift, das Band so tief wie den Titel. Bis postext 1.4 wurde ein solcher Titel nach oben über den Text über der Überschrift gemalt. Kästen, Linien und Bilder, die dem Band folgen, setzen keine solche Untergrenze, sodass eine am Fuß verankerte Fläche über die Überschrift hinausreichen kann.
An Seite und Anschnitt verankerte Elemente zählen danach, wie weit sie unter die Oberkante der Überschrift reichen. Ein Band oben über die Seite, das über der Überschrift endet, zählt nichts; ein randabfallendes Bild, das darüber hinausläuft, schiebt den Text bis zu seiner Unterkante hinunter. Ebenso alles, was tief auf der Seite steht: Ein Siegel 25 mm über dem Seitenfuß, ein Seitenband in voller Höhe oder ein Rahmen reserviert die Seite bis zu seiner Unterkante, und der Text beginnt meist auf der nächsten Seite. Kennzeichnen Sie solche Dekoration mit reserve: false – sie wird weiterhin gemalt, und Elemente können weiterhin an ihr verankert werden – und geben Sie der Überschrift den nötigen Raum mit ihren Textelementen oder minHeight:
{
"kind": "image", "id": "seal", "resourceId": "seal", "reserve": false,
"placement": {
"anchor": { "to": "page", "edge": "bottom-right" },
"offset": { "x": { "value": -25, "unit": "mm" }, "y": { "value": -25, "unit": "mm" } },
"size": { "width": { "value": 30, "unit": "mm" } }
}
}Ein Element, das an einem nicht reservierenden verankert ist, zählt weiterhin, sofern es nicht ebenfalls gekennzeichnet ist (eine auf das Siegel gesetzte Legende braucht ihr eigenes reserve: false).
Wo sie malt. Die Gestaltung eines Auftakts (span: 'page') wird vor dem Fließtext gezeichnet, sodass Dekoration, die nichts reserviert, unter dem Text liegt. Die Gestaltung einer Überschrift in der Spalte wird mit dem Block der Überschrift gezeichnet – über den Blöcken darüber in der Spalte, unter denen danach –, wo immer sie oberhalb des Fußes ihrer Spalte platziert ist: auch in den Seitenrändern, im Kopfsteg, im Anschnitt und in den benachbarten Spalten. Der Fuß der Spalte schneidet sie ab, auf dem Canvas und im PDF, da der Textfluss dort endet (siehe Höher als die Spalte unten). Bis postext 1.4 schnitten Canvas und PDF sie auch am Kopf ihrer Spalte ab, sodass ein oben an Seite oder Anschnitt verankertes Band in die Seitenränder lief, aber am Kopfsteg aufhörte. Dekoration, die am Seitenfuß verankert ist, gehört in einen Auftakt oder in die Gestaltung der Fußzeile mit pages: 'opener'.
Höher als die Spalte. Reicht der Raum über den Fuß der Spalte hinaus – ein minHeight so hoch wie die Seite, ein Bild oder Rahmen, das bzw. der bis zum Beschnitt hinabreicht –, beansprucht die Überschrift den Rest ihrer Seite (ein Auftakt, in jeder Spalte) oder ihrer Spalte (eine Überschrift in der Spalte), und der Text danach beginnt auf der nächsten Seite oder in der nächsten Spalte. Ihr Block reicht dann bis zum Fuß der Spalte und wird nie auf die Höhe ihres Texts zurückgeschnitten, sodass das Band, an dem ihre Gestaltung ausgelegt wird, der beanspruchte Raum ist (minHeight eingeschlossen, bis zum Fuß). Eine Gestaltung, die höher als die Seite selbst ist – ein langer Vorspann auf einer kleinen Bildschirmseite –, wird weiterhin am Seitenfuß abgeschnitten (eine Gestaltung in der Spalte am Fuß ihrer Spalte): Die Sandbox führt das im Bedienfeld Prüfungen als Überschriftengestaltung abgeschnitten auf. Das Layout gibt dafür keine Warnung aus – ein Umschlag, der seine Seite beansprucht, ist der übliche Fall und verliert nichts –, aber jeder Host kann dieselbe Prüfung am fertigen Layout ausführen: collectHeadingDesignCuts(doc) liefert ein { kind: 'headingDesignCut', pageIndex, level, where, overflowPx, sourceStart, sourceEnd } für jede Überschrift, deren Gestaltungstext über den Fuß des Seitenbeschnitts (where: 'page', ein Auftakt) oder ihrer Spalte (where: 'column') hinausreicht, und formatWarning beschreibt jede. Siehe Ein Auftakt so hoch wie die Seite unter Seitenbreite und erweiterte Gestaltung.
Die Seitenspalte. In einem Anderthalb-Spalten-Layout, dessen Seitenspalte Gleitobjekte aufnimmt (sideColumnRole: 'floats'), hält ein Element der Gestaltung einer Überschrift in der Spalte, das in der Seitenspalte steht – eine an der Seite verankerte Kapitelziffer in der äußeren Randspalte eines Lehrbuchauftakts –, den Stapel der Seitenspalte von sich fern. Jede Abbildung, Tabelle oder jeder Kasten mit span: 'side', den die Seite nach der Überschrift setzt, hält einen Gleitobjektabstand zu jedem solchen Element frei: Er bleibt, wo der Stapel ihn hinsetzt, wenn er über dem Element passt, und geht sonst darunter – oder wartet auf die nächste Seite, wenn der Rest der Seitenspalte ihn dort nicht fassen kann. Eine Ziffer am Kopf des Kanals hält also den ganzen Stapel unter sich, während eine Abschnittsnummer, die neben einer weiter unten stehenden Überschrift im Rand hängt, den Kopf des Kanals den Abbildungen überlässt, die die Seite zitiert (die Randabbildung sitzt weiterhin oben auf ihrer Seite). Was die Seitenspalte schon enthält, wenn die Überschrift platziert wird, wird nicht bewegt: Eine früher auf der Seite gestapelte Abbildung, die bis zum Element der Überschrift hinabreicht, bleibt, wo sie ist, unter dem Element; eine Gestaltung, deren Element mitten auf der Seite in der Seitenspalte steht, braucht ihre Abbildungen also nach der Überschrift zitiert. Elemente mit reserve: false lassen die Seitenspalte frei, wie sie den Text freilassen. Ein Auftakt (span: 'page') braucht nichts dergleichen: Sein Band ist in jeder Spalte reserviert, die Seitenspalte eingeschlossen. Bis postext 1.4 wurde eine auf einem solchen Auftakt zitierte Seitenabbildung am Kopf der Seitenspalte über die Ziffer gesetzt.
Umschläge. Eine Umschlagüberschrift, die ihre Seite füllt – minHeight so hoch wie die Seite oder ein ganzseitiges Bild in ihrer Gestaltung –, schickt den Text danach daher von selbst auf die nächste Seite, in ein- wie mehrspaltigen Layouts. Ein :::pagebreak direkt danach ist optional und schadet nicht: Ein Seitenumbruch auf einer noch leeren Seite bewirkt nichts und fügt daher nie eine leere Seite hinzu. Er wird nur gebraucht, wenn die Gestaltung des Umschlags vor dem Seitenfuß aufhört und der Text dennoch auf einer neuen Seite beginnen soll.
# Annual report 2026 {style="cover"}
:::pagebreak
# Letter from the chair#Ausgeschriebene Zahlen
Zwei Suffixe der Nummerierungsvorlage schreiben einen Zähler in Worten, in der Dokumentsprache (dem locale der obersten Ebene, sonst der Sprache der Silbentrennung – siehe Dokumentsprache): words für die Grundzahl und ordinal für die Ordnungszahl. Die Schreibung des Suffixes legt die Schreibung der Wörter fest, wie A / a es für Buchstaben tut:
| Token | Englisch (21) | Spanisch (21) | Chinesisch (21) |
|---|---|---|---|
| twenty-one | veintiuno | 二十一 |
| Twenty-one | Veintiuno | 二十一 |
| TWENTY-ONE | VEINTIUNO | 二十一 |
| twenty-first | vigesimoprimero | 第二十一 |
| Twenty-first | Vigesimoprimero | 第二十一 |
| TWENTY-FIRST | VIGESIMOPRIMERO | 第二十一 |
Englisch, Spanisch, Chinesisch und Arabisch werden ausgeschrieben; jede andere Sprache erhält die englischen Wörter, wie bei den eingebauten Fortsetzungstexten von Tabellen. Chinesisch schreibt die informellen Zahlzeichen von simp-chinese-informal oder trad-chinese-informal, je nach Schrift von locale (一万 / 一萬), mit 第 vor einer Ordnungszahl; Han-Zeichen kennen keine Groß- und Kleinschreibung, daher drucken die drei Schreibungen eines Suffixes gleich. Englisch folgt dem amerikanischen Gebrauch (one hundred five, ohne and). Spanisch verwendet männliche Formen, wie ein capítulo oder ein libro nummeriert wird (capítulo primero, tercero, veintiuno), und schreibt die Ordnungszahlen von 13 bis 29 in einem Wort, wie es die RAE bevorzugt (decimotercero, vigesimoprimero). Grundzahlen werden bis 999 999 ausgeschrieben und spanische Ordnungszahlen bis 999; größere Zahlen erscheinen in Ziffern.
Arabische Zahlen richten sich im Genus nach dem gezählten Substantiv, daher nimmt das Suffix einen Modifikator an: -feminine (oder -f) für ein weibliches Substantiv, -masculine (-m, der Standard) für ein männliches; -classical schreibt die Hunderter مائة, wie es Bulaq und die meisten ägyptischen Drucke tun, statt des modernen مئة. {1:ordinal} schreibt die bestimmte Ordnungszahl im Nominativ, die eine Überschrift verwendet: الفصل {1:ordinal} ergibt الفصل الأول, الفصل الحادي عشر, الفصل الحادي والعشرون; الليلة {1:ordinal-feminine} ergibt الليلة الأولى, الليلة الحادية عشرة, الليلة الحادية والعشرون, الليلة المئتان und über hundert die klassische „Nach“-Formel: الليلة الخامسة والأربعون بعد الثلاثمئة, الليلة الحادية بعد الألف. {1:words} schreibt die Grundzahl (واحد وعشرون; weiblich إحدى عشرة, واحدة وعشرون). Ordnungszahlen werden bis 9 999 und Grundzahlen bis 99 999 ausgeschrieben; die Modifikatoren lassen sich kombinieren ({1:ordinal-f-classical}), und andere Sprachen ignorieren sie. Arabisch kennt keine Großbuchstaben, daher ändert die Schreibung des Suffixes nichts. Die Gestaltungsplatzhalter {numberWords} und {numberOrdinalWords} schreiben die männlichen Formen; für einen weiblichen Auftakt setzen Sie die Ordnungszahl in die Vorlage der Ebene und drucken sie mit {number}.
In einer Überschriftengestaltung schreiben {numberWords} / {numberWordsLower} und {numberOrdinalWords} / {numberOrdinalWordsLower} den Zähler der Überschrift auf dieselbe Weise aus, sodass der Auftakt Chapter One sagen kann, während das Inhaltsverzeichnis 1 aufführt. textTransform: 'uppercase' eines Textelements liefert die Versalien:
// Spanish novel: "CAPÍTULO PRIMERO" above the title, "1." in the contents.
{ level: 1, numberingTemplate: '{1}.', span: 'page',
advancedDesign: { enabled: true, slot: { elements: [
{ kind: 'text', id: 'n', content: 'Capítulo {numberOrdinalWordsLower}', textTransform: 'uppercase', /* … */ },
{ kind: 'text', id: 't', content: '{titleText}', /* … */ },
] } } }#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.
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); 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.
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
};
}| 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). |
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). |
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 themAuch 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 themDas 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 themWo 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 marginsNummerierte 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/workerruftinitMathEngine()selbst auf, wenn das Markdown ein$enthält. - Jetzt setzen, erneut, wenn sie bereit ist.
isMathReady()sagt, ob die Engine läuft.onMathReady(fn)ruftfnauf, 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; solangeinitMathEngine()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
initMathEngineabgerufen). Das einfacheimport { initMathEngine } from 'https://esm.sh/postext'funktioniert; kein?bundlenötig. Das Paketmathjax-fullwird 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, alsdist/math/THIRD_PARTY_LICENSES.txt. - Eine Engine pro Seite. Die Engine und ihr Cache gesetzter Formeln werden von allem geteilt, was
postextim selben JavaScript-Realm importiert (siehe Globaler Zustand innerhalb einer Seite).
Die Grammatik auf der Dokumentseite ($...$, $$...$$, ein wörtliches Dollarzeichen maskieren) finden Sie unter Dokumentformat.