Chapitre 4 · Partie II · Le métier
Configuration : page et mise en page
Le format de la page, les marges et la grille de ligne de base, les colonnes et leurs gouttières, les en-têtes et pieds de page
En bref
Cette page réunit les réglages de la feuille elle-même. Vous choisissez le format de la page, les marges, le côté de la reliure et la grille sur laquelle reposent les lignes de texte. Vous fixez le nombre de colonnes d’une page et l’espace qui les sépare. Vous décidez aussi de ce qui s’imprime en haut et en bas de chaque page, comme le numéro de page ou le titre du chapitre. C’est l’une des neuf pages de la référence Configuration.
#Page
La propriété page contrôle les dimensions physiques et l’apparence de la page.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
sizePreset | PageSizePreset | '17x24' | Format de page prédéfini. Indiquez 'custom' pour utiliser une largeur et une hauteur explicites. |
width | Dimension | 17 cm | Largeur de la page. Tirée de sizePreset si elle est omise ; une valeur explicite l’emporte toujours (utilisez sizePreset: 'custom' pour des formats entièrement personnalisés). |
height | Dimension | 24 cm | Hauteur de la page. Tirée de sizePreset si elle est omise ; une valeur explicite l’emporte toujours. |
margins | PageMargins | 2 cm de chaque côté | Espace entre le bord de la page et la zone de contenu. Chaque côté (haut, bas, gauche, droite) se règle indépendamment. Avec mirror: true, les marges sont des marges de pages en regard : left est la marge intérieure (côté dos) et right la marge extérieure ; les pages impaires (la page 1 est impaire) les gardent telles qu’écrites et les pages paires les inversent, si bien que la zone de contenu (et avec elle les colonnes, les bandes de flottants, les conteneurs d’en-tête et de pied de page et les bandes d’ouverture) se déplace d’une page à l’autre de la double page. Par défaut false. Voir ci-dessous. |
backgroundColor | ColorValue | transparent | Couleur de fond de la page. |
dpi | number | 300 | Le nombre de pixels par pouce dans lequel travaille la mise en page : la façon dont les unités physiques (cm, mm, in, pt) deviennent ses pixels. Une image matricielle sans résolution propre prend un pixel de mise en page par pixel d’image, si bien qu’elle s’imprime à cette résolution en ppp : gardez 300 pour l’impression, ou donnez une résolution aux images (Resource.bitmap.resolution, layout.bitmapResolution ; voir Format du document › Taille des images matricielles). Le contrôle en amont vérifie la résolution effective de chaque image. |
cutLines | CutLinesConfig | désactivé | Afficher des traits de coupe aux coins de la page pour le massicotage. Une fois activés, le canvas s’agrandit pour inclure la zone de fond perdu et les traits de coupe. Voir ci-dessous. |
baselineGrid | BaselineGridConfig | désactivée | Dessiner la grille de ligne de base sur les pages, pour vérifier le rythme vertical. La mise en page s’aligne sur la grille, qu’elle soit dessinée ou non. Voir ci-dessous. |
binding | 'auto' | 'left' | 'right' | 'auto' | Le bord sur lequel le livre est relié. 'auto' vaut 'right' quand layout.writingMode vaut 'vertical-rl', quand le document s’écrit de droite à gauche (direction) ou quand sa section comics se lit de droite à gauche (un manga, une édition japonaise ou en chinois traditionnel), et 'left' sinon. Un livre relié à droite s’ouvre sur une page de gauche et inverse ses marges dans l’autre sens. Réglage du livre : la layout propre d’un style de titre ne le change jamais. Voir Reliure. |
#Marges en miroir
Les livres se lisent par doubles pages, et la marge intérieure diffère généralement de la marge extérieure. margins.mirror transforme les quatre marges en marges de pages en regard :
{
"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
}
}
}Avec cette configuration, chaque page impaire a une marge de 2,2 cm à gauche (le dos) et de 1,4 cm à droite (la tranche) ; chaque page paire a 1,4 cm à gauche (la tranche) et 2,2 cm à droite (le dos). Chaque page mise en page porte sa propre contentArea sur la VDTPage, si bien que tout ce qui en dérive (colonnes, bandes de flottants sur toute la largeur, conteneurs d’en-tête et de pied de page, bandes d’ouverture span: 'page') suit automatiquement la géométrie en miroir. Les cadres de page et de fond perdu qu’utilisent les éléments de maquette ancrés à 'page' / 'bleed' ne sont pas concernés : ils décrivent la feuille physique, pas les marges.
#Reliure
« Les documents chinois composés verticalement sont reliés à droite, et les documents composés horizontalement sont reliés à gauche » (clreq §7.1.1.1). page.binding: 'right' met en page un livre pour le bord droit :
- La page 1 reste impaire et reste le recto, si bien que
breakBefore.parity,:::pagebreak{parity}, les éléments de maquette dotés d’uneparityet tous les décomptes de pages gardent leur sens. Ce qui change, c’est le côté où se trouve le recto : la page de gauche de la double page. Un chapitre qui s’ouvre sur un nouveau recto s’ouvre sur une page de gauche (clreq §7.1.3.3). - Avec
margins.mirror,leftreste la marge intérieure, mais ce sont les pages impaires qui inversent : la page 1 a sa marge intérieure à droite, la page 2 à gauche. Une colonne latéraleoneAndHalfen'outer'/'inner', un flottant pivoté placé contre le dos, les marges des pages de partie et les icônes d’angle d’encadré en'outer'/'inner'suivent la même règle. - Le document l’indique (
VDTDocument.binding: 'right'), si bien qu’un hôte n’a jamais besoin de lire la configuration : le Sandbox affiche ses doubles pages sous la forme[3 | 2], avec la page 1 seule à gauche du dos, et sa visionneuse HTML fait défiler les pages de droite à gauche, en s’ouvrant à l’extrémité droite, la flèche gauche menant à la page suivante.renderToHtmlen mode multiple dispose la rangée de droite à gauche. - Le PDF porte
/ViewerPreferences << /Direction /R2L >>et/PageLayout /TwoPageRight(la page 1 seule, puis des paires), qu’il soit balisé ou non. Acrobat et Foxit les suivent ; la visionneuse intégrée de Chrome ignore les deux.
Les folios et les titres courants ne se déplacent pas d’eux-mêmes : un modèle qui imprime le numéro de page à l’angle extérieur doit avoir ses éléments impairs et pairs réglés pour le bord droit (les éléments acceptent une parity).
Un livre écrit de droite à gauche (arabe, persan, hébreu…) est lui aussi relié à droite : 'auto' donne le bord droit quand la direction du document se résout en 'rtl'. Un tel livre inverse aussi tout son flux, si bien que sa première colonne est celle de droite et que ses retraits, ses puces de liste, ses flottants et ses notes se placent à droite ; les emplacements d’en-tête et de pied de page restent physiques. Voir Mise en page arabe.
Une bande dessinée lue de droite à gauche est elle aussi reliée à droite : 'auto' donne le bord droit quand la configuration a une section comics dont le sens de lecture se résout en 'rtl'. C’est le cas d’un manga (comics.artDirection: 'rtl') et d’une édition japonaise ou en chinois traditionnel d’une bande dessinée occidentale. C’est la section qui décide pour tout le livre, et non les blocs :::page d’un chapitre. Voir Bande dessinée.
#Formats de page prédéfinis
| Préréglage | Largeur | Hauteur | Usage courant |
|---|---|---|---|
'11x17' | 11 cm | 17 cm | Livres de poche |
'12x19' | 12 cm | 19 cm | Broché standard |
'17x24' | 17 cm | 24 cm | Livres techniques, manuels |
'21x28' | 21 cm | 28 cm | Magazines, rapports (proche de l’A4) |
'broadsheet' | 375 mm | 597 mm | Journaux grand format (broadsheet) |
'berliner' | 315 mm | 470 mm | Journaux au format berlinois |
'tabloid' | 280 mm | 430 mm | Journaux tabloïd |
'compact' | 297 mm | 420 mm | Journaux compacts (un grand format plié en deux) |
Les quatre formats de journal sont nouveaux dans postext 1.18 et ne figurent pas sur le dessin : une page grand format a presque quatre fois la surface d’une page de 21 × 28. On les compose généralement avec la mise en page 'multiple' ; six colonnes sont courantes sur un grand format et cinq sur un tabloïd.
#Grille de ligne de base
La grille de ligne de base est le rythme du texte courant : des lignes espacées d’une hauteur de ligne du texte courant, comptées depuis le haut de la zone de contenu. La mise en page l’utilise, qu’elle soit dessinée ou non : les titres, les fins de liste, les encadrés, les figures et les formules hors texte ramènent le texte sur la grille (sauf si leur propre snapToGrid est désactivé), si bien que les lignes des colonnes voisines restent alignées. enabled ne fait que dessiner les lignes, dans le canvas, le PDF et les vues du Sandbox, pour vérifier ce rythme ; l’activer ou le désactiver ne déplace rien. Les lignes ne couvrent que le texte réel de la page (de la première ligne de texte à la dernière), si bien que les bandes de flottants, les pages blanches de parité et l’espace inutilisé en fin de page n’affichent pas de grille.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
enabled | boolean | false | Dessiner ou non les lignes de la grille (canvas et PDF). Seulement le dessin : la mise en page est la même dans les deux cas. |
color | ColorValue | #cccccc | Couleur des lignes de la grille. |
lineWidth | Dimension | 0.5 pt | Épaisseur des lignes de la grille. |
page: {
baselineGrid: { enabled: true, color: { hex: '#e0e0e0', model: 'hex' } }
}#Traits de coupe
Une fois activés, le canvas s’agrandit pour inclure une zone de fond perdu et le moteur dessine des traits de coupe à chaque coin pour la production imprimée. Le PDF donne à chaque page une TrimBox et une BleedBox ; un fichier PDF/X les a même sans traits de coupe. Dans le Sandbox, ils se règlent dans Export › Préparation à l’impression.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
enabled | boolean | false | Agrandir ou non le canvas avec le fond perdu et dessiner les traits de coupe. |
bleed | Dimension | 3 mm | Zone supplémentaire autour de la page, utilisée pour le fond perdu à l’impression. |
markLength | Dimension | 5 mm | Longueur de chaque trait de coupe. |
markOffset | Dimension | 3 mm | Écart entre le bord de coupe et le début de chaque trait de coupe. Un trait ne commence jamais à l’intérieur du fond perdu : quand bleed est plus large, le trait commence au bord du fond perdu. |
markWidth | Dimension | 0.25 pt | Épaisseur des traits de coupe. |
color | ColorValue | #000000 | Couleur des traits de coupe sur le canvas (l’aperçu à l’écran). Le PDF les peint toujours en couleur de repérage (voir ci-dessous). |
La feuille s’agrandit de bleed + markOffset + markLength de chaque côté, et la page rognée se trouve en son milieu. Chaque coin de la coupe reçoit deux traits, longs de markLength, chacun dans le prolongement de l’un des bords qui s’y rejoignent. Un trait commence à markOffset à l’extérieur de la coupe, ou au bord du fond perdu quand bleed est le plus grand des deux, si bien qu’aucun trait ne recouvre une illustration qui déborde dans le fond perdu. Avec les valeurs par défaut (3 mm de fond perdu, un écart de 3 mm), les traits vont de 3 à 8 mm à l’extérieur de la coupe, et une bande blanche de 3 mm de large fait le tour de la feuille au-delà. cropMarkSegments(page, doc.config.page, doc.trimOffset) renvoie les huit traits d’une page en pixels de page, ceux que dessinent les moteurs canvas et PDF. Le troisième argument est la position de la coupe dans la feuille, la valeur à partir de laquelle la TrimBox du PDF est écrite ; s’il est omis, il est calculé de la même façon à partir de cutLines.
Rien d’autre que les traits ne s’imprime hors du fond perdu. Tout ce que la page peint, y compris les éléments de maquette ancrés à 'page' ou 'bleed', est découpé à la boîte de fond perdu sur le canvas, dans le PDF et dans la sortie HTML, comme le fait un export de PAO : une bande ou une image placée volontairement au-delà du fond perdu est coupée à son bord, là où le massicot la ferait disparaître de toute façon. Jusqu’à postext 1.4, un tel élément se prolongeait par-dessus les traits jusqu’au bord de la feuille.
Dans le PDF (postext-pdf), la MediaBox de chaque page est la feuille entière. La page porte aussi une TrimBox, la page rognée, et une BleedBox, la coupe plus le fond perdu, que lisent les outils d’imposition et de contrôle en amont. Les traits sont peints en couleur de repérage, la séparation /All, si bien qu’ils s’impriment sur chaque plaque. Cela vaut quel que soit l’espace colorimétrique dans lequel le PDF est écrit (RVB, niveaux de gris ou CMJN) : un noir simple arriverait chez l’imprimeur en noir riche ou sur la seule plaque du noir. color ne s’applique qu’au canvas.
#Numérotation
Le bloc page.pageNumbering contrôle le format des étiquettes de page et la valeur de départ du compteur. Il ne définit que la valeur par défaut de tout le document ; pour redémarrer la numérotation en cours de document (par exemple des pages liminaires en chiffres romains qui passent à des chapitres en chiffres arabes à partir de 1), utilisez la directive :::numbering (voir Format du document → Directives).
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
format | 'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha', ou un style d’Asie orientale | 'decimal' | Style numérique utilisé pour écrire les étiquettes de page. Les styles d’Asie orientale ('trad-chinese-informal' numérote les pages 一, 二, 三) sont listés sous Graphies des formats de numérotation. |
startAt | number | 1 | Valeur numérique attribuée à la première page, quel que soit le format. format: 'lower-roman', startAt: 1 donne i, ii, iii, … ; format: 'decimal', startAt: 17 donne 17, 18, 19, …. |
L’étiquette calculée est enregistrée sur chaque VDTPage dans pageLabel ; c’est la valeur que prend la variable {pageNumber} des en-têtes et pieds de page. Les PDF émettent un arbre de nombres /PageLabels, pour que l’indicateur de page d’Aperçu ou d’Acrobat et la navigation « Aller à la page » correspondent exactement aux étiquettes imprimées. Un style pour lequel le PDF n’a pas de code (numération chinoise, chiffres cerclés et pleine chasse) est écrit page par page, si bien que le lecteur affiche lui aussi 一, 二, 三.
Graphies des formats de numérotation
Trois réglages choisissent un format de numérotation, et chacun a fini par avoir sa propre graphie : les étiquettes de page (page.pageNumbering.format et :::numbering{format=…}) disent lower-roman, les listes numérotées (orderedLists.numberFormat) disent arabic pour le décimal, et les types de ressources (counterFormat) disent roman-lower. Chacun d’eux accepte toutes les graphies ci-dessous, si bien qu’un format copié d’un réglage fonctionne dans les autres. Les noms ne sont pas sensibles à la casse ; les formes d’un seul caractère le sont (i et I diffèrent).
| Format | Imprime | Graphies acceptées |
|---|---|---|
| Décimal | 1, 2, 3 | decimal, arabic, 1 |
| Romain minuscule | i, ii, iii | lower-roman, roman-lower, i |
| Romain majuscule | I, II, III | upper-roman, roman-upper, I |
| Alphabétique minuscule | a, b, c | lower-alpha, alpha-lower, lower-latin, a |
| Alphabétique majuscule | A, B, C | upper-alpha, alpha-upper, upper-latin, A |
| Numération chinoise, simplifiée | 一, 十二, 一百零一 | simp-chinese-informal, 一 dans un document en chinois simplifié |
| Numération chinoise, traditionnelle | 一, 十二, 一萬 | trad-chinese-informal, cjk-ideographic, 一 dans un document en chinois traditionnel |
| Numération financière chinoise, simplifiée | 壹, 壹拾贰, 壹佰贰拾 | simp-chinese-formal, 壹 dans un document en chinois simplifié |
| Numération financière chinoise, traditionnelle | 壹, 壹拾貳, 壹佰貳拾 | trad-chinese-formal, 壹 dans un document en chinois traditionnel |
| Chiffres chinois | 一二〇, 二〇二六 | cjk-decimal, 〇 |
| Troncs célestes | 甲, 乙, 丙 … 癸 | cjk-heavenly-stem, 甲 |
| Branches terrestres | 子, 丑, 寅 … 亥 | cjk-earthly-branch, 子 |
| Numération japonaise | 一, 十二, 百一, 一万一 | japanese-informal, 一 dans un document japonais |
| Numération japonaise formelle | 壱, 壱拾弐, 壱百 | japanese-formal, 壱 |
| Hiragana, ordre du gojūon | あ, い, う … ん, ああ | hiragana, あ |
| Katakana, ordre du gojūon | ア, イ, ウ … ン, アア | katakana, ア |
| Hiragana, ordre iroha | い, ろ, は … す, いい | hiragana-iroha, い |
| Katakana, ordre iroha | イ, ロ, ハ … ス, イイ | katakana-iroha, イ |
| Cerclés | ①, ②, ③ … ㊿ | circled-decimal, ① |
| Chiffres pleine chasse | 1, 2, 3 | fullwidth-decimal, 1 |
| Chiffres indo-arabes | ١, ٢, ٣ … ١٠ | arabic-indic, ١ |
| Chiffres persans | ۱, ۲, ۳ … ۱۰ | persian, urdu, ۱ |
| Lettres arabes, ordre abjad | أ, ب, ج, د, هـ … غ, أأ | abjad, أبجد |
| Lettres arabes, ordre alphabétique | أ, ب, ت, ث … ي, أأ | hijai, arabic-alpha, arabic-alphabetic, أبتث |
| Numération abjad | ا, ب … يا (11), غتمو (1446) | arabic-abjad |
| Numération abjad, valeurs maghrébines | ص (60), ض (90), ش (1000) | arabic-abjad-maghrebi, maghrebi-abjad |
Les styles d’Asie orientale gardent leurs noms CSS Counter Styles dans les trois réglages. La numération chinoise informelle écrit 十 pour 10 à 19 sans 一 initial (十二, mais 一百一十), un seul 零 pour une suite de zéros à l’intérieur du nombre (一百零一, 一千零五十), et 万 ou 萬 pour dix mille, 亿 ou 億 pour cent millions (一万零一十). Seul cjk-decimal utilise 〇, chiffre par chiffre, comme s’écrivent les années (二〇二六, GB/T 15835—2011). Les troncs s’arrêtent à 10, les branches à 12 et les chiffres cerclés à 50 ; au-delà, le nombre s’imprime en chiffres. 一 et 壹 suivent l’écriture de la locale du document : traditionnelle pour zh-Hant, zh-TW ou zh-HK, simplifiée sinon. Certaines éditions anciennes écrivent 101 sous la forme 一百一, sans 零 ; Postext n’imprime pas cette forme.
Les styles japonais (depuis postext 1.16) suivent eux aussi CSS Counter Styles. japanese-informal écrit 十 sans 一 initial et sans 零 pour une position vide (百一, 千十), et japanese-formal les 大字 壱 弐 参 拾 百 阡, avec 壱 conservé devant chaque unité (壱拾, 壱百). CSS arrête les deux à 9 999 ; Postext continue par groupes de quatre chiffres avec 万 億 兆 (en formel 萬 億 兆), chaque groupe gardant son 一 devant une unité : 一万一 vaut 10 001, 一億一万 100 010 000. Dans un document japonais (ja, ja-JP…), 一 signifie japanese-informal, si bien que 第{1:一}章 y imprime 第百一章, et 第一百零一章 dans un document chinois ; 壹 reste la numération formelle chinoise. Les séries de kana sont les listes CSS : 48 kana dans l’ordre du gojūon (ゐ et ゑ compris) et 47 dans l’ordre du poème iroha ; après le dernier, elles continuent avec deux kana (ああ, いい), et elles n’ont pas de zéro, si bien qu’un élément numéroté 0 imprime 0. Les chiffres kanji positionnels (二〇二六), la forme des années et des folios, relèvent de cjk-decimal.
Les styles arabes gardent le nom CSS quand CSS en a un (arabic-indic, persian ; urdu et maghrebi-abjad, issus des Ready-made Counter Styles du W3C, sont lus comme persian et arabic-abjad-maghrebi). arabic garde son ancien sens, les chiffres européens. arabic-abjad écrit la numération abjad additive de l’arabe classique et de la foliotation des manuscrits, la plus haute valeur en premier : 11 s’écrit يا, 1446 غتمو, et le nombre de milliers se place avant غ (2000 بغ, 1002 غب) ; au-delà de 999 999, le nombre s’imprime en chiffres. La note du W3C utilise ce nom pour une série de 28 lettres où 11 vaut ك ; Postext appelle cette série abjad, la numérotation par lettres des éléments de liste dans l’ordre abjad (أ، ب، ج، د، هـ), et hijai l’ordre alphabétique (أ، ب، ت، ث). Les deux écrivent la première lettre avec sa hamza (أ), et un hâ qui serait isolé sous la forme هـ, avec un tatweel, pour qu’aucune ne soit lue comme les chiffres ١ et ٥ ; au-delà de 28, elles doublent, comme le fait lower-alpha (أأ, أب). Les valeurs maghrébines suivent le moyen mnémotechnique صعفض قرست ثخذ ظغش (ص 60, ض 90) ; la liste du W3C intervertit ص et ض. Un أ seul ne permet pas de distinguer les deux séries de lettres, si bien que leurs jetons sont leurs quatre premières lettres : {1:أبجد}, {1:أبتث}. Les chiffres propres d’un document se règlent avec numerals.
Les autres graphies sont destinées aux configurations que rien ne vérifie par typage : préréglages JSON et JavaScript simple. Les types TypeScript ne nomment toujours que la graphie propre de chaque réglage (celle qu’écrit le Sandbox et que renvoie resolveAllConfig, noms d’Asie orientale compris), si bien qu’une PostextConfig typée s’y tient, et qu’une autre graphie nécessite un cast.
// 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 convertit les formats de liste et de page dans la graphie propre à leur réglage ('decimal' se résout en 'arabic' dans orderedLists, 'roman-lower' en 'lower-roman' dans page.pageNumbering) et stripConfigDefaults supprime toute graphie de la valeur par défaut. Les panneaux du Sandbox affichent chacun des trois réglages dans sa propre graphie, quelle que soit celle qu’utilise la configuration. Toute autre valeur (roman, 01, une faute de frappe) numérote en décimal au lieu d’imprimer undefined, et est signalée par un avertissement de configuration. Les modèles de numérotation des titres acceptent les mêmes noms après les deux-points ({1:roman-upper} équivaut à {1:I}), à côté de leur propre {1:01} complété par des zéros.
#Mise en page
La propriété layout contrôle la disposition des colonnes dans la zone de contenu.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
layoutType | 'single' | 'double' | 'oneAndHalf' | 'multiple' | 'double' | Disposition des colonnes. Voir ci-dessous le détail de chaque type. |
columnCount | number | 3 | Le nombre de colonnes égales en lesquelles une mise en page 'multiple' découpe le texte courant : un entier de 3 à 8. Une valeur hors de cet intervalle, ou non entière, est bornée et signalée (voir Types de mise en page). La mise en page 'multiple' propre à un style de titre prend le nombre du document, sauf si elle définit le sien. Depuis postext 1.18. |
gutterWidth | Dimension | 0.75 cm | Espace horizontal entre les colonnes. Ne s’applique qu’aux mises en page à plusieurs colonnes. |
sideColumnPercent | number | 33 | Largeur de la colonne latérale en pourcentage de la zone de contenu. Toute valeur qui laisse une certaine largeur aux deux colonnes est utilisée telle quelle ; une valeur qui ne le ferait pas est bornée, et la construction le signale (voir Types de mise en page). Ne s’applique qu’à la mise en page 'oneAndHalf'. |
sideColumnRole | 'text' | 'floats' | 'text' | Ce que porte la colonne latérale : du texte courant (il y coule après la colonne principale), ou seulement les ressources et les encadrés placés avec span: 'side', ce qui en fait une colonne de marge réservée aux flottants. 'oneAndHalf' uniquement. Avec 'text', un paragraphe qui passe d’une colonne à l’autre est recoupé pour la largeur de la colonne où il continue ; jusqu’à postext 1.4, il gardait les lignes de la colonne où il avait commencé, et une ligne composée pour la colonne principale débordait de la colonne latérale, qui la tronquait. |
sideColumnSide | 'right' | 'left' | 'outer' | 'inner' | 'right' | Bord de la zone de contenu où se trouve la colonne latérale. 'outer' / 'inner' suivent la parité de la page quand les marges sont en miroir (le bord extérieur d’un recto est son bord droit, celui d’un verso son bord gauche). 'oneAndHalf' uniquement. |
columnRule | ColumnRuleConfig | désactivé | Filet facultatif tracé entre les colonnes. Voir ci-dessous. |
fitFiguresToPage | boolean | false | Réduire une figure (image matricielle ou SVG) dont l’image, la légende et la note seraient plus hautes que la zone de contenu jusqu’à ce qu’elles y tiennent (une image dotée d’une zone de sécurité, Resource.safeArea, est d’abord recadrée dans celle-ci à pleine largeur, et seulement réduite si elle ne tient toujours pas), et composer plus petite une figure en ligne un peu trop haute pour la place restant dans sa colonne (jusqu’à la moitié de sa largeur, la légende gardant la justification de la colonne) pour qu’elle reste avec son texte. Une image réduite se place dans son emplacement selon placement.align. La visionneuse HTML l’active, car ses pages ne sont pas plus hautes que l’écran ; les pages imprimées sont dimensionnées pour leurs figures. |
bitmapResolution | 'document' | 'file' | number | 'document' | La façon dont une image matricielle sans bitmap.resolution propre prend sa taille d’impression naturelle. 'document' lit ses pixels à page.dpi ; un nombre est la résolution en ppp de toutes ces images (300 : une image de 2400 px fait 203,2 mm de large, quel que soit le dpi de la page) ; 'file' utilise la résolution qu’indique son fichier (bitmap.fileResolution), 72 et 96 valant comme non définies, et sinon page.dpi. La colonne limite toujours l’image, et une image plus petite n’est jamais agrandie. Voir Format du document › Taille des images matricielles. Depuis postext 1.24. |
floatShrink | FloatShrinkConfig | mode: 'never' | La valeur par défaut du document pour le placement.shrink d’une image flottante (mode : 'never', 'page' ou 'slot') et pour son placement.minScale (minScale, 0.7 si non défini) : réduire l’image, en gardant ses proportions, à la place disponible dans son emplacement au lieu de la repousser plus loin (voir Format du document › Placement). Le placement d’une ressource, puis le defaultPlacement de son type, la remplacent. fitFiguresToPage limite chaque figure à la zone de contenu ; floatShrink regarde la bande que prendrait réellement un flottant, sous une ouverture, à côté d’autres flottants ou au-dessus de notes de bas de page. Depuis postext 1.24. |
wrap | TextWrapConfig | minTextWidth: 12em, minLinesBeside: 2, defaultWidth: 0.45 | Le texte qui court à côté d’une image ou d’un encadré plus étroit que sa colonne (placement.wrap, le wrap d’un encadré) : gap, l’espace entre l’élément et le texte (une ligne de texte courant si non défini) ; minTextWidth, la justification la plus étroite que peut prendre le texte à côté, en longueur ou en part de la colonne (plus étroite, l’élément prend sa bande entière, avec un avertissement textWrap) ; minLinesBeside, le nombre minimal de lignes qui vaut la peine d’être composé à côté ; defaultWidth, la part de la colonne que prend un élément habillé qui ne définit pas de width. Voir Format du document › Habillage. Depuis postext 1.24. |
floatsAtCitingPage | boolean | false | La valeur par défaut du document pour placement.citingPage : un flottant 'top' ou 'auto' peut prendre la tête de la page (un flottant sur toute la largeur de la page) ou de la colonne (un flottant de colonne) où tombe la ligne qui l’appelle pour la première fois, au lieu du premier emplacement libre après cette ligne ; le texte au-dessus du renvoi descend sous lui (voir Format du document › Placement). Le placement d’une ressource, puis le defaultPlacement de son type, la remplacent. Depuis postext 1.25. |
maxTopFraction | number | 0.7 | La plus grande part de la hauteur d’une colonne, de 0 à 1, que peut prendre un flottant placé en tête de la page ou de la colonne qui l’appelle, avec les flottants qui s’y trouvent déjà, pour que la page garde de la place pour son texte (le \topfraction de LaTeX). Un flottant qui prendrait davantage va à son emplacement habituel. Depuis postext 1.25. |
hugClosingFloats | boolean | true | Sur la page de clôture d’un chapitre (et du document), les figures et tableaux sur toute la largeur placés sous la dernière bande de texte remontent pour se placer à un écart de flottant sous elle, empilés dans leur ordre : rien ne les suit à cet endroit. false les laisse là où leur placement les a mis, si bien qu’un flottant position: 'bottom' finit au pied de la page sur la page de clôture comme sur toutes les autres, par exemple dans une fiche technique dont le contour se termine à la même hauteur sur chaque page. Les pages qui ont une colonne latérale ne les déplacent jamais. |
inlineResourceGap | 'around' | 'above' | 'around' | L’endroit où une ressource en ligne (placement.position: 'here', incorporée avec ::resource) garde l’écart de flottant, une ligne. 'around' le garde au-dessus et au-dessous de la ressource, et le texte qui la suit revient sur la grille de ligne de base sous cet écart ; un titre, une liste, un encadré ou une autre ressource en ligne placés juste après partagent l’écart du dessous avec leur propre espace au-dessus, le plus grand des deux s’appliquant. 'above' ne le garde qu’au-dessus : le texte qui suit la ressource reprend à la ligne de grille suivante, aussi proche soit-elle (de rien du tout à une ligne), comme jusqu’à postext 1.4. Les configurations enregistrées par des versions antérieures dont les chapitres incorporent une ressource sont lues avec 'above', pour que leurs pages ne bougent pas (voir Paquets écrits par postext 1.4 ou antérieur). Une configuration écrite en code pour la 1.4 garde l’ancien espacement en définissant elle-même 'above', ou par pinLegacyInlineGap de postext/bundle. |
inlineResourceGapInBoxes | boolean | true | Si une ressource en ligne à l’intérieur d’un encadré (:::callout) garde l’écart que fixe inlineResourceGap, une ligne du texte propre à l’encadré : au-dessus de la ressource, et aussi au-dessous avec 'around', le plus grand de cet écart et de l’espace propre du bloc suivant s’appliquant. En haut ou au pied de l’encadré, ou d’un fragment d’un encadré coupé, c’est la marge intérieure qui détache la ressource et aucun écart n’est ajouté. false place la ressource juste sous le texte qui la précède et le texte qui la suit juste sous la ressource, comme jusqu’à postext 1.4. Les configurations enregistrées par des versions antérieures dont les chapitres incorporent une ressource dans un encadré sont lues avec false (voir Paquets écrits par postext 1.4 ou antérieur) ; en code, pinLegacyBoxResourceGap de postext/bundle fait de même. |
inlineCaptionSide | boolean | true | Si une ressource placée dans le texte (position: 'here') prend en compte placement.captionSide comme le fait un flottant de colonne. Dans une mise en page à une colonne et demie dont la colonne latérale est réservée aux flottants (sideColumnRole: 'floats'), sa légende et sa note vont dans la colonne latérale, au niveau du haut de son contenu, là où cette colonne est libre à côté d’elle ; le bloc dans la colonne de texte n’a alors que la hauteur du contenu seul. Là où la colonne latérale est occupée, et sur une page qui n’en a pas, la légende reste sous le contenu. false réserve les légendes latérales aux flottants de colonne, comme jusqu’à postext 1.27. Depuis postext 1.28. Les configurations enregistrées par des versions antérieures avec une mise en page 'oneAndHalf' dont les chapitres incorporent une ressource sont lues avec false ; en code, pinLegacyInlineCaptionSide de postext/bundle fait de même. |
boxChildSplitMinLines | number | 2 | Le nombre minimal de lignes d’un paragraphe ou d’un élément de liste qu’une coupe à l’intérieur de celui-ci laisse de chaque côté quand un encadré se coupe (splitMinLines, sous Styles d’encadré, compte toujours toutes les lignes de l’encadré de chaque côté de la coupe). Un entier, au moins 1. Avec la valeur par défaut, une coupe ne laisse jamais une ligne isolée d’un paragraphe ou d’un élément au pied d’une colonne ou en tête de la suivante ; un style d’encadré dont le splitMinLines est plus bas fixe la limite à la place. 1 permet à une coupe de laisser une seule ligne du paragraphe ou de l’élément d’un côté, comme jusqu’à postext 1.4. Les configurations enregistrées par des versions antérieures dont les chapitres contiennent un :::callout sont lues avec 1 (voir Paquets écrits par postext 1.4 ou antérieur) ; en code, pinLegacyBoxChildCut de postext/bundle fait de même. |
flowColumns | boolean | true | Une directive :::columns hors d’un encadré compose ses blocs en sous-colonnes de la colonne de texte (ou sur toute la largeur de la page avec span="page"), et un groupe, dans un encadré ou dans le texte, est coupé entre ses sous-colonnes quand il ne tient pas, et continue dans la colonne ou la page suivante (voir Format du document › :::columns). false ignore la directive hors d’un encadré et ne coupe jamais à l’intérieur d’un groupe, comme jusqu’à postext 1.24 ; les configurations enregistrées par des versions antérieures dont les chapitres contiennent une directive :::columns sont lues avec false ; en code, pinLegacyFlowColumns de postext/bundle fait de même. Une section stylée garde la valeur du document. Depuis postext 1.25. |
floatsUnderOpener | boolean | true | Sous une ouverture sur toute la largeur de la page (un niveau ou un style de titre avec span: 'page') placée au-dessus de deux colonnes de texte ou plus, la tête de la colonne propre de l’ouverture, juste sous sa bande, est un emplacement pour un flottant 'top' ou 'auto', au niveau des têtes des autres colonnes : un encadré flottant placé juste après l’ouverture, ou une ressource incorporée à cet endroit, se place sous l’ouverture dans la première colonne (sur plusieurs colonnes à partir de celle-ci avec columns), et le texte de la colonne commence sous lui. Un flottant appelé dans le texte courant suit toujours la ligne qui l’appelle. false n’offre aucun emplacement à cet endroit, si bien qu’un tel flottant atterrit à partir de la deuxième colonne, comme jusqu’à postext 1.24 ; les configurations enregistrées par des versions antérieures qui définissent un titre sur toute la largeur de la page sont lues avec false ; en code, pinLegacyOpenerHeadFloats de postext/bundle fait de même. Une section stylée garde la valeur du document. Depuis postext 1.25. |
openerFloats | 'allow' | 'warn' | 'avoid' | 'allow' | Les flottants sur une page d’ouverture : la page qu’ouvre une partie, la page qu’ouvre un titre avec son propre saut (breakBefore, ou un titre span: 'page' qui ouvre une page), et la première page d’un document qui commence par un titre. Un flottant est une figure, un tableau ou un strip de bande dessinée au placement flottant, ou un :::callout flottant en tête ou en pied de page, qu’il prenne une colonne, la largeur de la page ou la colonne latérale ; une ressource incorporée en ligne ('here'), un encadré 'fixed' et un encadré span: 'side' n’en sont pas. 'allow' y place les flottants comme sur n’importe quelle page. 'warn' compose la page de la même façon et signale chaque flottant qui s’y trouve (un avertissement openerFloat, voir Avertissements dans le document). 'avoid' garde la page d’ouverture dégagée : un flottant qui y tomberait prend le premier emplacement libre après elle, si bien que la page ne contient que son ouverture et son texte. Une section stylée garde la valeur du document. Depuis postext 1.28. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | Le sens des lignes. 'vertical-rl' compose le texte chinois et japonais verticalement : les caractères de haut en bas, chaque ligne à gauche de la précédente. La layout d’un style de titre en hérite sauf si elle définit le sien, si bien qu’une annexe horizontale peut suivre un livre vertical. Voir Écriture verticale. |
#Écriture verticale
Avec writingMode: 'vertical-rl', une page est mise en page comme une page horizontale tournée d’un quart de tour dans le sens des aiguilles d’une montre. Le flux est composé dans un cadre aussi large que la feuille est haute ; ses lignes sont les colonnes du texte vertical, lues depuis la droite, et tout ce que le moteur fait avec les lignes (coupure, justification, flottants, notes de bas de page, règles de maintien ensemble) fonctionne dans ce cadre. Ainsi, sur la feuille :
- Une colonne de la mise en page est un étage (栏) :
layoutType: 'double'donne deux étages superposés de haut en bas, remplis à partir du coin supérieur droit ;gutterWidthest l’écart entre eux, et le filet entre colonnes devient un filet horizontal entre eux. Les étages ne sont pas équilibrés à la fin d’un chapitre (clreq §7.1.3.4) : l’équilibrage des colonnes est désactivé dans un document vertical, sauf siheadings.balancing.enabledest défini. - Ce que le flux appelle « haut » est le bord droit de la feuille, là où commence la lecture : un flottant en haut se place à droite de la page, un flottant en bas à gauche, une ouverture sur toute la largeur de la page est une bande le long du bord droit, et les notes de bas de page arrivent à l’extrémité gauche de chaque étage. Un élément de maquette ancré en haut de la page (une maquette de titre, un encadré fixe) est ancré au bord droit.
sideColumnSide'left'est l’étage du haut,'right'celui du bas ;'outer'et'inner'se lisent comme'right'et'left'. - Les marges du flux sont celles de la feuille, tournées : la marge droite est le haut du flux, la marge haute sa gauche.
page.marginsgardent leurs noms sur la feuille. - Les titres courants, les folios, les traits de coupe et le fond de page restent sur la feuille, composés horizontalement, comme le décrit clreq pour les livres verticaux.
- Les figures et les tableaux restent droits. Une figure remplit la hauteur de son étage autant que sa légende le permet, au plus aussi large que la page ; la largeur qu’elle prend est la place qu’elle occupe dans le flux. Sa légende est composée horizontalement sous elle, comme les cellules d’un tableau : les deux sont mesurées comme du texte horizontal. Un tableau est composé droit en travers de la page, ses rangées coupées selon l’étage quand il est plus haut.
placement.alignplace une figure en haut ('left'), au milieu ou au pied de son étage. Unplacement.rotaten’est pas appliqué là où la figure est appelée pour la première fois dans du texte vertical : la construction signale un avertissement de contenurotateIgnoredVertical. Une section horizontale du livre (un style de titre dont lalayoutdéfinit'horizontal-tb') fait pivoter ses figures comme demandé. - Une image de maquette (l’illustration d’une ouverture, celle d’une page de partie) reste droite elle aussi. Sa boîte dans le flux est dimensionnée avec la largeur et la hauteur de l’image interverties, si bien que
size.widthest la longueur sur laquelle l’image descend le long de la colonne, et que sa largeur sur la feuille découle de ses proportions. - Les caractères : les han, les kana et les formes pleine chasse restent droits, un cadratin chacun ; les mots latins et les nombres sont couchés avec leur largeur horizontale ; la ponctuation prend la forme verticale de la police. Les signes de pause et de fin de phrase ne sont jamais tournés : une police du continent place 、。,. dans le coin supérieur droit de la cellule et !?:; dans sa moitié droite, une police de Taïwan ou de Hong Kong les centre (
cjk.region). Les parenthèses et crochets prennent leurs formes verticales, et “ ” ‘ ’ se lisent 『』「」 dans un texte du continent. Les tirets, les points de suspension et le tilde ondulé (wave dash) prennent la forme verticale de la police quand elle en a une (Noto CJK associe celle de — àvertavecfwid: un filet au milieu de la cellule), et sinon sont tournés avec leur encre centrée sur l’axe de la colonne. Un 破折号 (——) dans un texte chinois est un seul filet le long de la colonne : ses formes verticales laisseraient du blanc aux deux bouts de chaque cellule, si bien que chaque tiret est tourné avec la ligne et étiré comme en texte horizontal (voir Largeurs de ponctuation). Un nombre d’au plus deux chiffres tient droit dans une seule cellule, sauf s’il se trouve dans une phrase latine, dont il suit les mots (voir Nombres en texte vertical). Le point médian (·) prend une demi-cellule dans un texte du continent et une cellule entière dans un texte de Taïwan et de Hong Kong. Les signes qu’Unicode définit comme droits (× © ± § ℃ ① et semblables) tiennent dans une cellule à eux, y compris à l’intérieur d’un nombre :3×4donne 3 et 4 couchés avec × droit entre eux. Une apostrophe ou un point médian entre deux lettres d’un mot latin (don’t,l·l) reste dans le mot, couché. Un paragraphe latin dans un flux vertical suit les mêmes règles. Les formules en ligne, les pastilles et les pastilles de couleur sont couchées avec la ligne. - Chaque caractère est mesuré comme il est peint : une cellule avance d’une cellule le long de la ligne, une suite couchée de sa largeur horizontale. Le texte qui reste horizontal sur la feuille (titres courants, folios, légendes, cellules de tableau) est mesuré horizontalement.
- Les largeurs de ponctuation, la ponctuation suspendue et l’espace entre han et latin s’appliquent le long de la ligne comme en travers. Le blanc avant un glyphe se trouve au-dessus de lui et le blanc après, en dessous : un 、 Kaiming prend une demi-cellule,
」「se resserrent à une cellule et demie, un crochet ouvrant rogné en tête de ligne commence une demi-cellule plus haut, un 。 suspendu se place sous le pied de sa ligne, et l’espace han–latin vaut un quart de cadratin de la colonne au-dessus et au-dessous d’un mot couché.:;?!gardent une cellule entière en texte vertical dans toutes les régions. - La grille de caractères compte les caractères le long de la ligne et les lignes en travers de la page :
charsPerLinefixe la longueur d’un étage,linesPerPagele nombre de lignes d’une page, etlayoutType: 'double'donne deux étages de caractères entiers séparés par une gouttière d’un nombre entier de cadratins.
Pour les hôtes qui lisent la mise en page : une page verticale porte VDTPage.flow. Sa contentArea, ses colonnes, blocs, lignes, flottants, zones de notes, bande d’ouverture et surcouches de maquette de bloc sont en coordonnées de flux ; width, height, header et footer sont sur la feuille. flowToPage, pageToFlow, flowRectToPage et pageRectToFlow convertissent de l’un à l’autre, et verticalOrientation(char, region) indique comment se tient un caractère. flow.centralBaselines donne, par famille de police, l’axe sur lequel la mise en page a centré les caractères droits : le centre de l’encre de 中, dont le long trait occupe toute la hauteur du cadratin (0,38 em au-dessus de la ligne de base dans Noto Serif et Noto Sans, SC comme TC), et que possède toute police chinoise, japonaise et coréenne. Chaque ligne est centrée sur cet axe : la ligne de base d’une ligne verticale se trouve, sous le haut de sa boîte de ligne, à la moitié de sa hauteur de ligne plus la ligne de base centrale de la famille (celle d’une ligne horizontale se trouve à 0,8 de sa hauteur de ligne), si bien qu’une colonne de caractères se tient au milieu de son pas et qu’un filet tracé entre deux colonnes à un pas entier tombe à mi-chemin entre elles. Un texte de maquette vertical est composé de la même façon dans ses propres lignes. Le canvas peint lui-même une page verticale ; pour peindre la ponctuation avec les formes verticales propres de la police, un hôte navigateur charge, une fois par famille, une police jumelle où ces formes sont activées : loadVerticalAlternates(family, faces), où faces sont les sources de la famille (URL ou octets) et ses descripteurs. La jumelle n’est gardée que là où le navigateur applique la fonctionnalité au texte du canvas (Chrome 140 et ultérieur) : il dessine 「(《 avec la jumelle et avec une copie des mêmes polices chargée sans la fonctionnalité, dans la graisse et le style des polices données, et garde la jumelle quand leur encre diffère. Un appel ultérieur pour d’autres polices d’une famille dont la jumelle est en usage (le gras après le romain) les lui ajoute. Le Sandbox fait cela pour chaque famille d’un document vertical. Sans jumelle, les parenthèses et crochets sont tournés autour de leur cadratin et les signes de pause et de fin de phrase du continent déplacés dans leur cellule là où les formes verticales de la police les placent : 、。,. vers le coin supérieur droit (à 0,07 em près des formes verticales de Noto Serif SC), !?:; d’un demi-cadratin vers la droite et un peu vers le haut (à 0,02 em près). Le PDF et le HTML composent la même page : voir Texte vertical dans le PDF et le tableau sous En quoi la sortie HTML diffère du canvas et du PDF. Vérifié cellule par cellule par rapport à HarfBuzz (mise en page verticale avec vert) en Noto Serif TC et SC, chaque caractère de 「賈雨村」云云,宜乎?故曰!;:、。“引”‘單’…… se tient à 0,02 em près sur le canvas et dans le PDF, et à 0,05 em près en HTML (Chrome centre un glyphe tourné sur le milieu de l’ascendante et de la descendante de la police, qui dans Noto se trouve 0,05 em au-dessus du centre de son cadratin). flow.dashAdvances donne, par famille, la chasse horizontale en em de chaque tiret que la page étire pour remplir sa cellule (— – ― ⸺ ⸻ -), pour un moteur de rendu sans métriques de police propres : le HTML étire le tiret d’autant, comme le canvas et le PDF le font à partir des leurs. Les titres courants et les folios peuvent aussi être composés verticalement : voir Éléments de texte vertical.
#Filet entre colonnes
Trace un fin filet vertical dans la gouttière pour séparer visuellement les colonnes.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
enabled | boolean | false | Tracer ou non le filet entre colonnes. |
color | ColorValue | #cccccc | Couleur du filet. |
lineWidth | Dimension | 0.5 pt | Épaisseur du filet. |
Sous un titre sur toute la largeur de la page (span: 'page'), le filet commence là où commence le texte des colonnes, sous la bande du titre, que la bande soit peinte par l’ouverture par défaut ou par une maquette propre. Jusqu’à postext 1.4, il partait du haut du bloc de texte et traversait la bande.
Un style de titre peut définir son propre filet dans sa layout (voir Styles de titre), et les pages de sa section tracent celui-là. Un champ que le style laisse non défini prend la valeur du document, si bien qu’une section qui ne change que ses colonnes garde le filet du document. Jusqu’à postext 1.4, le filet d’un style n’était jamais tracé : chaque page traçait celui du document.
#Types de mise en page
-
'single': une colonne sur toute la largeur du contenu. Idéal pour les pages étroites ou les contenus très textuels aux longs paragraphes. -
'double': deux colonnes de même largeur. La mise en page éditoriale classique, qui maintient la longueur de ligne dans la plage optimale de 40 à 50 caractères pour une lecture confortable. -
'oneAndHalf': une mise en page asymétrique avec une colonne principale et une colonne latérale plus étroite. La colonne latérale (réglée parsideColumnPercent) convient aux notes marginales, aux petites figures ou aux contenus d’appui. Les valeurs entre 25 et 40 % fonctionnent bien, et un canal étroit pour des numéros de ligne ou des marques marginales prend autour de 10 à 15 %. La colonne latérale faitsideColumnPercent% de la largeur du contenu et la colonne principale prend ce qui reste après la gouttière ; à 50 %, la colonne latérale est donc plus large que la principale d’une gouttière. Toute valeur est mise en page telle quelle tant que les deux colonnes gardent au moins 1 % de la largeur du contenu ; une valeur qui rendrait l’une d’elles plus étroite (0 ou moins, ou une valeur si grande que la colonne principale disparaît derrière la gouttière) est ramenée à la valeur la plus proche qui préserve les deux, et une valeur qui n’est pas un nombre prend la valeur par défaut, 33. LesconfigWarningsdu document portent alors{ kind: 'sideColumnPercentClamped', path: 'layout.sideColumnPercent', value, used }(le chemin de lalayoutpropre à un style de titre nomme le style, comme dansheadingStyles[2].layout.sideColumnPercent, et se mesure sur les marges de ce style), que le Sandbox liste dans son panneau Vérifications ;collectConfigWarnings(config)renvoie la même liste sans rien mettre en page. Une mise en page autre que'oneAndHalf'ne lit jamais cette valeur et ne la signale jamais. AvecsideColumnRole: 'floats', le texte courant n’entre jamais dans la colonne latérale : elle devient un canal pour les figures, tableaux et encadrés placés avecspan: 'side'. Une figure ou un tableau latéral s’empile depuis la tête du canal sur la page qui l’appelle pour la première fois (la figure marginale d’un manuel se place en haut de sa page même quand le texte l’appelle plus bas) ; celui qui ne tient pas dans le reste du canal attend celui de la page suivante. Un encadré latéral s’empile à côté du texte qu’il interrompt, et quand le reste du canal ne peut pas le contenir à cet endroit, il remonte jusqu’à la position la plus basse où il tient encore (son pied sur le pied du canal), ou attend la page suivante. Quand le texte qui suit la directive d’un encadré continue sur la page suivante (la colonne est pleine, ou les règles de coupure repoussent ce texte), l’encadré reste au niveau de sa directive, à côté du texte qui la précède ; un style avecsideAtColumnEnd: 'after'le place plutôt au niveau de la première ligne du texte qui suit la directive, dans le canal de la page suivante, comme l’exigent les numéros de ligne et les titres marginaux écrits avant leur ligne. Un élément de maquette de titre qui se trouve dans le canal (un numéro de chapitre ancré dans la marge extérieure) est lui aussi tenu à l’écart de la pile (voir Hauteur réservée). Les flottants et encadrésspan: 'page'traversent toujours les deux colonnes, et un flottant de colonne avecplacement.captionSidemet sa légende dans le canal, au niveau de la figure. Combiné à des marges en miroir et àsideColumnSide: 'outer', le canal se place au bord extérieur de chaque page : la colonne marginale d’un manuel. Depuis postext 1.28, une figure ou un tableau placé dans le texte (position: 'here') aveccaptionSidemet lui aussi sa légende dans le canal (inlineCaptionSide). -
'multiple': de trois à huit colonnes égales, autant que l’indiquecolumnCount(3 par défaut) : la grille des journaux et de nombreux magazines (depuis postext 1.18). Chaque colonne mesure(content width − (n − 1) × gutterWidth) / nde large. Le texte passe d’une colonne à la suivante comme dans une mise en page à deux colonnes ; le filet entre colonnes est tracé dans chaque gouttière, l’équilibrage des colonnes égalise toutes les colonnes sur la page de clôture d’un chapitre et avant un encadré sur toute la largeur de la page, les notes de bas de page fonctionnent dans chaque colonne, et les figures, encadrés et titres sur toute la largeur de la page traversent la page entière. Une figure ou un encadré flottant peut ne prendre qu’une partie des colonnes :placement.columns(voir Types de ressources) et lecolumnsd’un style d’encadré. UncolumnCounthors de 3–8, ou non entier, est arrondi et ramené au nombre valide le plus proche (une valeur qui n’est pas un nombre prend 3), et lesconfigWarningsdu document portent{ kind: 'columnCountClamped', path: 'layout.columnCount', value, used }(le chemin de lalayoutpropre à un style de titre nomme le style, comme dansheadingStyles[1].layout.columnCount). Une mise en page d’un autre type ne lit jamais cette valeur. Un style de titre dont lalayoutvaut'multiple'prend lecolumnCountdu document sauf s’il définit le sien, si bien qu’un journal composé sur cinq colonnes peut composer ses pages d’opinion sur quatre.
#En-têtes et pieds de page
Les propriétés header et footer règlent les emplacements d’en-tête et de pied de page de chaque page. En-têtes et pieds de page sont rendus à l’intérieur des marges existantes : ils ne réservent aucun espace supplémentaire et ne réduisent pas la zone de contenu.
Cadre du conteneur. Un élément ancré à 'container' est placé dans la bande de marge comprise entre le corps du texte et le bord de coupe, sur toute la largeur de la zone de contenu. Le conteneur de l’en-tête va du haut de la coupe jusqu’au haut du corps ; celui du pied de page, du bas du corps jusqu’au bas de la coupe. Les ancres top-* d’un en-tête et bottom-* d’un pied de page se mesurent donc depuis le bord de coupe, tandis que les ancres bottom-* d’un en-tête et top-* d’un pied de page se mesurent depuis le bord du corps. Le conteneur n’inclut jamais le fond perdu ni la bande des traits de coupe, si bien qu’un en-tête ou un pied de page tombe au même endroit sur la page rognée, que page.cutLines soit activé ou non. Ancrez l’élément à 'page' (la zone de coupe) ou à 'bleed' pour dépasser la largeur de la zone de contenu ou atteindre le fond perdu.
Les emplacements suivent le modèle unifié des emplacements de design : chaque élément a un placement doté d’une anchor (au conteneur, ou à un autre élément par #id), d’un offset facultatif et d’une size facultative. Les anciens champs à plat align, marginFromBody, marginFromEdge et width: 'full' sont toujours acceptés en entrée et migrés automatiquement vers la nouvelle forme ; la description équivalente dans la nouvelle forme est documentée plus bas.
Chaque emplacement contient une liste d’éléments texte, filet et boîte. L’ordre du tableau est l’ordre de peinture (le premier élément est peint en premier, le dernier par-dessus tous les autres). Cela vaut quelles que soient les ancres : un élément peut s’ancrer à un élément listé après lui (anchor.to: '#ttl'), de sorte qu’une boîte de fond peut venir en premier et être tout de même positionnée par rapport au texte derrière lequel elle se trouve.
Valeurs par défaut intégrées. Lorsque header ou footer vaut undefined, postext applique une valeur par défaut intégrée raisonnable plutôt qu’un emplacement vide :
- En-tête par défaut :
{title}aligné à droite sur les pages impaires,{chapterTitle}aligné à gauche sur les pages paires, et un filet sur toute la largeur, le tout dans la couleur principale de la palette, en Open Sans 8 pt/600,marginFromBody16pt(texte) /13pt(filet). - Pied de page par défaut :
{pageNumber}centré sur chaque page, dans la couleur principale de la palette, en Open Sans 8 pt/600,marginFromBody16pt.
Pour renoncer aux valeurs par défaut intégrées, définissez header: { elements: [] } (ou footer: { elements: [] }). Un tableau elements vide explicite est conservé comme « aucun élément » : seul undefined déclenche les valeurs par défaut.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
elements | HeaderFooterElement[] | valeurs par défaut intégrées si undefined ; [] les désactive | Liste ordonnée d’éléments texte et filet. |
#Éléments de texte
Les éléments de texte affichent une chaîne modèle dont les variables sont remplacées. Les variables s’écrivent {name} ; {{ et }} produisent des accolades littérales.
Les valeurs par défaut du tableau ci-dessous sont celles d’un élément de texte que vous ajoutez vous-même. L’en-tête et le pied de page intégrés décrits plus haut sous Valeurs par défaut intégrées sont des éléments tout faits avec leurs propres valeurs (Open Sans 8 pt/600 dans la couleur principale de la palette), et non les valeurs par défaut de l’élément.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
kind | 'text' | — | Discriminant. |
id | string | — | Identifiant stable, unique dans l’emplacement. Les autres éléments s’y ancrent avec anchor.to: '#id'. Le Sandbox en attribue un à la création. |
content | string | '' | Chaîne modèle. Accepte les variables listées ci-dessous, plus : un attribut écrit sur la ligne du H1 du chapitre courant (# Title ). Un attribut absent donne une chaîne vide, sans avertissement. Un saut de ligne, ou les deux caractères \n écrits dans le modèle ou dans la valeur d’un attribut, commence toujours une nouvelle ligne, quel que soit overflow. Le texte qu’une variable copie du document (un titre, un champ du frontmatter) s’imprime tel qu’il est écrit : là, seul un vrai saut de ligne, comme une coupure de titre, commence une nouvelle ligne. |
align | 'left' | 'center' | 'right' | 'justify' | 'start' | 'end' | 'center' | Alignement horizontal des lignes dans la boîte de l’élément. 'justify' étire les espaces entre mots de chaque ligne coupée, sauf la dernière de chaque paragraphe, pour que la ligne remplisse la boîte ; les lignes voisines d’une lettrine remplissent la place à côté d’elle. Avec hyphenate, un mot qui ne tient pas dans le reste d’une ligne justifiée est aussi coupé à une syllabe pour la remplir. La dernière ligne d’un paragraphe, une ligne sans espace à étirer et un texte qui ne passe pas à la ligne sont composés au fer à gauche. Le texte justifié est mis en page paragraphe par paragraphe, si bien que plusieurs lignes vides entre deux paragraphes comptent pour une seule. Le canvas et le PDF placent chaque mot là où la mise en page l’a mis ; le HTML élargit les espaces avec word-spacing. 'start' et 'end' suivent la direction du texte : la droite et la gauche d’un texte écrit de droite à gauche. 'left' et 'right' sont les côtés propres de la boîte ; dans un design composé dans le flux d’une page de droite à gauche (une bande d’ouverture, un design de titre), le flux est inversé en miroir : ce sont donc son début et sa fin, comme dans le texte courant. |
direction | 'ltr' | 'rtl' | 'auto' | celle du document | Direction de base du texte : la place de ses caractères neutres, l’ordre de ses segments sur une ligne et le sens des côtés 'start' et 'end'. 'auto' lit la première lettre forte du texte résolu et se rabat sur la direction du document. Les segments arabes et hébreux se lisent de droite à gauche quelle que soit la base. Un texte qui contient une lettre arabe n’est jamais interlettré (letterSpacing est ignoré pour tout le texte) et ses mots ne sont jamais coupés lors du passage à la ligne ou de la troncature ; un mot plus large que la boîte déborde et est signalé comme unbreakableWordOverflow. |
parity | 'all' | 'odd' | 'even' | 'all' | Pages sur lesquelles l’élément apparaît (parité du numéro de page : la page 1 est impaire). |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Les rôles de page sur lesquels l’élément apparaît, combinés avec parity. Après le placement, chaque page est classée comme 'blank' (remplissage de parité ou séparateur, ou page sans contenu), 'part' (une page de partie), 'opener' (son premier bloc est un titre dont le niveau s’étend sur toute la page ou force un saut de page avant lui : la première page d’un chapitre) ou 'body' (tout le reste). pages: 'body' masque un titre courant sur les ouvertures de chapitre ; pages: 'opener' n’affiche un folio que là. |
fontFamily | string | 'EB Garamond' | Famille de caractères. |
fontSize | Dimension | 8 pt | Corps du caractère. |
fontWeight | number | 400 | Graisse (100–900). |
italic | boolean | false | Composer ou non en italique. |
color | ColorValue | #000000 | Couleur du texte. |
overflow | 'wrap' | 'ellipsis-start' | 'ellipsis-middle' | 'ellipsis-end' | 'clip' | 'wrap' dans les designs de titre et de partie, sinon 'ellipsis-end' | Ce que fait le moteur d’un texte qui dépasse la largeur disponible de l’élément. 'wrap' répartit la ligne sur plusieurs lignes ; les variantes à points de suspension gardent chaque ligne sur une seule ligne et la tronquent avec … au début, au milieu ou à la fin ; 'clip' rogne net au cadre de l’élément sans insérer de caractère. Les sauts de ligne du contenu s’appliquent dans tous les modes : les modes à points de suspension et de rognage tronquent ou rognent chaque ligne séparément. Un élément qui omet overflow prend la valeur par défaut de son emplacement : dans un design de titre (advancedDesign.slot) ou sur une page de partie (parts.design, parts.versoDesign), il passe à la ligne ; dans un titre courant, un folio ou une ligne de partie de la table des matières (toc.parts.design, une ligne de hauteur fixe), il se termine par …. Définissez 'wrap' sur un titre courant qui peut occuper plusieurs lignes (une adresse), ou des points de suspension sur un surtitre qui doit tenir sur une ligne dans une ouverture. Une ligne coupée par des points de suspension, ou rognée avec de l’encre au-delà de la boîte, est signalée par un avertissement de contenu designTextTruncated, une fois par élément et par page (une fois par élément et par chapitre pour un titre courant ou un folio). Une configuration enregistrée avant postext 1.24 (configVersion 9 ou antérieure) est lue avec 'ellipsis-end' sur chaque texte de titre et de partie qui n’en définit pas, afin que ses pages ne bougent pas. Un texte doté d’une dropCap passe à la ligne quoi que dise cette propriété ; avec 'clip', ses lignes sont tout de même coupées au bord d’une boîte de hauteur fixe. 'ellipsis-end' et 'ellipsis-start' coupent à une limite de mot (The history of…, et non The history of th…) et aucune espace ni ponctuation de liaison (virgule, deux-points, tiret, barre oblique, parenthèse ouvrante) ne touche les points de suspension. Un mot n’est coupé là où il le faut que lorsque la limite de mot, une fois cette ponctuation retirée, garderait moins de la moitié de ce qui tient : un seul mot long, ou une URL (http://exampl…, et non http…). Une espace insécable ou un trait d’union insécable (U+2011, comme dans MS‑DOS) n’est pas une limite de mot ; 'ellipsis-middle' coupe n’importe où mais supprime les espaces qui l’entourent. Jusqu’à postext 1.4, tous les modes coupaient au dernier caractère qui tenait, espaces compris. |
verticalAlign | 'top' | 'middle' | 'bottom' | 'middle' | Position du texte dans une boîte plus haute que ses lignes : une placement.size.height fixe, ou une boîte étirée par un voisin ancré. Quand les lignes sont plus hautes que la boîte (un grand chiffre dans une boîte de hauteur fixe, une lineHeight serrée), elles débordent du côté que l’alignement laisse libre, comme l’alignement flex de CSS : 'bottom' garde le pied de la boîte de la dernière ligne sur le pied de la boîte et déborde en haut, 'middle' déborde également aux deux extrémités, 'top' au pied. Jusqu’à postext 1.4, ces lignes pendaient toujours depuis le haut, quel que soit l’alignement. Une dropCap se déplace avec ses lignes (jusqu’à postext 1.4, elle restait en haut d’une boîte dans laquelle 'middle' ou 'bottom' les faisait descendre). |
lineHeight | number | Dimension | 1.2 | Interlignage des lignes de l’élément. Un nombre est un multiple de fontSize. Une Dimension est aussi acceptée, comme s’écrit tout autre interlignage de la configuration : em / rem donne le même multiple, et une longueur absolue (pt, mm, px…) est la distance entre lignes de base : fixe un interlignage de 15,5 pt quel que soit le corps. Toute autre valeur (zéro, un nombre négatif, une dimension mal formée) prend la valeur par défaut. Jusqu’à postext 1.4, une Dimension à cet endroit rendait la hauteur du design impossible à mesurer : une ouverture ne réservait alors aucune place, pas même sa minHeight, et le corps du texte passait sous le titre. |
letterSpacing | Dimension | 0 | Approche : espace supplémentaire ajoutée après chaque caractère, espaces compris, exactement comme le letter-spacing de CSS. Les largeurs mesurées augmentent d’autant, si bien qu’une boîte à largeur automatique reste ajustée. Elle ne change jamais les glyphes : les ligatures de la police restent actives dans le canvas, en HTML, en EPUB et dans le PDF (jusqu’à postext 1.27, le canvas et le HTML les supprimaient du texte de design interlettré, qui sortait plus large que mesuré). Un segment hébreu est interlettré comme du texte latin ; seul un texte comportant des lettres arabes ne l’est pas. L’approche qui suit le dernier caractère d’une ligne est exclue de son alignement et d’une boîte à largeur automatique, si bien qu’un titre interlettré centré est centré sur ses lettres, qu’un titre aligné à droite finit sur le bord et que la dernière lettre d’une ligne justifiée atteint le bord (jusqu’à postext 1.4, ils se trouvaient une demi-unité d’approche, ou une unité entière, trop à gauche, et un élément ancré à droite d’un élément interlettré s’en trouvait éloigné d’une unité d’approche de plus). Une valeur négative resserre les lettres (un grand titre à 36 pt prend souvent { value: -0.3, unit: 'pt' }) et les largeurs diminuent de la même façon ; canvas, HTML et PDF la peignent à l’identique (jusqu’à postext 1.4, une valeur négative était ramenée à 0, sans avertissement). |
textTransform | 'none' | 'uppercase' | 'none' | Transformation de casse appliquée au texte résolu, variables comprises : un titre de partie composé en capitales dans la table des matières. |
box | ElementBoxStyle | — | Fond et bordure facultatifs dessinés derrière le texte : backgroundColor, borderColor, borderWidth, borderRadius et un padding par côté qui agrandit la boîte au-delà du texte (voir Éléments boîte pour les champs). |
dropCap | { lines, fontFamily, fontWeight, fontSize, color, gap } | — | Lettrine : la première lettre composée en grand à côté des lines premières lignes (2 par défaut), dans sa propre police, sa propre graisse et sa propre couleur, à gap du texte. La lettre repose sur la ligne de base de la dernière ligne qu’elle couvre, et fontSize vaut par défaut le corps qui aligne son sommet sur les capitales de la première ligne : le corps du texte plus lines − 1 interlignes, les capitales étant comptées pour 0,72 du corps d’une lettre (une police dont les capitales sont nettement plus hautes ou plus basses demande une fontSize à elle). Un texte avec lettrine passe à la ligne quel que soit son overflow ; avec 'clip', ses lignes sont tout de même coupées au bord d’une boîte de hauteur fixe. Une color liée à la palette suit les palettes de partie et de section comme le reste du design. Dans un design de titre, la lettre ne réserve aucune place sous le texte : la partie de sa boîte de ligne située sous sa ligne de base ne repousse pas le corps du texte. Une lettre qui descend sous sa ligne de base (un Q ou un J dans beaucoup de polices) peut alors empiéter sur l’espace situé sous le design : donnez au titre une marginBottom pour cela. Jusqu’à postext 1.4, le corps par défaut rendait la lettre aussi haute que toutes les boîtes de ligne qu’elle couvre, si bien que son sommet dépassait la première ligne ; un overflow autre que 'wrap' supprimait la lettre sans avertissement ; une palette de section ou de partie laissait sa couleur inchangée ; et une lettre aussi profonde que le texte voisin pouvait repousser le corps du texte d’une ligne de grille. Les configurations enregistrées auparavant gardent le corps de 1.4, écrit sous forme de fontSize (voir Paquets écrits par postext 1.4 ou antérieur). Une lettrine dans le texte courant se règle plutôt depuis les styles de paragraphe et de titre (voir Lettrines), ses hauteurs de capitales étant mesurées sur les polices. |
paragraphIndent | Dimension | 0 | Retrait de première ligne de chaque paragraphe après le premier. Un saut de ligne dans le contenu, ou les deux caractères \n pour un texte issu d’une valeur d’attribut, sépare les paragraphes ; plusieurs sauts de ligne consécutifs comptent pour un seul. |
hyphenate | boolean | false | Si true et que le texte passe à la ligne (overflow: 'wrap', ou une dropCap, qui passe toujours à la ligne), les mots longs qui déborderaient encore après un saut de ligne normal sont coupés aux limites de syllabe (selon la langue de césure active du document), avec un trait d’union conditionnel à la coupure. Dans un texte justifié (align: 'justify'), un mot qui ne tient pas dans le reste d’une ligne est aussi coupé à sa dernière coupure syllabique qui tient, pour remplir la ligne. |
inlineMarks | boolean | false | Lit le texte résolu, valeurs des variables comprises, comme du Markdown en ligne : bold, italic, ^superscript^, ~subscript~. Désactivé, les marqueurs s’impriment tels quels. Dans un design de titre, garde alors les segments en gras, en italique, en exposant et en indice du titre lui-même (Pneumocystis, CO~2~), ses autres caractères étant échappés pour s’imprimer tels quels (depuis postext 1.19). Voir Marques en ligne et contours. |
stroke | { width, color?, hollow? } | — | Contour tracé autour des lettres : width (une Dimension, centrée sur les bords des glyphes), color (par défaut, la couleur du texte ; une lettrine prend sa propre couleur) et hollow (true ne peint que le contour). Voir Marques en ligne et contours. |
writingMode | 'horizontal-tb' | 'vertical-rl' | 'horizontal-tb' | 'vertical-rl' compose le texte de haut en bas, les lignes de droite à gauche, les caractères debout : un titre courant le long de la marge extérieure, un titre vertical à côté d’un chapitre horizontal. Voir Éléments de texte vertical. |
reserve | boolean | true | Designs de titre uniquement : indique si l’élément compte dans la hauteur que le titre réserve dans le flux du texte. false pour une décoration qui peut passer sous le texte (un sceau en pied de page, un cadre, une bande latérale). Voir Hauteur réservée. Les designs d’en-tête, de pied de page et de partie l’ignorent. |
marginFromBody | Dimension | 6 pt | Distance absolue entre le bord de l’élément tourné vers le corps et le bord du corps. Indépendante des autres éléments. Migrée vers placement.offset.y. |
marginFromEdge | Dimension | 0 pt | Retrait horizontal depuis le bord de contenu aligné. Ne s’applique que si align vaut 'left' ou 'right'. Migré vers placement.offset.x. |
placement | ElementPlacement | dérivé de align + marginFromBody + marginFromEdge | Placement avancé (voir plus bas). S’il est défini, il prime sur les anciens champs à plat. |
Variables disponibles :
{pageNumber}: numéro de la page courante, à partir de 1.{totalPages}: nombre total de pages du document. Dans un livre mis en page chapitre par chapitre (le Sandbox,buildBundle), chaque chapitre est un document : c’est donc le nombre de pages du chapitre lui-même.{bookTotalPages}: nombre total de pages du livre entier, tous les chapitres et toutes les pages blanches compris. Pour un document mis en page seul, il est égal à{totalPages}. Voir Nombre de pages du livre plus bas.{title},{subtitle},{author},{publishDate}: valeurs lues danscontent.metadata. Une métadonnée inconnue ou vide donne une chaîne vide (et lève un avertissement dans le Sandbox).{chapterTitle}: texte du dernier H1 situé sur la page courante ou avant elle. Un H1 dont le style de titre définitrunningChapter: false(une planche, une carte) est ignoré.{chapterTitleAtTop},{chapterNumberAtTop}: titre et numéro du chapitre en cours en haut de la page, qui diffèrent de{chapterTitle}et de{chapterNumber}sur une page où un nouveau chapitre commence sous d’autre texte. Voir Chapitre en haut de la page plus bas.{partTitle},{partNumber}: titre et numéro de la partie courante (la dernière page:::partsituée sur la page courante ou avant elle ; les pages blanches de parité placées juste avant une page de partie lui appartiennent déjà). Vides avant la première partie.{firstMark.<key>},{lastMark.<key>}: premier et dernier mot-repère de la page, soit un titre d’un niveau donné (h1–h6), soit une entrée d’un style de paragraphe. Voir Mots-repères plus bas.
Nombre de pages du livre
{bookTotalPages} imprime le nombre de pages du livre entier, celui qu’un lecteur voit dans « page 12 sur 348 ». Il compte les pages physiques, pages blanches comprises, comme {totalPages}, mais sur l’ensemble des chapitres :
- Un document mis en page seul (
buildDocumentsanscontinuation) constitue le livre entier :{bookTotalPages}est égal à{totalPages}. buildBundlemet le livre en page, additionne les pages de chaque chapitre et le remet en page une fois avec ce total, si bien que tous les chapitres impriment le même nombre. Ce nombre ne déplace jamais un saut de page : un tour de plus suffit donc ; une configuration qui n’imprime pas{bookTotalPages}ne coûte rien.- Le Sandbox transmet le total à chaque chapitre dès que les pages de tous les chapitres sont connues. D’ici là, un chapitre imprime le nombre de pages jusqu’à sa propre fin. L’export du livre entier de l’onglet PDF compte les pages qu’il met en page : lorsqu’un chapitre a imprimé un autre nombre, parce que ses pages n’étaient pas encore connues, il remet le livre en page une fois de plus avec le nombre auquel les chapitres sont arrivés.
- Un hôte qui met lui-même les chapitres en page passe le total dans
continuation.bookPageCount(pour le premier chapitre aussi). Sans cela,{bookTotalPages}compte les pages jusqu’à la fin du document (continuation.pageIndexOffsetplus ses propres pages), ce qui n’est juste que pour le dernier chapitre.
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') indique à un hôte si le calcul de ce nombre en vaut la peine.
Mots-repères : première et dernière marque
Un dictionnaire imprime dans son titre courant le premier et le dernier mot-vedette de chaque page (« Aback – Anchor ») ; un ouvrage de référence, la première et la dernière section. {firstMark.<key>} et {lastMark.<key>} les impriment. La clé désigne ce qui marque une page :
h1àh6: un titre de ce niveau. La marque est son texte, sans le numéro.- Un identifiant de style de paragraphe (
entry) : un paragraphe d’un conteneur:::paragraphs{style="entry"}. La marque est le segment en gras qui ouvre le paragraphe, le mot-vedette, sans sa ponctuation finale :**Aback.** Said of…marqueAback. Un paragraphe qui ne commence pas par du gras ne pose aucune marque.
{firstMark.<key>} est la première marque qui commence sur la page et {lastMark.<key>} la dernière. Une page sur laquelle aucune marque ne commence (une longue entrée qui se poursuit) imprime pour les deux la marque en vigueur, la dernière avant elle. Les pages qui précèdent la première marque n’impriment rien ; dans un livre mis en page chapitre par chapitre, il s’agit de la première marque du chapitre, car les marques ne passent pas d’un chapitre au suivant. Un titre ou un paragraphe coupé entre deux pages ne marque que la page où il commence. La clé s’écrit après le point en lettres, chiffres, _ et -, et commence par une lettre ou par _ ; une clé inconnue n’imprime rien.
:::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' } },
}],
}Les mots-repères sont des titres courants : ils se résolvent dans les emplacements d’en-tête et de pied de page (y compris le header et le footer d’un style de titre) et n’impriment rien dans les designs de titre, de partie et de table des matières ; dans les designs de titre et de partie, le panneau Vérifications les signale comme variables inconnues. Pour afficher le premier mot-vedette sur les versos et le dernier sur les rectos, donnez à deux éléments parity: 'even' et parity: 'odd'. Un H1 dont le style de titre définit runningChapter: false ne pose aucune marque h1.
Chapitre en haut de la page
{chapterTitle} et {chapterNumber} nomment le dernier chapitre commencé sur la page ou avant elle. Dans un livre dont les chapitres s’enchaînent sans saut de page, une page qui termine un chapitre et commence le suivant près de son pied porte alors le titre du nouveau chapitre au-dessus d’un texte qui appartient encore à l’ancien. {chapterTitleAtTop} et {chapterNumberAtTop} nomment plutôt le chapitre en cours en haut de la page, comme le font les romans aux chapitres enchaînés et de nombreux ouvrages de référence :
- une page dont le premier bloc est le H1 d’un chapitre nomme ce chapitre ;
- toute autre page nomme le chapitre qui s’y poursuit, même lorsqu’un nouveau chapitre commence plus bas ;
- une page blanche ajoutée pour la parité va avec la page qui la suit, et le séparateur des modes
always-*avec la page qui le précède (voir Appartenance des pages blanches) ; lorsque la page qui suit une page blanche de parité s’ouvre sur la fin d’un chapitre, et non sur son H1, la page blanche garde elle aussi ce chapitre ; - un H1 avec
runningChapter: falseest ignoré.
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' } },
}],
}Comme les mots-repères, ces deux variables sont des titres courants : elles se résolvent dans les emplacements d’en-tête et de pied de page et n’impriment rien dans les designs de titre, de partie et de table des matières. {attr.<key>} lit toujours le dernier chapitre commencé.
Alignement induit par le bord d’ancrage
Lorsque le placement.anchor.to d’un élément de texte désigne un autre élément par #id, le bord d’ancrage induit un alignement de texte par défaut pour les lignes coupées :
right-ofetalign-leftinduisentalign: 'left': les lignes coupées partent de l’ancre vers la droite.left-ofetalign-rightinduisentalign: 'right': les lignes coupées se serrent contre le côté le plus proche de la cible d’ancrage.
L’éditeur de titres du Sandbox applique automatiquement ces alignements induits lorsque vous changez le bord ou la cible d’ancrage. Ils gardent un texte coupé sur plusieurs lignes visuellement ancré à l’élément auquel il se rapporte (de sorte que, par exemple, le « P » d’un « Postext » coupé s’aligne verticalement sous le « I » d’« Introduction »).
Marques en ligne et contours
Par défaut, un élément de texte compose son texte dans une seule police : **, ^ et les autres marqueurs Markdown s’impriment tels quels. Avec inlineMarks: true, le texte résolu est lu comme du Markdown en ligne, avec les mêmes marques que le texte courant (voir Format du document → Mise en forme en ligne) :
**bold**applique la graisse 700 (ou lafontWeightpropre de l’élément si elle est plus forte) ;*italic*inverse l’inclinaison de l’élément, si bien que l’emphase à l’intérieur d’un élément en italique ressort en romain ;***both***fait les deux. Les formes avec tiret bas (__bold__,_italic_) fonctionnent aussi.^superscript^et~subscript~sont composés à 58 % du corps, l’exposant surélevé d’un tiers de celui-ci et l’indice abaissé de 0,15 ; un indice et un exposant qui se touchent (T~0~^2^) sont superposés, comme dans le corps du texte.- Une barre oblique inverse compose le caractère marqueur lui-même (
\*,\_,\^,\~). Un lien garde son texte ; les accents graves du code sont supprimés.
Les marques sont lues une fois les variables remplies, si bien qu’une valeur peut en contenir : une ligne d’auteurs dans un attribut de titre reçoit ses numéros d’affiliation en exposant. Le passage à la ligne, la justification, les modes à points de suspension, dropCap et paragraphIndent fonctionnent tous sur le texte marqué ; chaque segment garde la couleur de l’élément.
{ "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 trace un contour autour des lettres : width est l’épaisseur du trait, centrée sur les bords des glyphes (une moitié tombe à l’intérieur des lettres, l’autre à l’extérieur ; la largeur mesurée du texte ne change pas), color vaut par défaut la couleur du texte, et hollow: true laisse les lettres sans remplissage pour ne montrer que le contour : un grand chiffre détouré, un titre qui se détache sur une photographie. Le contour est peint par-dessus le remplissage, de la même façon dans le canvas, en HTML (-webkit-text-stroke) et dans le PDF (mode de rendu du texte 2, ou 1 s’il est évidé).
{ "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" } } } }Dans le PDF, les segments en gras et en italique incorporent les polices correspondantes de la famille de l’élément : le fournisseur de polices doit donc les fournir.
Valeurs par défaut du texte et pièges de l’ancrage
Un élément de texte que vous écrivez vous-même part de ces valeurs, dont certaines surprennent :
overflowsuit l’emplacement. Dans un design de titre ou sur une page de partie, un long titre passe sur plusieurs lignes ; dans un titre courant, un folio ou une ligne de partie de la table des matières, un texte trop large pour sa place est ramené à une ligne terminée par…. Définissezoverflow: 'wrap'sur un titre courant qui peut s’allonger (une adresse, une signature), et consultez les avertissementsdesignTextTruncatedpour repérer les textes coupés. Un saut de ligne dans le contenu (un retour à la ligne, ou\ndans le modèle ou dans une valeur d’attribut) commence une nouvelle ligne dans tous les modes ; les modes à points de suspension coupent chaque ligne séparément.alignvaut'center'etverticalAlignvaut'middle'. Un élément à largeur automatique s’ajuste à sa ligne la plus longue, si bien que ses lignes sont centrées les unes par rapport aux autres ; définissezalign: 'left'pour un bloc au fer à gauche (un élément à largeur automatique ancré à un autre élément aligne de lui-même ses lignes du côté de son ancre, voir plus haut).- La police est EB Garamond 8 pt, en noir,
lineHeight1,2, quelle que soit celle du texte courant. Contrairement aux autres interlignages de la configuration, lalineHeightd’un texte de design est en général un simple multiple (1.2) ; uneDimensionfonctionne aussi (voir plus haut).
Un élément sans placement.size.width (ou avec 'auto') prend la taille de son texte, mais seulement dans la place comprise entre son point d’ancrage et le bord du conteneur vers lequel il s’étend : pour une ancre top ou bottom, deux fois la distance au bord le plus proche. Son offset compte. Un décalage qui l’éloigne de ce bord ne coûte rien : un titre courant ancré top-left avec un x négatif (qui déborde dans la marge de gauche) ne perd aucune place, car il s’étend vers la droite. Un décalage vers ce bord réduit la place d’autant (du double pour une ancre top ou bottom), et un décalage qui pousse l’ancre au-delà du bord n’en laisse aucune : une ancre top-right dont le x est inférieur à moins la largeur du conteneur, ou une ancre top déplacée latéralement de plus de la moitié de cette largeur. Sans place, un mode à points de suspension n’imprime rien et 'wrap' empile un caractère par ligne. Trois façons d’en sortir :
- donnez à l’élément une
size.widthfixe : les largeurs fixes ne sont jamais bridées ; - ancrez-le à
'page'ou à'bleed', ce qui fait de la page (ou du fond perdu) le cadre de sa place ; - ancrez-le au bord opposé du conteneur.
Le conteneur d’un en-tête va du haut de la coupe jusqu’au corps, et celui d’un pied de page du corps jusqu’au bas de la coupe : dans un en-tête, les ancres top-* se mesurent depuis le bord de coupe et les ancres bottom-* depuis le corps, et l’inverse dans un pied de page (voir Cadre du conteneur plus haut). Un en-tête ou un pied de page ne déplace jamais le texte courant et se peint par-dessus : un élément poussé dans la zone du corps recouvre donc le texte. Une bande d’ouverture, à l’inverse, se peint sous le texte courant ; la place qu’elle prend dans le flux est décrite sous Hauteur réservée.
#Éléments de texte vertical
Un élément de texte avec writingMode: 'vertical-rl' est composé verticalement dans un emplacement dont le texte est horizontal : les titres courants et les folios de n’importe quel livre, qui restent sur la feuille, et tous les designs d’une page horizontale. Il est mis en page comme un texte horizontal dans son propre cadre tourné d’un quart de tour dans le sens horaire, puis ramené sur la page :
- Sa boîte reste là où le placement la met. Sa hauteur est la longueur d’une ligne :
size.heightla fixe (ou'auto', la longueur du texte ;'fill', jusqu’au bord du conteneur),size.widthfixe le nombre de lignes qui tiennent en travers, etsize.maxWidthplafonne la longueur d’une ligne. alignplace les lignes le long de la boîte ('left'en haut),verticalAlignen travers ('top'à droite, là où se trouve la première ligne), et le padding d’une boîte reste du côté pour lequel il est écrit.- Les caractères sont mesurés et peints comme dans une page verticale : les caractères han debout, un cadratin chacun, la ponctuation sous sa forme verticale, les mots latins couchés, les nombres courts dans une seule case (
cjk.uprightDigits). Le canvas, le PDF et le HTML le placent dans le même rectangle. - Avec
inlineMarks: true, les marques d’orientation isolent un segment comme dans le corps du texte :第:tcy[3.0]回compose 3.0 dans une seule case,:upright[GDP]met les lettres debout l’une sous l’autre,:sideways[…]couche un segment ; une ligne ne se coupe jamais à l’intérieur de l’une d’elles. Un élément horizontal les ignore. - Aucune lettrine n’est composée sur un élément vertical.
- Dans le flux d’une page verticale (une ouverture, une page de partie, un titre d’encadré), le texte descend déjà, et
writingModen’y change rien.
Les livres chinois verticaux placent leurs titres courants et leurs folios à l’un de trois endroits (clreq §7.2 ; JLREQ §2.6 pour le japonais) :
| Convention | Emplacement | Comment le régler |
|---|---|---|
| Tête et pied horizontaux | Au-dessus et au-dessous du bloc de texte, comme dans les livres horizontaux ; c’est le plus courant. | L’en-tête et le pied de page tels quels. |
| Marge extérieure (style 中缝, 邊峰 à Taïwan) | Le long de la marge extérieure : le titre du chapitre ou du livre à partir d’environ quatre caractères sous la tête du bloc de texte, le folio se terminant environ cinq caractères au-dessus de son pied, en chiffres chinois, à environ 80 % du corps du texte. | Deux éléments verticaux ancrés à 'outer', ci-dessous. |
| Coin extérieur du pied | Le folio en pied de page, dans le coin extérieur (règles de Taïwan pour les livres 中式). | Un élément horizontal dans le pied de page à 'bottom-left' avec parity: 'odd' et un autre à 'bottom-right' avec parity: 'even' dans un livre relié à droite (l’inverse dans un livre relié à gauche). |
Voici les titres en marge extérieure tels que le Sandbox les ajoute (En-tête › Titres en marge extérieure (vertical)), ici pour un texte courant de 10 pt (le Sandbox les compose à 80 % du corps du texte) :
{
"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' (voir Placement des éléments) désigne la marge extérieure de chaque page : les deux éléments descendent donc le long du bord gauche d’un recto et du bord droit d’un verso dans un livre relié à droite (page.binding). {pageNumber} s’imprime dans le format de numérotation des pages : trad-chinese-informal donne 一百零三 en page 103, cjk-decimal 一〇三. Les règles propres à chaque emplacement s’appliquent toujours : pages: 'body' tient un titre courant à l’écart des ouvertures de chapitre. Un court ornement entre le titre courant et le folio (une queue de poisson ︻, un filet) est un élément ordinaire ancré au même cadre.
Dans le VDT, un bloc vertical porte vertical (VDTDesignTextBlock.vertical : la région, les chiffres debout et l’axe central de chaque famille) ; ses lignes sont exprimées dans le cadre tourné propre au bloc, xOffset vers le bas depuis le haut de la boîte, baselineY vers la gauche depuis son bord droit. Un segment d’une ligne marquée porte tcy ou orientation, comme un segment du corps du texte.
#Éléments filet
Les éléments filet tracent une ligne : horizontale en travers de l’emplacement, ou verticale de haut en bas.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
kind | 'rule' | — | Discriminant. |
id | string | — | Identifiant stable, unique dans l’emplacement, pour les références anchor.to: '#id'. |
direction | 'horizontal' | 'vertical' | 'horizontal' | Un filet horizontal s’étend sur placement.size.width ('fill' = jusqu’au bord du conteneur) et a une hauteur de thickness. Un filet vertical descend sur placement.size.height ('fill' ou non défini = jusqu’au bord du conteneur) et a une largeur de thickness : un séparateur entre un titre courant et un folio. |
color | ColorValue | #000000 | Couleur du trait. |
thickness | Dimension | 0.5 pt | Épaisseur du trait. Un filet qui l’omet est tracé à la valeur par défaut (jusqu’à postext 1.4, il ne peignait rien). |
width | Dimension | 'full' | 'full' | 'full' couvre la zone de contenu ; une Dimension limite la ligne à une longueur fixe positionnée par align. |
align | 'left' | 'center' | 'right' | 'center' | Alignement lorsque width ne vaut pas 'full'. |
marginFromBody | Dimension | 6 pt | Distance absolue entre le bord du filet tourné vers le corps et le bord du corps. Indépendante des autres éléments. |
marginFromEdge | Dimension | 0 pt | Retrait horizontal depuis le bord de contenu aligné. Ne s’applique que si width est une Dimension fixe et si align vaut 'left' ou 'right'. |
parity | 'all' | 'odd' | 'even' | 'all' | Pages sur lesquelles le filet apparaît. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Rôles de page sur lesquels le filet apparaît (voir le champ pages des éléments de texte). |
reserve | boolean | true | Designs de titre uniquement : indique si le filet compte dans la hauteur que le titre réserve dans le flux du texte (voir Hauteur réservée). |
placement | ElementPlacement | dérivé de align + marginFromBody + marginFromEdge | Placement avancé (voir Placement des éléments). size.width / size.height fixent la longueur du filet ; width: 'fill' correspond à l’ancien 'full'. |
#Éléments boîte
Les éléments boîte peignent un rectangle aux coins arrondis dans l’emplacement : un fond derrière le texte d’une ouverture de chapitre, d’un encart latéral ou d’un pied de page, par exemple. Les éléments boîte se positionnent exclusivement par le champ placement ; ils n’ont pas d’ancienne forme abrégée à plat. Le remplissage, le trait et le rayon des coins se trouvent dans l’objet imbriqué style (ElementBoxStyle), comme dans l’exemple JSON de « Placement des éléments ».
| Propriété | Type | Défaut | Description |
|---|---|---|---|
kind | 'box' | — | Discriminant. |
id | string | — | Identifiant stable, unique dans l’emplacement. Les éléments voisins s’y ancrent avec anchor.to: '#id'. Le Sandbox en attribue un à la création. |
style.backgroundColor | ColorValue | transparent | Couleur de remplissage. Réglez-la sur transparent pour une boîte réduite à son contour. |
style.borderColor | ColorValue | transparent | Couleur du trait. |
style.borderWidth | Dimension | 0 pt | Épaisseur du trait. Les traits sont peints à l’intérieur du rectangle englobant de la boîte afin que ses dimensions extérieures restent constantes : le bord extérieur du trait suit le bord de la boîte, et une boîte arrondie garde son rayon extérieur. Un trait aussi large que la boîte la remplit. Canvas, HTML et PDF le dessinent à l’identique (jusqu’à postext 1.4, le canvas et le PDF centraient le trait sur le bord, une moitié hors de la boîte). |
style.borderRadius | Dimension | 0 pt | Rayon des coins. Limité à la moitié du plus petit côté au moment du rendu. |
placement | ElementPlacement | — | Obligatoire. Voir « Placement des éléments » ci-dessous. |
parity | 'all' | 'odd' | 'even' | 'all' | Pages sur lesquelles la boîte apparaît. |
pages | 'all' | 'body' | 'opener' | 'part' | 'blank' | 'all' | Rôles de page sur lesquels la boîte apparaît (voir le champ pages des éléments de texte). |
reserve | boolean | true | Designs de titre uniquement : indique si la boîte compte dans la hauteur que le titre réserve dans le flux du texte (voir Hauteur réservée). |
#Éléments image
Un élément image dessine une ressource bitmap ou SVG du document : le logo d’un éditeur sur une page de titre, une marque dans un titre courant. Sa taille vient de son placement.size : si l’un des côtés width / height est laissé à 'auto' (la valeur par défaut), l’autre suit les proportions de l’image ; si les deux sont définis, l’image est ajustée dans la boîte et centrée. Une ressource absente ou qui n’est pas une image ne dessine rien.
{
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 accepte les variables que prend le content d’un élément de texte, si bien qu’un même design peut dessiner une image différente pour chaque titre. Avec resourceId: '{attr.vignette}' dans un style de titre, # Chapter I {style="opener" vignette="log"} dessine la ressource log et # Chapter II {style="opener" vignette="wig"} dessine wig : les chapitres partagent le style au lieu d’en avoir un clone par image. Un en-tête ou un pied de page lit les attributs du chapitre de la page, comme le fait {attr.<key>} dans un titre courant, et les autres variables fonctionnent aussi ('map-{chapterNumber}'). Un identifiant qui ressort vide, par exemple pour un titre sans l’attribut, ne dessine rien. Depuis postext 1.8.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
id | string | — | Identifiant stable ; d’autres éléments peuvent s’y ancrer sous la forme #id. |
resourceId | string | — | Identifiant d’une Resource bitmap ou SVG du document. Il peut contenir des variables, dont {attr.<key>}, remplies par titre, par partie ou par page. |
decorative | boolean | false | L’image n’est qu’une décoration (un ornement, une bande) : elle ne fournit aucun texte alternatif à la sortie, même si sa ressource en a un (voir plus bas). |
placement | ElementPlacement | — | Ancre, décalage et taille (voir Placement des éléments). Un côté 'fill' s’étend jusqu’au bord du conteneur. |
parity, pages | comme ci-dessus | 'all' | Pages sur lesquelles l’image apparaît. |
reserve | boolean | true | Designs de titre uniquement : indique si l’image compte dans la hauteur que le titre réserve dans le flux du texte (voir Hauteur réservée). |
Le moteur de rendu PDF incorpore la ressource comme une figure (un SVG doté d’un original d’impression utilise celui-ci) ; la visionneuse HTML la résout par resourceImageUrl.
Une image dessinée par un design est du contenu lorsque sa ressource la décrit : l’altText de la ressource, ou à défaut sa légende en texte brut (une pastille lue par son libellé, un :ref par son text s’il en a un), entre dans le VDT (VDTDesignImageBlock.altText), devient l’alt de son <img> en HTML et une Figure avec /Alt dans un PDF balisé, lue juste après le texte de son design (la planche d’un chapitre après le titre du chapitre). Une image dont la ressource n’a ni l’un ni l’autre, ou qui est marquée decorative, est une décoration : alt="" avec role="presentation", et un artefact dans le PDF. L’image d’un titre courant ou d’un pied de page se répète sur chaque page : elle relève donc de l’habillage de la page, quoi que dise sa ressource : pas d’altText dans le VDT, alt="" avec role="presentation" en HTML, un artefact de la page dans le PDF.
#Placement des éléments
ElementPlacement est le modèle de positionnement unifié qu’utilisent tous les types d’éléments (texte, filet, boîte) dans n’importe quel emplacement de design : en-tête de page, pied de page ou emplacement de design avancé d’un niveau de titre. Trois données décrivent un placement :
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 accepte :
- Bords du conteneur (lorsque
anchor.tovaut'container','page'ou'bleed') :top,top-left,top-right,bottom,bottom-left,bottom-right,left,right. - Bords relatifs à un élément (lorsque
anchor.to === '#someId') :right-of,left-of,below,above,align-top,align-bottom,align-left,align-right.
Chaque bord relatif à un élément place un coin de l’élément sur un coin de l’élément auquel il s’ancre, et offset le déplace à partir de là :
right-of: son coin supérieur gauche sur le coin supérieur droit de la cible (à côté d’elle, sommets alignés) ;left-of: son coin supérieur droit sur le coin supérieur gauche de la cible ;below: son coin supérieur gauche sur le coin inférieur gauche de la cible (en dessous, bords gauches alignés) ;above: son coin inférieur gauche sur le coin supérieur gauche de la cible ;align-topetalign-left: son coin supérieur gauche sur le coin supérieur gauche de la cible. Les deux noms donnent le même placement : les bords supérieurs comme les bords gauches s’alignent ;align-bottom: son coin inférieur gauche sur le coin inférieur gauche de la cible ;align-right: son coin supérieur droit sur le coin supérieur droit de la cible.
Un bord relatif à un élément utilisé avec 'container', 'page' ou 'bleed', et un bord de conteneur utilisé avec '#id', sont lus comme le coin supérieur gauche.
anchor.to: 'page' ancre l’élément à la zone de coupe (la page physique après rognage) et 'bleed' à la zone de coupe agrandie de cutLines.bleed de chaque côté (identique à la zone de coupe tant que les traits de coupe sont désactivés). Ces deux cadres servent aussi de référence pour size: 'fill' et pour la limitation automatique de la largeur, si bien qu’une bande de couleur peut aller d’un bord à l’autre quelles que soient les marges de la page :
{ "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" } } }Avec les traits de coupe activés, tout ce qu’un élément peint au-delà de la zone de fond perdu est rogné (voir Traits de coupe).
anchor.to: 'outer' (emplacements d’en-tête et de pied de page) ancre l’élément à la marge extérieure de la page : du bord du bloc de texte au bord de coupe, du côté opposé au dos, et de la tête du bloc de texte à son pied. Elle se trouve à droite d’un recto et à gauche d’un verso dans un livre relié à gauche, et inversement dans un livre relié à droite (page.binding), si bien qu’un seul élément sert aux deux pages d’une double page : un titre courant le long de la marge extérieure, par exemple (voir Éléments de texte vertical). Dans tout autre emplacement, elle se lit comme 'container'. L’offset d’un élément de texte peut s’écrire en em, c’est-à-dire en cadratins de sa propre fontSize : quatre caractères sous la tête du bloc de texte s’écrivent { "y": { "value": 4, "unit": "em" } }.
Dans l’emplacement de design avancé d’un titre, les éléments ancrés à la page ou au fond perdu n’augmentent pas la hauteur réservée au titre, sauf s’ils descendent sous le bord supérieur du titre (une bande en haut de la page se place derrière l’ouverture ; une bande qui descend sous le titre repousse le texte courant). Utilisez advancedDesign.minHeight pour réserver malgré tout une hauteur d’ouverture fixe, et reserve: false sur un élément qui ne doit pas du tout repousser le texte. Les règles complètes se trouvent sous Hauteur réservée.
Chaque élément a un id stable (attribué automatiquement par le Sandbox ; vous pouvez aussi le définir à la main). Les éléments ancrés à d’autres éléments forment un petit graphe de dépendances que le moteur résout avant la mesure, si bien qu’un élément peut s’enchaîner à un autre sans coordonnées manuelles.
L’ancienne forme align + marginFromBody + marginFromEdge est analysée en entrée et réécrite en placement au moment de la résolution de la configuration : les configurations existantes continuent donc de fonctionner sans changement.