# Configuration : exercices

> Les styles d’exercice (exerciseStyles) et les réglages d’exercices du livre (exercises) : pastilles de numéro, caractère de la consigne, lettres et cases des propositions, trous, réponses vrai/faux, exercices à relier, banques de mots, zones d’écriture, grilles, division posée, marques de difficulté, icônes, couleur des réponses, emplacement des solutions, livre du professeur et éditions à l’écran

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

## En bref

Cette page liste tous les réglages de l’aspect des exercices. Un style d’exercice décide comment s’imprime le numéro, comment les propositions sont désignées, à quoi ressemble un trou à compléter, quelle réglure ont les lignes où écrire et comment se dessinent les grilles et les opérations posées. Les réglages du livre décident où s’impriment les solutions et si le livre est l’édition de l’élève ou celle du professeur. Ils décident aussi comment le lecteur répond aux exercices à l’écran. La page Exercices explique comment écrire les exercices eux-mêmes.

## Styles d’exercice

La propriété `exerciseStyles` déclare les styles nommés qu’un exercice choisit avec `:::exercise{style="…"}`. Un style est la forme d’une famille d’exercices ; les questions et les réponses restent dans le Markdown (voir [Exercices](https://postext.dev/fr/docs/exercises.md)). Un style, `exercise`, est fourni par défaut : le délimiteur fonctionne donc sans aucune configuration. Déclarer `exerciseStyles` le remplace, et le premier style déclaré est celui que prend un exercice sans `style`. Tous les champs sont facultatifs, et les valeurs par défaut suivent la langue du document là où les usages scolaires diffèrent : lettres des propositions, lettres vrai/faux, disposition de la division posée, mots imprimés.

```ts
const config: PostextConfig = {
  exerciseStyles: [
    {
      id: 'activite',
      box: 'cadre-activite',
      number: { shape: 'disc', background: { hex: '#2a5ea8', model: 'hex' } },
      instruction: { fontFamily: 'Source Sans 3' },
      options: { marker: 'circle' },
      blank: { look: 'dots', width: 'answer' },
      area: { kind: 'seyes', lines: 4 },
      level: { glyph: '★', empty: '☆' },
      icons: { binome: { glyph: '👥' } },
    },
    { id: 'qcm', extends: 'activite', options: { layout: 'row', columns: 4 } },
  ],
};
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `id` | `string` | — | Identifiant choisi par `:::exercise{style="…"}`. Un identifiant inconnu se replie sur le premier style et est signalé (`exerciseUnknownStyle`). |
| `name` | `string` | `id` | Nom lisible (interface de l’éditeur seulement). |
| `extends` | `string` | — | L’identifiant du style sur lequel celui-ci se base. Chaque groupe (`number`, `options`, `blank`…) est fusionné champ par champ, `icons` identifiant par identifiant. |
| `box` | `string` | — | Un identifiant de [`calloutStyles`](https://postext.dev/fr/docs/configuration-callouts.md#styles-dencadré) pour le cadre de l’exercice : fond, bordure, bande, marge intérieure, placement, coupure. Sans lui, l’exercice est composé dans le texte courant, sans cadre, et reste entier sur une page. |
| `number` | `object` | — | L’impression du numéro. Voir [Numéro](https://postext.dev/fr/docs/configuration-exercises.md#numéro). |
| `instruction` | `object` | — | Le caractère de la consigne. Voir [Consigne](https://postext.dev/fr/docs/configuration-exercises.md#consigne). |
| `options` | `object` | — | Les propositions d’une question à choix. Voir [Propositions](https://postext.dev/fr/docs/configuration-exercises.md#propositions). |
| `blank` | `object` | — | L’impression d’un `[[…]]`. Voir [Trous](https://postext.dev/fr/docs/configuration-exercises.md#trous). |
| `trueFalse` | `object` | — | Les réponses d’une affirmation vrai/faux. Voir [Vrai ou faux](https://postext.dev/fr/docs/configuration-exercises.md#vrai-ou-faux). |
| `match` | `object` | — | Deux colonnes à relier. Voir [Relier](https://postext.dev/fr/docs/configuration-exercises.md#relier). |
| `bank` | `object` | — | La banque de mots. Voir [Banque de mots](https://postext.dev/fr/docs/configuration-exercises.md#banque-de-mots). |
| `area` | `object` | — | Les zones d’écriture. Voir [Zone d’écriture](https://postext.dev/fr/docs/configuration-exercises.md#zone-décriture). |
| `grid` | `object` | — | Les cases des mots mêlés, des mots croisés et des opérations. Voir [Grilles](https://postext.dev/fr/docs/configuration-exercises.md#grilles). |
| `arithmetic` | `object` | — | Les opérations posées. Voir [Calcul posé](https://postext.dev/fr/docs/configuration-exercises.md#calcul-posé). |
| `level` | `object` | — | Les marques de difficulté. Voir [Difficulté](https://postext.dev/fr/docs/configuration-exercises.md#difficulté). |
| `icons` | `Record<string, ExerciseIcon>` | `{}` | Les icônes d’activité par identifiant, nommées par l’attribut `icon` d’un délimiteur. Voir [Icônes](https://postext.dev/fr/docs/configuration-exercises.md#icônes). |
| `answers` | `object` | — | L’impression des réponses dans un livre du professeur, dans un item modèle et dans les solutions. Voir [Réponses](https://postext.dev/fr/docs/configuration-exercises.md#réponses). |
| `solutions` | `ExerciseSolutionsConfig` | — | Les [`exercises.solutions`](https://postext.dev/fr/docs/configuration-exercises.md#solutions) du livre pour les exercices de ce style : seuls les champs fixés ici changent. |
| `digital` | `object` | — | Les couleurs des éditions à l’écran. Voir [Couleurs à l’écran](https://postext.dev/fr/docs/configuration-exercises.md#couleurs-à-lécran). |
| `marginTop` | `Dimension` | `1em` | Espace au-dessus d’un exercice sans `box`. |
| `marginBottom` | `Dimension` | `1em` | Espace au-dessous d’un exercice sans `box`. |
| `itemSpacing` | `Dimension` | `0.25em` | Espace entre deux items : propositions, questions, affirmations, paires. |

### Numéro

`number` règle le numéro de l’exercice. Un numéro nu est en gras, dans la couleur principale, suivi d’un point ; un numéro dans une forme est un chiffre blanc dans un disque, un carré ou un carré arrondi de la couleur principale, sans rien après.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `show` | `boolean` | `true` | Imprimer le numéro. Le compte avance dans tous les cas. |
| `label` | `boolean \| string` | `false` | Un mot devant le numéro : `true` prend le mot de la langue du document (Exercice, Exercise, Ejercicio, Übung, 练习, 練習, تمرين…), une chaîne est le mot lui-même (`'Activité'`). |
| `shape` | `'none' \| 'disc' \| 'square' \| 'rounded'` | `'none'` | La forme dans laquelle le numéro est composé. |
| `color` | `ColorValue` | blanc sur une forme, sinon la couleur principale | La couleur du numéro. |
| `background` | `ColorValue` | la couleur principale | Le remplissage de la forme. |
| `fontFamily` | `string` | celle du texte environnant | La famille du numéro. |
| `fontSize` | `Dimension` | `1em` | Le corps du numéro, l’em étant celui de la consigne. |
| `fontWeight` | `number` | `700` | À partir de 600, le numéro est en gras. |
| `suffix` | `string` | `'.'`, rien sur une forme | Imprimé après un numéro nu et son mot : `'.'`, `')'`, `'、'`. |
| `template` | `string` | `'{n}'` | Ce que dit le numéro : `{n}` le compte de l’exercice, `{h1}` et `{h2}` les numéros du chapitre et de la section (`'{h1}.{n}'` imprime 3.4). |
| `resetOn` | `'never' \| 'h1' … 'h6'` | `'h1'` | Le niveau de titre qui fait repartir le compte ; `'never'` compte sur tout le livre. |
| `counter` | `string` | `'exercise'` | Le compteur que le style fait avancer. Les styles qui nomment un même compteur le partagent ; un style doté de son propre compteur (`'revision'`) numérote ses exercices à part. |
| `format` | `ResourceCounterFormat` | `'decimal'` | Les chiffres de `{n}`, comme pour un compteur de ressources : `'roman-upper'`, `'alpha-lower'`, `'simp-chinese-informal'` (一, 二), `'circled-decimal'` (①, ②), `'arabic-indic'`… |

### Consigne

`instruction` règle les paragraphes qui ouvrent l’exercice. Les champs non définis prennent la valeur du texte courant.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `bold` | `boolean` | `true` | Composer la consigne en gras. |
| `italic` | `boolean` | `false` | La composer en italique. |
| `color` | `ColorValue` | celle du texte | Sa couleur, passages en gras compris. |
| `fontFamily` | `string` | celle du texte | Sa famille : une consigne en linéale sur un texte à empattements est courante dans les manuels scolaires. |
| `fontSize` | `Dimension` | celle du texte | Son corps. |

### Propositions

`options` règle les propositions d’une question à choix (`- [ ] …`).

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `labels` | `ResourceCounterFormat \| 'none'` | selon la langue | La façon de désigner les propositions : `'alpha-lower'` (a, b, c), `'alpha-upper'` en chinois (A, B, C), `'katakana'` en japonais (ア, イ, ウ), `'abjad'` en arabe (أ, ب, ج). Aussi `'decimal'`, `'katakana-iroha'`, `'circled-decimal'`… `'none'` n’imprime aucune lettre. |
| `prefix` | `string` | `''` | Avant la lettre : `'('` pour (a). |
| `suffix` | `string` | `')'` ; `'.'` en chinois, rien en japonais | Après la lettre. |
| `marker` | `'none' \| 'box' \| 'circle'` | `'none'` | Une case ou un rond à cocher devant chaque proposition. Avec `'none'`, le lecteur entoure la lettre. |
| `layout` | `'stack' \| 'row'` | `'stack'` | `'stack'` : une proposition par ligne, ses lignes suivantes alignées sous son texte. `'row'` : les propositions côte à côte. L’attribut `columns=n` d’un délimiteur les met aussi en rangées. |
| `columns` | `number` | toutes | Propositions par rangée dans la disposition `'row'` (6 au plus). |
| `shuffle` | `boolean` | `false` | Imprimer les propositions mélangées, dans le même ordre dans toutes les sorties et dans le corrigé. |
| `indent` | `Dimension` | `1em` | Le retrait des propositions depuis le bord du texte, pour une question sans énoncé. |
| `bracket` | `boolean` | `false` | Des parenthèses `（　）` à la fin de l’énoncé de chaque question pour y écrire la lettre, comme dans les contrôles chinois et japonais. Un livre du professeur y écrit la lettre. |

### Trous

`blank` règle l’impression d’un `[[…]]` dans le texte de l’élève : un espace à la taille de la réponse, avec une ligne, des pointillés ou une case, la réponse elle-même n’étant pas peinte.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `look` | `'line' \| 'dots' \| 'box' \| 'none'` | `'line'` | Une ligne où écrire, une ligne de points, une case ou un espace vide. |
| `width` | `'answer' \| 'longest' \| Dimension` | `'longest'` | `'longest'` : tous les trous de l’exercice ont la largeur de sa plus longue réponse, et aucun trou ne trahit sa réponse. `'answer'` : chacun a la largeur de sa propre réponse. Une longueur : cette largeur pour tous. Le `{width=N}` d’un trou l’emporte. |
| `extra` | `Dimension` | `1.5em` | Espace ajouté à la largeur de la réponse, en em entiers. |
| `minWidth` | `Dimension` | `3em` | La largeur minimale d’un trou. |
| `color` | `ColorValue` | noir | La couleur de la ligne, des points ou de la case. Quand elle est définie, elle colore aussi les cases et les ronds à cocher et les cadres des mots de la banque, qui sont sinon dans la couleur principale. |
| `weight` | `Dimension` | `0.6pt` | L’épaisseur de la ligne. |

### Vrai ou faux

`trueFalse` règle les réponses en fin d’affirmation.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `labels` | `[string, string]` | selon la langue | Les deux réponses : `['V', 'F']` en français, en espagnol, en catalan, en italien et en portugais ; T F en anglais ; R F en allemand ; √ × en chinois ; ○ × en japonais ; صح خطأ en arabe. |
| `look` | `'boxes' \| 'bracket'` | `'boxes'` | `'boxes'` : chaque lettre suivie d’une case à cocher, en bout de ligne. `'bracket'` : un seul espace où écrire la réponse. |

### Relier

`match` règle un exercice de paires.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `look` | `'dots' \| 'letters'` | `'dots'` | `'dots'` : deux colonnes avec un point à côté de chaque élément, à relier par un trait. `'letters'` : la colonne de droite reçoit des lettres et chaque élément de gauche un espace pour la lettre. |
| `gap` | `Dimension` | `4em` | L’espace entre les deux colonnes. |
| `dotSize` | `Dimension` | `0.35em` | Le diamètre des points. |
| `color` | `ColorValue` | la couleur principale | Les points, et le cadre de la banque de mots. |

### Banque de mots

`bank` règle la boîte de mots d’un exercice à trous avec `bank` ou `::bank[…]`, et de tout exercice de classement. La boîte se place là où est écrite la ligne `::bank`, sinon sous la consigne.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `box` | `string` | un cadre dans la couleur de `match` | Un identifiant de `calloutStyles` pour la boîte de la banque. |
| `order` | `'shuffle' \| 'alpha' \| 'written'` | `'shuffle'` | Les mots mélangés (à partir de la graine), dans l’ordre alphabétique de la langue du document ou dans l’ordre écrit. |
| `separator` | `string` | une espace cadratin | Entre deux mots. Chaque mot est composé dans une pastille au cadre fin. |

### Zone d’écriture

`area` règle l’espace sous une question à réponse libre, sous une phrase en désordre et dans les colonnes d’un exercice de classement.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `kind` | `'lines' \| 'dots' \| 'grid' \| 'seyes' \| 'tianzige' \| 'box' \| 'none'` | `'lines'` | Des lignes, une rangée de points, du papier quadrillé, la réglure Seyès des cahiers français, des carrés 田字格, un cadre vide ou un espace blanc. L’attribut `area` d’un délimiteur l’emporte. |
| `lines` | `number` | `3` | La hauteur en lignes. L’attribut `lines` d’un délimiteur l’emporte. |
| `spacing` | `Dimension` | 1,35 fois l’interligne du texte (1,2 pour les grilles) | La distance entre deux lignes. |
| `color` | `ColorValue` | un gris clair | La couleur de la réglure. |
| `weight` | `Dimension` | `0.5pt` | L’épaisseur de la réglure. |

### Grilles

`grid` règle les cases des mots mêlés, des mots croisés et des opérations posées.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `cell` | `Dimension` | `1.6em` | Le côté d’une case. |
| `fontFamily` | `string` | celle du texte | La famille des lettres et des chiffres. |
| `fontSize` | `Dimension` | 0,58 du côté de la case | La taille des lettres et des chiffres, un em étant celui du texte. |
| `color` | `ColorValue` | celle du texte | La couleur des lettres et des chiffres. |
| `rule` | `ColorValue` | un gris moyen | Les filets des cases. |
| `ruleWidth` | `Dimension` | `0.6pt` | Leur épaisseur. |
| `blocked` | `ColorValue` | — | Le fond des cases de la grille de mots croisés qu’aucun mot n’occupe. Sans lui, la grille n’imprime que les cases de ses mots. |
| `uppercase` | `boolean` | `true` | Composer en capitales les lettres des mots mêlés et des mots croisés, selon les règles de casse de la langue du document. |

### Calcul posé

`arithmetic` règle les opérations posées.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `division` | `'bracket' \| 'potence' \| 'inline'` | selon la langue | La division posée. `'bracket'` : le diviseur à gauche du dividende, un crochet au-dessus de celui-ci, le quotient en haut (anglais, chinois, japonais, arabe, et toute langue sans usage propre). `'potence'` : le diviseur à droite du dividende sous la potence, le quotient sous le diviseur (français, espagnol, catalan, italien, portugais). `'inline'` : `864 : 4 =` avec le quotient sur la ligne et les étapes en dessous (allemand). |
| `columns` | `number` | `4` | Opérations par rangée, moins quand la colonne est trop étroite. |

### Difficulté

`level` règle les marques que l’attribut `level` d’un délimiteur imprime après le numéro, en plus petit corps.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `glyph` | `string` | `'●'` | Un niveau atteint : `'★'`, `'■'`. |
| `empty` | `string` | `'○'` | Un niveau non atteint ; `''` n’en imprime aucun. |
| `max` | `number` | `3` | Le niveau le plus haut : `level=2` avec `max: 3` imprime ●●○. |
| `color` | `ColorValue` | la couleur principale | La couleur des marques. |

### Icônes

`icons` associe un identifiant à une icône d’activité (oral, écrit, travail en binôme, écoute, calculatrice), imprimée après le numéro quand un délimiteur la nomme : `icon="binome"`.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `glyph` | `string` | — | Un caractère à imprimer : `'✎'`, `'🎧'`, un glyphe d’une police d’icônes. |
| `fontFamily` | `string` | — | La famille d’une police d’icônes. |
| `color` | `ColorValue` | — | La couleur de l’icône. |
| `resourceId` | `string` | — | Une ressource bitmap ou SVG pour l’icône. |
| `alt` | `string` | — | Ce que représente l’icône, pour les lecteurs d’écran et le PDF balisé. |
| `size` | `number` | `0.75` | La hauteur de l’icône en em de la consigne : par défaut, celle d’une capitale. |

Une icône s’imprime comme un symbole en ligne après le numéro : l’image de `resourceId` si elle en nomme une, sinon le `glyph` dans `fontFamily` et en `color` (celle du texte par défaut). Elle repose sur la ligne de base de la consigne, haute de `size` em, et son `alt` est lu à sa place.

### Réponses

`answers` règle les réponses partout où elles apparaissent : livre du professeur, item modèle d’un exercice avec `example`, ronds et cases noircies, traits entre les paires, lettres et chiffres dans les grilles.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `color` | `ColorValue` | `#d6246e`, un rouge magenta | La couleur des réponses, en surimpression comme dans un livre du professeur. |
| `fontFamily` | `string` | celle du texte | Un caractère pour les réponses : une écriture manuscrite est courante. |
| `italic` | `boolean` | `false` | Composer en italique les réponses écrites dans les trous. |

### Couleurs à l’écran

`digital` règle l’affichage d’une réponse vérifiée dans la visionneuse HTML et les livres EPUB.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `correctColor` | `ColorValue` | un vert (`#1e8e3e`) | Une bonne réponse. |
| `wrongColor` | `ColorValue` | un rouge (`#c5221f`) | Une mauvaise réponse. |

## Réglages du livre

La propriété `exercises` contient les réglages de tout le livre : l’édition, l’emplacement des solutions, la graine de tous les mélanges et les éditions à l’écran. Un livre qui ne fixe ni `exercises` ni `exerciseStyles` se met en page et se hache comme avant.

```ts
const config: PostextConfig = {
  exercises: {
    edition: 'student',
    solutions: { placement: 'chapterEnd', layout: 'key' },
    seed: 3,
    digital: { check: 'instant' },
  },
};
```

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `edition` | `'student' \| 'teacher'` | `'student'` | `'teacher'` imprime chaque réponse à sa place, dans la couleur de `answers` : un livre du professeur tiré du texte de l’élève. |
| `solutions` | `ExerciseSolutionsConfig` | — | Où et comment s’impriment les solutions. Voir [Solutions](https://postext.dev/fr/docs/configuration-exercises.md#solutions). |
| `seed` | `number` | `1` | La graine de tous les mélanges : propositions, colonnes de droite, items à ordonner, mots en désordre, banques, lettres de remplissage des mots mêlés. Changez-la pour obtenir un autre sujet d’un contrôle ; l’imprimé, l’écran et le corrigé restent d’accord. |
| `digital` | `object` | — | La visionneuse HTML et les livres EPUB. Voir [Éditions à l’écran](https://postext.dev/fr/docs/configuration-exercises.md#éditions-à-lécran). |

### Solutions

`exercises.solutions`, et le `solutions` d’un style par-dessus pour les exercices de ce style.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `placement` | `'none' \| 'after' \| 'inverted' \| 'chapterEnd' \| 'directive'` | `'none'` | `'none'` : aucune solution à l’impression. `'after'` : après chaque exercice, en plus petit corps. `'inverted'` : après chaque exercice, tête-bêche. `'chapterEnd'` : en fin de chapitre, sous `heading`. `'directive'` : là où se trouve une ligne `:::solutions`. |
| `box` | `string` | un encadré sans cadre, en plus petit corps | Un identifiant de `calloutStyles` pour l’encadré d’une solution et pour la liste des solutions d’un chapitre. |
| `heading` | `string` | le mot de la langue du document | Le titre des solutions en fin de chapitre : Corrigés, Solutions, Soluciones, Solucions, Lösungen, Soluzioni, Gabarito, 参考答案, 解答, الحلول. Une ligne `:::solutions{title="…"}` fixe le sien. |
| `layout` | `'key' \| 'full'` | `'full'` | `'key'` : les réponses seules (1 b · 2 eau). `'full'` : le corrigé, puis la `:::solution` de l’exercice. |

### Éditions à l’écran

`exercises.digital` règle le comportement des exercices dans la visionneuse HTML et dans les livres EPUB.

| Propriété | Type | Par défaut | Description |
| --- | --- | --- | --- |
| `interactive` | `boolean` | `true` | Des exercices auxquels le lecteur peut répondre. `false` les montre tels qu’imprimés. |
| `persist` | `boolean` | `true` | Conserver les réponses du lecteur dans le navigateur, livre par livre. |
| `check` | `'button' \| 'instant'` | `'button'` | `'button'` : les réponses sont vérifiées quand le lecteur le demande. `'instant'` : chaque réponse est vérifiée dès qu’elle est donnée. |

L’écran peut avoir ses propres réglages d’exercices : `htmlViewer.overrides` accepte aussi `exercises` et `exerciseStyles`, fusionnés avec ceux du livre avant la mise en page de la visionneuse HTML. L’imprimé peut ainsi garder ses solutions en fin de chapitre pendant que l’écran les cache, ou l’écran peut supprimer les zones d’écriture dont un lecteur n’a que faire.

```ts
const config: PostextConfig = {
  htmlViewer: {
    overrides: {
      exercises: { solutions: { placement: 'none' } },
      exerciseStyles: [{ id: 'exercise', area: { kind: 'none' }, blank: { minWidth: { value: 6, unit: 'em' } } }],
    },
  },
};
```
