Kapitel 4 · Teil II · Das Handwerk
Konfiguration: Seite und Layout
Seitenformat, Ränder und Grundlinienraster, die Spalten und ihre Abstände sowie die Kopf- und Fußzeilen
Kurz gesagt
Diese Seite behandelt die Einstellungen für das Blatt selbst. Sie wählen das Seitenformat, die Ränder, die Seite, auf der das Buch gebunden wird, und das Raster, auf dem die Textzeilen stehen. Sie legen fest, wie viele Spalten eine Seite hat und wie viel Abstand zwischen ihnen liegt. Außerdem bestimmen Sie, was oben und unten auf jeder Seite gedruckt wird, etwa die Seitenzahl oder der Kapiteltitel. Sie ist eine der neun Seiten der Konfigurationsreferenz.
#Seite
Die Eigenschaft page steuert die physischen Maße und das Erscheinungsbild der Seite.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
sizePreset | PageSizePreset | '17x24' | Vordefiniertes Seitenformat. Setzen Sie 'custom', um ausdrücklich angegebene Breite und Höhe zu verwenden. |
width | Dimension | 17 cm | Seitenbreite. Wird aus sizePreset übernommen, wenn sie fehlt; ein ausdrücklicher Wert hat immer Vorrang (verwenden Sie sizePreset: 'custom' für vollständig eigene Formate). |
height | Dimension | 24 cm | Seitenhöhe. Wird aus sizePreset übernommen, wenn sie fehlt; ein ausdrücklicher Wert hat immer Vorrang. |
margins | PageMargins | 2 cm auf allen Seiten | Abstand zwischen Seitenrand und Inhaltsbereich. Jede Seite (oben, unten, links, rechts) wird unabhängig eingestellt. Mit mirror: true sind die Ränder Ränder für gegenüberliegende Seiten: left ist der Bundsteg (zum Rücken hin) und right der Außensteg; ungerade Seiten (Seite 1 ist ungerade) behalten sie wie angegeben, gerade Seiten vertauschen sie, sodass der Inhaltsbereich – und mit ihm die Spalten, die Bänder für Gleitobjekte, die Container für Kopf- und Fußzeile und die Bänder der Kapitelauftakte – über die Doppelseite wandert. Standardwert false. Siehe unten. |
backgroundColor | ColorValue | transparent | Hintergrundfarbe der Seite. |
dpi | number | 300 | Die Pixel pro Zoll, mit denen das Layout arbeitet: wie physische Einheiten (cm, mm, in, pt) zu seinen Pixeln werden. Eine Bitmap ohne eigene Auflösung erhält ein Layout-Pixel pro Bildpixel und wird daher mit so vielen ppi gedruckt: Behalten Sie 300 für den Druck bei, oder geben Sie den Bildern eine Auflösung (Resource.bitmap.resolution, layout.bitmapResolution; siehe Dokumentformat › Bitmap-Größe). Der Preflight prüft die effektive Auflösung jedes Bilds. |
cutLines | CutLinesConfig | deaktiviert | Zeigt Schnittmarken an den Seitenecken für den Beschnitt im Druck. Wenn aktiviert, vergrößert sich der Canvas um den Anschnitt und die Schnittmarken. Siehe unten. |
baselineGrid | BaselineGridConfig | deaktiviert | Zeichnet das Grundlinienraster über die Seiten, um den vertikalen Rhythmus zu prüfen. Das Layout rastet im Raster ein, ob es gezeichnet wird oder nicht. Siehe unten. |
binding | 'auto' | 'left' | 'right' | 'auto' | Die Kante, an der das Buch gebunden wird. 'auto' ist 'right', wenn layout.writingMode den Wert 'vertical-rl' hat, wenn das Dokument von rechts nach links läuft (direction) oder wenn sein Abschnitt comics von rechts nach links gelesen wird (ein Manga, eine japanische oder traditionell-chinesische Ausgabe), sonst 'left'. Ein rechts gebundenes Buch beginnt auf einer linken Seite und spiegelt seine Ränder umgekehrt. Gilt für das ganze Buch: Das eigene layout eines Überschriftenformats ändert es nie. Siehe Bindung. |
#Gespiegelte Ränder
Bücher werden als Doppelseiten gelesen, und der Bundsteg unterscheidet sich meist vom Außensteg. margins.mirror macht aus den vier Rändern Ränder für gegenüberliegende Seiten:
{
"page": {
"margins": {
"top": { "value": 2, "unit": "cm" },
"bottom": { "value": 2.5, "unit": "cm" },
"left": { "value": 2.2, "unit": "cm" },
"right": { "value": 1.4, "unit": "cm" },
"mirror": true
}
}
}Mit dieser Konfiguration hat jede ungerade Seite links (am Rücken) einen Rand von 2,2 cm und rechts (am Vorderschnitt) einen von 1,4 cm; jede gerade Seite hat links (am Vorderschnitt) 1,4 cm und rechts (am Rücken) 2,2 cm. Jede umbrochene Seite trägt ihren eigenen contentArea auf der VDTPage, sodass alles, was davon abgeleitet ist – Spalten, Bänder für Gleitobjekte über die ganze Breite, Container für Kopf- und Fußzeile und Bänder der Kapitelauftakte mit span: 'page' –, automatisch der gespiegelten Geometrie folgt. Seiten- und Anschnittrahmen, die von Gestaltungselementen mit Verankerung an 'page' / 'bleed' verwendet werden, sind nicht betroffen: Sie beschreiben das physische Blatt, nicht die Ränder.
#Bindung
„Vertikal gesetzte chinesische Dokumente werden auf der rechten Seite gebunden, horizontal gesetzte Dokumente auf der linken Seite“ (clreq §7.1.1.1). page.binding: 'right' umbricht ein Buch für die rechte Kante:
- Seite 1 ist weiterhin ungerade und weiterhin das Recto, sodass
breakBefore.parity,:::pagebreak{parity}, Gestaltungselemente mit einerparityund jede Seitenzählung ihre Bedeutung behalten. Es ändert sich die Seite, auf der das Recto liegt: die linke Seite der Doppelseite. Ein Kapitel, das auf einem neuen Recto beginnt, beginnt auf einer linken Seite (clreq §7.1.3.3). - Mit
margins.mirroristleftweiterhin der Bundsteg, aber nun sind es die ungeraden Seiten, die tauschen: Seite 1 hat ihren Bundsteg rechts, Seite 2 links. Eine Seitenspalte vononeAndHalfbei'outer'/'inner', ein gedrehtes Gleitobjekt, das am Rücken anliegt, die Ränder von Teiltitelseiten und Eckicons von Kästen bei'outer'/'inner'folgen derselben Regel. - Das Dokument gibt es an (
VDTDocument.binding: 'right'), sodass eine Host-Anwendung die Konfiguration nie lesen muss: Die Sandbox zeigt ihre Doppelseiten als[3 | 2]mit Seite 1 allein links vom Rücken, und ihr HTML-Betrachter lässt die Seiten von rechts nach links laufen, öffnet am rechten Ende, und der Pfeil nach links führt zur nächsten Seite.renderToHtmlim Modus multi legt die Reihe von rechts nach links an. - Das PDF enthält
/ViewerPreferences << /Direction /R2L >>und/PageLayout /TwoPageRight(Seite 1 allein, dann Paare), getaggt oder nicht. Acrobat und Foxit folgen diesen Angaben; der integrierte Betrachter von Chrome ignoriert beide.
Paginas und Kolumnentitel wandern nicht von selbst: Eine Vorlage, die die Seitenzahl in der äußeren Ecke druckt, braucht für die rechte Kante eingestellte Elemente für ungerade und gerade Seiten (Elemente nehmen eine parity an).
Ein Buch, das von rechts nach links geschrieben wird (Arabisch, Persisch, Hebräisch …), wird ebenfalls rechts gebunden: 'auto' ergibt die rechte Kante, wenn die direction des Dokuments zu 'rtl' aufgelöst wird. Ein solches Buch spiegelt außerdem seinen gesamten Fluss, sodass seine erste Spalte die rechte ist und seine Einzüge, Aufzählungszeichen, Gleitobjekte und Anmerkungen rechts stehen; die Plätze von Kopf- und Fußzeile bleiben physisch. Siehe Arabischer Satz.
Ein Comic, der von rechts nach links gelesen wird, wird ebenfalls rechts gebunden: 'auto' ergibt die rechte Kante, wenn die Konfiguration einen Abschnitt comics hat, dessen Leserichtung zu 'rtl' aufgelöst wird. Das ist bei einem Manga der Fall (comics.artDirection: 'rtl') und bei einer japanischen oder traditionell-chinesischen Ausgabe eines westlichen Comics. Der Abschnitt entscheidet für das ganze Buch, nicht die :::page-Blöcke eines einzelnen Kapitels. Siehe Comics.
#Vorgegebene Seitenformate
| Vorgabe | Breite | Höhe | Übliche Verwendung |
|---|---|---|---|
'11x17' | 11 cm | 17 cm | Taschenbücher |
'12x19' | 12 cm | 19 cm | Standard-Paperback |
'17x24' | 17 cm | 24 cm | Fachbücher, Lehrbücher |
'21x28' | 21 cm | 28 cm | Zeitschriften, Berichte (nahe A4) |
'broadsheet' | 375 mm | 597 mm | Zeitungen im Broadsheet-Format |
'berliner' | 315 mm | 470 mm | Zeitungen im Berliner Format |
'tabloid' | 280 mm | 430 mm | Zeitungen im Tabloid-Format |
'compact' | 297 mm | 420 mm | Zeitungen im Kompaktformat (ein halb gefaltetes Broadsheet) |
Die vier Zeitungsformate sind neu in postext 1.18 und fehlen in der Zeichnung: Eine Broadsheet-Seite hat fast die vierfache Fläche einer Seite von 21 × 28. Sie werden meist mit dem Layout 'multiple' gesetzt; sechs Spalten sind bei einem Broadsheet üblich, fünf bei einem Tabloid.
#Grundlinienraster
Das Grundlinienraster ist der Rhythmus des Fließtexts: Linien im Abstand einer Fließtextzeile, gezählt von der Oberkante des Inhaltsbereichs. Das Layout verwendet es, ob es gezeichnet wird oder nicht: Überschriften, Listenenden, Kästen, Abbildungen und abgesetzte Formeln bringen den Text wieder ins Raster zurück (sofern ihr eigenes snapToGrid nicht ausgeschaltet ist), sodass die Zeilen benachbarter Spalten registerhaltig bleiben. enabled zeichnet nur die Linien, im Canvas, im PDF und in den Ansichten der Sandbox, um diesen Rhythmus zu prüfen; Ein- oder Ausschalten verschiebt nichts. Die Linien reichen nur über den tatsächlichen Text der Seite – von der ersten bis zur letzten Textzeile –, sodass Bänder für Gleitobjekte, leere Seiten zum Ausgleich der Seitenparität und ungenutzter Raum am Ende kein Raster zeigen.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
enabled | boolean | false | Ob die Rasterlinien gezeichnet werden (Canvas und PDF). Betrifft nur die Darstellung: Das Layout ist in beiden Fällen dasselbe. |
color | ColorValue | #cccccc | Farbe der Rasterlinien. |
lineWidth | Dimension | 0.5 pt | Stärke der Rasterlinien. |
page: {
baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}#Schnittmarken
Wenn aktiviert, vergrößert sich der Canvas um einen Anschnittbereich, und die Engine zeichnet für die Druckproduktion Schnittmarken an jeder Ecke. Das PDF gibt jeder Seite eine TrimBox und eine BleedBox; eine PDF/X-Datei hat sie auch ohne Schnittmarken. In der Sandbox werden sie unter Export › Druckvorbereitung eingestellt.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
enabled | boolean | false | Ob der Canvas um den Anschnitt erweitert wird und Schnittmarken gezeichnet werden. |
bleed | Dimension | 3 mm | Zusätzlicher Bereich um die Seite, der als Anschnitt für den Druck dient. |
markLength | Dimension | 5 mm | Länge jeder Schnittmarke. |
markOffset | Dimension | 3 mm | Abstand zwischen der Schnittkante und dem Anfang jeder Schnittmarke. Eine Marke beginnt nie innerhalb des Anschnitts: Ist bleed breiter, beginnt die Marke an der Anschnittkante. |
markWidth | Dimension | 0.25 pt | Stärke der Schnittmarken. |
color | ColorValue | #000000 | Farbe der Schnittmarken im Canvas (der Bildschirmvorschau). Das PDF zeichnet sie immer in Passerfarbe (siehe unten). |
Das Blatt wächst auf jeder Seite um bleed + markOffset + markLength, und die beschnittene Seite liegt in seiner Mitte. Jede Ecke des Endformats erhält zwei Marken der Länge markLength, jede in der Flucht einer der beiden Kanten, die sich dort treffen. Eine Marke beginnt markOffset außerhalb des Endformats oder an der Anschnittkante, wenn bleed der größere der beiden Werte ist, sodass keine Marke über Motiven liegt, die in den Anschnitt laufen. Mit den Standardwerten (3 mm Anschnitt, 3 mm Abstand) reichen die Marken von 3 bis 8 mm außerhalb des Endformats, und außerhalb von ihnen läuft ein 3 mm breiter leerer Streifen um das Blatt. cropMarkSegments(page, doc.config.page, doc.trimOffset) gibt die acht Marken einer Seite in Seitenpixeln zurück, die Marken, die die Canvas- und PDF-Backends zeichnen. Das dritte Argument ist die Lage des Endformats im Blatt, der Wert, aus dem die TrimBox des PDFs geschrieben wird; fehlt es, wird es auf dieselbe Weise aus cutLines berechnet.
Außerhalb des Anschnitts wird nichts außer den Marken gedruckt. Alles, was die Seite zeichnet, einschließlich der Gestaltungselemente mit Verankerung an 'page' oder 'bleed', wird im Canvas, im PDF und in der HTML-Ausgabe auf die Anschnittbox beschnitten, so wie ein DTP-Export es beschneidet: Ein Band oder ein Bild, das absichtlich über den Anschnitt hinaus gesetzt ist, wird an der Anschnittkante abgeschnitten, wo es beim Beschnitt ohnehin verloren ginge. Bis postext 1.4 lief ein solches Element über die Marken hinweg bis an den Rand des Blatts.
Im PDF (postext-pdf) ist die MediaBox jeder Seite das ganze Blatt. Die Seite enthält außerdem eine TrimBox, die beschnittene Seite, und eine BleedBox, das Endformat zuzüglich Anschnitt, die Ausschieß- und Preflight-Werkzeuge auslesen. Die Marken werden in Passerfarbe gezeichnet, der Separation /All, sodass sie auf jeder Druckplatte erscheinen. Das gilt unabhängig vom Farbraum, in dem das PDF geschrieben wird (RGB, Graustufen oder CMYK): Ein einfaches Schwarz käme beim Drucker als Tiefschwarz oder nur als Schwarzplatte an. color gilt nur für den Canvas.
#Seitennummerierung
Der Block page.pageNumbering steuert, wie Seitenbezeichnungen formatiert werden und wo der Zähler beginnt. Er legt nur den Standardwert für das ganze Dokument fest – um die Nummerierung mitten im Dokument neu zu beginnen (z. B. eine Titelei mit römischen Zahlen, auf die dezimal ab 1 nummerierte Kapitel folgen), verwenden Sie die Direktive :::numbering (siehe Dokumentformat → Direktiven).
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
format | 'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha' oder ein ostasiatischer Stil | 'decimal' | Zahlenstil, mit dem Seitenbezeichnungen dargestellt werden. Die ostasiatischen Stile ('trad-chinese-informal' nummeriert die Seiten mit 一, 二, 三) sind unter Schreibweisen der Nummernformate aufgeführt. |
startAt | number | 1 | Zahlenwert, den die erste Seite unabhängig vom Format erhält. format: 'lower-roman', startAt: 1 ergibt i, ii, iii, …; format: 'decimal', startAt: 17 ergibt 17, 18, 19, …. |
Die berechnete Bezeichnung wird auf jeder VDTPage als pageLabel gespeichert und ist das, worauf der Platzhalter {pageNumber} in Kopf- und Fußzeile aufgelöst wird. PDFs schreiben einen Zahlenbaum /PageLabels, sodass die Seitenanzeige und die Navigation „Gehe zu Seite“ in Vorschau und Acrobat genau den gedruckten Bezeichnungen entsprechen. Ein Stil, für den PDF keinen Code hat (chinesische Zahlzeichen, eingekreiste Ziffern und Ziffern voller Breite), wird Seite für Seite ausgeschrieben, sodass der Betrachter ebenfalls 一, 二, 三 anzeigt.
Schreibweisen der Nummernformate
Drei Einstellungen wählen ein Nummernformat, und jede hat ihre eigene Schreibweise entwickelt: Seitenbezeichnungen (page.pageNumbering.format und :::numbering{format=…}) sagen lower-roman, nummerierte Listen (orderedLists.numberFormat) sagen arabic für dezimal, und Ressourcentypen (counterFormat) sagen roman-lower. Jede von ihnen akzeptiert alle unten aufgeführten Schreibweisen, sodass ein Format, das aus einer Einstellung kopiert wurde, auch in den anderen funktioniert. Bei Namen spielt die Groß- und Kleinschreibung keine Rolle; bei den Formen aus einem Zeichen schon (i und I unterscheiden sich).
| Format | Druckt | Akzeptierte Schreibweisen |
|---|---|---|
| Dezimal | 1, 2, 3 | decimal, arabic, 1 |
| Römisch, klein | i, ii, iii | lower-roman, roman-lower, i |
| Römisch, groß | I, II, III | upper-roman, roman-upper, I |
| Buchstaben, klein | a, b, c | lower-alpha, alpha-lower, lower-latin, a |
| Buchstaben, groß | A, B, C | upper-alpha, alpha-upper, upper-latin, A |
| Chinesische Zahlzeichen, vereinfacht | 一, 十二, 一百零一 | simp-chinese-informal, 一 in einem Dokument in vereinfachter Schrift |
| Chinesische Zahlzeichen, traditionell | 一, 十二, 一萬 | trad-chinese-informal, cjk-ideographic, 一 in einem Dokument in traditioneller Schrift |
| Chinesische Finanzzahlzeichen, vereinfacht | 壹, 壹拾贰, 壹佰贰拾 | simp-chinese-formal, 壹 in einem Dokument in vereinfachter Schrift |
| Chinesische Finanzzahlzeichen, traditionell | 壹, 壹拾貳, 壹佰貳拾 | trad-chinese-formal, 壹 in einem Dokument in traditioneller Schrift |
| Chinesische Ziffern | 一二〇, 二〇二六 | cjk-decimal, 〇 |
| Himmelsstämme | 甲, 乙, 丙 … 癸 | cjk-heavenly-stem, 甲 |
| Erdzweige | 子, 丑, 寅 … 亥 | cjk-earthly-branch, 子 |
| Japanische Zahlzeichen | 一, 十二, 百一, 一万一 | japanese-informal, 一 in einem japanischen Dokument |
| Japanische formelle Zahlzeichen | 壱, 壱拾弐, 壱百 | japanese-formal, 壱 |
| Hiragana, Gojūon-Reihenfolge | あ, い, う … ん, ああ | hiragana, あ |
| Katakana, Gojūon-Reihenfolge | ア, イ, ウ … ン, アア | katakana, ア |
| Hiragana, Iroha-Reihenfolge | い, ろ, は … す, いい | hiragana-iroha, い |
| Katakana, Iroha-Reihenfolge | イ, ロ, ハ … ス, イイ | katakana-iroha, イ |
| Eingekreist | ①, ②, ③ … ㊿ | circled-decimal, ① |
| Ziffern voller Breite | 1, 2, 3 | fullwidth-decimal, 1 |
| Arabisch-indische Ziffern | ١, ٢, ٣ … ١٠ | arabic-indic, ١ |
| Persische Ziffern | ۱, ۲, ۳ … ۱۰ | persian, urdu, ۱ |
| Arabische Buchstaben, Abdschad-Reihenfolge | أ, ب, ج, د, هـ … غ, أأ | abjad, أبجد |
| Arabische Buchstaben, alphabetische Reihenfolge | أ, ب, ت, ث … ي, أأ | hijai, arabic-alpha, arabic-alphabetic, أبتث |
| Abdschad-Zahlzeichen | ا, ب … يا (11), غتمو (1446) | arabic-abjad |
| Abdschad-Zahlzeichen, maghrebinische Werte | ص (60), ض (90), ش (1000) | arabic-abjad-maghrebi, maghrebi-abjad |
Die ostasiatischen Stile behalten in allen drei Einstellungen ihre Namen aus CSS Counter Styles. Die informellen chinesischen Zahlzeichen schreiben 十 für 10 bis 19 ohne vorangestelltes 一 (十二, aber 一百一十), ein einziges 零 für eine Folge von Nullen innerhalb der Zahl (一百零一, 一千零五十) und 万 oder 萬 für zehntausend, 亿 oder 億 für hundert Millionen (一万零一十). Nur cjk-decimal verwendet 〇, Ziffer für Ziffer, wie Jahreszahlen geschrieben werden (二〇二六, GB/T 15835—2011). Die Stämme enden bei 10, die Zweige bei 12 und die eingekreisten Ziffern bei 50; darüber hinaus wird die Zahl in Ziffern gedruckt. 一 und 壹 folgen der Schrift des locale des Dokuments: traditionell für zh-Hant, zh-TW oder zh-HK, sonst vereinfacht. Manche älteren Ausgaben schreiben 101 als 一百一 ohne 零; Postext druckt diese Form nicht.
Die japanischen Stile (seit postext 1.16) folgen ebenfalls CSS Counter Styles. japanese-informal schreibt 十 ohne vorangestelltes 一 und kein 零 für eine leere Stelle (百一, 千十), und japanese-formal die 大字 壱 弐 参 拾 百 阡, wobei 壱 vor jeder Einheit erhalten bleibt (壱拾, 壱百). CSS beendet beide bei 9.999; Postext fährt in Vierergruppen von Ziffern mit 万 億 兆 fort (formell 萬 億 兆), wobei jede Gruppe ihr 一 vor einer Einheit behält: 一万一 ist 10.001, 一億一万 100.010.000. In einem japanischen Dokument (ja, ja-JP …) bedeutet 一 dasselbe wie japanese-informal, sodass 第{1:一}章 dort 第百一章 druckt und in einem chinesischen 第一百零一章; 壹 bleibt bei den chinesischen formellen Zahlzeichen. Die Kana-Reihen sind die CSS-Listen: 48 Kana in Gojūon-Reihenfolge (ゐ und ゑ eingeschlossen) und 47 in der Reihenfolge des Iroha-Gedichts; nach dem letzten fahren sie mit zwei Kana fort (ああ, いい), und sie haben keine Null, sodass ein mit 0 nummerierter Punkt 0 druckt. Kanji-Ziffern im Stellenwertsystem (二〇二六), die Form von Jahreszahlen und Paginas, sind cjk-decimal.
Die arabischen Stile behalten die CSS-Namen, wo CSS einen hat (arabic-indic, persian; urdu und maghrebi-abjad aus den Ready-made Counter Styles des W3C werden als persian und arabic-abjad-maghrebi gelesen). arabic behält seine alte Bedeutung, die europäischen Ziffern. arabic-abjad schreibt die additiven Abdschad-Zahlzeichen des klassischen Arabisch und der Blattzählung von Handschriften, höchster Wert zuerst: 11 ist يا, 1446 غتمو, und die Anzahl der Tausender steht vor غ (2000 بغ, 1002 غب); über 999.999 hinaus wird die Zahl in Ziffern gedruckt. Die W3C-Notiz verwendet den Namen für eine Reihe aus 28 Buchstaben, in der 11 ك ist; Postext nennt diese Reihe abjad, die Buchstabenzählung von Listenpunkten in Abdschad-Reihenfolge (أ، ب، ج، د، هـ), und hijai die alphabetische Reihenfolge (أ، ب، ت، ث). Beide schreiben den ersten Buchstaben mit seiner Hamza (أ) und ein He, das allein stünde, als هـ mit einem Tatweel, sodass keiner als die Ziffern ١ und ٥ gelesen wird; über 28 hinaus verdoppeln sie sich, wie lower-alpha es tut (أأ, أب). Die maghrebinischen Werte folgen dem Merkspruch صعفض قرست ثخذ ظغش (ص 60, ض 90); die W3C-Liste vertauscht ص und ض. Ein einzelnes أ kann die beiden Buchstabenreihen nicht unterscheiden, deshalb sind ihre Kürzel ihre ersten vier Buchstaben: {1:أبجد}, {1:أبتث}. Die eigenen Ziffern eines Dokuments werden mit numerals eingestellt.
Die übrigen Schreibweisen sind für Konfigurationen gedacht, die keine Typprüfung durchlaufen: JSON-Vorlagen und reines JavaScript. Die TypeScript-Typen nennen weiterhin nur die eigene Schreibweise jeder Einstellung – die, die die Sandbox schreibt und resolveAllConfig zurückgibt, die ostasiatischen Namen eingeschlossen –, sodass eine typisierte PostextConfig bei ihr bleibt und eine andere Schreibweise einen Cast braucht.
// JavaScript or a JSON preset (in TypeScript, each setting's own spelling)
orderedLists: { numberFormat: 'decimal' }, // same as 'arabic'
page: { pageNumbering: { format: 'roman-lower' } }, // same as 'lower-roman'
resourceTypes: [{ id: 'plate', counterFormat: 'upper-roman', … }], // same as 'roman-upper'resolveAllConfig wandelt die Listen- und Seitenformate in die Schreibweise ihrer jeweiligen Einstellung um – 'decimal' wird in orderedLists zu 'arabic' aufgelöst, 'roman-lower' in page.pageNumbering zu 'lower-roman' –, und stripConfigDefaults verwirft eine Schreibweise des Standardwerts. Die Bedienfelder der Sandbox zeigen jede der drei Einstellungen in ihrer eigenen Schreibweise, gleich welche die Konfiguration verwendet. Jeder andere Wert – roman, 01, ein Tippfehler – nummeriert dezimal, statt undefined zu drucken, und wird als Konfigurationswarnung gemeldet. Die Nummerierungsvorlagen für Überschriften nehmen dieselben Namen nach dem Doppelpunkt an ({1:roman-upper} ist {1:I}), neben ihrem eigenen mit Nullen aufgefüllten {1:01}.
#Layout
Die Eigenschaft layout steuert, wie die Spalten im Inhaltsbereich angeordnet werden.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
layoutType | 'single' | 'double' | 'oneAndHalf' | 'multiple' | 'double' | Anordnung der Spalten. Einzelheiten zu jedem Typ finden Sie unten. |
columnCount | number | 3 | In wie viele gleich breite Spalten ein Layout 'multiple' den Fließtext teilt: eine ganze Zahl von 3 bis 8. Ein Wert außerhalb dieses Bereichs oder eine nicht ganze Zahl wird begrenzt und gemeldet (siehe Layout-Typen). Das eigene Layout 'multiple' eines Überschriftenformats übernimmt die Spaltenzahl des Dokuments, sofern es keine eigene setzt. Seit postext 1.18. |
gutterWidth | Dimension | 0.75 cm | Horizontaler Abstand zwischen den Spalten. Gilt nur für mehrspaltige Layouts. |
sideColumnPercent | number | 33 | Breite der Seitenspalte als Prozentsatz des Inhaltsbereichs. Jeder Wert, der beiden Spalten etwas Breite lässt, wird wie angegeben verwendet; einer, der das nicht täte, wird begrenzt, und der Build meldet es (siehe Layout-Typen). Gilt nur für das Layout 'oneAndHalf'. |
sideColumnRole | 'text' | 'floats' | 'text' | Was die Seitenspalte enthält: Fließtext (er fließt nach der Hauptspalte dorthin) oder nur die mit span: 'side' platzierten Ressourcen und Kästen – eine Randspalte nur für Gleitobjekte. Nur 'oneAndHalf'. Mit 'text' wird ein Absatz, der von einer Spalte in die andere weiterläuft, für die Breite der Spalte, in der er fortgesetzt wird, neu umbrochen; bis postext 1.4 behielt er die Zeilen der Spalte, in der er begann, und eine für die Hauptspalte gesetzte Zeile ragte über die Seitenspalte hinaus, die sie abschnitt. |
sideColumnSide | 'right' | 'left' | 'outer' | 'inner' | 'right' | Kante des Inhaltsbereichs, an der die Seitenspalte steht. 'outer' / 'inner' folgen der Seitenparität, wenn die Ränder gespiegelt sind (die Außenkante eines Rectos ist seine rechte Kante, die eines Versos seine linke). Nur 'oneAndHalf'. |
columnRule | ColumnRuleConfig | deaktiviert | Optionale Linie, die zwischen den Spalten gezeichnet wird. Siehe unten. |
fitFiguresToPage | boolean | false | Verkleinert eine Abbildung (Bitmap oder SVG), deren Bild, Legende und Anmerkung höher wären als der Inhaltsbereich, bis sie hineinpassen (ein Bild mit einem Sicherheitsbereich, Resource.safeArea, wird zuerst in voller Breite innerhalb dieses Bereichs beschnitten und nur dann verkleinert, wenn es immer noch nicht passt), und setzt eine Abbildung im Textfluss, die für den in ihrer Spalte verbleibenden Platz etwas zu hoch ist, kleiner (bis auf die Hälfte ihrer Breite, wobei die Legende die Satzbreite der Spalte behält), damit sie bei ihrem Text bleibt. Ein verkleinertes Bild steht in seinem Platz gemäß placement.align. Der HTML-Betrachter schaltet die Einstellung ein, da seine Seiten nur so hoch wie der Bildschirm sind; gedruckte Seiten werden für ihre Abbildungen bemessen. |
bitmapResolution | 'document' | 'file' | number | 'document' | Wie eine Bitmap ohne eigenes bitmap.resolution ihre natürliche Druckgröße erhält. 'document' liest ihre Pixel mit page.dpi; eine Zahl ist die ppi jeder solchen Bitmap (300: Ein Bild von 2400 px ist 203,2 mm breit, gleich welche dpi die Seite hat); 'file' verwendet die Auflösung, die ihre Datei angibt (bitmap.fileResolution), wobei 72 und 96 als nicht gesetzt gelten, sonst page.dpi. Die Spalte begrenzt das Bild weiterhin, und ein kleineres wird nie vergrößert. Siehe Dokumentformat › Bitmap-Größe. Seit postext 1.24. |
floatShrink | FloatShrinkConfig | mode: 'never' | Der Standardwert des Dokuments für placement.shrink eines gleitenden Bilds (mode: 'never', 'page' oder 'slot') und placement.minScale (minScale, 0,7, wenn nicht gesetzt): Das Bild wird unter Beibehaltung seiner Proportionen auf den Platz seines Slots verkleinert, statt weiterzuwandern (siehe Dokumentformat › Platzierung). Die Platzierung einer Ressource und danach die defaultPlacement ihres Typs haben Vorrang. fitFiguresToPage begrenzt jede Abbildung auf den Inhaltsbereich; floatShrink betrachtet das Band, das ein Gleitobjekt tatsächlich einnähme, unter einem Kapitelauftakt, neben anderen Gleitobjekten oder über Fußnoten. Seit postext 1.24. |
wrap | TextWrapConfig | minTextWidth: 12em, minLinesBeside: 2, defaultWidth: 0.45 | Text, der neben einem Bild oder einem Kasten läuft, das schmaler als seine Spalte ist (placement.wrap, wrap eines Kastens): gap, der Abstand zwischen dem Element und dem Text (eine Fließtextzeile, wenn nicht gesetzt); minTextWidth, die schmalste Satzbreite, die der Text daneben einnehmen darf, eine Länge oder ein Anteil der Spalte (schmaler: Das Element nimmt sein Band ganz ein, mit einer Warnung textWrap); minLinesBeside, die Mindestzahl an Zeilen, für die sich das Setzen daneben lohnt; defaultWidth, der Anteil der Spalte, den ein umflossenes Element einnimmt, wenn es keine width setzt. Siehe Dokumentformat › Textumfluss. Seit postext 1.24. |
floatsAtCitingPage | boolean | false | Der Standardwert des Dokuments für placement.citingPage: Ein Gleitobjekt 'top' oder 'auto' darf den Kopf der Seite (ein Gleitobjekt über die ganze Seitenbreite) oder der Spalte (ein Spaltengleitobjekt) einnehmen, auf der die Zeile landet, die es zuerst zitiert, statt des ersten freien Platzes nach dieser Zeile; der Text über dem Verweis rückt darunter nach unten (siehe Dokumentformat › Platzierung). Die Platzierung einer Ressource und danach die defaultPlacement ihres Typs haben Vorrang. Seit postext 1.25. |
maxTopFraction | number | 0.7 | Der größte Anteil an der Höhe einer Spalte, von 0 bis 1, den ein Gleitobjekt am Kopf der Seite oder Spalte, die es zitiert, zusammen mit den dort bereits stehenden Gleitobjekten einnehmen darf, damit die Seite Platz für ihren Text behält (\topfraction von LaTeX). Ein Gleitobjekt, das mehr einnähme, kommt an seinen üblichen Platz. Seit postext 1.25. |
hugClosingFloats | boolean | true | Auf der Schlussseite eines Kapitels (und des Dokuments) rücken die unter dem letzten Textband gesetzten Abbildungen und Tabellen über die ganze Seitenbreite nach oben, bis sie einen Gleitobjektabstand darunter stehen, gestapelt in ihrer Reihenfolge: Dort folgt ihnen nichts mehr. false lässt sie, wo ihre Platzierung sie hingesetzt hat, sodass ein Gleitobjekt mit position: 'bottom' auf der Schlussseite wie auf jeder anderen Seite am Seitenfuß endet – etwa in einem Datenblatt, dessen Umriss auf jeder Seite auf derselben Höhe endet. Seiten mit einer Seitenspalte verschieben sie nie. |
inlineResourceGap | 'around' | 'above' | 'around' | Wo eine Ressource im Textfluss (placement.position: 'here', eingebettet mit ::resource) den Gleitobjektabstand, eine Zeile, einhält. 'around' hält ihn über und unter der Ressource ein, und der Text danach kehrt unter diesem Abstand ins Grundlinienraster zurück; eine Überschrift, eine Liste, ein Kasten oder eine weitere Ressource im Textfluss direkt danach teilt sich den Abstand darunter mit ihrem eigenen Abstand oberhalb, wobei der größere von beiden gilt. 'above' hält ihn nur darüber ein: Der Text nach der Ressource setzt an der nächsten Rasterlinie fort, wie nah diese auch ist – irgendwo zwischen null und einer Zeile –, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel eine Ressource einbetten, werden mit 'above' gelesen, damit sich ihre Seiten nicht verschieben (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Eine für 1.4 in Code geschriebene Konfiguration behält den alten Abstand, indem sie 'above' selbst setzt oder über pinLegacyInlineGap aus postext/bundle. |
inlineResourceGapInBoxes | boolean | true | Ob eine Ressource im Textfluss innerhalb eines Kastens (:::callout) den Abstand einhält, den inlineResourceGap festlegt, eine Zeile des eigenen Texts des Kastens: über der Ressource und mit 'around' auch darunter, wobei der größere Wert aus diesem Abstand und dem eigenen Abstand des nächsten Blocks gilt. Am Kopf oder Fuß des Kastens oder eines Fragments eines geteilten Kastens setzt stattdessen der Innenabstand die Ressource ab, und es wird kein Abstand hinzugefügt. false setzt die Ressource direkt unter den Text davor und den Text danach direkt unter die Ressource, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel eine Ressource in einem Kasten einbetten, werden mit false gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat); in Code bewirkt pinLegacyBoxResourceGap aus postext/bundle dasselbe. |
inlineCaptionSide | boolean | true | Ob eine im Text gesetzte Ressource (position: 'here') placement.captionSide so übernimmt wie ein Spaltengleitobjekt. In einem Layout mit anderthalb Spalten, dessen Seitenspalte Gleitobjekten vorbehalten ist (sideColumnRole: 'floats'), kommen ihre Legende und Anmerkung in die Seitenspalte, auf Höhe der Oberkante ihres Körpers, wo diese Spalte daneben frei ist; der Block in der Textspalte ist dann nur so hoch wie der Körper allein. Wo die Seitenspalte belegt ist und auf einer Seite ohne Seitenspalte bleibt die Legende unter dem Körper. false beschränkt seitliche Legenden auf Spaltengleitobjekte, wie bis postext 1.27. Seit postext 1.28. Konfigurationen, die von früheren Versionen mit einem Layout 'oneAndHalf' gespeichert wurden und deren Kapitel eine Ressource einbetten, werden mit false gelesen; in Code bewirkt pinLegacyInlineCaptionSide aus postext/bundle dasselbe. |
boxChildSplitMinLines | number | 2 | Mindestzahl an Zeilen eines Absatzes oder Listenpunkts, die ein Schnitt darin auf jeder Seite stehen lässt, wenn ein Kasten geteilt wird (splitMinLines, unter Kastenstile, zählt weiterhin alle Zeilen des Kastens auf jeder Seite des Schnitts). Eine ganze Zahl, mindestens 1. Mit dem Standardwert lässt ein Schnitt nie eine einzelne Zeile eines Absatzes oder Punkts am Fuß einer Spalte oder am Kopf der nächsten zurück; ein Kastenformat, dessen splitMinLines niedriger ist, setzt stattdessen die Grenze. 1 erlaubt einem Schnitt, eine Zeile des Absatzes oder Punkts auf einer Seite zu lassen, wie bis postext 1.4. Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel ein :::callout enthalten, werden mit 1 gelesen (siehe Pakete, die postext 1.4 oder früher geschrieben hat); in Code bewirkt pinLegacyBoxChildCut aus postext/bundle dasselbe. |
flowColumns | boolean | true | Ein Zaun :::columns außerhalb eines Kastens setzt seine Blöcke in Unterspalten der Textspalte (oder mit span="page" über die ganze Seite), und eine Gruppe, in einem Kasten oder im Text, wird zwischen ihren Unterspalten geschnitten, wenn sie nicht passt, und in der nächsten Spalte oder auf der nächsten Seite fortgesetzt (siehe Dokumentformat › :::columns). false ignoriert den Zaun außerhalb eines Kastens und schneidet nie innerhalb einer Gruppe, wie bis postext 1.24; Konfigurationen, die von früheren Versionen gespeichert wurden und deren Kapitel einen Zaun :::columns enthalten, werden mit false gelesen; in Code bewirkt pinLegacyFlowColumns aus postext/bundle dasselbe. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.25. |
floatsUnderOpener | boolean | true | Unter einem Kapitelauftakt über die ganze Seitenbreite (eine Überschriftenebene oder ein Format mit span: 'page'), der über zwei oder mehr Textspalten steht, ist der Kopf der eigenen Spalte des Auftakts, direkt unter seinem Band, ein Platz für ein Gleitobjekt 'top' oder 'auto', auf Höhe der Köpfe der anderen Spalten: Ein gleitender Kasten, dessen Zaun direkt nach dem Auftakt steht, oder eine dort eingebettete Ressource steht unter dem Auftakt in der ersten Spalte (mit columns ab dort über mehrere Spalten), und der Text der Spalte beginnt darunter. Ein im laufenden Text zitiertes Gleitobjekt folgt weiterhin der Zeile, die es zitiert. false bietet dort keinen Platz an, sodass ein solches Gleitobjekt ab der zweiten Spalte landet, wie bis postext 1.24; Konfigurationen, die von früheren Versionen gespeichert wurden und eine Überschrift über die ganze Seitenbreite setzen, werden mit false gelesen; in Code bewirkt pinLegacyOpenerHeadFloats aus postext/bundle dasselbe. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.25. |
openerFloats | 'allow' | 'warn' | 'avoid' | 'allow' | Gleitobjekte auf einer Auftaktseite: der Seite, mit der ein Teil beginnt, der Seite, die eine Überschrift mit ihrem eigenen Umbruch beginnt (breakBefore oder eine Überschrift mit span: 'page', die eine Seite eröffnet), und der ersten Seite eines Dokuments, das mit einer Überschrift beginnt. Ein Gleitobjekt ist eine Abbildung, eine Tabelle oder ein Comicstreifen mit gleitender Platzierung oder ein :::callout, der an den Kopf oder Fuß einer Seite gleitet, gleich ob er eine Spalte, die Seitenbreite oder die Seitenspalte einnimmt; eine im Textfluss eingebettete Ressource ('here'), ein Kasten 'fixed' und ein Kasten mit span: 'side' sind keine. 'allow' setzt dort Gleitobjekte wie auf jeder Seite. 'warn' umbricht die Seite genauso und meldet jedes Gleitobjekt darauf (eine Warnung openerFloat, siehe Warnungen im Dokument). 'avoid' hält die Auftaktseite frei: Ein Gleitobjekt, das dort landen würde, nimmt den ersten freien Platz danach ein, sodass die Seite nur ihren Auftakt und Text enthält. Ein formatierter Abschnitt behält den Wert des Dokuments. Seit postext 1.28. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | Wie die Zeilen laufen. 'vertical-rl' setzt chinesischen und japanischen Text vertikal: die Zeichen von oben nach unten, jede Zeile links von der vorigen. Das layout eines Überschriftenformats übernimmt die Einstellung, sofern es keine eigene setzt, sodass ein horizontaler Anhang auf ein vertikales Buch folgen kann. Siehe Vertikale Schrift. |
#Vertikale Schrift
Mit writingMode: 'vertical-rl' wird eine Seite wie eine horizontale Seite umbrochen, die eine Vierteldrehung im Uhrzeigersinn gedreht ist. Der Fluss wird in einem Rahmen gesetzt, der so breit ist, wie das Blatt hoch ist; seine Zeilen sind die Spalten des vertikalen Texts, von rechts gelesen, und alles, was die Engine mit Zeilen tut (Umbruch, Ausschluss, Gleitobjekte, Fußnoten, Regeln zum Zusammenhalten), funktioniert in diesem Rahmen. Auf dem Blatt gilt also:
- Eine Spalte des Layouts ist eine Stufe (栏):
layoutType: 'double'ergibt zwei übereinander gestapelte Stufen, von oben rechts gefüllt;gutterWidthist der Abstand zwischen ihnen und die Spaltenlinie eine waagerechte Linie zwischen ihnen. Stufen werden am Ende eines Kapitels nicht ausgeglichen (clreq §7.1.3.4): Der Spaltenausgleich ist in einem vertikalen Dokument ausgeschaltet, sofernheadings.balancing.enablednicht gesetzt ist. - Was der Fluss „oben“ nennt, ist die rechte Kante des Blatts, wo das Lesen beginnt: Ein Gleitobjekt oben steht rechts auf der Seite, ein Gleitobjekt unten links, ein Kapitelauftakt über die ganze Seite ist ein Band an der rechten Kante entlang, Fußnoten landen am linken Ende jeder Stufe. Ein Gestaltungselement, das am Kopf der Seite verankert ist (eine Überschriftengestaltung, ein fest platzierter Kasten), ist an der rechten Kante verankert.
sideColumnSide'left'ist die obere Stufe,'right'die untere;'outer'und'inner'gelten als'right'und'left'. - Die Ränder des Flusses sind die gedrehten Ränder des Blatts: Der rechte Rand ist der Kopf des Flusses, der obere Rand seine linke Seite.
page.marginsbehalten ihre Namen auf dem Blatt. - Kolumnentitel, Paginas, Schnittmarken und der Seitenhintergrund bleiben auf dem Blatt und werden horizontal gesetzt, wie clreq es für vertikale Bücher beschreibt.
- Abbildungen und Tabellen stehen aufrecht. Eine Abbildung füllt die Höhe ihrer Stufe, soweit ihre Legende es zulässt, höchstens so breit wie die Seite; die Breite, die sie einnimmt, ist der Platz, den sie im Fluss belegt. Ihre Legende wird horizontal darunter gesetzt, ebenso die Zellen einer Tabelle: Beide werden als horizontaler Text gemessen. Eine Tabelle wird aufrecht über die Seite gesetzt, ihre Zeilen auf die Stufe zugeschnitten, wenn sie höher ist.
placement.alignsetzt eine Abbildung an den Kopf ('left'), in die Mitte oder an den Fuß ihrer Stufe. Einplacement.rotatewird dort, wo die Abbildung in vertikalem Text zuerst erwähnt wird, nicht angewendet: Der Build meldet eine InhaltswarnungrotateIgnoredVertical. Ein horizontaler Abschnitt des Buchs (ein Überschriftenformat, dessenlayout'horizontal-tb'setzt) dreht seine Abbildungen wie gewünscht. - Ein Bild einer Gestaltung (die Illustration eines Kapitelauftakts, einer Teiltitelseite) steht ebenfalls aufrecht. Sein Kasten im Fluss wird mit vertauschter Breite und Höhe des Bilds bemessen, sodass
size.widthangibt, wie weit das Bild die Spalte hinunterreicht, und seine Breite auf dem Blatt sich aus seinen Proportionen ergibt. - Zeichen: Han-Zeichen, Kana und Formen voller Breite stehen aufrecht, je ein Geviert; lateinische Wörter und Zahlen werden mit ihren horizontalen Breiten seitwärts gedreht; Satzzeichen nehmen die vertikale Form der Schrift an. Pausen- und Schlusszeichen werden nie gedreht: Eine Schrift für das Festland setzt 、。,. in die obere rechte Ecke der Zelle und !?:; in ihre rechte Hälfte, eine Schrift für Taiwan oder Hongkong zentriert sie (
cjk.region). Klammern nehmen ihre vertikalen Formen an, und “ ” ‘ ’ werden in Festlandtext als 『』「」 gelesen. Striche, Auslassungspunkte und der Wellenstrich nehmen die vertikale Form der Schrift an, wo sie eine hat (Noto CJK ordnet die von — zusammen mitfwiddem Featurevertzu: eine Linie mitten durch die Zelle nach unten), sonst werden sie gedreht, mit ihrer Farbe zentriert auf der Achse der Spalte. Ein 破折号 (——) in chinesischem Text ist eine einzige Linie die Spalte hinunter: Seine vertikalen Formen ließen an beiden Enden jeder Zelle eine Lücke, deshalb wird jeder Strich mit der Zeile gedreht und wie in horizontalem Text gedehnt (siehe Breite der Satzzeichen). Eine Zahl mit höchstens zwei Ziffern steht in einer aufrechten Zelle, es sei denn, sie steht in einem lateinischen Satz, dessen Wörtern sie folgt (siehe Zahlen im vertikalen Text). Der Mittelpunkt (·) nimmt in Festlandtext eine halbe Zelle ein und in Text aus Taiwan und Hongkong eine ganze. Die Zeichen, die Unicode aufrecht setzt (× © ± § ℃ ① und ähnliche), stehen in einer eigenen Zelle, auch innerhalb einer Zahl:3×4sind 3 und 4 seitwärts mit einem aufrechten × dazwischen. Ein Apostroph oder ein Mittelpunkt zwischen zwei Buchstaben eines lateinischen Worts (don’t,l·l) bleibt im Wort, seitwärts. Ein lateinischer Absatz in einem vertikalen Fluss folgt denselben Regeln. Formeln im Textfluss, Chips und Farbfelder werden mit der Zeile seitwärts gedreht. - Jedes Zeichen wird so gemessen, wie es gezeichnet wird: Eine Zelle rückt um ihre Zelle die Zeile hinunter, eine seitwärts gedrehte Folge um ihre horizontale Breite. Text, der auf dem Blatt horizontal bleibt (Kolumnentitel, Paginas, Legenden, Tabellenzellen), wird horizontal gemessen.
- Die Breite der Satzzeichen, die hängenden Satzzeichen und der Abstand zwischen Han und Latein gelten die Zeile hinunter so, wie sie quer gelten. Der Leerraum vor einer Glyphe liegt über ihr und der danach unter ihr: Ein 、 nach Kaiming nimmt eine halbe Zelle ein,
」「werden auf anderthalb Zellen gestaucht, eine öffnende Klammer, die am Zeilenanfang gekürzt wird, beginnt eine halbe Zelle höher, ein hängendes 。 steht unter dem Fuß seiner Zeile, und der Abstand zwischen Han und Latein beträgt über und unter einem seitwärts gedrehten Wort ein Viertelgeviert der Spalte.:;?!behalten in vertikalem Text in jeder Region eine ganze Zelle. - Das Zeichenraster zählt Zeichen die Zeile hinunter und Zeilen quer über die Seite:
charsPerLinelegt fest, wie lang eine Stufe ist,linesPerPage, wie viele Zeilen eine Seite fasst, undlayoutType: 'double'ergibt zwei Stufen aus ganzen Zeichen mit einem Abstand aus ganzen Geviert dazwischen.
Für Host-Anwendungen, die das Layout auslesen: Eine vertikale Seite trägt VDTPage.flow. Ihr contentArea, ihre Spalten, Blöcke, Zeilen, Gleitobjekte, Fußnotenbereiche, das Auftaktband und die Gestaltungsüberlagerungen der Blöcke liegen in Flusskoordinaten; width, height, header und footer liegen auf dem Blatt. flowToPage, pageToFlow, flowRectToPage und pageRectToFlow rechnen zwischen beiden um, und verticalOrientation(char, region) gibt an, wie ein Zeichen steht. flow.centralBaselines gibt pro Schriftfamilie die Achse an, auf der das Layout aufrechte Zeichen zentriert hat: die Mitte der Farbe von 中, dessen langer Strich über die Höhe des Geviertkastens läuft (0,38 em über der Grundlinie in Noto Serif und Noto Sans, SC und TC gleichermaßen) und das jede chinesische, japanische und koreanische Schrift enthält. Jede Zeile wird auf dieser Achse zentriert: Die Grundlinie einer vertikalen Zeile liegt eine halbe Zeilenhöhe plus die zentrale Grundlinie der Familie unter der Oberkante ihres Zeilenkastens (die einer horizontalen Zeile 0,8 ihrer Zeilenhöhe darunter), sodass eine Spalte von Zeichen in der Mitte ihres Rasterschritts steht und eine Linie, die im Abstand eines ganzen Rasterschritts zwischen zwei Spalten gezeichnet wird, genau in die Mitte zwischen sie fällt. Ein vertikaler Gestaltungstext wird in seinen eigenen Zeilen genauso gesetzt. Der Canvas zeichnet eine vertikale Seite selbst; um Satzzeichen mit den eigenen vertikalen Formen der Schrift zu zeichnen, lädt eine Browser-Host-Anwendung einmal pro Familie eine Zwillingsschrift, in der diese eingeschaltet sind: loadVerticalAlternates(family, faces), wobei faces die Quellen (URLs oder Bytes) und Deskriptoren der Familie sind. Der Zwilling wird nur dort behalten, wo der Browser das Feature auf Canvas-Text anwendet (Chrome 140 und neuer): Er zeichnet 「(《 mit dem Zwilling und mit einer Kopie derselben Schnitte, die ohne das Feature geladen wurden, in Schriftstärke und Stil der angegebenen Schnitte, und behält den Zwilling, wenn sich ihre Farbe unterscheidet. Ein späterer Aufruf für weitere Schnitte einer Familie, deren Zwilling verwendet wird (der fette nach dem normalen), fügt sie ihm hinzu. Die Sandbox tut das für jede Familie eines vertikalen Dokuments. Ohne Zwilling werden Klammern um ihren Geviertkasten gedreht und Pausen- und Schlusszeichen des Festlands innerhalb ihrer Zelle dorthin verschoben, wo die vertikalen Formen der Schrift sie hinsetzen: 、。,. in die obere rechte Ecke (innerhalb von 0,07 em der vertikalen Formen von Noto Serif SC), !?:; ein halbes Geviert nach rechts und etwas nach oben (innerhalb von 0,02 em). PDF und HTML setzen dieselbe Seite: siehe Vertikaler Text im PDF und die Tabelle unter Wie sich die HTML-Ausgabe von Canvas und PDF unterscheidet. Zelle für Zelle mit HarfBuzz verglichen (vertikales Layout mit vert) in Noto Serif TC und SC, steht jedes Zeichen von 「賈雨村」云云,宜乎?故曰!;:、。“引”‘單’…… im Canvas und im PDF innerhalb von 0,02 em davon und im HTML innerhalb von 0,05 em (Chrome zentriert eine gedrehte Glyphe auf die Mitte von Ober- und Unterlänge der Schrift, die bei Noto 0,05 em über der Mitte ihres Geviertkastens liegt). flow.dashAdvances gibt pro Familie die horizontale Dickte in Geviert jedes Strichs an, den die Seite dehnt, um seine Zelle zu füllen (— – ― ⸺ ⸻ -), für einen Renderer ohne eigene Schriftmetriken: Das HTML dehnt den Strich danach, so wie Canvas und PDF es anhand ihrer eigenen tun. Auch Kolumnentitel und Paginas lassen sich vertikal setzen: siehe Vertikale Textelemente.
#Spaltenlinie
Zeichnet eine dünne senkrechte Linie in den Spaltenabstand, um die Spalten optisch zu trennen.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
enabled | boolean | false | Ob die Spaltenlinie gezeichnet wird. |
color | ColorValue | #cccccc | Farbe der Linie. |
lineWidth | Dimension | 0.5 pt | Stärke der Linie. |
Unter einer Überschrift über die ganze Seitenbreite (span: 'page') beginnt die Linie dort, wo der Text der Spalten beginnt, unter dem Band der Überschrift, gleich ob der Standardauftakt oder eine eigene Gestaltung das Band zeichnet. Bis postext 1.4 lief sie von der Oberkante des Textblocks durch das Band.
Ein Überschriftenformat kann in seinem layout eine eigene Linie setzen (siehe Überschriftenstile), und die Seiten seines Abschnitts zeichnen diese. Ein Feld, das das Format nicht setzt, übernimmt den Wert des Dokuments, sodass ein Abschnitt, der nur seine Spalten ändert, die Linie des Dokuments behält. Bis postext 1.4 wurde die Linie eines Formats nie gezeichnet: Jede Seite zeichnete die des Dokuments.
#Layout-Typen
-
'single'– Eine Spalte über die ganze Breite des Inhalts. Am besten für schmale Seiten oder textlastige Inhalte mit langen Absätzen. -
'double'– Zwei gleich breite Spalten. Das klassische redaktionelle Layout – hält die Zeilenlänge im optimalen Bereich von 40–50 Zeichen für angenehmes Lesen. -
'oneAndHalf'– Ein asymmetrisches Layout mit einer Hauptspalte und einer schmaleren Seitenspalte. Die Seitenspalte (gesteuert durchsideColumnPercent) eignet sich für Marginalien, kleine Abbildungen oder ergänzende Inhalte. Werte zwischen 25–40 % funktionieren gut, und ein schmaler Kanal für Zeilennummern oder Randzeichen braucht etwa 10–15 %. Die Seitenspalte istsideColumnPercent% der Inhaltsbreite, und die Hauptspalte ist das, was nach dem Spaltenabstand übrig bleibt – bei 50 % ist die Seitenspalte also um einen Spaltenabstand breiter als die Hauptspalte. Jeder Wert wird wie angegeben umgesetzt, solange beide Spalten mindestens 1 % der Inhaltsbreite behalten; einer, der eine der beiden schmaler ließe – 0 oder weniger, oder einer so breit, dass die Hauptspalte hinter dem Spaltenabstand verschwindet –, wird auf den nächsten Wert begrenzt, der beide erhält, und ein Wert, der keine Zahl ist, erhält den Standardwert 33. DieconfigWarningsdes Dokuments enthalten dann{ kind: 'sideColumnPercentClamped', path: 'layout.sideColumnPercent', value, used }– der Pfad des eigenenlayouteines Überschriftenformats nennt das Format, wie inheadingStyles[2].layout.sideColumnPercent, und wird an den Rändern dieses Formats gemessen –, die die Sandbox in ihrem Bedienfeld Prüfungen auflistet;collectConfigWarnings(config)gibt dieselbe Liste zurück, ohne etwas zu umbrechen. Ein Layout, das nicht'oneAndHalf'ist, liest den Wert nie und meldet ihn nie. MitsideColumnRole: 'floats'betritt der Fließtext die Seitenspalte nie: Sie wird zu einem Kanal für die Abbildungen, Tabellen und Kästen, die mitspan: 'side'platziert sind. Eine seitliche Abbildung oder Tabelle stapelt sich vom Kopf des Kanals aus auf der Seite, die sie zuerst zitiert – die Randabbildung eines Lehrbuchs steht oben auf ihrer Seite, auch wenn der Text sie weiter unten zitiert; eine, die nicht in den Rest des Kanals passt, wartet auf den der nächsten Seite. Ein seitlicher Kasten stapelt sich neben dem Text, den er unterbricht, und wenn der Rest des Kanals ihn dort nicht aufnehmen kann, rückt er bis zur tiefsten Position hinauf, an der er noch passt (sein Fuß auf dem Fuß des Kanals), oder wartet auf die nächste Seite. Wenn der Text nach dem Zaun eines Kastens auf der nächsten Seite weitergeht (die Spalte ist voll, oder die Umbruchregeln verschieben diesen Text), bleibt der Kasten an seinem Zaun, neben dem Text davor; ein Format mitsideAtColumnEnd: 'after'setzt ihn stattdessen auf Höhe der ersten Zeile des Texts nach dem Zaun, in den Kanal der nächsten Seite, wie es Zeilennummern und Randüberschriften brauchen, die vor ihrer Zeile geschrieben werden. Ein Element einer Überschriftengestaltung, das im Kanal steht – eine Kapitelziffer, die im Außensteg verankert ist –, wird ebenfalls vom Stapel freigehalten (siehe Reservierte Höhe). Gleitobjekte und Kästen mitspan: 'page'überqueren weiterhin beide Spalten, und ein Spaltengleitobjekt mitplacement.captionSidesetzt seine Legende in den Kanal, auf Höhe der Abbildung. Zusammen mit gespiegelten Rändern undsideColumnSide: 'outer'liegt der Kanal am Außenrand jeder Seite – die Randspalte eines Lehrbuchs. Ab postext 1.28 setzt eine im Text gesetzte Abbildung oder Tabelle (position: 'here') mitcaptionSideihre Legende ebenfalls in den Kanal (inlineCaptionSide). -
'multiple'– Drei bis acht gleich breite Spalten, so viele, wiecolumnCountangibt (Standardwert 3): das Raster von Zeitungen und vielen Zeitschriften (seit postext 1.18). Jede Spalte ist(content width − (n − 1) × gutterWidth) / nbreit. Der Text läuft wie in einem zweispaltigen Layout von einer Spalte in die nächste weiter; die Spaltenlinie wird in jedem Spaltenabstand gezeichnet, der Spaltenausgleich gleicht alle Spalten auf der Schlussseite eines Kapitels und vor einem Kasten über die ganze Seitenbreite aus, Fußnoten funktionieren in jeder Spalte, und Abbildungen, Kästen und Überschriften über die ganze Seitenbreite überqueren die ganze Seite. Eine Abbildung oder ein gleitender Kasten kann auch nur einige der Spalten einnehmen:placement.columns(siehe Ressourcentypen) undcolumnseines Kastenformats. EincolumnCountaußerhalb von 3–8 oder eine nicht ganze Zahl wird gerundet und auf die nächste gültige Spaltenzahl begrenzt (ein Wert, der keine Zahl ist, erhält 3), und dieconfigWarningsdes Dokuments enthalten{ kind: 'columnCountClamped', path: 'layout.columnCount', value, used }(der Pfad des eigenenlayouteines Überschriftenformats nennt das Format, wie inheadingStyles[1].layout.columnCount). Ein Layout eines anderen Typs liest den Wert nie. Ein Überschriftenformat, dessenlayout'multiple'ist, übernimmt dencolumnCountdes Dokuments, sofern es keinen eigenen setzt, sodass eine Zeitung, die in fünf Spalten gesetzt ist, ihre Meinungsseiten in vier setzen kann.
#Kopf- und Fußzeilen
Die Eigenschaften header und footer steuern die Plätze für Kopf- und Fußzeile jeder Seite. Kopf- und Fußzeilen werden innerhalb der vorhandenen Seitenränder dargestellt – sie reservieren keinen zusätzlichen Platz und verkleinern den Inhaltsbereich nicht.
Container-Rahmen. Ein Element, das an 'container' verankert ist, wird in das Randband zwischen dem Satzspiegel und der Schnittkante gesetzt und erstreckt sich über die Breite des Inhaltsbereichs. Der Container der Kopfzeile reicht von der oberen Schnittkante bis zur Oberkante des Satzspiegels; der Container der Fußzeile von der Unterkante des Satzspiegels bis zur unteren Schnittkante. Anker top-* der Kopfzeile und Anker bottom-* der Fußzeile messen also von der Schnittkante aus, Anker bottom-* der Kopfzeile und Anker top-* der Fußzeile dagegen von der Kante des Satzspiegels. Der Container schließt nie den Anschnitt oder das Band der Schnittmarken ein, sodass eine Kopf- oder Fußzeile auf der beschnittenen Seite an derselben Stelle landet, ob page.cutLines ein- oder ausgeschaltet ist. Verankern Sie an 'page' (der Trim-Box) oder 'bleed', um über die Breite des Inhaltsbereichs hinaus oder in den Anschnitt zu reichen.
Die Plätze verwenden das einheitliche Modell der Gestaltungsplätze: Jedes Element hat eine placement mit einem anchor (am Container oder über #id an einem anderen Element), einem optionalen offset und einer optionalen size. Die alten flachen Felder align, marginFromBody, marginFromEdge und width: 'full' werden bei der Eingabe weiterhin akzeptiert und automatisch in die neue Form überführt; die entsprechende Beschreibung in der neuen Form ist unten dokumentiert.
Jeder Platz enthält eine Liste von Elementen der Arten Text, Linie und Kasten. Die Reihenfolge im Array ist die Zeichenreihenfolge (das erste Element wird zuerst gezeichnet, das letzte obenauf). Das gilt unabhängig von den Ankern: Ein Element kann an einem später aufgeführten verankert sein (anchor.to: '#ttl'), sodass ein Hintergrundkasten zuerst kommen und trotzdem an dem Text ausgerichtet werden kann, hinter dem er liegt.
Mitgelieferte Standardwerte. Wenn header oder footer undefined ist, wendet postext einen sinnvollen mitgelieferten Standard an statt eines leeren Platzes:
- Standard-Kopfzeile:
{title}rechtsbündig auf ungeraden Seiten,{chapterTitle}linksbündig auf geraden Seiten und eine Linie über die ganze Breite – alles in der Hauptfarbe der Palette, Open Sans 8 pt/600,marginFromBody16pt(Text) /13pt(Linie). - Standard-Fußzeile:
{pageNumber}zentriert auf jeder Seite in der Hauptfarbe der Palette, Open Sans 8 pt/600,marginFromBody16pt.
Um auf die mitgelieferten Standardwerte zu verzichten, setzen Sie header: { elements: [] } (oder footer: { elements: [] }). Ein ausdrücklich leeres Array elements bleibt als „keine Elemente“ erhalten – nur undefined löst die Standardwerte aus.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
elements | HeaderFooterElement[] | mitgelieferte Standardwerte bei undefined; [] schaltet ab | Geordnete Liste von Text- und Linienelementen. |
#Textelemente
Textelemente stellen eine Vorlagenzeichenkette dar, in der Platzhalter ersetzt werden. Platzhalter verwenden die Syntax {name}; {{ und }} geben wörtliche geschweifte Klammern aus.
Die Standardwerte in der folgenden Tabelle sind die eines Textelements, das Sie selbst hinzufügen. Die oben unter Mitgelieferte Standardwerte beschriebene Kopf- und Fußzeile sind fertige Elemente mit eigenen Werten (Open Sans 8 pt/600 in der Hauptfarbe der Palette), nicht die Standardwerte der Elemente.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
kind | 'text' | — | Unterscheidungsmerkmal. |
id | string | — | Stabile ID, eindeutig innerhalb des Platzes. Andere Elemente verankern sich daran mit anchor.to: '#id'. Die Sandbox vergibt beim Anlegen eine. |
content | string | '' | Vorlagenzeichenkette. Unterstützt die unten aufgeführten Platzhalter sowie – ein Attribut, das in der H1-Zeile des aktuellen Kapitels steht (# Title ). Ein fehlendes Attribut wird ohne Warnung zu einer leeren Zeichenkette aufgelöst. Ein Zeilenumbruch – oder die beiden Zeichen \n, in der Vorlage oder in einem Attributwert geschrieben – beginnt immer eine neue Zeile, gleich welcher overflow gilt. Text, den ein Platzhalter aus dem Dokument übernimmt (ein Titel, ein Feld des Frontmatters), wird so gedruckt, wie er geschrieben ist: Dort beginnt nur ein echter Zeilenumbruch, etwa ein Titelumbruch, eine neue Zeile. |
align | 'left' | 'center' | 'right' | 'justify' | 'start' | 'end' | 'center' | Horizontale Ausrichtung der Zeilen im Kasten des Elements. 'justify' dehnt die Wortzwischenräume jeder umbrochenen Zeile außer der letzten jedes Absatzes, sodass die Zeile den Kasten füllt; die Zeilen neben einer Initiale füllen den Platz daneben. Mit hyphenate wird ein Wort, das nicht in den Rest einer Blocksatzzeile passt, zusätzlich an einer Silbe getrennt, um sie zu füllen. Die letzte Zeile eines Absatzes, eine Zeile ohne dehnbaren Zwischenraum und ein Text, der nicht umbricht, werden linksbündig gesetzt. Text im Blocksatz wird Absatz für Absatz umbrochen, sodass Leerzeilen zwischen Absätzen als eine zählen. Canvas und PDF setzen jedes Wort dorthin, wo das Layout es platziert hat; das HTML vergrößert die Zwischenräume mit word-spacing. 'start' und 'end' folgen der direction des Texts: rechts und links bei einem Text von rechts nach links. 'left' und 'right' sind die eigenen Seiten des Kastens; in einer Gestaltung, die im Fluss einer Seite von rechts nach links umbrochen wird (ein Auftaktband, eine Überschriftengestaltung), ist der Fluss gespiegelt, sodass sie dessen Anfang und Ende sind, wie im Fließtext. |
direction | 'ltr' | 'rtl' | 'auto' | die des Dokuments | Grundrichtung des Texts: wohin seine neutralen Zeichen gehen, in welcher Reihenfolge seine Folgen auf einer Zeile stehen und welche Seiten 'start' und 'end' bedeuten. 'auto' liest den ersten stark gerichteten Buchstaben des aufgelösten Texts und greift sonst auf die direction des Dokuments zurück. Arabische und hebräische Folgen laufen unabhängig von der Grundrichtung von rechts nach links. Ein Text, der einen arabischen Buchstaben enthält, wird nie gesperrt (letterSpacing wird für den ganzen Text ignoriert), und seine Wörter werden beim Umbrechen oder Kürzen nie getrennt; ein Wort, das breiter als der Kasten ist, läuft über und wird als unbreakableWordOverflow gemeldet. |
parity | 'all' | 'odd' | 'even' | 'all' | Auf welchen Seiten das Element erscheint (Parität der Seitenzahl: Seite 1 ist ungerade). |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Auf welchen Seitenrollen das Element erscheint, kombiniert mit parity. Nach der Platzierung wird jede Seite eingeordnet als 'blank' (Auffüllung zur Parität oder als Trennseite, oder kein Inhalt), 'part' (eine Teiltitelseite), 'opener' (ihr erster Block ist eine Überschrift, deren Ebene über die ganze Seite reicht oder einen Seitenumbruch davor erzwingt – die erste Seite eines Kapitels) oder 'body' (alles andere). pages: 'body' blendet einen Kolumnentitel auf Kapitelauftakten aus; pages: 'opener' zeigt eine Pagina nur dort. |
fontFamily | string | 'EB Garamond' | Schriftfamilie. |
fontSize | Dimension | 8 pt | Schriftgröße. |
fontWeight | number | 400 | Schriftstärke (100–900). |
italic | boolean | false | Ob kursiv gesetzt wird. |
color | ColorValue | #000000 | Textfarbe. |
overflow | 'wrap' | 'ellipsis-start' | 'ellipsis-middle' | 'ellipsis-end' | 'clip' | 'wrap' in Überschriften- und Teilgestaltungen, sonst 'ellipsis-end' | Wie die Engine Text behandelt, der die verfügbare Breite des Elements überschreitet. 'wrap' bricht die Zeile in mehrere Zeilen um; die Varianten mit Auslassungspunkten halten jede Zeile auf einer Zeile und kürzen sie mit … am Anfang, in der Mitte oder am Ende; 'clip' schneidet hart am Begrenzungsrahmen des Elements ab, ohne ein Zeichen einzufügen. Zeilenumbrüche im Inhalt gelten in jedem Modus: Die Modi mit Auslassungspunkten und Abschneiden kürzen bzw. beschneiden jede Zeile für sich. Ein Element, das overflow weglässt, übernimmt den Standardwert seines Platzes: In einer Überschriftengestaltung (advancedDesign.slot) oder auf einer Teiltitelseite (parts.design, parts.versoDesign) bricht es um, in einem Kolumnentitel, einer Pagina oder einer Teilzeile des Inhaltsverzeichnisses (toc.parts.design, eine Zeile fester Höhe) endet es mit …. Setzen Sie 'wrap' bei einem Kolumnentitel, der mehrere Zeilen lang werden kann (eine Adresse), oder Auslassungspunkte bei einer Dachzeile, die in einem Auftakt auf einer Zeile bleiben muss. Eine durch Auslassungspunkte gekürzte Zeile oder eine, deren Farbe über den Kasten hinaus abgeschnitten wird, wird als Inhaltswarnung designTextTruncated gemeldet, einmal pro Element und Seite (bei einem Kolumnentitel oder einer Pagina einmal pro Element und Kapitel). Eine Konfiguration, die vor postext 1.24 gespeichert wurde (configVersion 9 oder älter), wird bei jedem Überschriften- und Teiltext, der keinen Wert setzt, mit 'ellipsis-end' gelesen, damit sich ihre Seiten nicht verschieben. Ein Text mit einer dropCap bricht unabhängig von dieser Einstellung um; mit 'clip' werden seine Zeilen weiterhin am Rand eines Kastens fester Höhe abgeschnitten. 'ellipsis-end' und 'ellipsis-start' kürzen an einer Wortgrenze – The history of…, nicht The history of th… –, und kein Leerzeichen und kein verbindendes Satzzeichen (Komma, Doppelpunkt, Strich, Schrägstrich, öffnende Klammer) berührt die Auslassungspunkte. Ein Wort wird nur dann an beliebiger Stelle gekürzt, wenn die Wortgrenze ohne dieses Satzzeichen weniger als die Hälfte dessen behielte, was passt: ein einziges langes Wort oder eine URL (http://exampl…, nicht http…). Ein geschütztes Leerzeichen oder ein geschützter Bindestrich (U+2011, wie in MS‑DOS) ist keine Wortgrenze; 'ellipsis-middle' kürzt an beliebiger Stelle, verwirft aber die Leerzeichen daneben. Bis postext 1.4 kürzte jeder Modus beim letzten Zeichen, das passte, Leerzeichen eingeschlossen. |
verticalAlign | 'top' | 'middle' | 'bottom' | 'middle' | Wo der Text in einem Kasten steht, der höher ist als seine Zeilen – eine feste placement.size.height oder ein Kasten, den ein verankerter Nachbar streckt. Sind die Zeilen höher als der Kasten (eine große Ziffer in einem Kasten fester Höhe, ein knapper lineHeight), laufen sie auf der Seite hinaus, die die Ausrichtung frei lässt, wie bei der Flex-Ausrichtung in CSS: 'bottom' hält den Fuß des letzten Zeilenkastens auf dem Fuß des Kastens und läuft oben hinaus, 'middle' läuft an beiden Enden gleichmäßig hinaus, 'top' am Fuß. Bis postext 1.4 hingen solche Zeilen unabhängig von der Ausrichtung immer am oberen Rand. Eine dropCap bewegt sich mit ihren Zeilen (bis postext 1.4 blieb sie oben in einem Kasten, in dem 'middle' oder 'bottom' die Zeilen nach unten verschob). |
lineHeight | number | Dimension | 1.2 | Zeilenabstand der Zeilen des Elements. Eine Zahl ist ein Vielfaches von fontSize. Eine Dimension wird ebenfalls akzeptiert, so wie jeder andere Zeilenabstand der Konfiguration geschrieben wird: em / rem ist dasselbe Vielfache, und eine absolute Länge (pt, mm, px …) ist der Abstand zwischen den Grundlinien – setzt 15,5 pt Zeilenabstand unabhängig von der Schriftgröße. Alles andere (null, eine negative Zahl, eine fehlerhafte Dimension) erhält den Standardwert. Bis postext 1.4 machte eine Dimension hier die Höhe der Gestaltung unmessbar: Ein Auftakt reservierte dann überhaupt keinen Platz, nicht einmal seine minHeight, und der Fließtext lief unter den Titel. |
letterSpacing | Dimension | 0 | Laufweite: zusätzlicher Vorschub nach jedem Zeichen, Leerzeichen eingeschlossen, genau wie bei letter-spacing in CSS. Gemessene Breiten wachsen mit, sodass ein Kasten mit automatischer Breite eng bleibt. Die Glyphen ändern sich nie: Die Ligaturen der Schrift bleiben im Canvas, im HTML, im EPUB und im PDF erhalten (bis postext 1.27 verwarfen Canvas und HTML sie in gesperrtem Gestaltungstext, der dadurch breiter ausfiel als gemessen). Eine hebräische Folge wird wie lateinischer Text gesperrt; nur ein Text mit arabischen Buchstaben nicht. Die Sperrung nach dem letzten Zeichen einer Zeile bleibt bei ihrer Ausrichtung und bei einem Kasten mit automatischer Breite unberücksichtigt, sodass ein zentrierter gesperrter Titel auf seinen Buchstaben zentriert ist, ein rechtsbündiger an der Kante endet und der letzte Buchstabe einer Blocksatzzeile die Kante erreicht (bis postext 1.4 standen sie eine halbe oder ganze Sperreinheit weiter links, und ein Element, das rechts an einem gesperrten verankert war, stand eine Sperreinheit weiter entfernt). Ein negativer Wert rückt die Buchstaben enger zusammen – ein Displaytitel in 36 pt erhält oft { value: -0.3, unit: 'pt' } –, und die Breiten schrumpfen entsprechend; Canvas, HTML und PDF zeichnen ihn gleich (bis postext 1.4 wurde ein negativer Wert ohne Warnung als 0 gesetzt). |
textTransform | 'none' | 'uppercase' | 'none' | Umwandlung der Groß- und Kleinschreibung, angewendet auf den aufgelösten Text, Platzhalter eingeschlossen – etwa ein Teiltitel, der im Inhaltsverzeichnis in Versalien gesetzt wird. |
box | ElementBoxStyle | — | Optionaler Hintergrund und Rahmen, die hinter dem Text gezeichnet werden: backgroundColor, borderColor, borderWidth, borderRadius und ein padding pro Seite, das den Kasten über den Text hinaus vergrößert (die Felder siehe Kastenelemente). |
dropCap | { lines, fontFamily, fontWeight, fontSize, color, gap } | — | Initiale: der erste Buchstabe groß neben den ersten lines Zeilen gesetzt (Standardwert 2), in eigener Schrift, Schriftstärke und Farbe, im Abstand gap vom Text. Der Buchstabe steht auf der Grundlinie der letzten Zeile, die er überspannt, und fontSize ist standardmäßig die Größe, die seine Oberkante auf die Höhe der Versalien der ersten Zeile bringt: die Textgröße plus lines − 1 Zeilenabstände, wobei die Versalhöhe als 0,72 der Schriftgröße angenommen wird (eine Schrift, deren Versalien deutlich höher oder niedriger sind, braucht eine eigene fontSize). Ein Text mit einer Initiale bricht unabhängig von seinem overflow um; mit 'clip' werden seine Zeilen weiterhin am Rand eines Kastens fester Höhe abgeschnitten. Eine mit der Palette verknüpfte color folgt wie der Rest der Gestaltung den Paletten von Teilen und Abschnitten. In einer Überschriftengestaltung reserviert der Buchstabe keinen Platz unter dem Text: Der Teil seines Zeilenkastens unter seiner Grundlinie schiebt den Fließtext nicht nach unten. Ein Buchstabe mit Unterlänge (ein Q oder ein J in vielen Schriften) kann dann in den Raum unter der Gestaltung reichen: Geben Sie der Überschrift dafür einen marginBottom. Bis postext 1.4 machte die Standardgröße den Buchstaben so hoch wie alle Zeilenkästen, die er überspannt, sodass seine Oberkante über der ersten Zeile stand; ein overflow außer 'wrap' ließ den Buchstaben ohne Warnung weg; eine Palette eines Abschnitts oder Teils ließ seine Farbe unverändert; und ein Buchstabe, der so tief war wie der Text daneben, konnte den Fließtext eine Rasterlinie tiefer schieben. Früher gespeicherte Konfigurationen behalten die Größe von 1.4, ausgeschrieben als fontSize (siehe Pakete, die postext 1.4 oder früher geschrieben hat). Eine Initiale im laufenden Text wird stattdessen über die Absatz- und Überschriftenformate eingestellt (siehe Initialen), wobei ihre Versalhöhen aus den Schriften gemessen werden. |
paragraphIndent | Dimension | 0 | Erstzeileneinzug jedes Absatzes nach dem ersten. Ein Zeilenumbruch im Inhalt – oder die beiden Zeichen \n bei Text aus einem Attributwert – trennt Absätze; aufeinanderfolgende Zeilenumbrüche zählen als einer. |
hyphenate | boolean | false | Bei true und umbrechendem Text (overflow: 'wrap' oder eine dropCap, die immer umbricht) werden lange Wörter, die nach einem regulären Zeilenumbruch immer noch überlaufen würden, an Silbengrenzen getrennt (mit dem aktiven Silbentrennungs-Locale des Dokuments), mit einem weichen Trennstrich an der Trennstelle. In einem Text im Blocksatz (align: 'justify') wird ein Wort, das nicht in den Rest einer Zeile passt, zusätzlich an seiner letzten passenden Trennstelle getrennt, um die Zeile zu füllen. |
inlineMarks | boolean | false | Liest den aufgelösten Text – Platzhalterwerte eingeschlossen – als Inline-Markdown: bold, italic, ^superscript^, ~subscript~. Ausgeschaltet werden die Auszeichnungszeichen so gedruckt, wie sie geschrieben sind. In einer Überschriftengestaltung behält dann die eigenen fetten, kursiven, hoch- und tiefgestellten Folgen der Überschrift (Pneumocystis, CO~2~), während ihre übrigen Zeichen maskiert werden, damit sie so gedruckt werden, wie sie geschrieben sind (seit postext 1.19). Siehe Inline-Auszeichnungen und Konturen. |
stroke | { width, color?, hollow? } | — | Kontur um die Buchstaben: width (eine Dimension, auf den Glyphenkanten zentriert), color (Standardwert: die Textfarbe; eine Initiale nimmt ihre eigene Farbe) und hollow (true zeichnet nur die Kontur). Siehe Inline-Auszeichnungen und Konturen. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | 'vertical-rl' setzt den Text von oben nach unten, die Zeilen von rechts nach links, die Zeichen aufrecht: ein Kolumnentitel am Vorderschnitt entlang, ein vertikaler Titel neben einem horizontalen Kapitel. Siehe Vertikale Textelemente. |
reserve | boolean | true | Nur Überschriftengestaltungen: ob das Element zur Höhe zählt, die die Überschrift im Textfluss reserviert. false für Dekoration, die unter dem Text liegen darf (ein Siegel am Seitenfuß, ein Rahmen, ein seitliches Band). Siehe Reservierte Höhe. Kopfzeilen-, Fußzeilen- und Teilgestaltungen ignorieren es. |
marginFromBody | Dimension | 6 pt | Absoluter Abstand zwischen der dem Satzspiegel zugewandten Kante des Elements und der Kante des Satzspiegels. Unabhängig von anderen Elementen. Wird in placement.offset.y überführt. |
marginFromEdge | Dimension | 0 pt | Horizontaler Einzug von der ausgerichteten Inhaltskante. Gilt nur, wenn align 'left' oder 'right' ist. Wird in placement.offset.x überführt. |
placement | ElementPlacement | abgeleitet aus align + marginFromBody + marginFromEdge | Erweiterte Platzierung (siehe unten). Wenn gesetzt, hat sie Vorrang vor den alten flachen Feldern. |
Verfügbare Platzhalter:
{pageNumber}– Seitenzahl der aktuellen Seite, ab 1 gezählt.{totalPages}– Gesamtzahl der Seiten des Dokuments. In einem Buch, das Kapitel für Kapitel umbrochen wird (die Sandbox,buildBundle), ist jedes Kapitel ein Dokument, dies ist also die eigene Seitenzahl des Kapitels.{bookTotalPages}– Gesamtzahl der Seiten des ganzen Buchs: jedes Kapitel, Vakatseiten eingeschlossen. Bei einem für sich allein umbrochenen Dokument entspricht sie{totalPages}. Siehe Seitenzahl des ganzen Buchs unten.{title},{subtitle},{author},{publishDate}– Werte auscontent.metadata. Unbekannte oder leere Metadaten ergeben eine leere Zeichenkette (und lösen in der Sandbox eine Warnung aus).{chapterTitle}– Text der letzten H1 auf oder vor der aktuellen Seite. Eine H1, deren ÜberschriftenformatrunningChapter: falsesetzt (eine Tafel, eine Karte), wird übergangen.{chapterTitleAtTop},{chapterNumberAtTop}– Titel und Nummer des Kapitels, das am Kopf der Seite gilt; sie unterscheiden sich von{chapterTitle}und{chapterNumber}auf einer Seite, auf der ein neues Kapitel unterhalb anderen Texts beginnt. Siehe Kapitel am Kopf der Seite unten.{partTitle},{partNumber}– Titel und Nummer des aktuellen Teils (die letzte:::part-Seite auf oder vor der aktuellen Seite; leere Paritätsseiten direkt vor einer Teiltitelseite gehören bereits zu ihr). Leer vor dem ersten Teil.{firstMark.<key>},{lastMark.<key>}– das erste und letzte Leitwort der Seite: eine Überschrift einer Ebene (h1–h6) oder ein Eintrag eines Absatzformats. Siehe Leitwörter unten.
Seitenzahl des ganzen Buchs
{bookTotalPages} druckt die Seitenzahl des ganzen Buchs, die Zahl, die ein Leser in „Seite 12 von 348“ sieht. Sie zählt physische Seiten, leere eingeschlossen, wie {totalPages}, aber über alle Kapitel hinweg:
- Ein für sich allein umbrochenes Dokument (
buildDocumentohnecontinuation) ist das ganze Buch:{bookTotalPages}entspricht{totalPages}. buildBundleumbricht das Buch, addiert die Seiten aller Kapitel und umbricht es mit dieser Summe ein weiteres Mal, sodass jedes Kapitel dieselbe Zahl druckt. Die Zahl verschiebt nie einen Seitenumbruch, deshalb genügt eine weitere Runde; eine Konfiguration, die{bookTotalPages}nicht druckt, kostet nichts.- Die Sandbox übergibt jedem Kapitel die Summe, sobald die Seiten aller Kapitel bekannt sind. Bis dahin druckt ein Kapitel die Seiten bis zu seinem eigenen Ende. Der Export des ganzen Buchs im Tab PDF zählt die Seiten, die er umbricht: Hat ein Kapitel eine andere Zahl gedruckt, weil seine Seiten noch nicht bekannt waren, umbricht er das Buch ein weiteres Mal mit der Zahl, auf die die Kapitel gekommen sind.
- Eine Host-Anwendung, die Kapitel selbst umbricht, übergibt die Summe als
continuation.bookPageCount(auch dem ersten Kapitel). Ohne sie zählt{bookTotalPages}die Seiten bis zum Ende des Dokuments (continuation.pageIndexOffsetplus seine eigenen Seiten), was nur für das letzte Kapitel stimmt.
footer: {
elements: [{
kind: 'text', id: 'folio', content: '{pageNumber} / {bookTotalPages}',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'top' }, size: { width: 'auto', height: 'auto' } },
}],
}configUsesPlaceholder(config, 'bookTotalPages') teilt einer Host-Anwendung mit, ob sich die Berechnung der Zahl lohnt.
Leitwörter: erste und letzte Marke
Ein Wörterbuch druckt das erste und letzte Stichwort jeder Seite in ihrem Kolumnentitel („Aback – Anchor“); ein Nachschlagewerk druckt den ersten und letzten Abschnitt. {firstMark.<key>} und {lastMark.<key>} drucken sie. Der Schlüssel benennt, was eine Seite markiert:
h1bish6: eine Überschrift dieser Ebene. Die Marke ist ihr Text, ohne die Nummer.- Die ID eines Absatzformats (
entry): ein Absatz eines Containers:::paragraphs{style="entry"}. Die Marke ist die fette Folge, mit der der Absatz beginnt, das Stichwort, ohne das schließende Satzzeichen:**Aback.** Said of…markiertAback. Ein Absatz, der nicht mit fettem Text beginnt, setzt keine Marke.
{firstMark.<key>} ist die erste Marke, die auf der Seite beginnt, und {lastMark.<key>} die letzte. Eine Seite, auf der keine Marke beginnt (ein langer Eintrag, der weiterläuft), druckt für beide die geltende Marke, die letzte davor. Seiten vor der ersten Marke drucken nichts; in einem Buch, das Kapitel für Kapitel umbrochen wird, ist das die erste Marke des Kapitels, da Marken nicht von einem Kapitel ins nächste übernommen werden. Eine Überschrift oder ein Absatz, der über Seiten geteilt ist, markiert nur die Seite, auf der er beginnt. Der Schlüssel wird nach dem Punkt aus Buchstaben, Ziffern, _ und - geschrieben und beginnt mit einem Buchstaben oder _; ein unbekannter Schlüssel druckt nichts.
:::paragraphs{style="entry"}
**Aback.** Said of the sails when pressed back against the mast.
**Abaft.** Towards the stern, or behind a given point.
:::header: {
elements: [{
kind: 'text', id: 'guide', content: '{firstMark.entry} – {lastMark.entry}',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'bottom' }, size: { width: 'auto', height: 'auto' } },
}],
}Leitwörter sind Kolumnentitel: Sie werden in den Plätzen von Kopf- und Fußzeile aufgelöst (einschließlich header und footer eines Überschriftenformats) und drucken in Überschriften-, Teil- und Inhaltsverzeichnisgestaltungen nichts; in Überschriften- und Teilgestaltungen markiert das Bedienfeld Prüfungen sie als unbekannte Platzhalter. Um das erste Stichwort auf linken und das letzte auf rechten Seiten zu zeigen, geben Sie zwei Elementen parity: 'even' und parity: 'odd'. Eine H1, deren Überschriftenformat runningChapter: false setzt, setzt keine Marke h1.
Kapitel am Kopf der Seite
{chapterTitle} und {chapterNumber} nennen das letzte Kapitel, das auf oder vor der Seite begonnen hat. In einem Buch, dessen Kapitel ohne Seitenumbruch dazwischen fortlaufend gesetzt sind, trägt eine Seite, die ein Kapitel abschließt und das nächste nahe ihrem Fuß beginnt, dann den Titel des neuen Kapitels über Text, der noch zum alten gehört. {chapterTitleAtTop} und {chapterNumberAtTop} nennen stattdessen das Kapitel, das am Kopf der Seite gilt, wie es Romane mit fortlaufenden Kapiteln und viele Nachschlagewerke tun:
- Eine Seite, deren erster Block die H1 eines Kapitels ist, nennt dieses Kapitel;
- jede andere Seite nennt das Kapitel, aus dem sie weiterläuft, auch wenn weiter unten ein neues Kapitel beginnt;
- eine zur Parität eingefügte Vakatseite gehört zur Seite danach, die Trennseite der Modi
always-*zur Seite davor (siehe Zugehörigkeit leerer Seiten); beginnt die Seite nach einer Paritäts-Vakatseite mit dem Ende eines Kapitels statt mit seiner H1, behält auch die Vakatseite dieses Kapitel; - eine H1 mit
runningChapter: falsewird übergangen.
header: {
elements: [{
kind: 'text', id: 'chapter', content: '{chapterTitleAtTop}', parity: 'odd', pages: 'body',
fontSize: { value: 8, unit: 'pt' },
placement: { anchor: { to: 'container', edge: 'bottom-right' }, size: { width: 'auto', height: 'auto' } },
}],
}Wie Leitwörter sind beide Kolumnentitel: Sie werden in den Plätzen von Kopf- und Fußzeile aufgelöst und drucken in Überschriften-, Teil- und Inhaltsverzeichnisgestaltungen nichts. {attr.<key>} liest immer das zuletzt begonnene Kapitel.
Aus der Kante abgeleitete Ausrichtung
Wenn placement.anchor.to eines Textelements über #id auf ein anderes Element verweist, legt die Ankerkante eine Standardausrichtung für umbrochene Zeilen nahe:
right-ofundalign-leftbedeuten Text mitalign: 'left'– umbrochene Zeilen laufen vom Anker aus nach rechts.left-ofundalign-rightbedeutenalign: 'right'– umbrochene Zeilen schmiegen sich an die Seite, die dem Ankerziel am nächsten liegt.
Der Überschriftenseditor der Sandbox wendet diese abgeleiteten Ausrichtungen automatisch an, wenn Sie Ankerkante oder Ankerziel ändern. Sie halten mehrzeiligen umbrochenen Text optisch an dem Element verankert, auf das er sich bezieht (sodass z. B. das „P“ eines umbrochenen „Postext“ senkrecht unter dem „I“ von „Introduction“ steht).
Inline-Auszeichnungen und Konturen
Ein Textelement setzt seinen Text standardmäßig in einer einzigen Schrift: **, ^ und die anderen Markdown-Zeichen werden so gedruckt, wie sie geschrieben sind. Mit inlineMarks: true wird der aufgelöste Text als Inline-Markdown gelesen, mit denselben Auszeichnungen, die der Fließtext annimmt (siehe Dokumentformat → Inline-Formatierung):
**bold**setzt die Schriftstärke 700 (oder die eigenefontWeightdes Elements, wenn diese kräftiger ist);*italic*kehrt die Neigung des Elements um, sodass eine Hervorhebung in einem kursiven Element aufrecht erscheint;***both***tut beides. Die Formen mit Unterstrich (__bold__,_italic_) funktionieren ebenfalls.^superscript^und~subscript~werden in 58 % der Größe gesetzt, hochgestellt um ein Drittel davon angehoben und tiefgestellt um 0,15 davon abgesenkt; ein tief- und ein hochgestelltes Zeichen, die aneinanderstoßen (T~0~^2^), werden übereinander gestapelt, wie im Fließtext.- Ein Backslash setzt ein Auszeichnungszeichen als solches (
\*,\_,\^,\~). Ein Link behält seinen Text; Backticks für Code werden verworfen.
Auszeichnungen werden gelesen, nachdem die Platzhalter ausgefüllt sind, sodass ein Wert sie enthalten kann: Eine Autorenzeile in einem Überschriftenattribut erhält ihre Zugehörigkeitsnummern hochgestellt. Umbruch, Blocksatz, die Modi mit Auslassungspunkten, dropCap und paragraphIndent funktionieren alle mit ausgezeichnetem Text; jede Folge behält die Farbe des Elements.
{ "kind": "text", "id": "authors", "content": "{attr.authors}", "inlineMarks": true, "overflow": "wrap",
"fontSize": { "value": 11, "unit": "pt" },
"placement": { "anchor": { "to": "#title", "edge": "below" }, "offset": { "y": { "value": 6, "unit": "pt" } } } }# Snow cover and river flow {authors="Ana Ruiz^1^, Luis Gil^2^ and Marta Sanz^1,3^"}stroke zeichnet eine Kontur um die Buchstaben: width ist die Linienstärke, auf den Glyphenkanten zentriert (die Hälfte fällt in die Buchstaben, die Hälfte nach außen; die gemessene Textbreite ändert sich nicht), color ist standardmäßig die Textfarbe, und hollow: true lässt die Buchstaben ungefüllt, sodass nur die Kontur sichtbar ist – eine konturierte Displayziffer, ein Titel, der sich von einem Foto abhebt. Die Kontur wird über die Füllung gezeichnet, auf dieselbe Weise im Canvas, im HTML (-webkit-text-stroke) und im PDF (Textdarstellungsmodus 2, oder 1 bei hohlen Buchstaben).
{ "kind": "text", "id": "year", "content": "1863", "fontFamily": "Bitter", "fontSize": { "value": 120, "unit": "pt" }, "fontWeight": 700,
"color": { "hex": "#1d3557", "model": "hex" },
"stroke": { "width": { "value": 1.5, "unit": "pt" }, "hollow": true },
"placement": { "anchor": { "to": "page", "edge": "bottom-right" }, "offset": { "x": { "value": -15, "unit": "mm" }, "y": { "value": -20, "unit": "mm" } } } }Im PDF betten fette und kursive Folgen die passenden Schnitte der Schriftfamilie des Elements ein, der Schriftanbieter muss sie also liefern.
Standardwerte für Text und Fallstricke beim Verankern
Ein Textelement, das Sie selbst schreiben, beginnt mit diesen Werten, von denen einige überraschen:
overflowfolgt dem Platz. In einer Überschriftengestaltung oder auf einer Teiltitelseite bricht ein langer Titel auf weitere Zeilen um; in einem Kolumnentitel, einer Pagina oder einer Teilzeile des Inhaltsverzeichnisses wird ein Text, der für seinen Platz zu breit ist, mit…auf eine Zeile gekürzt. Setzen Sieoverflow: 'wrap'bei einem Kolumnentitel, der lang werden kann (eine Adresse, eine Autorenzeile), und sehen Sie sich die WarnungendesignTextTruncatedfür die gekürzten Texte an. Ein Zeilenumbruch im Inhalt (ein Zeilenumbruchzeichen oder\nin der Vorlage oder in einem Attributwert) beginnt in jedem Modus eine neue Zeile; die Modi mit Auslassungspunkten kürzen jede Zeile für sich.alignist'center'undverticalAlignist'middle'. Ein Element mit automatischer Breite schmiegt sich an seine längste Zeile, sodass seine Zeilen zueinander zentriert sind; setzen Siealign: 'left'für einen linksbündigen Block (ein Element mit automatischer Breite, das an einem anderen Element verankert ist, richtet seine Zeilen von selbst auf der Seite seines Ankers aus, siehe oben).- Die Schrift ist EB Garamond 8 pt, schwarz,
lineHeight1,2, gleich was der Fließtext verwendet. Anders als die übrigen Zeilenabstände der Konfiguration ist derlineHeighteines Gestaltungstexts meist ein einfaches Vielfaches (1.2); eineDimensionfunktioniert ebenfalls (siehe oben).
Ein Element ohne placement.size.width (oder mit 'auto') passt seine Größe an seinen Text an, aber nur innerhalb des Platzes zwischen seinem Ankerpunkt und der Kante des Containers, zu der hin es wächst – bei einem Anker top oder bottom das Doppelte des Abstands zur näheren Kante. Sein offset zählt mit. Ein Versatz weg von dieser Kante kostet nichts: Ein Kolumnentitel mit Anker top-left und negativem x (der in den linken Rand hängt) verliert keinen Platz, denn er wächst nach rechts. Ein Versatz zu dieser Kante hin verkleinert den Platz um denselben Betrag (bei einem Anker top oder bottom um das Doppelte), und einer, der den Anker über die Kante hinausschiebt, lässt keinen übrig: ein Anker top-right, dessen x unter minus der Containerbreite liegt, oder ein Anker top, der um mehr als die halbe Breite seitlich verschoben ist. Bleibt kein Platz, druckt ein Modus mit Auslassungspunkten nichts, und 'wrap' stapelt ein Zeichen pro Zeile. Drei Auswege:
- Geben Sie dem Element eine feste
size.width– feste Breiten werden nie begrenzt; - verankern Sie es an
'page'oder'bleed', wodurch die Seite (oder der Anschnitt) seinen Platz einrahmt; - verankern Sie es an der gegenüberliegenden Kante des Containers.
Der Container einer Kopfzeile reicht von der oberen Schnittkante bis zum Satzspiegel, der einer Fußzeile vom Satzspiegel bis zur unteren Schnittkante: In einer Kopfzeile messen Anker top-* von der Schnittkante und Anker bottom-* vom Satzspiegel aus, in einer Fußzeile umgekehrt (siehe Container-Rahmen oben). Eine Kopf- oder Fußzeile verschiebt den Fließtext nie und wird über ihn gezeichnet, sodass ein Element, das in den Bereich des Satzspiegels geschoben wird, den Text verdeckt. Ein Auftaktband dagegen wird unter den Fließtext gezeichnet; wie viel Platz es im Fluss einnimmt, ist unter Reservierte Höhe beschrieben.
#Vertikale Textelemente
Ein Textelement mit writingMode: 'vertical-rl' wird vertikal in einem Platz gesetzt, dessen Text horizontal ist: die Kolumnentitel und Paginas jedes Buchs, die auf dem Blatt bleiben, und jede Gestaltung einer horizontalen Seite. Es wird als horizontaler Text in einem eigenen Rahmen umbrochen, der eine Vierteldrehung im Uhrzeigersinn gedreht ist, und dann zurück auf die Seite gedreht:
- Sein Kasten bleibt dort, wo die Platzierung ihn hinsetzt. Seine Höhe ist die Länge einer Zeile:
size.heightlegt sie fest (oder'auto', die Länge des Texts;'fill', bis zur Kante des Containers),size.widthlegt fest, wie viele Zeilen nebeneinander passen, undsize.maxWidthbegrenzt die Länge einer Zeile. alignsetzt die Zeilen entlang des Kastens ('left'oben),verticalAlignquer dazu ('top'rechts, wo die erste Zeile steht), und der Innenabstand eines Kastens bleibt auf der Seite, für die er geschrieben ist.- Die Zeichen werden wie auf einer vertikalen Seite gemessen und gezeichnet: Han-Zeichen aufrecht, je ein Geviert, Satzzeichen in ihrer vertikalen Form, lateinische Wörter seitwärts, kurze Zahlen in einer Zelle (
cjk.uprightDigits). Canvas, PDF und HTML setzen es in dasselbe Rechteck. - Mit
inlineMarks: trueheben die Ausrichtungsauszeichnungen eine Folge wie im Fließtext ab:第:tcy[3.0]回setzt 3.0 in eine Zelle,:upright[GDP]stellt die Buchstaben aufrecht untereinander,:sideways[…]dreht eine Folge; innerhalb einer solchen bricht eine Zeile nie um. Ein horizontales Element ignoriert sie. - Auf einem vertikalen Element wird keine Initiale gesetzt.
- Im Fluss einer vertikalen Seite (ein Auftakt, eine Teiltitelseite, ein Kastentitel) läuft Text bereits nach unten, und
writingModeändert dort nichts.
Vertikal gesetzte chinesische Bücher stellen ihre Kolumnentitel und Paginas an eine von drei Stellen (clreq §7.2; JLREQ §2.6 für Japanisch):
| Konvention | Wo | Einstellung |
|---|---|---|
| Horizontaler Kopf und Fuß | Über und unter dem Satzspiegel, wie in horizontalen Büchern; am häufigsten. | Kopf- und Fußzeile, wie sie sind. |
| Vorderschnitt (Stil 中缝, in Taiwan 邊峰) | Den Außensteg hinunter: der Kapitel- oder Buchtitel ab etwa vier Zeichen unter dem Kopf des Satzspiegels, die Pagina etwa fünf Zeichen über seinem Fuß endend, in chinesischen Zahlzeichen, in etwa 80 % der Grundschriftgröße. | Zwei vertikale Elemente, verankert an 'outer', siehe unten. |
| Äußere untere Ecke | Die Pagina am Fuß der Seite, in der äußeren Ecke (die Regeln Taiwans für Bücher im Stil 中式). | Ein horizontales Element in der Fußzeile bei 'bottom-left' mit parity: 'odd' und eines bei 'bottom-right' mit parity: 'even' in einem rechts gebundenen Buch (in einem links gebundenen umgekehrt). |
Die Kolumnentitel am Vorderschnitt, wie die Sandbox sie hinzufügt (Kopfzeile › Kolumnentitel am Außenrand (vertikal)), hier für einen Fließtext von 10 pt (die Sandbox setzt sie in 80 % der Grundschriftgröße):
{
"page": { "pageNumbering": { "format": "trad-chinese-informal" } },
"header": { "elements": [
{ "kind": "text", "id": "head", "content": "{chapterTitle}", "writingMode": "vertical-rl",
"fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
"placement": { "anchor": { "to": "outer", "edge": "top" }, "offset": { "y": { "value": 4, "unit": "em" } } } },
{ "kind": "text", "id": "folio", "content": "{pageNumber}", "writingMode": "vertical-rl",
"fontSize": { "value": 8, "unit": "pt" }, "overflow": "clip", "align": "left",
"placement": { "anchor": { "to": "outer", "edge": "bottom" }, "offset": { "y": { "value": -5, "unit": "em" } } } }
] }
}anchor.to: 'outer' (siehe Platzierung von Elementen) ist der Außensteg jeder Seite, sodass die beiden Elemente in einem rechts gebundenen Buch (page.binding) am linken Rand eines Rectos und am rechten Rand eines Versos hinunterlaufen. {pageNumber} wird im Nummernformat der Seiten gedruckt: trad-chinese-informal ergibt auf Seite 103 一百零三, cjk-decimal 一〇三. Die Regeln pro Platz gelten weiterhin: pages: 'body' hält einen Kolumnentitel von den Kapitelauftakten fern. Ein kurzes Ornament zwischen Kolumnentitel und Pagina (ein Fischschwanz ︻, eine Linie) ist ein gewöhnliches Element, das am selben Rahmen verankert ist.
Im VDT trägt ein vertikaler Block vertical (VDTDesignTextBlock.vertical: die Region, die aufrechten Ziffern und die zentrale Achse jeder Familie); seine Zeilen liegen im eigenen gedrehten Rahmen des Blocks, xOffset von der Oberkante des Kastens nach unten, baselineY von seinem rechten Rand nach links. Eine Folge einer ausgezeichneten Zeile trägt tcy oder orientation, wie ein Segment des Fließtexts.
#Linienelemente
Linienelemente zeichnen eine Linie: waagerecht über den Platz oder senkrecht an ihm hinunter.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
kind | 'rule' | — | Unterscheidungsmerkmal. |
id | string | — | Stabile ID, eindeutig innerhalb des Platzes, für Verweise mit anchor.to: '#id'. |
direction | 'horizontal' | 'vertical' | 'horizontal' | Eine waagerechte Linie verläuft entlang placement.size.width ('fill' = bis zur Kante des Containers) und ist thickness hoch. Eine senkrechte Linie verläuft entlang placement.size.height nach unten ('fill' oder nicht gesetzt = bis zur Kante des Containers) und ist thickness breit – eine Trennlinie zwischen Kolumnentitel und Pagina. |
color | ColorValue | #000000 | Linienfarbe. |
thickness | Dimension | 0.5 pt | Linienstärke. Eine Linie, die sie weglässt, wird mit dem Standardwert gezeichnet (bis postext 1.4 zeichnete sie nichts). |
width | Dimension | 'full' | 'full' | 'full' reicht über den Inhaltsbereich; eine Dimension begrenzt die Linie auf eine feste Länge, die über align positioniert wird. |
align | 'left' | 'center' | 'right' | 'center' | Ausrichtung, wenn width nicht 'full' ist. |
marginFromBody | Dimension | 6 pt | Absoluter Abstand zwischen der dem Satzspiegel zugewandten Kante der Linie und der Kante des Satzspiegels. Unabhängig von anderen Elementen. |
marginFromEdge | Dimension | 0 pt | Horizontaler Einzug von der ausgerichteten Inhaltskante. Gilt nur, wenn width eine feste Dimension und align 'left' oder 'right' ist. |
parity | 'all' | 'odd' | 'even' | 'all' | Auf welchen Seiten die Linie erscheint. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Seitenrollen, auf denen die Linie erscheint (siehe das Feld pages der Textelemente). |
reserve | boolean | true | Nur Überschriftengestaltungen: ob die Linie zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe Reservierte Höhe). |
placement | ElementPlacement | abgeleitet aus align + marginFromBody + marginFromEdge | Erweiterte Platzierung (siehe Platzierung von Elementen). size.width / size.height legen die Linienlänge fest; width: 'fill' ist das alte 'full'. |
#Kastenelemente
Kastenelemente zeichnen ein abgerundetes Rechteck in den Platz – nützlich als Hintergrund hinter Text in Kapitelauftakten, Randspalten oder Fußzeilen. Kastenelemente werden ausschließlich über das Feld placement positioniert; sie haben keine alte flache Kurzform. Füllung, Kontur und Eckenradius stehen im verschachtelten Objekt style (ElementBoxStyle), wie im JSON-Beispiel unter „Platzierung von Elementen“.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
kind | 'box' | — | Unterscheidungsmerkmal. |
id | string | — | Stabile ID, eindeutig innerhalb des Platzes. Benachbarte Elemente verankern sich daran mit anchor.to: '#id'. Die Sandbox vergibt beim Anlegen eine. |
style.backgroundColor | ColorValue | transparent | Füllfarbe. Setzen Sie transparent für einen Kasten nur mit Kontur. |
style.borderColor | ColorValue | transparent | Konturfarbe. |
style.borderWidth | Dimension | 0 pt | Konturstärke. Konturen werden an der Innenseite des Begrenzungsrechtecks des Kastens gezeichnet, damit die Außenmaße gleich bleiben: Die Außenkante der Kontur verläuft entlang der Kastenkante, und ein abgerundeter Kasten behält seinen äußeren Radius. Eine Kontur, die so breit ist wie der Kasten, füllt ihn. Canvas, HTML und PDF zeichnen sie gleich (bis postext 1.4 zentrierten Canvas und PDF die Kontur auf der Kante, zur Hälfte außerhalb des Kastens). |
style.borderRadius | Dimension | 0 pt | Eckenradius. Wird beim Zeichnen auf die Hälfte der kürzeren Seite begrenzt. |
placement | ElementPlacement | — | Erforderlich. Siehe „Platzierung von Elementen“ unten. |
parity | 'all' | 'odd' | 'even' | 'all' | Auf welchen Seiten der Kasten erscheint. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Seitenrollen, auf denen der Kasten erscheint (siehe das Feld pages der Textelemente). |
reserve | boolean | true | Nur Überschriftengestaltungen: ob der Kasten zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe Reservierte Höhe). |
#Bildelemente
Ein Element image zeichnet eine Bitmap- oder SVG-Ressource des Dokuments – das Verlagslogo auf einer Titelseite, ein Zeichen in einem Kolumnentitel. Seine Größe ergibt sich aus seiner placement.size: Bleibt eine von width / height auf 'auto' (dem Standardwert), folgt die andere Seite dem Seitenverhältnis des Bilds; sind beide gesetzt, wird das Bild in den Kasten eingepasst und zentriert. Eine fehlende Ressource oder eine, die kein Bild ist, zeichnet nichts.
{
kind: 'image', id: 'logo', resourceId: 'logo-publisher',
placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: { value: 64, unit: 'mm' }, y: { value: 233, unit: 'mm' } }, size: { width: { value: 83, unit: 'mm' }, height: 'auto' } },
}resourceId nimmt dieselben Platzhalter an wie content eines Textelements, sodass eine Gestaltung für jede Überschrift ein anderes Bild zeichnen kann. Mit resourceId: '{attr.vignette}' in einem Überschriftenformat zeichnet # Chapter I {style="opener" vignette="log"} die Ressource log und # Chapter II {style="opener" vignette="wig"} die Ressource wig: Die Kapitel teilen sich das Format, statt eines Klons pro Bild. Eine Kopf- oder Fußzeile liest die Attribute des Kapitels der Seite, wie es {attr.<key>} in einem Kolumnentitel tut, und auch andere Platzhalter funktionieren ('map-{chapterNumber}'). Eine ID, die leer ausfällt, etwa bei einer Überschrift ohne das Attribut, zeichnet nichts. Seit postext 1.8.
| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
id | string | — | Stabiler Bezeichner; andere Elemente können sich daran als #id verankern. |
resourceId | string | — | ID einer Bitmap- oder SVG-Resource des Dokuments. Sie darf Platzhalter enthalten, darunter {attr.<key>}, die pro Überschrift, Teil oder Seite ausgefüllt werden. |
decorative | boolean | false | Das Bild ist reine Dekoration (ein Ornament, ein Band): Es gibt keinen Alternativtext an die Ausgabe weiter, auch wenn seine Ressource einen hat (siehe unten). |
placement | ElementPlacement | — | Anker, Versatz und Größe (siehe Platzierung von Elementen). Eine Seite mit 'fill' reicht bis zur Kante des Containers. |
parity, pages | wie oben | 'all' | Auf welchen Seiten das Bild erscheint. |
reserve | boolean | true | Nur Überschriftengestaltungen: ob das Bild zur Höhe zählt, die die Überschrift im Textfluss reserviert (siehe Reservierte Höhe). |
Das PDF-Backend bettet die Ressource wie eine Abbildung ein (ein SVG mit einer Druckvorlage verwendet diese); der HTML-Betrachter löst sie über resourceImageUrl auf.
Ein Bild, das eine Gestaltung zeichnet, ist Inhalt, wenn seine Ressource es beschreibt: Der altText der Ressource, sonst ihre Legende als reiner Text (ein Chip gelesen über seine Beschriftung, ein :ref über seinen text, wenn er einen hat), kommt in den VDT (VDTDesignImageBlock.altText), wird zum alt seines <img> im HTML und zu einer Figure mit /Alt in einem getaggten PDF, gelesen direkt nach dem Text seiner Gestaltung (die Tafel eines Kapitels nach dessen Überschrift). Ein Bild, dessen Ressource beides nicht hat, und eines, das als decorative gekennzeichnet ist, ist Dekoration: alt="" mit role="presentation" und ein Artefakt im PDF. Das Bild eines Kolumnentitels oder einer Fußzeile wiederholt sich auf jeder Seite und ist daher Seitenausstattung, gleich was seine Ressource sagt: kein altText im VDT, alt="" mit role="presentation" im HTML, ein Artefakt der Seite im PDF.
#Platzierung von Elementen
ElementPlacement ist das einheitliche Positionierungsmodell, das jeder Elementtyp (Text, Linie, Kasten) in jedem Gestaltungsplatz verwendet – Kopfzeile, Fußzeile oder der erweiterte Gestaltungsplatz einer Überschriftenebene. Drei Zustandsangaben beschreiben eine Platzierung:
interface ElementPlacement {
/** What this element anchors to and which edge of that target. */
anchor: {
to: 'container' | 'page' | 'bleed' | 'outer' | `#${string}`; // container = the slot; page = trim box; bleed = trim box + bleed; outer = the outer margin (header, footer); #id = another element
edge: AnchorEdge;
};
/** Distance from the anchor point. */
offset?: { x?: Dimension; y?: Dimension };
/** Optional fixed width / height. Width also accepts 'fill' (span the slot).
* `maxWidth` caps an 'auto' width (text): the element still shrink-wraps its
* content, so elements anchored to it stay attached, but a long text wraps or
* ellipsizes there — a running head can reserve room for the label hanging
* off it instead of squeezing that label out. */
size?: { width?: Dimension | 'fill' | 'auto'; height?: Dimension | 'fill' | 'auto'; maxWidth?: Dimension };
}AnchorEdge akzeptiert:
- Containerkanten (wenn
anchor.to'container','page'oder'bleed'ist):top,top-left,top-right,bottom,bottom-left,bottom-right,left,right. - Kanten relativ zu einem Element (wenn
anchor.to === '#someId'):right-of,left-of,below,above,align-top,align-bottom,align-left,align-right.
Jede elementrelative Kante setzt eine Ecke des Elements auf eine Ecke des Elements, an dem es verankert ist, und offset verschiebt es von dort:
right-of: seine obere linke Ecke auf die obere rechte Ecke des Ziels (daneben, Oberkanten auf gleicher Höhe);left-of: seine obere rechte Ecke auf die obere linke Ecke des Ziels;below: seine obere linke Ecke auf die untere linke Ecke des Ziels (darunter, linke Kanten bündig);above: seine untere linke Ecke auf die obere linke Ecke des Ziels;align-topundalign-left: seine obere linke Ecke auf die obere linke Ecke des Ziels. Beide Namen ergeben dieselbe Platzierung: Sowohl die Ober- als auch die linken Kanten fluchten;align-bottom: seine untere linke Ecke auf die untere linke Ecke des Ziels;align-right: seine obere rechte Ecke auf die obere rechte Ecke des Ziels.
Eine elementrelative Kante zusammen mit 'container', 'page' oder 'bleed' und eine Containerkante zusammen mit '#id' werden als obere linke Ecke gelesen.
anchor.to: 'page' verankert das Element an der Trim-Box (der physischen Seite nach dem Beschnitt) und 'bleed' an der Trim-Box, die auf jeder Seite um cutLines.bleed vergrößert ist (identisch mit der Trim-Box, solange Schnittmarken ausgeschaltet sind). Beide Rahmen werden außerdem zum Bezug für size: 'fill' und für die automatische Breitenbegrenzung, sodass ein farbiges Band unabhängig von den Seitenrändern von Kante zu Kante laufen kann:
{ "kind": "box", "id": "band", "placement": { "anchor": { "to": "bleed", "edge": "top-left" }, "size": { "width": "fill", "height": { "value": 6, "unit": "cm" } } }, "style": { "backgroundColor": { "hex": "#1d3557", "model": "hex" } } }Bei eingeschalteten Schnittmarken wird alles, was ein Element über die Anschnittbox hinaus zeichnet, abgeschnitten (siehe Schnittmarken).
anchor.to: 'outer' (Plätze von Kopf- und Fußzeile) verankert das Element am Außensteg der Seite: von der Kante des Satzspiegels bis zur Schnittkante auf der vom Bund abgewandten Seite und vom Kopf des Satzspiegels bis zu seinem Fuß. Er liegt in einem links gebundenen Buch rechts auf einem Recto und links auf einem Verso, in einem rechts gebundenen umgekehrt (page.binding), sodass ein Element beiden Seiten einer Doppelseite dient: ein Kolumnentitel am Vorderschnitt entlang (siehe Vertikale Textelemente). In jedem anderen Platz gilt es als 'container'. Der offset eines Textelements kann in em angegeben werden, Geviert seiner eigenen fontSize: vier Zeichen unter dem Kopf des Satzspiegels sind { "y": { "value": 4, "unit": "em" } }.
Im erweiterten Gestaltungsplatz einer Überschrift vergrößern Elemente, die an Seite oder Anschnitt verankert sind, die für die Überschrift reservierte Höhe nicht, es sei denn, sie reichen unter die Oberkante der Überschrift (ein Band über den Kopf der Seite liegt hinter dem Auftakt; ein Band, das unter die Überschrift reicht, schiebt den Fließtext nach unten). Verwenden Sie advancedDesign.minHeight, um unabhängig davon eine feste Auftakthöhe zu reservieren, und reserve: false bei einem Element, das den Text überhaupt nicht verschieben soll. Die vollständigen Regeln stehen unter Reservierte Höhe.
Jedes Element hat eine stabile id (von der Sandbox automatisch vergeben; Sie können sie auch von Hand setzen). Elemente, die an anderen Elementen verankert sind, bilden einen kleinen Abhängigkeitsgraphen, den die Engine vor dem Messen auflöst, sodass ein Element sich ohne manuelle Koordinaten an ein anderes anhängen kann.
Die alte Form aus align + marginFromBody + marginFromEdge wird bei der Eingabe geparst und beim Auflösen der Konfiguration in eine Platzierung umgeschrieben, sodass bestehende Konfigurationen unverändert weiter funktionieren.