Chapitre 20 · Partie III · En pratique
Sandbox
Terrain de jeu interactif pour expérimenter avec le moteur de mise en page Postext
En bref
Le Sandbox est un outil gratuit de ce site pour essayer Postext sans rien installer. Vous écrivez votre texte d’un côté et voyez les pages terminées de l’autre, qui changent à mesure que vous tapez. Vous pouvez choisir les polices, le format des pages, les colonnes et les couleurs, et ajouter des images. Vous pouvez organiser votre travail en livre, avec des chapitres, et le télécharger en PDF ou en livre numérique EPUB. Votre travail est enregistré dans votre propre navigateur au fil de l’eau.
Un terrain de jeu interactif pour le moteur de mise en page Postext.
Le Sandbox vous offre une interface de type éditeur où vous écrivez le texte, gérez les ressources et les polices, ajustez la maquette et voyez le résultat en temps réel dans cinq vues synchronisées : canvas, PDF, Folio (le livre imprimé en 3D), HTML et EPUB 3. Il est fait pour expérimenter. Vous pouvez changer la typographie ou le nombre de colonnes, essayer différents placements de figures et observer la réaction du moteur. Les panneaux emploient le vocabulaire de l’édition (livres, figures, encadrés, titres courants) plutôt que les termes du moteur, si bien que les gens du livre s’y retrouvent sans connaître le schéma de configuration. Chaque contrôle est accessible au clavier et aux lecteurs d’écran.
#Disposition de l’interface
Le Sandbox comporte trois zones principales : une barre d’activité étroite pour passer d’un panneau à l’autre, une barre latérale redimensionnable qui contient le panneau actif, et une zone d’aperçu à droite avec les onglets de sortie. Les en-têtes des panneaux, la barre d’onglets de la zone d’aperçu et la case du logo en haut de la barre d’activité ont la même hauteur, si bien que la bande supérieure se lit comme un seul filet d’un bout à l’autre de la fenêtre.
#Barre d’activité
Une bande étroite sur le bord gauche porte un bouton par panneau. Chaque bouton affiche une icône avec une étiquette d’un mot en dessous, et une indication plus longue en infobulle (la même indication sert de description accessible au bouton). De haut en bas :
- Livres (icône
Files) : vos livres et les livres d’exemple - Chapitres (icône
BookOpen) : le livre ouvert et ses chapitres - Texte (icône
FileCode) : écrire et modifier le texte du chapitre courant - Ressources (icône
FolderOpen) : images, dessins SVG et tableaux utilisés dans le livre - Polices (icône
Type) : les caractères qu’utilise le livre, et vos propres fichiers de police - Maquette (icône
Settings2) : réglages de la page, de la typographie, des titres, des figures, des encadrés et de l’export - Vérifications (icône
AlertTriangle) : les problèmes de composition relevés dans la mise en page. L’icône porte une pastille qui compte en direct les avertissements en cours, plafonnée à99+.
Cliquer sur le bouton du panneau actif replie la barre latérale, et cliquer sur un autre bouton ouvre ce panneau. La barre constitue un seul arrêt de tabulation : les touches fléchées (↑ / ↓, en boucle), Début et Fin déplacent le focus d’un bouton à l’autre, et Entrée ou Espace ouvre le panneau qui a le focus.
L’application hôte peut ajouter ses propres éléments à la barre : un lien d’accueil sur le logo, facultatif, dans la case du haut (avec les props homeUrl ou homeLink), et un bouton de thème et un sélecteur de langue en bas. Les livres entiers s’échangent sous forme de fichiers .postext depuis le panneau Livres, et les en-têtes des panneaux Texte et Maquette exportent leur propre partie (voir Export et import).
#Panneaux de la barre latérale
La barre latérale est redimensionnable. Faites glisser le séparateur entre la barre latérale et la zone d’aperçu, ou donnez-lui le focus avec Tab et utilisez le clavier : ← / → changent la largeur de 2 % (10 % avec Maj), et Début / Fin sautent à la largeur la plus étroite et à la plus large. Le séparateur annonce sa valeur courante aux lecteurs d’écran, et la zone d’aperçu garde toujours au moins 200 px. La barre latérale se replie entièrement quand aucun panneau n’est actif, et sa largeur est mémorisée d’une session à l’autre.
Les lignes de réglages placent leur étiquette à côté du contrôle, ou au-dessus quand la barre latérale est étroite. Cela repose sur les container queries : la disposition suit la largeur de la barre latérale et non celle de la fenêtre.
Panneau Texte
Un éditeur CodeMirror 6 pour le Markdown du chapitre. Les lecteurs d’écran l’annoncent comme Texte du chapitre. Il offre :
- Coloration syntaxique : titres, emphase, liens, blocs de code et citations se distinguent visuellement, avec une coloration dédiée pour le front matter YAML, les zones de maths LaTeX, les pastilles en ligne (
:chip[…]: les crochets et les attributs sont marqués et le texte de la pastille est teinté), les petites capitales (:smallcaps[…]: les crochets sont marqués et le texte s’affiche en petites capitales), les marques d’orientation du texte vertical (:tcy[…],:upright[…],:sideways[…]: les crochets marqués, le texte souligné en pointillé) et les annotations chinoises (:dots[…],:name[…]et:book[…]avec leurs signes dessinés sous le texte ;:ruby[…]{rt="…"}et{紅樓|hóng|lóu};:warichu[…]avec la note composée plus petite). Taper:do,:na,:bo,:ruou:wapropose la directive - Complétion des pastilles : taper
:cen début de mot propose:chip[…](le curseur se place entre les crochets). À l’intérieur de{style="…"}, les identifiants des styles de pastille configurés sont proposés. - Complétion des petites capitales : taper
:smen début de mot (ou juste après*/_) propose:smallcaps[…], avec le curseur entre les crochets. - Tabulations :
:tabet:tab{…}sont colorés et proposés à la complétion comme les autres directives en ligne. La touche Tab de l’éditeur ne tape pas de caractère de tabulation, aussi:tabest-il la façon d’écrire une tabulation dans le Sandbox ; un caractère de tabulation collé avec le texte est conservé, et vaut tabulation dans un paragraphe dont le style définit des taquets. - Numéros de ligne et mise en évidence de la ligne active
- Retour à la ligne automatique pour les longs paragraphes
- Lignes de droite à gauche : une ligne dont le texte commence par une lettre arabe ou hébraïque se lit de droite à gauche, et le curseur et les touches fléchées la suivent. Le balisage qu’elle contient (attributs
{…}, étiquettes[^id], nom d’une directive, un:ref[fig-1]entier, maths, code, cibles de liens) reste de gauche à droite, pour se lire tel qu’il a été tapé. Les délimiteurs, le front matter et les lignes qui commencent par un mot latin restent de gauche à droite, comme avant. - Barre d’outils : elle commence par Annuler / Rétablir, suivis du gras, de l’italique, des niveaux de titre 1 à 3, du lien, du code en ligne, de la pastille (entoure la sélection de
:chip[…]), des petites capitales (l’entoure de:smallcaps[…]), de la citation, des listes numérotées et à puces, plus quatre boutons d’insertion de directives ::::pagebreak:::space: une ligne d’espace vertical (:::space{lines=N}pour davantage)- Colonnes : un groupe
:::columns{count=2}à deux colonnes, le curseur sur sa première ligne, dans le texte ou dans un encadré (depuis postext 1.25) :::numbering{format="decimal" startAt=1}: inséré avec des attributs d’exemple à ajuster
Un listing de code (un délimiteur ``` ou ~~~ et ses lignes) forme une seule zone dans l’éditeur : il reçoit un fond de code, et le balisage Postext qu’il contient (maths, pastilles, tabulations, marques d’index) reste sans couleur, puisque le moteur ne le lit pas. Les applications hôtes peuvent ajouter leurs propres boutons à la barre d’outils avec extraActions. L’éditeur transmet aussi son curseur et sa sélection aux aperçus, ce qui permet la synchronisation clic-curseur : cliquer sur du texte dans le rendu place le curseur à la position correspondante du Markdown, et les aperçus peuvent mettre en évidence la sélection courante.
L’en-tête du panneau sert de sélecteur de chapitre : flèches précédent/suivant, la position et le titre du chapitre, et un menu qui liste chaque chapitre du livre avec ses pages dès que sa pagination est connue (voir Livres et chapitres). Chaque chapitre a sa propre instance d’éditeur, de sorte que l’historique d’annulation et la position du curseur sont conservés par chapitre. L’en-tête offre ensuite cinq actions :
- Réinitialiser (demande confirmation) : recharge la partie document du livre d’exemple ouvert. Tous les chapitres et l’ensemble des figures sont remplacés par ceux de l’exemple (pour l’exemple intégré, le document d’exemple et les ressources d’exemple de la langue). La maquette n’est pas touchée, à l’exception des polices propres à l’exemple. Voir Panneau Livres.
- Exporter : télécharge le chapitre actif sous forme de fichier
.mdbrut, nommé<book>-<nn>-<chapter>.mddans un livre de plusieurs chapitres, et sinon d’après le livre ouvert oudocument.md - Importer : remplace le chapitre actif par le contenu d’un fichier
.md - Importer un document Word : ouvre un manuscrit
.docxet fait correspondre ses styles Word aux styles Postext avant que quoi que ce soit ne change (voir Documents Word) - Exporter vers Word : télécharge le chapitre ou le livre entier sous forme de
.docxqui retrouve chacun de ses styles lorsqu’on l’importe de nouveau
Panneau Livres
Le premier panneau de la barre d’activité : la galerie de vos livres et des livres d’exemple, avec le menu Nouveau, l’état de la dernière opération et la bannière d’un livre d’exemple qui a une nouvelle version. Dans le code et le stockage, un livre s’appelle encore un project, et un livre d’exemple un preset.
Cliquer sur un livre (ou sur l’une des étiquettes de langue d’un livre d’exemple) l’ouvre, et une fois qu’il est à l’écran la barre latérale passe au panneau Chapitres. Cliquer sur le livre déjà ouvert y mène directement. Les menus des lignes (renommer, dupliquer, télécharger, masquer, supprimer) ne changent jamais de panneau. Le livre ouvert reste marqué dans la liste. Le panneau comporte deux groupes :
-
Mes livres : des livres locaux et modifiables, stockés dans le navigateur (IndexedDB). Celui qui est ouvert est marqué ; ses chapitres se trouvent dans le panneau Chapitres.
Tant qu’un de vos livres est ouvert, le document de travail est ce livre. Chaque modification du texte, de la maquette, des figures et des polices y est enregistrée automatiquement (avec le même délai d’une seconde que pour
localStorage), si bien que vous pouvez passer d’un livre à l’autre et revenir sans rien perdre. Vous créez des livres depuis le menu Nouveau de l’en-tête :- Copie du livre ouvert copie le livre ouvert, ses figures et ses polices dans un nouveau livre.
- Livre vierge en commence un vide.
- Ouvrir un fichier .postext… importe un fichier.
Vous pouvez aussi dupliquer n’importe quelle ligne. Tant que vous n’avez aucun livre à vous, le groupe affiche un état vide avec le même raccourci. Chaque ligne a un menu ⋯ étiqueté (Autres actions pour « … ») avec Renommer…, Dupliquer, Télécharger (.postext) et Supprimer…. Supprimer demande confirmation juste à côté du bouton ⋯.
Renommer ouvre des champs de nom et de description dans la ligne. Entrée dans l’un ou l’autre champ valide les deux, et Échap annule.
Un livre porte aussi une image de couverture, affichée là où un livre d’exemple montre sa vignette. Faire une copie d’un livre d’exemple (ou d’un autre livre) reprend sa couverture. Pendant qu’on renomme une ligne, la couverture est le contrôle qui la définit : cliquez dessus pour choisir un PNG, un JPEG, un WebP, un GIF ou un SVG, ou utilisez le X à côté pour retirer la couverture actuelle. La couverture appartient au livre, pas à ses figures, et elle le suit à l’export et à l’import.
Un livre sans couverture en reçoit une tirée de sa première page (la première page de son premier chapitre) : la première fois que cette page est mise en page et peinte dans l’onglet Canvas, le Sandbox en prend une petite image (240 px de large, JPEG) pendant que le navigateur est inactif, une fois les polices et les images de la page chargées. Elle est enregistrée comme couverture du livre, si bien qu’un téléchargement l’emporte comme
thumbnaildu paquet. Un livre d’exemple livré sans vignette en reçoit une de la même façon, conservée dans le navigateur (le magasinpresetCoversde la base IndexedDB, une par exemple et par langue), affichée dans sa ligne et reprise par une copie ou un téléchargement de celui-ci. Une couverture existante n’est jamais remplacée, qu’elle vienne de l’exemple, d’un fichier importé, de votre propre choix ou d’une capture antérieure. Une couverture que vous retirez est reprise de la première page lors d’une visite ultérieure.Ouvrir un livre ne demande jamais de confirmation : le livre que vous quittez est enregistré d’abord, quel qu’il soit. Pendant le chargement du suivant, la zone d’aperçu affiche Ouverture du livre… au lieu du livre quitté. Supprimer le livre ouvert ramène à l’exemple intégré.
-
Livres d’exemple : des points de départ, listés sous vos livres. Le paquet lui-même n’est jamais modifié, mais vos modifications d’un livre d’exemple sont conservées : le premier changement en enregistre une copie (son brouillon) dans le navigateur, une par exemple et par langue, et la ligne affiche une étiquette Modifié. Rouvrir cet exemple, dans cette langue, ramène votre version ; un exemple que vous n’avez jamais modifié s’ouvre tel qu’il est publié. Le menu ⋯ de chaque ligne propose :
- Faire ma propre copie transforme l’exemple en un livre à vous qui détient ses propres copies des fichiers du paquet, de sorte que les modifications ultérieures du paquet sur disque ne le touchent jamais.
- Télécharger (.postext) enregistre l’exemple sous forme de fichier
.postext. - Masquer de la liste retire l’exemple de la liste (l’exemple intégré ne peut pas être masqué).
- Restaurer l’original… abandonne vos modifications de l’exemple (dans toutes les langues) et, s’il est ouvert, charge la version publiée à sa place. Il demande d’abord, et n’apparaît que sur les exemples modifiés.
Un exemple en plusieurs langues affiche une étiquette par langue, dans l’ordre où son manifeste les liste : 繁 et 简 pour le chinois traditionnel et le chinois simplifié, le code de langue (EN, ES) pour les autres ; l’infobulle nomme la langue dans la langue de l’interface (Charger la version chinois traditionnel). Un exemple dont l’original est dans une autre langue que l’interface (un roman chinois avec une traduction anglaise) indique la langue dans laquelle il s’ouvre (
openLocale, voir Format des paquets de préréglage), si bien qu’un clic sur sa ligne fait apparaître l’original.Les exemples masqués sont regroupés sous une section dépliable Livres d’exemple masqués en bas du groupe, chacun avec Afficher dans la liste. Ce choix est mémorisé dans
localStorage.
Un fichier .postext ouvert depuis le menu Nouveau devient un nouveau livre, ouvert. Un fichier en plusieurs langues demande d’abord laquelle importer, en commençant par celle dans laquelle il est écrit (la locale de son manifeste). L’export est une action propre à chaque ligne : la ligne du livre ouvert exporte ce qui est à l’écran. Un fichier .postext est un répertoire de paquet de préréglage compressé en zip (voir Export et import).
Les boutons Réinitialiser des panneaux Texte et Maquette restaurent l’exemple dont un livre a été copié. Un livre vierge ou importé n’a pas d’original : les boutons sont donc masqués tant qu’il est ouvert.
Panneau Chapitres
Le deuxième panneau de la barre d’activité ne montre que le livre ouvert. En haut figurent son nom, le genre de livre dont il s’agit (Votre livre, ou Livre d’exemple avec sa langue et une étiquette Modifié dès que vous le changez) et un menu ⋯ avec les actions qui s’y appliquent : Renommer… pour vos livres (un double-clic sur le nom fait de même), Dupliquer ou Faire ma propre copie, Télécharger (.postext), et Restaurer l’original… pour un livre d’exemple modifié.
En dessous, ses chapitres occupent le reste du panneau et défilent indépendamment (voir Livres et chapitres). Chaque ligne de chapitre affiche ses pages et son nombre de mots, et le chapitre actif est marqué. Un livre chinois, japonais ou coréen compte les caractères à la place : chaque caractère han, kana ou hangul compte pour un, de même que chaque mot latin au milieu d’eux. Ajouter un chapitre se trouve dans l’en-tête du panneau, à côté du nombre de chapitres ; les lignes se réordonnent en faisant glisser leur poignée (ou avec les touches fléchées sur celle-ci), et le menu ⋯ de chaque chapitre propose Renommer, Monter / Descendre, Diviser aux titres de niveau 1, Fusionner avec le chapitre précédent et Supprimer (le dernier chapitre ne peut jamais être supprimé).
Livres d’exemple (préréglages)
Un paquet de préréglage est un point de départ complet chargé d’un seul bloc : le Markdown des chapitres, une PostextConfig, les ressources (avec leurs données bitmap/SVG et leurs modèles de tableau) et les fichiers de police personnalisés auxquels la configuration fait référence. Le panneau liste tous les préréglages que le Sandbox peut atteindre et marque celui qui est ouvert :
- Préréglage intégré : le Guide Postext, le livre d’exemple par défaut livré avec le package. Il est toujours disponible, toujours en tête de liste, et public. Il existe en anglais, espagnol, catalan, arabe, chinois simplifié, japonais et portugais du Brésil (les boutons ES, CA, EN, ع, 简, 日 et PT de la ligne ;
#preset=postext-guide&lang=zh-Hansmène à l’édition chinoise,lang=arà l’édition arabe,lang=jaà l’édition japonaise,lang=pt-BRà l’édition en portugais du Brésil). L’édition arabe est un livre arabe : de droite à gauche, relié à droite, chiffres arabes orientaux, Amiri, Noto Kufi Arabic et IBM Plex Sans Arabic, justification par kashida et figures dessinées en miroir avec des légendes en arabe. L’édition chinoise a sa propre maquette (Noto Serif SC et Noto Sans SC, ponctuation et coupure des lignes de Chine continentale) et des figures dessinées avec des légendes en chinois. L’édition japonaise est elle aussi un livre vertical, composé selon les règles japonaises (JLReq) : Noto Serif JP et Noto Sans JP, texte en 9,25 pt sur deux registres de 34 caractères, titres de section sur trois lignes (行取り), titres courants et folios en chiffres arabes en tête et en pied, figures avec des légendes en japonais. Chaque interface ouvre le guide dans sa propre langue. Un guide chinois, japonais ou arabe non modifié ouvert depuis une autre interface (avec son bouton ou un lienlang=) reste dans sa langue, quelle que soit la langue de l’interface ; celui que l’interface chinoise, japonaise ou arabe a ouvert d’elle-même passe à la langue dans laquelle le Sandbox est ouvert la fois suivante, comme les autres éditions. - Préréglages distants : des paquets servis en HTTP depuis les URL de base passées dans la prop
presetSources(voir Props). Chaque source est publique ou privée. Les préréglages privés portent l’étiquette Privé dans la liste et sont destinés à des contenus qui ne doivent pas quitter une machine. Le site public ne liste une source privée qu’en développement local, où l’application Next.js sert le dossier désigné parPOSTEXT_PRIVATE_PRESETS_DIRvia/api/private-presets. La production ne la liste jamais. La source publique du site,/presets, sert ses livres d’exemple : Bioquímica, Deep Sky, Don Quijote, Physics (OpenStax), Spanish Painting et Signals 2020 en espagnol et en anglais, Dream of the Red Chamber en trois éditions, et Paradise Lost en anglais, avec les notes de Verity en notes de bas de page et les planches de Doré. Chacun est accompagné de sa licence et de ses crédits. default: true: un préréglage privé marqué par défaut est chargé automatiquement la première fois qu’un Sandbox vierge (document intégré non modifié) s’ouvre. Quand plusieurs sont marqués, celui dont lalocalecorrespond à la langue de l’interface l’emporte. Les préréglages publics ne sont jamais chargés automatiquement.
Chaque ligne affiche le nom du préréglage, une description facultative, son étiquette de langue et ses étiquettes Privé / Par défaut. Cliquer sur une ligne charge le préréglage en entier : texte, figures, maquette et polices. Le Sandbox écrit d’abord les fichiers de police et les données des figures dans IndexedDB, de sorte que les zones d’aperçu ne voient jamais un document à moitié appliqué. Cliquer sur une ligne ouvre l’exemple dans la langue de l’interface, sauf si vous ne l’avez modifié que dans une autre langue : c’est alors votre version la plus récente qui s’ouvre. Les étiquettes de langue d’un exemple bilingue l’ouvrent dans cette langue (votre version dans cette langue, si vous en avez une).
Préréglages suivis en direct. Les préréglages distants sont suivis automatiquement. Chaque fois qu’un préréglage est appliqué, le Sandbox enregistre l’empreinte du paquet ainsi que des hachages du Markdown, de la configuration et de l’ensemble de ressources qu’il a appliqués. Tant que la page est visible, il interroge l’empreinte toutes les 3 secondes, et immédiatement quand l’onglet redevient visible ou que la fenêtre reprend le focus. Quand l’empreinte change :
- Si le livre est intact (le Markdown, la configuration et les ressources ont toujours le hachage de ce que le préréglage a appliqué), le préréglage est réappliqué en entier et un bref avis apparaît dans le panneau.
- S’il y a des modifications locales, elles sont conservées. Une bannière en haut du panneau (Ce livre d’exemple a une nouvelle version. Vos modifications sont conservées.) propose Charger la nouvelle version, qui demande confirmation avant d’abandonner vos modifications de cette langue de l’exemple, et le bouton Livres de la barre d’activité affiche un point en attendant. Le brouillon se souvient de la version dont il est issu, si bien que la bannière revient chaque fois que vous l’ouvrez, jusqu’à ce que vous chargiez la nouvelle version. Les figures du brouillon dont les fichiers ont changé dans la nouvelle version gardent les octets qu’elles avaient : le brouillon en reçoit sa propre copie avant que ceux du paquet ne soient écrits. Les paquets ne sont suivis que tant qu’un livre d’exemple est ouvert. Un livre copié d’un exemple garde sa propre copie.
La même vérification a lieu au chargement : si vous modifiez un paquet puis ouvrez le Sandbox, celui-ci reprend la nouvelle version, pourvu que le livre soit intact. L’empreinte provient de <preset-dir>/fingerprint.json. Sur la route de développement, c’est un fichier virtuel qui renvoie un hachage du répertoire calculé sur les seules métadonnées (voir l’annexe Format des paquets de préréglage). Les sources qui ne le servent pas ne sont pas suivies.
Le livre d’exemple ouvert définit aussi ce que restaurent les boutons Réinitialiser des autres panneaux :
| Panneau | Ce que Réinitialiser restaure |
|---|---|
| Texte | Le texte de l’exemple et son ensemble de figures (la partie document) |
| Maquette | La maquette de l’exemple, polices comprises |
| Livres (Restaurer l’original…) | Tout : texte, figures, maquette et polices |
Un préréglage ouvert lors d’une session précédente mais qu’aucune source ne liste plus (typiquement un préréglage privé dans une version qui ne le sert pas) apparaît encore, grisé, avec la mention Indisponible dans cette version. Le Sandbox garde le contenu chargé au lieu de le remplacer en silence par l’exemple intégré. L’identifiant du préréglage ouvert est conservé sous la clé postext-sandbox-preset (voir Persistance). Le format des paquets est décrit dans l’annexe Format des paquets de préréglage.
Panneau Ressources
Gère les ressources du livre : images bitmap, figures SVG, tableaux et vidéos. Le texte y fait référence avec des blocs ::resource{id="…"} et des renvois en ligne :ref{id="…"}. Pour la syntaxe des renvois et le modèle des flottants, voir Format de document → Ressources.
Vue en liste. L’en-tête affiche le nombre de ressources. Les ressources sont regroupées par nom de type de ressource, et chaque groupe est une liste avec son décompte. Les ressources dont le typeId ne correspond plus à un type configuré tombent dans un groupe Sans type, pour rester accessibles. Chaque élément affiche une vignette de 36 px à côté de sa légende et de son identifiant : un véritable aperçu pour les bitmaps et les SVG, l’affiche avec un badge de lecture pour les vidéos, et un glyphe pour les tableaux. Quand le livre compte plus de six ressources, un champ de recherche (Rechercher des ressources…) filtre la liste par légende et par identifiant, sans tenir compte des accents. Quand le livre n’a encore aucune ressource, un état vide explique comment en ajouter et les placer dans le texte avec :ref{#id}. Un menu déroulant Nouveau propose quatre façons d’en ajouter une :
- Téléverser une image : PNG, JPEG, WebP ou GIF
- Téléverser un SVG
- Nouveau tableau : commence par une grille 2 × 2 avec une ligne d’en-tête
- Ajouter une vidéo : une vidéo YouTube ou Vimeo, un fichier vidéo, ou l’adresse d’une vidéo (un MP4 ou un flux HLS ; voir Vidéo plus bas). Un livre dont les types de ressources sont antérieurs aux vidéos reçoit le type intégré Vidéo lorsqu’il ajoute sa première vidéo.
Vous pouvez aussi glisser-déposer des fichiers depuis le disque sur le panneau, fichiers vidéo (MP4, WebM, Ogg, QuickTime) compris. Ils sont téléversés en lot, avec des identifiants tirés de leur nom de fichier. Les fichiers non pris en charge sont ignorés, et une courte note indique combien ont été ajoutés et combien ont été ignorés.
Vue détaillée. Sélectionner une ressource ouvre son éditeur :
- ID : modifiable et validé comme identifiant. Les identifiants en double sont signalés et jamais enregistrés, et un identifiant vide reçoit une suggestion tirée de la légende. Renommer conserve le fichier d’image ou de SVG enregistré.
- Type : l’un des types de ressources configurés
- Légende : accepte le Markdown en ligne (gras, italique, code et
:ref).\\, ou une barre oblique inverse en fin de ligne, commence une nouvelle ligne ; un simple saut de ligne compte comme une espace - Note : une ligne facultative de source, de crédit ou de remarque, composée plus petit sous la ressource (même mise en forme en ligne et mêmes sauts de ligne que la légende). Son style vient du groupe Note des réglages Légendes.
- Texte de remplacement : description d’accessibilité pour la sortie HTML
- Style de tableau : pour les tableaux, le style nommé dans lequel le tableau est composé (
table.styleId). C’est soit Style de tableau du document (par défaut), soit l’un des Styles de tableau déclarés dans les réglages. Un identifiant qu’aucun style ne déclare est listé comme manquant et s’affiche avec le style de tableau du document. - Placement :
- Position :
auto(le premier emplacement libre, par défaut),top,bottomouhere. - Étendue :
column,pageouside. Elle est désactivée quand la position esthere. Les valeurs par défaut sont celles du moteur,auto+column. - Colonnes : le nombre de colonnes adjacentes qu’occupe un flottant de colonne sur une page à plusieurs colonnes (
placement.columns), par exemple une image sur deux des quatre colonnes d’un journal. Autant de colonnes que la page en compte le rend pleine largeur. Le champ s’affiche quand le livre ou l’une de ses sections a plus d’une colonne et que l’étendue estcolumn, et pas pour une ressource placéehereou pivotée. - Orientation : droite, ou pivotée d’un quart de tour (haut vers la gauche, ou vers la droite). Une ressource pivotée occupe une page à elle seule, contre le dos, si bien que le choix de l’étendue est désactivé.
- Largeur : une fraction de largeur avec un alignement, pour les flottants et les insertions en ligne plus étroits que leur colonne. L’alignement place aussi un bitmap ou un SVG plus étroit que son emplacement en pleine largeur (un bitmap plus petit que la colonne, ou une figure que
layout.fitFiguresToPagea réduite) : il reste donc actif pour les images ; pour un tableau, il faut une largeur inférieure à 100 %. Une ressource pivotée n’a ni l’un ni l’autre. - Légende à côté de la figure : un interrupteur pour la colonne latérale d’une mise en page en colonne et demie. Il s’applique aux flottants de colonne et il est donc masqué quand la position est
here. - Réduire pour tenir : pour une image flottante, Jamais, Sur une page neuve ou Dans tout emplacement (
placement.shrink), avec Échelle minimale (placement.minScale) dès qu’elle se réduit ; et Largeur de la légende, Emplacement ou Image (placement.captionMeasure), pour toute image non pivotée. Les types de ressources proposent ces trois mêmes champs dans leur placement par défaut. - En tête de la page qui la cite : pour un flottant en haut ou automatique, sur une colonne ou sur toute la page, non pivoté (
placement.citingPage) : il peut prendre la tête de la page ou de la colonne où tombe la ligne qui le cite, le texte situé au-dessus du renvoi descendant sous lui. Les types de ressources proposent le même interrupteur dans leur placement par défaut. - Habillage : pour une ressource placée dans le texte ou un flottant d’une colonne, Aucun ou le côté de la colonne où elle se place avec le texte à côté (
placement.wrap), et son Écart d’habillage (placement.wrapGap) dès qu’elle est habillée ; une ressource habillée sans largeur propre affiche la part par défaut de la mise en page. Les types de ressources proposent les deux dans leur placement par défaut.
- Position :
- Données : des boutons de téléversement qui remplacent le fichier bitmap ou SVG
- Taille et résolution : pour un bitmap, ses pixels, la résolution qu’indique son fichier (non indiquée, ou 72 et 96 marqués comme lus non définis), sa taille naturelle en mm à la résolution à laquelle il est mis en page, et la résolution en ppp à laquelle il s’imprime là où la mise en page courante le place (la plus basse s’il est placé plusieurs fois). Sous le minimum du contrôle en amont, elle s’affiche dans le style des avertissements, sous le seuil critique dans le style critique, avec Ouvrir dans Vérifications pour un livre préparé pour l’impression. Résolution fixe la résolution propre de l’image en ppp (
bitmap.resolution; voir Format de document › Taille des bitmaps), et Utiliser les … ppp du fichier la remplit à partir du fichier. Une image téléversée garde la résolution qu’indique son fichier (bitmap.fileResolution). - Vidéo : pour une ressource vidéo (Format de document › Vidéos) :
- Source : YouTube, Vimeo ou Fichier.
- Adresse de la vidéo (YouTube, Vimeo) : n’importe quel lien de la vidéo. Quand il désigne une nouvelle vidéo, son affiche, la taille de son image et son titre sont récupérés sur la plateforme (le titre devient le texte de remplacement quand celui-ci est vide) ; Récupérer de nouveau l’affiche recommence. Un lien qui ne désigne aucune vidéo de la plateforme est signalé sous le champ.
- Fichier vidéo (Fichier) : le bouton de téléversement d’un fichier MP4, WebM, Ogg ou QuickTime, avec son format, sa taille et sa durée. Une première affiche est prise au dixième de la vidéo. Image de l’affiche lit le fichier : arrêtez-vous ou déplacez-vous sur l’image que vous voulez imprimer et appuyez sur Utiliser cette image comme affiche. Adresse de production : l’endroit où sera la vidéo publiée (
https://…), ouvert par le QR code et le lien du PDF ; sans elle, l’impression n’a ni QR code ni lien. - Adresse de la vidéo (Fichier, sans fichier téléversé) : la vidéo se lit depuis sa seule adresse, un MP4 ou un WebM sur un serveur ou un flux HLS (
.m3u8, marqué Flux HLS au-dessus du champ). Saisir une adresse lit la taille et la durée de la vidéo, et Image de l’affiche la lit depuis cette adresse, HLS compris. Choisir une image exige un serveur qui autorise les lectures cross-origin (CORS) ; sinon le panneau le signale, et l’affiche est téléversée à la place. Le QR code et le lien du PDF ouvrent cette adresse. - Affiche : l’image imprimée avec sa taille, et un bouton de téléversement pour la remplacer par une image de votre choix.
- Début (s) / Fin (s) : la partie lue ; 0 laisse le début ou la fin tels quels.
- Lecteur : les options de cette vidéo (commandes, bouton de téléchargement, plein écran, menu de vitesse, image dans l’image, lecture automatique, démarrage en sourdine, boucle, lecture en même temps que d’autres vidéos), chacune à Réglage du livre, Oui ou Non. Seules les options que le lecteur de la vidéo respecte sont listées.
- Zone de sécurité : pour les bitmaps et les SVG, la partie de l’image toujours visible (
Resource.safeArea; voir Format de document › Zone de sécurité). Le champ affiche une vignette avec la zone marquée et sa taille en pourcentage, ou Aucune quand l’image n’en a pas, avec les boutons Marquer la zone de sécurité / Modifier la zone de sécurité et Retirer la zone de sécurité. La boîte de dialogue montre l’image : faites glisser hors du rectangle pour en tracer un nouveau, à l’intérieur pour le déplacer, ou depuis ses poignées pour le redimensionner ; quand le rectangle a le focus, les touches fléchées le déplacent et Maj avec les flèches le redimensionne. Les champs Gauche, Haut, Largeur et Hauteur le définissent en pourcentage, et deux aperçus montrent le recadrage le plus haut et le plus bas que la zone autorise. - Polices du dessin : pour les figures SVG, les familles que nomme le texte du dessin (famille, graisse, style) et ce qu’il est advenu de chacune : intégrée avec sa taille, déclarée dans le SVG (le fichier porte sa propre
@font-face), aucun fichier de police (l’image se rabat sur un autre caractère) ou au-delà de la taille maximale. Les styles proviennent des polices personnalisées du livre, puis de Google Fonts, et ne sont intégrés que lorsque l’image est affichée ou exportée, jamais dans le fichier enregistré. Intégrer les polices du livre désactive ce mécanisme pour cette figure (svg.inlineFonts: false), pour un SVG qui porte ses propres polices ou doit rester tel quel. - Source SVG : pour les figures SVG, un éditeur de source sous le bouton de téléversement. Seuls les nœuds texte acceptent des modifications : le contenu des éléments
<text>/<tspan>, teinté dans l’éditeur. Toute saisie ailleurs est refusée, et les<,>et&tapés dans un nœud texte sont échappés pour que le fichier reste bien formé. Chaque modification est enregistrée après une courte pause sous forme de nouveau fichier, et la figure est redessinée (recoloration en encre unique comprise). L’éditeur signale quand le SVG n’a aucun nœud texte. - Aperçu : une maquette en direct de l’aspect de la ressource, avec
#à la place du numéro (les vrais numéros dépendent de l’endroit où la ressource tombe dans le document). La légende commence par l’étiquette que fixe le document : le préfixe de légende du type et le numéro (Figure #.), le préfixe seul pour un type numéroté avec un modèle vide (Do.), et rien pour un type sans préfixe de légende - Supprimer : demande d’abord confirmation, et avertit du nombre de références
::resource/:refdu texte qui resteraient sans cible
Éditeur de tableau. Les ressources de type tableau ouvrent un éditeur de grille interactif :
- Barre d’outils :
- Ajouter ou retirer des lignes et des colonnes, fusionner ou scinder des cellules.
- Activer une ligne d’en-tête ou une colonne d’en-tête.
- Régler l’alignement horizontal et vertical de chaque cellule (en haut, au milieu ou en bas). Le contenu de la cellule se déplace d’un bloc dans une ligne plus haute.
- Régler le fond de chaque cellule : un sélecteur de couleur, qui peut être lié à la palette, avec un bouton pour l’effacer. Le fond est écrit dans
TableCell.backgroundet affiché dans la grille.
- Largeurs de colonne : un poids numérique par colonne sous la grille (
2, 1, 1donne la moitié de la largeur à la première colonne ; vide signifie des largeurs égales), écrit danstable.model.columnWidths. Ajouter ou retirer une colonne garde les poids alignés, et un lien Largeurs égales les efface. - Coller comme tableau : coller du TSV (ou du CSV simple entre guillemets) remplit la grille
- Annuler/Rétablir : Cmd/Ctrl+Z et Maj+Cmd/Ctrl+Z
- Navigation au clavier : Tab / Maj+Tab (avec passage à la ligne suivante) et les touches fléchées passent d’une cellule à l’autre
- Cliquer pour modifier depuis l’aperçu : cliquez sur une cellule de tableau, une légende, une note ou un fragment de texte d’une figure SVG dans l’un ou l’autre onglet d’aperçu. Le panneau Ressources s’ouvre sur cette ressource et donne le focus au champ correspondant, le curseur sur le glyphe cliqué. Faire glisser sélectionne une plage dans la même cellule ou le même champ, et un double-clic sélectionne le mot. Tant que le champ a le focus, sa sélection est reportée sur la page sous forme de surbrillance (un fin curseur quand elle est vide), dans les onglets Canvas et HTML.
Toutes les modifications passent par des fonctions pures sur le modèle, exportées par le cœur de postext (addRow, addColumn, removeRow, removeColumn, mergeCells, unmergeCell, setCellContent, setAlignment et parseTSV), de sorte que le même modèle de tableau se comporte à l’identique dans le Sandbox et en dehors.
Panneau Polices
Affiche les caractères qu’utilise le livre et gère vos propres fichiers de police à côté du catalogue intégré de Google Fonts :
- Caractères de ce livre liste chaque famille qu’utilise la maquette. Chaque nom de famille est composé dans son propre caractère, avec son rôle (Corps de texte, Titres ou Autres éléments) et sa source : Google Fonts, Fontsource (une famille que Google Fonts n’a pas), Votre fichier, ou Introuvable pour une famille qu’aucune source ne possède. La source apparaît dès que le chargeur la connaît. Les caractères eux-mêmes se changent dans Maquette → Typographie et Titres et table des matières.
- Les fichiers avec lesquels un livre est mesuré. Une famille de Google Fonts ou de Fontsource est composée à partir des fichiers statiques de Fontsource sur jsDelivr (
@fontsource/<family>@5), un par graisse, style et sous-ensemble. Ce sont les fichiers que charge un pen des Recettes et qu’intègre le PDF, si bien qu’un livre coupe ses lignes aux mêmes mots dans les aperçus, dans son PDF et dans un pen. La ligne de commande met en page avecbodyText.shapingLanguage: 'host', si bien qu’une ligne peut y être coupée à un autre mot (voir Différences avec le Sandbox). Les aperçus déclarent les graisses et les styles qu’utilisent la maquette et les pages, et le navigateur charge chaque fichier quand le texte en a besoin. Depuis postext 1.30, les aperçus attendent aussi, avant de peindre un chapitre pour la première fois, chaque style que nomment ses pages mises en page, chargé pour les caractères de ces pages (une famille découpée en plus de 16 fichiers par style, chinoise ou japonaise, les charge comme avant). De postext 1.28.3 à 1.29.2, un style que seules les pages nomment, composé dans une écriture autre que latine (l’italique des résumés d’une table des matières arabe), était peint dans un caractère de substitution jusqu’à l’arrivée de son fichier. Une graisse située entre deux fontes d’une famille variable (une 450) n’a pas de fichier statique : les aperçus la composent à partir du fichier variable de Google à cette graisse et le PDF intègre la fonte la plus proche ; choisissez donc une graisse que la famille possède quand les deux doivent concorder. Une famille pour laquelle Fontsource n’a pas de fichiers est prise dans la feuille de style de Google. Tous les fichiers d’une famille proviennent d’une même version de son package, celle avec laquelle jsDelivr a répondu pour sa feuille de style :@5désigne la version vers laquelle se résout chaque adresse, et après une version qui redécoupe une famille, ses fichiers pourraient provenir de deux découpages différents. - Un fichier lent, ou que le réseau ne fournit pas. Les fichiers des styles d’un livre sont récupérés avant sa première mise en page, et la mise en page les attend tant qu’ils continuent d’arriver : un livre de plusieurs centaines de fichiers (chinois ou japonais) sur une connexion lente est mis en page une seule fois, avec tous ses fichiers. Les requêtes ne sont abandonnées que lorsque aucun fichier de police n’a rien reçu pendant 15 secondes ; le chapitre est alors mis en page avec les styles arrivés, les autres dans le caractère de substitution que nomment ses avertissements. Une telle mise en page est provisoire : ses nombres de pages ne sont ni enregistrés avec le livre ni écrits dans un paquet. Le fichier est redemandé trois fois, à une demi-minute d’intervalle, et par chaque mise en page ultérieure ; quand il arrive, les aperçus et chaque chapitre mis en page sans lui sont remis en page, table des matières et renvois de page compris, et le PDF et l’EPUB sont marqués comme périmés.
- Une graisse ou une inclinaison que la famille n’a pas. Les aperçus et le PDF composent chaque famille dans ses propres fichiers. Quand une famille n’a pas de gras (Bangers, Zen Antique et la plupart des caractères de titrage ne livrent qu’une graisse) ou pas d’italique, le gras et l’italique sont composés dans son style le plus proche tel quel, sans les lettres plus épaisses ou penchées qu’un navigateur dessinerait, et aucun
fontFallbackn’est listé pour eux. Une graisse à laquelle répond un autre style réel de la famille (une 600 composée avec la 700) est listée. Une famille que propose Fontsource et pas Google Fonts, comme Commit Mono, est chargée depuis Fontsource. - Vos fichiers de police est l’endroit où vous ajoutez, renommez et supprimez des familles personnalisées.
- Téléversez des fichiers de variante par graisse (100–900) et par style (normal / italique). Les formats acceptés sont WOFF2, WOFF, TTF et OTF, reconnus d’après l’extension du fichier. Les fichiers sont stockés dans l’IndexedDB du navigateur.
- Les familles personnalisées apparaissent dans chaque sélecteur de police sous un groupe Personnalisées, à côté des résultats de Google Fonts. Une famille personnalisée l’emporte sur une police Google de même nom.
- Dans un document chinois, chaque sélecteur de police liste d’abord, sous Chinois simplifié ou Chinois traditionnel, les familles Google qui contiennent les caractères du document (les sous-ensembles
chinese-simplified,chinese-traditionaletchinese-hongkongde Fontsource), puis le reste. - Dans un document en arabe (ou dans une autre langue écrite en alphabet arabe), chaque sélecteur de police liste d’abord, sous Arabe, les familles Google qui ont le sous-ensemble
arabicde Fontsource, les caractères de labeur en tête (Amiri, Noto Naskh Arabic, Scheherazade New, Markazi Text, Lateef, puis Noto Kufi Arabic, Reem Kufi, Aref Ruqaa, El Messiri). Les aperçus chargent le fichier arabe de chaque style avant la première mise en page, et le PDF l’intègre avec le fichier latin quand le texte utilise les deux. - Les fichiers de police orphelins (téléversements qu’aucune famille n’utilise plus) sont supprimés automatiquement d’IndexedDB.
Panneau Maquette
Un éditeur à formulaires pour PostextConfig, avec plus de cinq cents champs.
Vue d’ensemble. À son ouverture, le panneau Maquette affiche une vue d’ensemble :
- Une carte Ce livre avec un dessin en direct de la page. Le dessin respecte les proportions réelles et montre les marges, les colonnes et les couleurs de la page et de l’encre, sous forme de double page quand les marges sont en miroir. Les lignes d’un livre vertical sont dessinées de haut en bas en partant de la droite, ses colonnes sous forme de registres. À côté figurent le format, la disposition des colonnes, le système d’écriture, le caractère et le corps du texte courant, et la palette. La ligne du système d’écriture nomme la langue du document et, quand ils relèvent d’un choix, le sens et la reliure (Vertical · relié à droite · 中文(繁體), De droite à gauche · relié à droite · العربية) ; elle ouvre Système d’écriture.
- La liste des treize groupes de réglages. Chaque groupe a une description d’une phrase et le nombre de sections que vous y avez modifiées.
Une page par groupe. Ouvrir un groupe affiche les sections de ce groupe sur une page à part. Seul ce groupe est construit, ce qui garde le panneau rapide même sur de gros livres.
- Un fil d’Ariane (Maquette › groupe) ramène à la vue d’ensemble.
- Des pastilles sous le titre de la page sautent à chaque section de la page.
- Un lien Suivant en bas ouvre le groupe suivant.
- Le focus passe au titre de la page quand vous ouvrez un groupe, et revient à la ligne du groupe quand vous revenez.
- Le groupe ouvert est mémorisé d’une session à l’autre.
Les groupes, dans l’ordre de navigation :
- Page et colonnes
- Page : les champs sont regroupés en Format, Marges, Papier et Numérotation.
- Format : les formats prédéfinis disent à quoi ils servent : Livre de poche 11 × 17, Roman, récit 12 × 19, Essai, manuel pratique 17 × 24 et Manuel scolaire, magazine 21 × 28 ; les formats de journal Grand format 37,5 × 59,7, Berlinois 31,5 × 47, Tabloïd 28 × 43 et Compact 29,7 × 42 (depuis postext 1.18) ; ou Personnalisé. Résolution de mise en page (px par pouce) (
page.dpi) se trouve aussi ici : les pixels dans lesquels travaille la mise en page, et non la résolution des images, bien qu’un bitmap sans résolution propre s’imprime à autant de ppp. - Marges : chaque marge est liée au dessin de la page. Pointer un champ de marge ou lui donner le focus teinte cette marge sur le dessin. Un interrupteur Marges en miroir transforme les marges gauche/droite en marges intérieure/extérieure pour les pages en vis-à-vis.
- Papier : la couleur de fond de la page.
- Numérotation : le format des numéros de page et le numéro auquel les pages commencent.
- Format : les formats prédéfinis disent à quoi ils servent : Livre de poche 11 × 17, Roman, récit 12 × 19, Essai, manuel pratique 17 × 24 et Manuel scolaire, magazine 21 × 28 ; les formats de journal Grand format 37,5 × 59,7, Berlinois 31,5 × 47, Tabloïd 28 × 43 et Compact 29,7 × 42 (depuis postext 1.18) ; ou Personnalisé. Résolution de mise en page (px par pouce) (
- Colonnes : la disposition se choisit sur des cartes illustrées : Une colonne (romans, essais), Deux colonnes (manuels, magazines, ouvrages de référence), Colonne et demie (une colonne principale plus une colonne latérale étroite pour les notes et les petites figures) ou Plusieurs colonnes (trois à huit colonnes égales pour les journaux et les magazines, avec un nombre de Colonnes ; depuis postext 1.18). La section comporte aussi la gouttière, la colonne latérale, Réduire les figures qui ne tiennent pas (
layout.fitFiguresToPage), Résolution des bitmaps (layout.bitmapResolution: Dpi de la page, Du fichier, qui lit aussi la résolution des images téléversées auparavant, ou Fixe avec sa valeur en ppp), Réduire les images flottantes avec son Échelle minimale (layout.floatShrink), Flottants en tête de la page qui les cite (layout.floatsAtCitingPage) avec Flottant maximal en tête de sa page de citation (layout.maxTopFraction), Flottants sous un titre pleine page, dès la première colonne (layout.floatsUnderOpener, activé par défaut depuis postext 1.25 : un flottant placé juste après un titre composé sur plusieurs colonnes prend la tête de la première), Espace autour des figures en ligne (layout.inlineResourceGap), Espace autour des figures dans les encadrés (layout.inlineResourceGapInBoxes), Lignes d’un paragraphe à une coupure d’encadré (layout.boxChildSplitMinLines), Colonnes dans le texte, et groupes qui se coupent (layout.flowColumns, activé par défaut depuis postext 1.25 : un groupe:::columnshors d’un encadré compose ses blocs en colonnes, et un groupe qui ne tient pas continue dans la colonne ou la page suivante) et Flottants finaux collés au texte (layout.hugClosingFloats). - Habillage : Écart d’habillage, Texte le plus étroit à côté, Lignes minimales à côté et Largeur habillée (
layout.wrap), les valeurs par défaut des images et des encadrés que le texte longe.
- Page : les champs sont regroupés en Format, Marges, Papier et Numérotation.
- Système d’écriture. La page s’ouvre sur le dessin de Page et colonnes. Sa double page porte des folios : 2 | 3 dans un livre relié à gauche, 3 | 2 dans un livre relié à droite, dont la page impaire est celle de gauche ; la légende indique quand le livre est relié à droite et quand ses lignes sont verticales.
- Langue et sens d’écriture :
- Langue du document, avec le chinois sous la forme 中文(简体), 中文(繁體) et 中文(香港), et l’arabe sous la forme العربية, العربية (مصر) et العربية (المغرب) (la région fixe des valeurs régionales par défaut, comme les chiffres). Une étiquette absente de la liste (
es-ES,zh-TW,sv) s’affiche comme option supplémentaire, nommée d’après la langue qu’elle désigne. La changer renomme les types intégrés de figure et de tableau quand ce sont encore ceux de la langue précédente (un livre espagnol passé au chinois imprime 图 et 表, et non Figura et Tabla) ; les types que vous avez renommés gardent leur nom. - Sens du texte : Auto, qui indique ce qu’il donne (de droite à gauche pour l’arabe), De gauche à droite ou De droite à gauche (
direction). - Mode d’écriture, sur des cartes illustrées : Horizontal, ou Vertical, lignes de haut en bas et de droite à gauche (
layout.writingMode). - Reliure : Auto, qui indique ce qu’il donne (le bord droit pour un livre vertical ou de droite à gauche et pour une bande dessinée lue de droite à gauche), Bord gauche ou Bord droit (
page.binding). - Chiffres : Auto, qui indique les chiffres que donne la langue (٠ ١ ٢ ٣ pour l’arabe, 0 1 2 3 pour l’arabe du Maghreb et toutes les autres langues), Européens, Arabes orientaux ou Persans (
numerals). - Réglages chinois par défaut : Examiner… liste ce que change la préparation du livre pour le chinois. Choisissez Simplifiés 简体 ou Traditionnels 繁體 et le sens : un nouveau livre traditionnel commence en vertical, un nouveau livre simplifié en horizontal, et un livre déjà en chinois garde son sens. Chaque ligne montre le réglage tel qu’il est et tel qu’il devient : la langue du document (une étiquette chinoise de la même écriture, comme
zh-TW, est conservée), le mode d’écriture avec la reliure qu’il donne, Noto Serif et Noto Sans en SC, TC ou HK pour le texte courant et les titres (la ligne des titres nomme aussi les caractères que les niveaux et les styles de titre définissent pour eux-mêmes, et, cochée, elle les passe eux aussi dans le caractère chinois), un retrait de première ligne de 2 em, le retrait après les titres, pas d’espace entre les paragraphes, le texte justifié, pas de césure, 图 ou 圖 et 表 numérotés par chapitre ({h1}-{n}), des légendes composées 图1-1 标题 (rien avant le numéro, une espace idéographique après), des chapitres numérotés 第一章 (第{1:一}章, une espace idéographique avant le titre) et des listes numérotées 一、 (一) 1. (1) ①. Seul ce qui diffère est listé. Un réglage que vous avez changé vous-même arrive décoché, marqué votre réglage, et reste tel quel à moins que vous ne le cochiez ; la langue et le sens s’appliquent toujours, de même que la césure, qu’un document chinois désactive de lui-même (sauf si vous l’avez activée pour une langue latine nommée dans la langue de césure). Appliquer effectue les changements cochés en une seule étape, et Annuler, à côté de la confirmation, défait cette étape dans le même livre : chaque réglage qu’elle a changé revient à ce qu’il était, même si vous avez modifié depuis d’autres réglages du même groupe ; un réglage que vous avez changé de nouveau depuis reste comme vous l’avez laissé, et la confirmation le signale. Ouvrir un autre livre fait disparaître Annuler. - Réglages arabes par défaut (dans un document en arabe) : Examiner… liste ce que change la préparation du livre pour l’arabe. Choisissez les caractères : Classique, Amiri pour le texte courant et les titres, ou Moderne, Noto Naskh Arabic avec des titres en Noto Kufi Arabic. Les lignes : le sens ramené à Auto quand le livre était de gauche à droite (toujours appliqué), la reliure ramenée à Auto (le bord droit), les deux caractères, le caractère des textes de maquette (titres courants, folio, maquettes d’ouverture et de titre) composés dans un caractère sans lettres arabes, passé au caractère des titres pour que le PDF n’imprime pas de cases vides, un interlignage de 1,75 em, le texte justifié, pas de césure, les chiffres de la région quand le livre en nomme d’autres, شكل et جدول numérotés par chapitre, des légendes composées شكل ١-١: العنوان, des chapitres numérotés الفصل الأول (
الفصل {1:ordinal}, deux-points avant le titre), des listes numérotées ١- أ- (١) et des notes de bas de page renumérotées à chaque page, le tout avec les chiffres du document. Les coches, votre réglage, Appliquer et Annuler fonctionnent comme dans la liste chinoise. - Réglages japonais par défaut (dans un document en japonais) : Examiner… liste ce que change la préparation du livre pour le japonais. Choisissez le genre de livre : Vertical 縦組, un roman bunko ou tankōbon relié à droite sur une grille de caractères, ou Horizontal 横組, un livre technique relié à gauche. Les lignes : la langue du document et le mode d’écriture (toujours appliqués), la reliure ramenée à Auto, Noto Serif JP et Noto Sans JP pour le texte courant et les titres (et pour les textes de maquette composés dans un caractère sans kana), un interlignage de 1,75 em, la grille de caractères que contient une page verticale à ce corps (52 caractères au plus), un retrait d’un em sans espace supplémentaire entre les paragraphes, le texte justifié sans césure, les réglages typographiques chinois ramenés à Auto pour que les japonais s’appliquent, 図 et 表 avec des légendes composées 図1-1 …, des chapitres numérotés 第一章 (vertical) ou 第1章 (horizontal), des titres sur trois et deux lignes (行取り) avec leurs retraits, les numéros de liste japonais, les réglages chinois des notes ramenés à Auto, et des folios en kanji quand un folio vertical est placé le long de la tranche. Appliquer et Annuler fonctionnent comme pour le chinois. Dans un livre japonais, la barre d’outils de l’éditeur ajoute Ruby et En travers dans le texte vertical. Voir Mise en page japonaise.
- Langue du document, avec le chinois sous la forme 中文(简体), 中文(繁體) et 中文(香港), et l’arabe sous la forme العربية, العربية (مصر) et العربية (المغرب) (la région fixe des valeurs régionales par défaut, comme les chiffres). Une étiquette absente de la liste (
- Typographie d’Asie orientale (
cjk) : Conventions régionales (Chine continentale, Taïwan, Hong Kong, Japon) en haut, puis les champs en neuf groupes : Bords de ligne (Coupure des lignes : aucune, de base, GB, stricte, japonaise très stricte, japonaise stricte, japonaise souple ; Coupures entre caractères ; Titres d’œuvres : caractères à la coupure,cjk.titleMinChars; Chiffres cerclés : comme des caractères chinois ou comme des lettres latines ; Règles CJK dans le texte de maquette ; Rogner les parenthèses en bord de ligne ; Parenthèse en début de paragraphe : ①, ③ ou au fer ; Ponctuation débordante), Largeurs de ponctuation (Largeur de la ponctuation : kaiming, pleine chasse, demi-chasse en fin de ligne, demi-chasse ; Resserrer les signes adjacents), Espacement (Espace entre han et latin ; Espace après ? et !), Texte vertical (Nombres droits dans une cellule : désactivé, ou jusqu’à 2, 3 ou 4 chiffres,cjk.uprightDigits), Annotations (Emphase en texte chinois et japonais : ce qu’imprime*…*, des signes ou de l’italique ; Signe d’emphase, Remplissage du signe et Côté du signe ; Titres d’œuvres (:book) : des crochets, une ligne ondulée ou rien, et leurs Crochets, 《》 〈〉 ou 『』 「」 ; Couleur des signes), Ruby (le caractère, le corps, la couleur et la position des lectures, Débord des lectures, Alignement des lectures et Petits kana dans les lectures), Notes warichu (le corps, la couleur et les parenthèses ouvrantes et fermantes des notes), Signes kanbun (leur corps, leur couleur et l’emplacement des signes de retour) et Grille de caractères (caractères par ligne, lignes par page, la grille dessinée à l’écran, et l’indication 字 × 行 avec les marges que fixe la grille). Chaque Auto suit la langue du document et indique ce qu’il donne. Dans un document dont la langue n’est ni le chinois, ni le japonais, ni le coréen et qui n’en définit aucun, la section affiche une ligne qui le dit et un bouton Afficher les réglages ; une recherche montre les champs dans n’importe quel document. Mise en page chinoise et Mise en page japonaise expliquent l’effet de ces réglages ; les clés se trouvent sous Typographie d’Asie orientale, Écriture verticale, Nombres dans le texte vertical et Reliure.
- Langue et sens d’écriture :
- Couleurs
- Palette : des couleurs nommées que réutilise chaque sélecteur de couleur. Changer une entrée met à jour chaque référence à celle-ci.
- Contraste (
contrast) : Vérifier le contraste, le Niveau (AA ou AAA), Vérifié pour (Automatique, Écran, Impression, Écran et impression) et, sous Texte en réserve, les corps en dessous desquels un texte clair sur un fond encré est signalé. Les changer ne remet aucune page en page. Voir Vérification du contraste. - Le rapport à côté d’une couleur : un champ de couleur dont les pages utilisent la couleur comme texte, ou comme fond de texte, affiche le rapport de contraste le plus bas qu’elle y atteint, avec une coche quand il atteint le niveau et un signe d’avertissement sinon. Ouvrir le champ liste chaque couleur avec laquelle elle est associée (Texte sur #ffffff, Fond du texte #1a1a1a), le plus petit corps, et le rapport à l’écran et, pour un livre préparé pour l’impression, sur papier. Les chiffres suivent le sélecteur pendant que vous le faites glisser, avant que la page ne soit remise en page. Une couleur utilisée seulement pour des filets ou des bordures n’affiche pas de rapport.
- Typographie
- Texte courant : s’ouvre sur un spécimen typographique en vraie grandeur, composé dans le caractère, le corps, l’interlignage et la couleur courants, dans la langue du document : un livre chinois montre le début du 紅樓夢 dans son écriture,
*…*avec des points d’emphase, et le compose de haut en bas quand ses lignes sont verticales. Ses coupures de ligne sont celles du navigateur ; la page utilise celles de Postext. Les champs sont regroupés ainsi :- Caractère : police, corps, hauteur de ligne, et les graisses normale et grasse.
- Paragraphes : alignement (avec la césure, les limites de justification et Approche max. pour justifier (
bodyText.maxJustifyTracking) quand le texte est justifié, et Césure du texte en drapeau avec sa zone, Coupure optimale des lignes et Coupure optimale du texte en drapeau (bodyText.optimalRagged) quand il ne l’est pas ; sous un texte courant justifié, Coupure optimale du texte en drapeau suit Coupure optimale des lignes, pour les styles de paragraphe et les encadrés en drapeau ; Césure entre colonnes (bodyText.hyphenateAcrossColumns) sous la césure quand le texte courant est justifié, et sous Coupure optimale du texte en drapeau, tant que celle-ci est activée, quand le texte courant est en drapeau ; Couper les mots composés (bodyText.hyphenation.compounds) avec la langue de césure), Coupure après les tirets (bodyText.breakAfterDashes), Coupure après les traits d’union (bodyText.breakAfterHyphens), Répéter le trait d’union à la ligne suivante (bodyText.repeatHyphen), Sauts de ligne forcés (bodyText.hardLineBreaks), Taquets de tabulation (bodyText.tabStops: une liste de taquets, chacun avec sa position, son alignement, ses points de conduite, l’écart de ceux-ci et son caractère décimal) avec Intervalle de tabulation par défaut (bodyText.tabInterval), les retraits et l’espacement des paragraphes. - Couleur : les couleurs du texte, du gras et de l’italique.
- Langue : la langue du document, nommée dans sa propre langue. Elle se règle sous Système d’écriture ; la ligne ouvre ce groupe.
- Veuves, orphelines et lignes courtes (repliable) : comprend Pénalité graduée (
bodyText.gradedRuntPenalty), Resserrer contre les lignes creuses (bodyText.tightenRunts), Resserrement maximal de l’approche (bodyText.maxRuntTracking), et Garder les deux-points avec la liste avec Place sous les deux-points (bodyText.colonListRoom) : la place dont la ligne qui se termine par deux-points a besoin en dessous pour rester avec sa liste, ce qu’exige le premier élément ou une ligne comme jusqu’à postext 1.4. - Citations en bloc (repliable) : la couleur des citations
>, Citations en italique, Retrait des citations et Retrait de première ligne des citations (bodyText.blockquote). - Vers (repliable) : Poèmes sans séparateur (Ligne à ligne, ou En hémistiches (1.22)), Retrait par espace, Rejet (En retrait ou Au fer à droite) avec son Retrait du rejet ou son Signe de rejet, Espace entre strophes, Garder les strophes courtes entières et Resserrer avant de rejeter (
bodyText.verse, les valeurs par défaut des poèmes:::versecomposés ligne à ligne). - Renvois (repliable).
- Styles de paragraphe (
paragraphStyles) : des styles nommés pour les conteneurs:::paragraphs{style="…"}. Vous pouvez ajouter, supprimer et renommer des identifiants, puis régler la police, le corps, la hauteur de ligne, la couleur, les couleurs du gras et de l’italique, les graisses normale et grasse, les interrupteurs italique et petites capitales, l’alignement, la césure, le retrait gauche de chaque ligne, les retraits de première ligne et suspendu (mesurés depuis le retrait gauche), l’espace entre les paragraphes, les marges, Caler sur la grille (paragraphStyles[].snapToGrid), Casse (textTransform, capitales), Numéros de ligne (paragraphStyles[].lineNumbers: Comme le document, Comptées ou Non comptées), Taquets de tabulation avec Intervalle de tabulation par défaut (paragraphStyles[].tabStops,tabInterval), réglés comme dans le texte courant, et Lettrine (paragraphStyles[].dropCap) : les lignes sur lesquelles elle s’étend et descend, les lettres composées en grand, son caractère, sa graisse, son italique, son corps, sa couleur et son écart, le Signe d’ouverture (Avec la lettrine, Suspendu à l’extérieur, Dans la première ligne), l’Attaque (aucune, un nombre de mots ou la première ligne, en petites capitales ou en capitales), ce que fait un Paragraphe court (Garder l’espace, Réduire la lettrine, Sans lettrine) et Chaque paragraphe pour un catalogue d’entrées (voir Lettrines). Les champs non définis héritent du texte courant. Au-dessus des styles, Espace sous un conteneur (bodyText.paragraphContainerSpacing) indique comment l’espace sous un conteneur se combine avec le bloc qui le suit : Fusionner, ou Additionner (1.4). - Pastilles (
chipStyles) : des styles nommés pour la pastille en ligne:chip[text]{style="…"}. Le style intégréchips’affiche tant que la configuration n’en a aucun. Vous pouvez ajouter, supprimer et renommer des identifiants, puis régler :- Texte : police, corps, couleur, gras et italique. Chacun hérite du texte environnant tant que vous ne le définissez pas.
- Boîte : fond, épaisseur et couleur du contour, arrondi des coins, marges intérieures horizontale et verticale (avec Marge intérieure haute et Marge intérieure basse pour les régler séparément, ce qui centre une capitale dans une pastille ronde), et l’écart minimal avec les mots voisins.
- Code (
codeStyle) : Blocs de code délimités et Code indenté (la façon dont les listings sont lus) ; le Caractère du code, le corps, l’interlignage, Caler sur la grille, la couleur et la Largeur de tabulation ; la Boîte (étendue sur la page, fond, bordure, arrondi des coins, marges intérieures, espace au-dessus et en dessous) ; Lignes longues (Ligne plus large que la boîte : Renvoyer à la ligne, Réduire avec son Corps minimal, ou Couper ; le Retrait du renvoi et le Signe de renvoi) ; Numéros et lignes surlignées (Numéroter les lignes, la couleur des numéros et l’espace qui les suit, la teinte des lignes qu’un bloc met en évidence) ; la coupure Sur plusieurs colonnes et pages (garder ensemble, lignes de chaque côté, répéter le titre, la mention de suite) ; Couleurs syntaxiques (Intégré ou Aucun, et une couleur et un style par type de jeton, couleurs de la palette comprises) ; et Code en ligne dans un caractère de code avec son fond. Voir Listings de code. - Formules (
math), avec Retrait après une formule hors texte (math.indentAfterDisplay) et Garder avec sa ligne d’introduction (math.keepWithLeadIn). - Notes de bas de page (
footnotes) : Emplacement (pied de colonne ou fin de chapitre), Position dans la colonne à la fin d’un chapitre, Numérotation (par chapitre ou continue), le corps, l’interlignage, la couleur, l’alignement et le retrait suspendu des notes, les espaces au-dessus des notes et entre elles, et le Filet de séparation (longueur, épaisseur, couleur). Voir Notes de bas de page. - Numéros de ligne (
lineNumbers) : Numéroter les lignes, Compter (Vers ou Toutes les lignes), Toutes les (l’intervalle), Numéroter la première ligne, Recommencer (jamais, ou à chaque chapitre, section, page ou poème) avec le Premier numéro, Position (marge extérieure ou intérieure, gauche, droite, début de ligne, fin de ligne, colonne latérale), Avec des colonnes (bords extérieurs, dans les gouttières, à côté de chaque colonne), Distance au texte, Alignement, et le caractère, le corps, la graisse, l’italique, la couleur et le Format des numéros. Voir Numéros de ligne.
- Texte courant : s’ouvre sur un spécimen typographique en vraie grandeur, composé dans le caractère, le corps, l’interlignage et la couleur courants, dans la langue du document : un livre chinois montre le début du 紅樓夢 dans son écriture,
- Titres et table des matières
- Titres : des valeurs générales par défaut plus des réglages par niveau, de H1 à H6. Ils comprennent :
- la casse, l’Interlettrage (
levels[].letterSpacing, négatif pour resserrer), l’alignement (au fer à gauche, justifié, centré ou au fer à droite), le saut avant avec sa parité, et l’étendue ; - un interrupteur Revenir sur la grille après les titres (
headings.snapToGrid, activé par défaut : le texte revient sur la grille de ligne de base sous un titre), et par niveau Revenir sur la grille après ce titre (levels[].snapToGrid), qui le remplace pour ce niveau ; - un interrupteur Enrichissements dans les titres (
headings.inlineMarks, activé par défaut) : un titre compose l’italique, le gras, les exposants et indices, les petites capitales et les liens qu’il contient, comme un paragraphe ; désactivé, il imprime les mots marqués dans son propre style ; - par niveau, Masqué (structurel) (
levels[].hidden) : le titre n’imprime rien et n’occupe pas de place, mais il provoque toujours ses sauts, sa numérotation et alimente la table des matières, les titres courants et les signets du PDF ; - par niveau, Lettrine après le titre (
levels[].dropCap) : le premier paragraphe après un titre de ce niveau commence par une lettrine, avec les mêmes champs que celle d’un style de paragraphe ; - un éditeur avancé d’emplacement de maquette par niveau avec une hauteur minimale d’ouverture ; chaque élément d’une maquette de titre a un interrupteur Réserve de l’espace (désactivé : il est peint sans s’ajouter à la hauteur que le titre réserve) ;
- les leviers d’équilibrage des colonnes, avec leurs plafonds par levier, et Encadré en fin de colonne (
balancing.closingBox) : quand un encadré qui termine une colonne courte descend au pied de la colonne : en premier, après les autres leviers, ou jamais.
- la casse, l’Interlettrage (
- Styles de titre (
headingStyles) : des styles nommés appliqués avec{style="…"}sur une ligne de titre. Vous pouvez ajouter, supprimer et renommer des identifiants, et pour chaque style :- choisir si le titre est numéroté et listé dans la table des matières, et lui donner son propre modèle de numérotation ;
- désactiver Nommé dans les titres courants (
runningChapter) pour une planche ou une carte composée en H1 au sein d’un chapitre, afin que les titres courants continuent de nommer le chapitre qu’elle interrompt ; - remplacer la typographie du titre (interlettrage compris), le saut et l’étendue, Revenir sur la grille après ce titre et Masqué (structurel), et choisir la Lettrine après le titre : Comme le niveau, Propre (ses champs, comme ceux d’un style de paragraphe) ou Aucune ;
- donner à la section ses propres titres courants, éventuellement à partir de ceux du document ;
- régler ses marges et sa disposition en colonnes (avec le rôle et le bord de la colonne latérale, comme dans Colonnes, et son propre Réduire les figures qui ne tiennent pas) ;
- régler le style du texte, les surcharges de liste et les couleurs de la palette.
- Table des matières (
toc) : les niveaux de titre que liste un:::toc, avec la typographie des entrées de chacun. Elle couvre aussi les entrées non numérotées, les numéros de page, les points de conduite, la ligne de sous-titre lue dans un attribut de titre, et les lignes de partie avec leur propre emplacement de maquette.
- Titres : des valeurs générales par défaut plus des réglages par niveau, de H1 à H6. Ils comprennent :
- Listes
- Listes à puces, avec Caler le haut sur la grille (
unorderedLists.snapTopToGrid), qui arrondit vers le haut l’espace au-dessus d’une liste pour que son premier élément se place sur la grille de ligne de base. - Listes numérotées : pour chaque niveau, la police, la graisse, l’italique, la couleur et l’écart du séparateur à côté de sa numérotation ; Caler le haut sur la grille (
orderedLists.snapTopToGrid), comme pour les listes à puces ; et Colonne des numéros (orderedLists.numberWidth) : l’endroit où commence le texte d’un élément, après le numéro le plus large de sa propre série (Par série) ou de son niveau dans le chapitre (Par niveau), ou après le numéro propre à l’élément (Par élément), de sorte que chaque texte suive son étiquette à l’écart voulu. Alignement des numéros (orderedLists.numberAlign) place les numéros par rapport au texte, finissant ensemble (Contre le texte), ou au début de leur colonne, commençant ensemble (Au début).
- Listes à puces, avec Caler le haut sur la grille (
- Figures et tableaux
- Numérotation et placement (
resourceTypes) : pour chaque type de ressource :- les noms et les libellés courts ;
- les modèles de numérotation avec les variables
{n}et{h1}…{h6}, le format du compteur et le niveau de remise à zéro, et le préfixe de légende, avec un aperçu en direct du type « Fig. 1.7 » ; - un groupe Placement : la position par défaut du type, son étendue (colonne, page ou colonne latérale), Colonnes (le nombre de colonnes adjacentes qu’occupe un flottant de colonne de ce type sur une page à plusieurs colonnes ; autant que la page en compte le rend pleine largeur) et sa rotation, une fraction de largeur, un alignement pour les ressources plus étroites que leur emplacement (flottants et insertions rétrécis par la largeur, et images plus étroites que la colonne), et un interrupteur de légende à côté de la figure ;
- un style de légende propre, repliable, qui ne remplace que les champs de légende que vous définissez pour ce type (position, bande, couleurs, caractère) et hérite du reste.
- Légendes (
captionStyle) : caractère, corps, alignement et position au-dessus ou au-dessous de la ressource. Une bande de fond facultative a sa couleur et sa marge intérieure, et l’étiquette et la description ont des styles indépendants. Un groupe Note règle le corps, la couleur, l’inclinaison, l’alignement et l’écart de la note de la ressource. - Tableaux (
tableStyle) :- la typographie du corps et de l’en-tête, avec l’Interlettrage (
headerLetterSpacing) et la Casse (headerTextTransform) de l’en-tête, et les fonds ; - les bordures, avec un motif de filets : grille complète, horizontaux seulement, cadre extérieur, aucun ou Booktabs (un filet épais au-dessus et au-dessous du tableau, un filet fin sous l’en-tête, des filets raccourcis sous les en-têtes qui couvrent plusieurs colonnes). Booktabs affiche l’épaisseur de ses filets, les filets sous les en-têtes de regroupement et leur raccourcissement, Filets de groupe et, sous Tableaux plus hauts que la page, le filet sous une partie qui continue page suivante, et masque l’épaisseur des bordures et l’arrondi des coins ;
- un arrondi des coins pour le cadre extérieur ;
- la marge intérieure des cellules ;
- sous Tableaux plus hauts que la page, Quand un tableau ne tient pas (
overflow) et Appliquer aux tableaux placés dans le texte (splitInline, activé par défaut depuis postext 1.25 : un tableau placéherequi ne tient pas dans le reste de sa colonne est coupé entre deux lignes et continue dans la colonne suivante) ; - sous Cellules du corps, Lignes alternées (
bodyAlternateBackgroundEnabled), qui remplit une ligne du corps sur deux avec la Couleur des lignes alternées (bodyAlternateBackground), affichée tant que l’option est activée.
- la typographie du corps et de l’en-tête, avec l’Interlettrage (
- Styles de tableau (
tableStyles) : des styles de tableau nommés. Vous pouvez ajouter, supprimer et renommer des identifiants (renommer entraîne les tableaux qui utilisent l’identifiant), puis régler n’importe quel champ de Tableaux. Chaque contrôle affiche la valeur héritée de Tableaux tant que vous ne la définissez pas. - Diagrammes (
diagramStyle) : un interrupteur encre unique qui recolore les diagrammes SVG en teintes d’une seule encre pour l’impression en une couleur, plus un sélecteur de couleur d’encre qui prend par défaut la couleur principale de la palette, et Incorporer les polices au texte SVG (inlineFonts, activé par défaut), qui compose le texte de chaque SVG dans les polices du livre (voir Configuration › Polices dans le texte SVG). - Style des vidéos (
videoStyle) : le Signe de lecture (forme, position, taille, distance au bord, couleurs et opacité du fond) et le QR code (position, taille, distance au bord, correction d’erreur, marge, couleurs et arrondi des coins) imprimés sur l’affiche d’une vidéo ; Sorties : si l’affiche renvoie vers la vidéo, et si la visionneuse HTML montre le lecteur ou l’affiche ; et les options du Lecteur dont part chaque vidéo. Parmi elles, Lire en même temps que d’autres vidéos : activée, lancer un fichier vidéo laisse les autres en lecture, si bien que les boucles muettes d’une page tournent ensemble ; désactivée, en lancer une met les autres en pause. Elle s’applique dans la visionneuse HTML et dans Folio.
- Numérotation et placement (
- Encadrés
- Styles d’encadré (
calloutStyles) : des styles nommés pour:::callout{type="…"}. Vous pouvez ajouter, dupliquer, supprimer et renommer des identifiants, puis régler :- le titre par défaut, l’étendue, le placement et la largeur, et Colonnes : le nombre de colonnes adjacentes qu’occupe un encadré flottant (placement Auto, Haut ou Bas, étendue colonne) sur une page à plusieurs colonnes. L’attribut
columnsd’un:::calloutle remplace ; - le fond, la bordure, l’arrondi des coins et la marge intérieure, et une bande de bord ;
- une icône : soit un glyphe de texte, soit un SVG ou un bitmap choisi dans le panneau Ressources. Elle peut être placée en ligne ou comme badge d’angle, avec le côté de son angle et une largeur pour les illustrations non carrées.
- un groupe Onglet d’étiquette (
calloutStyles[].label) : police, corps, graisse, couleur, fond, angle, hauteur, marge intérieure, décalage et retrait, une ressource d’icône à côté de l’onglet, et un filet le long du bord supérieur ; - la typographie du titre, avec l’interlettrage, le retrait et l’Interlignage du titre (
titleStyle.lineHeight) ; - des surcharges du corps et des listes qui héritent du texte du document. Elles comprennent les couleurs du gras et de l’italique du corps, ses graisses normale et grasse, les interrupteurs italique et petites capitales, ses Taquets de tabulation et son Intervalle de tabulation par défaut (
body.tabStops,body.tabInterval), ainsi que le corps et la graisse de la puce. - une gouttière pour les groupes
:::columnsà l’intérieur de l’encadré ; - un interrupteur Caler sur la grille (
calloutStyles[].snapToGrid, activé par défaut ; désactivé, il conserve la marge inférieure exacte pour les encadrés empilés) ; - la colonne de marqueur, une ancre fixe, garder ensemble et le minimum de lignes à la coupure, et les contrôles de barrière des flottants ;
- un choix Encadré latéral en fin de colonne (
sideAtColumnEnd) pour les encadrés latéraux dont le texte ne continue pas dans la même colonne : à côté du texte qui précède le délimiteur, ou à côté du texte qui le suit ; - un groupe Encadrés coupés : répéter le titre avec un suffixe sur chaque suite (
repeatTitle,continuedSuffix), et une mention de suite sous chaque partie qui continue, avec son texte, son alignement et son italique (continuesMarkerEnabled,continuesMarker,continuesMarkerAlign,continuesMarkerItalic). Les textes sont par défaut dans la langue du document.
- le titre par défaut, l’étendue, le placement et la largeur, et Colonnes : le nombre de colonnes adjacentes qu’occupe un encadré flottant (placement Auto, Haut ou Bas, étendue colonne) sur une page à plusieurs colonnes. L’attribut
- Styles d’encadré (
- En-têtes et pieds de page
- En-têtes et pieds de page : des éléments de texte, de filet, de boîte et d’image par emplacement.
- Éléments de texte : alignement vertical, alignement du texte dans leur propre boîte (
align: au fer à gauche, centré ou au fer à droite, visible quand la boîte est plus large que le texte, ou justifié, qui étire les espaces de chaque ligne sauf la dernière de chaque paragraphe pour remplir la boîte et, avec la Césure activée, coupe un mot à une syllabe pour remplir une ligne), hauteur de ligne, approche (négative pour resserrer un titre de titrage), casse, une largeur et une hauteur ajustées, remplies ou fixes, et une largeur maximale. Marques en ligne (inlineMarks) compose**bold**,*italic*et les autres marques en ligne dans le texte de l’élément, et un contour dessine le tracé des lettres : Épaisseur du contour, Couleur du contour et Lettres évidées (stroke). - Filets : horizontaux ou verticaux.
- Variables, choisies dans la liste autorisée du moteur : numéro de page, nombre total de pages, nombre total de pages du livre, titre, sous-titre, auteur, date de publication, titre et numéro du chapitre, titre et numéro de la partie, et
{attr.key}pour un attribut de chapitre. Les en-têtes et pieds de page acceptent aussi le titre et le numéro du chapitre en haut de la page,{chapterTitleAtTop}/{chapterNumberAtTop}(voir Chapitre en haut de la page), et les mots-repères{firstMark.h2}/{lastMark.h2}(un niveau de titre ou un identifiant de style de paragraphe après le point ; voir Mots-repères). - Où apparaît un emplacement : la parité, et un filtre de pages : toutes, texte, ouvertures de chapitre, pages de partie ou pages blanches.
- Placement : le débordement, et une ancre au conteneur, à un élément voisin, ou au cadre de la page / du fond perdu pour des bandes bord à bord ; les éléments d’en-tête et de pied de page peuvent aussi s’ancrer à la Marge extérieure (
'outer'), la marge opposée au dos. - Mode d’écriture d’un élément de texte : Horizontal, ou Vertical, lignes de droite à gauche (
writingMode), pour des titres courants placés le long de la tranche d’un livre vertical. Titres en gouttière extérieure (verticaux), dans l’éditeur d’en-tête, ajoute le titre du chapitre quatre caractères sous le haut du bloc de texte et le folio cinq caractères au-dessus de son pied, tous deux verticaux, à 80 % du corps du texte, ancrés à la marge extérieure (voir Éléments de texte verticaux). - Un groupe Lettrine (lignes, police, graisse, corps, couleur et écart) et un retrait de paragraphe. Un texte avec lettrine revient à la ligne quel que soit son Débordement, et, sans corps défini, le haut de la lettre s’aligne sur les capitales de la première ligne.
- Tous les autres emplacements de maquette offrent les mêmes contrôles de texte.
- Éléments de texte : alignement vertical, alignement du texte dans leur propre boîte (
- En-têtes et pieds de page : des éléments de texte, de filet, de boîte et d’image par emplacement.
- Parties
- Parties (
parts) :- Page de partie (
parts.page) : la désactiver n’ouvre aucune page, et le numéro, le titre et les couleurs de la partie s’appliquent simplement à partir du contenu suivant. Elle masque aussi les réglages qui suivent. - la parité de la page sur laquelle s’ouvre un
:::part, et un saut facultatif après la partie avec sa propre parité ; - les marges de la page de partie. Elles héritent des marges de la page, avec les mêmes étiquettes intérieure/extérieure en miroir.
- un emplacement de design de l’ouverture, mis en page par rapport au cadre de coupe de la page. Son sélecteur de variables ajoute celles des titres : le titre courant, et son numéro en chiffres décimaux, romains ou alphabétiques.
- un style du texte pour les blocs à l’intérieur de la partie. Il hérite du texte courant et des couleurs de liste, et comprend les surcharges de liste (format et décalages de numérotation, marges, retrait suspendu, et les champs des listes de tâches).
- Page de partie (
- Parties (
- Export
-
Préparation pour l’impression (
print, etpage.cutLines), en quatre groupes :- Traits de coupe et fond perdu : les traits de coupe, le fond perdu, la longueur, le décalage et l’épaisseur des traits, et leur couleur à l’écran.
- PDF/X et couleur : Norme PDF (Aucune, PDF/X-1a:2003, PDF/X-4) ; Profil de sortie, parmi les quinze profils libres (FOGRA39 par défaut, FOGRA51 et FOGRA52 pour les conditions PSO v3, GRACoL, SWOP, papier journal) ; Importer un profil ICC pour celui que vous fournit votre imprimeur, avec sa Condition d’impression (le nom de registre que nomme l’intention de sortie PDF/X) et un bouton qui le retire ; Mode de rendu, Compensation du point noir, Convertir les images en CMJN (masqué pour PDF/X-1a, qui convertit toujours) et Limite d’encrage.
- Noir : Gris et noir en N seul, Surimpression du noir à 100 %, Noir enrichi pour les grandes surfaces avec sa recette C/M/J/N et la taille à partir de laquelle une surface passe en noir enrichi.
- Contrôle en amont : Contrôle en amont dans Vérifications, la résolution d’image minimale et critique, l’épaisseur minimale des filets, le corps en dessous duquel un texte en plusieurs encres est signalé, la zone de sécurité, la distance en dessous de laquelle une boîte devrait aller à fond perdu, et Vérifier les polices des PDF importés.
-
PDF : les signets, le PDF accessible (balisé) et l’espace colorimétrique forcé. Le CMJN est séparé avec le profil de Préparation pour l’impression.
-
Lecteur web (HTML) : les réglages
htmlViewer.
-
- Folio
- Visionneuse Folio (3D) (
folio), en cinq groupes : Vue (l’inclinaison et la rotation), Papier (sorte, grammage, main avec l’épaisseur qui en résulte, fini, texture et son intensité, teinte, transparence), Reliure (type, couvertures, matière et couleur de la couverture, image du dos ; le type Plié (journal) pose des feuilles pliées une fois les unes dans les autres sans rien pour les tenir, comme un journal, et comme il n’a pas de dos sur lequel imprimer, à l’instar de Piqûre à cheval (agrafé), l’image du dos est masquée), Surface (la matière du bureau et sa teinte) et Éclairage (environnement, exposition, ombres). Choisir une autre sorte de papier remplit les champs que vous n’avez pas changés avec les valeurs de cette sorte ; ceux que vous avez changés gardent les vôtres. Sur un format de journal, la sorte de papier et la reliure que vous n’avez pas choisies s’affichent comme Papier journal et Plié (journal). L’image du dos se choisit parmi les bitmaps et les SVG du panneau Ressources. Voir Onglet Folio.
- Visionneuse Folio (3D) (
- Avancé
- Aides à l’écran (
debug) : la grille de ligne de base (page.baselineGrid), qui se trouve ici plutôt que sous Page, et les autres calques de contrôle de la mise en page. - Avertissements : les problèmes que signale le panneau Vérifications, et leurs seuils.
- Aides à l’écran (
Trouver un réglage. La barre d’outils sous l’en-tête agit sur tous les groupes :
- Rechercher un réglage… filtre chaque champ de chaque section d’après son étiquette, son texte d’aide et le nom de ses options. La recherche ignore les accents et porte sur le début des mots : marg trouve Marge de tête et Margen superior, et h3 ouvre Titres › H3. Les résultats sont regroupés par groupe de réglages. Les sections correspondantes s’ouvrent automatiquement, les lignes et les sections qui ne correspondent pas sont masquées, et les occurrences sont mises en évidence. Échap efface la recherche, puis quitte le champ.
- Modifiés n’affiche que les champs dont la valeur diffère de la valeur par défaut.
Texte d’aide. Chaque champ a une courte explication. Les lecteurs d’écran l’entendent comme description du champ, et elle reste masquée à l’écran jusqu’à ce que vous l’ouvriez avec le bouton ? de la ligne (Qu’est-ce que « … » ?). L’interrupteur Afficher toutes les explications de l’en-tête ouvre toutes les explications à la fois, et ce choix est mémorisé.
Valeurs modifiées. Le panneau suit un modèle de surcharge cohérent :
- Les en-têtes de section portent un badge avec le nombre de champs modifiés qu’ils contiennent, groupes imbriqués compris.
- Un en-tête de section affiche un bouton de réinitialisation (qui demande confirmation) seulement tant qu’il contient des modifications.
- Un champ modifié a un point à côté de son étiquette (lu modifié) et son propre petit bouton de réinitialisation.
- Seule la sous-arborescence modifiée est enregistrée ou exportée. Les valeurs par défaut sont retirées, si bien qu’un Sandbox vierge stocke une configuration vide.
- Réinitialiser Page ne touche pas à la grille de ligne de base, puisque la grille se règle sous Avancé.
Les contrôles :
- Les choix sont des listes déroulantes dont les options peuvent porter une description d’une ligne, ou des boutons segmentés quand il n’y en a que quelques-uns.
- Les réglages activé/désactivé sont des interrupteurs.
- Les nombres ont des boutons − / +. Les touches fléchées font varier la valeur d’un pas, dix fois plus avec Maj et dix fois moins avec Alt.
- Les longueurs ont un sélecteur d’unité qui convertit la valeur quand l’unité change (cm, mm, in, pt, px, em, rem).
- Une couleur est un bouton unique qui montre la pastille de couleur et la valeur.
- Le sélecteur de police se parcourt avec les touches fléchées.
Les contrôles tiennent compte du contexte. La largeur de la gouttière n’apparaît que pour les mises en page à plusieurs colonnes, les réglages de justification n’apparaissent que lorsque le texte est justifié (le texte en drapeau affiche Césure du texte en drapeau à la place, et un style de paragraphe ou un encadré affiche son interrupteur de césure quand il est justifié ou que la césure en drapeau est activée), et le pourcentage de la colonne latérale n’apparaît que pour la mise en page en colonne et demie. Les changements prennent effet immédiatement dans l’aperçu. Pour une référence complète de chaque option de configuration et de sa valeur par défaut, voir la page Configuration.
L’en-tête du panneau offre aussi Réinitialiser (demande confirmation ; affiché seulement quand la maquette diffère de celle du livre d’exemple ouvert, et il restaure la maquette de cet exemple, polices comprises), Exporter et Importer. Voir Export et import.
Panneau Vérifications
Des diagnostics en direct, recalculés à partir du texte, de la maquette, des figures et de la dernière construction. Le décompte correspond au badge du bouton de la barre d’activité. Les avertissements sont regroupés par nature, dans l’ordre de tri : d’abord ce qui casse la sortie, puis le balisage, puis la composition fine, qui arrive en général en nombreux petits éléments. Chaque groupe est repliable et affiche son décompte :
-
Polices : une famille de police manquante, ou des variantes de graisse ou de style manquantes ou en double dans une famille personnalisée, et Liste de polices dans une famille : un réglage
fontFamilyqui contient une liste de polices CSS (le texte est composé dans sa première famille ; l’entrée nomme le chemin du réglage) -
Figures et tableaux : un identifiant de ressource inconnu dans un
::resource/:ref(aussi dans la légende, la note ou les cellules d’une figure qu’utilise le texte, ou comme image d’une cellule de tableau), des identifiants de ressource en double, des références à un type de ressource qui n’existe pas, des bitmaps affichés nettement plus grands que leur taille en pixels, un tableau dont l’identifiant de style ne désigne aucun style de tableau, une grille de tableau restée irrégulière (une cellule fusionnée dont les cellules couvertes manquent, ou une ligne avec un trou : fusionnez de nouveau les cellules dans l’éditeur de tableau), une image dont le fichier manque dans le stockage ou ne se décode pas (elle s’affiche comme espace réservé), un SVG dont le texte nomme une famille sans fichier de police à intégrer (Police manquante dans un SVG : l’image la compose dans un caractère de substitution) ou dont les polices dépassent le plafond de 2 Mo (Polices SVG trop lourdes à incorporer), et une vidéo sans affiche, un fichier vidéo sans adresse de production (pas de QR code ni de lien à l’impression) ou une adresse YouTube ou Vimeo qui ne désigne aucune vidéo, et une image flottante réduite pour tenir dans la place disponible sur sa page (Image réduite pour tenir : l’entrée donne l’échelle, et le dépassement en mm quand même son échelle minimale déborde du bloc de texte), et une image ou un encadré qui n’habille pas le texte comme demandé (Image ou encadré habillé : texte trop étroit à côté, trop court pour avoir des lignes à côté, renvoyé à la colonne suivante, ou placé dans un texte vertical) -
Texte et balisage :
- les sauts dans la hiérarchie des titres (par exemple H1 → H3), et les titres consécutifs sans texte entre eux ;
- les formules
$…$/$$…$$invalides ou non fermées ; - les noms de directive inconnus (tout nom que connaît l’analyseur est accepté :
pagebreak,columnbreak,space,numbering,toc,callout,paragraphs,partetcolumns), les attributs de numérotation ou de parité invalides, et un:::space{lines=N}hors de l’intervalle 0–20 lignes ; - un délimiteur de conteneur
:::resté ouvert à la fin du document (cliquer dessus donne le focus à sa ligne d’ouverture) ; - un
:::paragraphs{style="…"}, un:::callout{type="…"}, un:chip[…]{style="…"}ou un{style="…"}de titre dont le style n’est pas configuré ; - une ligne
::resourcequi s’imprime comme du texte, parce qu’elle est mal formée ou collée sous un paragraphe sans ligne vide ; - Balisage pleine chasse : du balisage tapé avec une méthode de saisie chinoise ou japonaise (
:::,#,[^…],{…},**…**), qui s’imprime comme du texte ; l’entrée montre la forme ASCII à taper ; - Clé d’attribut non lue : une clé d’attribut écrite hors ASCII (
作者=曹雪芹), que l’analyseur ignore ; - Bloc de code non fermé : un délimiteur
```ou~~~sans délimiteur de fermeture, si bien que le reste du texte est composé comme du code (unclosedCodeBlock; cliquer dessus donne le focus au délimiteur) ; - Tabulation dans un texte vertical : un
:tabdans un texte composé verticalement, qui est composé comme une espace entre mots, puisque les taquets de tabulation ne s’appliquent qu’au texte horizontal (tabInVerticalText) ; - Front matter ignoré : un chapitre autre que le premier qui commence par un bloc de front matter (seul le front matter du premier chapitre appartient au livre) ;
- Flux de colonnes inconnu : un
:::columns{flow=…}qui n’est nisnakeniparallel; le groupe prend la valeur par défaut (columnsFlowUnknown).
-
Maquette :
- les noms de variables d’en-tête et de pied de page hors de la liste autorisée du moteur (
{attr.…}et les variables de partie sont acceptées), et les variables dont la métadonnée du document manque ; - les ancres cycliques entre éléments de maquette, ou les ancres vers un élément qui n’existe pas. Cette vérification et celle des variables couvrent chaque emplacement de maquette : les titres courants, l’ouverture de partie, le verso blanc qui suit une page de partie, les lignes de partie de la table des matières, la maquette de chaque niveau de titre, et la maquette de chaque style de titre ainsi que les titres courants de sa section. Une entrée issue d’un style de titre nomme le style, comme dans
{style="index"} header · #rh → #missing, et une entrée issue du verso ou des lignes de partie de la table des matières nomme son réglage, comme danstoc.parts.design · #row → #missing; - les éléments de texte dont le débordement en mode rognage tronque toujours ;
- Texte de maquette tronqué : un texte de maquette qui ne tenait pas dans sa largeur et se termine par des points de suspension, ou qui a été rogné avec de l’encre au-delà de sa boîte (
designTextTruncated). L’entrée nomme l’emplacement et l’élément et donne le texte entier ; cliquer dessus ouvre la page où il a été coupé, et sélectionne un titre ou un titre du front matter dans l’éditeur. Un titre courant coupé sur chaque page d’un chapitre n’est listé qu’une fois ; - Maquette du titre coupée : une maquette de titre plus haute que ce que sa page peut contenir (le texte d’une ouverture mis en page au-delà du pied de la page, ou celui d’une maquette dans la colonne au-delà du pied de sa colonne : une longue accroche sur une petite page d’écran). Le titre réclame le reste de sa page ou de sa colonne, si bien que le texte qui le suit commence sur la suivante, mais cette partie de la maquette est perdue ; cliquer sur l’entrée donne le focus au titre ;
- Colonne latérale hors limites : une colonne latérale de colonne et demie que le moteur a dû brider pour laisser de la place à la colonne principale ;
- Nombre de colonnes hors limites : un nombre de colonnes d’une disposition
multiplequi n’est pas un entier de 3 à 8, que le moteur a borné ; - Format de numéro inconnu : un format de numéro de liste, de page ou de type de ressource que le moteur ne connaît pas, et qui numérote donc en décimal ;
- Réglage inconnu : une clé que n’ont ni les titres, ni un niveau de titre, ni un style de titre, ni un taquet de tabulation (un
letterSpacngmal orthographié), et que le moteur ignore ; l’entrée suggère le réglage le plus proche, quand il y en a un. - Pas de numéros de ligne en texte vertical : des numéros de ligne activés dans un document vertical, qui n’en reçoit aucun.
Ces quatre derniers, comme Liste de polices dans une famille, viennent de la configuration plutôt que du texte : l’entrée nomme le chemin du réglage, et cliquer dessus ne déplace pas l’éditeur.
- les noms de variables d’en-tête et de pied de page hors de la liste autorisée du moteur (
-
Contraste :
- Contraste faible : une couleur de texte en dessous du rapport que demandent son corps et sa graisse au niveau du livre (
contrast.level), par rapport au fond sur lequel elle est composée. L’entrée cite le texte et donne les deux couleurs, le corps, et le rapport à l’écran et, pour un livre préparé pour l’impression, sur le papier de son profil de sortie. Une paire n’est listée qu’une fois, avec le nombre d’endroits où elle apparaît ; - Texte en réserve trop fin pour la presse : un texte clair sur un fond encré en dessous des corps de Couleurs → Contraste → Texte en réserve, dans un livre préparé pour l’impression.
Chaque entrée nomme la page de sa première occurrence ; cliquer dessus ouvre cette page et sélectionne le texte dans l’éditeur.
- Contraste faible : une couleur de texte en dessous du rapport que demandent son corps et sa graisse au niveau du livre (
-
Composition :
- les lignes lâches (espacement des mots étiré au-delà du seuil configuré) ;
- Ligne justifiée composée en drapeau : une ligne d’un paragraphe justifié laissée courte parce qu’atteindre la longueur de ligne étirerait ses espaces au-delà de 3 fois leur largeur ; l’entrée cite la ligne et donne l’étirement qu’il aurait fallu, et un clic sélectionne la ligne ;
- Ligne CJK composée courte : une ligne de texte chinois, japonais ou coréen laissée plus courte que sa longueur de ligne parce que la remplir écarterait ses caractères au-delà de la limite ;
- Signes trop près de la ligne suivante et Lectures trop près de la ligne suivante : des points d’emphase, des lignes de nom et de titre, ou des lectures ruby qui demandent plus d’interligne que n’en a le paragraphe ; l’entrée donne les deux valeurs, en em ;
- les encadrés qui débordent de leur colonne ;
- Pastilles touchant la ligne voisine : une pastille dont la boîte empiète sur une pastille de la ligne du dessus ou du dessous (le chevauchement est donné en points) ; une pastille haute sans pastille au-dessus ni au-dessous n’est pas signalée ;
- les cascades de parité ;
- Numéro de ligne sur un encadré latéral : un numéro de ligne dans la colonne latérale (
lineNumbers.position: 'side') qui se trouve sur un encadré, une légende ou une figure de cette colonne ; les deux sont imprimés là où ils sont ; - Lettrine non composée selon la configuration : un paragraphe plus court que la descente de sa lettrine (l’entrée indique si la place a été gardée, la lettrine réduite ou omise), un paragraphe coupé avant la dernière ligne de la lettrine dans une colonne trop courte pour elle, un paragraphe dont la première lettre se lie à la suivante (arabe), un paragraphe en texte vertical, ou un paragraphe qui ne commence par aucune lettre (
dropCap) ; - Ligne de code plus large que son bloc : un listing dont des lignes sont plus larges que sa boîte, renvoyées à la ligne, réduites (l’entrée donne le corps) ou coupées, selon ce qu’indique Code → Lignes longues (
codeOverflow) ; - Colonnes trop étroites : un groupe
:::columnsdont les colonnes sont plus étroites que six em de leur texte (columnsTooNarrow) ; - Encadré ou figure latéral après la fin du texte : un encadré latéral, ou une figure de la colonne latérale, placé sur une page sans texte parce que le texte de son chapitre s’est terminé pendant qu’il attendait de la place dans la colonne latérale ; l’entrée nomme la page (
afterText) ; - Sur aucune page : un encadré ou un flottant qui attendait encore un emplacement à la fin de la mise en page, et qui ne se trouve sur aucune page (
unplaced) ; - Liste courte coupée entre colonnes : une liste de quelques éléments composée sur deux colonnes ou deux pages ; listée quand Texte courant → Listes courtes coupées entre colonnes est sur Avertir, et sur Éviter pour une liste qu’aucune colonne ne pouvait contenir entière (
shortListSplit) ; - Flottant sur une page d’ouverture : une figure, un tableau ou un encadré flottant sur la page où s’ouvre un chapitre ou une partie ; listé quand Colonnes → Flottants sur les pages d’ouverture est sur Avertir (
openerFloat) ; - Pas de motifs de césure pour cette langue : la langue du document (sa langue de césure, sinon
locale) n’a pas de motifs fournis, si bien que son texte est coupé avec ceux de l’anglais américain. L’avertissement disparaît quand la césure est désactivée.
-
Contrôle en amont, pour un livre préparé pour l’impression (une norme PDF/X, un PDF CMJN ou des traits de coupe), les constats critiques en premier :
- Résolution d’image faible : une image sous la résolution minimale à sa taille imprimée (critique sous le seuil critique), calculée à partir des pixels que contient réellement son fichier ;
- Pixels déclarés différents du fichier : un bitmap dont la largeur et la hauteur déclarées ne sont pas celles du fichier (un avertissement quand il en déclare davantage) ;
- Image RVB : séparée en CMJN à l’export, ou gardée en RVB par un PDF/X-4 qui ne convertit pas les images ;
- Filet trop fin, Petit texte en plusieurs encres, Encrage au-delà de la limite (une couleur CMJN saisie, la recette du noir enrichi) ;
- Texte dans la zone de sécurité et S’arrête juste avant la coupe (une boîte ou une image qui devrait aller à fond perdu) ;
- Polices non incorporées dans un PDF importé, RVB dans un PDF importé et Transparence dans un PDF importé (critique en PDF/X-1a), d’après l’original d’impression de chaque figure.
Chaque entrée nomme sa page ; cliquer dessus ouvre cette page dans la visionneuse.
-
Navigateur : stockage indisponible (IndexedDB absent)
Chaque entrée affiche une icône, un titre, un détail d’une ligne et, le cas échéant, le chapitre et la ligne source (Chap. 2 · Ligne 12 dans un livre de plusieurs chapitres). Cliquer sur une entrée qui a un emplacement source passe à ce chapitre et donne le focus à l’éditeur à cet endroit. Quand tout va bien, le panneau affiche Rien à signaler. Les vérifications effectuées se règlent dans Maquette → Avancé → Avertissements.
#Zone d’aperçu principale
La partie droite de l’interface affiche le rendu. Cinq onglets sont disponibles, un par mode de rendu, dans cet ordre : Canvas, PDF, Folio, HTML et EPUB 3. Changer d’onglet ne relance pas la mise en page : le même VDT alimente chaque moteur de rendu, si bien que le contenu affiché est cohérent d’un mode à l’autre. L’onglet Folio n’est proposé que là où le navigateur dispose de WebGL2 et où l’écran n’est pas celui d’un téléphone (voir Onglet Folio).
Chaque zone d’aperçu exécute la chaîne de mise en page dans un Web Worker dédié (postext/worker). Un hook useLayoutWorker propre à chaque zone d’aperçu détient la référence du worker, lui transmet les polices sous forme d’ArrayBuffer transférables, et pilote les constructions avec une annulation où la dernière demande l’emporte : une frappe ou le déplacement d’un curseur interrompt l’AbortSignal de la construction précédente avant que la suivante ne commence, de sorte qu’une frappe rapide n’accumule jamais de travail périmé sur le thread principal. Démonter une zone d’aperçu libère son worker et rejette toute construction en attente. Voir Configuration → Exécuter la mise en page dans un Web Worker pour le schéma d’intégration utilisé ici.
Onglet Canvas
Affiche un aperçu matriciel du document dans un élément HTML5 <canvas>. Il donne une représentation fidèle au pixel près de l’aspect du document composé final, y compris le positionnement précis du texte, la disposition des colonnes et le placement des ressources.
Une barre d’outils en haut de la zone d’aperçu du canvas offre :
- Contrôles de zoom : zoom avant et arrière (×1,25 par pas, de ×0,25 à ×4). Zoomer à la main désactive le mode d’ajustement.
- Modes d’ajustement : ajuster à la largeur ou à la hauteur de la page. Ils s’activent et se désactivent ; l’ajustement se recalcule automatiquement quand la fenêtre est redimensionnée.
- Modes d’affichage : page simple (une page par rangée) ou double page (disposition de livre où la première page apparaît à droite, en recto, et où les pages suivantes sont associées en doubles pages). Un livre relié à droite (
page.binding, chinois vertical) montre ses doubles pages dans l’autre sens : la page 1 seule à gauche, puis[3 | 2],[5 | 4]. Sur une page verticale, un clic tombe sur le caractère situé sous le pointeur, et le curseur est une barre en travers de la colonne. - Aperçu d’impression (icône
Printer) : montre les pages telles qu’elles seront imprimées, désactivé par défaut et mémorisé par le navigateur : chaque couleur séparée selon le profil de sortie de Préparation pour l’impression et affichée sur le blanc propre du papier, les grandes surfaces noires en noir enrichi ; un PDF forcé en niveaux de gris s’affiche en encre noire seule. Seul ce qui s’imprime apparaît : ni repères d’écran ni contours (les constats du contrôle en amont sont dans Vérifications). L’onglet Folio partage cet interrupteur. Il repeint les pages et ne les remet jamais en page.
Les pages sont dessinées à la demande via IntersectionObserver : seules les pages visibles (plus une marge de 200 px) sont dessinées sur le canvas, ce qui limite l’usage de la mémoire GPU pour les longs documents.
Onglet PDF
Produit un vrai PDF du document courant avec le package postext-pdf et l’affiche dans une visionneuse PDF du navigateur intégrée. Le PDF est reconstruit automatiquement au premier montage et à chaque régénération ultérieure, à partir du même VDT qui alimente les onglets Canvas et HTML : les coupures de ligne, les limites de page et le placement des ressources correspondent donc au pixel près entre les trois moteurs de rendu, jusqu’à la compression des dernières lignes trop pleines que Knuth–Plass accepte parfois.
Une barre d’outils flottante en bas à droite de la zone d’aperçu offre :
- Recalculer (icône
RefreshCw) : reconstruit le PDF à partir du Markdown et de la configuration courants. Utile après avoir changé un réglage qui ne déclenche pas de lui-même une reconstruction, ou quand les polices ont fini de se charger. - Télécharger (icône
Download) : enregistre le PDF courant sur le disque. Le nom du fichier est tiré du premier titre H1 du document (à défaut,document.pdf). - Imprimer (icône
Printer) : ouvre la boîte de dialogue d’impression du navigateur sur la visionneuse PDF intégrée, ce qui, dans la plupart des navigateurs, permet d’imprimer ou d’enregistrer de nouveau en PDF. - Chapitre courant / Livre entier (sélecteur à gauche de la barre d’onglets, pour les livres de plus d’un chapitre) : produit tous les chapitres en un seul PDF continu au lieu du chapitre actif placé à la suite de ceux qui le précèdent (par défaut). Le changer régénère le PDF. Le canvas a son propre sélecteur (voir Livres et chapitres).
En coulisse, le Sandbox utilise une fonction utilitaire createPdfFontProvider() qui récupère sur le CDN jsdelivr de Fontsource des fichiers WOFF2 statiques par graisse, ceux-là mêmes avec lesquels ses aperçus sont mesurés, les décompresse en TTF dans le navigateur et transmet les octets à pdf-lib via renderToPdf. Des polices statiques par graisse (plutôt qu’une seule police variable) sont nécessaires pour que le texte gras soit réellement intégré dans la graisse grasse. Voir Produire des PDF pour le même schéma utilisé hors du Sandbox.
Onglet Folio
Montre le livre comme un objet imprimé : les pages mises en page par le moteur, reliées et posées ouvertes sur un bureau, en 3D (postext-folio, three.js). Les pages sont les images peintes par le canvas lui-même, affichées texel pour pixel, si bien que le texte est aussi net que dans l’onglet Canvas ; ce qui change, c’est tout ce qui les entoure. Le papier, la reliure, le bureau et la lumière viennent du groupe Folio du panneau Maquette (la configuration folio), et une série :::paper dans le texte imprime ses pages sur une autre sorte de papier (voir Format de document › :::paper).
- Ce qui est mis en page. L’onglet Folio suit le sélecteur Chapitre courant / Livre entier du canvas. Un chapitre est montré comme une partie de son livre : les pages qui le précèdent et le suivent sont comptées dans l’épaisseur des deux blocs de pages, et le chapitre s’ouvre du bon côté de la double page. Un livre relié à droite (
page.binding: 'right', ou un livre vertical) est posé en miroir et tourne ses feuillets vers la gauche. - Tourner les pages. Prenez une page par son bord et faites-la passer de l’autre côté ; lâchez-la au-delà de la moitié et elle tourne, en deçà elle retombe. Un clic sur une page la tourne (la page de droite vers l’avant, celle de gauche vers l’arrière), de même que les boutons ‹ › de la barre d’outils et les touches fléchées, Page précédente/suivante, Début et Fin quand le livre a le focus. Chaque feuillet se courbe selon son papier : le papier bible s’enroule serré, le bristol tourne en un large arc, le carton et les couvertures tournent comme des plaques rigides.
- Grands sauts. Une page située à plus de dix pages (tapée dans le champ de page, désignée par le permalien, atteinte par un lien ou par le curseur du panneau Texte) est atteinte en un seul mouvement : le bloc des pages intermédiaires se soulève d’un tenant, aussi épais que ces pages, et se rabat de l’autre côté. Jusqu’à dix pages, les feuillets tournent un par un.
- Faire le tour du livre. Un glisser avec le bouton droit fait tourner la vue autour du livre, jusqu’à 70° depuis la verticale : pour voir le dos, la tranche ou l’épaisseur du bloc. La vue reste où vous la laissez, même pendant que les pages tournent, jusqu’à ce que Réinitialiser la vue la ramène doucement à la vue que donnent les réglages (Inclinaison et Rotation). Enregistrer comme vue par défaut enregistre la vue telle que vous la voyez dans ces réglages, si bien que le livre s’ouvre ainsi et que Réinitialiser la vue y revient.
- Action du pointeur. Trois boutons de la barre d’outils choisissent ce que fait le bouton gauche (un doigt, un stylet) sur le livre : Tourner les pages à la main, par défaut, comme ci-dessus ; Faire pivoter la vue, comme un glisser avec le bouton droit, pour un pavé tactile ou une tablette ; Sélectionner du texte, qui fonctionne comme dans l’onglet Canvas sur le livre tel qu’on le voit, incliné ou pivoté : un clic place le curseur dans le panneau Texte, un glisser sélectionne, un double-clic prend un mot, un clic sur un lien le suit. Le choix est mémorisé ; H, O et S le changent quand le livre a le focus.
- Suivre l’éditeur. Le curseur et la sélection du panneau Texte sont dessinés sur les pages, et y restent pendant la saisie : la page montre la modification dès qu’elle est remise en page. Déplacer le curseur de l’éditeur vers une page non affichée tourne le livre jusqu’à elle.
- Couvertures. Avec Couvertures : Un emboîtage autour des pages, le livre est relié dans un emboîtage de toile, de carte ou de cuir de la couleur de couverture. Avec Les pages du document, la première page est la première de couverture et la dernière page (quand elle tombe sur une page de gauche) la quatrième de couverture : le livre reste fermé jusqu’à ce qu’on tourne la couverture, et tourner le dernier feuillet le referme. Un livre épais s’ouvre avec son dos dressé entre les deux blocs.
- La barre d’outils. Une barre flottante comme celle du canvas : Recalculer, Réinitialiser la vue, Enregistrer comme vue par défaut, les trois modes du pointeur, Aperçu d’impression (l’épreuve du canvas, sur le blanc du papier du profil de sortie, si bien que la teinte du papier du livre est mise de côté pendant ce temps ; le même interrupteur que celui du canvas), l’épingle, ‹ › et le champ de page, qui prend un numéro de page du livre et tourne jusqu’à sa double page. La page de droite de la double page ouverte est celle que nomme le permalien (
view=folio&page=N). - Les réglages s’appliquent aussitôt. Les réglages de Folio ne font pas partie de la mise en page : changer le papier, la reliure ou la lumière redessine le livre sans remettre une seule page en page.
- Où il est proposé. L’onglet exige WebGL2 et un écran dont le petit côté mesure au moins 600 px : sur un téléphone, le livre en 3D demande plus de mémoire que le navigateur n’en accorde à un onglet, si bien que l’onglet n’y est pas affiché (ni dans un navigateur sans WebGL2). Dans un panneau de moins de 560 px de large, le livre montre une page à la fois ; le feuillet tourne toujours par-dessus le dos. Quand le système demande de réduire les animations, les doubles pages changent sans tourner.
- Vidéos sur la page. Un clic sur l’affiche d’une vidéo la lit sur la page, dans n’importe lequel des trois modes du pointeur, et l’image continue de bouger pendant que le feuillet tourne et se courbe. Un autre clic la met en pause ; en lancer une autre arrête la première, sauf si Lire en même temps que d’autres vidéos est activé ; la vidéo s’arrête quand le livre s’immobilise sur une double page qui ne la montre plus. Espace lit ou met en pause la vidéo de la double page ouverte. Une vidéo dont Lecture automatique est activée démarre d’elle-même la première fois que sa double page s’affiche, avec le son une fois que vous avez cliqué sur la page (en sourdine avant, et un clic rétablit le son) ; c’est le cas des deux vidéos du guide. Les fichiers téléversés et les vidéos à une adresse (MP4, HLS) se lisent ainsi quand leur serveur autorise les lectures cross-origin ; les vidéos YouTube et Vimeo tournent la page comme avant (voir Format de document › Vidéos sur les pages de Folio).
- Alternatives textuelles. Chaque page est dessinée comme une image ; son nom accessible renvoie à l’onglet HTML et au panneau Texte pour son texte.
Onglet HTML
Affiche le rendu de postext dans un conteneur Shadow DOM, ce qui garantit une isolation complète des styles par rapport à la page hôte. Le CSS éditorial (typographie, espacements, filets de colonne) est injecté dans la racine fantôme, si bien qu’il ne peut ni être affecté par les styles de l’application environnante ni s’y répandre.
Les liens Markdown sont actifs ici et dans le PDF (voir Format de document › Liens). Dans cet onglet, cliquer sur un lien ouvre sa cible dans un nouvel onglet du navigateur, de sorte que le Sandbox reste ouvert ; les renvois :ref sautent toujours à l’intérieur du document.
Les vidéos se lisent ici : une vidéo YouTube ou Vimeo dans le lecteur de la plateforme, un fichier ou une adresse dans le lecteur du navigateur (un flux HLS via hls.js là où le navigateur ne lit pas le HLS lui-même), avec les options de lecteur du Style des vidéos du panneau Maquette et de chaque vidéo. Les clics sur un lecteur vont au lecteur, pas à l’éditeur. Avec Dans la visionneuse HTML réglé sur Affiche, l’onglet montre l’affiche imprimée, avec un lien vers la vidéo.
Une barre d’outils en haut de la zone d’aperçu offre :
- Contrôles de la taille du texte : réduire ou agrandir le texte courant en préservant chaque mesure relative de la configuration.
- Modes de colonnes : une seule (une haute colonne qui défile) ou plusieurs (le nombre de colonnes dont la largeur se rapproche le plus de la longueur de ligne configurée, avec un défilement horizontal aimanté entre les pages). Un document à deux colonnes garde ses pages à deux colonnes, mais la visionneuse peut afficher un nombre impair de colonnes (trois plutôt que deux étirées ou quatre écrasées) quand c’est l’ajustement le plus proche ; la dernière appartient alors à la page suivante, à moitié visible. Un document ou une section en Plusieurs colonnes s’affiche aussi en pages à deux colonnes : trois à huit colonnes d’impression seraient des lamelles à la largeur d’un écran, aussi la visionneuse compose-t-elle son texte à deux colonnes par page et en montre-t-elle autant côte à côte que la longueur de ligne le permet. Un livre relié à droite (
page.binding) fait défiler ses pages de droite à gauche en mode plusieurs colonnes : la visionneuse s’ouvre à l’extrémité droite et la flèche ‹ mène à la page suivante. Un livre composé verticalement ne se lit qu’en mode plusieurs colonnes : le bouton Une colonne est désactivé, avec une infobulle qui en donne la raison, et le choix que vous aviez enregistré revient avec le prochain livre horizontal.
La géométrie des colonnes est pilotée par la section Lecteur web (HTML) du panneau Maquette (Maquette → Export) : maxCharsPerLine fixe la longueur de ligne cible en caractères du caractère du texte courant, columnGap l’écart horizontal entre les colonnes en mode plusieurs colonnes, et optimalLineBreaking active ou désactive Knuth–Plass dans la visionneuse. Voir la référence de configuration de la visionneuse HTML et l’exemple d’intégration de bout en bout pour le même schéma qu’utilise le Sandbox en interne.
Onglet EPUB 3
Écrit le livre entier sous forme de fichier EPUB 3 avec le package postext-epub, l’affiche dans une liseuse à l’intérieur de l’onglet et le télécharge. Le fichier est construit dans le navigateur à partir de la même mise en page chapitre par chapitre que celle qu’utilise l’onglet PDF pour Livre entier, si bien que ses numéros de page, ses notes, ses renvois, sa table des matières et son index sont ceux qu’imprime le PDF. L’onglet n’a pas de sélecteur Chapitre courant / Livre entier, puisqu’un EPUB contient toujours le livre entier. À la place, à gauche de la barre d’onglets, il propose le rendu (sous forme d’icônes sur un téléphone).
EPUB 3 a deux rendus, désignés par la propriété rendition:layout du package :
- Mise en page fixe (
pre-paginated, souvent appelée FXL) : chaque page telle qu’elle est imprimée. Chaque page est un document à part, au format de la page, et le texte se trouve là où le PDF le place, dans les polices du livre, mais reste du vrai texte que l’on peut sélectionner, rechercher et faire lire à voix haute. Les doubles pages s’associent comme à l’impression, et un livre relié à droite (arabe, chinois vertical) se tourne de droite à gauche. Ce rendu conserve la maquette : colonnes, flottants, titres courants, ouvertures, coupures de ligne exactes. Choisissez-le pour les livres dont les pages sont conçues comme des pages, tels que les livres illustrés, les manuels, les catalogues et les magazines, et pour les systèmes de lecture à grand écran. Sur un petit écran, la page est réduite, et le lecteur zoome pour la lire. - Recomposable (par défaut sur les téléphones et les ordinateurs, et valeur par défaut d’EPUB) : le texte, les figures et les tableaux dans l’ordre de lecture, recomposés par le système de lecture pour son écran et pour le caractère, le corps et les marges que choisit le lecteur. Les paragraphes sont reconstruits à partir des lignes mises en page (les traits d’union ajoutés en fin de ligne sont retirés), les figures et les tableaux suivent le texte qui les cite, les encadrés deviennent des apartés, les notes de bas de page renvoient aux notes en fin de chaque chapitre et inversement, et les numéros des pages imprimées sont conservés comme repères de page. Une feuille de style tirée de la maquette donne leur aspect aux titres, aux encadrés, aux tableaux et aux légendes, mais la géométrie de la page disparaît : pas de colonnes, pas de titres courants, pas de coupures de ligne fixes. Choisissez-le pour le texte suivi, comme les romans, les essais et les rapports, et pour les téléphones et les liseuses à encre électronique.
Tant qu’aucun n’a été choisi, l’onglet s’ouvre en mise en page fixe sur une tablette comme un iPad, dont l’écran a la place de la page imprimée, et en recomposable partout ailleurs. Le choix est mémorisé d’une visite à l’autre (postext-sandbox-epub-layout), et le changer réécrit aussitôt le fichier.
- Génération. L’EPUB est écrit la première fois que l’onglet s’ouvre, puis chaque fois qu’on appuie sur Recalculer. Une barre de progression compte les chapitres en cours de mise en page, puis les étapes de l’écriture (polices, images et couverture ; pages ou chapitres ; package), et les lecteurs d’écran annoncent quand le fichier est prêt ou a échoué. Après une modification, une flèche à côté de Recalculer signale que le fichier ne correspond plus au texte, comme dans l’onglet PDF. Quitter l’onglet ou changer de rendu arrête une génération en cours. Un long livre prend quelques secondes, pendant lesquelles la page ne répond pas.
- Ce que contient le fichier. Les métadonnées viennent du front matter du premier chapitre :
title,subtitle,author(un nom ou une liste),publishDateoudate,isbnouidentifier,publisher,rightsetdescription; la langue vient de lalocalede la configuration. Un livre sans identifiant en reçoit un tiré du projet (ou du livre d’exemple et de sa langue), de sorte que chaque EPUB d’un même livre garde une seule identité dans la bibliothèque d’un lecteur. Chaque famille de police que nomme la maquette est intégrée : les tranches de Google Fonts uniquement là où le livre imprime des caractères qu’elles contiennent, les familles personnalisées sauf si elles sont marquées comme non redistribuables. Les images entrent telles qu’elles sont enregistrées, jamais sous la forme de l’original d’impression du PDF ; chaque SVG emporte les polices que nomme son texte (familles personnalisées comme familles Google), sauf les familles marquées comme non redistribuables, qui sont signalées. Les fichiers vidéo entrent sousmedia/et se lisent dans le lecteur de la liseuse ; un fichier sans ses octets se lit depuis son adresse de production, que le package déclare comme ressource distante, et une vidéo YouTube ou Vimeo est son affiche avec un lien vers la vidéo. La couverture est l’image propre du livre quand c’est un bitmap d’au moins 600 px de large, sinon la première page rendue en 1 600 px de large sans sa marge de traits de coupe. - La liseuse. L’onglet ouvre le fichier qu’il vient d’écrire, les octets mêmes que vous téléchargez, et non un aperçu séparé. La mise en page fixe montre une page, ou une double page quand le panneau est assez large, mise à l’échelle pour tenir ; le livre recomposable se pagine un écran à la fois (de haut en bas pour le chinois vertical), et ses pages se suivent d’un chapitre à l’autre. Les liens du livre déplacent la liseuse ; les liens web et mail s’ouvrent dans un nouvel onglet du navigateur. ← / →, Page précédente / Page suivante, Début et Fin tournent les pages, et dans un livre de droite à gauche ← avance.
- La barre d’outils. Une barre flottante comme celle de l’onglet PDF : Recalculer, l’épingle, Télécharger l’EPUB avec la taille du fichier (le fichier porte le titre du livre), un bouton d’avertissements quand l’écriture a signalé quelque chose, Sommaire (une liste de sauts tirée de la table des matières du livre), Agrandir le texte et Réduire le texte (recomposable seulement, en gardant votre position), ‹ › et, en mise en page fixe, le champ de page. Le champ de page compte les pages dans l’ordre de lecture du fichier, la couverture étant la 1 ; les cadres nomment chaque page par son numéro imprimé.
- Avertissements. Le bouton d’avertissements liste ce que le fichier n’a pas pu reprendre tel que le livre l’a : une image sans fichier enregistré (un cadre vide prend sa place), une famille, une graisse ou un style sans police intégrée (les systèmes de lecture en substituent une), une famille omise parce qu’elle ne peut pas être redistribuée, et tout ce que le rendu ne peut pas exprimer. Les mêmes messages vont à la console du navigateur.
- Vérifier le fichier. Les deux rendus du guide et des livres d’exemple passent W3C EPUBCheck 5.4 sans erreur ni avertissement. Pour vérifier votre propre livre, téléchargez-le et lancez
epubcheck book.epub, ou lisez-le dans Apple Books, Thorium Reader ou Calibre.
Voir Livres EPUB pour écrire les mêmes fichiers depuis votre propre code.
#Téléphones et petits écrans
En dessous de 768 px de large, le Sandbox passe à une disposition qui lui est propre :
- Panneaux. La barre des panneaux passe en bas de la fenêtre, avec les mêmes boutons dans le même ordre. Un panneau ouvert recouvre l’aperçu au lieu de se placer à côté ; l’aperçu reste où il était en dessous, hors de l’ordre de tabulation, si bien que fermer le panneau le retrouve sur la même page.
- Barre supérieure. Les onglets de sortie, le sélecteur d’étendue (le choix du rendu dans l’onglet EPUB) et les contrôles de l’hôte (grandes cibles, thème, langue) se partagent la barre au-dessus de l’aperçu. En dessous de 640 px, elle occupe deux rangées : le logo, l’étendue et les contrôles en haut, les onglets en bas, sur toute la largeur ; cinq onglets tiennent à 320 px.
- Barres d’outils. Les barres d’outils flottantes des aperçus s’arriment le long du bas de l’aperçu et passent sur une deuxième rangée quand elles ne tiennent pas.
- Folio. L’onglet Folio n’est pas proposé sur un écran de téléphone (voir Onglet Folio).
- PDF. Les téléphones et les tablettes uniquement tactiles ne peuvent pas afficher un PDF dans la page (Android n’a pas de visionneuse intégrée, et iOS ne dessine que la première page), si bien que l’onglet PDF affiche à la place une carte avec Ouvrir le PDF, qui ouvre le fichier dans un nouvel onglet ; le bouton Télécharger de la barre d’outils l’enregistre toujours.
#Livres et chapitres
Tout ce que vous ouvrez dans le Sandbox est un livre, à la manière d’un fichier de livre InDesign qui regroupe un document par chapitre : la configuration, les polices personnalisées et l’ensemble des ressources sont communs à tout le livre, et chaque chapitre est un document markdown à part. Les ouvrages longs (un manuel de cinq cents pages) se modifient un chapitre à la fois, tandis que la numérotation, les renvois et l’export voient toujours un seul document.
- La structure se gère dans le panneau Chapitres et dans le sélecteur de chapitre du panneau Texte : ajouter, renommer (double-clic sur une ligne), réordonner, diviser un chapitre en autant de chapitres que de titres de niveau 1, fusionner un chapitre avec le précédent, supprimer. Chaque chapitre garde son propre historique d’annulation et la position de son curseur.
- Un chapitre à la fois. Par défaut, les aperçus mettent en page le chapitre actif à la suite des chapitres qui le précèdent : son premier numéro de page suit la dernière page du chapitre précédent, les titres de niveau 1 continuent leur numérotation (le chapitre 4 porte le numéro 4, ses figures 4.1, 4.2, …), les titres courants
{chapterNumber}et{chapterTitle}suivent, la parité recto/verso est respectée (une ouverture de chapitre ajoute une page blanche exactement comme elle le ferait au milieu du livre), et un:refvers une figure citée pour la première fois au chapitre 1 garde ce numéro. Le nombre de pages des chapitres précédents vient de la dernière mise en page qui a affiché chacun d’eux ; les chapitres jamais ouverts (ou modifiés depuis) sont mis en page en arrière-plan, l’un après l’autre, et la liste des chapitres indique pages en attente jusqu’à ce qu’ils soient prêts. Les plages de pages sont exactes pour les chapitres qui s’ouvrent sur une nouvelle page (le cas par défaut) ; un chapitre dont le texte aurait continué sur la page précédente est placé en haut de sa propre page. - Livre entier. Le canvas, l’aperçu HTML et l’onglet PDF peuvent afficher tout le livre comme un seul document continu : choisissez Livre entier dans le sélecteur à gauche de la barre d’onglets (pour les livres de plus d’un chapitre). Le canvas met alors en page chaque chapitre dans l’ordre, chacun après les pages auxquelles sont arrivés les précédents, et affiche les documents raccordés : une modification ne remet en page que son chapitre, et les chapitres suivants seulement si leur première page a bougé ; la liste des chapitres, les parties
chapter=etpage=du permalien et la synchronisation de l’éditeur suivent le chapitre de la page. Ce choix est enregistré avec le livre (un court roman se lit comme un seul document, un manuel un chapitre à la fois), et un préréglage peut s’ouvrir ainsi grâce au champview.canvasScopede son manifeste. L’aperçu HTML partage le choix du canvas et met en page tout le livre comme un seul document depuis sa première page, les lignes de la table des matières et le fragment suivant le chapitre de chaque page ; l’onglet PDF garde son propre sélecteur. - Livres longs. Un livre de 120 chapitres fonctionne comme un livre court. Le menu des chapitres, dans l’en-tête du panneau Texte, défile à l’intérieur de la fenêtre et s’ouvre sur le chapitre actif ; les touches fléchées se déplacent à partir de lui. Un livre en parties (blocs
:::partdans ses chapitres) range ses chapitres sous leurs parties, dans le menu comme dans le panneau Chapitres, et un clic sur une partie dans le menu ouvre son premier chapitre. Au-delà de 30 chapitres, le menu offre en haut un champ de recherche qui reconnaît les numéros de chapitre (27) et les mots des titres et des noms de parties (埋香,卷三) ; Entrée ouvre le premier résultat. Pendant qu’une méthode de saisie compose (zhuyin, cangjie, pinyin, kana), Entrée et les touches fléchées lui appartiennent : Entrée valide la conversion et n’ouvre rien. Les fichiers de chapitre d’un livre d’exemple se chargent huit par huit, et pendant que les chapitres sont paginés en arrière-plan, le panneau Chapitres affiche la progression (Pagination 34/120). Le canvas et l’aperçu HTML affichent un livre de plus de 200 chapitres un chapitre à la fois, quoi que demandent le livre ou son manifeste : mettre en page tous les chapitres d’un coup garde tout le livre en mémoire. Un livre en dessous de ce seuil peut s’ouvrir en entier : 紅樓夢 (129 chapitres, quelque 2 000 pages) demande environ 25 secondes et 100 Mo sur le canvas. L’onglet PDF peut toujours exporter n’importe quel livre en entier. - Métadonnées (front matter). Le bloc de métadonnées du premier chapitre est celui du livre (titre, auteur, …). Un bloc de métadonnées en tête de tout autre chapitre est ignoré, et le panneau Vérifications le signale.
buildBundlesuit la même règle, si bien qu’un livre se compose de la même façon dans le Sandbox et dans votre propre programme. - Nombre de pages. Chaque chapitre est mis en page comme un document à part, donc
{totalPages}compte les pages du chapitre.{bookTotalPages}compte tout le livre : une fois les pages de chaque chapitre connues, les aperçus mettent en page chaque chapitre avec ce total (seulement quand un en-tête, un pied de page ou une maquette l’imprime). D’ici là, un chapitre imprime le nombre de pages jusqu’à sa propre fin. L’option Livre entier de l’onglet PDF compte les pages qu’elle met en page, si bien que le fichier imprime toujours le vrai total du livre. - Ouvertures de chapitre. Aucun saut de page n’est imposé entre les chapitres : un chapitre dont le premier bloc est un titre de niveau 1 s’ouvre sur une nouvelle page grâce au réglage Saut avant du titre lui-même, exactement comme un chapitre qui commence au milieu d’un document.
- Synchronisation. Un clic sur un paragraphe de n’importe quel chapitre dans le Canvas ou l’aperçu HTML fait passer l’éditeur à ce chapitre et y place le curseur ; le curseur de l’éditeur est mis en évidence dans les aperçus, où que se trouve le chapitre dans le livre. Les avertissements indiquent leur chapitre.
- Les documents existants s’ouvrent comme un livre d’un seul chapitre ; rien ne change tant qu’un deuxième chapitre n’est pas ajouté.
#Modifier une bande dessinée
Un chapitre comportant des pages de bande dessinée (:::page) ou des strips (:::strip) peut se modifier directement sur les pages, dans l’onglet Canvas, l’onglet HTML et le mode sélection du Folio. Les outils fonctionnent de la même façon sur un strip placé dans une colonne, flottant en tête de page ou sur toute la largeur de la page, plus étroit que sa justification ou placé sous une légende, et écrivent dans le bloc du strip lui-même. Chaque modification est écrite dans le Markdown du chapitre, comme une saisie au clavier, si bien que l’annulation de l’éditeur la défait. Le balisage et les règles de lettrage sont expliqués dans Bande dessinée.
- Séparateurs. Au-dessus de la gouttière entre deux cases, le pointeur devient un curseur de redimensionnement. Faites-le glisser pour déplacer la ligne de séparation ; au relâchement, le nouveau pourcentage est écrit dans l’attribut
splitde la page (ajouté au bloc si la page n’en a pas) et la page est remise en page. Maj aligne la ligne par pas de 5 %, Alt ne déplace que l’extrémité la plus proche du pointeur, ce qui incline la ligne, et aucune case ne devient plus étroite que 5 %. Pendant le glissement, une case dont l’image ne garderait plus sa zone de sécurité visible est signalée, avec une indication. Chaque séparateur est aussi un élément focalisable : les touches fléchées le déplacent de 1 % (5 % avec Maj), Entrée enregistre la position et Échap la rétablit. - Diviser et fusionner. Au-dessus d’une case, une petite barre d’outils propose Couper par une ligne horizontale, Couper par une ligne verticale (une ligne
::panelvide est ajoutée pour la nouvelle cellule, juste après cette case) et Fusionner avec la case suivante : la ligne qui les sépare disparaît, et la case fusionnée garde l’image de la première case et reprend les lignes de script des deux. On atteint aussi les cases avec Tab : une case focalisée est entourée d’un contour, H la coupe par une ligne horizontale, V par une ligne verticale, et M la fusionne avec la case suivante ; le focus reste sur la case une fois la page remise en page. Entrée ouvre la barre d’outils, et Échap ramène de celle-ci à la case. - Bulles. Faites glisser une bulle pour l’épingler : au relâchement, sa ligne de script reçoit
at="x% y%", le point en pourcentages de l’image de la case (de la cellule pour une case sans image), si bien que l’épingle reste au même endroit du dessin malgré les recadrages, les déplacements de séparateurs et les traductions. Un groupe lié se déplace d’un bloc, épinglé par sa première bulle. Les touches fléchées décalent une bulle focalisée de 1 % (5 % avec Maj), et un double clic sur une bulle épinglée retire sonatet la rend au placement automatique. Un simple clic place le curseur de l’éditeur sur la ligne de la bulle. - Indication de débordement. Pendant qu’une bulle se déplace, au pointeur ou aux touches fléchées, l’aperçu vérifie où elle atterrirait. Si elle devait couvrir un visage ou une zone à éviter, ou sortir de sa case plus qu’elle ne le fait déjà, le contour en mouvement passe à l’orange, les visages et les zones à éviter de la case sont tracés en pointillés, et l’infobulle dit de quoi il s’agit : Ici, elle couvrirait un visage, Ici, elle couvrirait une partie de l’image à laisser dégagée, Ici, elle sortirait de la case. Une ligne avec
breakn’est pas signalée parce qu’elle quitte sa case. L’indication ne prévoit pas comment les autres bulles de la case se déplaceront pour faire de la place. - Queues. Au-dessus de la pointe d’une queue, le pointeur devient une croix. Faites glisser la pointe là où la queue doit viser : au relâchement, la ligne reçoit
to="x% y%", le point en pourcentages de l’image de la case, et la queue se tourne vers lui en s’arrêtant un peu avant, comme elle le fait devant une bouche. Échap annule le glissement, et un double clic sur la pointe retireto, si bien que la queue pointe de nouveau vers son locuteur. Au clavier, T sur une bulle focalisée passe à sa queue : les touches fléchées déplacent le point visé de 1 % (5 % avec Maj), Entrée l’enregistre, Échap le rétablit, Suppr retireto, et T revient à la bulle. - Locuteurs et zones à éviter. Sur une image du panneau Ressources, le champ Zone de sécurité et lettrage ouvre une boîte de dialogue à trois modes. Zone de sécurité marque la partie de l’image qui doit rester visible. Locuteurs place un point par personnage : un clic sur l’image y ajoute un locuteur et active son identifiant, qui doit être la clé de locuteur qu’utilise le script (
maya: …) ; sa bouche, sa tête (vers laquelle pointent les bulles de pensée) et son visage (jamais couvert par une bulle) se mettent en place par glissement. Les Zones à éviter sont des rectangles qu’aucune bulle ne couvre, tracés en faisant glisser le pointeur sur l’image. Le même mode marque les visages des personnes qui ne parlent pas (Ajouter un visage de figurant, ou l’interrupteur Un visage sur la ligne d’une zone) : aucune bulle ne couvre un tel visage, alors qu’une zone à éviter cède quand une case n’a pas d’autre place. Chaque marque se déplace avec les touches fléchées (Maj pour des pas plus grands) et se supprime avec Suppr ; la boîte de dialogue a son propre historique d’annulation, et un locuteur situé hors de la zone de sécurité est signalé. - Réglages. Le groupe Bande dessinée du panneau Maquette contient la configuration de la bande dessinée : sens de lecture et images en miroir, cadre et gouttières, case par défaut et styles de case nommés, lettrage, et styles de bulle, chacun avec un aperçu de son contour.
- Éditeur et vérifications. L’éditeur de texte colore les lignes
:::page,:::strip,::panelainsi que les clés et les attributs des lignes de script. Le panneau Vérifications liste les avertissements de bande dessinée (une division illisible, des cases et des cellules qui ne correspondent pas, une bulle qui ne tient pas…) à la ligne qu’ils concernent ; voir Bande dessinée › Avertissements de bande dessinée.
#Documents Word
Les manuscrits arrivent le plus souvent en fichiers Word. Le panneau Texte importe directement un .docx, sans agent IA et sans rien à installer, et fait correspondre ses styles comme le fait la commande Importer d’InDesign. Importer un document Word lit le fichier dans le navigateur (il n’est jamais envoyé) et ouvre une boîte de dialogue ; le livre ne change que lorsque vous cliquez sur Importer. Un fichier qui n’est pas un document Word, comme un ancien .doc binaire, est refusé avec un message qui le dit ; enregistrez-le d’abord en .docx depuis Word.
La boîte de dialogue comprend les parties suivantes, chacune repliable :
- Qualité de l’original. Un verdict sur la préparation du manuscrit : Bien stylé (la conversion est propre), Partiellement stylé (certains paragraphes sont mis en forme à la main) ou Aucun style (tout est en Normal, le texte arrive donc en paragraphes simples). En dessous, les décomptes (paragraphes, combien sont dans un autre style que Normal, images, tableaux, notes) et ce qui a été trouvé, chaque fois avec les premiers mots de quelques paragraphes concernés : paragraphes mis en forme à la main (polices, tailles, couleurs, alignement ; cette mise en forme est ignorée, puisque la maquette s’en charge), paragraphes courts en gras qui ressemblent à des titres tapés à la main, numéros ou puces tapés au lieu de listes Word, sauts de ligne manuels, sauts de page manuels, paragraphes vides servant d’espacement, tabulations et doubles espaces, modifications suivies (les insertions sont gardées et les suppressions ignorées ; acceptez-les ou refusez-les d’abord dans Word), commentaires (non importés), zones de texte (leur texte suit le paragraphe auquel chacune est ancrée), équations (converties en TeX ; vérifiez-les), texte masqué et images dans des formats que le navigateur ne sait pas afficher (EMF, WMF, TIFF).
- Modèle d’import. La correspondance utilisée : Automatique (par nom de style), un modèle enregistré, ou Enregistré dans ce document pour un fichier exporté depuis le Sandbox. Enregistrer comme nouveau modèle demande un nom et conserve la correspondance, tous les styles de ce document compris, dans le navigateur ; Enregistrer les modifications met à jour le modèle sélectionné ; le bouton de téléchargement l’écrit dans un fichier
.jsonet le bouton d’envoi en charge un, si bien que toute une équipe peut partager le même modèle. La suppression demande une confirmation. Le dernier modèle utilisé est proposé en premier la fois suivante. - Styles de paragraphe. Chaque style de paragraphe utilisé par le document, avec le nombre de paragraphes qui l’emploient et les premiers mots de l’un d’eux, et ce qu’il devient : Corps de texte, Titre (un niveau de 1 à 6 et, quand la maquette a des styles de titre, l’un d’eux), Style de paragraphe (l’un des styles de paragraphe de la maquette ; des paragraphes consécutifs dans ce style forment un groupe
:::paragraphs), Encadré (des paragraphes consécutifs forment un encadré de ce type), Titre d’encadré (ouvre un encadré dont le titre est le texte du paragraphe), Citation, Légende de l’image ou du tableau voisin, Début d’un nouveau chapitre, Markdown Postext, tel qu’écrit (le texte est copié tel quel, pour les directives tapées dans Word) ou Ignorer. Les paragraphes des listes numérotées et à puces de Word deviennent des listes Postext quel que soit leur style, avec leurs numéros et leur imbrication. Poème (:::verse, vers par vers) compose les paragraphes du style en poème:::verse, éventuellement dans l’un des styles de paragraphe de la maquette : Maj+Entrée coupe un vers, un paragraphe est une strophe, des paragraphes d’une ligne qui se suivent forment une strophe et un paragraphe vide marque un changement de strophe ; ce choix est proposé d’office pour les styles nommés Verse, Poem ou Poesía. - Styles de caractère. De même pour les styles de caractère : Texte simple, Gras, Italique, Gras italique, Petites capitales, Exposant, Indice, Pastille (l’un des styles de pastille de la maquette), Markdown Postext, tel qu’écrit ou Ignorer.
- Options. Les sauts de ligne manuels (Maj+Entrée) sont gardés comme sauts de ligne à l’intérieur du paragraphe (une barre oblique inverse en fin de ligne Markdown, par défaut), joints par une espace ou transformés en début de nouveau paragraphe ; le gras, l’italique, les petites capitales, les exposants et les indices appliqués à la main sont gardés ou ignorés ; les paragraphes courts en gras restent des paragraphes ou deviennent des titres d’un niveau donné ; les sauts de page manuels sont ignorés (la maquette tourne les pages) ou gardés en
:::pagebreak; les images et les tableaux sont ajoutés comme ressources ou non. - Aperçu du Markdown, mis à jour à mesure que la correspondance change.
Le pied de la boîte de dialogue choisit où va le texte : Remplacer ce chapitre, Nouveaux chapitres après celui-ci ou Remplacer tout le livre ; les deux dernières options commencent un chapitre à chaque titre de niveau 1. Les images (PNG, JPEG, GIF, WebP, SVG) deviennent des ressources de figure et les tableaux des ressources de tableau (lignes d’en-tête, cellules fusionnées, largeurs de colonnes et fonds de cellule conservés), chacune placée avec ::resource{id="…"} là où elle se trouvait et légendée par un paragraphe de légende voisin, dont le libellé tapé (Figure 3.) est retiré parce que Postext numérote les ressources. Les notes de bas de page et les notes de fin deviennent des notes Postext ([^1]), les entrées d’index de Word (champs XE) des marques :index, les liens restent des liens et les équations deviennent $…$ / $$…$$. Une tabulation dans le texte courant devient :tab avec le taquet que Word lui avait fixé (:tab{at=432pt align=end leader="."}), ou un simple :tab quand le paragraphe va vers un style de paragraphe du livre qui a ses propres taquets ; les points de conduite de Word en points, en tirets et en points médians deviennent ., - et ·, ses points de conduite soulignés et épais un filet. Une tabulation dans un titre, une cellule de tableau ou une note devient une espace.
Avant de faire correspondre les styles par leur nom, la correspondance automatique reconnaît les rôles propres de Word, quelle que soit la langue de son interface (heading 1–6, Title, Quote, Caption ; les paragraphes de table des matières, d’index, d’en-tête et de pied de page sont ignorés), ainsi que les styles de la maquette : un style Word qui porte le nom d’un style de paragraphe, d’un type d’encadré, d’un style de titre ou d’un style de pastille du livre (par identifiant ou par nom, sans tenir compte de la casse ni des accents) lui est associé.
Exporter vers Word télécharge le chapitre ouvert, ou tout le livre, en .docx, pour que quelqu’un y travaille dans Word. Le même modèle s’applique en sens inverse : les titres reçoivent les styles de titre de Word, les styles de paragraphe, les encadrés, les citations et les pastilles reçoivent des styles Word qui leur sont propres (nommés d’après les styles de la maquette, Callout: Note, Chip: Key), les listes deviennent des listes Word, les notes de bas de page des notes de bas de page Word, et les liens restent des liens. :tab devient une tabulation Word, un :tab{…} doté de son propre taquet est gardé tel qu’écrit, et les taquets d’un style de paragraphe fixés à une longueur deviennent les taquets de son style Word, avec le point de conduite de Word le plus proche (un taquet à 'end' ou en pourcentage dépend de la page sur laquelle Word compose le texte, et il est ignoré). Ce que Word ne sait pas afficher (front matter, blocs, directives, :ref, formules, marques :index, lignes de ressource) est gardé tel qu’écrit dans les styles gris Postext Markup. Un livre est exporté avec un paragraphe Postext Chapter en tête de chaque chapitre. Le modèle voyage dans le fichier, si bien que le document modifié s’importe de nouveau avec la même correspondance, et comme un livre entier s’il contient des paragraphes de chapitre. Laissez le texte gris tel quel et le texte revient comme il est parti ; les étiquettes de note sont renumérotées ([^1], [^2]…), ce qui s’imprime de la même façon, et _italic_ revient sous la forme *italic*.
Pour les conversions que cette boîte de dialogue ne couvre pas (sources PDF, PowerPoint, EPUB ou IDML, reproduction des règles de mise en page d’un original), utilisez le skill pour agents.
#Persistance
Le Sandbox enregistre automatiquement votre travail dans le navigateur :
- Livre et configuration : les chapitres, le chapitre actif et l’étendue du canvas sont enregistrés automatiquement dans
localStoragesouspostext-sandbox-book(un document unique enregistré par une version antérieure est lu depuispostext-sandbox-markdowncomme un livre d’un chapitre et migré au premier enregistrement) ; la configuration est enregistrée après 1 seconde d’inactivité, débarrassée des valeurs par défaut pour ne stocker que vos modifications, avec sa version (postext-sandbox-config-version) ; une configuration enregistrée avant l’existence de cette version est lue comme décrit plus bas sous Sauts de titre enregistrés par postext 1.4 ou antérieur - État de l’interface : le panneau et l’onglet de visualisation actifs, la largeur de la barre latérale, le groupe ouvert du panneau Maquette (
postext-sandbox-settings-group), son interrupteur Afficher toutes les explications (postext-sandbox-settings-help) et l’état ouvert ou fermé des sections, les livres d’exemple masqués, les modes de zoom, d’ajustement et de vue du canvas, la taille de police et le mode de colonnes du HTML, le rendu de l’onglet EPUB (postext-sandbox-epub-layout) et l’épinglage des barres d’outils sont tous conservés danslocalStorage - Livre ouvert : l’identifiant du livre personnel ouvert (un projet) est stocké dans
localStoragesouspostext-sandbox-project; les projets eux-mêmes (chapitres, configuration et enregistrements de ressources ; enregistrementversion: 9, leCONFIG_VERSIONdu moteur, dont sont aussi estampillés la configuration de travail et les exportspostext-config.json, si bien que chacun est migré une seule fois quand les règles du moteur changent ; les enregistrements à document unique des versions antérieures sont migrés à la lecture, et les sauts de titre des enregistrements antérieurs à la version 3, la taille des formules de ceux antérieurs à la version 4, l’espace sous les figures dans le texte de ceux antérieurs à la version 5, l’espace autour des figures dans le texte des encadrés, les enrichissements des titres, la taille des lettrines, la place sous une ligne terminée par un deux-points et les coupures d’encadrés de ceux antérieurs à la version 6, les coupures après les tirets et la coupure du texte en drapeau de ceux antérieurs à la version 7, et les coupures sous un titre, les coupures après le trait d’union des mots composés et l’espace sous les conteneurs:::paragraphsde ceux antérieurs à la version 8 sont figés comme décrit plus bas) se trouvent dans le magasinprojectsde la base IndexedDB du Sandbox, et leurs contenus binaires partagent les magasins de blobs et de polices avec le document de travail. Ces contenus sont supprimés par le ramasse-miettes quand ni le document de travail ni aucun projet n’y fait référence - Livres d’exemple modifiés : votre version d’un livre d’exemple (ses chapitres, son chapitre actif, l’étendue du canvas, sa configuration et ses enregistrements de ressources, avec ce que l’exemple appliquait quand vous l’avez ouvert) est enregistrée dans le magasin
presetDraftsde la base IndexedDB du Sandbox, un enregistrement par exemple et par langue de contenu, et ses fichiers sont préservés par le ramasse-miettes comme ceux d’un projet. Restaurer l’original la supprime - Couvertures des livres d’exemple : la couverture tirée de la première page d’un livre d’exemple livré sans vignette est conservée dans le magasin
presetCoversde la base IndexedDB du Sandbox, un enregistrement par exemple et par langue de contenu (voir panneau Livres). Un livre personnel garde sa couverture dans son enregistrement de projet. - Enregistrement à la sortie : les modifications en attente sont écrites immédiatement quand la page est masquée ou fermée, quand vous quittez le Sandbox par un lien (le logo) et avant l’ouverture d’un autre livre, plutôt qu’après la pause d’une seconde
- Livre d’exemple ouvert : l’identifiant du dernier préréglage chargé est stocké dans
localStoragesouspostext-sandbox-preset, si bien que les boutons Réinitialiser des panneaux continuent de restaurer ce préréglage d’une session à l’autre (un préréglage qui n’est plus servi apparaît comme indisponible). Ce que ce préréglage a appliqué (l’empreinte de son paquet et des hachages du markdown, de la configuration et de l’ensemble des ressources) est stocké souspostext-sandbox-preset-applied: c’est ainsi que la visite suivante distingue un document intact d’un document modifié - Ressources et polices : les enregistrements de ressources, leurs blobs binaires (bitmaps et SVG) et les fichiers de polices personnalisées sont conservés dans IndexedDB ; quand IndexedDB n’est pas disponible (par exemple dans certains modes de navigation privée), un avertissement Stockage indisponible apparaît dans le panneau Vérifications (sous Navigateur)
- Permalien : le fragment de l’URL nomme ce qui est à l’écran, si bien qu’un rechargement, un favori ou un lien transmis à quelqu’un d’autre arrive sur la même page du même livre dans la même visionneuse :
#preset=bioquimica-feduchi&lang=es&view=canvas&chapter=1&page=7ouvre le préréglage Bioquímica en espagnol dans l’onglet Canvas, au chapitre 1, page 7 (le numéro imprimé sur la page).viewvautcanvas,pdf,folio,htmlouepub; dans l’onglet Folio, la page est la page de droite de la double page ouverte. Un projet local est désigné parproject=ID(son identifiant de stockage), si bien que seul le navigateur qui détient le projet peut suivre un tel lien. Le Sandbox tient le fragment à jour quand vous changez de livre, d’onglet ou de chapitre et quand vous faites défiler. Une partie omise désigne ce qui est déjà là (pas de page : la première page du chapitre ; pas de livre : le dernier ouvert), et un livre que le navigateur ne peut pas ouvrir est ignoré. Coller un lien dans la barre d’adresse d’un Sandbox ouvert l’ouvre sur place. Quand la page s’ouvre sur un lien vers un autre livre que le dernier ouvert, le Sandbox affiche son état de chargement jusqu’à l’arrivée du livre lié, jamais le livre précédent. Un hôte peut aussi lier ses propres livres avec la prophashBundles(voir Props) : le site ouvre une recette du livre de recettes avec#recipe=<slug>&lang=es. La première visite importe le fichier.postextde la recette comme l’un de vos livres. Une visite ultérieure du même lien pose d’abord la question (Vous avez déjà ce livre) : Ouvrir ma copie ouvre ce livre, vos modifications comprises, et Remplacer par la version publiée réimporte la recette, qui a pu être corrigée depuis, et supprime votre copie une fois la nouvelle ouverte ; Échap garde votre copie. Le fragment nomme alors le projet. La langue de l’interface reste dans le chemin (/en/sandbox,/es/sandbox) ;langest la langue de contenu d’un paquet bilingue, n’importe quelle balise BCP 47, conservée dans sa casse canonique (lang=zh-hantse litzh-Hant). Une balise que le paquet ne liste pas ouvre l’édition qui lui correspond :zh-TWetzh-HKouvrent l’édition en chinois traditionnel (zh-Hant),zhetzh-CNl’édition en chinois simplifié (zh-Hans),en-GBl’édition anglaise. L’autre écriture chinoise n’est lue que si le paquet n’a pas d’édition dans celle du lecteur : un lienzh-TWvers un livre enzh-Hanset en anglais ouvre le texte simplifié, pas l’anglais. Un lien sanslangouvre l’openLocaledu paquet quand il en nomme une, sinon l’édition dans la langue de l’interface. Le chapitre et la page d’un lien s’appliquent à l’édition qu’il ouvre, et le fragment nomme alors cette édition par sa propre balise (lang=zh-TW&chapter=28devientlang=zh-Hant&chapter=28).
Sauts de titre enregistrés par postext 1.4 ou antérieur. Jusqu’à postext 1.4, une configuration comportant un objet headings mettait en page ses titres de niveau 1 sans saut de page, sauf si elle activait explicitement l’interrupteur Saut avant du H1 (et l’enregistrement supprimait un saut de H1 désactivé) ; un saut de H1 partiel prenait son champ manquant dans la valeur par défaut sans saut, et le saut d’un style de titre faisait de même au lieu de se fusionner avec celui de son niveau. Le moteur garde désormais la valeur par défaut de chaque niveau (le H1 s’ouvre sur un nouveau recto, always-odd) et y fusionne un saut partiel. Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox écrit ces sauts en toutes lettres quand il lit un enregistrement de projet antérieur à la version 3 ou une configuration de travail sans version : enabled: false sur le H1 là où le saut était désactivé, et parity: 'any' à côté d’un enabled: true qui ne nommait pas de parité, sur le H1 et sur les styles de titre. Le panneau Maquette montre alors le saut avec lequel les pages ont été mises en page. Les fichiers enregistrent eux aussi la version depuis postext 1.5 : un fichier .postext dont le manifeste n’a pas de configVersion, et un postext-config.json qui n’en a pas, ont été écrits par postext 1.4 ou antérieur, et sont lus de la même façon quand on les importe ou qu’on les ouvre (voir Paquets écrits par postext 1.4 ou antérieur).
Taille des formules enregistrée avant postext 1.5. Jusqu’à postext 1.4, chaque formule sortait 1,131 fois plus grande que ne l’indique son Échelle de taille (voir Taille des formules). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox fige cette taille quand il lit un enregistrement de projet antérieur à la version 4, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 4, ou un postext-config.json exporté avant : l’Échelle de taille devient l’échelle enregistrée × 1,1312 et une marge hors texte exprimée en em est divisée par 1,1312, si bien que les formules et l’espace qui les entoure restent tels qu’ils étaient. Un livre dont les chapitres n’ont aucun $ est laissé tel quel (un postext-config.json ne contient pas de chapitres, donc sa taille est figée dès que les formules sont activées), de même qu’un livre où Activer LaTeX est désactivé. La section Formules montre alors les valeurs avec lesquelles le livre est mis en page ; réinitialisez Échelle de taille, Marge hors texte haute et Marge hors texte basse pour revenir à la taille actuelle. Ce figeage n’est écrit qu’une fois : l’enregistrement est de nouveau sauvegardé sous la version courante et lu tel quel à partir de là. Un préréglage appliqué à l’époque et jamais modifié compte toujours comme intact (le Sandbox le compare à ses valeurs figées, et il en va de même pour le figeage des sauts de titre) : le recharger ou changer de livre ne demande pas d’abandonner des modifications que vous n’avez jamais faites, et une version plus récente du préréglage, comme celle du guide intégré, le remplace toujours.
Figures dans le texte enregistrées avant postext 1.5. Jusqu’à postext 1.4, une figure ou un tableau placé dans le texte (placement Dans le texte (ici)) ne gardait une ligne d’espace qu’au-dessus de lui : le texte qui suivait reprenait à la ligne de grille suivante, si proche fût-elle. Il garde désormais la même ligne en dessous (Colonnes → Espace autour des figures en ligne, Au-dessus et au-dessous). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Espace autour des figures en ligne sur Au-dessus seulement quand il lit un enregistrement de projet antérieur à la version 5, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 5, ou un postext-config.json exporté avant, lorsqu’une ligne du livre insère une ressource (::resource{id="…"} seul sur sa ligne, pas une mention dans le texte). Un postext-config.json ne contient pas de chapitres : le réglage y est donc appliqué chaque fois que le fichier est plus ancien. Choisissez Au-dessus et au-dessous pour mettre le livre en page avec l’espacement actuel.
Figures dans le texte des encadrés enregistrées avant postext 1.5. Jusqu’à postext 1.4, une figure ou un tableau placé dans le texte d’un encadré était collé au texte de l’encadré qui l’entourait. Il garde désormais une ligne du texte de l’encadré au-dessus de lui, et en dessous aussi avec Au-dessus et au-dessous (Colonnes → Espace autour des figures dans les encadrés). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Espace autour des figures dans les encadrés quand il lit un enregistrement de projet antérieur à la version 6, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 6, ou un postext-config.json exporté avant, lorsqu’un encadré du livre insère une ressource sur une ligne à part. Un postext-config.json ne contient pas de chapitres : le réglage y est donc désactivé chaque fois que le fichier est plus ancien. Activez-le pour mettre le livre en page avec l’espacement actuel.
Enrichissements des titres et lettrines enregistrés avant postext 1.5. Jusqu’à postext 1.4, un titre imprimait les mots de ses marques *italic*, **bold** et autres dans son propre style, sans enrichissement, et une lettrine sans taille était aussi haute que toutes les lignes qu’elle occupe, son sommet dépassant la première ligne. Un titre applique désormais ses marques (Titres → Enrichissements dans les titres), et le sommet d’une lettrine s’aligne sur les capitales de la première ligne. Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Enrichissements dans les titres quand il lit un enregistrement de projet antérieur à la version 6, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 6, ou un postext-config.json exporté avant, lorsqu’un titre du livre porte une marque (un postext-config.json ne contient pas de chapitres : le réglage y est donc désactivé chaque fois que le fichier est plus ancien) ; et il écrit dans la Taille de la lettrine de chaque lettrine la taille avec laquelle elle était composée. Activez l’interrupteur, ou effacez la taille, pour composer le livre selon les règles actuelles. Attention : un titre en italique dont tout le texte est marqué *…* sort alors en romain.
Listes après deux-points enregistrées avant postext 1.5. Jusqu’à postext 1.4, Garder les deux-points avec la liste considérait qu’une ligne de place sous la ligne terminée par un deux-points suffisait pour la liste ; un premier élément de deux lignes que les règles d’orphelines et de veuves gardent entier passait donc à la colonne suivante et laissait la ligne du deux-points seule en pied de colonne. Il demande désormais la place dont le premier élément a besoin (Typographie → Texte courant → Veuves, orphelines et lignes courtes → Place sous les deux-points, Ce qu’exige le premier élément). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Place sous les deux-points sur Une ligne (1.4) quand il lit un enregistrement de projet antérieur à la version 6, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 6, ou un postext-config.json exporté avant, lorsqu’une liste du livre suit une ligne terminée par un deux-points. Un postext-config.json ne contient pas de chapitres : le réglage y est donc appliqué chaque fois que le fichier est plus ancien. Choisissez Ce qu’exige le premier élément pour mettre le livre en page selon la règle actuelle.
Coupures d’encadrés enregistrées avant postext 1.5. Jusqu’à postext 1.4, un encadré coupé à l’intérieur d’un paragraphe ou d’un élément de liste pouvait en laisser une seule ligne d’un côté, du moment que chaque côté de l’encadré gardait ses Lignes de part et d’autre d’une coupure. Une coupure laisse désormais au moins deux lignes du paragraphe ou de l’élément de chaque côté (Colonnes → Lignes d’un paragraphe à une coupure d’encadré). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Lignes d’un paragraphe à une coupure d’encadré sur 1 quand il lit un enregistrement de projet antérieur à la version 6, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 6, ou un postext-config.json exporté avant, lorsqu’un chapitre du livre ouvre un :::callout. Un postext-config.json ne contient pas de chapitres : le réglage y est donc appliqué chaque fois que le fichier est plus ancien. Remettez-le à 2 pour mettre le livre en page selon la règle actuelle.
Tirets et texte en drapeau enregistrés avant postext 1.5. Jusqu’à postext 1.4, la coupure optimale des lignes ne terminait jamais une ligne après un tiret cadratin ou demi-cadratin collé entre deux mots (say—that’s), et le texte en drapeau était toujours composé ligne par ligne, chaque ligne remplie avant la suivante. Une ligne peut désormais se terminer après un tel tiret (Typographie → Texte courant → Paragraphes → Coupure après les tirets), et le texte courant en drapeau est lui aussi coupé avec Knuth-Plass (Coupure optimale du texte en drapeau). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Coupure après les tirets quand il lit un enregistrement de projet antérieur à la version 7, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 7, ou un postext-config.json exporté avant, lorsqu’un chapitre du livre contient un tel tiret (un postext-config.json ne contient pas de chapitres : le réglage y est donc désactivé chaque fois que le fichier est plus ancien) ; et il désactive Coupure optimale du texte en drapeau quand la configuration compose en drapeau une partie du texte courant : le texte courant lui-même, un style de paragraphe, le corps d’un encadré, le corps d’une partie ou le corps d’un style de section. Activez-les pour mettre le livre en page selon les règles actuelles.
Coupures sous un titre enregistrées avant postext 1.5. Jusqu’à postext 1.4, le paragraphe placé sous un titre en pied de colonne gardait là autant de lignes qu’il en tenait, si peu qu’il en passât à la colonne suivante. Il respecte désormais aussi le minimum d’orphelines, faute de quoi le titre passe à la suite avec lui (Titres et table des matières → Titres → Coupure sous un titre). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Coupure sous un titre sur Remplir la colonne quand il lit un enregistrement de projet antérieur à la version 8, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 8, ou un postext-config.json exporté avant, lorsqu’un chapitre du livre a un titre (un postext-config.json ne contient pas de chapitres : le réglage y est donc appliqué chaque fois que le fichier est plus ancien) et que la configuration garde Lier au suivant et le contrôle des orphelines activés. Réglez-le sur Selon les règles pour mettre le livre en page selon la règle actuelle.
Conteneurs de paragraphes enregistrés avant postext 1.5. Jusqu’à postext 1.4, l’espace sous un conteneur :::paragraphs était celui du style (le plus grand entre son espace entre paragraphes et sa marge inférieure), placé sous la dernière ligne avant que le texte ne se recale sur la grille ; l’espace qu’un titre garde au-dessus de lui s’y ajoutait, et l’espacement des paragraphes du texte courant ne comptait pas : un titre se trouvait donc plus loin d’une bibliographie que d’un paragraphe, et le paragraphe qui suivait un groupe d’entrées serrées en était plus proche que de tout autre. Cet espace fusionne désormais avec celui du bloc suivant et vaut au moins l’espacement des paragraphes du texte (Typographie → Styles de paragraphe → Espace sous un conteneur, Fusionner). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Espace sous un conteneur sur Additionner (1.4) quand il lit un enregistrement de projet antérieur à la version 8, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 8, ou un postext-config.json exporté avant, lorsque la configuration déclare un style de paragraphe et qu’un chapitre du livre ouvre un conteneur :::paragraphs. Un postext-config.json ne contient pas de chapitres : le réglage y est donc appliqué chaque fois que le fichier est plus ancien et déclare un style de paragraphe. Choisissez Fusionner pour mettre le livre en page selon la règle actuelle.
Mots composés enregistrés avant postext 1.5. Jusqu’à postext 1.4, la coupure optimale des lignes ne terminait jamais une ligne justifiée après le trait d’union d’un mot composé (well-known) dans un paragraphe sans gras, italique ni autre mise en forme, alors qu’elle le faisait dans un paragraphe mis en forme. Une ligne peut désormais s’y terminer dans tous les paragraphes (Typographie → Texte courant → Paragraphes → Coupure après les traits d’union). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Coupure après les traits d’union quand il lit un enregistrement de projet antérieur à la version 8, une configuration de travail enregistrée sous une estampille plus ancienne (ou sans estampille), un fichier .postext dont le manifeste est antérieur à configVersion: 8, ou un postext-config.json exporté avant, lorsqu’un chapitre du livre place un trait d’union entre deux lettres (un postext-config.json ne contient pas de chapitres : le réglage y est donc désactivé chaque fois que le fichier est plus ancien). Activez-le pour mettre le livre en page selon la règle actuelle.
Poèmes et styles suspendus enregistrés avant postext 1.23. Jusqu’à postext 1.22, un poème :::verse dont les lignes ne portaient pas de || était composé en hémistiches isolés, chaque ligne centrée, et le retrait suspendu d’un style de paragraphe remplaçait son retrait de première ligne. Un tel poème est désormais composé ligne à ligne (Typographie → Texte courant → Vers → Poèmes sans séparateur, Ligne à ligne), et un style qui définit les deux retraits commence sa première ligne au retrait de première ligne. Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Poèmes sans séparateur sur En hémistiches (1.22) quand il lit un enregistrement de projet antérieur à la version 9, ou une configuration de travail ou un export postext-config.json estampillé sous 9, dont les chapitres contiennent un tel poème, et il supprime le retrait de première ligne d’un style qui est aussi suspendu. Il désactive aussi Sauts de ligne forcés (Typographie → Texte courant → Paragraphes) quand les chapitres d’un tel enregistrement terminent une ligne par une barre oblique inverse ou placent \\ avant une espace, ce qui s’imprimait jusqu’à postext 1.22 (toujours pour un export postext-config.json, qui ne contient pas de chapitres). Et il désactive Blocs de code délimités (Typographie → Code) quand les chapitres contiennent un bloc ``` ou ~~~, dont les lignes étaient lues comme du Markdown jusqu’à postext 1.22 (toujours pour un export).
Poèmes enregistrés avec postext 1.23. Dans postext 1.23, un vers d’un poème composé ligne à ligne qui dépassait la justification, ne serait-ce qu’un peu, était rejeté à la ligne. Il resserre désormais ses espaces entre mots, jusqu’à l’espacement minimal, et reste sur une ligne quand cela suffit (Typographie → Texte courant → Vers → Resserrer avant de rejeter). Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Resserrer avant de rejeter quand il lit un enregistrement de projet, une configuration de travail ou un export postext-config.json estampillé 9 ou moins dont les chapitres composent un poème ligne à ligne (toujours pour un export, qui ne contient pas de chapitres).
Textes de maquette enregistrés avec postext 1.23. Jusqu’à postext 1.23, un élément de texte d’une maquette de titre ou d’une page de partie qui ne définissait pas de débordement était coupé à une ligne avec des points de suspension. Il passe désormais sur plusieurs lignes, et Ajouter un texte laisse le Débordement à l’emplacement. Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox règle Débordement sur Ellipse à la fin (…) pour chacun de ces éléments quand il lit un enregistrement de projet, une configuration de travail, un fichier .postext ou un export postext-config.json estampillé 9 ou moins.
Tableaux dans le texte et colonnes enregistrés avec postext 1.24. Jusqu’à postext 1.24, un tableau placé here qui ne tenait pas dans le reste de sa colonne passait entier à la suivante, un bloc :::columns hors d’un encadré était ignoré, et un encadré ne se coupait jamais à l’intérieur d’un groupe :::columns. Désormais, le tableau est coupé entre deux rangées, et le groupe compose ses blocs en colonnes et continue dans la colonne ou la page suivante. Pour qu’un livre enregistré à l’époque garde ses pages, le Sandbox désactive Appliquer aux tableaux placés dans le texte (Tableaux) quand il lit un enregistrement de projet, une configuration de travail ou un export postext-config.json estampillé sous 11 dont les chapitres insèrent une ressource, et Colonnes dans le texte, et groupes qui se coupent (Colonnes) quand ils contiennent un bloc :::columns (toujours pour un export, qui ne contient pas de chapitres).
Ces figeages retiennent ce que chacun de ces changements de règle déplacerait. La version 1.5 corrige aussi des bogues de mise en page, et une correction n’a pas de figeage, si bien qu’un livre enregistré peut encore voir une page bouger là où l’une d’elles s’applique : la bande d’un titre de chapitre sur toute la largeur de la page sans maquette, une lettrine dans une maquette de titre, un paragraphe dans un encadré, un paragraphe lâche que l’équilibrage étire, un encadré flottant dont la marge est plus large qu’une ligne, un titre courant centré ou aligné à droite avec une approche, la deuxième colonne sous une ouverture sur toute la largeur de la page, un titre courant tiré d’un titre coupé après un trait d’union, un mot plus large que sa ligne coupé à côté de son propre trait d’union, le reste d’un mot plus large que sa ligne, qui garde désormais ses propres points de coupure, et l’élément qui suit une liste imbriquée dans une autre (voir Taille des formules pour la liste).
Le stockage est partagé entre les langues de l’interface. Un document par défaut intact passe au markdown par défaut de la langue courante et réinstalle les ressources d’exemple quand la langue change : ouvrir le Sandbox en espagnol affiche donc des exemples en espagnol. Toute modification de votre part soustrait le document à ce comportement. Tous les aperçus déduisent aussi une langue de césure de la langue de l’interface quand la configuration ne nomme aucune langue (ni langue de césure ni locale).
#Export et import
Un livre entier voyage sous forme de fichier .postext : une archive zip qui a exactement la structure d’un répertoire de paquet de préréglage (preset.json, chapters/*.md, resources/* et fonts/* ; voir Format des paquets de préréglage). L’archive contient aussi la pagination du livre dans layouts.json (le nombre de pages et la numérotation de chaque chapitre, estampillés de la version du moteur, de la configuration et des ressources avec lesquelles ils ont été calculés), si bien qu’un livre importé s’ouvre déjà paginé et que seul ce que ces estampilles ne garantissent plus est remis en page. Un paquet en plusieurs langues compose chacune avec sa propre configuration et peut donc contenir une pagination par langue, layouts.<locale>.json (layouts.zh-Hant.json), lue avant layouts.json. Le document actif exporte la pagination qu’il détient ; un projet ou un préréglage exporté depuis sa ligne emporte celle enregistrée la dernière fois qu’il était le livre de travail. Une image de couverture est écrite comme thumbnail du manifeste et survit donc à l’aller-retour. Le menu Nouveau du panneau Livres (Ouvrir un fichier .postext…) importe un fichier comme nouveau livre ; le menu ⋯ de chaque ligne a son propre Télécharger (.postext), et celui du livre ouvert exporte le document de travail. Les fichiers écrits par des versions antérieures (un manifeste de version 1 avec un seul document.md) s’importent comme un livre d’un chapitre. Un livre dans une seule langue garde les libellés de figure et de tableau de cette langue quelle que soit la langue de l’interface : un fichier espagnol ouvert depuis /en/sandbox imprime Figura et Tabla, sauf si sa configuration nomme d’autres types de ressource. La langue est celle que nomme le fichier ou, s’il n’en nomme aucune, celle que fixe sa configuration (locale, puis la langue de césure). L’import accepte les fichiers à la racine de l’archive ou sous un unique dossier de premier niveau (comme lorsqu’on compresse le dossier lui-même ; les entrées __MACOSX et les fichiers cachés sont ignorés). Les polices sont écrites comme fichiers séparés, jamais dans config.customFonts ; les fichiers .woff sont ignorés avec un avertissement dans les deux sens, de même que les ressources dont les octets manquent. Décompressez un fichier exporté dans <presets-root>/<dir>/ et ajoutez une entrée à index.json pour le servir comme préréglage.
Les mêmes fichiers sont lus et écrits par le package postext (openBundle, createBundle, buildBundle ; voir Paquets). Un livre exporté ici s’ouvre dans votre propre programme, et un livre écrit par votre programme s’ouvre ici. Le Sandbox devient ainsi un endroit où inspecter et affiner ce qu’un programme met en page : exportez le livre depuis le programme, importez-le ici, corrigez-le avec l’aperçu en direct, exportez-le de nouveau et rechargez-le dans le programme. Le skill pour agents livre lui aussi ses portages en fichiers .postext.
Le texte et la maquette s’exportent aussi séparément depuis les en-têtes des panneaux Texte et Maquette.
L’en-tête du panneau Maquette télécharge postext-config.json sans les valeurs par défaut :
{
"type": "postext-config",
"version": 1,
"config": { ... }
}L’en-tête du panneau Texte télécharge le chapitre actif en simple fichier .md, et son bouton Importer remplace le chapitre actif par le contenu d’un fichier .md. Le bouton Importer du panneau Maquette ouvre un sélecteur de fichiers .json, validés selon le type et la version attendus ; les fichiers invalides sont ignorés sans message. L’enveloppe postext-markdown.json et le format combiné postext-sandbox.json des versions antérieures n’existent plus.
#Agents : WebMCP
Le Sandbox fournit à un agent du navigateur ses propres outils via WebMCP (document.modelContext), si bien qu’un assistant travaille sur le livre lui-même au lieu de cliquer dans l’interface. Il n’y a rien à configurer : les outils sont enregistrés tant que le Sandbox est à l’écran, et le reste du site enregistre quelques outils à lui sur chaque page (chercher dans la documentation et le livre de recettes, lire une page en Markdown, ouvrir une recette dans le Sandbox, changer de langue et de thème).
Ils sont pensés pour la boucle qu’un graphiste mène à l’œil : changer quelque chose, regarder la page, changer encore.
- Voir.
sandbox_get_state,sandbox_render_page,sandbox_inspect_pages,sandbox_inspect_point,sandbox_inspect_comic,sandbox_get_warnings: le livre avec ses chapitres et leurs plages de pages, et ce qui se passe dans l’interface (la sélection, un message, une question en attente de réponse) ; n’importe quelle page en JPEG, PNG ou WebP à la largeur demandée, ou un recadrage pour l’examiner de près, avec l’aperçu d’impression sur demande ; la même page sous forme de données (ses blocs et ses lignes, le remplissage de chaque colonne, les lignes lâches ou terminées par un mot coupé) ; ce qui se trouve en un point d’une page (la ligne de la source, un lien et sa destination, une cellule de tableau) ; les cases et les bulles d’une page de bande dessinée ; et ce que les vérifications trouvent dans n’importe quel chapitre ou dans tout le livre, quels que soient le chapitre et la visionneuse à l’écran. - Modifier.
sandbox_set_config,sandbox_get_config,sandbox_find_setting,sandbox_edit_text,sandbox_write_text,sandbox_read_text,sandbox_search_text,sandbox_select_text,sandbox_undo_text,sandbox_manage_chapters,sandbox_save_resource,sandbox_save_font,sandbox_edit_comic,sandbox_import_word: n’importe quel réglage par son chemin (bodyText.fontSize,page.margins.top,headings.levels[level=2].fontSize,header.elements[id=titleOdd].italic), le texte par recherche-remplacement exact, avec annulation, les chapitres, les images, les dessins SVG, les vidéos, les tableaux avec leur mise en forme, les polices, les cases et les bulles d’une bande dessinée, et un document Word importé avec ses styles mis en correspondance. Une modification répond avec chaque valeur avant et après et le nombre de pages atteint par chaque chapitre ; un réglage indique aussi la valeur que le moteur en a tirée et quels autres réglages l’ont suivi, et une valeur que le moteur ne peut pas résoudre est refusée sans que rien ne change. - Montrer.
sandbox_set_view,sandbox_go_to_page,sandbox_run_viewer: l’onglet de visualisation, le panneau latéral, chapitre ou livre entier, zoom, ajustement et pages en regard, la taille de caractère du lecteur, l’aperçu d’impression, les repères tracés sur les pages, la loupe du Folio, et la page à l’écran (par son numéro, par un passage, par une ancre ou par une entrée de la table des matières d’un EPUB) ; régénérer le PDF ou l’EPUB, imprimer, et lire une vidéo sur une page. - Conserver.
sandbox_list_books,sandbox_open_book,sandbox_save_book,sandbox_import_book,sandbox_export,sandbox_word_templates,sandbox_answer: les exemples et vos projets avec leurs couvertures, un fichier.postextimporté, le livre (ou un livre qui n’est pas ouvert) écrit en PDF, EPUB,.postext, Word, Markdown ou ses réglages en JSON, les modèles de l’import Word, et la réponse à une question que pose le Sandbox.
Un outil qui modifie le livre attend la mise en page, si bien que l’image suivante montre toujours les nouvelles pages ; une page est mise en page et peinte pour l’outil quel que soit l’onglet à l’écran. Ce qui ne peut pas être défait (supprimer un chapitre, une ressource ou un projet, restaurer l’original, importer un document Word par-dessus le texte, remplacer votre copie d’un livre) est marqué comme ayant des conséquences, pour que le navigateur puisse d’abord vous demander votre accord. Comme avec l’interface, tout reste dans votre navigateur : les outils n’atteignent rien que le Sandbox lui-même n’atteigne pas.
WebMCP est un brouillon : Chrome le propose en origin trial, et derrière chrome://flags/#enable-webmcp-testing. Dans un navigateur qui ne le prend pas en charge, les mêmes outils sont disponibles sur window.postextWebMcp (listTools(), executeTool(name, args)), pour un agent capable d’exécuter du script dans la page. Quand vous intégrez le Sandbox, webmcp={false} laisse les outils de côté (voir Props).
La page WebMCP montre ce qu’on peut demander à un agent et comment s’appelle chaque outil, avec des exemples.
#Utilisation autonome
Le Sandbox existe aussi sous forme de package React autonome (postext-sandbox), que l’on peut intégrer dans n’importe quelle application React :
npm install postext-sandbox postextimport { PostextSandbox } from 'postext-sandbox';
function App() {
return (
<PostextSandbox
initialMarkdown="# Hello World"
initialConfig={{ layout: { layoutType: 'double' } }}
onMarkdownChange={(md) => console.log(md)}
onConfigChange={(cfg) => console.log(cfg)}
/>
);
}#Props
| Prop | Type | Description |
|---|---|---|
initialMarkdown | string | Contenu markdown de départ |
initialConfig | PostextConfig | Configuration de mise en page de départ |
className | string | Classe CSS du conteneur racine |
labels | Partial<SandboxLabels> | Libellés de l’interface à remplacer, fusionnés avec les libellés anglais intégrés par défaut ; passez les libellés traduits avec locale pour une intégration dans une autre langue |
locale | string | Langue de l’interface ('en' par défaut). Elle choisit les types de ressource par défaut et les ressources d’exemple localisés (un préréglage ou un fichier dans une seule langue reçoit les types de ressource de sa propre langue), et fournit la langue de césure qu’utilisent les aperçus quand aucune n’est configurée |
presetSources | { url: string; private?: boolean }[] | Sources de préréglages distantes, essayées dans l’ordre après le préréglage intégré. Chaque url est une URL de base qui sert un index.json (voir Format des paquets de préréglage) ; private: true marque les préréglages de la source comme privés et rend leur indicateur default éligible au chargement automatique. Les sources qui ne répondent pas n’apportent simplement rien |
hashBundles | Record<string, (id: string, lang: string | null) => string | string[] | null> | Livres liés par une clé de fragment propre à l’hôte : { recipe: (slug, lang) => fait que #recipe=<slug>&lang=es ouvre ce paquet. Renvoyez l’URL d’un fichier .postext sur l’origine même de la page, plusieurs URL à essayer dans l’ordre (la première qui répond l’emporte), ou null pour un identifiant que l’hôte ne sert pas. La première visite importe le fichier comme un projet enregistré avec le lien (recipe:<slug>:<lang>) ; une visite ultérieure demande s’il faut ouvrir ce projet, modifications comprises, ou le remplacer par le fichier tel qu’il est servi maintenant. Le fragment est ensuite réécrit en #project=<id> |
onConfigChange | (config) => void | Rappel appelé quand la configuration change |
onMarkdownChange | (markdown) => void | Rappel appelé quand le markdown change |
webmcp | boolean | Enregistre les outils WebMCP du Sandbox pour les agents du navigateur tant qu’il est monté. true par défaut |
themeToggle | ReactNode | Composant personnalisé de changement de thème, placé en bas de la barre d’activité |
languageSwitcher | ReactNode | Composant personnalisé de changement de langue, placé en bas de la barre d’activité |
homeUrl | string | Quand elle est définie, affiche en haut de la barre d’activité un logo d’accueil qui pointe vers cette URL |
homeLink | ReactNode | Nœud personnalisé pour l’emplacement d’accueil, qui remplace le lien logo par défaut (prioritaire sur homeUrl) |
#Prérequis CSS
Le package utilise des classes utilitaires Tailwind CSS qui font référence à des propriétés personnalisées CSS. Votre application hôte doit fournir ces variables :
--background,--foreground: couleurs de base--surface: couleur des surfaces surélevées ;--surface-2: lignes survolées et options mises en évidence (à défaut,--background)--slate: couleur du texte atténué--rule: couleur des bordures et séparateurs ;--rule-strong: filet plus marqué pour les contrôles survolés (à défaut,--slate)--brand: couleur d’accent du repère de panneau actif, des anneaux de focus, des interrupteurs et des choix sélectionnés--brand-hover: couleur d’accent au survol--brand-soft: fond d’accent translucide derrière les choix sélectionnés (à défaut,--surface)--brand-contrast: bouton d’un interrupteur activé (à défaut,--background)--destructive: couleur des actions destructrices et des erreurs--accent-blue: couleur des liens et des accents--font-sans: famille de caractères de l’interface--font-mono: famille à chasse fixe (pour l’éditeur de code)--font-display,--brand-blue,--brand-gilt: caractère et couleurs facultatifs du logo par défaut dans la barre d’activité (à défaut, Georgia,#2b4acbet#d8a21a)
Le site règle --brand sur le doré dans le thème sombre et sur le bleu dans le thème clair. Les versions antérieures lisaient --gilt et --gilt-hover ; le Sandbox ne les utilise plus.
Les popovers, menus et infobulles s’affichent dans un portail sur document.body : définissez donc les variables sur :root (ou body), pas seulement sur l’élément qui enveloppe le Sandbox. La compilation Tailwind de l’hôte doit analyser les sources du package (@source "…/postext-sandbox/src/**/*.tsx" dans Tailwind 4) pour que les classes utilitaires qu’il emploie soient générées.
#Format des paquets de préréglage
Annexe. Une source de préréglages est un répertoire (servi en HTTP) dont la racine contient un index.json qui liste des répertoires de préréglage ; chaque répertoire contient un manifeste preset.json ainsi que les fichiers markdown, de ressources et de polices auxquels il fait référence. L’outillage scripts/presets/ du dépôt génère des paquets exactement de cette forme, et un fichier .postext exporté depuis le Sandbox est un tel répertoire compressé (sans l’index.json).
<presets-root>/
index.json
<preset-dir>/
preset.json
chapters/ one .md per chapter, in order (a version 1 manifest names a single document instead)
resources/ figures: .svg / .png / .jpg / .jpeg / .webp / .gif (+ optional .pdf print masters)
fonts/ .otf / .ttf / .woff2 single faces
#index.json
{
"version": 1,
"presets": [
{
"id": "acme-journal", // stable id, [a-z0-9-]
"dir": "acme-journal", // directory name relative to index.json
"name": "Acme Journal",
"description": "Two-column journal article", // optional
"locale": "en", // optional
"default": true, // optional, at most one
"locales": ["en", "es"], // optional: every locale the bundle carries
"openLocale": "en", // optional: the locale it opens in when none is asked for
"thumbnail": "thumbnail.jpg", // optional: preview shown in the picker
"license": "CC BY 4.0", // optional: shown as a tag
"credits": "Text and images: ESO", // optional: one line under the description
"tags": ["magazine", "two-column"], // optional
"binding": "left" // optional: the edge the website's shelf draws the spine on ("right" for a right-bound book)
}
]
}#preset.json
{
"version": 2,
"id": "acme-journal",
"name": "Acme Journal",
"description": "Two-column journal article", // optional
"locale": "en", // optional
"default": true, // optional
"configVersion": 8, // optional: the configuration rules `config` is written for
// The same optional showcase fields as the index entry:
// "locales", "openLocale", "thumbnail", "license", "credits", "tags"
// The book's chapters, in order — or one list per locale
"chapters": [
{ "title": "Introduction", "file": "chapters/01-introduction.md" },
{ "title": "Methods", "file": "chapters/02-methods.md" }
],
// "chapters": { "en": [ … ], "es": [ … ] },
// Version 1 manifests use a single document instead and are still accepted:
// "version": 1, "markdown": "article.md" (or a locale → file map)
// Optional PostextConfig JSON (page, margins, columns, typography...).
// Do NOT put customFonts here: fonts come from the `fonts` array below.
"config": { },
"resources": [
{
"id": "fig-1-1", // referenced from markdown (:ref)
"typeId": "figure", // resource type id (figure, table, ...)
"kind": "svg", // "svg" | "bitmap" | "table"
"file": "resources/fig-1-1.svg", // svg/bitmap only, relative to preset.json
"width": 240.5, // optional, pt (svg) / px (bitmap)
"resolution": 300, // optional, bitmap only: ppi at its natural print size
"pdfFile": "resources/fig-1-1.pdf", // optional, svg only: vector print master (see notes)
"height": 180, // optional
"caption": "Caption text",
"altText": "Accessible description", // optional
"safeArea": { "x": 0.18, "y": 0.25, "width": 0.5, "height": 0.6 }, // optional, svg/bitmap only: the part always shown, in fractions of the picture
"placement": { "position": "top", "span": "column" }, // optional
"note": "Source: ...", // optional
"table": { "model": { "rows": [[{ "content": "A", "isHeader": true }]], "headerRowCount": 1 } }
// kind "table" only
}
],
"fonts": [
{
"name": "Some Family", // family name used by the config
"variants": [
{ "weight": 400, "style": "normal", "file": "fonts/SomeFamily-Regular.otf" },
{ "weight": 400, "style": "italic", "file": "fonts/SomeFamily-Italic.otf" },
{ "weight": 700, "style": "normal", "file": "fonts/SomeFamily-Bold.otf" }
]
}
]
}Remarques :
- L’
iddepreset.jsondoit correspondre à l’entrée deindex.json;description,localeetdefaultdans le manifeste remplacent les valeurs de l’index une fois le préréglage chargé, de même que les champs de vitrinelocales,openLocale,license,creditsettags.openLocale, l’une deslocales, est la langue dans laquelle le livre s’ouvre quand un lien ou un clic n’en demande aucune (l’étagère de la page d’accueil y renvoie aussi) : définissez-la quand l’original n’est pas dans la langue du lecteur, comme le fait la vitrine 紅樓夢 aveczh-Hant, pour que sa traduction anglaise ne s’ouvre pas pour tous les lecteurs anglophones. Sans elle, c’est la langue de l’interface qui décide. Le sélecteur affiche en étiquettes chaque langue delocales(oulocale) et la licence, les crédits sous la description, etthumbnail(une petite image de page relative au répertoire du préréglage) à la place de la colonne de coche de la ligne ; un livre copié depuis le préréglage (Faire ma propre copie) la garde comme couverture. Les préréglages de vitrine publics deapps/web/public/presets/utilisent tous ces champs et contiennent unCREDITS.mdqui donne la licence et la source de chaque texte et de chaque image. configVersion(facultatif) nomme les règles de configuration pour lesquellesconfiget les configurationslocalizedsont écrites. Tous les outils d’écriture depuis postext 1.5 le fixent à 8. Un manifeste qui ne l’a pas a été écrit par postext 1.4 ou antérieur, et ses sauts de titre, la taille de ses formules, l’espace autour des figures dans le texte (dans le texte courant et dans les encadrés), les enrichissements des titres, les lettrines, la place sous une ligne terminée par un deux-points, les coupures d’encadrés, les coupures après les tirets et après le trait d’union des mots composés, le texte en drapeau, les coupures sous un titre et l’espace sous les conteneurs de paragraphes sont lus tels que 1.4 les mettait en page (voir Sauts de titre enregistrés par postext 1.4 ou antérieur, Taille des formules enregistrée avant postext 1.5, Figures dans le texte enregistrées avant postext 1.5, Figures dans le texte des encadrés enregistrées avant postext 1.5, Enrichissements des titres et lettrines enregistrés avant postext 1.5, Listes après deux-points enregistrées avant postext 1.5, Coupures d’encadrés enregistrées avant postext 1.5, Tirets et texte en drapeau enregistrés avant postext 1.5, Mots composés enregistrés avant postext 1.5, Coupures sous un titre enregistrées avant postext 1.5 et Conteneurs de paragraphes enregistrés avant postext 1.5 sous Persistance) ; un manifeste estampillé de 3 à 7 (une préversion de 1.5) ne reçoit que les figeages des règles postérieures. Avec 3, ce sont la taille des formules, l’espace autour des figures dans le texte, les cinq figeages des règles 6, les deux des règles 7 et les trois des règles 8 ; avec 4, l’espace autour des figures dans le texte et les figeages des règles 6, 7 et 8 ; avec 5, les figeages des règles 6, 7 et 8 ; avec 6, ceux des règles 7 et 8 ; avec 7, ceux des règles 8 seulement. Fixez-le à 8 quand vous écrivez un manifeste à la main pour les règles actuelles.view(facultatif) indique comment le Sandbox ouvre le paquet :{ "canvasScope": "book" }met tout le livre en page sur le canvas (voir Livres et chapitres) ; en son absence, le canvas affiche un chapitre à la fois. Les livres exportés le contiennent quand il est défini. Un livre de plus de 200 chapitres s’ouvre un chapitre à la fois, quoi qu’il demande.start(facultatif) indique où commence le livre quand le paquet contient une partie d’un ouvrage plus long :{ "pageIndexOffset": 57, "pageNumbering": { "startAt": 58 }, "headings": { "h1": 3 } }l’ouvre à la page 58, une page paire, au chapitre 4. C’est lacontinuationdu premier chapitre (buildDocument) ; le Sandbox met le livre en page à partir de là, la conserve avec le livre quand celui-ci est enregistré comme projet et la réécrit à l’export. Aucun panneau ne la modifie. Une entréelocalizedpeut porter son proprestartpour son édition.localized(facultatif) contient des remplacements par langue pour un paquet bilingue :{ "es": { "config": { … }, "resources": [ { "id": "fig-1", "caption": "…", "note": "…", "altText": "…" } ] } }. Les remplacements de la langue dans laquelle les chapitres ont été choisis s’appliquent par-dessus laconfigcommune (les clés de premier niveau sont remplacées en bloc ; typiquementresourceTypesavec des préfixes de légende traduits) et lesresources(légende, note, texte alternatif et cellules de tableau fusionnés par identifiant) ; une langue sans entrée garde la formulation commune. Une entrée peut aussi porter sa propreview, qui s’applique à cette édition par-dessus la vue commune : 紅樓夢 ouvre ses éditions chinoises sur le livre entier, et l’anglais de Joly, bien plus lent à peindre en entier, un chapitre à la fois ("en": { "view": { "canvasScope": "chapter" } }).chapters(version 2) est une liste de{ title, file }dans l’ordre du livre, ou une table langue → liste ;markdown(version 1) est un nom de fichier ou une table langue → fichier. Dans les deux cas, le Sandbox choisit l’entrée correspondant à la langue demandée (balise exacte, à la casse près ; puis même langue et même écriture, si bien quezh-TWlitzh-Hantavantzh-Hans; puis même langue dans l’autre écriture, si bien qu’un lecteurzh-TWd’un paquet dont la clé est un simplezhreçoit le chinois ; puis lalocaledu préréglage lui-même, puis la première entrée), et seuls les fichiers de chapitre de cette langue sont lus. Untitlede chapitre vide est tiré du premier titre de niveau 1 du fichier. Le Sandbox écrit toujours la version 2.width/heightsont facultatifs pour les ressourcessvgetbitmap: s’ils manquent, ils sont lus dans le fichier au chargement. Un bitmap peut aussi porterresolution(sa résolution en ppi à sa taille d’impression naturelle) etfileResolution(celle qu’indique son fichier, lue au chargement quand la configuration fixelayout.bitmapResolution: 'file').pdfFile(ressources svg uniquement) désigne un PDF d’une page contenant la même figure en vectoriel, typiquement l’export Illustrator ou PDF original dont le SVG a été tiré. L’export PDF incorpore cette page telle quelle (polices, dégradés et espaces colorimétriques intacts) à la place du SVG ; les aperçus canvas et HTML continuent d’utiliser le SVG. Ce fichier est ignoré en mode encre unique, dont la passe de recoloration n’agit que sur le balisage SVG, et un fichier manquant ne fait que supprimer le master, jamais la figure. Modifier la source SVG dans le détail de la ressource détache le master (il avait été fait pour la source telle qu’elle était), si bien que l’export PDF suit dès lors le SVG modifié ; restaurez l’original (Restaurer l’original… dans le panneau Livres) pour le récupérer. Les SVG sans master sont émis sous forme de tracés vectoriels quand ils restent dans le sous-ensemble du moteur PDF (formes de base, tracés, groupes,use, masques d’écrêtage, remplissages et contours unis, opacité, et blocstext/tspancomposés dans les polices que le document peut charger : d’abord les polices personnalisées, puis les familles hébergées par Google), et pixellisés à 600 dpi sinon.- Le
textSVG s’affiche partout dans les polices du livre : les aperçus et l’EPUB incorporent dans le SVG, avant de l’afficher, les fontes que nomme son texte (un<img>ne voit pas les polices de la page), les familles personnalisées telles qu’elles ont été téléversées et les familles Google sous forme des fichiers Fontsource qui contiennent les caractères, et l’export PDF compose les blocs en vrai texte sélectionnable dans les mêmes fontes incorporées. Nommez la famille dansfont-familyexactement comme elle apparaît sous Polices. Une ressource peut s’en dispenser avec"inlineFonts": falsedans son entrée de manifeste (svg.inlineFonts). - L’éditeur de source SVG ne laisse taper qu’à l’intérieur des nœuds de texte (teintés), pour qu’une figure ne puisse pas être cassée par accident ; le bouton de verrou de son en-tête ouvre toute la source (coordonnées, couleurs, structure), et verrouiller de nouveau relance l’analyse des nœuds de texte.
table.modelest unTableModelPostext :rowsest un tableau de cellules rangé par rangées (content, et facultativementcolSpan,rowSpan,isHeader,align,verticalAlign),headerRowCountle nombre de rangées d’en-tête initiales, etcolumnWidthsun tableau facultatif de poids relatifs des colonnes.table.styleIdnomme facultativement l’un destableStylesde la configuration.- Les fichiers de polices sont stockés dans IndexedDB sous des identifiants dérivés de l’identifiant du préréglage et du chemin du fichier, et les familles sont ajoutées à
config.customFontsquand le préréglage est appliqué ; unindex.jsonabsent ou mal formé ne produit aucun préréglage plutôt qu’une erreur. <preset-dir>/fingerprint.jsonest facultatif et, sur la route de développement, virtuel : quand ce fichier n’existe pas,GETrépond{ "fingerprint": "<sha1 hex>", "files": <n> }, calculé à partir des métadonnées des fichiers du répertoire (chemin relatif, date de modification et taille de chaque fichier jusqu’à quatre niveaux de profondeur, en ignorant les fichiers cachés etnode_modules), jamais à partir de leur contenu, avecCache-Control: no-store. Le Sandbox l’interroge régulièrement pour suivre les modifications du paquet (voir panneau Livres). Un hébergement statique peut servir un vraifingerprint.jsonde même forme, ou n’en servir aucun, auquel cas ses préréglages ne sont pas suivis.
#Feuille de route
Les fonctionnalités suivantes sont prévues pour de futures versions :
- Édition collaborative : modifier un même livre à plusieurs depuis différents navigateurs