# Configuration : notes et références

> Les notes de bas de page, les numéros de ligne, les renvois et les citations, la table des matières et l’index

- Version HTML: https://postext.dev/fr/docs/configuration-notes-references
- Dernière mise à jour: 2026-10-10
- Temps de lecture: 4 min
- Autres langues: [en](https://postext.dev/en/docs/configuration-notes-references.md), [es](https://postext.dev/es/docs/configuration-notes-references.md), [ca](https://postext.dev/ca/docs/configuration-notes-references.md), [pt](https://postext.dev/pt/docs/configuration-notes-references.md), [zh](https://postext.dev/zh/docs/configuration-notes-references.md), [ja](https://postext.dev/ja/docs/configuration-notes-references.md), [ar](https://postext.dev/ar/docs/configuration-notes-references.md)

## En bref

Cette page réunit les réglages des parties d’un livre qui renvoient ailleurs. Les notes se placent en bas de page, et les numéros de ligne dans la marge. Les renvois désignent une figure, une section ou une page, et les citations désignent les ouvrages que vous citez. La table des matières liste les chapitres, et l’index, en fin d’ouvrage, liste des termes avec leurs pages. Chaque section explique l’aspect de ces éléments et leur numérotation.

## Notes de bas de page

La propriété `footnotes` définit où vont les notes appelées avec `[^id]`, comment elles sont numérotées et à quoi elles ressemblent. Le balisage est décrit dans [Format du document](https://postext.dev/fr/docs/document-format.md#notes-de-bas-de-page).

```ts
interface FootnotesConfig {
  placement?: 'column' | 'chapterEnd' | 'spread'; // Foot of the citing column, after the chapter, or beside the text of a spread.
  numbering?: 'chapter' | 'document' | 'page' | 'column' | 'spread'; // Start again at each chapter, run on, or start again on each page / column / spread.
  numberFormat?: string;      // decimal, lower-roman, circled-decimal (①)…
  symbols?: string[];         // The note symbols of numberFormat: 'symbols'.
  markerPosition?: 'auto' | 'superscript' | 'inline' | 'side' | 'right'; // Raised, on the baseline, beside the word, or right of a vertical line.
  markerSize?: Dimension;     // Inline, side or right marker size; em is the text around it.
  numberGap?: 'en' | 'em';    // Space after the note's own number.
  chapterEndAlign?: 'foot' | 'text';   // chapterEnd: notes at the column foot, or under the text.
  fontSize?: Dimension;       // Note size; em is the body size.
  lineHeight?: Dimension;     // Note leading; em is the note size.
  color?: ColorValue;         // Note colour; the body colour when unset.
  textAlign?: TextAlign;      // The body alignment when unset.
  wordBreak?: 'normal' | 'keep-all'; // The document's cjk.wordBreak when unset.
  hangingIndent?: Dimension;  // Indent of a note's turnover lines.
  spaceBetween?: Dimension;   // Space between two notes.
  spaceAbove?: Dimension;     // Space between the text and the rule; em is the body size.
  spaceBelowRule?: Dimension; // Space between the rule and the first note.
  separator?: {
    enabled?: boolean;        // Draw the rule.
    width?: number;           // Rule length, a fraction of the column width.
    lineWidth?: Dimension;    // Rule thickness.
    color?: ColorValue;       // The note colour when unset.
  };
}
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `placement` | `'column' \| 'chapterEnd' \| 'spread'` | `'column'` (livres japonais verticaux : `'chapterEnd'`) | `'column'` place chaque note au pied de la colonne qui contient la ligne qui l’appelle, sous un court filet ; dans une mise en page à une colonne, c’est le pied de la page. `'chapterEnd'` place toutes les notes d’un chapitre après son dernier bloc, dans l’ordre des appels. `'spread'` (傍注, texte vertical uniquement) place les notes appelées sur les deux pages d’une double page à la fin de sa page impaire, la page de gauche d’un livre relié à droite, sous le filet : les notes appelées sur la page paire l’attendent, une note qui laisserait à la page impaire moins d’une ligne de texte reste au pied de la page paire avec celles qui la suivent, et un chapitre qui se termine sur une page paire y garde ses notes en attente. En texte horizontal, il se replie sur `'column'` avec un avertissement `unknownConfigValue`. Depuis postext 1.16. |
| `numbering` | `'chapter' \| 'document' \| 'page' \| 'column' \| 'spread'` | `'chapter'` (livres japonais horizontaux : `'page'` ; avec `placement: 'spread'` : `'spread'` ; avec `numberFormat: 'symbols'` au pied de la colonne : `'page'`) | `'chapter'` repart de 1 sous chaque titre de niveau 1 et au début de chaque document. `'document'` continue à travers le document et, dans un livre mis en page chapitre par chapitre, d’un chapitre au suivant (`continuationAfter` transmet le dernier numéro dans `continuation.footnoteNumber`). `'page'` repart de 1 à chaque page et `'column'` à chaque colonne, en comptant les notes là où la mise en page les place (les colonnes d’une page dans l’ordre de lecture) : la disposition 页下注 habituelle d’un livre chinois. Le document est mis en page, numéroté selon l’endroit où ses notes ont abouti, puis remis en page jusqu’à ce que les numéros se stabilisent (au plus trois constructions de plus). Ces deux modes s’appliquent aux notes au pied de la colonne : avec `placement: 'chapterEnd'`, les notes sont numérotées par chapitre. `'spread'` repart à chaque double page (pages 2–3, 4–5…), dans l’ordre des appels, pour `placement: 'spread'`. |
| `numberFormat` | `string` | `'decimal'` | La façon d’écrire les numéros, dans toutes les graphies qu’acceptent les réglages de numérotation : `'decimal'`, `'lower-roman'`, `'lower-alpha'`, `'circled-decimal'` (ou `'①'`), `'cjk-decimal'`, `'一'`… L’appel dans le texte et le numéro qui ouvre la note l’utilisent tous deux. `circled-decimal` écrit en décimal les numéros au-delà de 50. Un nom inconnu numérote en décimal, avec un avertissement `unknownNumberFormat`. `'symbols'` (ou `'*'`) marque les notes de symboles de renvoi, ceux de `symbols` à tour de rôle : * † ‡ § ‖ ¶, puis doublés (** †† ‡‡…) et triplés ; les notes sont alors recomptées à chaque page, sauf si `numbering` est défini. Depuis postext 1.19. |
| `symbols` | `string[]` | `['*', '†', '‡', '§', '‖', '¶']` | La suite qu’écrit `numberFormat: 'symbols'`, doublée puis triplée une fois épuisée. Les fichiers latins de Google Fonts et de Fontsource contiennent * † § ¶ (la croix dans `latin-ext`) mais ni ‡ ni ‖, que le PDF dessine alors avec le glyphe `.notdef` de la police, avec un avertissement `missingGlyph` : avec une telle police, omettez-les (`['*', '†', '§', '¶']`) ou composez les notes dans un caractère qui les possède. Les chaînes vides sont ignorées et une liste vide conserve la valeur par défaut. Depuis postext 1.19. |
| `markerPosition` | `'auto' \| 'superscript' \| 'inline' \| 'side' \| 'right'` | `'auto'` | `'superscript'` place en exposant l’appel dans le texte et le numéro qui ouvre la note, dans un corps réduit. `'inline'` les pose sur la ligne de base : l’appel en `markerSize`, le numéro de la note au corps de la note ; en texte vertical, un appel cerclé en ligne se tient droit dans une cellule à lui. `'right'` place un appel réduit contre le côté droit d’une ligne verticale, comme les livres japonais verticaux composent （1） ; en texte horizontal, c’est un exposant. `'side'` (合印) place un petit appel à côté du mot marqué, du côté de son ruby, et le fait finir là où finit le dernier caractère du mot ; il ne prend aucune place dans la ligne, qui se coupe et se justifie comme s’il n’était pas là, et un interligne trop étroit pour lui est signalé par `rubyExceedsLeading`. `'auto'` vaut inline pour `circled-decimal`, `'right'` dans un livre japonais vertical, et exposant sinon. Dans tous les cas, l’appel reste avec le caractère qui le précède et n’ouvre jamais une ligne. |
| `markerSize` | `Dimension` | `1em` ; `0.6em` pour `'side'`, `0.7em` pour `'right'` | Taille d’un appel en ligne, latéral ou à droite ; `em` est le corps du texte qui l’entoure (`0.75em` est une réduction courante). Sans effet sur un appel en exposant. |
| `numberGap` | `'en' \| 'em'` | `'en'` (notes japonaises après le chapitre : `'em'`) | L’espace après le numéro qui ouvre une note : un demi-cadratin, ou un cadratin entier de la note (une espace idéographique quand le numéro ou la note contient du texte CJK), jamais étirée ni coupée. Depuis postext 1.16. |
| `markerTemplate` | `string` | `'{n}'` (livres japonais verticaux : `'（{n}）'`) | La façon d’écrire le numéro d’une note, `{n}` le représentant dans le format de numérotation et avec les chiffres du document : `'({n})'` donne les appels entre parenthèses des livres arabes, « (١) ». Le modèle écrit de la même façon l’appel dans le texte et le numéro qui ouvre la note. Un modèle sans `{n}` est lu comme la valeur par défaut. |
| `noteNumberPosition` | `'auto' \| 'superscript' \| 'inline'` | `'auto'` | La place du numéro qui ouvre la note : en exposant, ou sur la ligne au corps de la note. `'auto'` suit `markerPosition`. Les livres arabes mettent l’appel en exposant dans le texte et posent sur la ligne le numéro propre de la note. |
| `chapterEndAlign` | `'foot' \| 'text'` | `'foot'` | Avec `placement: 'chapterEnd'` : `'foot'` place au pied de la colonne les notes qui terminent une colonne, les lignes restantes demeurant entre le texte et les notes, comme se tiennent les notes au pied de la colonne. `'text'` les place juste sous le texte. |
| `fontSize` | `Dimension` | `0.8em` | Corps du texte des notes. `em` et `rem` valent le corps du texte courant. Les notes utilisent la famille et les graisses du texte courant. |
| `lineHeight` | `Dimension` | `1.25em` | Interlignage du texte des notes ; `em` est le corps des notes. Les notes sont hors de la grille de ligne de base : elles s’empilent depuis le pied de la colonne, et le texte au-dessus d’elles reste sur la grille. |
| `color` | `ColorValue` | couleur du texte courant | Couleur du texte des notes. |
| `textAlign` | `TextAlign` | alignement du texte courant | Alignement du texte des notes. |
| `wordBreak` | `'normal' \| 'keep-all'` | `cjk.wordBreak` | L’endroit où les notes se coupent entre caractères chinois, japonais et coréens, indépendamment du texte courant (voir [`cjk.wordBreak`](https://postext.dev/fr/docs/configuration-east-asian.md#typographie-dasie-de-lest)). `'keep-all'` garde entière une suite de ces caractères : les lectures que cite une note en anglais (`看月光`) n’ont plus besoin d’un caractère de liaison (word joiner) entre chaque paire de caractères, tandis que les poèmes de la page continuent de se couper entre deux caractères quelconques. `'normal'` fait l’inverse dans un document qui définit `'keep-all'`. Les notes au pied de la colonne, en fin de chapitre et à côté d’une double page le prennent en compte. Depuis postext 1.28. |
| `hangingIndent` | `Dimension` | `0` | Retrait de la deuxième ligne d’une note et des suivantes, pour qu’elles s’alignent après son numéro. |
| `spaceBetween` | `Dimension` | `0` | Espace entre deux notes. |
| `spaceAbove` | `Dimension` | `0.5em` | Espace entre la dernière ligne du texte et le filet ; `em` est le corps du texte courant. Avec `'chapterEnd'` et `chapterEndAlign: 'text'`, `spaceAbove` + `spaceBelowRule` donne l’espace entre le texte et la première note. |
| `spaceBelowRule` | `Dimension` | `0.4em` | Espace entre le filet et la première note. |
| `separator.enabled` | `boolean` | `true` | Tracer le filet au-dessus des notes de chaque colonne. Avec `false`, les espaces ci-dessus sont conservés. |
| `separator.width` | `number` | `0.3` | Longueur du filet en fraction de la largeur de la colonne (0–1), depuis le bord gauche de la colonne. |
| `separator.lineWidth` | `Dimension` | `0.5pt` | Épaisseur du filet. |
| `separator.color` | `ColorValue` | couleur des notes | Couleur du filet. |

```ts
footnotes: {
  fontSize: { value: 7.5, unit: 'pt' },
  lineHeight: { value: 9.5, unit: 'pt' },
  hangingIndent: { value: 0.8, unit: 'em' },
  separator: { width: 0.25, lineWidth: { value: 0.4, unit: 'pt' } },
}
```

**Livres japonais.** Un document japonais (`locale: 'ja'`, depuis postext 1.16) donne aux champs qu’il laisse vides les valeurs de JLReq §4.2. Un livre vertical place ses notes après le chapitre (`placement: 'chapterEnd'`, 後注), numérotées par chapitre, avec des appels `（{n}）` à droite de la ligne (`markerPosition: 'right'`, chiffres droits grâce à `cjk.uprightDigits`) ; un livre horizontal les place au pied de la page, numérotées par page, avec des appels en exposant. Les deux tracent un filet long d’un tiers de la justification (`separator.width: 1/3`), et les notes après le chapitre prennent `numberGap: 'em'` et un retrait suspendu de deux cadratins. Une valeur explicite l’emporte et est conservée à l’enregistrement (`stripFootnotesDefaults` compare avec les valeurs par défaut propres au document) ; les documents chinois, arabes et latins se résolvent comme avant. `footnoteDocumentDefaults(locale, writingMode, placement?)` renvoie ces valeurs. Écrivez un appel avant un 。 final (`先生[^1]。`) : il reste avec le caractère qui le précède, et 。 n’ouvre jamais une ligne. Voir [Mise en page japonaise › Notes](https://postext.dev/fr/docs/japanese-layout.md#notes).

Comment les notes se placent au pied de la colonne :

- **La note et son appel partagent une colonne.** Avant de placer une ligne, la mise en page ajoute la hauteur des notes que cette ligne appelle pour la première fois (et celle du filet, pour la première note de la colonne). Une ligne dont les notes ne tiennent pas sous elle passe à la colonne suivante avec le reste de son paragraphe, selon les règles des orphelines et des veuves. La zone de texte de la colonne diminue de la hauteur des notes, si bien que l’équilibrage des colonnes et la bande de clôture d’un chapitre ne comptent que le texte.
- **Plusieurs notes** dans une même colonne s’empilent dans l’ordre des appels sous un seul filet. Une note appelée de nouveau plus loin garde son numéro et n’est pas composée une deuxième fois.
- **Flottants en bas de page.** Une figure qui occupe le pied d’une colonne après que ses notes ont été placées se met au-dessus d’elles ; les notes placées après la figure se mettent au-dessus d’elle.
- **Encadrés.** Une note appelée dans un encadré (en ligne, flottant ou fixe) va au pied de la colonne où le texte reprend après l’encadré, généralement la même colonne. Un encadré qui termine le document laisse ses notes au pied de la colonne où le texte s’est terminé.
- **Limites.** Une note n’est jamais coupée : une note plus haute qu’une colonne déborde de celle-ci. Les appels dans les légendes, les cellules de tableau et les titres ne sont pas lus (ils s’impriment tels qu’écrits).
- **Sortie.** Le canvas, le HTML et le PDF peignent les notes, les appels (un numéro en exposant) et le filet. Dans le PDF, chaque appel renvoie par un lien à sa note, et un PDF balisé fait de chaque note un élément `Note` doté d’un `/ID` unique, répertorié dans l’`/IDTree` de l’arbre de structure (PDF/UA-1). Les notes sont des `VDTBlock` dont `footnoteNote` est défini, dans `page.floats` ; les filets sont dans `page.footnoteAreas`.
- **Avertissements.** `undefinedFootnote` (un appel sans définition : le numéro s’imprime au-dessus d’une note vide) et `unusedFootnote` (une définition qu’aucun appel ne cite : elle n’est pas composée).

Le résolveur et la fonction de nettoyage suivent le modèle des autres sections :

```ts
import { DEFAULT_FOOTNOTES_CONFIG, resolveFootnotesConfig, stripFootnotesDefaults, footnoteDocumentDefaults } from 'postext';

resolveFootnotesConfig(config.footnotes, 'ja', 'vertical-rl'); // unset fields take the Japanese vertical defaults
```

## Numéros de ligne

La propriété `lineNumbers` imprime le numéro d’une ligne sur cinq (ou sur N) dans la marge, à côté de la ligne, comme le font les éditions critiques, les anthologies de poésie, les textes juridiques et les éditions scolaires. Elle compte les lignes des poèmes `:::verse`, ou toutes les lignes du texte. Elle est désactivée par défaut. Chaque numéro est peint sur la ligne de base de sa ligne, dans un corps qui lui est propre, et ne déplace jamais une ligne : la page est mise en page exactement comme elle le serait sans numéros. Depuis postext 1.23.

```ts
interface LineNumbersConfig {
  enabled?: boolean;        // Off by default.
  count?: 'verse' | 'all';  // The lines of poems, or every line of the text.
  interval?: number;        // Print the multiples of N.
  numberFirst?: boolean;    // Also print the first line after each restart.
  restart?: 'document' | 'chapter' | 'section' | 'page' | 'poem'; // Where the count starts again.
  startAt?: number;         // The number of the first line after a restart.
  position?: 'outer' | 'inner' | 'left' | 'right' | 'start' | 'end' | 'side';
  multiColumn?: 'each' | 'gutter' | 'outer-edges'; // Pages of two or more columns.
  gap?: Dimension;          // From the text to the number; em is the number's size.
  align?: 'auto' | 'left' | 'right';
  fontFamily?: string;      // The body family when unset.
  fontSize?: Dimension;     // em is the body size.
  fontWeight?: number;      // The body weight when unset.
  italic?: boolean;
  color?: ColorValue;       // The body colour when unset.
  format?: string;          // decimal, lower-roman, arabic-indic, 一…
}
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `false` | Imprimer les numéros de ligne. Un document vertical (`layout.writingMode: 'vertical-rl'`) n’en reçoit aucun, et `true` y est signalé par `lineNumbersUnsupported`. |
| `count` | `'verse' \| 'all'` | `'verse'` | `'verse'` compte les lignes des poèmes `:::verse`, chaque vers une seule fois : un rejet (la fin d’un vers trop long pour la justification, composée à la ligne suivante) ne prend pas de numéro, et l’espace entre les strophes n’est pas compté. Un poème dans la disposition arabe classique compte une ligne par bayt ; la deuxième ligne d’un bayt décalé n’est pas comptée. `'all'` compte toutes les lignes des paragraphes du texte courant, des éléments de liste, des citations en bloc et des vers, dans l’ordre de lecture : page par page, colonne par colonne, de haut en bas. |
| `interval` | `number` | `5` | Imprimer le numéro de chaque ligne multiple de cette valeur (5, 10, 15…). Un poème dont la première ligne porte le numéro 37 imprime 40, 45… Un poème peut définir le sien dans sa directive (`interval=N`). |
| `numberFirst` | `boolean` | `false` | Imprimer aussi le numéro de la première ligne comptée après chaque redémarrage. |
| `restart` | `'document' \| 'chapter' \| 'section' \| 'page' \| 'poem'` | `'poem'` avec `count: 'verse'`, `'page'` avec `count: 'all'` | L’endroit où le compte repart : jamais (`'document'`, qui continue à travers les chapitres d’un livre), à chaque titre de niveau 1 (`'chapter'`), à chaque titre de niveau 1 ou 2 (`'section'`), à chaque page (`'page'`) ou à chaque poème `:::verse` (`'poem'`). Le `lineStart=N` d’un poème et le `lines=N` de la directive `:::numbering` le font repartir n’importe où, dans tous les modes. |
| `startAt` | `number` | `1` | Le numéro de la première ligne après un redémarrage. |
| `position` | `'outer' \| 'inner' \| 'left' \| 'right' \| 'start' \| 'end' \| 'side'` | `'outer'` | Le côté où se placent les numéros. `'outer'` est à l’opposé du dos : la droite d’une page impaire et la gauche d’une page paire, l’inverse dans un livre relié à droite. `'inner'` est le côté du dos. `'left'` et `'right'` sont les mêmes sur toutes les pages. `'start'` et `'end'` suivent le sens du document : `'start'` est la droite dans un livre écrit de droite à gauche. `'side'` les place dans la colonne latérale d’une mise en page `'oneAndHalf'` avec `layout.sideColumnRole: 'floats'`, contre le bord de la colonne latérale voisin du texte (`gap` n’est pas utilisé) ; sur une page sans colonne latérale, il se replie sur `'outer'`. |
| `multiColumn` | `'each' \| 'gutter' \| 'outer-edges'` | `'outer-edges'` | Pages à deux colonnes de texte ou plus côte à côte. `'outer-edges'` place les numéros de la première colonne à sa gauche et ceux de la dernière à sa droite ; les colonnes intermédiaires suivent `'each'`. `'gutter'` les place dans les gouttières : ceux de la première colonne à sa droite, ceux des autres à leur gauche. `'each'` place les numéros de chaque colonne du côté `position`. |
| `gap` | `Dimension` | `1em` | La distance entre le bord de la colonne et le numéro ; `em` est le corps propre du numéro. |
| `align` | `'auto' \| 'left' \| 'right'` | `'auto'` | `'auto'` aligne chaque numéro du côté du texte : au fer à droite dans une marge gauche, au fer à gauche dans une marge droite. `'left'` et `'right'` alignent les numéros dans la largeur du numéro le plus large de la page. |
| `fontFamily` | `string` | famille du texte courant | Caractère des numéros. Il est chargé et incorporé comme toute autre famille. |
| `fontSize` | `Dimension` | `0.8em` | Corps des numéros ; `em` est le corps du texte courant. |
| `fontWeight` | `number` | graisse du texte courant | Graisse des numéros. |
| `italic` | `boolean` | `false` | Composer les numéros en italique. |
| `color` | `ColorValue` | couleur du texte courant | Couleur des numéros. Une couleur liée à la palette suit les palettes des parties et des sections. |
| `format` | `string` | décimal | La façon d’écrire les numéros, dans n’importe laquelle des [graphies des formats de numérotation](https://postext.dev/fr/docs/configuration-page-layout.md#graphies-des-formats-de-numérotation) (`'lower-roman'`, `'arabic-indic'`, `'一'`…). Les numéros décimaux sont écrits avec les chiffres du document (`numerals`). Un nom inconnu numérote en décimal, avec un avertissement `unknownNumberFormat`. |

```ts
lineNumbers: {
  enabled: true,
  count: 'verse',
  interval: 5,
  restart: 'document',          // one count through the whole book
  position: 'outer',
  fontSize: { value: 0.75, unit: 'em' },
  italic: true,
}
```

Ce qui est compté, et ce qui ne l’est pas :

- **Jamais comptés** : les titres, les légendes, les tableaux et les images, les formules hors texte, le texte de maquette (ouvertures, titres courants), les notes de bas de page et de fin de chapitre, la table des matières, les entrées de l’index et de la bibliographie, et les pages blanches.
- **Encadrés et prose.** Le texte d’un encadré n’est pas compté, et avec `count: 'verse'` la prose non plus, sauf si le style de paragraphe dans lequel elle est composée indique `lineNumbers: true` ; un style avec `lineNumbers: false` n’est jamais compté (voir [Styles de paragraphe](https://postext.dev/fr/docs/configuration-styles.md#styles-de-paragraphe)).
- **Un poème.** La directive d’un poème accepte `numbered=false` (ses lignes ne sont pas comptées), `lineStart=N` (sa première ligne porte le numéro N, et le compte repart là) et `interval=N`. `:::numbering{lines=N}` donne le numéro N à la ligne comptée suivante, où qu’elle se trouve. Voir [Format du document › `:::verse`](https://postext.dev/fr/docs/document-format.md#verse) et [`:::numbering`](https://postext.dev/fr/docs/document-format.md#numbering).

Dans un livre mis en page chapitre par chapitre, `restart: 'document'` reporte le compte d’un chapitre au suivant par `continuation.lineNumber`. `continuationAfter` compte les vers à partir du texte ; avec `count: 'all'`, le compte dépend de la mise en page, si bien que l’hôte transmet le `lastLineNumber` du document du chapitre précédent, comme le fait le Sandbox.

Avec `position: 'side'`, les numéros partagent la colonne latérale avec les encadrés latéraux, les légendes latérales et les figures latérales. Un numéro qui chevauche l’un de ces éléments est peint malgré tout, aucun des deux ne bouge, et la construction signale un avertissement de contenu `lineNumberOverlap` qui désigne la ligne numérotée.

**Sortie.** Le canvas, le PDF, la visionneuse HTML et l’EPUB à mise en page fixe peignent les numéros. Dans un PDF balisé, ce sont des artefacts de mise en page et chacun porte un `/ActualText` vide, si bien que le texte copié ou extrait passe d’une ligne à l’autre sans eux. La sortie HTML les cache aux technologies d’assistance (`aria-hidden`), à la sélection et au texte copié. L’EPUB recomposable, dont les lignes sont composées par le système de lecture, ne garde que les numéros des vers : un span `pt-line-number` (lui aussi `aria-hidden`) dans la marge de début de la strophe, à côté de chaque ligne qui porte un numéro à l’impression. Dans le VDT, les numéros sont un emplacement de maquette de chaque page (`page.lineNumbers`, dont les blocs de texte sont marqués `artifact`) et une liste de repères (`page.lineNumberMarks` : `number`, `label`, `columnIndex`, `blockId`, `lineIndex`) ; le document enregistre `lastLineNumber`.

**Non pris en charge** : les numéros de ligne en texte vertical, un renvoi qui imprime le numéro d’une ligne, les notes rattachées à des numéros de ligne, et les numéros des lignes des cellules de tableau, des légendes ou des listings de code.

Dans le Sandbox, ces réglages forment la section **Numéros de ligne** du panneau Maquette. Le résolveur et la fonction de nettoyage suivent le modèle des autres sections ; la police, la graisse et la couleur viennent du texte courant :

```ts
import { DEFAULT_LINE_NUMBERS_CONFIG, resolveLineNumbersConfig, stripLineNumbersDefaults } from 'postext';

resolveLineNumbersConfig(config.lineNumbers, resolvedBodyText); // unset font, weight and colour follow the body
```

## Renvois

La propriété `crossRefs` définit les mots qu’un [renvoi](https://postext.dev/fr/docs/document-format.md#renvois-et-ancres) imprime autour d’un numéro ou d’une page, et le style que prend un `:ref` qui n’en définit aucun. Chaque modèle contient `{n}` à l’endroit du numéro ; un modèle qui ne le contient pas reçoit le numéro après une espace insécable (`"§"` imprime *§ 3.2*). Un modèle non défini suit la langue du document : *chapter / section / p.* en anglais, *capítulo / sección / pág.* en espagnol, `第{n}章` / `第{n}节` / `第{n}页` en chinois, et ainsi de suite pour le français, l’allemand, l’italien, le portugais, le catalan et le néerlandais.

```ts
interface CrossRefsConfig {
  chapter?: string;  // Words around a level-1 heading's number: "chapter {n}".
  section?: string;  // Around any other heading's number: "section {n}".
  page?: string;     // Around a page number: "p. {n}".
  defaultStyle?: 'default' | 'number' | 'title' | 'page'; // A :ref without style=.
  breakLabels?: boolean; // A label of words breaks at its spaces.
}
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `chapter` | `string` | selon la langue | Un renvoi à un titre de niveau 1 : `"chapter {n}"`. Un numéro de titre dont le modèle écrit déjà le mot (`Chapter {1}`, `第{1:一}章`) s’imprime tel quel. |
| `section` | `string` | selon la langue | Un renvoi à un titre de niveau 2 à 6 : `"section {n}"`, `"§ {n}"`. |
| `page` | `string` | selon la langue | Un renvoi de page (`style=page`) : `"p. {n}"`, `"page {n}"`. |
| `defaultStyle` | `'default' \| 'number' \| 'title' \| 'page'` | `'default'` | Ce qu’imprime un `:ref` vers un titre ou une ancre sans `style=`. `'default'` : un titre numéroté par son mot et son numéro, un titre non numéroté par son intitulé, une ancre par son texte. Un renvoi qui définit `style` le garde, et les renvois aux figures et aux tableaux ne sont pas concernés. |
| `breakLabels` | `boolean` | `true` | Autoriser une ligne à se couper aux espaces d’un renvoi dont l’étiquette est faite de mots : le texte d’une ancre `[words]{#id}`, l’intitulé d’un titre ou d’un encadré, un remplacement `text="…"` (y compris sur un renvoi à une figure ou à un tableau). Les espaces de l’étiquette s’étirent et se resserrent alors avec la ligne, et le renvoi reste un seul lien ; ses mots ne reçoivent pas de césure. Un nombre, un chiffre romain ou une lettre isolée dans une telle étiquette reste attaché au mot qui le précède (`Fig. 1a`, `plate IV`). Une étiquette qui contient un numéro ou une page (*section 3.2*, *p. 112*, *Fig. 1.7*, *Theorem 2*) ne se coupe jamais, même quand son modèle contient une espace ordinaire. `false` compose chaque étiquette comme un seul mot, sans coupure de ligne à l’intérieur, comme jusqu’à postext 1.27. Une configuration enregistrée avant la `configVersion` 12 dont le texte contient un renvoi est lue avec `false`, pour que ses lignes restent en place (voir [Paquets écrits par postext 1.4 ou antérieur](https://postext.dev/fr/docs/configuration-programmatic-usage.md#paquets-écrits-par-postext-14-ou-antérieur)). |

Les renvois prennent la couleur, la graisse et l’inclinaison communes à tous les renvois (`bodyText.referenceColor`, `referenceBold`, `referenceItalic`).

## Citations

La propriété `citations` choisit le style de citation et l’apparence des citations et de la bibliographie. Le balisage est décrit dans [Citations et bibliographie](https://postext.dev/fr/docs/document-format.md#citations-et-bibliographie) ; le style est appliqué par le package `postext-citeproc`.

```ts
interface CitationsConfig {
  style?: string;          // 'apa', 'ieee', 'chicago-notes-bibliography'… or 'custom'
  customStyle?: string;    // a whole CSL style (.csl XML), used with style: 'custom'
  locale?: string;         // CSL locale; the document language when unset
  link?: boolean;          // citations link to their entries
  marker?: 'style' | 'brackets' | 'parentheses' | 'superscript' | 'corner';
  collapseRanges?: boolean;
  notes?: 'footnote' | 'warichu';
  numbering?: 'book' | 'chapter';
  hyphenateNames?: boolean; // false: the cited authors' names are never divided
  bibliography?: {
    title?: string;        // unset: the document language's word; '' or ' ': none
    scope?: 'book' | 'chapter';
    auto?: boolean;
    fontSize?: Dimension;
    lineHeight?: Dimension;
    hangingIndent?: Dimension;
    entrySpacing?: Dimension;
    labelWidth?: Dimension;
    labelAlign?: 'left' | 'right';
    doi?: 'link' | 'text' | 'hide';
    includeUncited?: boolean;
    groupByLanguage?: boolean;
  };
}
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `style` | `string` | `'apa'` | L’identifiant d’un style fourni (voir [Styles](https://postext.dev/fr/docs/document-format.md#styles)) ou `'custom'`. Le style décide de ce que disent les citations et les entrées : noms, dates, ordre, ponctuation, et si les citations sont des notes. |
| `customStyle` | `string` | — | Un style CSL complet, le XML d’un fichier `.csl`, utilisé quand `style` vaut `'custom'`. Le Sandbox le charge depuis un fichier. |
| `locale` | `string` | langue du document | La locale CSL dans laquelle le style écrit ses mots (`en-US`, `es-ES`, `zh-CN`, `zh-TW`, `ja-JP`…). Un document japonais se lit comme `ja-JP` : les citations narratives relient deux auteurs par と et abrègent les listes plus longues par ほか. |
| `link` | `boolean` | `true` | Une citation renvoie par un lien à son entrée dans la bibliographie (lien PDF, ancre HTML, clic dans le Sandbox). |
| `marker` | `'style' \| 'brackets' \| 'parentheses' \| 'superscript' \| 'corner'` | `'style'` | La façon dont un style numérique marque une citation : comme l’écrit le style, `[1]`, `(1)`, un exposant, ou `〔1〕` (droit en texte vertical). Un localisateur suit le numéro. |
| `collapseRanges` | `boolean` | `true` | Des numéros consécutifs sous forme d’intervalle : `1–3` dans un seul appel, `[2]–[4]` dans les appels de l’IEEE. `false` les garde séparés. |
| `notes` | `'footnote' \| 'warichu'` | `'footnote'` | L’endroit où un style à notes place ses citations : en notes de bas de page (placées et numérotées selon `footnotes`), ou en notes sur deux rangs à l’intérieur de la ligne (夹注). |
| `numbering` | `'book' \| 'chapter'` | `'book'` | Les citations à l’échelle du livre, ou chaque chapitre à part (chaque document, et chaque titre de niveau 1 après une citation) : un style numérique numérote chaque chapitre à partir de 1 et un ouvrage cité dans deux chapitres prend le numéro de chacun ; un style à notes écrit un ouvrage en entier à sa première citation dans chaque chapitre. Prévu pour `bibliography.scope: 'chapter'`, dont les listes prennent alors les numéros du chapitre. |
| `hyphenateNames` | `boolean` | `true` | Laisser le dictionnaire couper les noms des auteurs cités. `false` garde entier le nom de famille de chaque personne des références (auteurs, éditeurs, traducteurs) et chaque nom donné en une seule chaîne, partout où il apparaît avec sa majuscule : dans une citation, dans le texte courant et dans la liste, si bien qu’aucune ligne ne finit sur `(Lup-`. Un nom double est lu partie par partie, et un auteur nommé Baker ne garde pas entier le mot `baker`. Voir [Mots gardés entiers](https://postext.dev/fr/docs/configuration-text.md#mots-gardés-entiers). |
| `bibliography.title` | `string` | selon la langue | Titre au-dessus de la liste, un paragraphe en gras. Vide : aucun. Un titre de votre choix se place au-dessus de `:::bibliography`. |
| `bibliography.scope` | `'book' \| 'chapter'` | `'book'` | Une seule liste de tous les ouvrages que cite le livre, ou une par chapitre avec les ouvrages qu’il cite. Dans un document de plusieurs chapitres, chaque H1 commence une nouvelle liste de chapitre ; avec `auto`, un chapitre qui ne place aucun `:::bibliography` reçoit sa liste à la fin. |
| `bibliography.auto` | `boolean` | `true` | Placer la liste après le texte (dans le dernier chapitre, pour une liste à l’échelle du livre) quand aucun `:::bibliography` ne la place. |
| `bibliography.fontSize` | `Dimension` | `0.9em` | Corps des entrées ; em est le corps du texte courant. |
| `bibliography.lineHeight` | `Dimension` | interlignage du texte courant | Interlignage des entrées. |
| `bibliography.hangingIndent` | `Dimension` | `2em` | Retrait des lignes suivantes d’une entrée non numérotée. |
| `bibliography.entrySpacing` | `Dimension` | `0.3em` | Espace entre deux entrées. |
| `bibliography.labelWidth` | `Dimension` | étiquette la plus longue | Largeur de la colonne où se tiennent les numéros d’une liste numérotée : le texte de chaque entrée commence à cette distance, sur sa première ligne comme sur les suivantes, si bien que `9.` et `10.` partagent la colonne. L’étiquette reste une partie du texte de l’entrée. |
| `bibliography.labelAlign` | `'left' \| 'right'` | `'left'` | La place d’une étiquette dans sa colonne : contre son bord gauche, ou contre le texte (`9.` et `10.` finissent ensemble). |
| `bibliography.doi` | `'link' \| 'text' \| 'hide'` | `'link'` | Les DOI et les URL sous forme de liens, de texte simple, ou omis. |
| `bibliography.includeUncited` | `boolean` | `false` | Lister toutes les références, citées ou non (comme `nocite: "@*"`). |
| `bibliography.groupByLanguage` | `boolean` | `false` | Les ouvrages en chinois, en japonais et en coréen d’abord, puis les autres. Styles auteur-date et auteur-page uniquement : une liste numérotée garde l’ordre de ses numéros. |

## Table des matières

La propriété `toc` configure ce qu’imprime une directive `:::toc` (voir [Format du document](https://postext.dev/fr/docs/document-format.md#toc)). La table est assemblée à partir du **plan** du document (chaque titre avec son numéro et l’étiquette de sa page, chaque `:::part`), si bien qu’elle suit les chapitres : renommez-en un, déplacez-le dans une autre partie, changez ses auteurs, et les entrées changent avec lui. Une entrée se compose du numéro du titre dans une colonne à part, de l’intitulé, de points de conduite et de l’étiquette de page au bord droit, puis d’une ligne de sous-titre facultative ; une partie est une rangée dessinée par `parts.design`.

```ts
const config: PostextConfig = {
  toc: {
    levels: [{ level: 1, fontWeight: 700, color: { hex: '#00507b', model: 'hex' }, numberWidth: { value: 7.4, unit: 'mm' } }],
    unnumbered: { color: { hex: '#000000', model: 'hex' } },
    pageNumber: { fontWeight: 400, width: { value: 8, unit: 'mm' } },
    leader: { char: '.', gap: { value: 1, unit: 'mm' } },
    subtitle: { enabled: true, attr: 'author', italic: true, fontSize: { value: 8.5, unit: 'pt' } },
    parts: {
      height: { value: 23, unit: 'pt' },
      marginTop: { value: 11.5, unit: 'pt' },
      design: { elements: [/* a band box, 'SECTION {number}', '{titleText}', '{pageNumber}' */] },
    },
  },
};
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `levels` | `TocLevelConfig[]` | niveau 1 | Les niveaux de titre listés, chacun avec la typographie de ses entrées : `fontFamily`, `fontSize`, `lineHeight` (par défaut l’interlignage du texte courant, pour que la table tombe sur la grille), `fontWeight`, `italic`, `color`, `indent` (de l’entrée entière), `numberWidth` / `numberGap` (la colonne des numéros après laquelle commence l’intitulé ; les numéros y sont alignés à droite, et un numéro plus large que `numberWidth`, comme `الفصل الحادي عشر` ou `Chapter 12`, élargit la colonne de son niveau jusqu’au plus large d’entre eux), `numberFontFamily`, `numberFontSize`, `numberFontWeight`, `numberColor`, `marginTop`, `marginBottom`. Les champs non définis héritent du texte courant. Le numéro repose sur la ligne de base de la première ligne de l’intitulé, quels que soient son caractère et son corps, dans le canvas, en HTML et dans le PDF (jusqu’à postext 1.4, il était centré sur la hauteur d’x comme une puce de liste, si bien qu’un caractère de titrage ou un corps plus grand le faisait remonter au-dessus de l’intitulé). Un moteur de rendu de votre cru trouve cette ligne de base dans le `bulletBaselineY` du bloc de l’entrée ; `bulletY` reste le milieu du cadratin du numéro, comme en 1.4, si bien qu’un moteur de rendu antérieur au nouveau champ dessine les numéros là où il l’a toujours fait. |
| `unnumbered` | `TocEntryStyleConfig` | — | Remplacements pour les titres dont le style a `numbered: false` (une préface) : ils n’impriment aucun numéro et commencent au ras de l’`indent` du niveau. |
| `pageNumber` | objet | caractère du niveau 1, graisse du texte courant | `fontFamily`, `fontSize`, `fontWeight`, `italic`, `color` de l’étiquette de page, et `width` (par défaut `2em`) : la colonne qui lui est réservée au bord droit, où elle est alignée à droite. |
| `leader` | objet | `{ enabled: true, char: '.', gap: 0.5em }` | `char` est répété dans l’espace entre l’intitulé et le numéro de page, aligné à droite pour que les points d’entrées consécutives s’alignent (`'. '` les espace) ; `gap` est l’espace minimal gardé entre l’intitulé et les points de conduite. Les points de conduite prennent autant de caractères qu’il en tient, mesurés comme une suite entière dans leur caractère, si bien qu’une police dont le crénage écarte des points consécutifs reçoit moins de points, plutôt que des points qui atteignent le numéro de page. (Jusqu’à postext 1.4, le compte se faisait à partir d’un seul point, et dans une telle police les points de conduite couraient de l’intitulé jusque dans le numéro.) Un intitulé qui ne laisserait pas de place à l’étiquette passe à la ligne un peu plus tôt. Des points de conduite ne sont composés qu’à partir de trois caractères : là où il n’en tient qu’un ou deux, la rangée n’en a aucun, car un point isolé avant le numéro de page se lit comme un point final. Dans un PDF balisé, les points sont des artefacts, exclus du texte extrait. Le texte courant compose les mêmes points de conduite à ses [taquets de tabulation](https://postext.dev/fr/docs/configuration-text.md#taquets-de-tabulation). |
| `subtitle` | objet | `{ enabled: false, attr: 'author' }` | Une deuxième ligne sous l’entrée, tirée d’un attribut du titre (`attr`), par exemple les auteurs du chapitre, avec ses propres `fontFamily`, `fontSize`, `fontWeight`, `italic` (par défaut `true`), `color` et un `indent` supplémentaire. La ligne partage l’interlignage de l’entrée et ne se sépare jamais de son intitulé. |
| `parts.enabled` | `boolean` | `true` | Donner ou non une rangée aux intertitres de partie. |
| `parts.breakBefore` | `boolean` | `false` | Ouvrir une nouvelle page avant chaque rangée de partie sauf la première, pour que les chapitres de chaque partie soient listés sur une page à part. |
| `parts.design` | `DesignSlot` | vide | Maquette de la rangée ; son conteneur est la rangée (largeur de colonne × `height`). Variables : `{number}`, `{numberDecimal}`, `{numberRoman}`…, `{titleText}` et `{pageNumber}` (l’étiquette de la page de partie ; avec `parts.page: false`, qui n’ouvre aucune page de partie, l’étiquette de la page où commence le contenu de la partie, là où ses titres courants passent à elle ; dans un livre mis en page chapitre par chapitre, une directive qui clôt son chapitre désigne la première page de contenu du chapitre suivant). Les couleurs liées à la palette prennent la `palette` propre de la partie, si bien que la rangée de chaque section vient dans sa couleur. Quand elle est vide, `{number} {titleText}` (avec le `numberSeparator` du H1 entre les deux) et le numéro de page sont composés avec la typographie des entrées de niveau 1. |
| `parts.height`, `marginTop`, `marginBottom` | `Dimension` | `2em`, `0`, `0` | Hauteur de la rangée et espace autour. `em` est le corps du texte courant, si bien que la rangée par défaut fait deux fois le corps du texte en hauteur, et non deux lignes de texte : avec un texte courant en 9,5/13,5 pt, elle mesure 19 pt. Pour une rangée de deux lignes de texte, donnez la hauteur en `pt` (`27pt` dans ce cas). |

Les étiquettes de page sont celles que le document imprime. `buildDocument()` remet en page un document contenant un `:::toc` avec les étiquettes de la passe précédente jusqu’à ce qu’elles se stabilisent (au plus trois passes supplémentaires) ; un hôte qui met en page un livre chapitre par chapitre fournit à la place le plan du livre entier dans `PostextContent.outline`, assemblé à partir de `contentOutline()` (titres et parties tirés du seul texte) et de `outlineFromDoc()` (les mêmes entrées avec les étiquettes de page d’une mise en page), et remet en page le chapitre de la table des matières chaque fois que l’`outlineKey()` de ce plan change. Chaque entrée de titre porte le `number` qu’imprime la table et, pour un titre numéroté, son `counter` : le compte courant du niveau après un éventuel `startAt`, quoi qu’imprime le modèle, c’est-à-dire ce qu’un hôte affiche à côté d’un chapitre dans ses propres listes.

## Index

La propriété `index` configure ce qu’imprime une directive `:::index` (voir [Format du document](https://postext.dev/fr/docs/document-format.md#index-1)) : les termes marqués avec `:index[…]` et `:index{term="…"}` dans le texte, triés, regroupés par première lettre (par initiale pinyin ou par nombre de traits en chinois, par rangée du gojūon en japonais, voir `groupBy`), chacun avec les pages où il apparaît. Une entrée se compose de son terme, d’un séparateur et de ses numéros de page ; ses sous-entrées suivent, avec un cran de retrait par niveau, et les lignes suivantes d’une entrée sont décalées de `turnoverIndent` pour ne jamais s’aligner sur une sous-entrée.

```ts
const config: PostextConfig = {
  headingStyles: [
    // The index in two columns, under its own heading.
    { id: 'index', numbered: false, layout: { layoutType: 'double', gutterWidth: { value: 6, unit: 'mm' } } },
  ],
  index: {
    fontSize: { value: 8.5, unit: 'pt' },
    lineHeight: { value: 11, unit: 'pt' },
    rangeFormat: 'chicago',
    groups: { fontFamily: 'Source Sans 3', fontWeight: 700, color: { hex: '#8a1c1c', model: 'hex' } },
  },
};
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `fontFamily`, `fontSize`, `lineHeight`, `fontWeight`, `color` | — | le texte courant | Typographie des entrées. Chaque ligne de l’index, têtes de lettre comprises, est composée sur `lineHeight` ; l’index garde son propre rythme et ne s’aligne pas sur la grille de ligne de base. |
| `indent` | `Dimension` | `1em` | Retrait de chaque niveau de sous-entrée. |
| `turnoverIndent` | `Dimension` | `2em` | Retrait supplémentaire des lignes suivantes d’une entrée, au-delà de son propre niveau. |
| `entrySpacing` | `Dimension` | `0` | Espace au-dessus de chaque entrée principale. |
| `separator`, `locatorSeparator`, `rangeSeparator` | `string` | `', '`, `', '`, `'–'` ; les deux premiers valent `'، '` en écriture arabe | Ce qui s’imprime entre le terme et sa première page, entre deux pages, et entre les bornes d’un intervalle. |
| `mergeRanges` | `boolean` | `true` | Réunir en intervalle les pages consécutives d’un même format de numérotation : `12, 13, 14` imprime `12–14`. Les pages principales ne sont jamais réunies. |
| `rangeFormat` | `'full' \| 'chicago'` | `'full'` | La façon d’écrire le second nombre d’un intervalle : en entier (`234–237`) ou sans les chiffres qu’il partage avec le premier, comme le demande *The Chicago Manual of Style* (9.64) : `71–72`, `100–104`, `101–8`, `321–28`, `1496–500`. Les étiquettes en chiffres romains s’écrivent toujours en entier. |
| `main` | `{ bold?, italic? }` | gras | La façon de composer une page principale (`main` sur la marque). |
| `see` | `{ label?, alsoLabel?, italic? }` | selon la langue, italique (romain en écriture arabe) | Les mots qui précèdent un renvoi. Non définis, ils suivent la langue du document : *See* / *See also*, *Véase* / *Véase también*, *Voir* / *Voir aussi*, 见 / 另见 (見 / 另見 en chinois traditionnel)… Un index chinois place le renvoi après un point, sans espace : `贾琏 12。见贾政`. |
| `locale` | `string` | celle du document | La langue dont l’ordre alphabétique trie les entrées (une étiquette BCP 47, lue par `Intl.Collator`). En espagnol, *ñ* se trie après *n* et ouvre un groupe à part ; les accents ne changent jamais l’ordre. |
| `groupBy` | `'auto' \| 'letter' \| 'pinyin' \| 'stroke' \| 'gojuon' \| 'kana' \| 'none'` | `'auto'` | Ce que sont les têtes de groupe. `'letter'` : la première lettre de la clé de tri. `'pinyin'` : une entrée qui commence par un caractère han se range sous l’initiale latine de sa lecture pinyin (贾宝玉 sous `J`), et une clé de tri latine sous sa lettre, après les entrées chinoises de cette lettre (le collateur place les lettres latines après les caractères chinois) : `sort="jia mu"` termine le `J`. `'stroke'` : sous le nombre de traits du premier caractère, `一畫`, `二畫`… (`一画`… en chinois simplifié). `'gojuon'` : une entrée en kana se range sous sa rangée du gojūon, あ行, か行 … わ行, et `'kana'` sous son premier kana (katakana et hiragana partageant les mêmes têtes), dans l’ordre JIS X 4061 d’un index japonais : selon la lecture (`yomi` de la marque, sinon la lecture en kana de son ruby, sinon `sort`, sinon le texte), les katakana comme des hiragana, les petits kana comme des grands, ー comme la voyelle qui le précède, 清 avant 濁 avant 半濁 ; les symboles, puis les nombres par valeur, puis les mots latins sous leurs lettres, puis les kana ; une entrée encore introduite par un kanji est signalée par `indexReadingMissing` et placée après les kana, sans tête. `'none'` : aucune tête ; symboles, nombres et mots ne sont séparés que par `groups.marginTop`. `'auto'` regroupe un index japonais (`ja`, `ja-*`) par rangée du gojūon, un index en chinois simplifié (`zh`, `zh-Hans`, `zh-CN`) par pinyin, un index en chinois traditionnel (`zh-Hant`, `zh-TW`, `zh-HK`) par traits, et toutes les autres langues par lettre. Les entrées se trient selon la collation d’où viennent les têtes : un index `zh-Hant` groupé par pinyin se trie par pinyin. Les lectures et les nombres de traits sont ceux du collateur (CLDR) ; là où il lit mal un caractère (重 lu *zhòng* dans 重阳, 行 lu *xíng* dans 行业), donnez à la marque une clé `sort` en caractères qui n’ont que la lecture voulue, et l’entrée se trie à sa place : `sort="崇阳"` pour 重阳, `sort="航业"` pour 行业. Un navigateur sans données de collation chinoise imprime un index par pinyin ou par traits sans têtes. |
| `ignoreArticle` | `boolean` | `true` en arabe | Trier et grouper les entrées arabes comme si l’article initial `ال` (`ٱل`) n’était pas là : البصرة se range sous ب, entre بدر et بغداد, et s’imprime tel qu’écrit. `الله` garde son article, et une entrée dotée de sa propre clé `sort` se trie selon cette clé telle quelle. Quelle que soit cette valeur, un index arabe ignore les signes vocaliques et le tatweel, range أ إ آ ٱ sous ا, et trie ؤ comme و, ئ et ى comme ي, ة comme ه. |
| `groups.enabled` | `boolean` | `true` | Imprimer une tête au-dessus de chaque groupe d’entrées (`A`, `B`…, ou le nombre de traits, `0–9` pour les nombres, `Symbols` pour le reste ; `数字` / `數字` et `符号` / `符號` en chinois). |
| `groups.fontFamily`, `fontSize`, `fontWeight`, `italic`, `color` | — | ceux des entrées, graisse `700` | Le caractère de la tête de lettre. Elle est composée sur le pas de ligne des entrées. |
| `groups.marginTop` | `Dimension` | une ligne de l’index | Espace au-dessus de chaque groupe, avec ou sans tête ; aucun au-dessus du premier groupe, dont la distance au titre est celle que fixe le titre, ni en haut d’une colonne. |
| `groups.splitMinEntries` | `number` | `2` | Quand une colonne ou une page se termine à l’intérieur d’un groupe, le nombre minimal d’entrées du groupe laissées au pied de la colonne et le nombre minimal reportées en tête de la suivante. Avec `2`, aucune entrée ne reste seule sous sa tête au pied d’une colonne et aucune n’ouvre seule une colonne avant le groupe suivant : un groupe de deux ou trois entrées se déplace entier, et un groupe de quatre ou plus ne se divise que là où deux entrées restent et deux partent. Une entrée est un bloc d’entrée (une entrée principale ou une sous-entrée, avec la tête et les entrées sans page placées au-dessus) ; un groupe plus haut qu’une colonne est divisé là où il le faut. La coupe d’équilibrage d’une bande de clôture suit aussi la règle, si bien qu’un dernier groupe qui ne peut pas être partagé peut laisser les colonnes inégales de ses lignes. `1` permet à une colonne de se terminer entre deux entrées quelconques, comme jusqu’à postext 1.27. Depuis postext 1.28 ; les documents enregistrés auparavant qui impriment un index gardent `1` (`pinLegacyIndexGroupSplit`). |
| `groups.symbolsLabel`, `numbersLabel` | `string` | selon la langue ; `'0–9'`, `'数字'` / `'數字'` en chinois | Les têtes des entrées qui commencent par un symbole et de celles qui commencent par un chiffre. |

Les numéros de page viennent du plan du livre, comme ceux de la table des matières : `computeOutline()` et `contentOutline()` listent les marques d’index d’un texte comme des entrées de type `'indexMark'` (avec `indexMark.path`, `sort`, `see`, `seeAlso`, `main`, `range` et `index`), et `outlineFromDoc()` donne à chacune la page où elle a abouti, que la construction enregistre dans `doc.indexMarks` (`{ sourceStart, pageIndex }` par marque). `buildDocument()` remet en page un document qui imprime son propre index jusqu’à ce que les numéros se stabilisent ; un hôte qui met en page un livre chapitre par chapitre transmet au chapitre contenant `:::index` le plan du livre entier dans `PostextContent.outline`. `tocOutline()` et `indexOutline()` séparent dans un plan ce que lisent respectivement la table des matières et l’index, pour qu’un hôte puisse associer à chaque chapitre la partie du plan qu’il imprime : le Sandbox ne remet en page le chapitre de l’index que lorsqu’une marque se déplace, et celui de la table des matières que lorsqu’un titre se déplace. `contentOutline()` indique aussi si un texte imprime un index (`hasIndex`).
