# Mise en page de l’arabe

> Comment Postext compose l’arabe : sens d’écriture et algorithme bidirectionnel, livres reliés à droite, mots liés jamais coupés ni espacés, justification par kashida, signes vocaliques, mise en valeur, chiffres et styles de numérotation, ordinaux en toutes lettres, notes de bas de page, poésie classique, table des matières, index, citations et polices

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

## En bref

Cette page explique comment Postext met en page l’arabe. L’arabe se lit de droite à gauche : les lignes, les colonnes et les pages du livre suivent donc ce sens, tandis que les nombres et les mots anglais du texte se lisent toujours de gauche à droite. Les lettres d’un mot sont liées entre elles : Postext ne coupe donc jamais un mot, n’écarte jamais ses lettres et, pour allonger une ligne, étire certaines liaisons. La page traite aussi des signes de voyelles placés au-dessus et au-dessous des lettres, des chiffres employés dans chaque région, des notes et des poèmes. Elle se termine par deux exemples complets et les limites qui subsistent.

**Un livre arabe va de droite à gauche, de ses lettres à ses doubles pages, et ses mots sont des tracés liés que l’on ne peut pas couper.**

Postext compose l’arabe standard moderne et l’arabe classique à partir du même Markdown et de la même configuration que toute autre langue. Un seul réglage, la langue du document, retourne le livre entier : les lignes commencent à droite, la première colonne est celle de droite, le livre est relié sur le bord droit et ses doubles pages se lisent de droite à gauche, tandis que les mots latins et les nombres d’une ligne continuent de se lire de gauche à droite. Les mots sont mesurés et peints entiers, mis en forme par la police, et une ligne justifiée s’élargit à ses espaces et par l’allongement des liaisons entre les lettres (kashida), jamais en écartant les lettres. Cette page explique ce que fait le moteur et quels réglages le contrôlent. La [référence de configuration](https://postext.dev/fr/docs/configuration-text.md#sens-du-texte) liste chaque clé avec sa valeur par défaut, et le [format du document](https://postext.dev/fr/docs/document-format.md#sens-du-texte-dans-le-balisage) décrit le balisage.

Les règles suivent les *Arabic & Persian Layout Requirements* du W3C ([alreq](https://www.w3.org/TR/alreq/)) et l’algorithme bidirectionnel Unicode ([UAX #9](https://www.unicode.org/reports/tr9/)) et, pour les conventions du livre, les ouvrages imprimés au Caire, à Beyrouth et par l’imprimerie de Būlāq. Les sources sont listées à la fin.

## Commencer un livre en arabe

Réglez la langue du document et le caractère ; tout le reste de cette page en découle ou a une valeur par défaut pour l’arabe :

```ts
const config: PostextConfig = {
  locale: 'ar',
  bodyText: { fontFamily: 'Amiri', lineHeight: { value: 1.75, unit: 'em' } },
  headings: { fontFamily: 'Amiri' },
};
```

`locale` accepte `ar`, `ar-EG`, `ar-MA` ou toute autre étiquette arabe. La langue donne au livre :

- **le sens d’écriture**, de droite à gauche (`direction: 'auto'` le déduit de l’écriture de la langue) ;
- **la reliure**, sur le bord droit (`page.binding: 'auto'`) ;
- **les chiffres** des nombres générés, ٠–٩ au Machrek et 0–9 au Maghreb (`numerals: 'auto'`, voir plus bas) ;
- **aucune césure**, aucun interlettrage ni approche sur les mots arabes, et la justification par kashida ;
- **la mise en valeur en gras** au lieu de l’italique, des citations en romain ;
- **les mots intégrés** : شكل et جدول pour les figures et les tableaux, numérotés par chapitre (شكل ٢-٣), الفصل et ص dans les renvois, المراجع au-dessus de la bibliographie, انظر et انظر أيضًا dans l’index, (تابع) après la légende d’un tableau continué ;
- **l’ordre de l’index**, alphabétique (hijāʾī), sans tenir compte de l’article ال ;
- **l’étiquette de langue** dans le HTML (`lang="ar" dir="rtl"`) et dans le PDF (`/Lang`), pour que les formes linguistiques de la police s’appliquent. Le canvas et les contextes dans lesquels la mise en page mesure la reçoivent aussi, sur une page de n’importe quelle langue et dans un worker de mise en page ([`bodyText.shapingLanguage: 'document'`](https://postext.dev/fr/docs/configuration-text.md#texte-courant), la valeur par défaut depuis postext 1.30) ; avec `'host'`, que conserve un livre enregistré avant la 1.30, ils prennent la langue de la page qui héberge la mise en page.

Le Sandbox fait tout cela en une étape : choisissez العربية sous **Maquette › Système d’écriture** et cliquez sur **Valeurs par défaut pour l’arabe › Vérifier…** (voir [Dans le Sandbox](https://postext.dev/fr/docs/arabic-layout.md#dans-le-sandbox)).

## Sens d’écriture et algorithme bidirectionnel

Un paragraphe arabe va de droite à gauche, mais les nombres, les mots latins et les citations qu’il contient vont de gauche à droite. L’algorithme bidirectionnel Unicode décide de l’ordre de ces morceaux sur chaque ligne à partir des caractères eux-mêmes ; Postext l’implémente en entier (UAX #9, Unicode 18, tous les cas des tests de conformité). Le texte est stocké et recherché dans l’ordre logique, celui de la saisie ; seule la peinture est réordonnée.

### Sens du document, des blocs et du texte en ligne

Le sens se règle à trois niveaux :

- **Le document** : `direction: 'auto' | 'ltr' | 'rtl'`. `'auto'`, la valeur par défaut, vaut droite à gauche quand l’écriture de `locale` s’écrit de droite à gauche (arabe, persan, ourdou, hébreu, syriaque, thâna, n’ko, adlam…) et gauche à droite sinon. Ne le réglez que pour forcer un sens : un livre anglais n’en a pas besoin, et un livre arabe composé de gauche à droite est presque toujours une erreur.
- **Un bloc** : `{dir=ltr}` ou `{dir=rtl}` après un titre, ou sur n’importe quel conteneur `:::` : `:::paragraphs{dir=ltr}`, `:::callout{dir=ltr}`, `:::columns`, `:::part`. Tout ce que contient le conteneur prend ce sens, jusqu’à un bloc imbriqué qui en règle un autre. Les paragraphes simples, les éléments de liste et les citations n’ont pas d’attribut propre : entourez-les d’un `:::paragraphs{dir=…}`. Une ressource tableau prend `table.direction`.
- **Un fragment de texte** : `:ltr[…]` et `:rtl[…]` isolent leur texte, avec un `{lang=…}` facultatif qui étiquette le fragment dans le HTML et le PDF.

```markdown
# Introduction {dir=ltr}

:::paragraphs{dir=ltr}
An English paragraph quoted in an Arabic book, set left to right with its indent on the left.
:::

نشر الكتاب في :ltr[The Arabian Nights, vol. 2]{lang=en} سنة ١٨٣٥.
```

Un bloc composé dans le sens contraire de celui du document garde son propre côté de départ : son retrait de première ligne, ses puces et numéros de liste et la fin alignée de sa dernière ligne passent du côté où commence son texte, et ses lignes sont alignées dans la colonne comme son texte l’attend. Dans un livre arabe, une citation anglaise devrait porter `{dir=ltr}` : sans cela, son point final, un caractère neutre, appartient au paragraphe de droite à gauche et s’imprime à l’extrémité gauche de la ligne, comme un navigateur l’afficherait. Un conteneur peut aussi nommer sa langue, `:::paragraphs{dir=ltr lang=en}` : les listes numérotées qu’il contient sont numérotées dans les chiffres de cette langue (1. 2. dans un livre arabe, ١. ٢. sous `lang=ar` dans un livre anglais). Les numéros de notes, de figures, de tableaux et de titres du bloc gardent les chiffres du document : ils appartiennent aux séquences propres du livre.

### Isolats

`:ltr[…]` et `:rtl[…]` sont des isolats bidirectionnels (les LRI…PDI et RLI…PDI d’UAX #9) : leur texte est ordonné à l’intérieur, et le paragraphe voit chacun d’eux comme un seul caractère neutre. Employez-en un quand un titre latin se termine par un caractère neutre (un point, une parenthèse fermante, un point d’interrogation) qui serait sinon lu avec l’arabe qui l’entoure, ou quand un fragment commence par un chiffre ou une lettre latine qui fausserait la déduction d’un algorithme fondé sur le premier caractère fort. Une note de bas de page, un `:ref` ou une formule à l’intérieur d’un isolat en font partie. Les caractères de contrôle Unicode eux-mêmes (U+2066–2069, U+202A–202E, U+200E et U+200F, la marque de lettre arabe U+061C) sont respectés quand la source les contient, mais les directives sont plus faciles à lire et à modifier.

### Nombres

Un nombre se lit de gauche à droite dans tous les systèmes de chiffres, son chiffre de poids fort à gauche : ١٤٤٥ comme 1445. Des chiffres européens placés après des lettres arabes sont lus comme des nombres arabes (règle W2), si bien que `سنة 1835م` et `سنة ١٨٣٥م` s’ordonnent de la même façon. Un nombre qui ouvre un paragraphe, sans lettre devant lui, se lit de la même manière dans un livre de droite à gauche écrit en alphabet arabe : le numéro de section `3-1` d’un titre et la légende `شكل 3-1` d’une édition maghrébine impriment tous deux le 3 à droite, comme le fait `٣-١`. Deux nombres reliés par une barre oblique, comme un volume et une page ou une sourate et un verset (`١٣/٩٠`), restent un seul fragment ; un intervalle écrit avec un trait d’union (`١٢-١٥`) se lit de droite à gauche, 12 à droite, comme l’attendent les lecteurs arabes. Le signe pour cent ٪ (U+066A) se saisit après le nombre et s’affiche à sa gauche. Le texte que saisit l’auteur n’est jamais réécrit : seuls les nombres générés par le moteur prennent les chiffres du document ([Chiffres](https://postext.dev/fr/docs/arabic-layout.md#chiffres-et-styles-de-numérotation)).

### Parenthèses, crochets et guillemets

Les parenthèses, crochets, accolades et guillemets sont mis en miroir dans les fragments de droite à gauche : une `(` saisie devant un mot arabe l’ouvre sur sa droite. Saisissez-les dans l’ordre logique, l’ouvrant d’abord, comme en français ; le canvas, le HTML et le PDF dessinent le glyphe en miroir (la fonctionnalité `rtlm` de la police, ou le point de code en miroir). « » ouvrent et ferment une citation arabe de la même façon. Le texte derrière les glyphes reste celui que vous avez saisi. Une parenthèse en miroir est dessinée avec le glyphe de la parenthèse opposée, et le PDF marque chaque parenthèse dont la police lit déjà le glyphe comme l’autre, si bien que `(Brill, 2017)` dans une note numérotée `(١)` est copié, recherché et lu à voix haute avec les deux parenthèses telles qu’elles ont été écrites.

Les parenthèses ornées des citations coraniques, ﴿ (U+FD3F) et ﴾ (U+FD3E), ne sont pas mises en miroir : depuis Unicode 14, ﴿ est l’ouvrante et ﴾ la fermante, et leurs glyphes sont dessinés pour un texte de droite à gauche. Saisissez ﴿ en premier : `﴿بسم الله الرحمن الرحيم﴾` s’imprime avec ﴿ à droite. Ce ne sont pas non plus des parenthèses appariées : dans un paragraphe de gauche à droite (un verset arabe cité dans un livre anglais), les parenthèses voisines d’un mot latin prennent le sens du paragraphe ; ﴿ se retrouve à gauche du verset et la paire se lit à l’envers, comme dans un navigateur. Composez la citation comme un isolat de droite à gauche, `:rtl[﴿بسم الله الرحمن الرحيم﴾]`, et les deux parenthèses suivent le verset, ﴿ à sa droite.

### Mots sans lettre

Un mot fait uniquement de chiffres, de ponctuation ou de symboles (`46.`, `1367)`, `».`) n’a pas d’écriture propre, et un caractère peut dessiner ses signes selon l’écriture. Amiri compose un point, des parenthèses et des guillemets latins dans un texte latin et arabes ailleurs : son point mesure 0,20 em de large contre 0,32, une parenthèse 0,26 contre 0,46. Face à un tel mot isolé, chaque moteur de mise en forme choisit une écriture selon sa propre règle : une version de Chrome prend les formes par défaut de la police, une version ultérieure les formes latines, le PDF celles par défaut. Une même note coupait alors ses lignes différemment d’un navigateur à l’autre, et son PDF posait aux endroits mesurés des signes d’une autre largeur.

Postext décide à leur place (`bodyText.scriptContext`, activé par défaut). Un tel mot prend l’écriture du texte qui l’entoure :

- peint de gauche à droite, l’écriture de la lettre la plus proche avant lui dans son isolat, sinon de la plus proche après lui : `46.` à la fin d’une note anglaise est latin, le `1367` de `(1367)` dans une phrase arabe est arabe ;
- peint de droite à gauche (une parenthèse ou un point à un niveau de droite à gauche), l’écriture de la lettre de droite à gauche la plus proche : les parenthèses de `(1367)` dans une phrase arabe restent arabes ;
- sans lettre à proximité (un paragraphe ou un isolat fait seulement de nombres), l’écriture de la langue du document.

La mise en page mesure le mot dans cette écriture, et le canvas, le HTML, l’EPUB à mise en page fixe et le PDF peignent ces formes à cette largeur, de la même façon dans tous les navigateurs. Une note latine, une citation ou une entrée de bibliographie dans un livre arabe n’a besoin d’aucune espace insécable pour garder `46.` ou `(d. 1367)` dans leurs formes latines : écrivez-les avec des espaces ordinaires. Un mot mis en forme dans l’écriture arabe ne reçoit aucun interlettrage, comme les mots arabes qui l’entourent.

Un mot qui contient une lettre forme un seul fragment d’écriture, tout comme les morceaux dans lesquels il est peint. Un DOI ou une adresse web peut finir une ligne à chacune de ses jointures, et un mot plus large que sa ligne est coupé là où la ligne se termine ; un morceau resté sans lettre (`10.1006/` et `.2001` de `10.1006/ijhc.2001.0458`) prend l’écriture qu’il a à l’intérieur de son mot : celle de la lettre qui le précède, sinon celle de la première lettre du mot. Il est mesuré et peint dans cette écriture, si bien que l’adresse se compose d’un seul tenant dans un caractère dont les chiffres changent avec l’écriture (Noto Serif SC les dessine larges de 0,55 em dans un texte latin et de 0,47 em ailleurs).

Dans un document chinois ou japonais (`locale` `zh` ou `ja`), des points de suspension ou un tiret doublés (`……`, `——`, `――`) sont le signe propre du document partout où ils sont cités. Un mot sans lettre qui en contient un, comme `…….` à la fin d’une phrase anglaise du colophon, compose la paire dans les formes du texte han (six points centrés, un tiret long de deux cadratins) et ce qui l’accompagne, le point ou un guillemet, dans l’écriture de la phrase. Il n’a besoin ni de `:ltr[…]` ni d’un fragment d’un autre style.

La règle s’applique dans les contextes latin, grec, cyrillique, arabe et hébreu, et seulement avec un caractère dont la ponctuation ou les chiffres changent avec l’écriture ; tout autre caractère est mis en page comme avant. Elle couvre le texte courant, les titres, les listes, les légendes, les notes, les cellules de tableau et la ligne de points d’une entrée de table des matières. Un mot de droite à gauche est mesuré tel qu’il est peint, si bien qu’une parenthèse ou un point à son bord prend sa largeur dans tous les navigateurs. Une configuration enregistrée par postext 1.27 ou antérieur est lue avec `scriptContext: false` et garde les formes que lui donnait son navigateur. Voir [`bodyText.scriptContext`](https://postext.dev/fr/docs/configuration-text.md#texte-courant).

## Ordre des pages et reliure à droite

Un livre arabe est relié sur son bord droit. Sa première page est une page de gauche, ses doubles pages se lisent de la page de droite vers celle de gauche, et ses colonnes se remplissent de droite à gauche. Postext met une telle page en page comme une page de gauche à droite vue dans un miroir : tout ce qui suit le flux du texte (colonnes, lignes, retraits, puces et numéros de liste, flottants, notes, encadrés, tableaux) est placé par le même code que dans un livre anglais, puis la page est mise en miroir d’un bloc, chaque mot, image et formule étant peint dans le bon sens.

> **Figure: Une double page arabe, reliée à droite**
> Une double page de deux pages qui se rejoignent au dos. La page 2 est à droite, la page 3 à gauche. Sur chaque page, la première colonne est celle de droite et les lignes vont de droite à gauche ; la marge intérieure est contre le dos et la marge extérieure du côté de la tranche. Une flèche montre l’ordre de lecture de la page 2 à la page 3.
>
> *Page 2 à droite, page 3 à gauche ; colonne 1 à droite de chaque page.*

- **Reliure.** `page.binding: 'auto'` correspond au bord droit pour un document de droite à gauche. La page 1 reste impaire et reste le recto, si bien que `breakBefore.parity`, `:::pagebreak{parity="odd"}` et le nombre de pages gardent leur sens ; le recto est la page de gauche de la double page, et un chapitre qui s’ouvre sur un recto s’ouvre sur une page de gauche. Avec `margins.mirror`, la marge intérieure des pages impaires est à leur droite. Le PDF demande aux visionneuses des doubles pages de droite à gauche (`/Direction /R2L`, `/PageLayout /TwoPageRight`), le Sandbox affiche les doubles pages sous la forme 3 | 2 et sa visionneuse HTML fait défiler les pages de droite à gauche. Voir [Reliure](https://postext.dev/fr/docs/configuration-page-layout.md#reliure).
- **Colonnes.** Dans une page à deux colonnes, la première colonne est celle de droite ; un filet de colonne, une colonne latérale et la gouttière suivent. Un flottant en haut de page s’étend depuis la droite, les notes de bas de page se placent au pied de chaque colonne avec leur filet de séparation à droite.
- **Les titres courants et les folios** restent sur la feuille : les emplacements d’en-tête et de pied de page sont physiques, et leurs `left` et `right` sont les côtés de la feuille, comme dans tout livre. Réglez-les pour le bord droit : le titre du chapitre sur la page de gauche (impaire), le titre du livre sur la page de droite (paire), le folio dans l’angle extérieur (à gauche des pages impaires) ou centré, comme le font la plupart des livres arabes.

### Ce que signifient left, right, start et end

Un réglage qui nomme un côté désigne un côté du texte, et non de la feuille, si bien qu’une maquette conçue pour un livre anglais fonctionne sans modification quand le livre passe à l’arabe. `start` et `end` sont acceptés partout comme noms explicites du début et de la fin du texte.

| Réglage | `left` / `right` | `start` / `end` |
| --- | --- | --- |
| Alignement du texte : `bodyText.textAlign`, titres, styles de paragraphe et de partie, notes de bas de page, `align` des légendes, corps des encadrés | Les côtés du texte : `left` est le côté où commence une ligne, la droite d’un paragraphe arabe. La dernière ligne d’un paragraphe justifié s’y place. | Synonymes de `left` et `right`. |
| Cellules de tableau (`TableCell.align`) | Les côtés du texte de la cellule, lus dans le sens du tableau (`table.direction`). | Synonymes, lus dans le sens du tableau. |
| `placement.align` d’un flottant ou d’une figure étroite | Les côtés du flux principal : dans un livre arabe, `left` est la droite de la feuille. | Synonymes de `left` et `right`. |
| `placement.wrap` d’une image ou d’un encadré que le texte contourne | Les côtés du flux principal, comme pour `align` : dans un livre arabe, `left` le place à droite de la feuille, le texte à sa gauche. | Synonymes de `left` et `right`. |
| `stripe.side`, `icon.cornerSide` d’un encadré, `position` de l’étiquette | Les côtés du flux principal, les mêmes pour tous les encadrés de la page. | Le sens propre de l’encadré : le début d’un `:::callout{dir=ltr}` dans un livre arabe est la gauche de la feuille. |
| Emplacements d’en-tête et de pied de page, éléments de design sur la feuille | Les côtés de la feuille. | Éléments de texte seulement : le début et la fin du sens propre de l’élément. |

Les éléments de design placés dans le flux, comme le bandeau d’une ouverture de chapitre ou le design d’un titre, sont mis en miroir avec lui : leurs `left` et `right` sont ses côtés de début et de fin, comme dans le texte courant. Un élément de texte accepte `direction: 'ltr' | 'rtl' | 'auto'` (le sens du document par défaut ; `'auto'` lit la première lettre forte de son texte), et ses `align: 'start'` et `'end'` le suivent. `placement.rotate` garde son sens physique : une figure tournée dans le sens horaire est tournée dans le sens horaire sur la feuille.

## Mise en forme et mots entiers

Les lettres d’un mot arabe sont liées, et chacune prend la forme que demandent ses voisines : initiale, médiane, finale ou isolée, avec des ligatures comme lām-alif. Postext mesure et peint un mot comme une seule chaîne mise en forme, jamais lettre par lettre. Le canvas et le HTML laissent la mise en forme au navigateur ; le PDF met en forme avec HarfBuzz, chargé seulement quand un document contient de l’arabe ou une autre écriture qui en a besoin, et rattache chaque glyphe à ses caractères, si bien que le texte copié depuis le PDF et lu par un lecteur d’écran est le texte saisi. Quand HarfBuzz ne peut pas être chargé, le PDF est tout de même écrit, avec des signes mal placés, et `renderToPdf` signale un avertissement `complexShapingUnavailable` ; son option `harfbuzzWasm` indique le fichier quand un hôte le sert depuis un emplacement qui lui est propre.

Trois règles découlent des liaisons, et valent pour tout mot qui contient une lettre de l’alphabet arabe, dans un livre arabe ou cité dans un livre anglais :

- **Aucune césure.** L’arabe ne se divise pas en fin de ligne, et la césure est désactivée dans un document en alphabet arabe. L’activer avec une langue de motifs latine (`hyphenation: { enabled: true, locale: 'en-us' }`) coupe les mots latins du livre et laisse les mots arabes entiers.
- **Aucun interlettrage.** Écarter des lettres liées rompt les liaisons. Le `letterSpacing` d’un style et l’approche de la justification ignorent les mots arabes ; la génération signale un style de texte courant ou de titre qui applique un interlettrage à du texte arabe (`joiningScriptLetterSpacing`).
- **Aucune coupure.** Un mot plus large que la ligne n’est jamais coupé entre ses lettres. Il déborde de la justification, la ligne est marquée (`VDTLine.wordOverflow`) et la génération le signale (`unbreakableWordOverflow`). Cela arrive dans les cellules de tableau étroites et les colonnes latérales ; élargissez-les ou réécrivez le texte.

Un changement de style à l’intérieur d’un mot, comme une lettre colorée ou un signe vocalique en gras (`كتا**ب**`), ne coupe pas le mot en deux : il est mesuré et mis en forme entier, et la partie stylée est peinte par-dessus. Le PDF et le HTML colorent exactement les bonnes lettres ; le canvas estime où tombe la lettre dans le mot mis en forme, et une couleur peut déborder d’un cheveu sur sa voisine. Un texte de design ne coupe jamais un mot arabe lorsqu’il passe à la ligne ou se tronque, et une lettrine, dans un texte de design ou en tête de paragraphe, n’est pas dessinée quand la première lettre se lie à la suivante : un tel paragraphe déclenche un avertissement `dropCap` (voir [Lettrines](https://postext.dev/fr/docs/configuration-text.md#lettrines)). Une lettre qui ne se lie pas à la suivante (ا, د, ر, و) et une lettre hébraïque sont composées en lettrine à droite, les lignes étant raccourcies de ce côté.

## Justification et kashida

Les livres arabes sont justifiés. Une ligne ne s’élargit pas en espaçant ses lettres ; elle s’élargit à ses espaces entre les mots et par la kashida, les liaisons allongées qu’un calligraphe trace entre deux lettres liées (كتاب → كتـاب). Postext insère les kashidas sous forme de tatweels entiers (U+0640, ـ), que la police dessine d’un seul trait ; Amiri transforme une suite de tatweels en une liaison courbe.

`bodyText.kashida` vaut `'auto'` dans un document en alphabet arabe et `'none'` dans tout autre. Chaque ligne justifiée, sauf la dernière d’un paragraphe, ouvre d’abord ses espaces entre les mots jusqu’au quart de leur largeur, puis comble le reste de son jeu par des kashidas, un tatweel à la fois, aux meilleures liaisons d’abord ; le reste, inférieur à un tatweel, retourne aux espaces. Knuth–Plass compte l’allongement possible de chaque mot comme de l’étirement, et choisit donc les coupures en sachant qu’une ligne de mots arabes peut s’élargir à cet endroit. Les mots latins, les chiffres, les titres, les lignes en drapeau et la dernière ligne d’un paragraphe ne reçoivent jamais de kashida.

L’emplacement d’une kashida suit les règles de [raqim-kashida](https://github.com/aliftype/raqim-kashida) : seulement entre deux lettres liées, jamais après une lettre qui ne se lie pas à la suivante (ا د ذ ر ز و ة), jamais à la fin d’un mot, jamais à l’intérieur de lām-alif. `kashidaPatterns` choisit le jeu de règles : `'naskh'` pour les règles classiques du naskh, `'simple'` pour les priorités des caractères modernes simples, `'nastaliq'` pour le nastaʿlīq, et `'auto'` lit le caractère du texte courant (aucune kashida dans un caractère ruqʿa comme Aref Ruqaa, dont le style l’interdit). `kashidaPerWord` (1 par défaut) et `kashidaMaxLength` (0,6 em) limitent l’allongement d’un mot ; un mot qui contient un tatweel saisi par l’auteur s’allonge à cet endroit. Les tatweels insérés sont peints mais exclus du texte brut, de la correspondance avec la source et du texte copié depuis le PDF. [La kashida dans le texte arabe](https://postext.dev/fr/docs/justification.md#la-kashida-dans-le-texte-arabe) détaille les jeux de règles.

```ts
bodyText: {
  textAlign: 'justify',
  kashida: 'auto',          // the default in an Arabic book
  kashidaPatterns: 'naskh', // 'auto' reads it from the face
}
```

## Signes vocaliques

Les signes vocaliques (ḥarakāt : fatḥa, ḍamma, kasra, sukūn, shadda, tanwīn, l’alif suscrit) et les signes coraniques s’empilent au-dessus et au-dessous des lettres, dans l’interlignage. La prose moderne marque une shadda ou une voyelle ici et là ; une édition classique vocalise entièrement ses vers et légèrement sa prose ; le Coran est toujours entièrement vocalisé. L’interlignage n’augmente jamais de lui-même pour les signes : choisissez-le donc pour le texte le plus vocalisé du livre :

| Texte | `lineHeight` |
| --- | --- |
| Prose moderne non vocalisée | 1,55–1,7 em |
| Prose partiellement vocalisée | 1,7–1,85 em |
| Vers entièrement vocalisés, le Coran | 1,9–2,1 em |

Chaque ligne qui contient des signes enregistre jusqu’où leur encre monte au-dessus et descend au-dessous de la ligne de base (`VDTLine.markInk`), et le masque de colonne du canvas et du PDF englobe les signes de la première et de la dernière ligne d’une colonne. Quand un signe au-dessus d’un mot rencontre les lettres ou les signes qui pendent sous le mot du dessus, la génération signale le paragraphe (`arabicMarksExceedLeading`, dans le panneau Vérifications du Sandbox) avec l’interlignage qu’il lui faudrait. Seuls les mots superposés sont comparés, si bien qu’un mot vocalisé sous un mot court passe. Donnez aux passages vocalisés, aux vers en particulier, un style de paragraphe avec plus d’interlignage.

`bodyText.tashkil` retire des signes du texte que compose la mise en page, pour une édition non vocalisée tirée d’une source vocalisée : `'strip'` retire les voyelles, le tanwīn, le sukūn, la shadda, l’alif suscrit (هٰذا se compose هذا) et les signes coraniques ; `'strip-vowels'` garde la shadda, comme l’impriment la plupart des livres modernes. La hamza et la madda restent : أ إ آ sont des lettres. La source garde ses signes ; les paragraphes, les titres et la table des matières sont composés sans eux.

## Mise en valeur

Les caractères arabes n’ont pas d’italique, et un caractère arabe penché est une déformation. Dans un document en alphabet arabe, `*…*` se compose en gras par défaut (`bodyText.emphasis: 'auto'`) ; `'color'` le compose en romain dans la couleur `italicColor`, et `'overline'` trace un filet au-dessus des mots, le surlignement des livres arabes anciens. Quel que soit le choix, le moteur ne penche jamais les lettres arabes : dans un fragment composé en italique, les mots arabes restent droits et les mots latins gardent leur italique, si bien que `*Kitāb al-ʿIbar كتاب العبر*` imprime la translittération en italique et le titre arabe en romain. Les citations sont en romain par défaut dans un livre arabe ; un style dont le caractère est lui-même italique (`blockquote.italic: true`, un niveau de titre composé en italique) compose aussi ses mots arabes droits, dans son caractère sans l’inclinaison, et ses mots latins en italique. Les légendes, les cellules de tableau, la table des matières et l’index gardent leurs propres réglages d’italique.

```ts
bodyText: { emphasis: 'overline', italicColor: { hex: '#8a1c1c', model: 'hex' } }
```

## Chiffres et styles de numérotation

L’arabe s’écrit avec trois jeux de chiffres, choisis selon la région :

| Région | Chiffres | `numerals` |
| --- | --- | --- |
| Le Machrek : Égypte, Soudan, Levant, Irak, péninsule Arabique (`ar`, `ar-EG`, `ar-SA`…) | ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ (arabes orientaux) | `'arab'` |
| Le Maghreb : Maroc, Algérie, Tunisie, Libye, Mauritanie (`ar-MA`, `ar-DZ`, `ar-TN`…) | 0 1 2 3 4 5 6 7 8 9 (européens) | `'latn'` |
| Persan, pachto, ourdou de l’Inde (`fa`, `ps`, `ur-IN`) | ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ (formes persanes) | `'arabext'` |

La clé de premier niveau `numerals` règle les chiffres de tous les nombres qu’écrit le moteur : folios et numéros de page de la table des matières et de l’index, numéros de liste et de note, compteurs de titres et de chapitres, numéros de figures et renvois vers elles, `{totalPages}`. `'auto'` prend les chiffres de la région dans `locale` (`ar` sans région, et `ar-AE`, sont machrékins, comme les impriment les livres arabes de ces pays) ; une étiquette peut nommer les siens (`ar-MA-u-nu-arab`). Les nombres saisis par l’auteur ne sont jamais modifiés et sont lus dans n’importe quel système : un élément de liste `٣.` commence à 3, et `{startAt=٥}` vaut 5. Voir [Chiffres du document](https://postext.dev/fr/docs/configuration-text.md#chiffres-du-document).

Un format nommé dans la configuration s’imprime tel qu’il est nommé, si bien qu’un livre peut mélanger les systèmes. Les styles de numérotation arabes :

| Style | 1, 2, 3 … 11, 1446 | Nom |
| --- | --- | --- |
| Chiffres arabes orientaux | ١، ٢، ٣ … ١١، ١٤٤٦ | `arabic-indic`, `١` |
| Chiffres persans | ۱، ۲، ۳ … ۱۱، ۱۴۴۶ | `persian`, `۱` |
| Numération abjad (additive, valeurs machrékines) | ا، ب، ج … يا، غتمو | `arabic-abjad` |
| Numération abjad, valeurs maghrébines | ا، ب، ج … يا (ص 60، ش 1000) | `arabic-abjad-maghrebi` |
| Lettres dans l’ordre abjad | أ، ب، ج، د، هـ، و … | `abjad`, `أبجد` |
| Lettres dans l’ordre alphabétique (hijāʾī) | أ، ب، ت، ث، ج … | `hijai`, `أبتث` |

La numération abjad additionne les valeurs de ses lettres, la plus élevée d’abord, comme comptent les manuscrits et les chronogrammes : 11 s’écrit يا, 1446 غتمو, 2000 بغ et 1002 غب. Les deux styles par lettres numérotent les éléments de liste et les pages liminaires à raison d’une lettre par élément ; tous deux écrivent la première lettre avec sa hamza (أ) et un hā’ isolé sous la forme هـ, si bien qu’aucun n’est lu comme les chiffres ١ et ٥. Une édition classique foliote ses pages liminaires dans l’ordre abjad et commence les chiffres au texte :

```markdown
:::numbering{format="abjad" startAt=1}

# المقدمة {style="front-matter"}

…

:::pagebreak{parity="odd"}
:::numbering{format="decimal" startAt=1}
```

Les listes numérotées suivent les mêmes noms. Une hiérarchie arabe courante est ١- , puis أ- , puis (١) :

```ts
orderedLists: {
  levels: [
    { level: 1, numberFormat: 'arabic', separator: '-' },
    { level: 2, numberFormat: 'abjad', separator: '-' },
    { level: 3, numberFormat: 'arabic', prefix: '(', separator: ')' },
  ],
},
```

`arabic` est le format décimal, écrit dans les chiffres du document.

### Ordinaux et cardinaux en toutes lettres

`{1:ordinal}` dans un modèle de titre écrit l’ordinal défini en toutes lettres arabes, et `{1:words}` le cardinal. Les ordinaux arabes s’accordent avec le nom qu’ils numérotent : le modèle prend donc le genre après un trait d’union, `-feminine` (ou `-f`) pour un nom féminin comme الليلة, le masculin par défaut pour الفصل ou الباب. `-classical` écrit مائة au lieu de مئة, comme les impressions de Būlāq. Une nuit n’a pas de titre propre : `numberPosition: 'replace'` imprime le numéro comme titre entier, si bien que `# Night` (ou tout titre écrit dans la source) s’imprime الليلة الثانية, et la table des matières, les titres courants et les signets du PDF lisent la même chose.

```ts
headings: {
  levels: [{ level: 1, numberingTemplate: 'الليلة {1:ordinal-feminine}', numberPosition: 'replace' }],
},
```

Cela imprime الليلة الأولى, الليلة الحادية عشرة, الليلة الخامسة والأربعون بعد الثلاثمئة et, à 1001, الليلة الحادية بعد الألف ; `'الفصل {1:ordinal}'` imprime الفصل الأول, الفصل الحادي عشر. Les ordinaux s’écrivent jusqu’à 9 999 et les cardinaux jusqu’à 99 999 ; au-delà, le nombre s’imprime en chiffres. Les variables de design `{numberWords}` et `{numberOrdinalWords}` donnent les formes masculines. Voir [Nombres en toutes lettres](https://postext.dev/fr/docs/configuration-text.md#numéros-en-toutes-lettres).

## Notes de bas de page

Un livre arabe marque ses notes par le numéro entre parenthèses, « (١) », surélevé dans le texte et sur la ligne en tête de la note, et la plupart des éditions classiques les renumérotent à chaque page. Le filet de séparation et les numéros de note se placent d’eux-mêmes du côté du début, à droite.

```ts
footnotes: {
  markerTemplate: '({n})',      // «(١)» in the text and in the note
  numbering: 'page',            // ١ again on every page
  noteNumberPosition: 'inline', // the note's own number on the line
}
```

`markerTemplate` écrit à la fois l’appel dans le texte et le numéro qui ouvre la note, dans les chiffres du document. Le numéro d’une note dépend de la page où elle tombe : un livre numéroté par page est donc mis en page, numéroté là où ses notes sont tombées, puis mis en page à nouveau. Placez l’appel avant un signe de ponctuation qui suit, comme le font les livres arabes : le `[^id]` se met juste après le mot, avant la virgule ou le point. Voir [Notes de bas de page](https://postext.dev/fr/docs/configuration-notes-references.md#notes-de-bas-de-page).

## Poésie classique

Un poème arabe classique (qaṣīda, qiṭʿa) se compose à raison d’un vers, le *bayt*, par ligne, en deux moitiés : le premier hémistiche, le *ṣadr*, à droite, le second, le *ʿajuz*, à gauche, avec un blanc entre eux. Tous les hémistiches du poème sont portés à une même largeur, si bien que chaque ṣadr commence sur la même verticale et chaque ʿajuz finit sur une autre, et les lettres de la rime s’alignent tout au long du poème.

> **Figure: Un bayt en deux hémistiches**
> Trois vers d’un poème. Chaque ligne a une première moitié à droite et une seconde moitié à gauche, séparées par un blanc. Toutes les moitiés ont la même largeur w : les moitiés de droite commencent sur une même verticale et celles de gauche finissent sur une autre, où s’alignent les lettres de la rime.
>
> *Chaque hémistiche est composé à la largeur commune w ; les lettres de la rime s’alignent à gauche.*

Écrivez le poème dans un bloc `:::verse`, un bayt par ligne, ses hémistiches séparés par `||` (un `\\` entouré d’une espace de chaque côté, comme dans les transcriptions de Wikisource, fonctionne aussi). Une ligne sans séparateur est un hémistiche seul, centré sur le poème.

```markdown
فأنشد يقول:

:::verse{style="verse"}
يَا حُرْقَةَ الدَّهْرِ كُفِّي || إِنْ لَمْ تَكُفِّي فَعِفِّي
فَلَا بِحَظِّيَ أُعْطِي || وَلَا بِصَنْعَةِ كَفِّي
:::
```

- **La largeur commune** est celle de l’hémistiche le plus large, au plus la moitié de la justification moins le blanc ; `width` la fixe. Chaque hémistiche l’atteint d’abord par des kashidas, que les vers acceptent plus librement que la prose, puis par ses espaces entre les mots.
- **Le blanc** mesure 2 em par défaut (`gap`) ; `ornament` imprime un signe en son milieu, comme ٭.
- **Un hémistiche trop long** resserre d’abord ses espaces ; s’il ne tient toujours pas, son bayt est composé en décalé : le ṣadr aligné à droite sur sa propre ligne, le ʿajuz aligné à gauche sur la suivante.
- **Garder ensemble.** Un bayt n’est jamais partagé entre deux colonnes ou deux pages, un poème suit les règles d’orphelines et de veuves des paragraphes, et la ligne qui l’introduit (« فأنشد يقول: ») reste avec ses premiers bayts.
- **Caractère.** Le poème prend le caractère et le corps du texte courant ; `style` nomme un style de paragraphe, et c’est ainsi qu’un poème vocalisé reçoit l’interlignage dont ses signes ont besoin. Un poème en translittération latine dans un livre anglais se compose de la même façon, son ṣadr à gauche.
- **Numéros de ligne.** Avec `lineNumbers` activé, un poème compte un numéro par bayt, imprimé dans la marge à côté de lui ; le ʿajuz d’un bayt décalé, sur sa propre ligne, ne reçoit pas de numéro. `position: 'start'` place les numéros à droite de chaque page d’un livre arabe. Voir [Configuration › Numéros de ligne](https://postext.dev/fr/docs/configuration-notes-references.md#numéros-de-ligne).

Le texte brut garde le poème tel qu’il est écrit, un bayt par ligne, sans les kashidas ni l’ornement. Voir [`:::verse`](https://postext.dev/fr/docs/document-format.md#verse) dans le format du document.

**Vers libres et poèmes latins.** Un poème dont les lignes ne portent pas de `||` (des vers libres modernes, ou un poème latin cité dans un livre arabe, `:::verse{dir=ltr lang=en}`) se compose plutôt ligne par ligne : chaque ligne de la source donne un vers, des lignes vides entre les strophes, des espaces en début de ligne pour un retrait mesuré depuis le côté de début propre au poème, et les lignes trop longues renvoyées à la ligne avec un retrait suspendu. Voir [`:::verse` › Ligne par ligne](https://postext.dev/fr/docs/document-format.md#vers-par-vers).

## Table des matières et index

**Table des matières.** Beaucoup de livres arabes, les éditions classiques surtout, impriment leur table des matières (فهرس ou فهرس المحتويات) à la fin. `:::toc` imprime la table des matières là où il se trouve : placez-le donc dans le dernier chapitre, sous un titre qui en est exclu :

```markdown
# فهرس المحتويات {toc="false"}

:::toc
```

Une ligne de la table des matières se compose de droite à gauche : le numéro et le titre à droite, les points de conduite, le numéro de page à gauche. Un titre latin dans un livre arabe garde son numéro de page à gauche, et ses propres mots se lisent de gauche à droite.

**Taquets de tabulation.** Les taquets de tabulation du texte courant fonctionnent de la même façon (voir [Tabulations et taquets](https://postext.dev/fr/docs/document-format.md#tabulations-et-taquets)) : la position d’un taquet se mesure depuis le bord droit de la justification, un taquet `end` se place à gauche, et des points de conduite courent entre les parties dans l’ordre visuel. Une liste de prix ou une table des matières saisie en paragraphes, `الفصل الأول :tab 12` sous un style dont le taquet est `{ position: 'end', align: 'end', leader: '.' }`, compose le titre à droite et le numéro à gauche, derrière des points.

**Index.** L’index d’un livre arabe trie ses entrées dans l’ordre alphabétique (hijāʾī) et les regroupe sous leur première lettre. Il ignore l’article défini : البصرة se classe sous ب, entre بدر et بغداد, et s’imprime tel qu’il est écrit (`index.ignoreArticle`, activé par défaut quand la langue de l’index est l’arabe ; الله garde son article). Il ignore aussi les signes vocaliques et le tatweel, classe أ إ آ ٱ sous ا, et trie ة avec ه et ى avec ي. Les numéros de page sont reliés par la virgule arabe (، ) et un renvoi se lit انظر ou انظر أيضًا. Une entrée dotée de sa propre clé `sort` garde l’article de cette clé. Voir [Index](https://postext.dev/fr/docs/configuration-notes-references.md#index).

**Citations.** Une bibliographie dans un livre arabe prend les termes arabes du langage de styles de citation (locale CSL `ar` : ص pour une page, مج pour un volume, و entre deux auteurs, وآخرون pour et al.) et les chiffres du document dans les appels numérotés : `[٢، ص ١٢]`. Le titre de la bibliographie est المراجع. Les virgules et points-virgules écrits dans un style CSL restent tels que le style les donne. Un ouvrage dans une autre écriture garde son propre ordre : une référence latine dans une note ou une bibliographie arabe est composée comme un isolat de son sens, si bien que son URL, ses guillemets et son point restent avec elle, et la note reste un paragraphe de droite à gauche. Voir [Citations](https://postext.dev/fr/docs/configuration-notes-references.md#citations).

## Polices

Postext compose chaque style dans une seule famille et ne se rabat pas sur une autre pour un caractère manquant : le caractère doit donc contenir chaque lettre, signe et chiffre arabe que le livre imprime. Caractères libres pour le livre (tous sous licence SIL Open Font License) :

| Caractère | Style | Usage |
| --- | --- | --- |
| Amiri | Naskh d’après les types des imprimeries de Būlāq et d’al-Amīriyya du début du XXe siècle ; kashida courbe, vocalisation complète, un latin assorti. | Éditions classiques, texte vocalisé, poésie. Romain et gras. |
| Noto Naskh Arabic | Naskh moderne neutre. | Prose moderne, notes, tableaux. Police variable : intégrez au paquet un fichier statique par graisse. |
| Scheherazade New | Naskh traditionnel simplifié aux signes très lisibles, interlignage par défaut élevé. | Texte entièrement vocalisé, enseignement de la langue. |
| Reem Kufi | Coufique d’après les inscriptions fatimides. | Titres de labeur, titres de nuits et de chapitres. |
| Aref Ruqaa | Ruqʿa. | Titres courts et pages de titre. Pas de kashida : le ruqʿa ne s’allonge pas. |

Markazi Text et Noto Kufi Arabic conviennent aux livres modernes (texte et titres), et El Messiri aux titres modernes. À corps nominal égal, un caractère naskh paraît plus petit qu’un caractère latin : le texte d’un livre arabe est couramment composé en 13–15 pt là où un texte latin serait en 10–11 pt.

- **Dans le navigateur et le Sandbox**, Google Fonts et Fontsource servent chaque famille sous forme d’un fichier par sous-ensemble : `latin`, `latin-ext` et `arabic`. Le navigateur ne charge le fichier `arabic` qu’au moment où un caractère en a besoin, et une mise en page mesurée avant son arrivée l’est dans un caractère de repli. Le Sandbox le charge avant la première mise en page ; un hôte le vérifie avec un échantillon qui contient une lettre arabe (`document.fonts.load('16px Amiri', 'ب')`). Le fournisseur de polices PDF doit transmettre à `renderToPdf` le fichier `arabic` pour le texte arabe ; le fournisseur décrit dans [Fournisseur de polices du navigateur](https://postext.dev/fr/docs/configuration-programmatic-usage.md#fournisseur-de-polices-dans-le-navigateur-fontsource--woff2) choisit la tranche par point de code.
- **Dans un paquet**, livrez les caractères entiers ou réduits aux caractères du livre, en conservant les tables de mise en forme OpenType (`GSUB`, `GPOS`) : c’est là que se trouvent les formes de liaison, les ligatures, les positions des signes et les parenthèses en miroir. Un sous-ensemble qui en est privé imprime des lettres isolées.
- **Les glyphes manquants** s’impriment sous la forme du carré vide de la police ; `renderToPdf` les signale par caractère (`missingGlyph`), et le Sandbox les liste dans le panneau Vérifications.
- **Le latin à l’intérieur du texte arabe** se compose dans la même famille. Amiri a son propre latin ; avec un caractère naskh dont le latin est pauvre, composez les longs passages latins dans un style de paragraphe doté d’un caractère latin.

## Dans le Sandbox

Sous **Maquette › Système d’écriture**, la liste Langue du document propose العربية, العربية (مصر) et العربية (المغرب), et **Sens du texte** et **Chiffres** montrent à quoi correspond *Auto*. **Valeurs par défaut pour l’arabe › Vérifier…** liste ce que change la configuration du livre pour l’arabe avant de l’appliquer, avec un choix de caractères (*Classique*, Amiri ; *Moderne*, Noto Naskh Arabic avec des titres en Noto Kufi Arabic) : le sens et la reliure ramenés à *Auto*, des titres courants et des folios dans un caractère doté de lettres arabes, un interlignage de 1,75 em, un texte justifié, les chiffres de la région, شكل et جدول numérotés par chapitre, des légendes composées شكل ١-١: العنوان, des chapitres numérotés الفصل الأول, des listes numérotées ١- أ- (١) et des notes numérotées à chaque page. Chaque sélecteur de police liste d’abord les familles arabes.

L’éditeur donne à chaque ligne le sens de sa première lettre : une ligne d’arabe part de la droite, et le curseur et les touches fléchées suivent l’ordre visuel, tandis que le balisage qu’elle contient (attributs `{…}`, `[^id]`, un `:ref[…]`, les formules mathématiques, les cibles de liens) reste de gauche à droite. Voir [Sandbox](https://postext.dev/fr/docs/sandbox.md#panneau-maquette).

## Deux configurations complètes

### Un livre moderne en arabe standard moderne

Un livre de 14 × 21 cm en Noto Naskh Arabic de 13 pt, titres en Noto Kufi Arabic, chapitres numérotés الفصل الأول, notes « (١) » numérotées à chaque page, folio centré en pied de page. Le sens, la reliure à droite, les chiffres ٠–٩, la kashida et la mise en valeur en gras viennent de `locale: 'ar-EG'` :

```ts
import type { PostextConfig } from 'postext';

const pt = (value: number) => ({ value, unit: 'pt' as const });
const mm = (value: number) => ({ value, unit: 'mm' as const });
const em = (value: number) => ({ value, unit: 'em' as const });
const ink = { hex: '#1a1a1a', model: 'hex' as const };

const config: PostextConfig = {
  locale: 'ar-EG',
  page: {
    sizePreset: 'custom', width: mm(140), height: mm(210),
    margins: { top: mm(18), bottom: mm(22), left: mm(16), right: mm(20), mirror: true },
  },
  layout: { layoutType: 'single' },
  bodyText: {
    fontFamily: 'Noto Naskh Arabic', fontSize: pt(13), lineHeight: em(1.7),
    textAlign: 'justify', firstLineIndent: em(1.5),
    color: ink, boldColor: ink, italicColor: ink,
  },
  headings: {
    fontFamily: 'Noto Kufi Arabic', color: ink,
    levels: [
      { level: 1, fontSize: pt(20), numberingTemplate: 'الفصل {1:ordinal}', numberSeparator: ': ',
        breakBefore: { enabled: true, parity: 'odd' } },
      { level: 2, fontSize: pt(15) },
    ],
  },
  captionStyle: { labelSeparator: ': ' },
  orderedLists: {
    levels: [
      { level: 1, numberFormat: 'arabic', separator: '-' },
      { level: 2, numberFormat: 'abjad', separator: '-' },
    ],
  },
  footnotes: { markerTemplate: '({n})', numbering: 'page', noteNumberPosition: 'inline' },
  header: { elements: [] },
  footer: { elements: [
    { kind: 'text', id: 'folio', content: '{pageNumber}', fontFamily: 'Noto Naskh Arabic', fontSize: pt(11),
      overflow: 'clip', color: ink, placement: { anchor: { to: 'container', edge: 'center' } } },
  ] },
};
```

`parity: 'odd'` ouvre chaque chapitre sur un recto, qui est dans ce livre une page de gauche. Un deux-points sépare l’étiquette d’une légende de son texte (شكل ١-٢: …), car le point placé par défaut après des chiffres arabes orientaux se lit comme un séparateur décimal.

### Une édition classique vocalisée

Une édition de 17 × 24 cm d’un texte classique en Amiri de 14 pt, ses nuits numérotées en toutes lettres, ses vers entièrement vocalisés, son folio en tête de page entre tirets, ses pages liminaires foliotées en lettres abjad et sa table des matières à la fin :

```ts
const config: PostextConfig = {
  locale: 'ar',
  page: {
    sizePreset: 'custom', width: mm(170), height: mm(240),
    margins: { top: mm(24), bottom: mm(24), left: mm(18), right: mm(24), mirror: true },
  },
  layout: { layoutType: 'single' },
  bodyText: {
    fontFamily: 'Amiri', fontSize: pt(14), lineHeight: em(1.85),
    textAlign: 'justify', firstLineIndent: em(1.5),
    kashida: 'auto', kashidaPatterns: 'naskh',
    color: ink, boldColor: ink, italicColor: ink,
  },
  headings: {
    fontFamily: 'Amiri', color: ink, textAlign: 'center',
    levels: [
      { level: 1, fontSize: pt(18),
        numberingTemplate: 'الليلة {1:ordinal-feminine}', numberSeparator: '',
        breakBefore: { enabled: true, parity: 'any' } },
    ],
  },
  paragraphStyles: [
    { id: 'verse', lineHeight: em(2.1) },
  ],
  footnotes: { markerTemplate: '({n})', numbering: 'page', noteNumberPosition: 'inline' },
  header: { elements: [
    { kind: 'text', id: 'folio', content: '– {pageNumber} –', fontFamily: 'Amiri', fontSize: pt(12),
      overflow: 'clip', color: ink, placement: { anchor: { to: 'container', edge: 'center' } } },
  ] },
  footer: { elements: [] },
};
```

Les chapitres commencent par `:::numbering{format="abjad" startAt=1}` avant l’introduction et `:::numbering{format="decimal" startAt=1}` avant la première nuit ; les poèmes sont des blocs `:::verse{style="verse"}` ; le dernier chapitre est `# فهرس المحتويات {toc="false"}` suivi de `:::toc`. L’index n’a besoin d’aucun réglage pour ignorer l’article ال : `index.ignoreArticle` est activé pour un index arabe. Pour une édition de lecture non vocalisée tirée de la même source, ajoutez `tashkil: 'strip'` à `bodyText`.

## Limites connues

- **Le persan, l’ourdou et l’hébreu** reçoivent le sens d’écriture, les chiffres, les règles de mots entiers et la reliure à droite, mais pas de mots intégrés propres (les figures, les tableaux et l’index s’impriment en anglais) ni de composition nastaʿlīq : un caractère nastaʿlīq se compose sur une ligne de base horizontale.
- **Le sens d’un bloc** se règle sur les titres et les conteneurs ; un paragraphe simple doit être entouré d’un `:::paragraphs{dir=…}`, et `{dir=auto}` n’existe pas.
- **Îlots de sens contraire.** Dans un bloc composé dans le sens contraire de celui du livre, les légendes, les lignes de la table des matières et de l’index suivent le sens du document, et l’icône, la colonne de marqueur et le titre d’un encadré restent du côté du début du flux.
- **Le texte de design** (titres courants, ouvertures, titres d’encadrés) résout l’ordre bidirectionnel ligne par ligne, et un texte qui contient une lettre arabe perd tout son interlettrage, mots latins compris.
- **Texte de design en italique.** Un titre courant ou un texte d’ouverture composé en italique penche toujours les lettres arabes.
- **Les signes vocaliques** peuvent dépasser le bord d’un encadré ou d’une cellule de tableau, dont le masque ne s’agrandit pas pour eux ; `tashkil` laisse les signes des légendes, des cellules de tableau et du texte de design.
- **Nombres.** Les numéros de citation s’impriment en chiffres européens ; les ordinaux en toutes lettres s’écrivent au nominatif et à la forme définie qu’utilisent les titres.
- **Index** : ة est classé sous ه, et les noms ne sont pas triés au-delà de ابن ou أبو ; il n’y a pas d’index par rime ni par racine.
- **Poésie** : pas de vers intégrés à la prose, pas de formes strophiques avec un refrain centré au-delà de lignes centrées isolées ; un hémistiche plus large que la justification passe à la ligne depuis le côté du début, sans retrait suspendu.
- **Kashida** : le texte copié depuis la sortie HTML contient encore les tatweels insérés, et rien n’empêche les kashidas de lignes voisines de s’empiler les unes au-dessus des autres.
- **Les listings de code** se lisent de gauche à droite dans un livre de droite à gauche : chaque ligne se compose depuis le côté opposé de l’encadré, comme une citation anglaise, ses numéros de ligne dans la gouttière à sa gauche, son texte copié dans l’ordre logique. Voir [Listings de code](https://postext.dev/fr/docs/configuration-styles.md#listings-de-code).
- **Les mots sans lettre** prennent l’écriture de leur contexte dans le texte courant, les titres, les listes, les légendes, les notes et les cellules. Un marqueur de liste, l’étiquette d’un renvoi, un appel de note, le texte de design (un folio, un titre courant fait de nombres), le lettrage de bande dessinée et un paragraphe composé par le compositeur CJK sont mis en forme isolément, comme chaque navigateur les met en forme.

## Sources

- W3C, [Arabic & Persian Layout Requirements (alreq)](https://www.w3.org/TR/alreq/), et l’[Arabic script gap analysis](https://www.w3.org/International/alreq/gap-analysis/).
- Unicode Standard Annex #9, [Unicode Bidirectional Algorithm](https://www.unicode.org/reports/tr9/) ; Unicode Technical Report #53, [Unicode Arabic Mark Rendering](https://www.unicode.org/reports/tr53/).
- W3C, [Ready-made Counter Styles](https://www.w3.org/TR/predefined-counter-styles/), pour `arabic-indic`, `persian` et la série abjad.
- aliftype, [raqim-kashida](https://github.com/aliftype/raqim-kashida) (MIT), et sa [présentation](https://aliftype.com/blog/introducing-raqim-kashida/english) ; M. Benatia, M. Elyaakoubi et A. Lazrek, “Arabic text justification”, *TUGboat* 27(2), 2006.
- Titus Nemeth, [On Arabic justification](https://research.reading.ac.uk/typoarabic/on-arabic-justification-part-1/), TypoArabic, université de Reading ; Khatt Foundation, [The Big Kashida Secret](https://www.khtt.net/en/page/1821/the-big-kashida-secret).
- Aḥmad Zakī Pāshā, *al-Tarqīm wa-ʿalāmātuhu fī al-lugha al-ʿarabiyya*, 1912 ([Hindawi](https://www.hindawi.org/books/82047270/)), sur la ponctuation arabe.
- Documentation d’[Amiri](https://www.amirifont.org) et de [Scheherazade New](https://software.sil.org/scheherazade/), sur la kashida, l’empilement des signes et les jeux stylistiques.
- Unicode CLDR, pour les chiffres par défaut de chaque région.
