# Composition du chinois

> Comment Postext compose le chinois, horizontalement et verticalement : régions, coupure des lignes, chasse de la ponctuation, justification entre les caractères, grille de caractères, livres reliés à droite, nombres debout, marques, ruby, warichu, chiffres chinois et polices

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

## En bref

Cette page explique comment Postext met en page un texte chinois. Le chinois peut se lire en lignes qui traversent la page, ou en colonnes qui la descendent et se lisent de droite à gauche. La Chine continentale, Taïwan et Hong Kong appliquent des règles un peu différentes pour la ponctuation et les retours à la ligne, et Postext suit chacune d’elles. La page traite aussi des nombres dans un texte vertical, des guides de prononciation imprimés à côté des caractères, des notes en petits caractères et du choix des polices. Elle se termine par deux exemples complets et par les limites qui restent.

**Une page chinoise est une grille de cellules carrées, et les règles qui la remplissent dépendent du lieu où le livre est imprimé.**

Postext compose le chinois horizontalement et verticalement, à partir d’une seule source Markdown et d’une seule configuration. Le même moteur place la ponctuation d’un roman de Chine continentale là où la norme GB/T 15834 la met et celle d’une édition taïwanaise là où le manuel du ministère de l’Éducation la met, coupe leurs lignes selon les règles de chaque région, ajuste le blanc à l’intérieur de chaque signe, répartit l’espace d’une ligne justifiée entre ses caractères, compose debout les nombres courts dans une colonne verticale et tourne les doubles pages d’un livre pour qu’il s’ouvre par la droite. Cette page explique ce que fait le moteur et quels réglages le pilotent. La [référence de configuration](https://postext.dev/fr/docs/configuration-east-asian.md#typographie-dasie-de-lest) liste chaque clé avec sa valeur par défaut, et le [format de document](https://postext.dev/fr/docs/document-format.md#marques-chinoises-ruby-et-warichu) décrit le balisage.

Les règles suivent la note du W3C *Requirements for Chinese Text Layout* ([clreq](https://www.w3.org/TR/clreq/)), citée ci-dessous par section, et les normes nationales dont elle s’inspire. Les sources sont listées à la fin.

## Cellules, grilles et régions

Un caractère Han remplit un carré d’un em de large et d’un em de haut, de même que chaque signe de ponctuation pleine chasse : un demi-em de glyphe et un demi-em de blanc. Composés sans espace ajoutée, les caractères s’alignent dans la hauteur de la page comme le long de la ligne. C’est pourquoi un bloc de texte chinois se définit en caractères et en lignes plutôt qu’en millimètres : corps du texte, caractères par ligne, lignes par page, espace entre les lignes et, sur deux colonnes, gouttière (clreq §7.1.1). Une ligne de 28 caractères en 10,5 pt mesure 294 pt, et chaque ligne justifiée du livre se termine dans la même cellule.

Une page horizontale déroule ses lignes de gauche à droite et de haut en bas, et se relie à gauche comme un livre occidental. Une page verticale déroule ses caractères de haut en bas et ses lignes du bord droit vers la gauche ; le livre est relié à droite, si bien que sa première page est une page de gauche et que ses doubles pages se lisent de droite à gauche (clreq §7.1.1.1).

> **Figure: Pages chinoises horizontales et verticales**
> Deux doubles pages. Le livre horizontal est relié à gauche, avec la page 2 à gauche, la page 3 à droite, et des lignes qui vont de gauche à droite et s’empilent depuis le haut. Le livre vertical est relié à droite, avec la page 2 à droite, la page 3 à gauche, et des caractères qui vont de haut en bas, en colonnes qui avancent du bord droit vers la gauche.
>
> *Le même texte, composé horizontalement et relié à gauche, ou verticalement et relié à droite.*

### La région avant l’écriture

Caractères simplifiés et caractères traditionnels relèvent de l’orthographe. Les règles typographiques suivent le lieu d’impression : un classique en caractères traditionnels imprimé à Pékin suit la norme continentale, et un roman taïwanais celle de Taïwan. clreq recommande que les logiciels « distinguent les règles typographiques par “région” plutôt que par “traditionnel ou simplifié” » ([§1.2](https://www.w3.org/TR/clreq/#x1-2-basic-features-of-chinese-script)), et Postext lit les deux dans la langue du document, `config.locale` :

- L’**écriture** choisit les mots intégrés : 图 ou 圖 pour les figures, （续） ou （續） après la légende d’un tableau qui continue, 见 ou 見 dans l’index, et les chiffres qu’écrit un modèle de titre. `zh`, `zh-Hans`, `zh-CN` et `zh-SG` sont en simplifié ; `zh-Hant`, `zh-TW`, `zh-HK` et `zh-MO` en traditionnel.
- La **région** choisit les valeurs typographiques par défaut de la clé `cjk`. CN, SG et MY désignent la Chine continentale, TW Taïwan, HK et MO Hong Kong, et une étiquette sans région suit son écriture : `zh-Hant` se lit comme Taïwan, `zh` et `zh-Hans` comme la Chine continentale. `cjk.region` l’emporte sur elle.

Écrivez l’étiquette complète : `zh-Hans` ou `zh-Hant`, et la région quand vous la connaissez (`zh-Hans-CN`, `zh-Hant-TW`, `zh-Hant-HK`). La même étiquette est déclarée dans le HTML (`lang` sur le document) et dans le PDF (`/Lang`), et le navigateur comme le lecteur PDF s’en servent pour choisir les formes de glyphes de la région : Unicode donne un seul point de code à 骨, qu’une police continentale et une police taïwanaise dessinent différemment. Dans un document chinois, la césure est désactivée, sauf si vous l’activez pour les mots latins.

La langue est aussi celle dans laquelle le texte est mis en forme. Une police chinoise répond par d’autres glyphes selon la langue : Noto Serif SC compose un chiffre sur 0,47 em en chinois et sur 0,55 em dans une langue pour laquelle elle n’a pas de formes. La mise en page mesure dans la langue du document quel que soit le contexte, si bien qu’un livre chinois coupe ses lignes de la même façon sur une page chinoise, sur une page anglaise qui l’affiche et dans un worker de mise en page ; le canvas peint dans cette langue, le HTML et l’EPUB la déclarent, et le PDF met en forme avec le système de langue OpenType qui lui correspond (`ZHS` pour `zh-Hans`, `zh-CN` et `zh-SG` ; `ZHT` pour `zh-Hant` et `zh-TW` ; `ZHH` pour `zh-HK`) ; un passage dans une autre langue l’indique (`:ltr[…]` avec `lang=en`) et se mesure dans celle-ci. C’est [`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, la mise en page mesure dans la langue de la page qui l’héberge, et un livre chinois peut couper ses lignes d’une façon sur une page chinoise et d’une autre sur une page anglaise qui l’affiche ou dans un worker de mise en page.

| Valeur par défaut | Chine continentale (`zh-Hans`, `zh-CN`) | Taïwan (`zh-Hant`, `zh-TW`) | Hong Kong (`zh-HK`, `zh-MO`) |
| --- | --- | --- | --- |
| Coupure des lignes (`lineBreak`) | `gb` | `basic` | `basic` |
| Chasse de la ponctuation (`punctuationWidth`) | `kaiming` | `fullwidth` | `fullwidth` |
| Deux signes qui se suivent occupent 1,5 em (`compressAdjacent`) | oui | non | oui |
| Parenthèses rognées en bord de ligne (`trimLineStart`) | oui | non | oui |
| 、，。 en texte horizontal | en bas à gauche de la cellule | centrés | centrés |
| 、，。 en texte vertical | en haut à droite de la cellule | centrés | centrés |
| Point médian · | un demi-em | un em | un em |
| Signes qui peuvent déborder, avec `hangingPunctuation` actif | 、，。．；：？！ | 、，。．, en texte horizontal seulement avec `'force'` | 、，。．, en texte horizontal seulement avec `'force'` |
| `:book[…]` (`bookTitleMark`) | 《》 autour du titre | trait ondulé | trait ondulé |
| `*…*` sur des caractères chinois (`emphasis`) | points d’emphase | points d’emphase | points d’emphase |
| Figure, tableau continué, voir | 图, （续）, 见 | 圖, （續）, 見 | 圖, （續）, 見 |
| Groupes de l’index (`index.groupBy`) | initiales pinyin | nombre de traits | nombre de traits |

Les deux dernières lignes suivent l’écriture, pas la région. Un classique en caractères traditionnels imprimé à Pékin (`zh-Hant-CN`) prend la coupure des lignes et la ponctuation de la Chine continentale, ainsi que 圖, （續）, 見 et les groupes par nombre de traits ; un livre en simplifié étiqueté pour Hong Kong (`zh-Hans-HK`) prend 图 et les groupes pinyin.

Les documents japonais ont leur propre région, `japan`, depuis postext 1.16 : voir [Composition du japonais](https://postext.dev/fr/docs/japanese-layout.md). Les documents coréens reçoivent la règle sans césure et le compositeur CJK, mais pas encore de règles propres : ils sont composés avec les valeurs par défaut du chinois continental, et un paragraphe en hangul garde les guillemets et les tirets de la police.

### Le Markdown d’un chapitre chinois

Le texte chinois s’écrit dans le même Markdown que tout autre texte. Quelques règles le rendent confortable :

- **Revenez à la ligne où vous voulez.** Une fin de ligne entre deux caractères chinois est supprimée, comme le fait CSS, si bien qu’un éditeur qui coupe à 80 colonnes n’ajoute aucune espace au texte. Entre deux signes (`”⏎“`), ce sont les caractères situés au-delà qui décident. Une espace tapée à l’intérieur d’une ligne est conservée.
- **Faites le retrait avec la configuration.** Le retrait de première ligne de deux caractères s’écrit `bodyText.firstLineIndent: { value: 2, unit: 'em' }` ; l’analyseur supprime les espaces idéographiques (U+3000) par lesquelles commence un paragraphe.
- **Faites aussi le retrait des titres avec la configuration.** Un titre placé deux cellules en retrait, dont la suite revient à la marge, comme les compose GB/T 9704, s’obtient avec `headings.levels[n].firstLineIndent: { value: 2, unit: 'em' }` (depuis postext 1.24). Des espaces idéographiques tapées dans un `numberingTemplate` feraient partie du numéro du titre et s’imprimeraient aussi dans la table des matières et dans les signets du PDF.
- **Tapez le balisage en ASCII.** Une méthode de saisie chinoise produit `：：：`, `＃`, `［＾1］`, `｛…｝` et `＊＊` ; ces signes s’impriment comme du texte, et la compilation signale chaque ligne concernée par `fullwidthMarkup`, avec la forme ASCII à taper. Les valeurs d’attribut peuvent être entourées de “…” ou de 「…」 et utiliser `＝`, et les attributs d’un titre peuvent suivre le titre sans espace : `# 第一回{style="hui"}`. Les clés restent en ASCII ; une clé en chinois (`作者=曹雪芹`) est ignorée, avec un avertissement `attributeKeyInvalid`.
- **Emphase et intervalles.** `_` et `__` fonctionnent entre des caractères chinois (`中文_斜体_中文`). Un `~` entre deux chiffres ou deux mots chinois marque un intervalle et reste tel qu’il est tapé (`3~5天`, `周一~周五`).
- **Les identifiants et les noms de fichier** gardent les caractères chinois : un chapitre intitulé 第一回 est enregistré sous `chapters/001-第一回.md`.

Les directives des marques chinoises, du ruby, du warichu et de l’orientation sont décrites [plus bas](https://postext.dev/fr/docs/chinese-layout.md#marques-et-annotations) et dans le [format de document](https://postext.dev/fr/docs/document-format.md#marques-chinoises-ruby-et-warichu).

## Composition horizontale

Un paragraphe qui contient plus de caractères chinois, japonais ou coréens que d’espaces entre mots est composé par le compositeur CJK. Seule une espace entre deux mots latins, nombres ou signes compte comme espace entre mots : les espaces que le texte web tape autour des mots latins et des nombres (`2026 年 9 月 28 日`, `安装 Node.js 和 Git`) ne comptent pas, si bien qu’une telle phrase est composée comme si elle était écrite sans elles. Le compositeur découpe le texte en unités (une par caractère, une par mot latin ou nombre, une par tiret ou points de suspension de deux em), mesure chacune une fois et remplit les lignes l’une après l’autre. Une recherche optimale comme Knuth–Plass n’aurait rien à peser : presque chaque intervalle entre deux caractères est un point de coupure, et les règles ci-dessous retirent les rares qui ne le sont pas. Un paragraphe latin qui cite un titre chinois garde Knuth–Plass et peut couper à côté de ses caractères chinois selon les mêmes règles. Les légendes, les cellules de tableau, les notes de bas de page et les encadrés coupent aussi selon le niveau du document.

### Coupure des lignes

Les règles de début et de fin de ligne (避头尾) disent quels signes ne peuvent pas ouvrir une ligne et lesquels ne peuvent pas la fermer. `cjk.lineBreak` choisit l’un des quatre niveaux de [clreq §6.1.1](https://www.w3.org/TR/clreq/#x6-1-1-prohibition-rules-for-line-start-and-line-end) :

| Niveau | Jamais en début de ligne | Jamais en fin de ligne |
| --- | --- | --- |
| `none` | Rien : les journaux de Taïwan et de Hong Kong coupent n’importe où. | Rien. |
| `basic` | Les signes de pause et de fin 、，；：。！？, les guillemets et parenthèses fermants ”’」』）〕］》〉, les connecteurs ～ et le — simple, les points médians ·‧・, les marques d’itération 々, les unités % ‰ ° ℃. | Les guillemets et parenthèses ouvrants “‘「『（〔［《〈, les symboles monétaires ¥ $ €. |
| `gb` | `basic` et la barre oblique ／ (GB/T 15834—2011 §5.1.9). | `basic` et la barre oblique. |
| `strict` | `gb` et les signes de deux em —— ⸺ …… ⋯⋯. | `gb`. |

À tous les niveaux, une ligne ne coupe jamais le tiret de deux em —— ni les points de suspension ……, ni un nombre et son signe ou son unité (¥5,999, 50%, 120㎡, −3 ℃), ni un mot latin, ni un nombre écrit en chiffres pleine chasse (１２：３０) ; un appel de note, un `:ref` et un exposant restent avec le caractère qui les précède ; et une ligne ne coupe jamais avant une espace idéographique. Un mot latin ou une adresse web plus large que toute la ligne constitue la seule exception : le mot est divisé à une syllabe, l’adresse à l’une de ses jointures.

Un titre d’ouvrage n’est pas coupé après son premier caractère ni avant son dernier : à l’intérieur de `《…》` et de `〈…〉` (tapés, ou ajoutés autour d’un titre `:book[…]`), une ligne ne coupe que là où deux caractères du titre se trouvent de part et d’autre, si bien qu’aucune ligne ne se termine par `《說` avec `文》` en tête de la suivante, et qu’un titre de deux ou trois caractères reste entier. `cjk.titleMinChars` fixe ce nombre (`1` coupe partout où le niveau le permet). Une ligne qui n’a pas d’autre point de coupure coupe tout de même à l’intérieur d’un titre plutôt que de dépasser la mesure.

Les nombres cerclés ① à ⑳ (et ⑴, ⒈, ⓐ, ❶ et leurs semblables) sont des caractères chinois dans un texte chinois : chacun occupe une cellule, sans espace Han–latin autour, et une ligne ne se termine jamais par l’un d’eux, puisqu’il numérote le sens ou l’élément qui le suit (à tous les niveaux sauf `none`). Une entrée de dictionnaire écrit `**①**天也`, sans rien entre le numéro et son texte. `cjk.circledNumbers: 'western'` les compose comme des lettres latines, comme le faisait postext jusqu’à la 1.24.

Quand le caractère suivant ne tient pas, le compositeur l’examine. S’il peut ouvrir une ligne, il passe à la ligne suivante, et la ligne justifiée est espacée. S’il ne le peut pas (une virgule, une parenthèse fermante, le caractère qui suit une ouvrante), la ligne essaie d’abord de l’absorber en cédant du blanc de ponctuation, le resserrement (push-in) de [clreq §6.2.2.3](https://www.w3.org/TR/clreq/#x6-2-2-3-procedures-for-inter-character-spacing-reduction) ; ce n’est que lorsque ce blanc ne couvre pas le dépassement que la ligne se termine plus tôt et renvoie à la ligne suivante, avec le signe, le caractère qui le précède. Le resserrement passe en premier parce qu’il garde ensemble les caractères de la ligne ; le renvoi (push-out) sert de solution de repli.

### Chasse de la ponctuation

Un signe pleine chasse se compose d’un demi-em de glyphe et d’un demi-em de blanc, et ce que les réglages ajustent, c’est le blanc, jamais le glyphe ([clreq §6.3.2](https://www.w3.org/TR/clreq/#x6-3-2-punctuation-width-adjustment)). La place de ce blanc dépend de la région. La Chine continentale place ses signes de pause et de fin dans un coin de la cellule, si bien que le blanc suit le glyphe ; Taïwan et Hong Kong les centrent, avec un quart d’em de chaque côté. Les parenthèses et les guillemets ouvrants portent leur blanc avant le glyphe, les fermants après, dans toutes les régions.

> **Figure: Où se placent les signes de pause et de fin dans leur cellule**
> Quatre bandes de cellules avec les caractères 甲 乙 丙 丁 suivis d’un point, d’une virgule, d’une virgule d’énumération et de deux-points. Le texte continental horizontal place les signes en bas à gauche de la cellule, le texte continental vertical en haut à droite. Le texte de Taïwan et de Hong Kong les centre dans les deux sens.
>
> *Le glyphe occupe la moitié de la cellule, et la région décide laquelle.*

`cjk.punctuationWidth` choisit la quantité de blanc qu’un signe conserve :

| Style | Dans la ligne | En fin de ligne | Usage |
| --- | --- | --- | --- |
| `fullwidth` 全角式 | Chaque signe sur un em. | Un em. | Livres de Taïwan et de Hong Kong ; la plupart des textes web. |
| `kaiming` 开明式 | 。．？！ sur un em ; ，、；：, les parenthèses, les guillemets et les points médians sur un demi-em. | Chaque signe sur un demi-em. | La plupart des livres continentaux ; le réglage par défaut de 方正书版. |
| `lineEndHalf` 行末半角 | Chaque signe sur un em. | Chaque signe sur un demi-em. | GB/T 15834—2011 §5.1.10 lu à la lettre. |
| `halfwidth` 半角式 | Chaque signe sur un demi-em. | Un demi-em. | Dictionnaires. |

Deux autres réglages agissent sur les signes, quel que soit le style. Avec `compressAdjacent`, deux signes qui se suivent cèdent le blanc qui les sépare, si bien que `。」`, `》（` ou `，「` occupent un em et demi au lieu de deux. Un `。` ou une `，` centrés, comme les composent Taïwan et Hong Kong, gardent leur em entier devant une parenthèse fermante, si bien que `。」` y reste large de deux em ; `》（`, `」，` et `，「` se resserrent toujours. Avec `trimLineStart`, une parenthèse ouvrante en début de ligne cède sa moitié avant, de sorte que son encre s’aligne sur le bord du texte, et une parenthèse fermante en fin de ligne cède sa moitié arrière. Les deux réglages sont actifs pour la Chine continentale et Hong Kong et inactifs pour Taïwan, dont les livres gardent chaque signe dans sa cellule.

> **Figure: Ponctuation pleine chasse et Kaiming**
> La ligne 曹雪芹著《红楼梦》（又名《石头记》）。 composée deux fois. En pleine chasse, chaque signe occupe un em et la ligne mesure 19 em, avec la moitié blanche de chaque signe teintée. Dans le style Kaiming, les parenthèses occupent chacune un demi-em et le point final en fin de ligne un demi-em, et la même ligne mesure 15,5 em.
>
> *La même ligne en pleine chasse (19 em) et dans le style Kaiming (15,5 em).*

Les guillemets, les points de suspension, le tiret et le point médian sont partagés avec le texte latin, et une police latine les dessine étroits. Dans un texte chinois (le caractère le plus proche de chaque côté est chinois), ils prennent la boîte d’un signe chinois, quelle que soit l’avance que leur donne la police : “ et ” un em chacun (un demi-em en Kaiming), …… deux em centrés, · un demi-em en Chine continentale et un em ailleurs. Un 破折号 (——) s’imprime comme un filet continu sur ses deux em, relevé au milieu des caractères. À côté de mots latins, les mêmes signes gardent les chasses de la police, si bien que `他说：He said “yes” and left.` compose ses guillemets anglais à l’anglaise. Cités dans une phrase d’une autre écriture, comme le fait un colophon en anglais (`Cuts are marked …….`), les points de suspension et le tiret doublés restent les signes du document dans un livre chinois ou japonais : la paire garde ses formes Han, et le point qui la suit celles de la phrase ([Mots sans lettre](https://postext.dev/fr/docs/arabic-layout.md#mots-sans-lettre)).

Composez un livre dans une police de sa région : Noto Serif SC ou Source Han Serif SC pour la Chine continentale, TC pour Taïwan, HK pour Hong Kong. La mise en page décide de quel côté d’un signe se trouve le blanc d’après la région, non d’après la police, et une police traditionnelle sous une étiquette continentale comprime le mauvais côté de ses signes centrés.

### Ponctuation en débord

Avec `hangingPunctuation: 'allow'`, une virgule ou un point qui ouvrirait sinon la ligne suivante, et que le resserrement ne peut pas absorber, peut déborder au-delà de la fin de la ligne ([clreq §6.1.3](https://www.w3.org/TR/clreq/#x6-1-3-hanging-punctuation-at-line-end)). `'force'` fait déborder un tel signe chaque fois qu’il termine une ligne. Un seul signe au plus déborde, et jamais un signe accolé à un autre (`。」`). Avec `'allow'`, aucun ne déborde dans un texte horizontal de Taïwan ou de Hong Kong, dont les signes centrés paraîtraient tronqués ; `'force'` les y fait déborder aussi. La plupart des livres chinois ne font pas déborder la ponctuation ; clreq le recommande avec une grille de caractères. La valeur par défaut est `'none'`.

### Justification entre les caractères

Le texte courant chinois est justifié, et une ligne justifiée répartit l’espace entre ses caractères. Une ligne qui n’est pas la dernière de son paragraphe se remplit dans l’ordre de [clreq §6.2.2.4](https://www.w3.org/TR/clreq/#x6-2-2-4-procedures-for-inter-character-space-expansion) :

1. Les espaces entre mots latins, jusqu’à un demi-em chacune.
2. Les espaces entre Han et latin (section suivante), jusqu’à un demi-em chacune.
3. Chaque intervalle entre caractères, à parts égales : entre deux caractères Han, entre un caractère et un signe, entre un Han et un mot latin. Jamais à l’intérieur d’un mot latin, d’un nombre ou d’un signe de deux em, et jamais à côté d’un connecteur (～, un — simple) ni d’une barre oblique.

Une ligne qui demanderait plus d’un demi-em entre ses caractères (ou plus que `bodyText.maxJustifyTracking`, s’il est défini) en prend autant et s’arrête avant la fin de la mesure ; la compilation la signale par un avertissement de contenu `cjkLooseLine`, que le Sandbox appelle **Ligne CJK trop courte**. La cause habituelle est un long mot latin ou une adresse web qui ne peut pas remonter. La dernière ligne d’un paragraphe est composée sans espace ajoutée. [Césure et justification](https://postext.dev/fr/docs/justification.md#chinois-japonais-et-coréen) donne les détails, notamment la façon dont une ligne CJK compte pour la mise en évidence des lignes lâches et dont l’équilibrage des colonnes allonge d’une ligne un paragraphe chinois.

Un paragraphe ne se termine pas sur une ligne qui ne contient qu’un caractère, seul ou avec les signes qui le ferment (孤字, comme dans `後。`). La ligne précédente cède son dernier caractère, avec tout signe qui doit rester avec lui, et s’espace jusqu’à la mesure ; quand il faudrait pour cela dépasser le plafond d’interlettrage, le caractère reste seul. Ce comportement suit `bodyText.avoidRunts`, actif par défaut, dans les deux modes d’écriture ; l’équilibrage des colonnes ne crée jamais non plus une telle ligne. Un paragraphe non justifié cède lui aussi le caractère, sur une grille de caractères comme hors grille, et la ligne précédente reste plus courte d’un caractère. Le papier quadrillé de manuscrit fait exception : avec `cjk.grid.fullLines`, une telle ligne garde chaque case et le paragraphe peut se terminer sur un seul caractère.

### Espace entre Han et latin

`cjk.latinSpacing` place un quart d’em entre un caractère Han et une lettre ou un chiffre latin voisin ([clreq §6.3.3](https://www.w3.org/TR/clreq/#x6-3-3-mixed-text-composition-in-horizontal-writing-mode)) : `1999年的iPhone 15售价为¥5,999。` s’imprime avec un intervalle après 1999, avant et après iPhone 15, et aucun avant ¥, qui est un signe. Il n’y en a pas en début ni en fin de ligne, ni entre un mot latin et un signe chinois (`用iPhone，`), ni à l’intérieur de parenthèses chinoises (`（iPhone）`). Une espace tapée par l’auteur à une telle frontière, comme dans beaucoup de textes web, est remplacée par l’espace Han–latin, si bien que `用 iPhone 拍照` et `用iPhone拍照` se composent de la même façon. Sur une ligne justifiée, l’espace grandit jusqu’à un demi-em avant que les caractères ne soient espacés, et une ligne qui absorbe un caractère de plus la réduit à un huitième d’em. L’espace n’est pas du texte : la copie, la recherche et le texte extrait du PDF lisent `用iPhone拍照` tel qu’il est écrit. `0` la désactive. Le côté d’un mot occidental qui reçoit l’espace dépend de `cjk.latinSpacingEdge` : le texte chinois garde `'letters'`, la règle ci-dessus, et `'western'` la place aussi à côté des parenthèses et des signes d’un mot occidental, comme le fait le texte japonais.

### La grille de caractères

`cjk.grid` définit le bloc de texte à la manière chinoise, en caractères par ligne et en lignes par page :

```ts
cjk: { grid: { enabled: true, charsPerLine: 28, linesPerPage: 28, show: true } }
```

Chaque colonne mesure `charsPerLine` em du corps du texte, et le bloc de texte `linesPerPage` lignes de la hauteur de ligne du texte courant. Les `page.margins` configurées servent de minimums : le bloc de texte est centré dans l’espace qu’elles laissent, chaque marge grandissant de la moitié de la différence. Sur deux colonnes, la gouttière est arrondie à un nombre entier d’em. Un nombre trop grand pour tenir est réduit et signalé (`cjkGridClamped`) ; un nombre non défini prend autant d’unités qu’il en tient. `show` dessine la grille (稿纸) à l’écran, une case par position de caractère ; le PDF la laisse de côté, sauf si l’on passe `characterGrid: true` à `renderToPdf`.

Une page sur la grille se remplit ligne par ligne et n’est pas équilibrée : une colonne qui se termine plus tôt, par exemple parce qu’un titre est gardé avec son texte sur la page suivante, reste courte, de la même façon qu’un document GB/T 9704 compte ses 22 lignes. `headings.balancing.enabled: true` active l’équilibrage avec des leviers qui respectent la grille : les lignes ajoutées au-dessus des titres et sous les listes, les blocs isolés et les figures sont des lignes entières de la grille, que `headings.balancing.gridLines: 'off'` exclut, et un paragraphe ne s’allonge d’une ligne que si ses caractères ne s’écartent pas de plus de `headings.balancing.maxTracking`, ce que ne fait jamais, avec la valeur par défaut, une ligne à laquelle il manque un caractère entier. Dans les deux cas, chaque caractère reste dans sa cellule. Voir [Configuration › Équilibrage des colonnes](https://postext.dev/fr/docs/configuration-text.md#équilibrage-des-colonnes).

Les règles `avoidWidows` et `avoidOrphans` suivent elles aussi la grille. `bodyText.avoidWidows` est désactivé par défaut sur une grille : un paragraphe peut commencer par une seule ligne en pied de page, et la page garde son nombre de lignes. `bodyText.avoidOrphans` reste actif : la dernière ligne d’un paragraphe ne reste pas seule en tête de page (孤行, clreq §7.1.2), et la page précédente cède une ligne pour elle. Réglez l’une ou l’autre clé pour en décider autrement.

Les livres courants, en 五号 (10,5 pt) avec 6 pt entre les lignes, soit une hauteur de ligne de 16,5 pt :

- 大32开, 140 × 203 mm, 28 × 28 caractères : une mesure de 103,7 mm et un bloc de texte de 163 mm.
- 16开, 184 × 260 mm, deux colonnes de 23 caractères en 小五 (9 pt, lignes de 13,5 pt) avec une gouttière de deux caractères.

clreq recommande des lignes de 17 à 40 caractères, 48 au plus en texte horizontal et 55 en texte vertical, et un espace entre les lignes d’un demi à un caractère ([clreq §7.1.1.5](https://www.w3.org/TR/clreq/#x7-1-1-5-considerations-when-designing-the-type-area)). Les corps chinois ont des noms : 五号 10,5 pt pour le texte des livres, 小五 9 pt pour les journaux et les notes, 小四 12 pt, 四号 14 pt, 三号 16 pt, 二号 22 pt. Postext prend les corps en points ; écrivez un corps en 号 sous sa valeur en points.

## Numérotation

Chaque réglage de numérotation accepte les styles de numération chinois de CSS Counter Styles : numéros de page, listes ordonnées, compteurs de figures, modèles de titre, parties et étiquettes de page du PDF. `simp-chinese-informal` écrit 一, 十二, 一百零一 ; `trad-chinese-informal` de même avec 萬 et 億 ; `cjk-decimal` 二〇二六 ; `simp-chinese-formal` et `trad-chinese-formal` les chiffres financiers 壹贰叁 ; `circled-decimal` ① ; s’y ajoutent les troncs célestes 甲乙丙 et les branches terrestres 子丑寅. Dans un modèle, `一` désigne les chiffres usuels de l’écriture du document, si bien qu’un seul modèle sert aux deux éditions :

```ts
headings: {
  levels: [{ level: 1, numberingTemplate: '第{1:一}回', numberSeparator: '　' }],
},
```

On obtient 第一回 à 第一百二十回, suivis d’une espace idéographique avant le titre. Un distique de 回目 s’écrit avec un saut de ligne dans le titre, `# 甄士隱夢幻識通靈 \\ 賈雨村風塵懷閨秀`. Un design de titre imprime `{titleText}` sur deux lignes, une moitié chacune : une bande d’ouverture, ou un `advancedDesign` dans la colonne, défini sur le niveau ou sur un style de titre (voir [Design sur toute la largeur et design avancé](https://postext.dev/fr/docs/configuration-text.md#étendue-et-maquette-avancée)). Partout ailleurs, les deux moitiés sont jointes par une espace idéographique : dans la table des matières, les titres courants et les signets du PDF, ainsi que dans un titre composé dans la colonne sans design, où le titre joint se coupe alors là où finit la mesure, souvent au milieu de la seconde moitié. Un saut entre un caractère chinois et un chiffre ou un mot latin (`# 示例市出版协会关于举办 \\ 2026年中文排版实务培训班的通知`) se compose avec l’espace Han–latin dans la colonne, la table des matières et les titres courants, et les signets du PDF et le titre du document le joignent sans rien. Aucun des deux exemples ci-dessous n’a de design : donnez-en un au titre quand le distique doit tenir sur deux lignes. `{1:words}` écrit le nombre en toutes lettres chinoises dans un document chinois (十二), et `{1:ordinal}` avec 第 (第十二). Une partie numérotée `:::part{number="卷三"}` vaut 3 pour les espaces réservés qui demandent un nombre.

Les listes ordonnées suivent la hiérarchie de GB/T 15834—2011 (一、 （一） 1. （1） ①), avec un `prefix` avant le numéro :

```ts
orderedLists: {
  levels: [
    { level: 1, numberFormat: 'simp-chinese-informal', separator: '、' },
    { level: 2, numberFormat: 'simp-chinese-informal', prefix: '（', separator: '）' },
    { level: 3, numberFormat: 'arabic', separator: '.' },
    { level: 4, numberFormat: 'arabic', prefix: '（', separator: '）' },
    { level: 5, numberFormat: 'circled-decimal', separator: '' },
  ],
},
```

Les types intégrés figure et tableau chinois numérotent par chapitre avec un trait d’union (图1-1, 表3-2). Les légendes chinoises ne mettent pas d’espace entre l’étiquette et le numéro, et mettent une espace idéographique avant le texte : `captionStyle: { labelNumberGap: '', labelSeparator: '　' }` donne 图1-1　大观园图, et un `:ref` se lit 图1-1. Le PDF écrit des étiquettes de page chinoises, si bien que la case du numéro de page du lecteur affiche 一, 二, 三 là où les pages les impriment.

L’index d’un livre chinois regroupe ses entrées par initiale pinyin (simplifié) ou par nombre de traits (traditionnel), à partir des données propres au collateur (`index.groupBy`, `'auto'` par défaut). Un caractère qui a plusieurs lectures est classé sous la lecture habituelle du collateur ; donnez à une telle entrée une clé `sort` écrite avec des caractères qui se lisent comme voulu : `:index[重阳]{sort="崇阳"}`. Voir [Index](https://postext.dev/fr/docs/configuration-notes-references.md#index).

### Notes de bas de page

Un livre continental numérote ses notes (页下注) avec des nombres cerclés qui recommencent à chaque page : ① est la première note de chaque page, composée sur la ligne de base dans le texte et en tête de la note. La plupart des livres de Taïwan et de Hong Kong font de même.

```ts
footnotes: { numberFormat: 'circled-decimal', numbering: 'page' },
```

Avec `circled-decimal`, l’appel de note est composé dans la ligne par défaut (`markerPosition: 'auto'`) ; `markerSize: { value: 0.75, unit: 'em' }` le compose plus petit que le texte. Les nombres au-delà de 50 n’ont pas de forme cerclée et s’écrivent en chiffres décimaux. Le numéro d’une note dépend de la page où elle tombe : un document numéroté par page est donc d’abord mis en page par chapitre, numéroté selon l’endroit où ses notes sont tombées, puis mis en page de nouveau ; un appel cerclé a la même chasse quel que soit son numéro, si bien que la seconde compilation ne déplace aucune ligne. `numbering: 'column'` recommence à chaque colonne, pour les livres qui composent leurs notes colonne par colonne. Comme un exposant, l’appel reste avec le caractère qui le précède et n’ouvre jamais une ligne, et dans un texte vertical il se tient debout dans une cellule à lui. **Réglages chinois**, dans le Sandbox, liste ces réglages parmi ses modifications. Voir [Notes de bas de page](https://postext.dev/fr/docs/configuration-notes-references.md#notes-de-bas-de-page).

## Écriture verticale

`layout.writingMode: 'vertical-rl'` compose le livre de haut en bas. Toute la composition décrite ci-dessus s’applique sans changement, le long de la ligne verticale au lieu de la ligne horizontale ; ce qui change, c’est la page autour et la façon dont se tient chaque caractère.

### La page tournée d’un quart de tour

Une page verticale se met en page comme une page horizontale tournée d’un quart de tour dans le sens des aiguilles d’une montre. Ses lignes sont les colonnes du texte vertical, lues depuis la droite, et tout ce que le moteur fait avec les lignes (coupure, justification, flottants, notes de bas de page, règles de maintien, équilibrage) fonctionne dans ce repère tourné. Sur la feuille :

- Une colonne de la mise en page devient un **étage** (栏). `layoutType: 'double'` donne deux étages superposés de haut en bas, remplis à partir du haut à droite, le filet de colonne devenant un filet horizontal entre eux. Les étages ne sont pas équilibrés en fin de chapitre ([clreq §7.1.3.4](https://www.w3.org/TR/clreq/#x7-1-3-4-handling-of-spaces-just-before-the-new-recto-page-breaks-and-new-edges)).
- Le haut du flux est le bord **droit** de la feuille : une ouverture de chapitre est une bande le long du côté droit de la page, un flottant en haut se place à droite, un flottant en bas à gauche, et les notes de bas de page arrivent à l’extrémité gauche de chaque étage.
- `page.margins` gardent leurs noms sur la feuille. Les titres courants, les folios, les traits de coupe et le fond restent eux aussi sur la feuille.
- Un style de titre peut définir son propre mode d’écriture, si bien qu’une annexe ou un index horizontal peut suivre un livre vertical.

Un hôte qui lit la mise en page trouve `VDTPage.flow` sur une page verticale, ainsi que des fonctions utilitaires (`flowToPage`, `pageToFlow`, `flowRectToPage`) pour passer du flux à la feuille et inversement. Voir [Écriture verticale](https://postext.dev/fr/docs/configuration-page-layout.md#écriture-verticale) dans la référence de configuration.

### Reliure à droite

`page.binding` vaut `'auto'` par défaut, et auto désigne le bord droit pour un livre vertical. La page 1 reste impaire et reste le recto, si bien que les réglages de parité, `:::pagebreak{parity="odd"}` et le décompte des pages gardent leur sens ; ce qui change, c’est le côté où se trouve le recto : la page de gauche de la double page (clreq §7.1.3.3). Avec des marges en miroir, les pages impaires portent leur marge intérieure à droite. Le Sandbox affiche les doubles pages sous la forme 3 | 2, la page 1 seule à gauche du dos, et sa visionneuse HTML fait défiler les pages de droite à gauche. Le PDF demande la même chose aux visionneuses (`/Direction /R2L` et `/PageLayout /TwoPageRight`) ; Acrobat et Foxit en tiennent compte, la visionneuse intégrée de Chrome non. Un livre horizontal peut lui aussi être relié à droite. Voir [Reliure](https://postext.dev/fr/docs/configuration-page-layout.md#reliure).

### L’orientation de chaque caractère

Le choix des caractères qui se tiennent debout et de ceux qui sont tournés suit la propriété d’orientation verticale d’Unicode ([UAX #50](https://www.unicode.org/reports/tr50/)), complétée par les conventions chinoises de l’annexe A de clreq :

- Les caractères Han, les kana, le bopomofo et les lettres pleine chasse se tiennent debout, sur un em chacun.
- Les mots latins et les nombres plus longs que la limite de composition debout (section suivante) sont tournés d’un quart de tour dans le sens des aiguilles d’une montre et gardent leur chasse horizontale.
- Les parenthèses et les guillemets prennent leurs formes verticales (﹁﹂﹃﹄︵︶). Dans un texte continental, “ ” ‘ ’ se lisent 『』「」, comme le prescrit GB/T 15834—2011 §5.2.3.
- Les signes de pause et de fin ne sont jamais tournés, bien qu’UAX #50 tourne ：； pour le japonais. Une police continentale place 、，。． en haut à droite de la cellule et ！？：； dans sa moitié droite (GB/T 15834—2011 §5.2.1) ; les polices de Taïwan et de Hong Kong les centrent.
- Les tirets, les points de suspension et le tiret ondulé suivent la colonne ; un 破折号 forme un seul filet le long de l’axe des caractères.
- Les signes qu’Unicode compose debout (× © ± § ℃ ①) se tiennent dans une cellule à eux, y compris à l’intérieur d’un nombre : `30×40` donne 30, × et 40, tous debout.

La chasse de la ponctuation, la compression, le débord et l’espace Han–latin fonctionnent le long de la ligne verticale comme le long de la ligne horizontale : un 、 en Kaiming occupe une demi-cellule, `」「` une cellule et demie, et `：；？！` gardent une cellule entière dans toutes les régions.

### Nombres composés debout

Un nombre court se lit mieux debout dans une cellule que couché sur le côté : c’est le tate-chu-yoko (縱中橫, [clreq §2.1.3](https://www.w3.org/TR/clreq/#x2-1-3-mixed-text-composition-in-vertical-writing-mode)). `cjk.uprightDigits` fixe le nombre de chiffres qu’un tel nombre peut avoir : `2` par défaut, `3` ou `4`, ou `0` pour aucun. Le nombre se tient debout tout entier dans la cellule ou pas du tout, si bien qu’avec la valeur par défaut `2026年9月28日` compose 2026 couché, 9 debout et 28 côte à côte dans une cellule ; `A4`, `3.14` et `10,000` restent couchés avec leurs lettres et leurs séparateurs. Un nombre à l’intérieur d’une phrase anglaise la suit sur le côté : dans `chapters 49 and 32`, les deux nombres suivent les mots qui les entourent, tandis qu’un nombre voisin d’un caractère chinois se tient debout (`第 3 回`, `用iPhone 15拍攝`), de même que les nombres d’une heure, d’un score ou d’une date dans un texte chinois, dont les deux-points et les traits d’union mènent à des caractères chinois (`上午12:30开会`, `比分3:2`). Trois marques remplacent le réglage à la main :

```markdown
第:tcy[120]回，:upright[GDP]增長:sideways[12]倍。
```

`:tcy[…]` compose son texte dans une seule cellule debout, resserré à l’em quand il est plus large ; `:upright[…]` met chaque caractère debout dans une cellule à lui, pour un sigle lu lettre par lettre ; `:sideways[…]` tourne le passage. Dans un texte horizontal, ces marques ne changent rien. Les textes littéraires écrivent généralement les nombres en chiffres chinois, qui n’ont besoin de rien de tout cela.

### Figures, tableaux et légendes

Les figures et les tableaux restent droits dans un livre vertical. Une figure remplit la hauteur de son étage autant que sa légende le permet, et la largeur qu’elle prend sur la feuille correspond à la place qu’elle occupe dans le flux ; sa légende est composée horizontalement dessous, comme les cellules d’un tableau (clreq note que les légendes, les tableaux et les numéros de page conservent généralement l’écriture horizontale, §2.1.1). Un tableau plus haut que son étage voit ses lignes réparties sur plusieurs étages. Un `placement.rotate` est ignoré là où une figure est citée pour la première fois dans un texte vertical, avec un avertissement `rotateIgnoredVertical`.

### Titres courants et folios

Les titres courants et les folios restent sur la feuille et sont composés horizontalement, comme dans la plupart des livres verticaux (clreq §7.2). Deux autres conventions sont courantes, et pour elles un élément de texte peut être composé verticalement (`writingMode: 'vertical-rl'`) et ancré à la marge extérieure de la page (`anchor.to: 'outer'`) :

- **Titres en marge extérieure** : le titre du chapitre descend le long de la marge extérieure, en commençant environ quatre caractères sous le haut du bloc de texte, et le folio se termine environ cinq caractères au-dessus de son pied, en chiffres chinois, à environ 80 % du corps du texte. Le Sandbox les ajoute en une étape (**En-tête › Titres en marge extérieure (vertical)**).
- **Folio au coin extérieur du pied de page**, comme le demandent les règles de Taïwan pour les livres verticaux : un élément horizontal dans le pied de page, en bas à gauche des pages impaires et en bas à droite des pages paires d’un livre relié à droite.

Le modèle se trouve dans la référence de configuration, sous [Éléments de texte verticaux](https://postext.dev/fr/docs/configuration-page-layout.md#éléments-de-texte-vertical).

### Le texte vertical dans chaque sortie

Le canvas peint lui-même une page verticale, chaque caractère debout étant retourné autour du centre de sa cellule. Pour utiliser les formes verticales de la ponctuation propres à la police, un hôte navigateur charge un jumeau de chaque famille avec la fonctionnalité OpenType `vert` activée (`loadVerticalAlternates`) ; le Sandbox le fait pour chaque famille d’un livre vertical, et sans ce jumeau le moteur tourne ou déplace lui-même les signes. Le PDF affiche les caractères debout par un second dictionnaire de police en mode vertical (`Identity-V`) qui pointe vers le même fichier incorporé, mis en forme avec `vert`, si bien que les lecteurs sélectionnent et copient une colonne comme une seule ligne et que rien n’est incorporé deux fois ; un PDF balisé déclare `WritingMode /TbRl`. Le HTML compose chaque ligne comme une boîte avec `writing-mode: vertical-rl`, et `text-combine-upright` pour les nombres réunis dans une cellule. Les trois sorties placent chaque caractère à quelques centièmes d’em près de la mise en page verticale de HarfBuzz.

## Marques et annotations

Les éditions chinoises marquent le texte entre les lignes plutôt qu’avec l’italique ou le soulignement, glosent les caractères par leur lecture et composent le commentaire à l’intérieur de la ligne. Cinq directives couvrent ces usages. Chacune garde son texte dans le paragraphe, si bien que la recherche, la table des matières, les ancres d’index et le texte copié lisent les caractères tels qu’ils sont écrits ; seul ce qui est dessiné autour d’eux dépend de la configuration.

```markdown
此事:dots[不可]輕忽。:name[賈寶玉]與:name[林黛玉]讀:book[西廂記]。

{滿紙|mǎn|zhǐ}荒唐言，:ruby[一把]{rt="yì bǎ"}辛酸淚！

寶玉:warichu[甲戌側批：此是第一首標題詩。]{open="〔" close="〕"}道：
```

### Points d’emphase

`:dots[…]` place un point d’emphase (着重号) sous chaque caractère dans un texte horizontal et à sa droite dans un texte vertical, et aucun sur la ponctuation (clreq §5.3.1 ; GB/T 15834—2011 §4.12, et §5.2.5 pour le texte vertical). `style` choisit un point, un cercle ouvert ou un point en forme de grain de sésame. L’emphase Markdown fait de même dans un document chinois : `cjk.emphasis` y vaut `'dots'` par défaut, si bien que `*不可*` imprime des points, puisqu’une police chinoise n’a pas d’italique sur lequel se replier. Les lettres latines à l’intérieur de la même emphase gardent leur italique.

### Marques de nom propre et de titre d’ouvrage

`:name[…]` trace le trait de nom propre (专名号) sous le texte, à sa gauche dans un texte vertical. `:book[…]` imprime la marque de titre d’ouvrage (书名号) comme l’indique `cjk.bookTitleMark` : 《》 autour du titre, comme l’écrivent les livres continentaux modernes (〈〉 pour un titre à l’intérieur d’un autre), le trait ondulé dessous des éditions classiques et taïwanaises, ou rien. Une même source sert donc à une édition continentale moderne et à une édition classique. Là où deux noms ou deux titres se touchent, chaque trait cède un huitième d’em à la jonction, si bien que `:name[賈寶玉]:name[林黛玉]` se lit comme deux noms.

### Ruby : pinyin et zhuyin

`:ruby[紅樓]{rt="hóng lóu"}` place une lecture au-dessus de chaque caractère ; avec autant de lectures que de caractères, une ligne peut couper entre eux, et `group` place une seule lecture au-dessus du mot entier. La forme compacte `{紅樓|hóng|lóu}` se lit de la même façon quand la base contient des caractères chinois, si bien que `{x|x>0}` dans une prose latine reste du texte. Les lectures en bopomofo (zhuyin) se tiennent dans une colonne à droite de chaque caractère, avec la marque de ton à côté de la colonne et la moitié de son encre au-dessus du dernier symbole (clreq §5.5.3.3) ; le pinyin se place au-dessus du texte horizontal et à droite du texte vertical. Une lecture plus large que sa base élargit la boîte de la base, moins un quart du corps du ruby, qu’elle peut faire déborder sur un voisin sans lecture. `cjk.ruby` règle la police, le corps (la moitié de celui du texte par défaut), la couleur et le côté par défaut.

### Warichu

`:warichu[…]` compose une note sur deux rangs en demi-corps à l’intérieur de la ligne (双行夹注), la forme du commentaire dans les éditions classiques. Le rang supérieur prend au moins la moitié de chaque partie, si bien que le rang inférieur n’est pas le plus long, et un signe qui ne peut pas ouvrir une ligne n’ouvre jamais le rang inférieur ; quand les seuls pliages qui respectent cette règle tombent avant la moitié (`本名。`), le plus proche est retenu et le rang inférieur est le plus long (`本` au-dessus de `名。`). Une note longue remplit ce qui reste de la ligne et continue à la ligne, à la colonne ou à la page suivante, en laissant au moins deux de ses caractères de chaque côté de la coupure (`cjk.warichu.minChars`), et ses parenthèses ne se placent qu’avant le premier rang et après le dernier. Dans un texte vertical, la sous-colonne de droite se lit en premier. `cjk.warichu` règle le corps, la couleur et les parenthèses par défaut.

### La place dans l’interlignage

Le pas des lignes ne change jamais : points, traits et lectures vivent dans l’espace entre les lignes. La compilation avertit quand l’espace d’un paragraphe est trop étroit pour ce qu’il porte (moins d’un demi-em avec des marques d’un seul côté, moins de cinq huitièmes d’em avec des marques des deux côtés, clreq §5.6.1), en le signalant par `cjkMarksExceedLeading`, et par `rubyExceedsLeading` pour des lectures plus hautes que l’espace. Donnez aux paragraphes annotés un style de paragraphe avec plus d’interlignage. Les marques et les lectures sont dessinées dans les paragraphes, les titres, les éléments de liste, les citations et les encadrés, ainsi que dans les légendes, les cellules de tableau et les notes, dont l’espace entre les lignes est vérifié de la même façon ; les titres courants impriment le texte sans elles.

## Polices

Postext compose chaque style dans une seule famille et ne se replie pas sur une autre famille pour un caractère manquant : Noto Serif TC n’emprunte rien à Noto Serif SC. La police doit couvrir chaque caractère que le livre imprime, ponctuation comprise.

- **Dans le navigateur et le Sandbox**, une famille chinoise vient de Fontsource sous la forme d’une centaine de fichiers par graisse, chacun contenant une partie des caractères et déclaré avec sa `unicode-range` ; le navigateur charge les fichiers que le texte utilise. L’onglet PDF du Sandbox fait de même : son fournisseur de polices lit la feuille de style de la famille et passe à `renderToPdf` les tranches qu’utilisent les pages, chacune incorporée en sous-ensemble. Les sous-ensembles nommés de Fontsource sont incomplets (le `chinese-traditional` de Noto Serif TC n’a pas les ，！？ pleine chasse) : utilisez les tranches numérotées.
- **Dans un paquet**, livrez les polices réduites aux caractères du livre, ponctuation et formes verticales comprises. Extrayez un fichier statique par graisse d’une police variable : pdf-lib incorpore l’instance par défaut d’une police variable, si bien qu’un titre en gras s’imprimerait dans la graisse par défaut (`variableFontDefaultInstance`). Préférez les versions TrueType (Google Fonts, Fontsource) aux fichiers CFF `.otf`, que postext-pdf incorpore en entier, jusqu’à 25 Mo par graisse (`cffEmbeddedWhole`). Conservez les fonctionnalités de mise en page (`vert`, `vrt2`) et les métriques verticales (`vhea`, `vmtx`) lors de la réduction : la ponctuation verticale en dépend.
- **Les glyphes manquants** s’impriment sous la forme de la boîte vide de la police. `renderToPdf` les signale police par police (`missingGlyph`), et le Sandbox les liste dans le panneau Vérifications après chaque PDF.
- **La police de la région.** Noto Serif SC, TC et HK dessinent les mêmes points de code avec les formes de leur région, et placent les signes de pause et de fin là où leur région les place. La police d’un livre et sa langue doivent concorder.
- **Pas d’italique.** Les polices chinoises n’en ont pas ; le navigateur et le PDF inclineraient les glyphes. Marquez l’emphase avec des points, une police Kai (楷体, comme LXGW WenKai) ou du gras.

Les voix traditionnelles d’un livre chinois correspondent à des familles : Song (宋体, Noto Serif) pour le texte, Hei (黑体, Noto Sans) pour les titres et les étiquettes, Kai (楷体) pour les citations, les vers et les préfaces, Fangsong (仿宋) pour les documents officiels. La section [Polices chinoises, japonaises et coréennes](https://postext.dev/fr/docs/configuration-programmatic-usage.md#polices-chinoises-japonaises-et-coréennes) de la référence de configuration donne le code du fournisseur de polices.

## Deux configurations complètes

### Un roman de Chine continentale, composé horizontalement

Un livre au format 大32开, 28 × 28 caractères de Noto Serif SC en 10,5 pt, chapitres numérotés 第一章, notes numérotées ① à chaque page, ponctuation Kaiming et coupure des lignes GB tirées de la langue du document :

```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 ink = { hex: '#1a1a1a', model: 'hex' as const };

const config: PostextConfig = {
  locale: 'zh-Hans-CN',
  page: {
    sizePreset: 'custom', width: mm(140), height: mm(203),
    margins: { top: mm(18), bottom: mm(20), left: mm(16), right: mm(20), mirror: true },
  },
  layout: { layoutType: 'single' },
  bodyText: {
    fontFamily: 'Noto Serif SC', fontSize: pt(10.5), lineHeight: pt(16.5),
    textAlign: 'justify', firstLineIndent: { value: 2, unit: 'em' },
    color: ink, boldColor: ink, italicColor: ink,
  },
  headings: {
    fontFamily: 'Noto Sans SC', color: ink,
    levels: [
      { level: 1, fontSize: pt(16), numberingTemplate: '第{1:一}章', numberSeparator: '　',
        breakBefore: { enabled: true, parity: 'any' } },
    ],
  },
  captionStyle: { labelNumberGap: '', labelSeparator: '　' },
  footnotes: { numberFormat: 'circled-decimal', numbering: 'page' },
  cjk: { grid: { enabled: true, charsPerLine: 28, linesPerPage: 28 } },
  header: { elements: [] },
  footer: { elements: [
    { kind: 'text', id: 'folio', content: '{pageNumber}', fontFamily: 'Noto Serif SC', fontSize: pt(9),
      overflow: 'clip', color: ink, placement: { anchor: { to: 'container', edge: 'center' } } },
  ] },
};
```

La clé `cjk` ne définit que la grille : la région, la coupure des lignes, la chasse de la ponctuation, la compression et l’espace Han–latin suivent `zh-Hans-CN`. Les chapitres s’ouvrent sur l’une ou l’autre page, comme dans la plupart des romans continentaux (另页起).

### Un roman taïwanais, composé verticalement et relié à droite

Un livre au format 25開 (148 × 210 mm) en Noto Serif TC, 38 caractères par colonne, chapitres numérotés 第一回, titres en marge extérieure et folios en chiffres chinois ; la ponctuation centrée et pleine chasse de Taïwan et la coupure des lignes de base viennent de `zh-Hant-TW`, et la reliure à droite vient du mode d’écriture :

```ts
const config: PostextConfig = {
  locale: 'zh-Hant-TW',
  page: {
    sizePreset: 'custom', width: mm(148), height: mm(210),
    margins: { top: mm(24), bottom: mm(18), left: mm(16), right: mm(22), mirror: true },
    pageNumbering: { format: 'trad-chinese-informal' },
  },
  layout: { layoutType: 'single', writingMode: 'vertical-rl' },
  bodyText: {
    fontFamily: 'Noto Serif TC', fontSize: pt(10.5), lineHeight: pt(18),
    textAlign: 'justify', firstLineIndent: { value: 2, unit: 'em' },
    color: ink, boldColor: ink, italicColor: ink,
  },
  headings: {
    fontFamily: 'Noto Serif TC', color: ink,
    levels: [
      { level: 1, fontSize: pt(14), numberingTemplate: '第{1:一}回', numberSeparator: '　',
        breakBefore: { enabled: true, parity: 'odd' } },
    ],
  },
  cjk: { grid: { enabled: true, charsPerLine: 38 } },
  header: { elements: [
    { kind: 'text', id: 'head', content: '{chapterTitle}', writingMode: 'vertical-rl', pages: 'body',
      fontFamily: 'Noto Serif TC', fontSize: pt(8.4), overflow: 'clip', align: 'left', color: ink,
      placement: { anchor: { to: 'outer', edge: 'top' }, offset: { y: { value: 4, unit: 'em' } } } },
    { kind: 'text', id: 'folio', content: '{pageNumber}', writingMode: 'vertical-rl',
      fontFamily: 'Noto Serif TC', fontSize: pt(8.4), overflow: 'clip', align: 'left', color: ink,
      placement: { anchor: { to: 'outer', edge: 'bottom' }, offset: { y: { value: -5, unit: 'em' } } } },
  ] },
  footer: { elements: [] },
};
```

`parity: 'odd'` ouvre chaque chapitre sur un recto, qui dans ce livre est une page de gauche. `linesPerPage` est omis, si bien que la page prend autant de colonnes que sa largeur en contient. Les titres en marge extérieure descendent le long de la marge gauche des pages impaires et de la marge droite des pages paires, et `{pageNumber}` imprime 一百零三 à la page 103.

## Dans le Sandbox et le livre de recettes

Dans le Sandbox, **Maquette › Système d’écriture** regroupe la langue du document, le mode d’écriture, la reliure et tous les réglages `cjk`, et **Réglages chinois › Examiner…** prépare un livre pour le chinois en une étape, en listant d’abord chaque modification (voir [Sandbox](https://postext.dev/fr/docs/sandbox.md#panneau-maquette)). L’étagère des vitrines propose *Le Rêve dans le pavillon rouge* (紅樓夢, 程乙本 de 1792) en trois éditions : [en caractères traditionnels, verticale et reliée à droite](https://postext.dev/fr/sandbox.md#preset=hongloumeng&lang=zh-Hant), [en caractères simplifiés et horizontale](https://postext.dev/fr/sandbox.md#preset=hongloumeng&lang=zh-Hans), et les 56 premiers chapitres dans la traduction anglaise de H. Bencraft Joly. Le guide du Sandbox a [une édition chinoise](https://postext.dev/fr/sandbox.md#preset=postext-guide&lang=zh-Hans) composée de la même façon : verticale et reliée à droite, sur deux étages, avec des bandes de chapitre le long du bord droit, des titres courants le long de la marge extérieure et des folios en chiffres chinois. Le [livre de recettes](https://postext.dev/fr/cookbook?col=chinese-layout) réunit les recettes chinoises dans sa collection *Composition du chinois*, chacune étant une page ou une double page accompagnée du script qui la compose.

## Limites connues

- **Le coréen** est composé avec les valeurs par défaut du chinois continental ; ses propres règles (KLREQ) ne sont pas implémentées. Le japonais suit ses propres règles depuis postext 1.16 ([Composition du japonais](https://postext.dev/fr/docs/japanese-layout.md)).
- **Le texte de maquette** (titres courants, ouvertures, titres d’encadré, pages de partie) applique les règles de début et de fin de ligne, la chasse de la ponctuation et l’espace Han–latin du texte courant (`cjk.composeDesignText`, depuis postext 1.25), mais ses lignes sont en drapeau : l’espace n’est pas réparti entre les caractères.
- **Un seul mode d’écriture par page.** Un encadré horizontal dans une page verticale, des tableaux verticaux natifs avec la ligne d’en-tête à droite et des légendes à côté d’une figure debout ne sont pas disponibles. Les formules en ligne, les pastilles et les pastilles de couleur sont tournées sur le côté dans une ligne verticale.
- **Les numéros de ligne** ne sont pas imprimés dans un texte vertical : un livre vertical qui active `lineNumbers` n’en obtient aucun, avec un avertissement de configuration `lineNumbersUnsupported`. Les livres horizontaux numérotent leurs lignes comme les autres ([Configuration › Numéros de ligne](https://postext.dev/fr/docs/configuration-notes-references.md#numéros-de-ligne)).
- **Habillage.** Dans un texte horizontal, une image ou un encadré peut se placer d’un côté de sa colonne, avec le texte à côté (voir [Habillage](https://postext.dev/fr/docs/document-format.md#habillage-du-texte)) ; sous la grille de caractères, la place qu’il prend est un nombre entier de caractères, si bien que les lignes voisines restent sur la grille. Le texte vertical ne compose pas de texte à côté d’une figure : une figure habillée garde sa bande, avec un avertissement `textWrap` (`wrapUnsupported` pour la valeur par défaut d’un type de ressource).
- **Tabulations.** Un paragraphe horizontal qui contient une tabulation (`:tab`, ou un caractère de tabulation sous un style à taquets) est composé ligne par ligne : coupé entre les caractères selon les règles de coupure du document, mais sans compression de la ponctuation ni justification entre les caractères. Dans un texte vertical, il n’y a pas de taquets de tabulation : une tabulation est une espace entre mots, et un `:tab` déclenche l’avertissement de contenu `tabInVerticalText`. Un paragraphe avec ruby ou warichu compose lui aussi ses tabulations comme des espaces entre mots. Voir [Tabulations et taquets](https://postext.dev/fr/docs/document-format.md#tabulations-et-taquets).
- **Lettrines.** Un paragraphe horizontal peut s’ouvrir sur une lettrine d’un caractère (首字下沉), définie depuis un style de paragraphe ou un niveau de titre (voir [Lettrines](https://postext.dev/fr/docs/configuration-text.md#lettrines)) : sa taille rapporte la hauteur propre du caractère à celle du texte, et le compositeur compose les lignes raccourcies avec sa compression et sa justification habituelles. Le texte vertical n’a pas de lettrines : un paragraphe qui devrait s’ouvrir sur une lettrine est composé sans elle et déclenche l’avertissement de contenu `dropCap`.
- **Corps en points.** Il n’y a pas d’unités 号 ni Q.
- **Métriques verticales.** Chaque caractère debout avance d’un em ; les métriques verticales proportionnelles (`vpal`) et le crénage vertical ne sont pas utilisés.
- **Ruby et warichu** : pas de ruby des deux côtés, pas de lectures automatiques, pas de notes sur un seul rang ; les notes et les lectures dans le texte de maquette s’impriment comme du texte simple.
- **Polices** : pas de repli d’une famille sur une autre, pas d’italique dans les polices chinoises, polices CFF incorporées en entier.
- **Index** : un caractère qui a plusieurs lectures prend la lecture habituelle du collateur, sauf si son entrée a une clé `sort` ; l’ordre par radicaux n’est pas disponible.
- **Listings de code.** Un listing horizontal est composé ligne par ligne dans sa police de code ; dans une police à chasse fixe qui contient des caractères Han, un caractère pleine chasse occupe deux cases, si bien que les colonnes s’alignent, et une tabulation le compte pour deux. Dans un texte vertical, un listing suit le flux vertical, son texte latin tourné sur le côté comme le compose le texte vertical, et ne reçoit pas de numéros de ligne. Voir [Listings de code](https://postext.dev/fr/docs/configuration-styles.md#listings-de-code).

## Sources

- W3C, [Requirements for Chinese Text Layout (clreq)](https://www.w3.org/TR/clreq/), projet de note de groupe (Group Note Draft), 2026.
- W3C, [Requirements for Japanese Text Layout (JLREQ)](https://www.w3.org/TR/jlreq/), pour les titres courants des livres verticaux.
- Annexe n° 50 du standard Unicode (Unicode Standard Annex #50), [Unicode Vertical Text Layout](https://www.unicode.org/reports/tr50/).
- W3C, [CSS Writing Modes Level 4](https://www.w3.org/TR/css-writing-modes-4/) et [CSS Text Level 4](https://www.w3.org/TR/css-text-4/).
- W3C, [CSS Counter Styles Level 3](https://www.w3.org/TR/css-counter-styles-3/#limited-chinese), pour les styles de numération chinois.
- GB/T 15834—2011 《标点符号用法》 ([texte](https://people.ubuntu.com/~happyaron/l10n/GB%28T%2915834-2011.html)).
- GB/T 15835—2011 《出版物上数字用法》.
- Ministère de l’Éducation de Taïwan, 《重訂標點符號手冊》, édition révisée, 2008.
