Zum Hauptinhalt springen

Kapitel 5.1 · Teil II · Das Handwerk

Dokumentformat: Direktiven

Die :::-Direktiven: Container, Spalten, Papier, Seitenumbrüche, Nummerierung, Abstand, Verse, Inhaltsverzeichnis und Register, Zeilenumbrüche und die Auszeichnung von Comicseiten

Aktualisiert 2026-10-1633 minIm Kapitel 5 Dokumentformatenescadefritptzhjaar

Kurz gesagt

Eine Direktive ist ein Block, der mit drei Doppelpunkten beginnt, etwa :::callout oder :::columns. Diese Seite führt jede Direktive auf und sagt, was sie tut. Manche setzen den Text in einen Kasten oder in Spalten oder drucken ihn auf einer anderen Papiersorte. Andere beginnen eine neue Seite, ändern die Nummerierung, fügen Abstand ein, setzen ein Gedicht Zeile für Zeile oder drucken das Inhaltsverzeichnis und das Register. Der letzte Abschnitt behandelt die Zeichen für Comicseiten, Panels und die Worte der Figuren.

#Direktiven

Direktiven sind einzeilige Steuerbefehle, die als :::name oder :::name{attrs} auf einer eigenen Zeile stehen. Sie erzeugen keine sichtbare Ausgabe – sie steuern die Platzierung und die Nummerierung.

SyntaxWirkung
:::pagebreakDer nächste Block beginnt auf einer neuen Seite.
:::pagebreak{parity="odd"}Ebenso, und die neue Seite ist zudem ungerade (rechte Seite). Fügt bei Bedarf eine leere Füllseite ein.
:::pagebreak{parity="even"}Ebenso, aber mit einer geraden (linken) Seite als Ziel.
:::pagebreak{parity="always-odd"}Garantiert mindestens eine verpflichtende leere Trennseite, bevor eine ungerade Seite erreicht wird. Die leere Trennseite gehört zum vorangehenden Inhalt, jede weitere Füllseite für die Parität zum folgenden. Nützlich, wenn jedes Kapitel auf einer neuen Doppelseite beginnen muss.
:::pagebreak{parity="always-even"}Ebenso, aber mit einer geraden Seite als Ziel.
:::numbering{format="decimal" startAt=1}Wechselt an der nächsten Seitengrenze die Folge der Seitenzahlen. Beide Attribute sind optional – ohne format bleibt das Format erhalten, ohne startAt zählt der Zähler weiter.
:::columnbreakBeendet die aktuelle Spalte an dieser Stelle: Der nächste Block beginnt in der nächsten Spalte derselben Seite (oder auf einer neuen Seite, wenn die Direktive in der letzten Spalte steht). In einer leeren Spalte wirkungslos, sodass nie eine leere Spalte oder Seite entsteht. Die beendete Spalte behält ihren Leerraum am Fuß – der Spaltenausgleich dehnt sie nicht.
:::spaceLässt an dieser Stelle eine leere Zeile des Grundtexts frei – der ausdrückliche Weg, zwischen zwei Blöcken etwas Luft zu schaffen. :::space{lines=2} lässt zwei frei (auch Bruchteile wie 0.5 sind möglich). Der Raum kommt zum Abstand zwischen den Blöcken hinzu und entfällt am Kopf einer Spalte oder Seite. Siehe unten.
:::tocSetzt hier das Inhaltsverzeichnis: ein Eintrag je Überschrift der aufgeführten Ebenen (Titel, Nummer, Seitenzahl, wahlweise die Autoren des Kapitels) und eine Zeile je Teiltitel, gesetzt nach der Konfiguration toc. Die Einträge folgen dem Dokument – wird ein Kapitel umbenannt, verschoben oder neu nummeriert, folgt das Verzeichnis.
:::indexSetzt hier das Register: jeden im Buch mit :index ausgezeichneten Begriff, sortiert und nach Buchstaben gruppiert, mit den Seiten, auf denen er vorkommt, gesetzt nach der Konfiguration index. :::index{index="names"} setzt ein benanntes Register. Siehe Register.
:::page{…} … :::Eine Comicseite: ihre Zeilen ::panel und deren Skriptzeilen, gesetzt als Panels und geletterte Sprechblasen auf einer eigenen Seite. Siehe Comics.
:::strip{…} … :::Ein Comicstrip im Textfluss, so breit wie eine Spalte oder eine Seite. Siehe :::strip.
:::verse … :::Ein Gedicht, Zeile für Zeile so gesetzt, wie es geschrieben ist (jede Zeile ein Vers, Leerzeilen zwischen den Strophen, führende Leerzeichen als Einzug), oder im klassischen arabischen Layout, wenn seine Zeilen die Halbverse mit || trennen. Siehe unten.

Attributwerte können in doppelten ("…") oder einfachen Anführungszeichen ('…') stehen oder ohne (startAt=17). Ein Schlüssel ohne = gilt als gesetztes, aber leeres Flag.

Derzeit werden nur pagebreak, numbering, columnbreak, space, toc und index als einzeilige Direktiven erkannt (und references, verse, page und strip als Direktivenblöcke) – jede andere Zeile :::name, die kein Container ist (siehe unten), wird als Absatz gelesen und löst in der Sandbox die Warnung Unbekannte Direktive aus. Auch die Engine vermerkt sie, als Eintrag unknownDirective in den contentWarnings des Dokuments (siehe Konfiguration › Warnungen im Dokument).

#Attributwerte

Dieselbe Syntax key="value" lesen Attribute von Überschriften, Direktivenblöcke von Direktiven und Containern (:::name{…}), Querverweise im Text (:ref{…}), Chips (:chip[…]{…}), Farbfelder (:swatch{…}) und Registermarken (:index[…]{…}). Es gelten folgende Regeln:

  • Schlüssel beginnen mit einem ASCII-Buchstaben oder _ und setzen sich mit ASCII-Buchstaben, Ziffern, _ oder - fort. Leerzeichen um = sind erlaubt, das vollbreite =, das eine chinesische Eingabemethode tippt, wirkt wie =, ein wiederholter Schlüssel behält seinen letzten Wert, und ein Schlüssel ohne = ist ein Flag mit leerem Wert. Ein Schlüssel in einer anderen Schrift (作者=曹雪芹) wird nicht gelesen und löst die Warnung attributeKeyInvalid aus; die übrigen Schlüssel des Blocks gelten weiterhin. Werte dürfen in jeder Schrift stehen.
  • Werte in Anführungszeichen. Ein Wert in doppelten Anführungszeichen darf alles außer " enthalten, einfache Anführungszeichen eingeschlossen; ein Wert in einfachen alles außer '. Ein Wert mit doppelten Anführungszeichen steht also in einfachen: lead='He said "hi"'. Escape-Sequenzen gibt es nicht – ein Backslash ist ein gewöhnliches Zeichen –, daher nimmt ein Wert, der beide ASCII-Anführungszeichen braucht, typografische (“…”, ’). Ein Wert darf auch mit dem typografischen “ oder der Eckklammer 「 beginnen, die eine chinesische Eingabemethode tippt, und reicht dann, Leerzeichen eingeschlossen, bis zum passenden ” bzw. 」: title=“甲戌本 眉批”, title=「脂批」.
  • Werte ohne Anführungszeichen (startAt=17, year=1998) reichen bis zum nächsten Leerzeichen: title=Hello world ergibt title="Hello" und dazu ein Flag world.
  • Keine geschweiften Klammern. { und } stehen nie in einem Wert. Die erste } beendet den Block: Ein Direktivenblock, dessen Wert eine enthält, ist keine Direktive mehr, sondern ein Absatz, und im Fließtext läuft der Rest des Werts in den Text über. In einer Überschrift bleibt bei einer Klammer in einem Wert der ganze Block im Titel: # Title {note="a {b"} wird so gesetzt, wie es geschrieben ist. (Bis postext 1.8 begann ein { nach einem Leerzeichen den Block neu, und b wurde als Flag gelesen.)
  • Dollarzeichen sind gewöhnlicher Text. Attribute werden vor den Formeln im Text gelesen, daher ist lead="from $5 to $6" einfach Text.
  • Eine Zeile. Ein Attributblock erstreckt sich nie über mehrere Zeilen.
# The Long Road {lead='A "road novel", they said' price="$18"}
 
:::callout{type="note" title='The "fast" path'}
…
:::

::resource{id="…"} ist strenger: die ID in doppelten Anführungszeichen und kein weiteres Attribut (siehe Ressourcen).

#Container

Ein Container fasst eine Folge von Blöcken in einem Direktivenblock zusammen: eine öffnende Zeile :::name oder :::name{attrs}, danach beliebiger gewöhnlicher Inhalt – Absätze, Überschriften, Listen, Zitate, Formeln, sogar weitere Direktiven – und eine schließende Zeile, die nur ::: enthält. Container lassen sich verschachteln; jedes schließende ::: schließt den innersten offenen.

:::callout{type="note"}
Keep the lantern lit **every** night.

- Check the wick.
- Trim it at dusk.
:::

Im Textfluss werden fünf Containernamen erkannt. Was jeder davon darstellt, legt ein eigener Abschnitt der Konfiguration fest:

SyntaxWirkung
:::callout{…} … :::Inhalt im Kasten – ein Hinweis, Tipp oder eine Warnung, vom Grundtext abgesetzt in einem umrandeten oder getönten Kasten.
:::paragraphs{…} … :::Eine Folge von Absätzen, die statt im Format des Grundtexts in einem benannten Absatzformat gesetzt werden (ein Vorspann, ein Motto, eine Reihe kleingedruckter Anmerkungen). align, indent und endIndent legen Ausrichtung und Einzüge fest, mit oder ohne Format: :::paragraphs{align=end endIndent=1} setzt ein Datum ein Zeichen vor dem Zeilenende (地から1字上げ). dropcap schaltet eine Initiale für den ersten Absatz ein.
:::part{…} … :::Der Auftakt eines Teils oder Abschnitts: Die eingeschlossene Überschrift und der Text bilden die Auftaktseite eines Hauptteils.
:::paper{…} … :::Eine Folge von Seiten, die auf einem anderen Papier gedruckt werden, etwa ein Bildteil auf Glanzpapier in einem Buch auf mattem Papier. Nur der Betrachter Folio zeigt das an.
:::columns{…} … :::Blöcke in eigenen Spalten: in einem Kasten, in der Textspalte oder über eine Seite mit mehreren Spalten hinweg. Siehe :::columns unten.

Welche Attribute jeder Container annimmt und wie er gestaltet wird, beschreibt die Konfiguration. Attributwerte folgen derselben Grammatik wie bei Direktiven. Ein Direktivenblock :::callout nimmt type (die ID eines konfigurierten Kastenformats – unbekannte oder fehlende Typen fallen auf das erste Format zurück), title (ersetzt den Standardtitel des Formats) sowie span / placement (column, page oder side; here, top, bottom oder fixed), um Ausdehnung und Position des Formats für diesen Kasten zu überschreiben:

:::callout{type="objectives" title="What you will learn" span="page" placement="top"}
- Name the parts of the lantern.
- Trim the wick without touching the glass.
:::

Ein gleitender Kasten (placement auto, top oder bottom) nimmt außerdem columns an, die Zahl der benachbarten Spalten, über die er sich auf einer mehrspaltigen Seite erstreckt, wie in :::callout{placement="top" columns="2"} (seit postext 1.18).

Ein Kasten kann den Text nach ihm auch neben sich laufen lassen: wrap (left, right, start oder end), width (sein Anteil an der Spalte, 0 bis 1; ohne Angabe layout.wrap.defaultWidth) und wrapGap (eine Länge wie 6pt), wie in :::callout{wrap="right" width=0.4} (siehe Textumfluss; seit postext 1.24).

Ein Kasten wird als Box gesetzt – ein optionaler Titel, danach der Inhalt in der Grundtext- und Listentypografie des Formats. Standardmäßig bleibt er zusammen und wandert als Ganzes in die nächste Spalte oder auf die nächste Seite, wenn er nicht passt (ein Kasten, der höher ist als eine ganze Spalte, wird trotzdem geteilt, statt überzulaufen); ein Format mit keepTogether: false erlaubt die Teilung zwischen seinen Blöcken oder zwischen Zeilen, wobei auf jeder Seite des Schnitts mindestens splitMinLines Textzeilen bleiben – oder eine Abbildung, eine Tabelle, eine abgesetzte Formel bzw. ein verschachtelter Kasten (ein Schnitt innerhalb eines Absatzes oder Listenpunkts lässt zudem auf jeder Seite mindestens layout.boxChildSplitMinLines seiner Zeilen stehen: standardmäßig zwei, splitMinLines, wenn dieser Wert kleiner ist; vor 1.5 gespeicherte Bücher, deren Kapitel einen Kasten enthalten, werden mit 1 gelesen, dem Schnitt von 1.4). Jeder Teil nach dem ersten beginnt ohne das Symbol, wobei sein Text die Spalte des Symbols beibehält, und ohne den Titel, sofern das Format ihn nicht wiederholt (repeatTitle: „Key points (cont.)“); ein Format kann außerdem unter jeden Teil, der weitergeht, einen Vermerk „Fortsetzung“ setzen (continuesMarkerEnabled) – siehe Hinweise an einem geteilten Kasten. Kästen über die ganze Seitenbreite (span="page") teilen die Seite in Spaltenbänder; Kästen mit span="side" verlassen den Fluss und wandern in die Randspalte eines anderthalbspaltigen Layouts, die nur Gleitobjekte aufnimmt (layout.sideColumnRole: 'floats'), gestapelt neben dem Text, den sie unterbrechen, und werden als Spaltenkästen gesetzt, wo es keine solche Spalte gibt; Kästen mit placement="fixed" verlassen den Fluss und werden an Seitenkoordinaten fixiert (etwa ein Selbsttest-Abzeichen in der unteren linken Ecke der letzten Seite eines Kapitels), wobei die überdeckten Spalten diesen Bereich freigeben; gleitende Kästen (placement="top" / "bottom") verlassen den Fluss an ihrer Stelle und belegen das erste freie Band nach dieser Position – den Fuß der Seite oder Kopf bzw. Fuß der nächsten –, während der Text nach ihnen die verlassene Seite füllt. Ein Format mit floatBarrier: true (typischerweise der abschließende Kasten „Key points“ eines Kapitels) macht den Kasten zu einer Gleitobjekt-Sperre: Jede vor ihm referenzierte Abbildung oder Tabelle wird vor ihm platziert – in den freien Plätzen der Seite oder auf Seiten, die vor dem Kasten geöffnet werden –, sodass kein Gleitobjekt über das Ende seines Kapitels hinausrutscht. Ein unbekannter Direktivenblock :::name ist kein Container – die Zeile wird als Text behandelt, genau wie eine unbekannte Direktive.

Ein Direktivenblock :::part nimmt number (so, wie die Nummer gedruckt werden soll – "I", "IV", "3"; sie wird zudem ausgewertet, damit die Gestaltung sie umformatieren kann) und title; beide sind optional. Ein drittes Attribut, palette="band=#hex" (mehrere Paare id=#hex, durch Kommas getrennt), färbt jede Gestaltungsfarbe um, die mit diesen Paletten-IDs verknüpft ist – Kolumnentitel, Auftaktband, Gestaltungen der Teile –, und die Farben des Textflusses mit demselben Grundwert (Überschriften, Fettes, Querverweise, Aufzählungszeichen, Legenden, Tabellen, Kästen, Chips), und zwar für den Teil und die folgenden Kapitel bis zum nächsten Teil; siehe Konfiguration › Teile. Der Container öffnet stets eine eigene Seite: davor ein Seitenumbruch mit der konfigurierten Parität, eine einzige Textspalte mit den Rändern parts.margins, die Auftaktgestaltung über die ganze Seite und nach der schließenden Zeile des Direktivenblocks ein weiterer Seitenumbruch. Der Inhalt – meist die Liste der Kapitel, die der Teil zusammenfasst, oder gar nichts – wird mit parts.bodyStyle gesetzt:

:::part{number="I" title="Foundations"}
1. The lantern and its parts
2. Trimming the wick
:::

# The lantern and its parts

Mit den Standardeinstellungen für Überschriften ergibt das die klassische Folge: Teiltitelseite rechts, leere linke Seite, Kapitel auf der nächsten rechten Seite. Die Seite wird als role: 'part' gemeldet, damit Kopf- und Fußzeilen sie auslassen können, und {partTitle} / {partNumber} lösen sich auf jeder folgenden Seite in den aktuellen Teil auf. Siehe Teile in der Konfigurationsreferenz.

Vor einem Direktivenblock braucht es keine Leerzeile: Eine öffnende oder schließende Zeile eines Direktivenblocks direkt unter einem Absatz, einer Liste oder einem Zitat beendet diesen Block. Ein Container, der am Ende des Dokuments noch offen ist, wird dort automatisch geschlossen, und die Sandbox meldet die Warnung Nicht geschlossener Container mit Verweis auf die öffnende Zeile. Ein einzelnes ::: ohne offenen Container bleibt als sichtbarer Absatz im Text, statt stillschweigend zu verschwinden.

#:::columns

Eine Gruppe :::columns{count=2} … ::: setzt die Blöcke innerhalb ihres Direktivenblocks in count gleich breiten Spalten (2 bis 6); der Text danach nimmt wieder die volle Breite ein. In einem :::callout teilen sich die Spalten die Innenbreite des Kastens, im Abstand columnGap des Formats, in der Grundtext- und Listentypografie des Kastens, und der Kasten wächst bis zur höchsten Spalte. Im laufenden Text (seit postext 1.25) teilen sie sich die Textspalte, eine Zeile des Grundtexts voneinander entfernt, und die Blöcke behalten die Typografie des Texts; mit span="page" auf einer mehrspaltigen Seite teilt die Gruppe die Seite in ein Band, wie es ein Kasten über die ganze Seitenbreite tut: Die Spalten darüber schließen auf gleicher Höhe, die Gruppe wird über die ganze Inhaltsbreite gesetzt (im Abstand des Spaltenabstands), und der Text läuft darunter in allen Spalten weiter. Auf einer einspaltigen Seite setzt span="page" sie in die Spalte. Überschriften in einer Gruppe behalten ihr Format, ihre Nummer und ihren Eintrag im Inhaltsverzeichnis, eine darin zitierte Fußnote kommt an den Fuß der Textspalte, und Abbildungen, auf die sie verweist, gleiten wie gewohnt.

AttributWirkung
countZahl der Spalten, 2 bis 6. Standard: 2.
gapDer Abstand zwischen den Spalten, eine Länge (12pt, 1em, 4mm). Standard: columnGap des Kastenformats in einem Kasten, eine Zeile des Grundtexts in der Textspalte, layout.gutterWidth über die Seite.
ruleZieht in jedem Zwischenraum eine Linie in Farbe und Stärke von layout.columnRule: :::columns{count=3 rule}.
breaksDie Blöcke, mit denen jede Spalte nach der ersten beginnt, statt auszugleichen: breaks="4" beginnt die zweite Spalte mit dem vierten Block der Gruppe (eine Liste mit Kommas für weitere Spalten). Wie gezählt wird, steht weiter unten.
flowWie eine Gruppe weiterläuft, die nicht passt: snake (Standard ohne breaks) oder parallel (Standard mit breaks). Siehe Eine Gruppe teilen.
spanNur im laufenden Text: column (Standard) oder page.
marginTopDer Abstand über der Gruppe, eine Länge wie bei gap. Er verschmilzt mit dem Abstand, der über der Gruppe ansteht; am Kopf einer Spalte oder wenn die Gruppe ihren Kasten eröffnet, entfällt er. Seit postext 1.28.
marginBottomDer Abstand unter der Gruppe, eine Länge; 0 verlangt keinen. Im laufenden Text tritt er an die Stelle des Absatzabstands des Grundtexts, in einem Kasten ist er der Abstand vor dem nächsten Block. Seit postext 1.28.

Eine Gruppe, die als Ganzes gesetzt wird, wird dort geschnitten, wo ihre Spalten am besten auf gleicher Höhe enden – zwischen Blöcken oder zwischen den Zeilen eines Absatzes oder Listenpunkts, dessen Rest am Kopf der nächsten Spalte ohne Aufzählungszeichen weiterläuft –, es sei denn, breaks legt die Spaltenanfänge fest, ohne Schnitt innerhalb eines Absatzes: eine Textspalte neben einer Abbildungsspalte.

Der Raum um eine Gruppe. Im laufenden Text folgt auf eine Gruppe der Absatzabstand des Grundtexts (eine Zeile bei bodyText.paragraphSpacing, ohne ihn keiner), in einem Kasten kein eigener Abstand. marginTop und marginBottom am Direktivenblock legen ihn fest: :::columns{count=3 span="page" marginBottom="0.75em"}. Jeder ist ein Mindestwert, der mit dem Abstand verschmilzt, den der benachbarte Block für sich beansprucht, wie es die Ränder eines Kastens tun. Im laufenden Text kehrt der Fluss unter der Gruppe zum Grundlinienraster zurück, sodass der Abstand in ganzen Zeilen ausfällt, und eine auf Spalten oder Seiten verteilte Gruppe behält den oberen Abstand für ihren ersten und den unteren für ihren letzten Teil. Ein em ist die Größe des Texts, in dem die Gruppe steht; ein Wert, der keine Länge ist, oder ein negativer Wert wird ignoriert.

:::callout{type="summary"}
:::columns{count=2}
- Every element is one kind of atom.
- Electrons live in orbitals.
- A bond shares or transfers electrons.
:::
:::

Wie breaks zählt. breaks nummeriert die Blöcke der Gruppe der Reihe nach – Absätze, Listenpunkte (jeder ein Block), abgesetzte Formeln, Abbildungen und Tabellen –, und ein verschachteltes :::callout zählt als ein Block, gleich wie viele es enthält. Direktiven sind keine Blöcke: Ein :::space zwischen zwei Strophen verschiebt die Zählung nicht. Eine Zahl unter 2, eine jenseits des letzten Blocks der Gruppe oder eine, die nicht nach dem vorigen Umbruch liegt, wird ignoriert. In einer Gruppe trennt :::space zwei Blöcke wie überall in einem Kasten und entfällt am Kopf der Gruppe und am Kopf jeder ihrer Spalten (an einer Position aus breaks oder einem Ausgleichsschnitt) – um die Gruppe tiefer beginnen zu lassen, setzen Sie den Raum vor den Direktivenblock :::columns. Zwei Spalten mit denselben Abständen stehen daher Strophe für Strophe auf gleicher Höhe:

:::callout{type="verse"}
:::columns{count=2 breaks="4"}
The lamp is lit at dusk,
 
and trimmed before the dawn.
 
:::space
 
The keeper sleeps by day.
 
La lámpara se enciende al anochecer,
 
y se despabila antes del alba.
 
:::space
 
El farero duerme de día.
:::
:::

Hier beginnt der vierte Block, „La lámpara…“, die zweite Spalte; die beiden Zeilen :::space werden nicht gezählt und lassen in beiden Spalten denselben Zwischenraum.

Eine Gruppe teilen

Seit postext 1.25 wird eine Gruppe, die nicht in den verfügbaren Raum passt – den Rest ihrer Spalte im laufenden Text oder den Teil eines Kastens, der geteilt wird (keepTogether: false oder ein Kasten, der höher ist als eine Spalte) –, zwischen ihren Spalten geschnitten und läuft in der nächsten Spalte oder auf der nächsten Seite weiter, bei einer Gruppe in einem Kasten in einem eigenen Kasten:

  • flow="snake", der Standard ohne breaks: Die Blöcke der Gruppe laufen als eine Fahne durch, wie der Text eines Zeitungsartikels. Ein fortgesetzter Teil füllt seine Spalten nacheinander, so gleich hoch, wie es die Schnitte erlauben, und schneidet zwischen Blöcken oder zwischen den Zeilen eines Absatzes oder Listenpunkts (mindestens layout.boxChildSplitMinLines seiner Zeilen auf jeder Seite, standardmäßig zwei); der letzte Teil wird ausgeglichen wie eine ganze Gruppe.
  • flow="parallel", der Standard mit breaks: Jeder Lauf, den die Umbrüche beginnen, ist ein Strom, der seine eigene Spalte behält. Ein Teil füllt jeden Strom bis zum verfügbaren Raum, und jeder läuft in derselben Spalte des nächsten Teils weiter, sodass ein Gedicht und seine nebeneinander gesetzte Übersetzung Strophe für Strophe auf gleicher Höhe bleiben. Eine parallele Gruppe ohne breaks läuft wie eine Snake-Gruppe als Fahne weiter.

Ein verschachtelter Kasten in einer Gruppe bleibt ganz und wandert in den nächsten Teil, und eine Gruppe in einem verschachtelten Kasten wird nie geschnitten. Eine Gruppe, die passt, wird genau wie bisher gesetzt. layout.flowColumns: false behält die Regeln von postext 1.24 bei: Ein Direktivenblock außerhalb eines Kastens wird ignoriert, und eine Gruppe wird nie geschnitten; vor 1.25 gespeicherte Bücher mit einer Gruppe :::columns werden so gelesen. Die Sandbox meldet einen unbekannten Wert für flow (Unbekannter Spaltenfluss) und Spalten, die schmaler sind als sechs Geviert ihres Texts (Spalten zu schmal).

## Briefs
 
:::columns{count=3 span="page" rule}
**Harbour.** The new pier opens on Monday…
 
**Market.** Stall rents stay as they are…
 
**Weather.** Rain from the west by the evening…
:::

Ein Direktivenblock :::callout nimmt außerdem label="…" an: den Text, den ein Format mit einem Reiter label an der oberen Ecke des Kastens druckt (:::callout{type="box" label="BOX 1-1" title="The octet rule"}).

Ein :::callout in einem anderen ist ein eigener Kasten – etwa eine Arbeitsblattkarte mit Antwortkästen. Er nimmt sein eigenes Format an (Hintergrund, Rahmen, Radius, Innenabstand, Titel, Symbol) in der vollen Innenbreite des äußeren Kastens und reiht sich zwischen dessen übrige Blöcke ein; seine Angaben span und placement werden ignoriert, da ein verschachtelter Kasten stets innerhalb seines Elternkastens fließt. Jede schließende Zeile eines Direktivenblocks schließt den innersten noch offenen Kasten:

:::callout{type="card"}
The statement of the exercise.
 
:::callout{type="answer"}
A white answer box with its own border and padding.
:::
 
:::callout{type="answer"}
A second answer box.
:::
:::

Wird der äußere Kasten auf Spalten oder Seiten verteilt (keepTogether: false oder höher als eine Spalte), wandert ein verschachtelter Kasten als Ganzes in das nächste Fragment, sofern sein eigenes Format nicht ebenfalls eine Teilung erlaubt; jedes Fragment zeichnet die Rahmen neu, die es enthält, und ein fortgesetzter verschachtelter Kasten verliert sein Symbol und seinen Titel, sofern sein Format ihn nicht wiederholt (repeatTitle).

#:::paper

Ein Buch kann für eine Folge von Seiten das Papier wechseln: ein Bildteil auf gestrichenem Glanzpapier in einem Buch auf ungestrichenem Werkdruckpapier, eine Karteneinlage, einige Blätter getöntes Papier. Fassen Sie diesen Inhalt in einen Container :::paper:

:::paper{type=coatedGloss grammage=130}
## Plates
::resource{id="plate-1"}
::resource{id="plate-2"}
:::

Ein Papier umfasst ganze Bogen, daher beginnt der Inhalt des Direktivenblocks auf einer neuen Seite, und was auf das schließende ::: folgt, ebenfalls. Ein Lauf am Ende des Dokuments hinterlässt danach keine leere Seite. Abbildungen und Tabellen, auf die innerhalb des Laufs verwiesen wird, werden platziert, bevor er endet. Jede Seite, die mit Inhalt aus dem Container gesetzt ist, trägt das Papier im Layout (VDTPage.paper, die Attribute so, wie der Direktivenblock sie schreibt); Seiten außerhalb tragen nichts. Der Betrachter Folio liest es und zeichnet diese Blätter mit Farbe, Oberfläche, Dicke und Steifigkeit des Papiers. Canvas-, PDF- und HTML-Ausgabe ignorieren es: Die Seiten werden wie alle anderen gesetzt und gedruckt.

Die Attribute sind die der Einstellungen folio.paper, und alle sind optional. Was der Direktivenblock auslässt, folgt dem Papier des Dokuments und darüber hinaus den Standardwerten des Papiers:

AttributWert
typeDie Papiersorte: uncoated, bookWove, coatedMatte, coatedSilk, coatedGloss, bible, newsprint, cardStock, board. Sie legt die Standardwerte der folgenden Attribute fest.
grammageFlächengewicht in g/m², eine Zahl über 0. Schwereres Papier ist dicker, steifer und undurchsichtiger.
bulkDicke je Gewicht in cm³/g, eine Zahl über 0 (Dicke in µm = Grammatur × Volumen).
finishDie Oberfläche: auto, uncoated, matte, silk, gloss.
textureDas Relief der Oberfläche: auto, smooth, vellum, wove, laid, linen, felt.
textureStrengthWie stark die Struktur sichtbar ist, von 0 bis 2.
shadeDie Farbe des Papiers: #rgb, #rrggbb oder die ID eines Eintrags in colorPalette.
showThroughtrue oder false: ob die Rückseite schwach durchscheint. Ein bloßes showThrough bedeutet true.

Ein :::paper in einem anderen überschreibt nur die Attribute, die es setzt, und beginnt und endet ebenfalls mit einem Seitenumbruch. In einem :::callout werden die Direktivenblöcke ignoriert. Ein Wert, den die Engine nicht lesen kann, wird verworfen, und die Sandbox führt ihn als Warnung Ungültiges Papierattribut auf (paperAttributeInvalid in den contentWarnings des Dokuments).

#:::pagebreak

Die Direktive selbst erzwingt keine Parität – nur das Layout des nächsten Blocks. Verwenden Sie sie, um ein Vorwort zu beenden, eine Widmung auf eine eigene Seite zu setzen oder das Ende eines Abschnitts zu markieren. Sollen an derselben Stelle ein Seitenumbruch und ein Neubeginn der Nummerierung stehen, schreiben Sie :::pagebreak gefolgt von :::numbering – der Wechsel der Nummerierung gilt dann auf der neuen Seite, die :::pagebreak gerade erzeugt hat.

Ein Seitenumbruch auf einer noch leeren Seite bewirkt nichts und fügt daher nie eine leere Seite hinzu. Er ersetzt auch nicht das breakBefore einer unmittelbar folgenden Überschrift (Ebene 1 hat standardmäßig eines): Die Überschrift wendet ihre Parität trotzdem an, was nach der von der Direktive geöffneten Seite eine leere Seite hinzufügen kann. Soll eine Überschrift genau dort beginnen, schalten Sie ihren Umbruch aus (siehe Konfiguration → Überschriftenstile). Nach einer Titelüberschrift, die ihre Seite füllt, ist der Umbruch optional: Der Titel beansprucht den Rest seiner Seite bereits, in ein- wie mehrspaltigen Layouts, und ein :::pagebreak direkt danach schadet nicht. Nötig ist er nur nach einem Titel, dessen Gestaltung vor dem Seitenfuß endet, wenn der Text trotzdem auf der nächsten Seite beginnen soll (siehe Konfiguration → Reservierte Höhe).

The old chapter ends here.
 
:::pagebreak{parity="odd"}
 
# A new chapter

Das Flag center (:::pagebreak{center}, aus mit center=false) zentriert den Text der Seite, die der Umbruch öffnet, zwischen Kopf und Fuß des Satzspiegels, in vertikalem Text quer über die Seite: das ページの左右中央 eines japanischen Teiltitels oder einer Widmung. Gleitobjekte, Anmerkungen und Kolumnentitel bleiben, wo sie sind, und eine bereits volle Seite bleibt unberührt. Das Flag beendet die Seite nicht: Schließen Sie sie mit einem weiteren :::pagebreak.

:::pagebreak{center}
 
# 上 先生と私
 
:::pagebreak

Das Attribut parity

Das Attribut parity nimmt dieselben fünf Werte an wie headings.levels[*].breakBefore.parity:

  • 'any' – der Standard: keine Paritätsvorgabe; der Umbruch öffnet einfach eine neue Seite.
  • 'odd' / 'even' – die neue Seite beginnt auf der verlangten Seite der Doppelseite; eine einzelne leere Seite wird nur eingefügt, wenn die natürliche nächste Seite auf der falschen Seite liegt.
  • 'always-odd' / 'always-even' – garantiert mindestens eine verpflichtende leere Trennseite zwischen dem vorigen Inhalt und der neuen Seite und erzwingt dann die Parität. Die leere Trennseite gehört zum vorigen Kapitel; jede weitere Füllseite für die Parität gehört zu dem, was folgt.

Zugehörigkeit leerer Seiten

Die beiden Arten leerer Seiten, die :::pagebreak (und breakBefore) einfügen können, werden im Modell VDTPage unterschieden:

  • blankForParity: true – eingefügt, um eine Paritätsvorgabe zu erfüllen. In Kopfzeilen mit {chapterTitle} trägt diese Seite den Titel des kommenden Kapitels, denn die leere Seite existiert nur, um dieses Kapitel auf die richtige Seite zu schieben.
  • blankForForce: true – die verpflichtende vorangestellte Trennseite eines Modus 'always-*'. Sie gehört zum vorigen Kapitel – eine bewusste Atempause am Kapitelende, keine Füllseite für die Parität des nächsten Kapitels.

Dieselben beiden Regeln geben einer leeren Seite die Kolumnentitel und die Palette eines gestalteten Abschnitts – siehe Konfiguration › Überschriftenstile.

Ausnahme am Dokumentanfang

Ist :::pagebreak das allererste Element eines Dokuments (oder würde eine Überschrift mit breakBefore einen solchen Umbruch auslösen), wird die Parität nicht erzwungen, solange die erste Seite noch leer ist. Der nächste Block landet wie geschrieben auf Seite 1, unabhängig von der verlangten Parität – keine überflüssige leere Seite am Anfang.

#:::numbering

Mit :::numbering beginnen Sie den Seitenzähler mitten im Dokument neu. Das klassische Buchbeispiel:

---
title: "A Book With Front Matter"
---
 
# Preface
 
…
 
:::pagebreak{parity="odd"}
:::numbering{format="decimal" startAt=1}
 
# Chapter 1

Die Seiten des Vorworts tragen i, ii, iii, …; das erste Kapitel beginnt auf einer rechten Seite mit der Zahl 1.

Änderungen nur des Formats (ohne startAt) lassen den Zähler weiterlaufen – nützlich etwa, um von lower-alpha zu upper-alpha zu wechseln, ohne neu zu zählen.

format nimmt jede Schreibweise eines Nummerierungsformats an – roman-lower und i funktionieren ebenso wie lower-roman, arabic ebenso wie decimal, 一 und あ ebenso wie japanese-informal und hiragana (siehe Konfiguration › Schreibweisen der Nummernformate). Ein Wert, der keiner davon ist, lässt das Format unverändert, und die Sandbox markiert ihn.

lines beginnt die Zählung der Zeilennummern neu, nicht den Seitenzähler: Die nächste gezählte Zeile erhält die angegebene Nummer, gleich was lineNumbers.restart vorgibt. Ein Wert, der keine ganze Zahl ab 0 ist, wird ignoriert.

## Act II
 
:::numbering{lines=1}

#:::space

:::space lässt vertikalen Raum zwischen zwei Blöcken: um eine Schlusszeile vom Text darüber abzusetzen, ein Motto oder eine Unterschrift etwas tiefer zu rücken oder einen Leerraum (Szenenwechsel) zwischen zwei Textpassagen zu öffnen. Zusätzliche Leerzeilen im Markdown leisten das nicht – wie in jedem Markdown ist eine Folge von Leerzeilen nur ein einziger Absatztrenner, damit sich das Layout eines Dokuments nicht ändert, wenn ein Editor oder Formatierer Leerraum hinzufügt oder entfernt.

The last paragraph of the scene.
 
:::space
 
A new scene begins one line lower.
 
:::space{lines=2}
 
Two lines lower still.
  • lines – wie viel Raum, in Zeilen des Grundtexts (dem Grundlinienraster). Standard: 1. Ganze Zahlen halten jede Textzeile auf dem Raster, sodass die Spalten weiterhin über die Seite hinweg registerhaltig stehen; ein Bruchteil (lines=0.5) wird exakt eingehalten, auf Kosten dieser Ausrichtung bis zum nächsten Block, der am Raster einrastet. Ein Wert, der keine Zahl größer als 0 und höchstens 20 ist, fällt auf eine Zeile zurück, und die Sandbox markiert ihn (Ungültige Abstandsgröße).
  • Er addiert sich. Der Raum kommt zum Abstand hinzu, der die beiden Blöcke bereits trennt – dem oberen Abstand einer Überschrift, dem unteren einer Liste –, statt darin aufzugehen. Zwei Zeilen :::space hintereinander ergeben zwei Zeilen.
  • An einem Umbruch entfällt er, wie \vspace in LaTeX: Am Kopf einer Spalte oder Seite verschwindet er, sodass eine Seite nie mit einem Loch beginnt; und passt er am Fuß einer Spalte nicht mehr, beendet er einfach diese Spalte, ohne den Rest mitzunehmen.
  • Der Absatz danach beginnt stumpf. Ist bodyText.indentAfterHeading ausgeschaltet, verliert ein Absatz direkt nach :::space seinen Erstzeileneinzug, wie nach einer Überschrift – die übliche Konvention für Text, der nach einer Leerzeile wieder einsetzt.
  • In einem Kasten (oder einer Gruppe :::columns) trennt er die Kinder des Kastens auf dieselbe Weise, gemessen in den Grundtextzeilen des Kastens. Vor dem ersten Block des Kastens entfällt er, wie am Kopf einer Spalte – der Innenabstand setzt den Inhalt bereits vom Rahmen ab –, außer in zwei Fällen, in denen er entsprechend Raum öffnet: direkt unter dem Titel des Kastens und in einem Kasten, der sonst nichts enthält (ein Antwortkasten, ein Schreibfeld, bemessen in Zeilen). Am Kopf einer Gruppe :::columns, am Kopf jeder ihrer Spalten und am Anfang des Teils eines geteilten Kastens, der in der nächsten Spalte oder auf der nächsten Seite weitergeht, verschwindet er immer. In einem Container :::paragraphs wirkt er wie zwischen Absätzen des Grundtexts.
  • Das Zusammenhalten mit dem Folgenden zählt ihn mit: Eine Überschrift, auf die :::space folgt, wandert weiter, wenn der Raum und die ersten Zeilen ihres Texts nicht darunter passen.

Der Antwortkasten eines Arbeitsblatts ist ein Kasten, dessen einziger Inhalt Raum ist: die Frage im Titel, darunter Platz für vier Zeilen.

:::callout{type="answer" title="1. Name the three parts of the lantern."}
:::space{lines=4}
:::

Für einen festen Umbruch statt Raum verwenden Sie :::columnbreak oder :::pagebreak.

#:::verse

Ein Gedicht. :::verse setzt es in einem von zwei Layouts: Zeile für Zeile, wie die meisten Gedichte gedruckt werden, oder im klassischen arabischen Layout einer Qaṣīda, jeder Bayt in zwei nebeneinanderstehenden Halbversen. Ein Gedicht, dessen Zeilen ein Trennzeichen für Halbverse tragen (|| oder ein von Leerzeichen umgebenes \\), erhält das arabische Layout, jedes andere das Zeilenlayout; layout=lines oder layout=bayt am Direktivenblock legt eines fest.

Zeile für Zeile

Schreiben Sie das Gedicht so, wie es gedruckt wird: ein Vers je Markdown-Zeile, eine Leerzeile zwischen den Strophen und Leerzeichen vor einer Zeile, um sie einzuziehen.

:::verse
Whose woods these are I think I know.
His house is in the village though;
  He will not see me stopping here
  To watch his woods fill up with snow.
 
My little horse must think it queer
To stop without a farmhouse near
:::
  • Zeilen. Jede nicht leere Zeile ist ein Vers und wird für sich als Inline-Markdown gelesen: Kursive, Kapitälchen, Anmerkungen und Querverweise funktionieren. Eine Folge von Leerzeilen ist ein einziger Strophenwechsel.
  • Einzüge. Jedes führende Leerzeichen ist indentStep breit, standardmäßig 0,5 em, sodass zwei Leerzeichen eine Zeile um ein Geviert einziehen; ein Tabulator zählt als vier Leerzeichen, ein ideografisches Leerzeichen (U+3000) als zwei.
  • Überläufe. Eine Zeile, die etwas breiter ist als die Satzbreite, verringert zuerst ihre Wortabstände, bis auf bodyText.minWordSpacing ihrer natürlichen Breite (die Grenze, bis zu der Blocksatz staucht), und bleibt auf einer Zeile; tighten=false am Direktivenblock oder bodyText.verse.tighten: false bricht sie stattdessen um. Eine noch breitere Zeile wird an einem Wortzwischenraum umbrochen. Mit turnover=hang (Standard) hängt der Rest in der nächsten Zeile, um hang vom Anfang der eigenen Zeile eingerückt: den hangingIndent des Absatzformats des Gedichts, sonst 2 em (bodyText.verse.hang). Mit turnover=right wird er bündig mit dem Ende der Satzbreite gesetzt, hinter einer öffnenden eckigen Klammer (turnoverMark, standardmäßig [), wie in englischen und spanischen Ausgaben üblich. Verse werden nicht getrennt, es sei denn, ihr Absatzformat setzt selbst hyphenation: true. Eine Zeile und ihr Überlauf werden an einem Spalten- oder Seitenumbruch nie getrennt.
  • Strophen. Der Abstand zwischen zwei Strophen beträgt eine Zeile des Zeilenabstands des Gedichts; stanzaSpace=0.5 macht daraus eine halbe Zeile, und eine Länge (stanzaSpace=6pt) legt ihn genau fest. Auf dem Grundlinienraster ergibt er ganze Rasterzeilen. Spalten und Seiten brechen bevorzugt zwischen Strophen um; innerhalb einer Strophe gelten die Regeln für Waisen und Witwen, die dann die Zeilen der Strophe zählen. keepStanzas=N hält jede Strophe mit N oder weniger Zeilen zusammen: ein Haiku nimmt keepStanzas=3, ein Tanka keepStanzas=5.
  • Platzierung. Das Gedicht wird anhand seiner längsten Zeile in der Satzbreite zentriert, jede Zeile bündig mit dem Anfang des Gedichts (align=center, die übliche Einstellung für ein in Prosa zitiertes Gedicht); align=start setzt es bündig mit dem Anfang der Satzbreite, der Standard in vertikalem Text. Der Absatz, der das Gedicht einleitet, hält seine letzte Zeile mit den ersten Versen zusammen.
  • Gestaffelte Zeilen. Eine als + … geschriebene Zeile beginnt dort, wo die Zeile darüber endete, einen Wortzwischenraum weiter, wie ein Vers im Drama, den sich zwei Sprecher teilen. Schreiben Sie \+ für eine Zeile, die mit einem Pluszeichen beginnt.
  • Zäsuren. Mit keepSpaces am Direktivenblock behält eine Folge von zwei oder mehr Leerzeichen innerhalb einer Zeile ihre Breite; ohne das fallen Leerzeichen wie in jedem Absatz zusammen.
  • Schrift und Richtung. style nennt ein Absatzformat, das Schriftart, Größe, Zeilenabstand, indent sowie den Abstand über und unter dem Gedicht bestimmt. dir und lang legen Richtung und Sprache fest: Ein lateinisches Gedicht in einem arabischen Buch (dir=ltr) wird von seiner eigenen Anfangsseite aus eingezogen. In vertikalem Text ist jeder Vers eine Spalte, eingezogen vom Kopf aus.
AttributStandardBeschreibung
layoutautolines, bayt oder auto: das Bayt-Layout, wenn eine Zeile ein Trennzeichen trägt.
indentStep0.5emBreite eines führenden Leerzeichens.
turnoverhanghang oder right.
hanghangingIndent des Formats, sonst 2emEinzug eines hängenden Überlaufs vom Anfang seiner Zeile aus.
turnoverMark[Das Zeichen vor einem rechtsbündig gesetzten Überlauf.
stanzaSpace1Abstand zwischen Strophen: Eine bloße Zahl zählt Zeilen im Zeilenabstand des Gedichts, eine Länge ist genau diese Länge.
keepStanzas0Strophen mit höchstens so vielen Zeilen zusammenhalten; 0 schaltet es aus.
tightentrueDie Wortabstände einer etwas zu breiten Zeile bis auf bodyText.minWordSpacing verringern, bevor sie umbrochen wird.
keepSpacesausFolgen von zwei oder mehr Leerzeichen innerhalb einer Zeile beibehalten.
aligncenter (start in vertikalem Text)Das Gedicht anhand seiner längsten Zeile zentrieren oder bündig mit dem Anfang setzen.
style, dir, lang—Absatzformat, Richtung und Sprache des Gedichts.
numberedtruefalse nimmt das Gedicht von den Zeilennummern aus: Seine Zeilen werden nicht gezählt.
lineStart—Die Zeilennummer der ersten Zeile des Gedichts. Dort beginnt die Zählung neu, gleich was lineNumbers.restart vorgibt.
intervallineNumbers.intervalDas eigene Intervall des Gedichts: die Nummer jeder N-ten Zeile drucken.

bodyText.verse legt die Standardwerte für jedes Gedicht fest (siehe Konfiguration › Verse). Der reine Text bewahrt das Gedicht so, wie es geschrieben ist, mit einem Zeilenvorschub zwischen den Zeilen und einer Leerzeile zwischen den Strophen, sodass eine kopierte Passage und eine Suche es Zeile für Zeile lesen; das umfließende EPUB setzt eine Strophe als Element, dessen Zeilen ihre Überläufe hängen lassen, und das getaggte PDF taggt eine Strophe als Absatz.

Zeilennummern. Ist lineNumbers eingeschaltet, werden die Zeilen eines Gedichts gezählt (siehe Konfiguration › Zeilennummern). Jeder Vers zählt einmal: Ein Überlauf erhält keine Nummer, und der Abstand zwischen Strophen wird nicht gezählt. Standardmäßig druckt jede fünfte Zeile ihre Nummer im Außensteg, und die Zählung beginnt bei jedem Gedicht neu. Ein Gedicht im klassischen arabischen Layout zählt eine Zeile je Bayt. Der Direktivenblock passt ein einzelnes Gedicht an: lineStart=N gibt seiner ersten Zeile eine Nummer, interval=N ein eigenes Intervall, und numbered=false nimmt es aus.

:::verse{lineStart=37}
…
:::

Mit dem Standardintervall von 5 druckt dieses Gedicht 40, 45 und so weiter neben seine Zeilen.

Klassisches arabisches Layout

Ein Gedicht im klassischen arabischen Layout (eine Qaṣīda, eine Qiṭʿa): jeder Vers, der Bayt, auf einer Zeile in zwei Hälften, der Ṣadr auf der Anfangsseite (rechts im Arabischen) und der ʿAǧuz auf der Endseite, mit einem Zwischenraum dazwischen. Schreiben Sie einen Bayt je Zeile, die Halbverse getrennt durch || (ein \\ mit je einem Leerzeichen davor und danach, wie in Texten aus Wikisource, funktioniert auch). Eine Zeile ohne Trennzeichen ist ein einzelner Halbvers, auf das Gedicht zentriert.

فأنشد يقول:
 
:::verse
يَا حُرْقَةَ الدَّهْرِ كُفِّي || إِنْ لَمْ تَكُفِّي فَعِفِّي
فَلَا بِحَظِّيَ أُعْطِي || وَلَا بِصَنْعَةِ كَفِّي
:::
  • Eine Breite. Jeder Halbvers des Gedichts wird auf eine einheitliche Breite gesetzt, sodass jeder Ṣadr auf derselben Senkrechten beginnt und jeder ʿAǧuz auf einer anderen endet und die Reimbuchstaben untereinander stehen. Die Breite ist die des breitesten Halbverses, höchstens die halbe Satzbreite abzüglich des Zwischenraums; width legt sie fest (width=55mm). Jeder Halbvers wird zuerst mit Kaschidas auf diese Breite gebracht (Verse dehnen stärker als Prosa: doppelt bodyText.kashidaMaxLength), dann mit seinen Wortabständen; ein Halbvers aus einem einzigen Wort, der sie nicht füllen kann, lässt den Rest im Zwischenraum.
  • Der Zwischenraum beträgt standardmäßig 2 em; gap legt ihn fest (gap=3em, eine bloße Zahl gilt in Geviert). ornament druckt in seiner Mitte ein Zeichen (ornament="٭"), das nicht zum Text gehört.
  • Zu breit. Ein Halbvers, der breiter ist als die gemeinsame Breite, verringert zuerst seine Wortabstände bis auf bodyText.minWordSpacing. Passt er dann noch nicht, wird sein Bayt gestaffelt gesetzt: der Ṣadr bündig mit der Anfangsseite auf einer eigenen Zeile, der ʿAǧuz bündig mit der Endseite auf der nächsten.
  • Platzierung. Das Gedicht wird in der Spalte zentriert; align=start setzt es bündig mit der Anfangsseite. Ein Bayt wird nie auf Spalten oder Seiten verteilt, und das Gedicht folgt den Regeln für Waisen und Witwen von Absätzen (ein Gedicht mit drei Bayts oder weniger bleibt ganz). Der Absatz vor dem Gedicht, der es einleitet («فأنشد يقول:»), hält seine letzte Zeile mit den ersten Bayts zusammen.
  • Schrift. Das Gedicht übernimmt Schriftart, Größe und Zeilenabstand des Grundtexts; style nennt ein Absatzformat dafür (style="verse"), so erhält ein vokalisiertes Gedicht den zusätzlichen Zeilenabstand, den seine Harakat brauchen. dir=ltr oder dir=rtl legt seine Richtung fest wie bei jedem Block; bei einem Gedicht in lateinischer Schrift in einem linksläufigen Buch steht der Ṣadr links.

Der reine Text des Gedichts hält Halbverse und Bayts auseinander (ein Tabulator und ein Zeilenumbruch), sodass eine Suche oder eine kopierte Passage es so liest, wie es geschrieben ist; Kaschidas und Ornament bleiben weg.

#:::toc

:::toc setzt das Inhaltsverzeichnis an der Stelle, an der es steht. Es entfaltet sich zu gewöhnlichen Blöcken – einem je Überschrift der Ebenen, die toc.levels aufführt (standardmäßig Ebene 1), und einem je :::part –, sodass das Verzeichnis wie jeder andere Text durch Spalten und Seiten fließt und ein Klick auf einen Eintrag zur Zeile der Direktive führt. Ein Eintrag zeigt die Nummer der Überschrift (die Ausgabe ihres numberingTemplate, sonst die Ordnungszahl des Kapitels), ihren Titel, eine Punktlinie und die Bezeichnung der Seite, auf der sie beginnt, und, wenn toc.subtitle eingeschaltet ist, eine zweite Zeile mit einem Attribut der Überschrift wie dem {author="…"} des Kapitels. Ein Teil erhält eine eigene Zeile, gestaltet von toc.parts.design und eingefärbt mit der eigenen palette des Teils. Überschriften, deren Format numbered: false hat, werden ohne Nummer aufgeführt; {toc="false"} an einer Überschrift hält sie heraus (typischerweise die Überschrift des Verzeichnisses selbst).

# Contents {style="front-matter" toc="false"}
 
:::toc

Zwei Attribute ändern, was ein einzelnes Verzeichnis druckt, unabhängig von der Konfiguration. levels nennt die Überschriftenebenen, die es aufführt: einen Bereich (levels="1-2"), eine Ebene (levels="2") oder eine Liste (levels="1,3"); eine Ebene, der toc.levels kein Format gibt, übernimmt das Format der nächsthöheren Ebene. keep hält jeden Block des Verzeichnisses in einer Spalte und auf einer Seite zusammen, wie es toc.groups.keepTogether tut: keep="part" hält eine Teilzeile mit ihren Kapiteln zusammen, keep="1" (bis "6") eine Überschrift dieser Ebene mit den Einträgen darunter, und keep="none" schaltet das konfigurierte Zusammenhalten ab. Ein Block, der nicht passt, rückt ganz in die nächste Spalte oder auf die nächste Seite; ein Block, der höher ist als eine Spalte, wird geteilt, und die Spalte, in der er weiterläuft, beginnt erneut mit seiner Kopfzeile, gefolgt von einer Fortsetzungsmarke wie (Forts.).

# Contents {style="front-matter" toc="false"}
 
:::toc{keep="part" levels="1-2"}

Die Seitenzahlen sind die, die das Dokument tatsächlich druckt. Ein für sich gesetztes Dokument wird mit den Bezeichnungen des vorigen Durchgangs erneut gesetzt, bis sie sich nicht mehr verschieben – beginnt die Nummerierung nach der Titelei neu (das Rezept :::numbering oben), genügt ein zusätzlicher Durchgang. Ein für sich gesetztes Kapitel (die Vorschauen der Sandbox) erhält stattdessen die Gliederung des ganzen Buchs von seinem Host. Siehe Inhaltsverzeichnis in der Konfigurationsreferenz.

#:::index

:::index setzt das Register an der Stelle, an der es steht: die im ganzen Buch mit :index[…] oder :index{term="…"} ausgezeichneten Begriffe mit ihren Seiten, die dem Text folgen, wenn er sich verschiebt. Beschrieben wird es zusammen mit den Marken unter Register. Eine Spalte endet nie nach dem ersten Eintrag einer Gruppe und nie vor ihrem letzten: Zwei Einträge der Gruppe bleiben und zwei laufen weiter, oder die Gruppe wandert als Ganzes (index.groups.splitMinEntries).

# Index {style="index"}
 
:::index

#Zeilenumbrüche

Die Zeilen eines Absatzes werden mit einem Leerzeichen verbunden. Um innerhalb eines Absatzes eine Zeile zu beenden, ohne einen neuen zu beginnen (eine Anschrift, die Anrede eines Briefs, eine Widmung), beenden Sie die Quellzeile mit einem Backslash, dem harten Umbruch von CommonMark, oder schreiben Sie \\ gefolgt von einem Leerzeichen:

To the keeper of the lighthouse,\
at the end of the northern pier.
 
Ana Ruiz \\ Calle Mayor 4 \\ 28013 Madrid
  • Die Zeile vor einem Umbruch wird in ihrer natürlichen Breite gesetzt, wie die letzte Zeile eines Absatzes, nie auf die Satzbreite gedehnt. Der Text danach beginnt eine neue Zeile desselben Absatzes, ohne Erstzeileneinzug und ohne Abstand darüber; bei einem hängenden Einzug hängt er wie jede Zeile nach der ersten.
  • Absätze, Zitate (> First line\ über > second line), Fußnoten und Listenpunkte nehmen ihn an. Ein Listenpunkt ist eine einzige Quellzeile, daher bricht er bei \\ um.
  • Ein Backslash am Ende des Absatzes wird gedruckt, wie in CommonMark, und zwei Umbrüche hintereinander ergeben einen: Für eine leere Zeile beginnen Sie einen neuen Absatz oder fügen ein :::space ein.
  • Ein \\, das direkt am nächsten Zeichen hängt, ist kein Umbruch: \\* druckt einen Backslash und ein maskiertes Sternchen, C:\\Temp beide Backslashes. In Inline-Code und in einer Formel gehören die Backslashes zum Code bzw. zur Formel.
  • Zwei Leerzeichen am Zeilenende, der andere harte Umbruch von CommonMark, sind keiner: Sie sind in einem Editor unsichtbar, und viele Editoren lassen sie zurück, sodass sie Zeilen umbrechen würden, die niemand umbrechen wollte.
  • Aus dem HTML-Betrachter kopierter Text hat am Umbruch einen Zeilenvorschub, das umfließende EPUB ein <br/>, der Text des PDF ein Zeilenende und ein Word-Export einen manuellen Zeilenumbruch (Umschalt+Eingabe), den der Word-Import wieder als Umbruch liest.
  • Ein Gedicht behält seine Zeilen, Einzüge und Strophen in einem Block :::verse, ohne Backslash an jeder Zeile.

Bis postext 1.22 wurde der Backslash gedruckt, und die Zeilen wurden mit einem Leerzeichen verbunden. Ein damals gespeichertes Buch, dessen Text eine Zeile mit einem Backslash beendet oder \\ vor ein Leerzeichen setzt, behält diese Lesart (bodyText.hardLineBreaks: false, siehe Konfiguration › Pakete, die postext 1.4 oder früher geschrieben hat).

#Zeilenumbrüche in Titeln

Schreiben Sie \\ in eine Überschrift (oder in das Attribut title eines Teils), um einen Zeilenumbruch dort zu erzwingen, wo der Titel als Titel angezeigt wird: Die Überschrift in der Spalte fließt weiter und zeigt an dieser Stelle ein Leerzeichen, während {titleText} einer Auftaktgestaltung die Zeile dort umbricht (in jedem Modus overflow des Textelements). Kolumnentitel, {chapterTitle}, {partTitle} und die PDF-Gliederung geben den Titel stets einzeilig wieder. Im Chinesischen oder Japanischen gilt der Umbruch als ideografisches Leerzeichen zwischen zwei Zeichen der Schrift (ein Titel aus einem Verspaar); wo eines davon auf eine Ziffer oder lateinischen Text trifft (关于举办 \\ 2026年…), setzt die Seite den Abstand zwischen Han- und lateinischer Schrift, und die PDF-Lesezeichen und der Dokumenttitel fügen die beiden Hälften ohne Zwischenraum zusammen, wie chinesischer Fließtext geschrieben wird.

# Concepts of health and illness. \\ Community health {author="I. Zango Martín"}

#Comics

Comicseiten, Comicstreifen und Doppelseiten werden in zwei Blöcken geschrieben, deren Inhalt die Engine selbst Zeile für Zeile liest: :::page und :::strip. Darin beginnen ::panel-Zeilen die Panels, und Skriptzeilen lettern sie. Die Anleitung mit den Layoutregeln, dem Lettering und den Ausgaben ist Comics; die Einstellungen stehen unter Konfiguration › Comics.

#:::page

:::page{split="30 [30 | 20 | *] / *" gutter=4mm}
::panel{art=lh-arrive}
caption: Every summer, Maya spent a week at the lighthouse.
maya: Grandpa! I'm here!
::panel{art=lh-radio focus="40% 50%"}
tomas: Just in time.
::panel{art=lh-maya}
maya{thought}: That valve looks loose…
::panel{art=lh-beam bleed}
sfx{rotate=-8}: KRAK
:::

Ein :::page-Block ist eine Comicseite: Er eröffnet eine frische Seite, nimmt sie ganz ein, und der Text nach seinem schließenden ::: beginnt auf der nächsten Seite. Seine Attribute sind split (wie die Seite in Zellen geteilt wird: Größen in Prozent, getrennt durch / für Streifen und | für nebeneinanderliegende Panels, eine Liste in eckigen Klammern, um eine Zelle erneut zu teilen, * für den Rest, a~b für eine schräge Linie), gutter (eine Länge oder zwei: zwischen Streifen und zwischen Panels; eine bloße Zahl gilt in Millimetern), style (ein benannter Panelstil), bleed, direction (ltr oder rtl, auch als dir geschrieben) und spread (siehe Doppelseiten). Ohne split werden die Panels in gleich hohen Streifen übereinandergestapelt. Markdown-Blöcke, Container und Direktiven werden innerhalb des Blocks nicht gelesen; <!-- comments --> schon.

#Panels

Eine Zeile ::panel{…} beginnt ein Panel, das die nächste Zelle in Lesereihenfolge füllt und bis zur nächsten ::panel-Zeile oder zum schließenden Block reicht:

AttributWirkung
art=<id>Das Bild: eine Bitmap- oder SVG-Ressource. Ohne es bleibt das Panel leer.
fit=cover, fit=containDas Bild beschneiden, um die Zelle zu füllen (nie in seinen Sicherheitsbereich hinein), oder es ganz zeigen.
focus="x% y%"Der Punkt, der zentriert bleiben soll, wo der Sicherheitsbereich Spielraum lässt.
style=…, border=none, border=0.5mm, bg=#hexEin benannter Panelstil, der Rahmen, der Hintergrund (eine Farbe, eine Paletten-ID oder none).
bleed, bleed="top start", bleed=falseDie Seiten, die den Rahmen berühren, bis zum Endformat und in den Anschnitt laufen lassen.
pad="…"Das Panel kleiner als seine Zelle machen: eine bis vier Längen oder Prozentangaben (oben, Ende, unten, Anfang).
inset="x y w h"Das Panel über das vorige legen, in diesem Rechteck in Prozent davon, statt ihm eine Zelle zu geben.
pop=<id>Ein transparenter Ausschnitt, der mit dem Beschnitt der Zeichnung über den Rahmen gezeichnet wird (ein durchbrochener Rahmen).
mirror, mirror=falseDas Bild spiegeln oder es auf einer gespiegelten Seite so lassen, wie es gezeichnet ist.
alt="…", id=…Die Textalternative (sonst der altText der Ressource) und eine Anker-ID.

#Skriptzeilen

Jede Zeile eines Panels ist eine Sprechblase, ein Textkasten oder ein Geräuscheffekt, geschrieben als key{attributes}: text:

maya: Grandpa! I'm here!
tomas{whisper}: Shh. Listen.
caption{at=bottom-end}: Three streets away.
sfx{at="62% 40%" rotate=-8 size=1.4}: KRAK
ben{tail=start}: (from off the panel) Over here!
sfx{vertical size=2.6 font="Dela Gothic One"}: ドン
maya: This line goes on
  on the next line,\
  and breaks here.
  • Der Schlüssel ist eine Sprecher-ID (Buchstaben, Ziffern, _, ., -), in jeder Übersetzung dieselbe; caption, sfx und note sind reserviert. Der Doppelpunkt darf der vollbreite : sein.
  • Ein bloßes Wort in den geschweiften Klammern ist ein Sprechblasenstil (thought, whisper, shout, radio, inner oder einer aus comics.balloonStyles); style= sagt dasselbe.
  • at heftet die Sprechblase an: einen Punkt in Prozent des Panelbildes (at="62% 40%") oder eine Ecke oder Kante (top-start, top-end, bottom-start, bottom-end, top, bottom). to richtet den Dorn auf einen Punkt des Bildes; tail=none entfernt ihn, und tail=top|bottom|start|end|left|right lässt ihn aus dem Panel hinauszeigen. join und join=false verbinden die Sprechblase mit der vorigen desselben Sprechers oder halten sie getrennt; break lässt sie den Rahmen überschreiten, und das Überschreiten wird nicht als Überlauf gemeldet. rotate (Grad), size (ein Faktor, für Geräuscheffekte), color und font ändern ihr Lettering.
  • vertical und horizontal (oder mode=vertical, mode=horizontal) setzen die Schreibrichtung der Zeile über die des Buches: ein unübersetztes ドン in einer Spalte in einer waagerechten Ausgabe, ein quer geschriebenes Schild in einer Zeile in einer senkrechten. Eine Spalte in einem Buch einer anderen Sprache folgt den Regeln ihres eigenen Textes (mit Kana denen des Japanischen). In einem senkrechten Buch wird eine Zeile ohne chinesische oder japanische Zeichen trotzdem waagerecht gesetzt.
  • Eine Zeile, die um zwei Leerzeichen oder einen Tab eingerückt ist, setzt die Sprechblase darüber fort; ein Backslash am Zeilenende bricht den Text dort um. Leerzeilen werden ignoriert.
  • Der Text ist Markdown im Text: Hervorhebung (als fett-kursives Lettering), :tcy, :ruby (die Lesung über der Basis, außer über einer Basis, die von rechts nach links läuft), :ltr und :rtl (ein Abschnitt, der seine eigene Richtung behält). Fußnoten und :ref-Markierungen werden nicht gelesen.

#:::strip

:::strip{split="* | * | *" aspect=3 span=page placement=top}
::panel{art=pip-1}
pip: Morning, Otto!
::panel{art=pip-2}
::panel{art=pip-3}
otto: Is it?
:::

Ein :::strip hat den Inhalt einer Seite, steht im Text aber als ein unteilbarer Kasten, in Panels geteilt: span (column, der Standard, oder page), placement (here, der Standard, an der Stelle, an der er geschrieben ist; oder top, bottom, auto, gleitend wie eine Abbildung) und seine Größe, entweder height (eine Länge, eine bloße Zahl in Millimetern) oder aspect (Breite durch Höhe: 3, 4/1, 4:1; standardmäßig die Proportionen, die seine Panels quadratisch machen). Ein seitenbreiter Streifen, der auf einer mehrspaltigen Seite mit here gesetzt ist, schneidet die Spalten dort, wo er steht, wie es ein seitenbreiter Kasten tut. width macht ihn schmaler als die Satzbreite, über die er läuft (60% davon oder eine Länge), und align setzt ihn an den Anfang (start), in die Mitte (center, der Standard) oder ans Ende (end) dieser Satzbreite, entlang der Textrichtung. caption="…" setzt eine Legende darunter im Legendenstil; mit type=figure (einem Ressourcentyp) erhält die Legende Bezeichnung und Nummer des Typs, und der Streifen zählt in dessen Folge, und mit id=… kann ein :ref ihn nennen. Ohne split stehen die Panels nebeneinander. Streifen werden nur auf der obersten Ebene eines Kapitels gelesen.

#Doppelseiten

:::page{spread} legt eine Seite über zwei gegenüberliegende Seiten: Die Teilung umfasst beide Satzspiegel, am Bund verbunden, ohne ihre Bundstege, und ein Panel darf den Bund überqueren. Die Doppelseite beginnt auf einer geraden Seite, nötigenfalls nach einer Vakatseite. Siehe Comics › Doppelseiten.

#Zusammengesetzte Seiten

Eine zusammengesetzte Seite wird nach einer Seitenvorlage der Konfiguration (pageTemplates) umbrochen, und ihr Inhalt wird über die Namen auf die Rahmen der Vorlage verteilt. Die Anleitung mit den Warnungen ist Zusammengesetzte Seiten.

  • ::::page{template="…"} … :::: ist die Seite: vier oder mehr Doppelpunkte, geschlossen von einer Zeile, die nur ebenso viele enthält. Begrenzungen mit drei Doppelpunkten darin (:::frame, :::callout, :::figure …) wirken wie überall, und ein bloßes ::: schließt nie die Seite. Ein :::page mit drei Doppelpunkten bleibt eine Comicseite.
  • :::frame{slot="…" label="…"} … ::: enthält den Inhalt des Rahmens mit diesem Namen: beliebiges Markdown.
  • slot="…" an einer Überschrift (## Retos {slot="retos-titulo"}), an ::resource{id="…" slot="…"}, an einem Codeblock oder an einem :::-Container schickt nur diesen einen Block. Inhalt ohne Slot kommt in den Flussrahmen der Vorlage.
  • :::figure{resource="…" slot="…"} … ::: setzt eine Ressource mit ihren Zeilen ::label[TEXT]{at="…" style="…"}, wobei at ein Anker des Bilds oder ein Punkt "x% y%" ist. Eine Abbildung funktioniert auch im Fließtext.