Kapitel 3.12 · Teil II · Das Handwerk
Konfiguration: Kästen
Benannte Stile für :::callout-Kästen: Rahmen, Füllung, Streifen, Titel, Symbol und Marker, nummerierte Aussagen, Typografie im Kasten und Kästen, die über Seiten hinweg geteilt werden
Kurz gesagt
Diese Seite behandelt die Kästen, die eine Anmerkung, einen Tipp, eine Warnung oder eine Liste von Lernzielen vom Text absetzen. Sie geben jeder Art von Kasten einen Namen und ein Aussehen: Hintergrund, Rahmen, einen farbigen Streifen, einen Titel und ein Symbol. Ein Kasten kann eine Nummer tragen, wie ein Lehrsatz oder ein Beispiel in einem Lehrbuch. Sie wählen die Schriften im Kasten. Wenn ein langer Kasten auf der nächsten Seite weitergeht, wählen Sie, was die Trennstelle kennzeichnet.
#Kastenstile
Die Eigenschaft calloutStyles deklariert die benannten Kastenstile, die ein Dokument mit einem Container :::callout{type="…"} anwendet – Anmerkungen, Tipps, Warnungen, Lernziele, jeder Inhalt, der in einem getönten oder umrandeten Kasten vom Fließtext abgesetzt wird. Ein neutraler Stil, note, ist standardmäßig dabei (hellgrauer Hintergrund, kein Rahmen, kein Streifen, kein Symbol, kein Titel), sodass :::callout ohne jede Konfiguration funktioniert; wer calloutStyles deklariert, ersetzt diese Standardliste.
const config: PostextConfig = {
calloutStyles: [
{ id: 'note', name: 'Note' },
{
id: 'objectives',
name: 'Learning objectives',
title: 'Objectives',
stripe: { enabled: true, side: 'left' },
icon: { kind: 'glyph', glyph: '✓' },
titleStyle: { textTransform: 'uppercase' },
lists: { bulletChar: '–' },
},
{
id: 'warning',
title: 'Warning',
backgroundEnabled: false,
border: { enabled: true, color: { hex: '#AA0000', model: 'hex' }, width: { value: 1, unit: 'pt' } },
borderRadius: { value: 1, unit: 'mm' },
titleStyle: { color: { hex: '#AA0000', model: 'hex' } },
},
],
};:::callout{type="objectives"}
- Describe the parts of the lantern.
- Trim the wick at dusk.
:::
:::callout{type="warning" title="Do not touch the lens"}
The glass stays hot for an hour after the flame is out.
:::| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
id | string | — | Bezeichner, den :::callout{type="…"} auswählt. Eine Einfassung mit unbekanntem oder fehlendem type verwendet den ersten konfigurierten Stil (die Sandbox meldet unbekannte Typen). |
name | string | id | Lesbarer Name (nur für die Editor-Oberfläche). |
title | string | '' | Standardtitel; leer bedeutet kein Titel. Das Attribut title der Einfassung überschreibt ihn pro Instanz. |
span | 'column' | 'page' | 'side' | 'column' | Waagerechte Ausdehnung: die Spalte, die volle Inhaltsbreite oder die nur für Gleitobjekte bestimmte Seitenspalte eines Layouts mit anderthalb Spalten (layout.) – der Kasten verlässt dann den Fluss und stapelt sich in dieser Spalte neben dem Text, den er unterbricht. Pro Instanz mit dem Attribut span überschreibbar. In mehrspaltigen Layouts wird ein Kasten mit 'page' zu einem Spannblock: Er teilt die Seite in Spaltenbänder und steht in einer eigenen Spalte über die volle Breite (siehe den Abschnitt zum Container unten). Ein Seitenkasten, den die Seitenspalte seiner Seite nicht fassen kann, nimmt die Seitenspalte der nächsten Seite; wo das Kapitel (oder das Dokument) zuerst endet, wird jeder noch wartende Kasten in der Reihenfolge seiner Einfassungen in die Seitenspalte einer Seite nach dem Text gesetzt, und der Build meldet das (afterText; bis postext 1.24 entfielen die Kästen nach der ersten solchen Seite). |
columns | number | 1 | Wie viele benachbarte Spalten ein gleitender Kasten (placement 'auto', 'top' oder 'bottom', mit span: 'column') einnimmt, wie es placement.columns bei einer Abbildung tut: der Kasten eines Artikels über drei der fünf Spalten einer Zeitung. So viele Spalten, wie die Seite hat, oder mehr machen ihn zu einem Kasten über die ganze Seitenbreite. Ein im Fluss gesetzter Kasten ('here') bleibt in seiner Spalte. Pro Instanz mit dem Attribut columns überschreibbar. Seit postext 1.18. |
placement | 'here' | 'auto' | 'top' | 'bottom' | 'fixed' | 'here' | Wohin der Kasten kommt. 'here' setzt ihn in den Fluss; 'top' / 'bottom' lassen ihn wie eine Ressource gleiten ('auto' nimmt das Band, das zuerst frei ist, Kopf oder Fuß) – er verlässt den Fluss an seiner Stelle und nimmt das erste freie Band an oder nach diesem Punkt (den Fuß der aktuellen Seite oder Kopf / Fuß der nächsten Seite, die der Fluss eröffnet), und der Text danach füllt die Seite um ihn herum; 'fixed' verankert ihn über fixed (siehe unten) an Seitenkoordinaten, außerhalb des Spaltenflusses. Einzelheiten im Abschnitt zum Container. Pro Instanz mit dem Attribut placement überschreibbar. |
sideAtColumnEnd | 'before' | 'after' | 'before' | Wo ein Seitenkasten (span: 'side') steht, wenn der Text nach seiner Einfassung nicht in derselben Spalte weitergeht: Die Spalte hat keinen Platz mehr dafür, oder die Umbruchregeln schicken ihn weiter (ein Absatz, den die Regeln für Witwen und Waisen ganz verschieben, eine Überschrift, die bei ihrem Text bleibt). 'before' hält ihn an seiner Einfassung, auf dieser Seite, neben dem Text davor, und schiebt ihn vom Fuß der Spalte nach oben, wenn er unter der Einfassung nicht passt: der Platz für eine Glosse, die nach der erläuterten Stelle geschrieben ist. 'after' setzt ihn auf Höhe der ersten Zeile des Texts nach der Einfassung, in die Seitenspalte der Seite, auf der dieser Text weitergeht: der Platz für eine Zeilennummer oder eine Marginalie, die vor ihrer Zeile geschrieben ist. Geht der Text in derselben Spalte weiter, setzen beide den Kasten an seine Einfassung. Ein Kasten, dem in seinem Kapitel nichts folgt, bleibt in beiden Fällen beim Text davor, und hintereinander eingefasste Seitenkästen behalten ihre Reihenfolge. Bis postext 1.4 verhielt sich jeder Seitenkasten wie 'before', was der Standard bleibt: Ein Stil für Glossen hält seine Kästen auf der Seite der Stelle, die sie erläutern. |
fixed | | | Position eines Kastens mit 'fixed': ein ElementAnchor (to: 'container' = der Inhaltsbereich der Seite, auf geraden Seiten gespiegelt; 'page' = das Endformat; 'bleed' = der Anschnitt; edge: eine der neun Kanten des Containers) plus ein optionales offset (Maße x / y). |
floatBarrier | boolean | false | Den Kasten zu einer Gleitobjekt-Schranke machen: Jede Abbildung oder Tabelle, auf die vor ihm verwiesen wird, wird vor ihm platziert – in den freien Plätzen der Seite, sonst auf Seiten, die vor dem Kasten eröffnet werden –, sodass kein Gleitobjekt an einem abschließenden Kasten eines Kapitels (typischerweise eine Zusammenfassung der „Kernpunkte“) vorbeigerät. Kapitelauftakte, :::part und das Ende des Dokuments sind immer Schranken. |
Ein Kasten mit span: 'page' auf einer mehrspaltigen Seite schneidet das Band unter dem Text, dem er folgt; eine Abbildung über die ganze Breite, auf die vor ihm verwiesen wird, nimmt diesen Schnitt zuerst – der Text wird ausgeglichen, die Abbildung steht genau dort, wo er endete, und der Kasten geht darunter weiter (oder auf der nächsten Seite, wenn er nicht mehr passt). Eine Abbildung, die zu hoch ist, um dem ausgeglichenen Text zu folgen, eröffnet stattdessen die nächste Seite, der Kasten danach, und das verlassene Band endet trotzdem ausgeglichen. Ein teilbarer Kasten (keepTogether: false) beginnt unter Text und Abbildung mit so vielen Einträgen, wie passen, und der Rest geht auf der nächsten Seite weiter. | |||
width | 'fill' | 'auto' | 'fill' | 'fill' nimmt die verfügbare Breite ein; 'auto' passt sich eng an den Titel an (als Abzeichen) und ignoriert den Inhalt. |
backgroundEnabled / background | boolean / ColorValue | true / #f4f4f4 | Fläche des Kastens. |
border | { enabled, color, width } | false, #cccccc, 0.5pt | Umrisslinie des Kastens, innerhalb der Kastenkante gezeichnet wie der Rahmen eines Kastenelements (siehe Kastenelemente). |
borderRadius | Dimension | 0 | Eckenradius von Hintergrund / Rahmen (begrenzt auf die halbe Breite und Höhe des Kastens). Der Streifen folgt ihm: Bei einem abgerundeten Kasten wird der Streifen auf den abgerundeten Rahmen beschnitten, so wie CSS ein border-left auf border-radius beschneidet. Der Reiter label behält eckige Ecken. |
padding | { top, right, bottom, left } | je 0.75em | Innenabstand zwischen Kastenkante und Inhalt. em-Werte beziehen sich auf die Schriftgröße des Kastentexts. |
stripe | { enabled, side, width, color } | false, 'left', 1.5em, Hauptfarbe | Vollflächiges Band an einer Kante. Ein Streifen 'left' / 'right' verschmälert den Inhalt; ein Streifen 'top' schiebt ihn nach unten. 'left' und 'right' sind Seiten des Textflusses (in einem Buch mit Leserichtung von rechts nach links ist 'left' die rechte Seite des Blatts); 'start' und 'end' folgen der eigenen Richtung des Kastens, sodass ein :::callout{dir=ltr} in einem arabischen Buch einen Streifen 'start' links setzt. Bei einem Kasten mit borderRadius werden seine äußeren Ecken mit denen des Rahmens gerundet (bis postext 1.4 blieben sie eckig und ragten über die Rundung hinaus). |
icon | { kind, glyph, resourceId, fontFamily, fontWeight, size, width, color, align, position, cornerSide } | 'none', Schrift der Überschriften, 400, 1.5em, Hauptfarbe, 'top', 'inline', 'right' | Ein Textzeichen (kind: 'glyph') oder eine Bitmap-/SVG-Ressource (kind: 'resource' + resourceId) neben dem Inhalt. Mit einem seitlichen Streifen wird das Symbol über dem Streifen zentriert; sonst reserviert es eine eigene Spalte (size + titleStyle.gap). align: 'center' zentriert es senkrecht zum Inhalt. Ein Ressourcenbild wird unter Wahrung seines Seitenverhältnisses in das Quadrat eingepasst – oder in einen Rahmen von width × size, wenn width gesetzt ist (ein breiter Streifen von Symbolen); ein Symbol, das höher als der Inhalt ist, vergrößert den Kasten entsprechend (und zentriert mit align: 'center' den Inhalt daran). position: 'corner' hängt das Symbol als Abzeichen an eine obere Ecke, zur Hälfte über den Rahmen hinaus, ohne dem Inhalt Raum zu nehmen; ein breites Symbol (width) wird nach der Breite, in der es gezeichnet wird, an der Ecke zentriert, und an der linken Ecke beginnt der Titel hinter seiner inneren Hälfte (bis postext 1.4 wurde es nach seiner Höhe platziert, sodass ein breiter Streifen über den Kasten hinaus und über den Titel hing); cornerSide wählt die Ecke – 'right' / 'left' oder 'outer' / 'inner', die der Seitenparität gespiegelter Ränder folgen (außen = rechts auf einer rechten Seite, links auf einer linken). |
marker | { kind, glyph, resourceId, fontFamily, fontWeight, size, color, align, gap, rule } | 'none', Schrift der Überschriften, 400, 1.5em, Hauptfarbe, 'center', 0.5em, Linie aus (0.5pt, Hauptfarbe, Länge 0) | Ein zweites Symbol, außerhalb des Kastens in einer Spalte links davon gezeichnet, mit einer optionalen senkrechten Linie rule zwischen ihm und dem Kasten – die „hier tippen“-Hand neben einem Abzeichen zur Selbsteinschätzung. Der Rahmen wird zu [marker][rule][gap][box] und so hoch wie das höchste der drei; align zentriert sie zueinander oder richtet sie oben aus. rule.length ist ein Mindestwert: Die Linie reicht immer mindestens über die Höhe des Kastens. |
titleStyle | { fontFamily, fontSize, fontWeight, italic, color, textTransform, gap, letterSpacing, indent, lineHeight } | Schrift der Überschriften, Größe des Fließtexts, 700, false, Hauptfarbe, 'none', 0.5em, 0, 0, 1.2em | Typografie des Titels. gap ist der Abstand zwischen dem Titel und dem ersten Kindblock (und der Abstand der Symbolspalte). lineHeight ist der Zeilenabstand der Titelzeilen, wobei em die eigene Größe des Titels zählt; die Grundlinie liegt in jeder Zeile bei 0,8 davon, wie im Fließtext, sodass ein Titel mit dem Zeilenabstand des Fließtexts (lineHeight: 12pt über einem Raster von 12 pt) den Kasten bei einer ganzen Zahl von Zeilen und seinen Titel auf dem Raster hält, während der Standard von 1,2 em jedem Kasten einen Bruchteil einer Zeile hinzufügt. textTransform: 'uppercase' erhält die Länge. letterSpacing sperrt den Titel (Canvas letterSpacing / PDF Tc); indent rückt ihn von der Innenkante des Kastens nach rechts. Ein Eckabzeichen auf der Seite des Titels (der linken Ecke) reserviert zuerst seinen eigenen Raum – die innere Hälfte des Abzeichens plus gap –, sodass der Titel es auf jeder Seite freihält; indent kommt nur darüber hinaus hinzu. |
body | { fontFamily, fontSize, lineHeight, color, boldColor, italicColor, fontWeight, boldFontWeight, italic, smallCaps, textAlign, hyphenation, paragraphSpacing, firstLineIndent, tabStops, tabInterval } | erbt bodyText; italic / smallCaps false | Typografie der Absätze und Listeneinträge im Kasten. Jedes Feld erbt, wenn nicht gesetzt, den Wert des Fließtexts; italicColor setzt die Farbe kursiven Texts (ein kursives Hervorhebungszitat in der Farbe des Kastens). fontWeight / boldFontWeight setzen die Schriftstärken des normalen und des fetten Texts; italic setzt den Kasten kursiv, wobei Text in … aufrecht wird; smallCaps setzt ihn in Kapitälchen; tabStops und tabInterval ersetzen im Kasten die des Fließtexts (siehe Tabulatoren). Was der Text des Kastens sonst noch übernimmt, steht unter Typografie im Kasten. |
lists | { bulletChar, color, indent, gap, itemSpacing, bulletFontSize, bulletFontWeight } | erbt unorderedLists | Typografie der Listen im Kasten (color, indent, gap und itemSpacing gelten auch für nummerierte Listen). bulletFontSize / bulletFontWeight setzen das Aufzählungszeichen in der Schrift des Kastentexts in dieser Größe und Schriftstärke (ein kräftiges, farbiges Aufzählungszeichen). |
label | { fontFamily, fontSize, fontWeight, color, background, position, height, paddingX, offset, inset, icon, rule } | nicht gesetzt (kein Reiter) | Ein Reiter an der Oberkante des Kastens, der das Attribut label der Einfassung druckt – die Nummer eines nummerierten Kastens („BOX 1-1“). Er schmiegt sich an die Ecke position ('top-right' / 'top-left'), um inset eingerückt, ragt offset über die Oberkante des Kastens hinaus (dieser Raum gehört zum Block, zusätzlich zu marginTop, sodass der Reiter ihn auch am Kopf einer Spalte behält), ist height hoch mit paddingX auf jeder Seite des Texts und kann daneben eine Ressource icon tragen ({ resourceId, width, gap }, auf der von der Ecke abgewandten Seite) sowie eine Linie rule ({ enabled, color, width }) entlang der Oberkante von der gegenüberliegenden Ecke bis zu ihm. Standardwerte: Schrift der Überschriften, Größe des Fließtexts, 700, Weiß auf der Hauptfarbe, 1.4em hoch, 0.6em Innenabstand. Der Reiter ist eine eigene Form, die auf dem Rahmen steht, und behält daher eckige Ecken, gleich welchen borderRadius der Kasten hat. |
columnGap | Dimension | 1.5em | Abstand zwischen den Spalten einer Gruppe :::columns im Kasten (siehe den Abschnitt zum Container unten). |
marginTop / marginBottom | Dimension | 0.75em / 0.75em | Abstand über dem Kasten (fällt mit dem Außenabstand des vorigen Blocks zusammen) und Mindestabstand darunter (der genaue Abstand mit snapToGrid: false). Ein gleitender Kasten (placement: 'top', 'bottom' oder 'auto') behält den Gleitobjektabstand, eine Zeile Fließtext, zwischen seinem Band und dem Text; ein größeres marginBottom setzt den Abstand unter einem Kasten in einem Kopfband, ein größeres marginTop den Abstand über einem Kasten in einem Fußband, mit dem Band auf das Raster aufgerundet. Bis postext 1.4 ignorierte ein gleitender Kasten seine Außenabstände. |
snapToGrid | boolean | true | Mit true rastet der Fluss nach dem Kasten wieder auf das Grundlinienraster ein, der Abstand darunter ist also marginBottom, auf ganze Rasterzeilen aufgerundet. Mit false behält der Kasten sein genaues marginBottom, das mit dem oberen Außenabstand des nächsten Blocks zusammenfällt – zwei aufeinanderfolgende Kästen eines solchen Stils stehen genau max(marginBottom, marginTop) voneinander entfernt –, und der Text danach kann bis zum nächsten Einrastpunkt (einer Überschrift, dem Ende einer Liste) außerhalb des Rasters stehen, wie nach einer Überschrift mit headings.. Gedacht für Dokumente aus gestapelten Kästen (Arbeitsblätter, Formulare). Es gilt für Kästen im Fluss; Kästen über die ganze Seitenbreite in einem mehrspaltigen Layout sowie gleitende, fixierte und Seitenkästen behalten das Raster, da Spaltenbänder und Gleitzonen darauf aufgebaut werden. Die Hebel des Spaltenausgleichs bleiben unverändert: Ein Kasten, der eine Spalte abschließt, wird weiterhin auf den letzten Rasterplatz der Spalte hinabgeschoben. |
keepTogether | boolean | true | Mit true wird der Kasten zusammengehalten: Ein Kasten, der nicht in den verbleibenden Raum passt, wandert ganz in die nächste Spalte oder auf die nächste Seite. Nur ein Kasten, der höher als eine leere, volle Spalte ist – eine ganze Seite bei einem Kasten mit span: 'page' –, lässt sich nicht zusammenhalten: Er wird stattdessen nach den Regeln für false unten geteilt, statt überzulaufen, beginnend an seiner Stelle, und eine Fortsetzung, die in eine Spalte passt, wandert dann ganz weiter; ein so hoher gleitender Kasten (placement: 'top' | 'bottom' | 'auto') gleitet nicht, sondern bleibt an seiner Stelle im Fluss. Mit false darf jeder Kasten zwischen seinen Kindblöcken oder zwischen den Zeilen eines Absatzes oder Listeneintrags umbrechen: Der tiefste passende Schnitt schließt die aktuelle Spalte ab (oder bei einem Kasten mit span: 'page' die Seite, bündig mit dem Fuß der Spalten), und der Rest geht am Kopf der nächsten in einem eigenen Kasten weiter – gleicher Rahmen und Streifen, kein Symbol und kein Titel, sofern repeatTitle ihn nicht wiederholt –, und wird erneut geteilt, wenn er immer noch zu hoch ist. Der Text jedes Fragments behält die Spalte, die ein Inline-Symbol am Kopf einnimmt, leer, sodass der Kasten auf jeder Seite eine Satzbreite hat. Ein Schnitt in einem Listeneintrag lässt dessen Aufzählungszeichen beim Kopf. Der Rahmen jedes Fragments teilt contentIndex / containerId der Einfassung und vermerkt callout.part / callout.continued. Verwenden Sie es für einen langen abschließenden Kasten mit „Kernpunkten“ zusammen mit headings. oder für einen Anmerkungsstil, dessen Kästen nie eine Abbildung von der Seite drängen dürfen. Ein verschachtelter Kasten (ein :::callout in einem anderen) ist ein Kindblock seines Elternkastens: Ein Schnitt darf davor oder danach fallen und in ihm nur, wenn sein eigener Stil das Teilen erlaubt (keepTogether: false oder höher als eine volle Spalte), nach seinem eigenen splitMinLines. |
splitMinLines | number | 2 | Mindestzahl an Textzeilen, die ein Fragment eines geteilten Kastens (keepTogether: false oder ein zusammenzuhaltender Kasten, der höher als eine volle Spalte ist) auf beiden Seiten des Schnitts behält. Es schützt nur Text: Eine Seite mit mindestens einer Abbildung, Tabelle, abgesetzten Formel oder einem verschachtelten Kasten ist unabhängig von ihrer Zeilenzahl zulässig, sodass ein Kasten mit Bildern ein einzelnes auf einer Seite lassen darf. Ein Schnitt in einem Absatz oder Listeneintrag zählt weiterhin jede Zeile auf beiden Seiten (eine Abbildung oder Formel dort als eine Zeile) und lässt außerdem mindestens layout. Zeilen dieses Absatzes oder Eintrags auf jeder Seite (standardmäßig zwei; dieses Minimum, wenn es kleiner ist, sodass 1 eine erlaubt). Mit den Standardwerten wird ein Eintrag von zwei oder drei Zeilen nie geteilt und einer von vier Zeilen nur zwei zu zwei. Mit dem Standard bricht kein Kasten so um, dass eine einzelne Textzeile am Fuß einer Spalte oder am Kopf der nächsten steht; erfüllt kein Schnitt das Minimum, wandert der Kasten ganz. (Vor postext 1.5 prüfte ein Schnitt in einem Absatz nur die Zeilen der ganzen Seite, sodass ein Eintrag von zwei Zeilen eins zu eins geteilt werden konnte, wenn andere Zeilen des Kastens das Minimum auffüllten.) |
repeatTitle | boolean | false | Den Titel am Kopf jeder Fortsetzung eines geteilten Kastens wiederholen, gefolgt von continuedSuffix („Key points (cont.)“). Die Wiederholung übernimmt den Titelstil. Ein Kasten ohne Titel wiederholt nichts. Siehe Hinweise an einem geteilten Kasten. |
continuedSuffix | string | '(cont.)' | Text nach dem wiederholten Titel, in der Sprache des Dokuments (locale, sonst die Sprache der Silbentrennung), wie bei einer geteilten Tabelle, und mit dem Titel verbunden wie bei einer Tabelle. |
continuesMarkerEnabled | boolean | false | continuesMarker unter die letzte Zeile jedes weitergehenden Teils eines geteilten Kastens setzen, innerhalb des Kastens. |
continuesMarker | string | 'Continued' / 'Continúa' | Text dieses Hinweises (das „(MORE)“ eines Drehbuchs), in Schrift und Größe des Kastentexts, je nach Sprache des Dokuments. |
continuesMarkerAlign | 'left' | 'center' | 'right' | 'right' | Wo der Hinweis in der Innenbreite des Kastens steht. |
continuesMarkerItalic | boolean | true | Den Hinweis kursiv setzen. |
numbering | { label, counter, numberingTemplate, resetOn, counterFormat, placement, bold, italic, suffix } | nicht gesetzt | Die Kästen dieses Stils als nummerierte Aussagen zählen: Sätze, Lemmata, Definitionen. Siehe Nummerierte Aussagen und Beweise. |
endMark | string | '' | Ein Zeichen, rechtsbündig ans Ende der letzten Zeile des Kastens gesetzt, wie ein Beweis mit '∎' oder '□' endet: auf der letzten Zeile, wenn es nach einem Leerzeichen passt, sonst auf einer eigenen Zeile. Ein Kasten, der mit einer abgesetzten Formel ohne Nummer endet, nimmt es als Kennzeichen der Formel. Mit eingeschalteter Mathematik werden die Quadrate (∎ □ ■ ▪ ◻ ▫) aus den eigenen Glyphen von TeX gezeichnet, sodass eine Schrift ohne sie (die latin-Dateien von Fontsource) sie trotzdem druckt; mit ausgeschalteter Mathematik werden sie in der Schrift des Kastentexts gesetzt. |
#Der Container :::callout
Eine Zeile :::callout{type="<id>"} öffnet den Kasten, eine bloße Zeile ::: schließt ihn. Die Einfassung nimmt fünf Attribute an – type (die ID des Stils), title (überschreibt den Titel des Stils), span, placement und columns (überschreiben die Werte des Stils) –, und der Inhalt dazwischen wird im Kasten gesetzt: ein optionaler Titel, dann die Absätze, Listen, Zitatblöcke, Formeln oder Ressourceneinbettungen, jeweils mit der Typografie body / lists des Stils (Überschriften behalten ihre üblichen Stile). Außenabstände zwischen Kindblöcken fallen wie im Fließtext zusammen; das Innere verlässt das Grundlinienraster, und der Fluss rastet nach dem Kasten mit mindestens marginBottom darunter wieder darauf ein (das Raster hat Vorrang; der Außenabstand ist ein Mindestwert – dieselbe Konvention, der Ressourcen folgen). Ein Stil mit snapToGrid: false behält stattdessen das genaue marginBottom, und der Text nach dem Kasten bleibt bis zur nächsten Überschrift oder zum nächsten Listenende außerhalb des Rasters. Eine Überschrift unmittelbar vor einem Kasten bleibt bei ihm.
Grenzen in dieser Version:
- Ein Kasten wird zusammengehalten, sofern sein Stil nicht
keepTogether: falsesetzt. Passt er nicht in den verbleibenden Spaltenraum, wandert er ganz in die nächste Spalte oder auf die nächste Seite – auch aus einer leeren Spalte, die Gleitobjekt-Bänder oder eine Bandgrenze verkürzt haben, solange eine volle Spalte ihn fassen würde. Ein Kasten, der höher als eine volle Spalte ist, wird stattdessen geteilt, wie ein teilbarer; nur einer, den kein Schnitt teilen kann (eine Abbildung oder Tabelle, die höher als die Spalte ist, oder einsplitMinLines, das kein Schnitt erfüllt), wird trotzdem platziert und läuft über; das Layout vermerkt dann eine WarnungcalloutOverflow(VDTDocument.warnings), die die Sandbox auflistet. Eine Gruppe:::columnswird wie der Kasten um sie herum geschnitten, zwischen ihren Unterspalten (seit postext 1.25); sie bleibt nur mitlayout.flowColumns: falseoder in einem verschachtelten Kasten ganz und kann dann ebenso überlaufen. Ein teilbarer Kasten lässt den passenden Teil zurück – ganze Kindblöcke oder die Zeilen eines Absatzes bis hinab zusplitMinLinesauf jeder Seite (eine Abbildung, Tabelle oder abgesetzte Formel allein genügt für eine Seite) – und geht in einem Kasten ohne Symbol in der nächsten Spalte oder auf der nächsten Seite weiter, ohne Titel, sofern der Stil ihn nicht wiederholt, und optional mit einem Hinweis unter dem verlassenen Teil (siehe Hinweise an einem geteilten Kasten). - Gleitobjekte weichen einem unteilbaren Kasten. Ist der Block direkt nach dem Verweis auf eine Abbildung ein Kasten mit
keepTogether, wird ein Platz, der dem Kasten keine Spalte des aktuellen Bands zum Landen ließe (die verweisende Spalte oder eine leere danach, die ihn vor dem Gleitobjekt aufgenommen hat), nicht genommen: Die Abbildung geht zu ihrem nächsten Platz weiter, meist auf der nächsten Seite, und der Kasten bleibt im Fluss – so, wie ein Setzer ihn setzen würde, statt den Kasten von der Seite zu drängen und die Spalte mit der Abbildung allein zu lassen. span: 'page'in einem mehrspaltigen Layout macht den Kasten zu einem Spannblock: Er wird auf die volle Inhaltsbreite gesetzt und teilt die Seite in Spaltenbänder – die Textspalten darüber werden an der Schnittlinie geschlossen, der Kasten nimmt eine eigene Spalte über die volle Breite ein, und darunter öffnet sich ein neues Band von Textspalten, sodass der Fluss in jeder Spalte unter dem Kasten weitergeht. Wo die Spalten ausgeglichen sind – am Kopf einer Seite, direkt unter einer Auftaktüberschrift mitspan: 'page', direkt unter einem anderen Spannblock oder direkt unter einem Gleitobjekt-Band am Kopf –, schneidet der Kasten einfach dort. Kommt er mitten auf der Seite an, bei ungleichen Spalten, wird er so gesetzt, wie es ein Setzer täte: Der Text darüber wird über alle Spalten ausgeglichen geschnitten (die Engine wiederholt die Platzierung mit Spalten des Bands, die auf dieselbe Zahl von Rasterzeilen gekürzt sind, sodass der Text natürlich von Spalte zu Spalte überläuft und jede Regel zu Waisen, Witwen und Zusammenhalt mit dem Folgenden weiterhin gilt), der Kasten überspannt die Seite, und die Spalten gehen darunter weiter. Der Schnitt kostet einige zusätzliche Platzierungsdurchgänge; ließe die Schnittlinie keinen Raum für den Kasten plus das Witwenminimum an Fließtextzeilen darunter, oder passt nach einigen Versuchen keine Anordnung, wandert der Kasten an den Kopf der nächsten Seite. Der Text darüber hält sich an den Schnitt: Ein Absatz, der in den wenigen Zeilen, die eine Spalte unter einer Abbildung darüber freihält, nicht beginnen kann, geht in die nächste Spalte (die Abbildung steht dann allein in ihrer Spalte), und würde ein Block dennoch über den Schnitt hinauslaufen, wird der Schnitt eine Zeile tiefer gesetzt, statt dort, wo dieser Block endet. Ein geteilter Kasten, der das Band eröffnet, wird ebenfalls dort geschnitten, sodass sein Rest nie über den Schnitt hinausläuft. Mitheadings.balancing.beforeSpan(dem Standard) wird das verlassene Band hinter ihm ausgeglichen geschnitten – wie das abschließende Band eines Kapitels –, und wenn der Stil das Teilen erlaubt (keepTogether: false), schließt der Teil des Kastens, der unter die ausgeglichenen Spalten passt, die Seite ab, und der Rest eröffnet die nächste; mitbeforeSpan: falsewird die verlassene Seite einfach wie üblich ausgeglichen, ohne einen Seitenumbruch zu erzwingen. Eine Überschrift direkt vor einem Spannblock wandert nicht mit ihm. In einspaltigen Layouts istspan: 'page'einfach ein Kasten im Fluss.placement: 'fixed'nimmt den Kasten aus dem Fluss: Er wird gesetzt (width: 'auto'passt sich eng an den Titel an;'fill'nimmt die Breite der Textspalte unter dem Ankerpunkt) und auf der Seite, auf der er im Fluss vorkommt, an der Position fixiert, diefixed.anchor/fixed.offsetbeschreiben – standardmäßig die linke untere Ecke des Inhaltsbereichs. Die Textspalten, die er überdeckt, geben diese Zone frei (von unten abgeschnitten oder von oben, wenn die Spalte noch leer ist), genau wie bei einem Gleitobjekt-Band; enthält die Zone bereits Text, ein Gleitobjekt oder einen Spannblock, wandert der Kasten auf die nächste Seite. Ein fixierter Kasten, der das Kapitel abschließt (der nächste Block ist ein Kapitelauftakt, ein:::part, ein Schrankenkasten oder das Ende des Dokuments), gleicht zuerst die Spalten darüber aus (headings.balancing.trailing), sodass eine kurze Schlussseite ausgeglichen über dem Abzeichen darunter endet. Rahmen und Kindblöcke stehen inpage.floatsund werden in jeder Ausgabe außerhalb des Spaltenbeschnitts gezeichnet.placement: 'top' | 'bottom'lässt den Kasten wie eine Ressource gleiten: Er verlässt den Fluss an seiner Stelle und nimmt das erste freie Band nach diesem Punkt – den Fuß der aktuellen Seite ('bottom') oder Kopf / Fuß der nächsten Seite, die der Fluss eröffnet – in Spaltenbreite (span: 'column') oder in voller Inhaltsbreite (span: 'page'); der Text danach füllt die verlassene Seite. Rahmen und Kindblöcke kommen inpage.floats, wie bei einem fixierten Kasten. Ein gleitender Kasten, der eine neue Seite anführt, wird vor den Abbildungen gesetzt, die auf diese Seite warten, und eine Abbildung, auf die auf einer früheren Seite verwiesen wurde und die dann darunter passt, nimmt den Rest dieser Seite, auch wenn weniger als drei Textzeilen übrig blieben (eine Galerieseite: Kasten plus Abbildung, kein Text dazwischen). Ein Kasten mitspan: 'side'gleitet nie: Er stapelt sich neben dem Text, gleich welche Platzierung er hat. Mitcolumnsüber 1 (im Stil oder als Attribut der Einfassung, seit postext 1.18) nimmt ein Kasten mitspan: 'column'so viele benachbarte Spalten ein: den Kopf einer Folge leerer Spalten, die auf gleicher Höhe beginnen, oder den Fuß der aktuellen Spalte und der leeren danach, wie in:::callout{placement="top" columns="2"}.width: 'auto'passt sich nur eng an den Titel an; Kindblöcke werden ignoriert.- Ein in einem anderen Kasten verschachteltes
:::calloutist ein eigener Kasten: Es wird mit seinem eigenen Stil (Hintergrund, Rahmen, Radius, Innenabstand, Streifen, Titel, Symbol, Marker, Reiter, Typografie) auf die volle Innenbreite seines Elternkastens gesetzt und stapelt sich als ein Kindblock darin, wobei seinmarginTop/marginBottommit den Nachbarn zusammenfällt. Seinspanundplacement(aus Einfassung oder Stil) werden ignoriert – ein verschachtelter Kasten fließt immer in seinem Elternkasten –, ebensofloatBarrierundsnapToGrid. Kästen lassen sich beliebig tief verschachteln und können in einer Gruppe:::columnsstehen (jeder ganz, in einer Spalte). Wird der Elternkasten geteilt, fällt der Schnitt vor oder nach einem verschachtelten Kasten oder in ihn, wenn der verschachtelte Stil das Teilen erlaubt; jedes Fragment zeichnet die Rahmen neu, die es durchschneidet, und ein verschachtelter Kasten, der aus dem vorigen Fragment fortgesetzt wird, verliert Titel und Symbol, wie eine Fortsetzung auf oberster Ebene. - Eine Gruppe
:::columns{count=N}…:::unter den Kindblöcken setzt diese Kindblöcke im Kasten inNgleich breiten Spalten im AbstandcolumnGap: Die Folge wird an den Block- oder Zeilengrenzen geschnitten, die die Spalten am besten ausgleichen (ein mittendrin geschnittener Absatz oder Listeneintrag geht am Kopf der nächsten Spalte ohne sein Aufzählungszeichen weiter), jede Spalte beginnt am Kopf der Gruppe, und die Gruppe ist so hoch wie ihre höchste Spalte; die Kindblöcke danach kehren zur vollen Breite zurück. Ein Kasten, der sich teilt (keepTogether: falseoder höher als eine Spalte), schneidet auch innerhalb einer Gruppe, zwischen ihren Spalten: Eine fortlaufende Gruppe füllt ihre Spalten der Reihe nach und geht im nächsten Fragment weiter, eine parallele (breaks) geht Strang für Strang weiter (seit postext 1.25; siehe Dokumentformat ›:::columns). Eingapan der Einfassung ersetztcolumnGapfür diese Gruppe, undrulezieht eine Linie durch jeden Spaltenabstand. Verwenden Sie es für eine zweispaltige Zusammenfassung von Kernpunkten oder für nebeneinandergesetzte Tabellen eines breiten Kastens. - Das sechste Attribut der Einfassung,
label, erscheint auf dem Reiter des Stils (siehelabeloben) –:::callout{type="box" label="BOX 1-1" title="The octet rule"}; ohne einen Stillabelwird das Attribut ignoriert.
Im VDT ist der Kasten ein Rahmenblock mit type: 'callout', dessen Schmuck (Hintergrund, Streifen, Symbol, Titel) in designOverlay liegt, gefolgt von seinen Kindblöcken in derselben Spalte; der Rahmen und jeder Kindblock tragen die containerId der Einfassung. Ein verschachtelter Kasten ist ein eigener Rahmen mit type: 'callout' unter den Kindblöcken, gefolgt von seinen Blöcken; sie behalten die containerId der Einfassung auf oberster Ebene (Platzierung und Ausgleich sehen weiterhin eine Einheit) und fügen calloutPath hinzu, die Container-IDs der umgebenden verschachtelten Einfassungen, die äußerste zuerst (die eigene ID eines verschachtelten Rahmens ist der letzte Eintrag). Das getaggte PDF gibt jedem verschachtelten Kasten ein Div innerhalb dessen seines Elternkastens. Symbolbilder werden wie Ressourcenbilder aufgelöst: über das Bildregister des Canvas, die HTML-Option resourceImageUrl und den PDF-Provider resourceBytes.
const resolved = resolveCalloutStylesConfig(config.calloutStyles, resolvedBodyText, resolvedHeadings, resolvedUnorderedLists, config.locale);
// => every inherited field filled from the resolved sections; the optional
// locale picks the language of the continuation strings
const minimal = stripCalloutStylesDefaults(config.calloutStyles);
// => undefined for the built-in `note` default; static defaults dropped#Nummerierte Aussagen und Beweise
Ein Stil mit numbering zählt seine Kästen, so wie amsthm in LaTeX Theorem-Umgebungen zählt (seit postext 1.19). Jeder Kasten druckt seine Bezeichnung und Nummer – „Theorem 2.“ zu Beginn seines ersten Absatzes –, und der title der Einfassung folgt der Nummer in Klammern: :::callout{type="theorem" title="Bradley–Terry"} beginnt mit „Theorem 2 (Bradley–Terry).“. Ein Kasten, der mit einem Bezeichner eröffnet wird ({#thm:main}), ist ein Ziel von Querverweisen, die „Theorem 2“ drucken (:ref{id="thm:main"}), und \ref{thm:main} oder style=number druckt 2.
| Feld | Typ | Standard | Beschreibung |
|---|---|---|---|
label | string | — | Das Wort vor der Nummer: 'Theorem', 'Lemma', 'Definición'. |
counter | string | false | die id des Stils | Der Zähler, den die Kästen erhöhen. Stile, die denselben Zähler nennen, teilen ihn, wie es \newtheorem{lemma}[theorem] tut: Theorem 1, Lemma 2, Theorem 3. 'equation' zählt mit den bezeichneten Gleichungen. false druckt die Bezeichnung ohne Nummer (das „Proof.“ eines Beweises). |
numberingTemplate / resetOn / counterFormat | string / ResourceCounterReset / ResourceCounterFormat | '{n}' / 'never' / 'decimal' | Wie bei einem Ressourcentyp: '{h1}.{n}' mit resetOn: 'h1' nummeriert Theorem 2.1, 2.2 … nach Kapitel; '{h1}.{h2}.{n}' mit 'h2' nach Abschnitt. Ein von mehreren Stilen geteilter Zähler zählt weiter, was auch immer ihre Vorlagen drucken. Ein Platzhalter nimmt nach einem Doppelpunkt einen Stil an, wie bei einem Ressourcentyp: '{h1:A}.{n}' druckt Theorem A.1 in einem mit Buchstaben gezählten Anhang. |
placement | 'runIn' | 'title' | 'runIn' | 'runIn' eröffnet den ersten Absatz des Kastens mit der Bezeichnung (ein Kasten, der mit einer Liste, einer Formel oder einem anderen Kasten beginnt, erhält dafür einen Absatz); 'title' macht die Bezeichnung zum Titel des Kastens, in dessen titleStyle: „Theorem 2 (Bradley–Terry)“. |
bold / italic | boolean | true / false | Der Schnitt der eingebundenen Bezeichnung und ihres Suffixes, unabhängig vom Text des Kastens: Ein kursiver Text (body.italic) lässt eine aufrechte Bezeichnung aufrecht. Der Titel in Klammern wird aufrecht in der normalen Schriftstärke gesetzt. |
suffix | string | '.' | Nach der eingebundenen Bezeichnung und ihrem Titel gesetzt. |
Ein Beweis ist ein Stil mit einer nicht nummerierten Bezeichnung und einem Schlusszeichen:
calloutStyles: [
{ id: 'theorem', numbering: { label: 'Theorem' }, body: { italic: true } },
{ id: 'lemma', numbering: { label: 'Lemma', counter: 'theorem' }, body: { italic: true } },
{ id: 'definition', numbering: { label: 'Definition' } },
{ id: 'proof', backgroundEnabled: false, endMark: '□',
numbering: { label: 'Proof', counter: false, bold: false, italic: true } },
]In einem Buch, das Kapitel für Kapitel umbrochen wird, zählen die Zähler vom vorigen Kapitel aus weiter (LayoutContinuation.statementCounters, das continuationAfter füllt), und die Gliederung des Buchs gibt dem Anker jedes nummerierten Kastens seine Bezeichnung (OutlineEntry.numberLabel), sodass ein Verweis aus einem anderen Kapitel sie druckt.
#Typografie im Kasten
Ein Kasten setzt seinen Inhalt mit seiner eigenen Typografie body und lists; alles andere behält die Stile des Dokuments:
- Absätze übernehmen den
bodydes Kastens: Schrift, Größe, Zeilenabstand, Farbe, Auszeichnungsfarben, Schriftstärken,italic,smallCaps, Ausrichtung, Silbentrennung, Einzug und Absatzabstand. Ein nicht gesetztes Feld erbtbodyText. Eine geerbte Auszeichnungsfarbe behält ihre Bindung an die Palette, sodass sich fetter und kursiver Text sowie Bezeichnungen von:refin einem Kasten mitcolorPaletteändern wie außerhalb. (Bis postext 1.4 blieb Fettes in einem Kasten#295AA3, gleich welche Hauptfarbe galt.) - Aufzählungen übernehmen die
listsdes Kastens (Aufzählungszeichen, Farbe, Glyphengröße und -stärke, Einzug, Abstand, Eintragsabstand) überunorderedLists, und ihr Text ist der Text des Kastens. Einlists.bulletCharoderlists.color, das von dem des Dokuments (unorderedLists) abweicht, ersetzt Aufzählungszeichen oder Farbe jeder Ebene; eines, das ihn wiederholt oder nicht gesetzt ist, lässt jeder Ebene ihren eigenen Wert (unorderedLists.levels), sodass verschachtelte Striche im Kasten erhalten bleiben. - Nummerierte Listen übernehmen
lists.indent,gapunditemSpacingsowielists.color, sobald der Stil es setzt – auch wenn es die Farbe der Aufzählungszeichen des Dokuments ist; ein Stil, der es nicht setzt, behält die Nummern inorderedLists.color. (Bis postext 1.4 erreichte die Farbe die Nummern nur, wenn sie vonunorderedLists.colorabwich, sodass es nichts bewirkte, sie auf genau diese Farbe zu setzen.) Die Nummer selbst – Schrift, Größe und Trennzeichen – stammt aus dem globalenorderedLists, dalistsnur Felder für Aufzählungszeichen hat: Gestalten Sie die Nummern eines Kastens dort. :::paragraphsim Kasten verwenden ihr Absatzformat, auch in verschachtelten Kästen. Die Felder, die das Format nicht setzt, erben denbodyTextdes Dokuments, nicht denbodydes Kastens (auch nicht dessen Kursive oder Kapitälchen).- Gruppen
:::columnshaben keinen eigenen Stil: Jede Spalte teilt die Text- und Listentypografie des Kastens, undcolumnGapsetzt den Abstand zwischen ihnen. - Zitatblöcke übernehmen Schrift, Größe und Schriftstärken des Kastentexts (kursiv und grau, wie im Fließtext) sowie seine Kapitälchen. Überschriften behalten die Überschriftenstile, abgesetzte Formeln die Mathematik-Einstellungen.
- Abbildungen und Tabellen behalten die Legenden- und Tabellenstile des Dokuments, in der Innenbreite des Kastens; ihre normalen und fetten Schriftstärken folgen denen des
bodydes Kastens. - Chips behalten ihren Chip-Stil; eine Größe in
emwird an der Schriftgröße des Kastentexts gemessen. :::spacewird in Zeilen des Kastentexts gemessen (siehe:::spacedazu, wo es entfällt).- Ein verschachtelter Kasten übernimmt seinen eigenen Stil vollständig; sein
span,placement,floatBarrierundsnapToGridwerden ignoriert.
#Hinweise an einem geteilten Kasten
Teilt sich ein Kasten über Spalten oder Seiten (keepTogether: false oder ein Kasten, der höher als eine Spalte ist), beginnt jeder Teil nach dem ersten ohne Titel und Symbol, und standardmäßig sagt nichts dem Leser, dass der Kasten weitergeht. Zwei Optionen fügen die Hinweise hinzu, die ein Buch oder ein Drehbuch verwendet:
repeatTitle: truewiederholt den Titel am Kopf jeder Fortsetzung, gefolgt voncontinuedSuffix– standardmäßig „Key points (cont.)“. Die Wiederholung übernimmt den Titelstil, sodass sie mittextTransform: 'uppercase'das „HAMLET (CONT'D)“ eines Drehbuchs ergibt. Symbol und Reiter bleiben am ersten Teil.continuesMarkerEnabled: truesetztcontinuesMarker– „Continued“ oder „Continúa“ in einem spanischen Dokument – unter die letzte Zeile jedes weitergehenden Teils, innerhalb des Kastens, in Schrift und Größe des Kastentexts: kursiv, soferncontinuesMarkerItalicnichtfalseist, rechtsbündig, soferncontinuesMarkerAlignnicht'left'oder'center'angibt. Der Hinweis nimmt Raum in dem Teil ein, den er abschließt, und der Schnitt wird so gewählt, dass er passt.
calloutStyles: [{
id: 'speech',
keepTogether: false,
titleStyle: { textTransform: 'uppercase' },
repeatTitle: true,
continuedSuffix: "(CONT'D)",
continuesMarkerEnabled: true,
continuesMarker: '(MORE)',
continuesMarkerAlign: 'center',
continuesMarkerItalic: false,
}],:::callout{type="speech" title="Hamlet"}
A speech long enough to run over the foot of the page…
:::Der Teil, der die Seite abschließt, endet mit „(MORE)“, und die nächste Seite beginnt mit „HAMLET (CONT'D)“. Beides gehört zum Paginierungszubehör: In einem barrierefreien PDF sind es Artefakte, und im HTML sind sie vor assistiven Technologien verborgen, sodass der Titel nur einmal vorgelesen wird. Im VDT sind es Textblöcke in designOverlay mit dem Flag artifact: true.