# Configuration : pages composées

> Les gabarits des pages composées : blocs, groupes, décor, héritage et variantes recto/verso, styles d’étiquette des ancrages d’image, et avertissements qu’un gabarit peut donner

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

## En bref

Cette page présente les gabarits de page. Un gabarit est une page dessinée dans les réglages : des boîtes nommées, appelées blocs, la place de chacune, la taille qu’elle peut prendre et son apparence. Le Markdown d’une page composée remplit ensuite les blocs par leur nom, si bien que le texte ne contient jamais de positions et que les réglages ne contiennent jamais de texte. Un gabarit peut partir d’un autre et ne changer que quelques blocs, et il peut différer entre les pages de gauche et de droite. La page liste aussi les styles d’étiquette des mots posés sur les images, ainsi que chaque avertissement qu’un gabarit peut donner, avec la façon de le corriger.

## Gabarits de page

Une page composée est une page dont la forme vient d’un **gabarit** de la configuration et dont le contenu vient du Markdown d’une clôture `::::page{template="…"}`. Le gabarit nomme des rectangles, appelés **blocs** ; le Markdown envoie chaque morceau de contenu vers un bloc par son nom (son emplacement). La géométrie n’apparaît jamais dans le Markdown, et le texte du contenu n’apparaît jamais dans le gabarit. La propriété `pageTemplates` contient les gabarits du livre :

```ts
const config: PostextConfig = {
  calloutStyles: [{ id: 'caja-azul' }, { id: 'tab-titulo' }],
  pageTemplates: [
    {
      id: 'tema-cajas',
      decoration: {
        elements: [
          { kind: 'image', id: 'fondo', resourceId: '{attr.fondo}', decorative: true,
            placement: { anchor: { to: 'bleed', edge: 'top-left' }, size: { width: 'fill', height: 'fill' } } },
        ],
      },
      frames: [
        { name: 'titulo', takes: 'h1', style: 'tab-titulo' },
        { name: 'texto', flow: true },
        { name: 'dinero', style: 'caja-azul', padding: { right: { value: 62, unit: 'mm' } } },
        { name: 'dinero-fotos', layer: 2, width: { value: 60, unit: 'mm' },
          placement: { anchor: { to: '#dinero', edge: 'top-right' } } },
      ],
      groups: [
        { name: 'pagina', kind: 'stack', gap: { value: 6, unit: 'mm' }, frames: ['titulo', 'texto', 'dinero'] },
      ],
    },
  ],
};
```

Un gabarit qui ne fixe que son `id` et un bloc est une page entière dont ce bloc remplit la zone de contenu. Tous les autres champs sont facultatifs :

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `id` | `string` | obligatoire | Le nom que demande une clôture de page (`template="tema-cajas"`). Unique parmi les gabarits : un second gabarit avec le même id est ignoré. |
| `name` | `string` | l’id | Le nom affiché dans le Sandbox. La mise en page ne le lit jamais. |
| `extends` | `string` | aucun | L’id du gabarit dont celui-ci part. Voir [Héritage et variantes](https://postext.dev/fr/docs/configuration-composed-pages.md#héritage-et-variantes). |
| `area` | `'content' \| 'trim' \| 'bleed'` | `'content'` | Le rectangle auquel se rapportent les positions des blocs. `'content'` est la zone de contenu de la page, en miroir sur les pages de gauche et de droite comme le texte courant ; `'trim'` est la page rognée ; `'bleed'` la page avec son fond perdu. |
| `grid` | `{ columns, rows, columnGap?, rowGap? }` | aucune | Divise la zone en cellules, pour qu’un bloc ou un groupe se place par cellule (`grid: { col: 2, row: 1, cols: 2 }`, en comptant à partir de 1) plutôt que par `placement`. Les espacements valent `0` par défaut. |
| `frames` | `FrameConfig[]` | `[]` | Les blocs, dans l’ordre du gabarit : celui dans lequel ils sont mesurés et celui qui départage les égalités. Voir [Blocs](https://postext.dev/fr/docs/configuration-composed-pages.md#blocs). |
| `groups` | `FrameGroupConfig[]` | `[]` | Des piles et des rangées de blocs qui se partagent l’espace. Voir [Groupes](https://postext.dev/fr/docs/configuration-composed-pages.md#groupes). |
| `decoration` | `DesignSlot` | aucun | Des images, des filets et des boîtes peints avec la page, dans le langage d’éléments des [en-têtes et pieds de page](https://postext.dev/fr/docs/configuration-headers-footers.md#en-têtes-et-pieds-de-page). Les éléments de texte ne contiennent que des variables (`{pageNumber}`, `{chapterTitle}`, `{attr.x}` pour un attribut de la clôture de page). Un élément peut s’ancrer à un bloc ou à un groupe (`'#dinero'`) et se déplace alors avec lui. Le décor est posé après les blocs et ne repousse jamais le texte. |
| `header`, `footer` | `DesignSlot \| false` | hérité | Le titre courant et le folio de la page. Non définis, la page garde ceux de son chapitre ; `false` les masque. |
| `spread` | `boolean` | `false` | Le gabarit décrit deux pages en vis-à-vis posées comme une seule feuille. Une double page commence toujours sur une page de gauche dans un livre de gauche à droite (sur une page de droite dans un livre de droite à gauche), avec une page blanche ajoutée avant elle si nécessaire. |
| `gutter` | `Dimension` | `0` | Sur une double page, la bande au dos que les blocs laissent libre, sauf s’ils fixent `crossGutter: true`. |
| `variants` | `{ recto?, verso? }` | aucune | Des changements pour une page de droite (`recto`) ou de gauche (`verso`), écrits comme le gabarit lui-même. Le côté est le côté physique, si bien que les livres de gauche à droite et de droite à gauche fonctionnent tous deux. |
| `overflowTemplate` | `string` | ce gabarit | Le gabarit des pages ajoutées quand un bloc continue sur la page suivante (`overflow.continueIn: 'next-page'`). Non défini, la page ajoutée utilise ce gabarit, avec seulement les blocs continués remplis. |
| `bodyStyle` | `string` | aucun | Un style de paragraphe pour le texte de la page, comme en ont les styles de titre. |
| `palette` | `string` | aucune | Une palette de remplacement pour la page, comme en ont les styles de titre et les parties. |
| `role` | `string` | `'composed'` | Le rôle de page que voient les éléments de maquette dotés d’un filtre `pages`. |

### Blocs

Un bloc est un rectangle nommé qui reçoit du contenu composé. Son `name` est l’emplacement que demande le Markdown, et il est unique dans son gabarit (un groupe ne peut pas non plus prendre le nom d’un bloc, puisque les ancrages nomment les deux de la même façon).

Un bloc se place par sa cellule `grid` quand le gabarit a une grille, sinon par son `placement`, qui fonctionne comme celui d’un élément de maquette : un ancrage (`'container'` est la zone, `'page'`, `'bleed'`, ou `'#name'` pour un autre bloc ou groupe), un bord, un décalage et une taille. Un bloc ancré à un autre se déplace avec lui. Sans l’un ni l’autre, le bloc commence au coin supérieur gauche de la zone, sur toute sa largeur, et aussi haut que le dit sa règle de hauteur. La façon dont le contenu est versé dans les blocs, chaîné et rogné est décrite dans [Pages composées › Comment la page est composée](https://postext.dev/fr/docs/composed-pages.md#comment-la-page-est-composée).

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `name` | `string` | obligatoire | Le nom de l’emplacement. |
| `placement` | `ElementPlacement` | toute la zone | Ancrage, bord, décalage et taille, comme dans le [placement des éléments](https://postext.dev/fr/docs/configuration-headers-footers.md#placement-des-éléments). Ignoré quand une cellule de la grille place le bloc. |
| `grid` | `{ col, row, cols?, rows? }` | aucune | Une cellule de la grille du gabarit, en comptant à partir de 1, qui s’étend sur `cols` × `rows` cellules (1 par défaut). Une cellule au-delà de la grille y est ramenée. Ignoré quand le gabarit n’a pas de grille. |
| `width`, `height` | `Dimension \| { percent } \| 'auto' \| 'fill'` | `'fill'`, `'auto'` | Une longueur fixe, un pourcentage de la zone (de 0 à 100), `'auto'` (la taille propre du contenu) ou `'fill'` (ce qui reste jusqu’au bord auquel le bloc est ancré). Non défini, le bloc lit `placement.size`, puis la valeur par défaut : toute la largeur, aussi haut que son contenu. Un bloc de texte a besoin d’une justification, donc une largeur `'auto'` n’a de sens que pour un bloc qui contient une seule image (la largeur de l’image à la hauteur du bloc). Une valeur que le moteur ne peut pas utiliser (une longueur négative, une unité inconnue) est lue comme la valeur par défaut. |
| `minWidth`, `maxWidth`, `minHeight`, `maxHeight` | `Dimension` | aucune | Des limites pour une taille `'auto'` ou `'fill'` et pour l’espace qu’un groupe donne ou reprend. Le minimum l’emporte sur le maximum, et une taille fixe hors de ces limites est ramenée entre elles (`frameMinMax` signale les deux cas). |
| `style` | `string` | sans encadré | Un id de [style d’encadré](https://postext.dev/fr/docs/configuration-callouts.md#styles-dencadré) : les blocs se dessinent avec les styles d’encadré (fond, bordure, marge intérieure, bande, icône, onglet d’étiquette, titre). Les mots d’un onglet viennent du Markdown (`:::frame{slot="dinero" label="El dinero"}`). Les réglages d’encadré qui décident où va une boîte dans le texte courant (`placement`, `span`, `columns`, `width`, `fixed`…) ne s’appliquent pas à un bloc. |
| `padding` | `{ top?, right?, bottom?, left? }` | celle du style | Remplace la marge intérieure du style, côté par côté : de la place pour les photos posées sur une boîte, par exemple. |
| `layer` | `number` | `1` | L’ordre de peinture. Le décor est le calque 0 ; un calque négatif se peint en dessous. |
| `rotate` | `number` | `0` | En degrés, dans le sens des aiguilles d’une montre. La boîte et son contenu tournent ensemble. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom' \| 'justify'` | `'top'` | La position du contenu dans un bloc plus haut que lui. |
| `columns`, `columnGap` | `number`, `Dimension` | `1`, celle du style | Des colonnes à l’intérieur du bloc. |
| `exclude` | `'none' \| 'push'` | `'none'` | `'push'` : le texte des autres blocs habille le rectangle de celui-ci. |
| `flow` | `boolean` | `false` | Le bloc reçoit le contenu qui ne nomme aucun emplacement. |
| `takes` | `'h1'` … `'h6'` | aucun | Le bloc reçoit le premier titre de ce niveau qui ne nomme aucun emplacement : un titre de page s’écrit donc simplement `# Title` en haut de la clôture. |
| `next` | `string` | aucun | Un chaînage : le contenu qui ne tient pas continue dans le bloc de ce nom, sur la même page. |
| `overflow.continueIn` | `string` | aucun | Où continue le contenu qui ne tient pas : `'#frame'` (un autre bloc de la page, comme `next`), `'next-page'` (le même bloc sur une page ajoutée après celle-ci) ou `'template:<id>'` (une page de ce gabarit). |
| `overflow.mark` | `string \| false` | celle de la langue | La marque à la fin d’un morceau coupé. Non définie, le mot de suite de la langue du document (celui des tableaux coupés) ; `false` n’en met aucune. |
| `fit.shrinkText` | `boolean` | `true` | Quand rien d’autre ne fait tenir le contenu, son texte peut être composé plus petit. |
| `fit.minScale` | `number` | `0.9` | La plus petite échelle du texte, au-dessus de 0 et au plus 1 (une valeur plus grande est lue comme 1). |
| `fit.scaleImages`, `fit.imageMinScale` | `boolean`, `number` | `true`, `0.8` | Si les images du bloc peuvent être réduites, et jusqu’à quelle échelle. |
| `pin` | `boolean` | `false` | Le bloc ne bouge jamais et ne change jamais de taille, pour une boîte qui doit rester alignée sur l’illustration. Un groupe se répartit autour de lui. |
| `grow`, `shrink`, `priority` | `number` | `0` | La façon dont le bloc partage l’espace de son groupe : `grow` prend une part de l’espace libre, `shrink` permet au bloc de rendre de l’espace, et les blocs de `priority` plus basse le rendent en premier. |
| `optional` | `boolean` | `false` | Pas d’avertissement quand le Markdown n’envoie rien au bloc. |
| `crossGutter` | `boolean` | `false` | Sur une double page, le bloc peut traverser la bande du dos. |
| `writingMode`, `direction` | `'horizontal-tb' \| 'vertical-rl'`, `'ltr' \| 'rtl'` | ceux de la page | Une boîte verticale sur une page horizontale, ou l’inverse. |
| `remove` | `boolean` | `false` | Dans un gabarit qui en étend un autre, ou dans une variante : supprime le bloc hérité de ce nom. |

### Groupes

Un groupe est une pile (de haut en bas) ou une rangée (du début à la fin) de blocs qui se partagent l’espace et se déplacent ensemble. Dans un groupe, la position propre des blocs dans le sens du groupe est ignorée : le groupe les dispose dans l’ordre, avec `gap` entre eux. Quand le texte d’un bloc s’allonge, les blocs qui le suivent se décalent. Un groupe est une boîte à laquelle les blocs et le décor peuvent s’ancrer (`'#pagina'`).

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `name` | `string` | obligatoire | Unique parmi les blocs et les groupes du gabarit. |
| `kind` | `'stack' \| 'row'` | `'stack'` | De haut en bas, ou du début à la fin. |
| `frames` | `string[]` | `[]` | Les blocs du groupe, dans leur ordre sur la page. Un bloc appartient à un groupe au plus ; un nom qui n’est aucun bloc du gabarit, ou un bloc déjà listé, est sauté. |
| `gap` | `Dimension` | `0` | L’espace entre deux blocs du groupe. |
| `placement`, `grid` | comme pour les blocs | la boîte de ses blocs | La boîte propre du groupe. Non définie, la boîte qui entoure les boîtes déclarées de ses blocs. |
| `align` | `'start' \| 'center' \| 'end' \| 'space-between'` | `'start'` | Où va l’espace libre quand aucun bloc du groupe ne grandit. |
| `remove` | `boolean` | `false` | Dans un gabarit qui en étend un autre, ou dans une variante : supprime le groupe hérité. |

### Héritage et variantes

Un gabarit doté d’`extends` part du gabarit qu’il nomme (qui peut lui-même en étendre un autre) et ne change que ce qu’il écrit :

- Un champ comme `area`, `header` ou `overflowTemplate` remplace celui du parent. `grid` se fusionne clé par clé. `spread`, `gutter` et `role` sont hérités aussi ; `id`, `name` et `extends` sont propres au gabarit.
- `frames` et `groups` se fusionnent **par nom** : une entrée qui porte le nom d’une entrée héritée change les champs qu’elle écrit et garde les autres (`fit`, `overflow` et `padding` se fusionnent clé par clé ; `placement` est remplacé en entier) ; `remove: true` la supprime ; un nom nouveau s’ajoute après les entrées héritées.
- Les éléments du décor se fusionnent par `id` de la même façon ; un élément avec un id nouveau, ou sans id, s’ajoute.

`variants.recto` et `variants.verso` s’écrivent comme un gabarit et se fusionnent de la même façon, sur une page de droite ou de gauche. Elles s’appliquent après toute la chaîne d’`extends`, la variante de la racine en premier. Une double page a les deux côtés : aucune variante ne s’y applique.

```ts
pageTemplates: [
  { id: 'tema', frames: [{ name: 'texto', flow: true }, { name: 'margen', width: { value: 30, unit: 'mm' },
      placement: { anchor: { to: 'container', edge: 'top-left' } } }],
    variants: { recto: { frames: [{ name: 'margen', placement: { anchor: { to: 'container', edge: 'top-right' } } }] } } },
  { id: 'tema-sin-margen', extends: 'tema', frames: [{ name: 'margen', remove: true }] },
]
```

Une valeur égale à une valeur par défaut n’est jamais abandonnée quand le Sandbox enregistre un gabarit : dans un gabarit qui en étend un autre, ou dans une variante, elle remplace la valeur du parent.

Depuis le code, `resolvePageTemplate(config, id, { parity })` renvoie un gabarit avec sa chaîne fusionnée, la variante du côté appliquée, toutes les valeurs par défaut remplies et chaque référence réglée comme le décrivent les avertissements ci-dessous ; `validatePageTemplates(config)` renvoie les avertissements.

### Ce que la mise en page applique

La mise en page applique le placement et les tailles de chaque bloc (grille, ancrages, `min`/`max`, `verticalAlign`), son style et son `padding`, `columns`, `layer`, `rotate`, `exclude`, `flow`, `takes`, `next` et `overflow.continueIn: "#frame"`, ainsi que l’`area`, la `grid`, le `decoration`, le `header`, le `footer` et les `variants` du gabarit. Sont lus et vérifiés, mais pas encore appliqués : la négociation de l’espace dans un groupe (`grow`, `shrink`, `priority`, `pin`, et le `gap` et l’`align` d’un groupe ; ses blocs gardent leur propre placement), `fit`, `overflow.continueIn: "next-page"` et `overflowTemplate`, `spread` et `crossGutter`, le `writingMode` et la `direction` d’un bloc, et le `bodyStyle` et la `palette` du gabarit. Une largeur `'auto'` se lit comme `'fill'`.

## Styles d’étiquette

La propriété `labelStyles` nomme les apparences des étiquettes posées sur une image : les mers et les villes d’une carte, les parties d’un schéma. Une étiquette se place à un ancrage de l’image (un point enregistré avec la ressource, comme les locuteurs de la bande dessinée) et prend le style que nomme l’ancrage ou l’étiquette.

```ts
labelStyles: [
  { id: 'mar', fontStyle: 'italic', textTransform: 'uppercase', letterSpacing: 0.12,
    color: { hex: '#2b6ca3', model: 'hex' } },
  { id: 'ciudad', fontWeight: 600, halo: { color: { hex: '#ffffff', model: 'hex' }, width: { value: 0.6, unit: 'pt' } } },
]
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `id` | `string` | obligatoire | Le nom qu’utilisent les ancrages et les étiquettes. |
| `name` | `string` | l’id | Le nom affiché dans le Sandbox. |
| `paragraphStyle` | `string` | aucun | Un style de paragraphe dont l’étiquette emprunte la typographie ; les champs ci-dessous le remplacent. |
| `fontFamily`, `fontSize`, `fontWeight` | `string`, `Dimension`, `number` | ceux du texte courant | La typographie de l’étiquette. |
| `fontStyle` | `'normal' \| 'italic'` | `'normal'` | Romain ou italique. |
| `color` | `ColorValue` | couleur du texte courant | La couleur des lettres. |
| `textTransform` | `'none' \| 'uppercase'` | `'none'` | Des capitales, comme les cartes écrivent les mers et les pays. |
| `letterSpacing` | `number` | `0` | L’espace ajouté entre les lettres, en cadratins. |
| `halo` | `{ color, width }` | aucun | Un contour derrière les lettres, pour qu’elles se lisent sur une image chargée. |
| `background`, `padding` | `ColorValue`, `Dimension` | aucun | Un fond derrière l’étiquette, et l’espace autour de son texte. |
| `minScale` | `number` | `0.85` | La taille minimale à laquelle une étiquette peut être réduite quand elle ne tient pas dans sa largeur. |

### Champs d’étiquette d’un ancrage

Les ancrages d’une image (`Resource.anchors`, les points que la bande dessinée utilise pour les locuteurs) acceptent quelques champs facultatifs pour les étiquettes. Ce sont des fractions de l’image : ils restent valables dans toutes les langues et quel que soit le recadrage de l’image. La bande dessinée les ignore.

| Champ | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `width` | `number` | celle de l’étiquette | La justification de l’étiquette, en fraction de la largeur de l’image : un nom long s’y coupe sur deux lignes. |
| `align` | `'start' \| 'center' \| 'end'` | `'center'` | Le côté de l’étiquette qui se place au point d’ancrage. |
| `verticalAlign` | `'top' \| 'middle' \| 'bottom'` | `'middle'` | Le bord de l’étiquette qui se place à la hauteur de l’ancrage. |
| `rotate` | `number` | `0` | En degrés, dans le sens des aiguilles d’une montre, autour du point d’ancrage : le nom d’un fleuve le long de son cours. |
| `style` | `string` | aucun | Un id de `labelStyles`. Une étiquette qui nomme son propre style le remplace. |

## Avertissements des gabarits de page

Ailleurs, le moteur ignore une clé qu’il ne connaît pas. Les gabarits de page et les styles d’étiquette sont au contraire vérifiés, et chaque problème devient un avertissement de configuration dans `postext check` et dans le panneau Vérifications du Sandbox. Le `path` de ces avertissements est un pointeur JSON vers le champ en cause : `/pageTemplates/3/frames/2/style`, `/pageTemplates/0/variants/recto/frames/1/next`, `/resources/4/anchors/0/style`. Quand le champ a été hérité, le pointeur nomme le gabarit qui l’a écrit. Un avertissement qui nomme un id ou un nom inexistant propose aussi le plus proche qui existe.

Une clé mal orthographiée d’un gabarit, d’un bloc, d’un groupe, d’une grille, de `fit`, d’`overflow`, d’une variante ou d’un style d’étiquette est un `unknownConfigKey` ; un mot hors des choix d’un réglage (`area`, `verticalAlign`, `exclude`, `takes`, `kind`, `align`, `writingMode`, `direction`, `fontStyle`, `textTransform`) est un `unknownConfigValue`, et le réglage garde sa valeur par défaut. Un gabarit sans `id`, ou un bloc ou un groupe sans `name`, est ignoré avec un `unknownConfigValue` sur ce champ.

| Avertissement | Cause | Correction |
| --- | --- | --- |
| `templateDuplicate` | Deux gabarits ont le même `id`. Le premier est utilisé et le suivant est ignoré. | Renommer l’un des deux, ou supprimer la copie. |
| `templateExtendsCycle` | En suivant `extends`, on revient au même gabarit (`a → b → a`). Tous les gabarits de la boucle, et tous ceux qui étendent l’un d’eux, sont écartés : aucune page ne peut les utiliser. | Retirer l’`extends` d’un gabarit de la boucle. |
| `templateExtendsUnknown` | `extends` nomme un id qu’aucun gabarit n’a. Le gabarit est utilisé seul, sans rien hériter. | Corriger l’id (l’avertissement propose le plus proche), ou ajouter le gabarit parent. |
| `frameDuplicate` | Deux blocs, ou deux groupes, d’une même liste ont le même `name`, ou un groupe porte le nom d’un bloc. L’entrée suivante est ignorée ; un ancrage à ce nom lit le bloc. | Donner à chaque bloc et à chaque groupe un nom qui lui soit propre. Pour changer un bloc hérité, écrire une seule entrée avec son nom. |
| `frameStyleUnknown` | Le `style` d’un bloc ne nomme aucun style d’encadré. Le bloc est dessiné sans boîte. | Corriger l’id, ou ajouter le style à `calloutStyles`. |
| `frameAnchorUnknown` | Un bloc, un groupe ou un élément de décor est ancré à `'#name'` et le gabarit n’a aucun bloc, groupe ou élément de ce nom ; ou des blocs et des groupes sont ancrés les uns aux autres en boucle (y compris par un groupe sans ancrage propre, dont la boîte est celle de ses blocs). L’ancrage est lu comme `'container'`, la zone. | Ancrer à un bloc ou à un groupe qui existe, ou casser la boucle en ancrant l’un d’eux à la zone. |
| `frameMinMax` | Un minimum dépasse son maximum (`minHeight 40mm > maxHeight 30mm`), ou une `width` ou une `height` fixe se trouve hors des limites. Le minimum l’emporte, une taille fixe est ramenée entre les limites, et `used` indique ce que prend le bloc. Les longueurs en unités différentes se comparent à la résolution de la page, les cadratins au corps du texte courant. | Rendre le minimum inférieur ou égal au maximum, ou supprimer la limite que contredit la taille fixe. |
| `groupFrameUnknown` | Les `frames` d’un groupe listent un nom qui n’est aucun bloc du gabarit (peut-être supprimé par un gabarit enfant ou par une variante). Le groupe le saute. | Corriger le nom, ou le retirer de la liste. |
| `groupFrameTwice` | Un bloc est listé dans deux groupes, ou deux fois dans le même. Un bloc n’appartient qu’à un seul groupe : la mention suivante est sautée. | Garder le bloc dans le seul groupe avec lequel il se déplace. |
| `frameChainLoop` | Des blocs se continuent les uns dans les autres en boucle par `next` ou `overflow.continueIn: '#frame'` (`a → b → a`). Le lien qui ferme la boucle est écarté : la chaîne s’arrête au bloc qui le précède. | Terminer la chaîne à son dernier bloc : retirer son `next`, ou le faire continuer sur la page suivante. |
| `overflowTargetUnknown` | Un `next` ne nomme aucun bloc du gabarit ; un `overflow.continueIn` ne nomme aucun bloc (`'#x'`) ou aucun gabarit (`'template:x'`), ou n’a aucune des formes `'#frame'`, `'next-page'` et `'template:<id>'` ; ou `overflowTemplate` ne nomme aucun gabarit. Le contenu qui ne tient pas n’y continue pas. | Corriger le nom ou l’id, ou écrire l’une des trois formes. |
| `labelStyleUnknown` | Un ancrage d’une image nomme un `style` que `labelStyles` n’a pas. L’avertissement nomme la ressource. Les étiquettes de cet ancrage prennent l’apparence par défaut. | Corriger l’id du style sur l’ancrage, ou ajouter le style à `labelStyles`. |

La version de la configuration est 15 depuis les gabarits de page (les bundles écrits avant continuent de se charger sans changement : rien de ce que dit une configuration plus ancienne ne change de sens).
