Aller au contenu principal

Chapitre 15 · Partie II · Le métier

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

Mis à jour 2026-09-3026 minenescafrptzhjaar

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 liste chaque clé avec sa valeur par défaut, et le format de document décrit le balisage.

Les règles suivent la note du W3C Requirements for Chinese Text Layout (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).

Pages chinoises horizontales et verticalesDeux 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.Horizontal, relié à gauche此開卷第一回也作dos23page suivanteles lignes vont de gauche à droiteVertical, relié à droite此開卷第一回也作者自云因dos32page suivanteles colonnes partent de la droite
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), 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', 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éfautChine continentale (zh-Hans, zh-CN)Taïwan (zh-Hant, zh-TW)Hong Kong (zh-HK, zh-MO)
Coupure des lignes (lineBreak)gbbasicbasic
Chasse de la ponctuation (punctuationWidth)kaimingfullwidthfullwidth
Deux signes qui se suivent occupent 1,5 em (compressAdjacent)ouinonoui
Parenthèses rognées en bord de ligne (trimLineStart)ouinonoui
、,。 en texte horizontalen bas à gauche de la cellulecentréscentrés
、,。 en texte verticalen haut à droite de la cellulecentréscentrés
Point médian ·un demi-emun emun 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 titretrait ondulétrait ondulé
*…* sur des caractères chinois (emphasis)points d’emphasepoints d’emphasepoints d’emphase
Figure, tableau continué, voir图, (续), 见圖, (續), 見圖, (續), 見
Groupes de l’index (index.groupBy)initiales pinyinnombre de traitsnombre 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. 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 et dans le format de document.

#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 :

NiveauJamais en début de ligneJamais en fin de ligne
noneRien : les journaux de Taïwan et de Hong Kong coupent n’importe où.Rien.
basicLes 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 ¥ $ €.
gbbasic et la barre oblique / (GB/T 15834—2011 §5.1.9).basic et la barre oblique.
strictgb 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 (12:30) ; 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 ; 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). 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.

Où se placent les signes de pause et de fin dans leur celluleQuatre 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.horizontalementChine continentale甲乙丙丁Taïwan et Hong Kong甲乙丙丁verticalementChine continentale甲乙丙丁Taïwan et Hong Kong甲乙丙丁
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 :

StyleDans la ligneEn fin de ligneUsage
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.

Ponctuation pleine chasse et KaimingLa 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.Pleine chasse (全角式)曹雪芹著《红楼梦》(又名《石头记》)。19 emblanc cédéKaiming (开明式)曹雪芹著《红楼梦》(又名《石头记》)。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).

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). '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 :

  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 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) : 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 :

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.

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). 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 :

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é). 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 :

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.

#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.

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.

#É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).
  • 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 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.

#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), 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). 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 :

第: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.

#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.

此事: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 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 :

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 :

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). 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, en caractères simplifiés et horizontale, et les 56 premiers chapitres dans la traduction anglaise de H. Bencraft Joly. Le guide du Sandbox a une édition chinoise 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 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).
  • 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).
  • 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) ; 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.
  • 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) : 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.

#Sources