Aller au contenu principal

Chapitre 3.5 · Partie II · Le métier

Configuration : titres

Les valeurs communes des titres, les réglages propres à chaque niveau, les sauts de page avant un titre, les ouvertures de chapitre sur toute la largeur de la page et les numéros en toutes lettres

Mis à jour 2026-10-1635 minDans le chapitre 3 Configurationenescadefritptzhjaar

En bref

Cette page réunit les réglages des titres. Vous leur donnez à tous une police, une taille et une couleur, et vous changez l’un de ces choix pour un seul niveau, comme les titres de chapitre. Vous décidez si un titre commence une nouvelle page, et si cette page doit être à gauche ou à droite. Un titre de chapitre peut s’ouvrir sur toute la largeur de la page avec sa propre maquette. Les numéros des titres peuvent s’écrire en toutes lettres, comme « Chapitre un ».

#Titres

La propriété headings règle la typographie de tous les niveaux de titre (H1 à H6). Vous pouvez définir des valeurs générales qui s’appliquent à tous les niveaux, puis redéfinir certaines propriétés niveau par niveau.

#Valeurs générales

PropriétéTypeDéfautDescription
fontFamilystring'Open Sans'Famille de police de tous les titres.
lineHeightDimension1.2 emHauteur de ligne des titres. Plus serrée que celle du texte courant.
colorColorValueCouleur principale (#295AA3)Couleur du texte des titres. Liée à l’entrée main-color de la palette par défaut : changer cette couleur de la palette reteinte tous les titres.
textAlign'left' | 'justify' | 'center' | 'right' | 'start' | 'end''left'Alignement de tous les niveaux de titre (il n’existe pas de valeur par niveau) : en drapeau à droite, justifié, centré ou en drapeau à gauche. Un titre justifié compose sa dernière ligne alignée à gauche, comme un paragraphe ; un titre d’une seule ligne se lit donc comme 'left'. Le canvas, le HTML et le PDF placent les lignes de la même façon, préfixe de numéro compris. L’ouverture par défaut d’un titre span: 'page' sans maquette avancée le suit aussi (justifié compose aligné à gauche) ; une maquette avancée aligne ses propres éléments de texte selon leur align.
fontWeightnumber700Graisse des titres (100–900).
marginTopDimension1.5 emEspace au-dessus des titres. Supprimé pour un titre qui ouvre une colonne (voir columnHeadSpace).
marginBottomDimension0.5 emEspace sous les titres.
keepWithNextbooleantrueÀ true, un titre n’est jamais placé comme dernier élément d’une colonne ou d’une page. Si le bloc suivant ne disposait pas d’au moins bodyText.widowMinLines lignes de place après le titre (ou d’une ligne quand bodyText.avoidWidows vaut false), le titre est repoussé pour rester avec son texte. Interagit avec bodyText.keepColonWithList : si cette règle doit repousser en entier un paragraphe terminé par un deux-points, le ou les titres qui ferment la colonne partent avec lui au lieu de rester isolés.
keepWithNextSpreadbooleanfalseAvec keepWithNext, laisse quand même un titre fermer la dernière colonne de texte d’une page paire, puisque son texte ouvre alors la page impaire en regard, dans la même double page (JLReq §4.1.7). Les doubles pages sont la page 1 seule, puis 2–3, 4–5…, comptées avec pageIndexOffset, dans les livres reliés à gauche comme à droite. Depuis postext 1.16.
keepWithNextSplit'rules' | 'fill''rules'Manière de diviser le paragraphe sous un titre quand le titre se retrouve au pied d’une colonne et que repousser le paragraphe en entier laisserait le titre derrière. 'rules' : le plus de lignes possible, tant qu’au moins bodyText.widowMinLines restent sous le titre et qu’au moins bodyText.orphanMinLines passent à la colonne suivante ; quand aucune division ne respecte les deux, le titre part avec son paragraphe, et l’équilibrage des colonnes comble la place qu’il laisse. 'fill' : autant de lignes qu’il en tient, si peu qu’il en parte, si bien qu’un paragraphe de quatre lignes avec de la place pour trois se divise en 3 + 1. Jusqu’à postext 1.4, tous les titres se divisaient ainsi, et les configurations enregistrées avant le configVersion 8 le conservent (voir Paquets écrits par postext 1.4 ou antérieur). Avec avoidWidows ou avoidOrphans désactivé, ce côté de la règle est abandonné.
snapToGridbooleantrueIndique si le flux revient sur la grille de ligne de base sous un titre. Avec true, le marginBottom du titre est arrondi vers le haut à un nombre entier de lignes de la grille ; avec false, la marge exacte est conservée et le texte sous le titre peut rester hors de la grille jusqu’au point de calage suivant (la fin d’une liste, la fin d’un :::paragraphs, une formule hors texte), comme beaucoup de livres laissent une ligne et demie sous un titre. Un niveau (levels[].snapToGrid) ou un style de titre peut avoir sa propre valeur ; celle-ci est celle dont ils héritent.
columnHeadSpace'none' | 'remainder''none'Ce qu’un titre calé sur la grille garde de son espace supérieur quand il ouvre une colonne, en tête de page ou sous une figure ou un tableau qui ouvre la colonne. 'none' : tout l’espace est supprimé et le titre se pose sur la première ligne de la colonne, à la hauteur de la colonne voisine ; le calage sur la grille met alors sous le titre la fraction de ligne dont il a besoin, si bien que son texte peut s’en trouver plus éloigné qu’après un paragraphe. 'remainder' : l’espace n’est supprimé que par lignes entières de la grille, et la fraction de ligne restante demeure au-dessus du titre, de sorte que le texte qui le suit commence à la même distance qu’après un paragraphe ; le titre commence un peu plus bas que la tête de la colonne, et aucune ligne du texte courant ne bouge. Cela convient à un livre sur une colonne, où aucune tête de colonne voisine ne montre la différence. Toute autre valeur se lit comme 'none'. Pas sous une ouverture sur toute la largeur de la page, ni pour un titre span: 'page', lineSpan, masqué ou doté d’une maquette (advancedDesign). Depuis postext 1.28.
inlineMarksbooleantrueIndique si un titre lit ses marques en ligne comme le fait un paragraphe : italic, bold, ^superscript^, ~subscript~, :smallcaps[…] et les liens. Un segment en italique inverse l’inclinaison du titre : il sort donc en romain dans un titre en italique ; un segment en gras prend bodyText.boldFontWeight, ou la graisse propre du titre quand elle est plus forte. La table des matières reprend aussi les segments en gras et en italique ; les titres courants et les signets du PDF n’impriment que le texte. Avec false, les marques sont supprimées et les mots s’impriment dans le style propre du titre, comme jusqu’à postext 1.4. L’ouverture par défaut d’un titre span: 'page' sans maquette compose aussi les segments en gras, en italique, en exposant et en indice ; une maquette de titre (une bande d’ouverture dessinée ou un advancedDesign dans la colonne) imprime en texte brut dans tous les cas, sauf si son élément de texte lit les marques en ligne (inlineMarks: true) : là, garde les segments en gras, en italique, en exposant et en indice du titre (depuis postext 1.19). Les configurations enregistrées plus tôt dont les titres portent des marques sont lues avec false (voir Paquets écrits par postext 1.4 ou antérieur).
balancingColumnBalancingConfigactivéÉquilibrage vertical des colonnes : espace ajouté au-dessus des titres pour que les colonnes se terminent au ras du bas de la page. Voir plus bas.

Des titres centrés pour des poèmes ou les actes d’une pièce, sans emplacement de maquette :

headings: {
  textAlign: 'center',
  levels: [{ level: 2, textTransform: 'uppercase' }],
}

Passer un objet headings conserve toutes les valeurs par défaut des niveaux que vous ne redonnez pas, saut de page du H1 compris (voir Réglages par niveau).

#Réglages par niveau

Chaque niveau de titre peut redéfinir les valeurs générales par le tableau levels. Seul fontSize (plus le breakBefore du H1, signalé plus bas) diffère par défaut ; toutes les autres propriétés héritent des réglages généraux des titres.

NiveauTaille de police par défautbreakBefore par défaut
H118 pt{ enabled: true, parity: 'always-odd' }
H215 pt{ enabled: false, parity: 'any' }
H312 pt{ enabled: false, parity: 'any' }
H410 pt{ enabled: false, parity: 'any' }
H59 pt{ enabled: false, parity: 'any' }
H68 pt{ enabled: false, parity: 'any' }

Le défaut du H1 reproduit la mise en page d’un livre par chapitres : chaque titre de premier niveau s’ouvre sur une nouvelle page de droite (impaire), avec une page blanche de séparation obligatoire après le chapitre précédent. Redéfinissez-le dans levels[0].breakBefore si votre document est moins structuré qu’un livre.

Le breakBefore d’un niveau est fusionné champ par champ avec ce défaut, et un objet headings qui ne le mentionne pas le conserve. { parity: 'odd' } sur le H1 garde le saut et ne change que la parité ; { enabled: false } fait s’enchaîner les chapitres :

headings: {
  fontFamily: 'Merriweather',                               // H1 still breaks to a fresh recto (always-odd)
  levels: [{ level: 1, breakBefore: { parity: 'odd' } }],    // …or: a recto, with no mandatory blank
}
 
headings: { levels: [{ level: 1, breakBefore: { enabled: false } }] } // chapters run on

Modifié dans postext 1.5. Jusqu’à postext 1.4, tout objet headings désactivait le saut du H1 à moins de redonner levels[0].breakBefore, et un breakBefore partiel complétait son champ manquant à partir du défaut sans saut. Une configuration écrite en code pour la 1.4 avec un objet headings et sans saut de H1 ouvre donc désormais chaque chapitre sur un nouveau recto, avec des versos blancs si nécessaire. Pour garder des chapitres qui s’enchaînent, donnez un champ à l’entrée H1 de levels :

headings: { fontFamily: 'Merriweather', levels: [{ level: 1, breakBefore: { enabled: false } }] } // as 1.4 laid it out

Là où la configuration a été enregistrée, le moteur le détecte et s’en charge pour vous : le Sandbox pour les livres et les configurations qu’il a enregistrés à cette époque (voir Sandbox → Persistance), et openBundle / readBundle pour un paquet .postext écrit par postext 1.4 ou antérieur (voir Paquets écrits par postext 1.4 ou antérieur). Une configuration que vous avez enregistrée vous-même peut passer par migrateConfig(config) de postext/bundle, qui écrit explicitement les sauts que posait la 1.4 (pinLegacyHeadingBreaks) : enabled: false sur un H1 qui n’avait pas de saut, et parity: 'any' à côté d’un enabled: true qui ne nommait aucune parité, sur le H1 et sur les styles de titre. Elle fige aussi la taille des mathématiques, l’espace autour des figures en ligne (dans les encadrés aussi), les marques en ligne des titres, la taille des lettrines, la place sous une ligne terminée par un deux-points qui introduit une liste, les lignes qu’une coupe d’encadré laisse d’un paragraphe ou d’un élément de liste, les sauts de ligne aux tirets, la coupure ligne par ligne du texte en drapeau, la division d’un paragraphe sous un titre, les sauts de ligne au trait d’union d’un mot composé et l’espace sous les conteneurs :::paragraphs, tels que la 1.4 les composait. Passez le Markdown du livre en troisième argument, { content }, et elle omet le figeage des mathématiques quand le texte n’a pas de $, les figeages d’espacement quand aucune ligne n’incorpore de ressource (celui des encadrés quand aucune n’en incorpore dans un encadré), le figeage des marques de titre quand aucun titre ne porte de marque, celui des lignes à deux-points quand aucune liste ne suit une ligne terminée par un deux-points, celui des coupes d’encadré quand le texte n’ouvre aucun :::callout, celui des tirets quand aucun tiret n’est composé collé entre deux mots, celui de la division sous un titre quand le texte n’a pas de titre, celui des conteneurs quand le texte n’ouvre aucun conteneur :::paragraphs, et celui des mots composés quand aucun trait d’union ne se trouve entre deux lettres ; le figeage de la coupure en drapeau ne va qu’à une configuration qui compose du texte courant en drapeau, et celui des conteneurs qu’à une configuration qui déclare un style de paragraphe (voir Paquets écrits par postext 1.4 ou antérieur). Pour les sauts seuls, appelez pinLegacyHeadingBreaks(config).

Les réglages par niveau acceptent les mêmes propriétés que les valeurs générales (fontSize, lineHeight, fontFamily, color, fontWeight, marginTop, marginBottom, snapToGrid), plus ces champs propres aux niveaux (un style de titre les accepte aussi) :

PropriétéTypeDéfautDescription
italicbooleanfalseCompose le titre en italique. S’applique en plus de fontWeight.
textTransform'none' | 'uppercase''none'Met le titre en capitales (un préfixe de numérotation reste tel qu’il est écrit, de même qu’une pastille et le libellé d’un :ref qu’il contient). La longueur est préservée pour que la table de correspondance des sources de l’éditeur reste de 1 pour 1 : les caractères dont la capitale s’allonge (ß → SS) restent tels quels. Le titre transformé alimente aussi l’espace réservé {titleText} des maquettes avancées et des ouvertures de chapitre. Les signets du PDF gardent le titre tel qu’il est écrit (Author contributions, pas AUTHOR CONTRIBUTIONS), comme text-transform en CSS laisse le texte lui-même intact (jusqu’à postext 1.4, ils prenaient les capitales).
letterSpacingDimension0Approche après chaque glyphe du titre, espaces et préfixe de numérotation compris, comme le letter-spacing de CSS. Une valeur positive écarte les lettres (des capitales composées avec textTransform: 'uppercase' en demandent en général un peu : { value: 0.12, unit: 'em' }), une valeur négative resserre un grand corps. Une valeur en em est relative au fontSize du niveau. Les lignes du titre sont mesurées avec elle, elles passent donc à la ligne là où se termine le texte espacé, et le canvas, le HTML et le PDF la peignent à l’identique. L’interlettrage ne change jamais les glyphes : les ligatures du caractère (fi, fl) restent, sur toutes les sorties. Une ligne centrée ou alignée à droite est placée d’après ses lettres : l’approche après son dernier glyphe est omise, comme dans les textes de maquette, si bien qu’un titre centré s’aligne sur l’ouverture par défaut d’un titre span: 'page'. Un niveau dessiné à partir de son advancedDesign l’ignore, comme les autres champs typographiques présentés ici : chaque élément de texte de la maquette a son propre letterSpacing. Un style de titre le règle aussi, pour les titres qui l’utilisent. Jusqu’à postext 1.4, les titres n’avaient pas d’approche, et la clé était ignorée sans avertissement.
lineSpannumbernon définiLignes occupées (行取り, JLReq §4.1.6) : le titre est composé dans une bande de ce nombre de lignes du texte courant, ses caractères centrés dedans, à la place de marginTop et marginBottom ; 3 donne un titre 3行取り. La bande commence sur une ligne du texte courant quand le titre est calé sur la grille, et le texte qui le suit reste sur la grille, dans les deux modes d’écriture et avec cjk.grid ; un titre dont les lignes demandent davantage prend le nombre entier suivant. Le centre est celui des caractères (la ligne de base moins le centre idéographique du caractère), comme le mesure JLReq, et non celui des boîtes de ligne. Ne s’applique pas aux ouvertures (span: 'page'), aux titres dessinés à partir d’un advancedDesign, aux titres masqués ni aux titres dans des encadrés. Un style de titre peut poser 0 pour annuler celui de son niveau. Depuis postext 1.16.
indentDimension0Retrait du titre depuis le début de la ligne (字下げ), l’em valant la taille du texte courant, puisque les livres japonais comptent les retraits de titre en caractères du texte courant (JLReq §4.1.3) : { value: 6, unit: 'em' } donne 6字下げ quelle que soit la taille du titre. La justification se réduit d’autant, et un titre centré se centre dans le reste. Depuis postext 1.16.
firstLineIndentDimension0Retrait de la seule première ligne du titre, mesuré depuis indent et, comme lui, en ems du texte courant : les lignes sur lesquelles se poursuit un long titre commencent à indent (au début de la ligne quand il n’est pas défini), comme GB/T 9704 compose chaque niveau de titre avec deux cases de retrait et ses lignes suivantes à la marge : { value: 2, unit: 'em' }. Avec cjk.grid activé, deux ems du texte courant font deux cases de la grille. Un titre numéroté imprime son numéro après le retrait : le modèle de numérotation n’a donc pas besoin d’espaces idéographiques, qui s’imprimeraient aussi dans la table des matières et les signets du PDF. Il fonctionne en texte vertical (depuis le haut de la ligne), avec le compositeur CJK (un crochet ouvrant au début du titre suit les règles de début de ligne, comme dans un paragraphe) et avec Knuth–Plass. Un titre centré le traite comme un paragraphe centré : sa première ligne se centre dans la place qui suit le retrait. {firstLineIndent=N} après le titre règle un seul titre, et {firstLineIndent=0} annule celui de son niveau. Depuis postext 1.24.
jidorinumbernon définiEspacement régulier (字取り) : un titre d’une ligne plus étroit que ce nombre de ses propres ems est espacé régulièrement jusqu’à cette largeur exacte, si bien que 3 compose 序章 en 序 章. Les titres plus larges et les titres de plusieurs lignes restent tels quels. {jidori=N} après le titre règle un seul titre, et {jidori=0} désactive celui de son niveau. Depuis postext 1.16.
dropCapParagraphDropCap | falseaucuneUne lettrine qui ouvre le premier paragraphe de texte courant après un titre de ce niveau (voir Lettrines) : un seul réglage donne son initiale à chaque chapitre. Un titre la désactive avec {dropcap=false} ou règle son nombre de lignes avec {dropcap=2}. Depuis postext 1.23.
numberingTemplatestring''Modèle du numéro automatique du niveau. Un jeton … imprime le compteur courant de ce niveau de titre, éventuellement formaté par un suffixe : en chiffres romains majuscules, en chiffres romains minuscules, / en lettres, complété de zéros, en toutes lettres (vingt et un), en ordinal (vingt et unième), en chiffres chinois (japonais dans un document japonais : 第百一章), chiffre par chiffre, en chiffres financiers et cerclé, ou tout nom des Graphies des formats de numérotation ; tout autre texte est littéral ('Chapter . ', '.', '第回' pour 第一百二十回 ; une barre oblique inverse échappe une accolade littérale). Un jeton dont le compteur est encore vide disparaît avec le séparateur qui le jouxte. Vide (le défaut), il n’y a pas de numéro automatique. Le numéro rendu est placé devant le titre dans le flux, alimente l’espace réservé d’un emplacement de maquette avancée (où le préfixe lui-même n’est pas ajouté) et est imprimé dans la table des matières. Voir Numéros en toutes lettres pour les mots, et Styles de titre pour un modèle propre à certains titres d’un niveau.
numberSeparatorstring' 'Ce qui se place entre le numéro et le titre : dans la colonne, dans l’ouverture par défaut d’un niveau span: 'page', dans les titres courants qui impriment la ligne du titre et dans les signets du PDF. Le séparateur du niveau 1 joint aussi le numéro et le titre d’une partie dans la page de partie par défaut et dans la ligne de partie par défaut de la table des matières. Les titres de chapitre chinois prennent une espace idéographique ou rien (' ' : 第一回 甄士隱夢幻識通靈). La table des matières garde sa propre colonne de numéros (toc.levels[].numberGap). Un style de titre peut avoir le sien. Quand un titre est coupé en deux avec , comme les titres en distiques des romans chinois, les formes sur une seule ligne (la colonne, la table des matières, les titres courants) joignent les deux moitiés par une espace idéographique quand les deux côtés sont des caractères chinois ou japonais, et par une espace sinon.
numberPosition'before' | 'replace''before'Emplacement du numéro généré. 'before' : avant le titre, joint par numberSeparator. 'replace' : le numéro constitue tout le titre et le titre écrit dans la source n’est pas imprimé, si bien que # Night avec numberingTemplate: 'الليلة {1:ordinal-feminine}' imprime الليلة الثانية. La table des matières affiche le numéro comme titre de l’entrée (sans colonne de numéros), et les titres courants (, ) et les signets du PDF le lisent aussi ; est vide pour un tel titre. Uniquement pour les titres numérotés dotés d’un modèle (celui du niveau ou de leur style) ; tout autre titre garde son texte. Un style de titre peut avoir sa propre valeur, 'before' pour garder les titres que son niveau remplacerait.
breakBeforeHeadingBreakBeforeConfigH1 : { enabled: true, parity: 'always-odd' }
H2–H6 : { enabled: false, parity: 'any' }
Force un saut de page avant chaque titre de ce niveau. parity: 'odd' / 'even' précise en outre de quel côté de la double page le titre s’ouvre : une page blanche de remplissage est insérée si nécessaire (elle compte toujours dans la numérotation des pages). 'always-odd' / 'always-even' garantissent en plus au moins une page blanche de séparation obligatoire entre le contenu précédent et le nouveau titre (la page de séparation appartient au chapitre précédent ; tout remplissage supplémentaire dû à la parité appartient au nouveau). Quand le titre est le tout premier bloc du document et que la première page est encore vide, la contrainte de parité est ignorée : le titre tombe en page 1, comme écrit. Un champ non défini garde la valeur par défaut du niveau : le { parity: 'odd' } du H1 provoque toujours un saut.
hiddenbooleanfalseUn titre structurel : il n’imprime rien et n’occupe aucune place dans la colonne ni dans un encadré (ni texte, ni marges, ni bande d’ouverture), mais fait tout ce que fait un titre par ailleurs. Son breakBefore ouvre toujours une page, il ouvre la section de son style, il compte (sauf si son style indique numbered: false), il figure dans :::toc, il est nommé par les titres courants et il reçoit un signet dans le PDF. Pour une dédicace, une page d’épigraphe ou un colophon dont la table des matières et les signets du lecteur ont besoin, mais que la page n’affiche pas. Réglez-le sur un style de titre plutôt que sur tout un niveau ; un titre le redéfinit avec / .
headings: {
  fontFamily: 'Merriweather',
  levels: [
    // Canonical book preset: chapters on a right-hand (odd) page.
    { level: 1, fontSize: { value: 24, unit: 'pt' }, breakBefore: { enabled: true, parity: 'odd' } },
    { level: 2, fontSize: { value: 18, unit: 'pt' }, italic: true },
  ]
}

snapToGrid fonctionne aussi par niveau. Non défini, un niveau suit headings.snapToGrid ; défini, il le remplace. Un même document peut ainsi placer ses H2 une ligne et demie au-dessus de leur texte, hors de la grille jusqu’au point de calage suivant, tandis que ses H3 arrondissent l’espace qui les suit à des lignes entières de la grille. Un style de titre peut aussi le régler, pour les titres qui l’utilisent.

headings: {
  marginBottom: { value: 1.5, unit: 'em' },
  levels: [
    { level: 2, snapToGrid: false }, // exactly 1.5 em under every H2
    { level: 3 },                    // inherits headings.snapToGrid: true
  ],
}

#Saut avant

breakBefore est indépendant des réglages de numérotation : l’activer force un saut de page, mais le compteur numérique n’est remis à zéro que si vous insérez explicitement une directive :::numbering. Les pages blanches de parité comptent comme de vraies pages dans la séquence et reçoivent en-têtes et pieds de page selon leurs règles habituelles de pages paires et impaires.

Un :::pagebreak placé juste avant un tel titre ne remplace pas son saut : le titre applique quand même sa parité après la page que la directive a ouverte, ce qui peut ajouter une page blanche. Voir Styles de titre pour un titre qui doit commencer juste après un saut manuel.

Valeurs de parité

ValeurComportement
'any' (défaut)Aucune contrainte de parité. Le titre s’ouvre simplement sur la page suivante.
'odd'Garantit que le titre s’ouvre sur une page impaire (de droite). Une seule page blanche est insérée, uniquement quand la page suivante naturelle est paire.
'even'Pareil, mais pour une page paire (de gauche).
'always-odd'Garantit au moins une page blanche de séparation obligatoire entre le contenu précédent et le nouveau titre, puis assure la parité impaire. Utile quand chaque chapitre doit commencer sur une nouvelle double page.
'always-even'Pareil, mais pour une page paire.

À qui appartiennent les pages blanches

Les pages blanches insérées par breakBefore portent des en-têtes avec le titre du chapitre selon la raison de leur insertion :

  • Les pages insérées pour respecter une contrainte de parité ('odd', 'even', ou la fin de parité de 'always-*') appartiennent au chapitre à venir. L’espace réservé {chapterTitle} de leur en-tête se résout en titre du nouveau chapitre, puisque la page blanche n’existe que pour amener le nouveau chapitre sur la bonne parité.
  • La page de séparation obligatoire insérée par 'always-odd' / 'always-even' appartient au chapitre précédent. C’est une respiration voulue en fin de chapitre : l’en-tête {chapterTitle} affiche donc encore le titre de l’ancien chapitre.

Les titres courants et la palette d’une section stylée (voir Styles de titre) suivent les deux mêmes règles sur les pages blanches.

Exception du début de document

Quand le tout premier bloc du document est un titre dont le breakBefore est activé, ou que la source s’ouvre sur :::pagebreak, la contrainte de parité est ignorée tant que la première page est encore vide. Le titre tombe en page 1, comme écrit, quelle que soit la parité configurée : un document qui commence par un # Chapter 1 configuré avec parity: 'odd' n’hérite donc pas d’une page blanche parasite en tête. Dès qu’un contenu a été placé, la contrainte de parité se comporte normalement.

#Étendue et maquette avancée

Chaque niveau de titre accepte deux champs supplémentaires qui règlent la manière dont le titre se rend comme ouverture de chapitre sur toute la largeur de la page.

PropriétéTypeDéfautDescription
span'column' | 'page''column'Avec 'page', le titre est traité comme une ouverture de chapitre et sa maquette avancée (si elle est activée) est attachée à la page sous forme de bande d’ouverture au-dessus du texte. Associez-le à breakBefore.enabled: true pour que l’ouverture commence toujours une nouvelle page. Sans maquette propre, le titre est peint par une ouverture par défaut sur toute la zone de contenu, dans la typographie et l’interlignage du niveau, avec ses segments en gras, en italique, en exposant et en indice (headings.inlineMarks), et la bande est mesurée à cette largeur. La bande contient toutes les lignes que peint l’ouverture : quand l’ouverture prend plus de lignes que la justification propre du titre (un titre justifié dont les espaces se resserreraient sur une seule ligne, un saut forcé ), la bande les prend aussi. Jusqu’à postext 1.4, la bande était mesurée avec le titre coupé à la largeur de la colonne, si bien qu’un titre qui tient sur une ligne dans la zone de contenu prenait une bande de deux lignes de haut, avec la ligne centrée dedans. Les autres colonnes commencent sous la bande, comme la colonne propre du titre. Le texte qui ouvre l’une d’elles commence là où commencerait un texte placé juste sous l’ouverture, quoi qui suive l’ouverture dans sa propre colonne : le marginBottom de l’ouverture sous son titre ou sa maquette, porté jusqu’à la ligne de grille suivante quand le niveau se cale sur la grille. Un titre, une formule hors texte ou une ligne de table des matières qui ouvre l’une d’elles est placé à la hauteur du premier titre ou de la première formule hors texte sous l’ouverture, marges comprises comme là-bas ; quand la colonne de l’ouverture continue avec autre chose, elle commence là où commence ce texte. Un titre masqué sous l’ouverture ne compte pas, et l’espace que l’équilibrage des colonnes ajoute au-dessus du titre placé sous l’ouverture n’est pas répété dans les autres colonnes. Ce que ces colonnes calent sur la grille tombe sur la grille de la page. Jusqu’à postext 1.4, leur premier bloc se posait au pied de la bande : hors de la grille quand la bande se terminait entre deux lignes, et collé à la bande, sans marge, quand un titre suivait l’ouverture (une ligne plus haut qu’aujourd’hui quand la bande se terminait sur la grille) ; un titre placé là perdait aussi la marge supérieure que gardait le titre de la première colonne.
spanBreakbooleantrueIndique si un titre span: 'page' commence une nouvelle page. true ouvre la page suivante (son côté étant choisi par breakBefore). false, avec breakBefore.enabled: false, l’ouvre là où arrive le texte, comme le fait un encadré sur toute la largeur de la page : les colonnes au-dessus se terminent à niveau (la bande est équilibrée quand headings.balancing.trailing est activé), la maquette ou l’ouverture par défaut du titre est composée sur la zone de contenu sous elles, et le texte continue dans chaque colonne en dessous : un deuxième article d’un bulletin sous la fin du premier. Quand la place restante ne contiendrait pas le titre et le minimum de lignes de veuve sous lui, il ouvre la page suivante comme avec true. Le rôle de la page reste celui que lui donne son premier bloc. Sans effet sur un titre span: 'column'. Aussi sur un style de titre. Depuis postext 1.19.
advancedDesignHeadingAdvancedDesignConfigEmplacement de maquette en composition libre pour ce niveau. Quand enabled est vrai, les éléments de l’emplacement composent l’ouverture. Utilisez dans un élément de texte pour rendre le texte du titre ; utilisez , , etc. pour insérer le numéro formaté du titre.
advancedDesign.minHeightDimension—Hauteur minimale réservée au titre dans le flux de la colonne. Le titre prend max(design content bottom, minHeight), puis le marginBottom du titre sous lui (de son style de titre, de son niveau ou de headings.marginBottom ; 0,5 em de la taille du titre par défaut), et la somme est arrondie vers le haut à la grille de ligne de base quand les titres se calent. Une ouverture peut donc repousser le texte courant vers le bas (ou réclamer toute la page) même quand ses éléments sont courts ou ancrés aux cadres de la page ou du fond perdu au-dessus du titre. Pour une bande d’exactement minHeight de haut, mettez ce marginBottom à 0 et faites de minHeight un nombre entier de lignes de la grille. S’applique dès que enabled est vrai, même avec un emplacement vide. Voir Hauteur réservée pour ce que compte le bas du contenu de la maquette.

Une ouverture aussi haute que la page. Quand la hauteur réservée dépasse le pied de la colonne (une couverture dont le minHeight est la hauteur de la page, une image ou un encadré ancré à la page ou au fond perdu et qui descend jusqu’au format rogné), l’ouverture réclame le reste de la page : le texte qui la suit commence à la page suivante, dans chaque colonne d’une maquette à deux colonnes comme d’une maquette à colonne et demie. Une couverture n’a donc pas besoin d’un :::pagebreak après elle (en mettre un ne fait pas de mal : il n’ajoute pas de page blanche). Un titre dans la colonne (span: 'column') dont la maquette est plus haute que sa colonne réclame cette colonne, et le texte commence en tête de la suivante. Le bloc du titre descend alors jusqu’au pied de la colonne qu’il réclame, et sa maquette est mise en page par rapport à cette bande : les éléments ancrés en haut restent là où ils sont ancrés, et ceux qui suivent la bande (ancrés à son milieu ou à son pied, ou de hauteur 'fill') se tiennent dans la place que réclame le titre, comme ils se tiennent dans la hauteur réservée quand elle suffit (jusqu’à postext 1.4, le bloc gardait la hauteur de son texte : ces éléments étaient donc mis en page par rapport à une bande de la hauteur d’un titre, et le texte qui suivait passait sous la maquette). Les éléments d’habillage de page qui ne doivent pas réclamer la page (une bande le long de la tranche de gouttière sur toute la hauteur de la page, un ornement au pied de la page) ont plutôt leur place dans la maquette de l’en-tête ou du pied de page : ancrés à 'page' ou 'bleed' et affichés avec pages: 'opener', ils se peignent sur la page d’ouverture et ne réservent aucune place dans le texte.

Exemple : une ouverture de chapitre minimaliste qui affiche « Chapter N » au-dessus du titre :

{
  "headings": {
    "levels": [
      {
        "level": 1,
        "span": "page",
        "breakBefore": { "enabled": true, "parity": "always-odd" },
        "advancedDesign": {
          "enabled": true,
          "slot": {
            "elements": [
              {
                "kind": "text",
                "id": "chapterLabel",
                "placement": {
                  "anchor": { "to": "container", "edge": "top" },
                  "offset": { "y": { "value": 48, "unit": "pt" } },
                  "size": { "width": "fill" }
                },
                "content": "Chapter {numberRoman}",
                "fontSize": { "value": 10, "unit": "pt" },
                "align": "center",
                "overflow": "ellipsis-end"
              },
              {
                "kind": "text",
                "id": "chapterTitle",
                "placement": {
                  "anchor": { "to": "#chapterLabel", "edge": "below" },
                  "offset": { "y": { "value": 12, "unit": "pt" } },
                  "size": { "width": "fill" }
                },
                "content": "{titleText}",
                "fontSize": { "value": 24, "unit": "pt" },
                "fontWeight": 700,
                "align": "center",
                "overflow": "wrap",
                "hyphenate": true
              }
            ]
          }
        }
      }
    ]
  }
}

Espaces réservés de titre disponibles dans l’emplacement de maquette d’un niveau :

  • {titleText} : le texte brut du titre (sans préfixe de numérotation). Un saut forcé dans le titre (\\) y est un saut de ligne, dans une bande d’ouverture comme dans une maquette dans la colonne (jusqu’à postext 1.4, une maquette dans la colonne imprimait une espace à cet endroit, alors que sa hauteur était mesurée avec le saut). Les lignes sur lesquelles le titre masqué se coupe dans sa colonne sont rassemblées dans le titre tel qu’il est écrit : un mot coupé après son propre trait d’union garde le trait d’union sans espace après lui, un mot que la colonne a divisé redevient entier sans le trait d’union ajouté par la coupure, un groupe soudé par une espace insécable plus large que la colonne et séparé à cette espace retrouve son espace insécable (Capítulo XVIII, pas CapítuloXVIII), et chaque autre coupure rend son espace unique. Jusqu’à postext 1.4, chaque saut de ligne devenait une espace : un titre coupé à un trait d’union imprimait donc Word- Book, et un saut forcé dans un tel titre était perdu.
  • {number} : le numéro formaté selon le numberingTemplate du niveau.
  • {numberDecimal}, {numberRoman}, {numberRomanLower}, {numberAlpha}, {numberAlphaLower} : le compteur du titre (le décompte courant de son niveau, quoi qu’imprime le modèle) dans d’autres formats de numération : le troisième chapitre donne 3, III, iii, C, c, avec ou sans numberingTemplate. Un titre non numéroté (un style avec numbered: false) les laisse vides.
  • {numberWords}, {numberWordsLower}, {numberOrdinalWords}, {numberOrdinalWordsLower} : le même compteur en toutes lettres, avec une capitale ou en minuscules : Trois / trois, Troisième / troisième (voir Numéros en toutes lettres).
  • {numberHan} : le même compteur en chiffres chinois, dans l’écriture de la locale du document : une ouverture composée avec 第{numberHan}回 imprime 第十二回 pour le douzième chapitre tandis que la table des matières affiche 12.
  • {chapterNumber}, {chapterTitle}, {pageNumber}, {totalPages}, {bookTotalPages}, {title}, {subtitle}, {author}, {publishDate} : espaces réservés de métadonnées partagés.
  • {attr.<key>} : un attribut écrit sur la ligne du titre elle-même (# Title {author="I. Zango Martín"}), avec repli sur l’attribut du H1 du chapitre en cours. Les attributs absents se résolvent en chaîne vide, sans avertissement.

{chapterNumber} imprime ce que les titres courants impriment pour le chapitre : le numéro du H1 quand son niveau (ou son style) a un numberingTemplate, sinon le rang du chapitre (1, 2…, en continuant après les chapitres mis en page avant celui-ci), et rien pour un chapitre non numéroté ou un style dont le modèle est ''. Une maquette de titre lit le chapitre auquel appartient son titre : un titre de niveau 1 le sien, un titre inférieur le dernier titre de niveau 1 qui le précède. Cela vaut aussi là où deux chapitres se rencontrent sur une même page, tandis que les titres courants de cette page impriment le chapitre suivant. La hauteur que réserve une ouverture est mesurée avec cette même valeur. Jusqu’à postext 1.4, elle était mesurée avec le préfixe de numéro du titre (vide sans modèle), si bien qu’une maquette dont la hauteur dépend de {chapterNumber} pouvait se peindre plus haute que la place qu’elle prenait ; et la maquette imprimait le chapitre de la page, si bien que le premier de deux chapitres partageant une page affichait le numéro du second.

Les espaces réservés de compteur suivent le livre d’un chapitre à l’autre quand les chapitres sont mis en page un par un (les compteurs que transmet continuationAfter()), et l’attribut startAt d’un titre les fait repartir (voir Format de document → Attributs de titre). Une ouverture qui affiche Chapter III au-dessus d’un titre numéroté 3. dans le flux et dans la table des matières :

{
  level: 1,
  span: 'page',
  numberingTemplate: '{1}.',
  advancedDesign: {
    enabled: true,
    slot: { elements: [
      { kind: 'text', id: 'label', content: 'Chapter {numberRoman}', fontSize: { value: 10, unit: 'pt' }, overflow: 'ellipsis-end',
        placement: { anchor: { to: 'container', edge: 'top-left' }, size: { width: 'fill', height: 'auto' } } },
      { kind: 'text', id: 'title', content: '{titleText}', fontSize: { value: 24, unit: 'pt' }, overflow: 'wrap',
        placement: { anchor: { to: '#label', edge: 'below' }, size: { width: 'fill', height: 'auto' } } },
    ] },
  },
}

Hauteur réservée

Un titre doté d’une maquette avancée occupe de la place dans la colonne comme n’importe quel bloc : le texte courant qui le suit commence sous cette place. Cette place est la plus grande de trois hauteurs, toutes mesurées vers le bas depuis le haut du titre (le haut de la zone de contenu pour une ouverture qui commence sa page) :

  1. le texte propre du titre, composé dans la typographie du niveau (il est masqué sous la maquette, mais garde ses lignes) ;
  2. le bas du contenu de la maquette, c’est-à-dire le bord inférieur le plus bas parmi les éléments qui comptent (voir plus bas) ;
  3. advancedDesign.minHeight.

Le marginBottom du titre s’y ajoute (de son style de titre, de son niveau ou de headings.marginBottom ; 0,5 em par défaut), et le résultat est arrondi vers le haut à la grille de ligne de base quand les titres se calent. Pour une ouverture (span: 'page'), la même bande est laissée libre dans chaque colonne de la page. Pour un titre dans la colonne qui tient dans sa colonne, la maquette est mise en page dans la boîte du titre, qui a exactement cette hauteur.

Quels éléments comptent. Tous les éléments de la maquette comptent, textes, filets, boîtes et images confondus (jusqu’à postext 1.4, un élément image ne comptait jamais, si bien que le texte pouvait commencer par-dessus une image de bande, sauf si minHeight l’en tenait éloigné), à l’exception :

  • des éléments avec reserve: false : une décoration qui peut se trouver sous le texte ;
  • des éléments qui suivent la bande elle-même : ancrés à la rangée du milieu du conteneur (left, center, right) ou à sa rangée du bas (bottom-left, bottom, bottom-right), avec une hauteur 'fill' par rapport au conteneur (une boîte ou un filet vertical sans hauteur le remplit par défaut), et de tout élément ancré à l’un d’eux. Le conteneur est la bande réservée : ces éléments se posent donc sur son pied ou la couvrent, comme un filet sous la bande ou un panneau teinté derrière le titre. Ils suivent la hauteur ; ils ne la fixent jamais. Un texte parmi eux qui garde sa propre hauteur a quand même besoin de place : un titre ancré au pied de la bande rend la bande au moins aussi haute que lui, si bien qu’il ne commence jamais au-dessus du haut du titre. Avec minHeight: 36mm et le titre ancré bottom-left, la boîte du titre mesure 36 mm plus son marginBottom, arrondis vers le haut à la grille, et le titre se pose au pied de cette boîte, juste au-dessus du texte qui suit ; sans minHeight, un titre qui prend plus de lignes que le texte propre du titre rend la bande aussi profonde que lui. Jusqu’à postext 1.4, un tel titre était peint vers le haut, par-dessus le texte placé au-dessus du titre. Les boîtes, filets et images qui suivent la bande ne fixent pas un tel plancher : un panneau ancré au pied peut donc monter au-dessus du titre.

Les éléments ancrés à la page ou au fond perdu comptent selon la distance à laquelle ils descendent sous le haut du titre. Une bande en haut de la page qui s’arrête au-dessus du titre ne compte pour rien ; une image à fond perdu qui le dépasse repousse le texte jusqu’à son bord inférieur. De même pour tout ce qui se trouve bas sur la page : un sceau à 25 mm du pied de page, une bande latérale sur toute la hauteur ou un cadre réserve la page jusqu’à son bord inférieur, et le texte commence en général à la page suivante. Marquez une telle décoration reserve: false (elle se peint toujours et les éléments peuvent toujours s’y ancrer), et donnez au titre la place dont il a besoin avec ses éléments de texte ou minHeight :

{
  "kind": "image", "id": "seal", "resourceId": "seal", "reserve": false,
  "placement": {
    "anchor": { "to": "page", "edge": "bottom-right" },
    "offset": { "x": { "value": -25, "unit": "mm" }, "y": { "value": -25, "unit": "mm" } },
    "size": { "width": { "value": 30, "unit": "mm" } }
  }
}

Un élément ancré à un élément qui ne réserve pas compte quand même, sauf s’il est marqué lui aussi (une légende posée sur le sceau a besoin de son propre reserve: false).

Où elle se peint. La maquette d’une ouverture (span: 'page') est dessinée avant le texte, si bien qu’une décoration qui ne réserve rien se trouve sous le texte. La maquette d’un titre dans la colonne est dessinée avec le bloc du titre (par-dessus les blocs qui le précèdent dans la colonne, sous ceux qui le suivent), où qu’elle soit placée au-dessus du pied de sa colonne : dans les marges latérales, la marge supérieure, le fond perdu et les colonnes voisines aussi. Le pied de la colonne la coupe, sur le canvas et dans le PDF, puisque le flux s’y arrête (voir Plus haute que la colonne plus bas). Jusqu’à postext 1.4, le canvas et le PDF la coupaient aussi en haut de sa colonne, si bien qu’une bande ancrée en haut de la page ou du fond perdu débordait dans les marges latérales mais s’arrêtait à la marge supérieure. Une décoration ancrée au pied de la page a sa place dans une ouverture, ou dans la maquette du pied de page avec pages: 'opener'.

Plus haute que la colonne. Quand la place dépasse le pied de la colonne (un minHeight aussi haut que la page, une image ou un cadre qui descend jusqu’au format rogné), le titre réclame le reste de sa page (une ouverture, dans chaque colonne) ou de sa colonne (un titre dans la colonne), et le texte qui le suit commence à la page ou à la colonne suivante. Son bloc descend alors jusqu’au pied de la colonne, sans jamais être ramené à la hauteur de son texte, si bien que la bande par rapport à laquelle sa maquette est mise en page est la place qu’il réclame (minHeight compris, jusqu’au pied). Une maquette plus haute que la page elle-même (un long chapeau sur une petite page d’écran) est quand même coupée au pied de la page (une maquette dans la colonne, au pied de sa colonne) : le Sandbox la signale dans le panneau Vérifications sous le nom Maquette de titre coupée. La mise en page ne lève aucun avertissement pour cela (une couverture qui réclame sa page est le cas habituel et ne perd rien), mais tout hôte peut lancer la même vérification sur la mise en page terminée : collectHeadingDesignCuts(doc) renvoie un { kind: 'headingDesignCut', pageIndex, level, where, overflowPx, sourceStart, sourceEnd } pour chaque titre dont le texte de maquette dépasse le pied du format rogné de la page (where: 'page', une ouverture) ou de sa colonne (where: 'column'), et formatWarning décrit chacun d’eux. Voir Une ouverture aussi haute que la page sous Étendue et maquette avancée.

La colonne latérale. Dans une maquette à colonne et demie dont la colonne latérale reçoit les flottants (sideColumnRole: 'floats'), un élément de la maquette d’un titre dans la colonne qui se trouve dans la colonne latérale (un numéro de chapitre ancré à la page dans la colonne de marge extérieure d’une ouverture de manuel) en tient la pile latérale éloignée. Chaque figure, tableau ou encadré span: 'side' que la page compose après le titre garde un écart de flottant libre autour de chacun de ces éléments : il reste là où la pile le place quand il tient au-dessus de l’élément, et passe sinon dessous, ou attend la page suivante quand le reste de la colonne latérale ne peut pas l’y contenir. Un numéro en tête du couloir latéral tient donc toute la pile sous lui, tandis qu’un numéro de section suspendu dans la marge à côté d’un titre plus bas sur la page laisse la tête du couloir aux figures que la page cite (la figure marginale se place toujours en haut de sa page). Ce que la colonne latérale contient déjà quand le titre est placé n’est pas déplacé : une figure empilée plus tôt sur la page qui descend jusqu’à l’élément du titre reste où elle est, sous l’élément ; une maquette dont l’élément se trouve dans la colonne latérale au milieu de la page veut donc ses figures citées après le titre. Les éléments avec reserve: false laissent la colonne latérale libre, comme ils laissent le texte. Une ouverture (span: 'page') n’a besoin de rien de tel : sa bande est réservée dans chaque colonne, colonne latérale comprise. Jusqu’à postext 1.4, une figure latérale citée sur une telle ouverture était placée en tête de la colonne latérale, par-dessus le numéro.

Couvertures. Un titre de couverture qui remplit sa page (minHeight aussi haut que la page, ou une image pleine page dans sa maquette) envoie donc de lui-même le texte qui le suit à la page suivante, dans les maquettes à une ou à plusieurs colonnes. Un :::pagebreak juste après lui est facultatif et ne fait pas de mal : un saut de page sur une page encore vide ne fait rien, il n’ajoute donc jamais de page blanche. Il n’est nécessaire que lorsque la maquette de la couverture s’arrête avant le pied de la page et que le texte doit quand même commencer sur une nouvelle page.

# Annual report 2026 {style="cover"}
 
:::pagebreak
 
# Letter from the chair

#Numéros en toutes lettres

Deux suffixes de modèle de numérotation écrivent un compteur en toutes lettres, dans la langue du document (la locale de premier niveau, sinon la langue de césure ; voir Langue du document) : words pour le cardinal et ordinal pour l’ordinal. La casse du suffixe fixe la casse des mots, comme A / a le fait pour les lettres :

JetonAnglais (21)Espagnol (21)Chinois (21)
twenty-oneveintiuno二十一
Twenty-oneVeintiuno二十一
TWENTY-ONEVEINTIUNO二十一
twenty-firstvigesimoprimero第二十一
Twenty-firstVigesimoprimero第二十一
TWENTY-FIRSTVIGESIMOPRIMERO第二十一

L’anglais, l’espagnol, le français, l’italien, l’allemand, le catalan, le portugais, le chinois, le japonais et l’arabe sont écrits en toutes lettres ; toute autre langue prend les mots anglais, comme le font les chaînes de continuation de tableau intégrées. Le chinois écrit les chiffres informels de simp-chinese-informal ou de trad-chinese-informal, selon l’écriture de la locale (一万 / 一萬), avec 第 devant un ordinal ; les caractères Han n’ont pas de casse, les trois graphies d’un suffixe s’impriment donc de la même façon. L’anglais suit l’usage américain (one hundred five, sans and). L’espagnol emploie par défaut les formes masculines, comme on numérote un capítulo ou un libro (capítulo primero, tercero, veintiuno), et écrit les ordinaux de 13 à 29 en un seul mot, comme le préfère la RAE (decimotercero, vigesimoprimero). Les cardinaux sont écrits en toutes lettres jusqu’à 999 999 et les ordinaux espagnols, catalans et portugais jusqu’à 999 ; les nombres plus grands s’impriment en chiffres.

Le français suit l’orthographe traditionnelle (vingt et un, soixante et onze, quatre-vingts, deux cent un) et écrit premier pour un (Chapitre premier, mais vingt et unième) ; l’italien écrit chaque nombre en un seul mot (ventuno, ventitré, duemilaventiquattro ; primo, ventunesimo), l’allemand aussi (einundzwanzig, hunderteins ; erste, einundzwanzigste), avec ss pour ß en allemand de Suisse (de-CH) ; le catalan suit l’IEC (vint-i-u, dos-cents ; primer, cinquè, vint-i-unè), et le portugais est celui du Brésil (dezesseis) sauf si la locale nomme une autre région (pt-PT : dezasseis), avec les ordinaux latins (vigésimo primeiro). Les ordinaux catalans et portugais, comme les espagnols, sont écrits jusqu’à 999.

Les langues romanes lisent le modificateur de genre : -feminine (ou -f) accorde les mots avec un nom féminin ({1:Ordinal-f} partie donne Première partie, Parte {1:ordinal-f} donne en italien Parte prima ; de même vingt et une, veintiuna, vint-i-una, duzentas), et -masculine (-m) est le défaut. En allemand, le cardinal ne varie pas (Kapitel eins), mais l’ordinal varie : sans modificateur, il prend la terminaison qu’il a après l’article, la même aux trois genres (Das {1:ordinal} Kapitel donne Das erste Kapitel) ; devant un nom sans article, -masculine donne Erster Teil, -feminine Erste Lektion et -neuter (-n) Erstes Kapitel. Les nombres allemands s’écrivent en minuscules, comme le veut la langue (Kapitel {1:words} donne Kapitel eins) ; {1:Words} met une capitale initiale, pour le mot qui ouvre le titre, et {1:WORDS} écrit ß en SS.

Les nombres arabes s’accordent en genre avec le nom qu’ils comptent : le suffixe accepte donc un modificateur : -feminine (ou -f) pour un nom féminin, -masculine (-m, le défaut) pour un nom masculin ; -classical écrit les centaines مائة, comme le font Boulaq et la plupart des imprimés égyptiens, au lieu du moderne مئة. {1:ordinal} écrit l’ordinal défini au nominatif qu’emploie un titre : الفصل {1:ordinal} donne الفصل الأول, الفصل الحادي عشر, الفصل الحادي والعشرون ; الليلة {1:ordinal-feminine} donne الليلة الأولى, الليلة الحادية عشرة, الليلة الحادية والعشرون, الليلة المئتان, et au-delà de cent la formule classique « après » : الليلة الخامسة والأربعون بعد الثلاثمئة, الليلة الحادية بعد الألف. {1:words} écrit le cardinal (واحد وعشرون ; au féminin إحدى عشرة, واحدة وعشرون). Les ordinaux sont écrits en toutes lettres jusqu’à 9 999 et les cardinaux jusqu’à 99 999 ; les modificateurs se combinent ({1:ordinal-f-classical}) ; les langues romanes et l’allemand n’en lisent que le genre (voir plus haut), et les autres langues les ignorent. L’arabe n’a pas de capitales : la casse du suffixe ne change donc rien. Les espaces réservés de maquette {numberWords} et {numberOrdinalWords} écrivent les formes masculines ; pour une ouverture au féminin, mettez l’ordinal dans le modèle du niveau et imprimez-le avec {number}.

Dans une maquette de titre, {numberWords} / {numberWordsLower} et {numberOrdinalWords} / {numberOrdinalWordsLower} écrivent le compteur du titre de la même façon, si bien que l’ouverture peut afficher Chapter One tandis que la table des matières affiche 1. Le textTransform: 'uppercase' d’un élément de texte donne les capitales :

// Spanish novel: "CAPÍTULO PRIMERO" above the title, "1." in the contents.
{ level: 1, numberingTemplate: '{1}.', span: 'page',
  advancedDesign: { enabled: true, slot: { elements: [
    { kind: 'text', id: 'n', content: 'Capítulo {numberOrdinalWordsLower}', textTransform: 'uppercase', /* … */ },
    { kind: 'text', id: 't', content: '{titleText}', /* … */ },
  ] } } }