Zum Hauptinhalt springen

Kapitel 10 · Teil II · Das Handwerk

Zusammengesetzte Seiten

Das Markdown zusammengesetzter Seiten: die Seitenbegrenzung aus vier Doppelpunkten, die eine Seitenvorlage nennt, Rahmen und das Attribut slot, die Inhalt in die Rahmen der Vorlage schicken, Abbildungen mit Beschriftungen an den Ankern eines Bilds und die Warnungen, die den Inhalt mit der Vorlage abgleichen

Aktualisiert 2026-10-169 minenescadefritptzhjaar

Kurz gesagt

Manche Seiten bestehen nicht aus einer Spalte Fließtext, sondern aus mehreren Feldern, so wie eine Schulbuchseite mit einem Titelband, einem Text und drei farbigen Kästen mit Fotos. Postext nennt sie zusammengesetzte Seiten. Die Form der Seite ist eine Vorlage in der Konfiguration, und das Markdown sagt nur, welches Stück Text in welches Feld gehört. Diese Seite zeigt, wie Sie dieses Markdown schreiben: die Seitenbegrenzung, die Rahmen, die Slot-Namen und Bilder mit Beschriftungen wie den Namen auf einer Landkarte. Sie führt außerdem die Warnungen auf, die Postext ausgibt, wenn Text und Vorlage nicht zusammenpassen.

Die Vorlage bestimmt die Form der Seite; das Markdown liefert den Inhalt und sagt, in welchen Rahmen jedes Stück kommt.

Eine zusammengesetzte Seite wird nach einer Vorlage umbrochen: benannte Rahmen (ein Titelband, ein Text, ein Kasten mit seinem Foto), Gruppen, die sich gemeinsam verschieben, und ein Dekor, alles in der Konfiguration unter pageTemplates festgelegt. Das Markdown der Seite ist ein abgegrenzter Block, der seine Vorlage nennt und den Inhalt über die Namen auf die Rahmen verteilt. Im Markdown stehen nie Positionen oder Größen, und in der Konfiguration steht nie Inhaltstext; eine Übersetzung ist deshalb dieselbe Vorlage mit anderen Wörtern.

Diese Seite behandelt das Markdown. In dieser Version liest der Parser zusammengesetzte Seiten, und die Slot-Prüfungen laufen, sodass das Bedienfeld Prüfungen und postext check eine Seite melden, die nicht zu ihrer Vorlage passt. Den Umbruch der Vorlage auf der Seite bringt die nächste Version; bis dahin wird der Inhalt einer zusammengesetzten Seite im Fließtext gesetzt, in der Reihenfolge des Markdowns und auf eigenen Seiten, sodass nichts von dem verloren geht, was darin steht. Ein Dokument ohne zusammengesetzte Seiten wird genau wie zuvor umbrochen.

#Die Seitenbegrenzung

::::page{template="tema-cajas" fondo="banda-retos"}
# La actividad económica y el dinero
 
Las personas utilizan :chip[recursos]{style="clave"} que se obtienen de la naturaleza…
::::

Eine zusammengesetzte Seite beginnt mit einer Zeile aus vier Doppelpunkten, gefolgt von page und den Attributen, und endet mit einer Zeile, die nur ebenso viele Doppelpunkte enthält. Darin öffnen und schließen sich Container mit drei Doppelpunkten (:::frame, :::callout, :::figure, :::columns, :::paper) wie immer; ein bloßes ::: schließt also den innersten von ihnen und nie die Seite. Eine Seite mit fünf Doppelpunkten (:::::page) endet mit fünf; eine Zeile aus vier Doppelpunkten ist darin dann gewöhnlicher Text.

AttributWirkung
template="…"Pflicht. Die ID eines Eintrags von pageTemplates.
spreadDie Seite ist eine Doppelseite aus zwei gegenüberliegenden Seiten; auch die Vorlage muss eine Doppelseitenvorlage sein.
id="…", #idEin Anker: Ein :ref darauf druckt die Seite, auf der die zusammengesetzte Seite landet.
jedes andereEin Wert, den die Vorlage als {attr.name} liest, etwa ein Hintergrundbild, das Seite für Seite gewählt wird: fondo="banda-retos" mit resourceId: "{attr.fondo}" im Dekor.

Eine zusammengesetzte Seite beginnt immer eine neue Seite (oder Doppelseite), und der Text nach ihrer schließenden Zeile beginnt auf der nächsten.

Das :::page{split=…} mit drei Doppelpunkten ist eine Comicseite (siehe Comics) und behält diese Bedeutung. Ein :::page mit drei Doppelpunkten, das template= trägt, wird weiterhin als Comicseite gelesen, und die Warnung pageFenceLength weist darauf hin, dass eine zusammengesetzte Seite vier Doppelpunkte braucht.

Fehlt eine Begrenzung, fängt sich der Parser, ohne Text zu verlieren:

  • eine offen gelassene Seite reicht bis zum Ende des Kapitels und wird an ihrer öffnenden Zeile als nicht geschlossener Container gemeldet;
  • eine Zeile ::::page, die bei offener Seite auftaucht, schließt dort zuerst die offene Seite (und wird ebenso gemeldet);
  • die schließende Zeile schließt jeden Rahmen und jeden Kasten, der in der Seite noch offen ist, und meldet jeden davon;
  • eine schließende Zeile mit einer anderen Zahl von Doppelpunkten gehört nicht zur Seite und bleibt im Text stehen, wo Sie sie sehen.

#Rahmen und Slots

:::frame{slot="dinero" label="El dinero"}
Es el instrumento utilizado como medio de pago…
 
Hasta hace pocos años, lo más normal era pagar con dinero en **efectivo**…
:::

Ein Slot ist der Name, den ein Stück Inhalt anfordert; er entspricht dem Namen eines Rahmens der Vorlage. :::frame{slot="…"} schickt alles, was darin steht, in diesen Rahmen. Der Inhalt ist vollständiges Markdown: Absätze, Listen, Überschriften, Chips, ::resource-Einbettungen, :ref-Verweise, Fußnoten, :::columns und verschachtelte Kästen. label und title geben dem Etikett oder dem Titel des Rahmens den Wortlaut, wie bei einem :::callout; das Aussehen des Rahmens bestimmt das Kastenformat, das die Vorlage ihm zuweist.

Ein einzelner Block kann seinen Slot selbst nennen:

BlockSchreibweise
Eine Überschrift## Retos {slot="retos-titulo"}
Eine Ressourceneinbettung::resource{id="dinero-pago" slot="dinero-fotos"} (die beiden Attribute in beliebiger Reihenfolge)
Ein Code-Listing```js {slot="codigo"}
Ein Kasten oder ein anderer Container:::callout{type="nota" slot="aside"}: Der ganze Kasten kommt in den Slot.
Eine Abbildung:::figure{resource="mapa" slot="mapa"} (siehe unten)

So wird der Inhalt verteilt:

  • Mehrere Stücke mit demselben Slot werden in der Reihenfolge des Markdowns aneinandergefügt.
  • Inhalt ohne Slot kommt in den Flussrahmen der Vorlage (den mit flow markierten Rahmen).
  • Eine Überschrift ohne Slot kommt zuerst in den Rahmen, der ihre Ebene übernimmt (takes: "h1"), sofern die Vorlage einen solchen hat; der Titel eines Schulbuchthemas ist also einfach # Titel oben auf der Seite.
  • Inhalt, der einen Slot nennt, den die Vorlage nicht kennt, kommt in den Flussrahmen und wird gemeldet (slotUnknown).

Außerhalb einer zusammengesetzten Seite wird ein slot gelesen und ändert nichts.

#Abbildungen mit Beschriftungen

:::figure{resource="mapa-europa" slot="mapa"}
::label[OCÉANO ATLÁNTICO]{at="atlantico" style="mar"}
::label[**Madrid**]{at="madrid"}
::label[Mar Negro]{at="62% 48%"}
:::

:::figure{resource="…"} setzt eine Ressource mit Legende und Nummer, wie ::resource es tut, und führt die Beschriftungen auf, die auf das Bild kommen: je Beschriftung eine Zeile ::label[TEXT]{…}, Leerzeilen dazwischen sind erlaubt.

  • at nennt einen Anker der Ressource (einen Punkt, der einmal auf dem Bild festgelegt wird und für alle Sprachen gilt) oder gibt für eine Beschriftung ohne Anker einen Punkt in Prozent des Bilds an, at="x% y%".
  • style nennt ein Beschriftungsformat und hat Vorrang vor dem des Ankers.
  • Der Text in den eckigen Klammern ist Inline-Markdown: fett, kursiv, Chips.

Eine Abbildung funktioniert im Fließtext ebenso wie in einem Rahmen. Die Beschriftungen werden gelesen und mit ihrer Quelle aufbewahrt; auf das Bild gezeichnet werden sie erst mit dem Umbruch der Vorlagen, und bis dahin wird eine Abbildung so gesetzt wie ihre Ressource. Eine Zeile in einer Abbildung, die weder eine Beschriftung noch leer ist, beendet eine Abbildung, deren schließendes ::: fehlt, und wird als nicht geschlossener Container gemeldet.

#Beispiel

Die Seite eines Schulbuchs mit einem Titelband, einem Text mit seiner Liste und drei farbigen Kästen, jeder mit seinem Foto daneben:

::::page{template="tema-cajas" fondo="banda-retos"}
# La actividad económica y el dinero
 
## La actividad económica
 
Las personas utilizan :chip[recursos]{style="clave"} que se obtienen de la naturaleza…
 
- Las :chip[empresas.]{style="clave"} Ofrecen bienes y servicios a cambio de un beneficio.
- Las :chip[personas y familias.]{style="clave"} Adquieren lo que ofrecen las empresas…
 
:::frame{slot="dinero" label="El dinero"}
Es el instrumento utilizado como medio de pago, ya que su valor es conocido…
:::
 
::resource{id="dinero-pago" slot="dinero-fotos"}
 
:::frame{slot="gasto" label="El gasto"}
- **Fijo:** es el que se produce todos los meses…
- **Variable:** puede cambiar según las necesidades…
:::
 
::resource{id="gasto-compras" slot="gasto-fotos"}
 
:::frame{slot="ahorro" label="Préstamos y ahorro"}
Si necesitas o quieres comprar algo muy caro…
:::
 
::resource{id="ahorro-balanza" slot="ahorro-fotos"}
::::

Der Titel kommt in den Rahmen, der h1 übernimmt; die Zwischenüberschrift, der Absatz und die Liste kommen in den Flussrahmen; jeder Kasten und jedes Foto kommt in den Rahmen seines Slots. Die katalanische Ausgabe besteht aus denselben Zeilen mit anderen Wörtern: Vorlage, Slots und Fotos bleiben unverändert.

#Warnungen

Die Prüfungen lesen Markdown und Konfiguration vor jedem Umbruch. Deshalb erscheinen sie schon beim Tippen im Bedienfeld Prüfungen, außerdem in postext check und in den contentWarnings des Dokuments, jede mit dem Quellbereich dessen, was sie betrifft (siehe Konfiguration › Warnungen im Dokument).

ArtUrsacheAbhilfe
templateUnknownDie Seitenbegrenzung nennt eine Vorlage, die es unter den Einträgen von pageTemplates nicht gibt, oder gar keine. Ihre Slots werden nicht geprüft.Korrigieren Sie die ID, oder fügen Sie die Vorlage der Konfiguration hinzu.
slotUnknownEin slot="…" nennt keinen Rahmen der Vorlage der Seite (über extends geerbte Rahmen und die Rahmen einer Seite aus variants zählen mit). Der Inhalt kommt in den Flussrahmen.Korrigieren Sie den Slot-Namen, oder fügen Sie der Vorlage einen Rahmen mit diesem Namen hinzu.
slotEmptyEin Rahmen der Vorlage erhält auf dieser Seite nichts: Kein Slot nennt ihn, er übernimmt keine Überschrift, und beim Flussrahmen bleibt kein Inhalt ohne Slot übrig. Ein Rahmen, der nur die Fortsetzung eines anderen Rahmens aufnimmt (next), wird nicht gemeldet. postext check führt ihn als Hinweis auf.Schreiben Sie Inhalt mit seinem Slot für ihn, oder markieren Sie den Rahmen in der Vorlage mit optional: true.
pageFenceLengthEin :::page mit drei Doppelpunkten trägt template=. Es wird wie bisher als Comicseite gelesen.Öffnen Sie die Seite mit vier Doppelpunkten, ::::page{template="…"}, und schließen Sie sie mit ::::.
unclosedContainerEine zusammengesetzte Seite, ein Rahmen oder eine Abbildung wird nie geschlossen (siehe oben, wie sich der Parser fängt). Das Bedienfeld Prüfungen nennt die zusammengesetzte Seite ::::page.Ergänzen Sie die schließende Zeile: so viele Doppelpunkte wie in der öffnenden Zeile der Seite, oder ::: für einen Rahmen oder eine Abbildung.

#Aus dem Code

composedPages(blocks) liest die geparsten Blöcke eines Kapitels (parseMarkdownWithIssues(markdown).blocks) und gibt der Reihe nach je Seitenbegrenzung einen Knoten zurück: template, spread, attrs mit dem Quellbereich jedes Werts (attrSources), fenceIndex (die Ordnungszahl der Begrenzung im Kapitel, in jeder Sprache dieselbe), slots (die Indizes der Blöcke jedes Slots, in der Reihenfolge des Markdowns), unassigned (die Blöcke ohne Slot) und den Quellbereich der ganzen Seite. Ein Block trägt den Slot, den er nennt, in ContentBlock.slot, mit dem Quellbereich des Werts; eine Abbildung ist ein resourceBlock, dessen figure ihre Attribute und Beschriftungen enthält, jede Beschriftung mit ihrem Text, ihren Inline-Spans und einer Zuordnung zurück zur Quelle im Markdown. checkComposedSlots(pages, config) gibt die drei Slot-Warnungen für diese Seiten zurück.