Capitolo 20 · Parte III · In pratica
Sandbox
Ambiente interattivo per sperimentare con il motore di impaginazione Postext
In breve
La Sandbox è uno strumento gratuito di questo sito per provare Postext senza installare nulla. Scrivi il testo da una parte e vedi le pagine finite dall’altra, e cambiano mentre scrivi. Puoi scegliere font, formati di pagina, colonne e colori, e aggiungere immagini. Puoi organizzare il lavoro come un libro con capitoli e scaricarlo come PDF o come e-book EPUB. Il lavoro si salva nel tuo browser man mano che procedi.
Un ambiente interattivo per il motore di impaginazione Postext.
La Sandbox ti offre un’interfaccia da editor in cui scrivi il testo, gestisci risorse e font, regoli il progetto grafico e vedi il risultato in tempo reale in cinque viste sincronizzate: canvas, PDF, Folio (il libro stampato in 3D), HTML ed EPUB 3. È pensata per sperimentare. Puoi cambiare la tipografia o il numero di colonne, provare diverse posizioni delle figure e osservare come risponde il motore. I pannelli usano termini editoriali (libri, figure, riquadri, testatine) invece dei termini del motore, così chi viene dall’editoria può orientarsi senza conoscere lo schema di configurazione. Ogni controllo è accessibile da tastiera e con lettore di schermo.
#Struttura dell’interfaccia
La Sandbox ha tre aree principali: una stretta barra delle attività per passare da un pannello all’altro, una barra laterale ridimensionabile che contiene il pannello attivo, e a destra un’area di visualizzazione con le schede di output. Le intestazioni dei pannelli, la barra delle schede dell’area di visualizzazione e la cella del logo in cima alla barra delle attività hanno la stessa altezza, così la fascia superiore si legge come un’unica riga lungo tutta la finestra.
#Barra delle attività
Una stretta striscia lungo il bordo sinistro ha un pulsante per pannello. Ogni pulsante mostra un’icona con sotto un’etichetta di una parola, e un suggerimento più lungo come tooltip (lo stesso suggerimento è la descrizione accessibile del pulsante). Dall’alto in basso:
- Libri (icona
Files): i tuoi libri e i libri di esempio - Capitoli (icona
BookOpen): il libro aperto e i suoi capitoli - Testo (icona
FileCode): scrivi e modifica il testo del capitolo corrente - Risorse (icona
FolderOpen): immagini, disegni SVG e tabelle usati nel libro - Font (icona
Type): i caratteri usati dal libro e i tuoi file di font - Grafica (icona
Settings2): impostazioni di pagina, tipografia, titoli, figure, riquadri ed esportazione - Verifiche (icona
AlertTriangle): problemi di composizione trovati nell’impaginazione. L’icona porta un badge con il conteggio aggiornato degli avvisi correnti, che si ferma a99+.
Un clic sul pulsante del pannello attivo chiude la barra laterale, e un clic su un altro pulsante passa a quel pannello. La barra è un unico punto di tabulazione: i tasti freccia (↑ / ↓, con ritorno all’inizio), Home e Fine spostano il focus tra i pulsanti, e Invio o Spazio aprono il pannello che ha il focus.
L’applicazione host può aggiungere voci proprie alla barra: un link con logo alla home facoltativo nella cella superiore (tramite le prop homeUrl o homeLink), e in basso un selettore del tema e un selettore della lingua. I libri interi si scambiano come file .postext dal pannello Libri, e le intestazioni dei pannelli Testo e Grafica esportano la loro parte (vedi Esportazione e importazione).
#Pannelli della barra laterale
La barra laterale è ridimensionabile. Trascina il separatore tra la barra laterale e l’area di visualizzazione, oppure portaci il focus con Tab e usa la tastiera: ← / → cambiano la larghezza del 2 % (10 % con Maiusc), e Home / Fine saltano alla larghezza minima e massima. Il separatore annuncia il suo valore corrente agli screen reader, e l’area di visualizzazione conserva sempre almeno 200 px. La barra laterale si chiude del tutto quando nessun pannello è attivo, e la sua larghezza viene ricordata tra una sessione e l’altra.
Le righe delle impostazioni mettono l’etichetta accanto al controllo, o sopra quando la barra laterale è stretta. Si usano le container query, quindi la disposizione segue la larghezza della barra laterale e non quella della finestra.
Pannello Testo
Un editor CodeMirror 6 per il Markdown del capitolo. Gli screen reader lo annunciano come Testo del capitolo. Offre:
- Evidenziazione della sintassi: titoli, enfasi, link, blocchi di codice e citazioni si distinguono a vista, con un’evidenziazione dedicata per il front matter YAML, le zone di matematica LaTeX, i chip in linea (
:chip[…]: le parentesi e gli attributi sono marcati e il testo del chip è colorato), il maiuscoletto (:smallcaps[…]: le parentesi sono marcate e il testo appare in maiuscoletto), i segni di orientamento del testo verticale (:tcy[…],:upright[…],:sideways[…]: parentesi marcate, testo con sottolineatura punteggiata) e le annotazioni cinesi (:dots[…],:name[…]e:book[…]con i loro segni disegnati sotto il testo;:ruby[…]{rt="…"}e{紅樓|hóng|lóu};:warichu[…]con la nota in corpo minore). Digitando:do,:na,:bo,:ruo:waviene proposta la direttiva - Completamento dei chip: digitando
:call’inizio di una parola viene proposto:chip[…](il cursore finisce tra le parentesi). Dentro{style="…"}vengono proposti gli id degli stili di chip configurati. - Completamento del maiuscoletto: digitando
:small’inizio di una parola (o subito dopo*/_) viene proposto:smallcaps[…], con il cursore tra le parentesi. - Tabulazioni:
:tabe:tab{…}sono evidenziati e proposti nel completamento come le altre direttive in linea. Il tasto Tab dell’editor non scrive un carattere di tabulazione, quindi nella Sandbox una tabulazione si scrive con:tab; un carattere di tabulazione incollato insieme al testo viene conservato, ed è una tabulazione in un paragrafo il cui stile imposta le tabulazioni. - Numeri di riga ed evidenziazione della riga attiva
- A capo automatico per i paragrafi lunghi
- Righe da destra a sinistra: una riga il cui testo comincia con una lettera araba o ebraica scorre da destra a sinistra, e il cursore e i tasti freccia la seguono. Il markup al suo interno (attributi
{…}, etichette[^id], il nome di una direttiva, un intero:ref[fig-1], la matematica, il codice, le destinazioni dei link) resta da sinistra a destra, così si legge come è stato digitato. I recinti di codice, il front matter e le righe che cominciano con una parola latina restano da sinistra a destra come prima. - Barra degli strumenti: comincia con Annulla / Ripeti, seguiti da grassetto, corsivo, titoli di livello 1–3, link, codice in linea, chip (avvolge la selezione in
:chip[…]), maiuscoletto (la avvolge in:smallcaps[…]), citazione, elenchi numerati e puntati, più quattro inseritori di direttive::::pagebreak:::space: una riga di spazio verticale (:::space{lines=N}per averne di più)- Colonne: un gruppo
:::columns{count=2}a due colonne, con il cursore sulla sua prima riga, nel testo o in un riquadro (da postext 1.25) :::numbering{format="decimal" startAt=1}: inserito con attributi di esempio che puoi modificare
Un listato di codice (un recinto ``` o ~~~ e le sue righe) è un’unica zona nell’editor: riceve uno sfondo da codice, e il markup di Postext al suo interno (matematica, chip, tabulazioni, segni d’indice) resta senza colore, così come il motore lo lascia senza leggerlo. Le applicazioni host possono aggiungere pulsanti propri alla barra degli strumenti tramite extraActions. L’editor comunica inoltre alle anteprime il cursore e la selezione, il che abilita la sincronizzazione clic-cursore: un clic sul testo dell’output reso sposta il cursore nella posizione corrispondente del Markdown, e le anteprime possono evidenziare la selezione corrente.
L’intestazione del pannello è un selettore di capitoli: frecce precedente/successivo, la posizione e il titolo del capitolo, e un menu che elenca ogni capitolo del libro con il suo intervallo di pagine, quando la paginazione è nota (vedi Libri e capitoli). Ogni capitolo ha la sua istanza dell’editor, quindi la cronologia di annullamento e la posizione del cursore si conservano per capitolo. L’intestazione offre poi cinque azioni:
- Reimposta (chiede conferma): ricarica la parte del documento del libro di esempio aperto. Ogni capitolo e l’intero insieme di figure vengono sostituiti con quelli dell’esempio (per l’esempio integrato, il documento di esempio della lingua e le risorse di esempio). La grafica resta com’è, tranne i font propri dell’esempio. Vedi Pannello Libri.
- Esporta: scarica il capitolo attivo come semplice file
.md, chiamato<book>-<nn>-<chapter>.mdin un libro di più capitoli, e altrimenti come il libro aperto odocument.md - Importa: sostituisce il capitolo attivo con il contenuto di un file
.md - Importa un documento Word: apre un manoscritto
.docxe fa corrispondere i suoi stili di Word agli stili di Postext prima che cambi qualunque cosa (vedi Documenti Word) - Esporta in Word: scarica il capitolo o l’intero libro come un
.docxche torna con ogni stile quando lo si importa di nuovo
Pannello Libri
Il primo pannello della barra delle attività: la galleria dei tuoi libri e dei libri di esempio, con il menu Nuovo, lo stato dell’ultima operazione e il banner di un libro di esempio che ha una nuova versione. Nel codice e nell’archiviazione un libro si chiama ancora project, e un libro di esempio preset.
Un clic su un libro (o su una delle etichette di lingua di un libro di esempio) lo apre, e quando è sullo schermo la barra laterale passa al pannello Capitoli. Un clic sul libro già aperto ci va subito. I menu delle righe (rinomina, duplica, scarica, nascondi, elimina) non cambiano mai pannello. Il libro aperto resta marcato nell’elenco. Il pannello ha due gruppi:
-
I miei libri: libri locali e modificabili, conservati nel browser (IndexedDB). Quello aperto è marcato; i suoi capitoli sono nel pannello Capitoli.
Mentre è aperto un tuo libro, il documento di lavoro è quel libro. Ogni modifica a testo, grafica, figure e font viene salvata in esso automaticamente (con lo stesso ritardo di 1 secondo di
localStorage), così puoi passare da un libro all’altro e tornare senza perdere nulla. I libri si creano dal menu Nuovo dell’intestazione:- Copia del libro aperto copia il libro aperto, le sue figure e i suoi font in un nuovo libro.
- Libro vuoto ne comincia uno vuoto.
- Apri un file .postext… importa un file.
Puoi anche duplicare qualunque riga. Finché non hai libri tuoi, il gruppo mostra uno stato vuoto con la stessa scorciatoia. Ogni riga ha un menu ⋯ con etichetta (Altre azioni per «…») con Rinomina…, Duplica, Scarica (.postext) ed Elimina…. Elimina chiede conferma proprio accanto al pulsante ⋯.
Rinomina apre in linea i campi del nome e della descrizione. Invio in uno dei due campi conferma entrambi, ed Esc annulla.
Un libro ha anche un’immagine di copertina, mostrata dove un libro di esempio mostra la sua miniatura. Una copia di un libro di esempio (o di un altro libro) ne adotta la copertina. Mentre una riga è in fase di rinomina, la copertina è il controllo che la imposta: fai clic per scegliere un PNG, JPEG, WebP, GIF o SVG, oppure usa la X accanto per togliere quella corrente. La copertina appartiene al libro, non alle sue figure, e viaggia con lui nell’esportazione e nell’importazione.
Un libro senza copertina ne riceve una dalla sua prima pagina (la prima pagina del primo capitolo): la prima volta che quella pagina viene impaginata e dipinta nella scheda Canvas, la Sandbox ne prende una piccola immagine (larga 240 px, JPEG) mentre il browser è inattivo, quando i font e le immagini della pagina sono arrivati. Viene conservata come copertina del libro, quindi un download la porta con sé come
thumbnaildel pacchetto. Un libro di esempio che non include una miniatura ne riceve una allo stesso modo, conservata nel browser (l’archiviopresetCoversdel database IndexedDB, una per esempio e lingua), mostrata nella sua riga e adottata da una sua copia o da un suo download. Una copertina esistente non viene mai sostituita, che sia arrivata con l’esempio, con un file importato, da una tua scelta o da una cattura precedente. Una copertina che togli viene ripresa dalla prima pagina in una visita successiva.Aprire un libro non chiede mai conferma: il libro che lasci viene salvato prima, qualunque esso sia. Mentre carica il successivo, l’area di visualizzazione mostra Apertura del libro… invece del libro che hai lasciato. Eliminare il libro aperto riporta all’esempio integrato.
-
Libri di esempio: punti di partenza, elencati sotto i tuoi libri. Il pacchetto in sé non cambia mai, ma le tue modifiche a un libro di esempio vengono conservate: la prima modifica ne salva una copia (la sua bozza) nel browser, una per esempio e lingua, e la riga mostra l’etichetta Modificato. Riaprendo quell’esempio, in quella lingua, torna la tua versione; un esempio che non hai mai cambiato si apre come è stato pubblicato. Il menu ⋯ di ogni riga offre:
- Crea una mia copia trasforma l’esempio in un tuo libro con le proprie copie dei file del pacchetto, così le modifiche successive al pacchetto su disco non lo toccano mai.
- Scarica (.postext) salva l’esempio come file
.postext. - Nascondi dall’elenco toglie l’esempio dall’elenco (quello integrato non si può nascondere).
- Ripristina l’originale… scarta le tue modifiche all’esempio (in ogni lingua) e, se è aperto, carica al suo posto la versione pubblicata. Chiede prima conferma, e compare solo sugli esempi modificati.
Un esempio in più lingue mostra un’etichetta per lingua, nell’ordine in cui le elenca il suo manifesto: 繁 e 简 per il cinese tradizionale e semplificato, il codice della lingua (EN, ES) per le altre; il tooltip nomina la lingua nella lingua dell’interfaccia (Carica la versione in cinese tradizionale). Un esempio il cui originale è in una lingua diversa da quella dell’interfaccia (un romanzo cinese con una traduzione inglese) dice in quale lingua si apre (
openLocale, vedi Formato dei pacchetti preset), così un clic sulla sua riga porta all’originale.Gli esempi nascosti sono raccolti in fondo al gruppo sotto una voce espandibile Libri di esempio nascosti, ciascuno con Mostra nell’elenco. La scelta viene ricordata in
localStorage.
Un file .postext aperto dal menu Nuovo diventa un nuovo libro, aperto. Un file in più lingue chiede prima quale importare, partendo da quella in cui è scritto (il locale del suo manifesto). L’esportazione è un’azione per riga: la riga del libro aperto esporta ciò che è sullo schermo. Un file .postext è una cartella di pacchetto preset compressa in zip (vedi Esportazione e importazione).
I pulsanti Reimposta dei pannelli Testo e Grafica ripristinano l’esempio da cui un libro è stato copiato. Un libro vuoto o importato non ha un originale, quindi i pulsanti restano nascosti finché è aperto.
Pannello Capitoli
Il secondo pannello della barra delle attività mostra solo il libro aperto. In alto, il suo nome, che tipo di libro è (Il tuo libro, oppure Libro di esempio con la sua lingua e l’etichetta Modificato quando lo cambi) e un menu ⋯ con le azioni che lo riguardano: Rinomina… per i tuoi libri (un doppio clic sul nome fa lo stesso), Duplica o Crea una mia copia, Scarica (.postext), e Ripristina l’originale… per un libro di esempio modificato.
Sotto, i suoi capitoli occupano il resto del pannello e scorrono per conto loro (vedi Libri e capitoli). Ogni riga di capitolo mostra il suo intervallo di pagine e il numero di parole, e il capitolo attivo è marcato. Un libro cinese, giapponese o coreano conta invece i caratteri: ogni carattere Han, kana o hangul conta uno, e così ogni parola latina in mezzo a loro. Aggiungi capitolo sta nell’intestazione del pannello accanto al numero di capitoli, le righe si riordinano trascinandone la maniglia (o con i tasti freccia su di essa), e il menu ⋯ di ogni capitolo offre Rinomina, Sposta su / giù, Dividi ai titoli di livello 1, Unisci al capitolo precedente ed Elimina (l’ultimo capitolo non si può mai eliminare).
Libri di esempio (preset)
Un pacchetto preset è un intero punto di partenza caricato come un’unica unità: il Markdown dei capitoli, una PostextConfig, le risorse (con i loro contenuti bitmap/SVG e i modelli di tabella) e i file di font personalizzati a cui la configurazione fa riferimento. Il pannello elenca ogni preset che la Sandbox può raggiungere e marca quello aperto:
- Preset integrato: la Guida di Postext, il libro di esempio predefinito incluso nel pacchetto. È sempre disponibile, sempre primo nell’elenco, e pubblico. Esiste in inglese, spagnolo, catalano, arabo, cinese semplificato, giapponese e portoghese brasiliano (i pulsanti ES, CA, EN, ع, 简, 日 e PT della riga;
#preset=postext-guide&lang=zh-Hansporta all’edizione cinese,lang=ara quella araba,lang=jaa quella giapponese,lang=pt-BRa quella in portoghese brasiliano). L’edizione araba è un libro arabo: da destra a sinistra, rilegato a destra, cifre arabo-indiane, Amiri, Noto Kufi Arabic e IBM Plex Sans Arabic, giustificazione con kashida e figure disegnate a specchio con etichette arabe. L’edizione cinese ha una grafica propria (Noto Serif SC e Noto Sans SC, punteggiatura e divisione in righe della Cina continentale) e figure disegnate con etichette cinesi. Anche l’edizione giapponese è un libro verticale, composto secondo le regole giapponesi (JLReq): Noto Serif JP e Noto Sans JP, corpo 9,25 pt su due registri di 34 caratteri, titoli di sezione alti tre righe (行取り), testatine e folio in cifre arabe in testa e al piede, figure con etichette giapponesi. Ogni interfaccia apre la guida nella propria lingua. Una guida cinese, giapponese o araba non modificata e aperta da un’altra interfaccia (con il suo pulsante o un linklang=) resta nella sua lingua qualunque sia la lingua dell’interfaccia; quella che l’interfaccia cinese, giapponese o araba ha aperto da sé passa alla lingua in cui la Sandbox viene aperta la volta successiva, come le altre edizioni. - Preset remoti: pacchetti serviti via HTTP dagli URL di base passati nella prop
presetSources(vedi Props). Ogni sorgente è pubblica oppure privata. I preset privati sono etichettati Privato nell’elenco e servono per materiale che non deve lasciare una macchina. Il sito pubblico elenca una sorgente privata solo nello sviluppo locale, dove l’app Next.js serve la cartella indicata daPOSTEXT_PRIVATE_PRESETS_DIRtramite/api/private-presets. In produzione non viene mai elencata. La sorgente pubblica del sito,/presets, serve i suoi libri di esempio: Bioquímica, Deep Sky, Don Quijote, Physics (OpenStax), Spanish Painting e Signals 2020 in spagnolo e in inglese, Dream of the Red Chamber in tre edizioni, e Paradise Lost in inglese, con le note di Verity come note a piè di pagina e le tavole di Doré. Ognuno ha la sua licenza e i suoi crediti. default: true: un preset privato marcato come predefinito viene caricato automaticamente la prima volta che si apre una Sandbox intatta (documento integrato non modificato). Quando ce ne sono diversi marcati, vince quello il cuilocalecorrisponde alla lingua dell’interfaccia. I preset pubblici non vengono mai caricati automaticamente.
Ogni riga mostra il nome del preset, una descrizione facoltativa, l’etichetta della lingua e le etichette Privato / Predefinito. Un clic su una riga carica il preset per intero: testo, figure, grafica e font. La Sandbox scrive prima i file di font e i dati delle figure in IndexedDB, così le aree di visualizzazione non vedono mai un documento applicato a metà. Un clic su una riga apre l’esempio nella lingua dell’interfaccia, a meno che tu non l’abbia modificato solo in un’altra lingua: allora si apre la tua versione più recente. Le etichette di lingua di un esempio bilingue lo aprono in quella lingua (la tua versione in quella lingua, se ne hai una).
Preset dal vivo. I preset remoti vengono seguiti automaticamente. Ogni volta che si applica un preset, la Sandbox registra l’impronta del pacchetto insieme agli hash del Markdown, della configurazione e dell’insieme di risorse che ha applicato. Finché la pagina è visibile, interroga l’impronta ogni 3 secondi, e subito quando la scheda torna visibile o la finestra riprende il focus. Quando l’impronta cambia:
- Se il libro è intatto (Markdown, configurazione e risorse hanno ancora gli hash che il preset ha applicato), il preset viene riapplicato per intero e nel pannello compare un breve avviso.
- Se ci sono modifiche locali, vengono conservate. Un banner in cima al pannello (Di questo libro di esempio c’è una nuova versione. Le tue modifiche restano.) offre Carica la nuova versione, che chiede conferma prima di scartare le tue modifiche a quella lingua dell’esempio, e nel frattempo il pulsante Libri della barra delle attività mostra un punto. La bozza ricorda la versione da cui è nata, quindi il banner torna ogni volta che la apri finché non carichi la nuova versione. Le figure della bozza i cui file sono cambiati nella nuova versione conservano i byte che avevano: la bozza riceve una propria copia di questi file prima che vengano scritti quelli del pacchetto. I pacchetti vengono seguiti solo mentre è aperto un libro di esempio. Un libro copiato da uno di essi conserva la propria copia.
Lo stesso controllo avviene al caricamento, quindi se modifichi un pacchetto e poi apri la Sandbox, questa prende la nuova versione purché il libro fosse intatto. L’impronta viene da <preset-dir>/fingerprint.json. Sulla route di sviluppo è un file virtuale che restituisce un hash della cartella calcolato sui soli metadati (vedi l’appendice Formato dei pacchetti preset). Le sorgenti che non lo servono non vengono seguite.
Il libro di esempio aperto definisce anche che cosa ripristinano i pulsanti Reimposta degli altri pannelli:
| Pannello | Reimposta ripristina |
|---|---|
| Testo | Il testo dell’esempio e il suo insieme di figure (la parte del documento) |
| Grafica | La grafica dell’esempio, font compresi |
| Libri (Ripristina l’originale…) | Tutto: testo, figure, grafica e font |
Un preset che era aperto in una sessione precedente ma che nessuna sorgente elenca più (di solito un preset privato in una build che non lo serve) compare ancora, in grigio, come Non disponibile in questa build. La Sandbox conserva il contenuto caricato invece di sostituirlo in silenzio con l’esempio integrato. L’id del preset aperto viene salvato sotto la chiave postext-sandbox-preset (vedi Persistenza). Il formato dei pacchetti è descritto nell’appendice Formato dei pacchetti preset.
Pannello Risorse
Gestisce le risorse del libro: immagini bitmap, figure SVG, tabelle e video. Il testo vi fa riferimento con blocchi ::resource{id="…"} e rimandi in linea :ref{id="…"}. Per la sintassi dei rimandi e il modello degli elementi flottanti, vedi Formato del documento → Risorse.
Vista elenco. L’intestazione mostra il numero di risorse. Le risorse sono raggruppate per nome del tipo di risorsa, e ogni gruppo è un elenco con il suo conteggio. Le risorse il cui typeId non corrisponde più a un tipo configurato finiscono in un gruppo Senza tipo, così puoi ancora raggiungerle. Ogni voce mostra una miniatura di 36 px accanto alla didascalia e all’id: un’anteprima vera per bitmap e SVG, il poster con un badge di riproduzione per i video, e un glifo per le tabelle. Quando il libro ha più di sei risorse, un campo di ricerca (Cerca nelle risorse…) filtra l’elenco per didascalia e id, ignorando gli accenti. Quando il libro non ha ancora risorse, uno stato vuoto spiega come aggiungerle e collocarle nel testo con :ref{#id}. Un menu a tendina Nuovo offre quattro modi per aggiungerne una:
- Carica immagine: PNG, JPEG, WebP o GIF
- Carica SVG
- Nuova tabella: parte come una griglia 2×2 con una riga di intestazione
- Aggiungi video: un video di YouTube o Vimeo, un file video o il suo indirizzo (un MP4 o uno stream HLS; vedi Video più avanti). Un libro i cui tipi di risorsa sono anteriori ai video riceve il tipo integrato Video quando aggiunge il primo.
Puoi anche trascinare file dal disco sul pannello, file video compresi (MP4, WebM, Ogg, QuickTime). Vengono caricati in blocco, con id ricavati dai nomi dei file. I file non supportati vengono saltati, e una breve nota riporta quanti ne sono stati aggiunti e quanti saltati.
Vista di dettaglio. Selezionare una risorsa ne apre l’editor:
- ID: modificabile e validato come slug. Gli id duplicati vengono segnalati e mai confermati, e un id vuoto riceve un suggerimento ricavato dalla didascalia. Rinominare conserva il file di immagine o SVG memorizzato.
- Tipo: uno dei tipi di risorsa configurati
- Didascalia: accetta Markdown in linea (grassetto, corsivo, codice e
:ref).\\, o una barra rovesciata a fine riga, comincia una nuova riga; un semplice a capo vale come spazio - Nota: una riga facoltativa con fonte, credito o osservazione, composta in corpo minore sotto la risorsa (stessa formattazione in linea e stessi a capo della didascalia). Il suo stile viene dal gruppo Nota delle impostazioni Didascalie.
- Testo alternativo: descrizione per l’accessibilità nell’output HTML
- Stile di tabella: per le tabelle, lo stile con nome in cui è composta la tabella (
table.styleId). È Stile di tabella del documento (il predefinito) oppure uno degli Stili di tabella dichiarati nelle impostazioni. Un id che nessuno stile dichiara viene elencato come mancante e reso con lo stile di tabella del documento. - Posizione:
- Posizione:
auto(il primo spazio libero, il predefinito),top,bottomohere. - Estensione:
column,pageoside. È disattivata quando la posizione èhere. I valori predefiniti sono quelli del motore,auto+column. - Colonne: quante colonne adiacenti occupa un elemento flottante di colonna in una pagina di più colonne (
placement.columns), per esempio un’immagine su due delle quattro colonne di un giornale. Tante quante ne ha la pagina lo rende a tutta larghezza. Compare quando il libro o una delle sue sezioni ha più di una colonna e l’estensione ècolumn, e non per una risorsa collocatahereo ruotata. - Orientamento: diritto, o ruotato di un quarto di giro (con la testa a sinistra o a destra). Una risorsa ruotata occupa una pagina tutta sua, accostata al dorso, quindi il selettore dell’estensione è disattivato.
- Larghezza: una frazione di larghezza con un allineamento, per elementi flottanti e inserimenti in linea più stretti della loro colonna. L’allineamento colloca anche una bitmap o un SVG più stretti del loro spazio a piena larghezza (una bitmap più piccola della colonna, o una figura che
layout.fitFiguresToPageha rimpicciolito), quindi resta attivo per le immagini; per una tabella richiede una larghezza inferiore al 100%. Una risorsa ruotata non ha né l’una né l’altro. - Didascalia accanto alla figura: un interruttore per la colonna laterale di un’impaginazione a colonna e mezza. Vale per gli elementi flottanti di colonna, quindi è nascosto quando la posizione è
here. - Riduci per adattare: per un’immagine flottante, Mai, In una pagina nuova o In qualsiasi spazio (
placement.shrink), con Scala minima (placement.minScale) quando si riduce; e Larghezza della didascalia, Spazio o Immagine (placement.captionMeasure), per qualunque immagine non ruotata. I tipi di risorsa offrono gli stessi tre campi nella loro collocazione predefinita. - In testa alla pagina che la cita: per un elemento flottante in alto o automatico con estensione di colonna o di pagina che non sia ruotato (
placement.citingPage): può prendere la testa della pagina o della colonna in cui cade la riga che lo cita, e il testo sopra il rimando scende sotto di esso. I tipi di risorsa offrono lo stesso interruttore nella loro collocazione predefinita. - Testo attorno: per una risorsa collocata nel testo o per un elemento flottante di una colonna, Nessuno oppure il lato della colonna in cui sta con il testo accanto (
placement.wrap), e la sua Distanza dal testo (placement.wrapGap) quando scontorna; una risorsa scontornata senza una larghezza propria mostra la quota predefinita dell’impaginazione. I tipi di risorsa offrono entrambi nella loro collocazione predefinita.
- Posizione:
- Contenuto: caricatori che sostituiscono il file bitmap o SVG
- Dimensione e risoluzione: per una bitmap, i suoi pixel, la risoluzione dichiarata dal file (non indicata, oppure 72 e 96 indicati come letti come non impostati), le sue dimensioni naturali in mm alla risoluzione con cui viene impaginata, e i ppi con cui viene stampata dove l’impaginazione corrente la colloca (i più bassi quando è collocata più di una volta). Sotto il minimo del preflight appare nello stile degli avvisi, sotto quello critico nello stile critico, con Apri in Verifiche per un libro impostato per la stampa. Risoluzione imposta i ppi propri dell’immagine (
bitmap.resolution; vedi Formato del documento › Dimensioni delle bitmap), e Usa i … ppi del file la compila a partire dal file. Un’immagine caricata conserva la risoluzione dichiarata dal suo file (bitmap.fileResolution). - Video: per una risorsa video (Formato del documento › Video):
- Origine: YouTube, Vimeo o File.
- Indirizzo del video (YouTube, Vimeo): qualunque link del video. Quando indica un video nuovo, il poster, le dimensioni del fotogramma e il titolo vengono scaricati dalla piattaforma (il titolo diventa il testo alternativo quando questo è vuoto); Recupera di nuovo la locandina ripete l’operazione. Un link che non indica alcun video della piattaforma viene segnalato sotto il campo.
- File video (File): il caricatore di un file MP4, WebM, Ogg o QuickTime, con formato, dimensioni e durata. Un primo poster viene preso a un decimo della durata. Fotogramma della locandina riproduce il file: fermati o scorri sul fotogramma che vuoi stampato e premi Usa questo fotogramma come locandina. Indirizzo di produzione: dove sarà il video pubblicato (
https://…), aperto dal codice QR e dal link del PDF; senza di esso la stampa non ha né codice QR né link. - Indirizzo del video (File, senza file caricato): il video si riproduce dal solo indirizzo, un MP4 o WebM su un server o uno stream HLS (
.m3u8, indicato come Stream HLS sopra il campo). Inserire un indirizzo legge le dimensioni e la durata del video, e Fotogramma della locandina lo riproduce da lì, HLS compreso. Scegliere un fotogramma richiede un server che consenta letture tra origini diverse (CORS); altrimenti il pannello lo dice, e si carica invece il poster. Il codice QR e il link del PDF aprono questo indirizzo. - Locandina: l’immagine stampata con le sue dimensioni, e un caricatore per sostituirla con un’immagine tua.
- Inizio (s) / Fine (s): la parte che viene riprodotta; 0 lascia l’inizio o la fine com’è.
- Lettore: gli interruttori di questo video (controlli, pulsante di download, schermo intero, menu della velocità, picture in picture, riproduzione automatica, avvio senza audio, ripetizione, riproduzione insieme ad altri video), ciascuno Impostazione del libro, Sì o No. Sono elencati solo gli interruttori che il lettore del video rispetta.
- Zona sicura: per bitmap e SVG, la parte dell’immagine che si vede sempre (
Resource.safeArea; vedi Formato del documento › Zona sicura). Il campo mostra una miniatura con la zona marcata e le sue dimensioni in percentuale, oppure Nessuna quando l’immagine non ne ha, con i pulsanti Segna la zona sicura / Modifica la zona sicura e Rimuovi la zona sicura. La finestra di dialogo mostra l’immagine: trascina fuori dal rettangolo per disegnarne uno nuovo, dentro per spostarlo, o dalle maniglie per ridimensionarlo; con il rettangolo selezionato, i tasti freccia lo spostano e Maiusc con le frecce lo ridimensiona. I campi Sinistra, Alto, Larghezza e Altezza lo impostano in percentuale, e due anteprime mostrano il ritaglio più alto e quello più basso che la zona consente. - Font nel disegno: per le figure SVG, le famiglie nominate dal testo del disegno (famiglia, peso, stile) e che cosa ne è stato di ciascuna: incorporato con le sue dimensioni, dichiarato nell’SVG (il file porta il proprio
@font-face), nessun file di font (l’immagine ripiega su un altro carattere) o oltre il limite di dimensione. Le varianti vengono dai font personalizzati del libro, poi da Google Fonts, e si incorporano solo quando l’immagine viene mostrata o esportata, mai nel file memorizzato. Incorpora i font del libro lo disattiva per questa figura (svg.inlineFonts: false), per un SVG che porta le proprie varianti o che deve restare com’è. - Sorgente SVG: per le figure SVG, un editor del sorgente sotto il caricatore. Accettano modifiche solo i nodi di testo: il contenuto degli elementi
<text>/<tspan>, colorato nell’editor. Ciò che si digita altrove viene rifiutato, e<,>e&digitati in un nodo di testo vengono convertiti in entità, così il file resta ben formato. Ogni modifica viene salvata dopo una breve pausa come nuovo file memorizzato, e la figura viene resa di nuovo (ricolorazione a inchiostro singolo compresa). L’editor segnala quando l’SVG non ha nodi di testo. - Anteprima: una simulazione dal vivo di come apparirà la risorsa, con
#al posto del numero (i numeri reali dipendono da dove la risorsa cade nel documento). La didascalia si apre con l’etichetta che il documento imposta: il prefisso di didascalia del tipo e il numero (Figure #.), il solo prefisso per un tipo numerato con un modello vuoto (Do.), e niente per un tipo senza prefisso di didascalia - Elimina: chiede prima conferma, e avvisa quanti rimandi
::resource/:refnel testo resterebbero a puntare al nulla
Editor delle tabelle. Le risorse di tipo tabella aprono un editor interattivo a griglia:
- Barra degli strumenti:
- Aggiungi o rimuovi righe e colonne, e unisci o dividi celle.
- Attiva o disattiva una riga o una colonna di intestazione.
- Imposta l’allineamento orizzontale e verticale di ogni cella (in alto, al centro o in basso). Il contenuto della cella si sposta come un’unica unità dentro una riga più alta.
- Imposta il riempimento di ogni cella: un selettore di colore, collegabile alla palette, con un pulsante per cancellarlo. Il riempimento viene scritto in
TableCell.backgrounde mostrato nella griglia.
- Larghezze delle colonne: un peso numerico per colonna sotto la griglia (
2, 1, 1dà alla prima colonna metà della larghezza; vuoto vuol dire larghezze uguali), scritto intable.model.columnWidths. Aggiungere o rimuovere una colonna mantiene i pesi allineati, e un link Larghezze uguali li cancella. - Incolla come tabella: incollare TSV (o un semplice CSV tra virgolette) riempie la griglia
- Annulla/ripeti: Cmd/Ctrl+Z e Maiusc+Cmd/Ctrl+Z
- Navigazione da tastiera: Tab / Maiusc-Tab (con passaggio alla riga successiva) e i tasti freccia si spostano tra le celle
- Clic per modificare dall’anteprima: fai clic su una cella di tabella, una didascalia, una nota o un frammento di testo di una figura SVG in una delle due schede di anteprima. Il pannello Risorse si apre su quella risorsa e porta il focus sul campo corrispondente, con il cursore sul glifo cliccato. Trascinando si seleziona un intervallo nella stessa cella o nello stesso campo, e un doppio clic seleziona la parola. Finché il campo ha il focus, la sua selezione viene riportata sulla pagina come evidenziazione (un cursore sottile quando è vuota) sia nella scheda Canvas sia in quella HTML.
Tutte le modifiche passano per funzioni pure sul modello esportate dal nucleo di postext (addRow, addColumn, removeRow, removeColumn, mergeCells, unmergeCell, setCellContent, setAlignment e parseTSV), così lo stesso modello di tabella si comporta in modo identico dentro e fuori dalla Sandbox.
Pannello Font
Mostra i caratteri usati dal libro e gestisce i tuoi file di font accanto al catalogo integrato di Google Fonts:
- Caratteri di questo libro elenca ogni famiglia usata dalla grafica. Il nome di ogni famiglia è composto nel suo stesso carattere, con il suo ruolo (Testo corrente, Titoli o Altri elementi) e la sua sorgente: Google Fonts, Fontsource (una famiglia che Google Fonts non ha), Il tuo file, o Non trovato per una famiglia che nessuna sorgente ha. La sorgente compare quando il caricatore la conosce. I caratteri veri e propri si cambiano in Grafica → Tipografia e Titoli e indice.
- I file con cui si misura un libro. Una famiglia di Google Fonts o di Fontsource si compone con i file statici di Fontsource su jsDelivr (
@fontsource/<family>@5), uno per peso, stile e sottoinsieme. Sono i file che carica un pen del Ricettario e che il PDF incorpora, così un libro va a capo sulle stesse parole nelle anteprime, nel suo PDF e in un pen. La riga di comando impagina conbodyText.shapingLanguage: 'host', quindi lì una riga può andare a capo su una parola diversa (vedi Differenze rispetto alla Sandbox). Le anteprime dichiarano i pesi e gli stili che la grafica e le pagine usano, e il browser carica ogni file quando il testo ne ha bisogno. Da postext 1.30 le anteprime aspettano anche, prima di dipingere un capitolo per la prima volta, ogni variante nominata dalle sue pagine impaginate, caricata per i caratteri di quelle pagine (una famiglia tagliata in più di 16 file per variante, come una cinese o una giapponese, li carica come prima). Da postext 1.28.3 a 1.29.2 una variante nominata solo dalle pagine, composta in una scrittura diversa da quella latina (il corsivo dei sommari di una pagina d’indice araba), veniva dipinta con un carattere di ripiego finché non arrivava il suo file. Un peso tra due tagli di una famiglia variabile (un 450) non ha un file statico: le anteprime lo compongono con il file variabile di Google a quel peso e il PDF incorpora il taglio più vicino, quindi scegli un peso che la famiglia ha quando i due devono coincidere. Una famiglia per cui Fontsource non ha file viene presa dal foglio di stile di Google. Ogni file di una famiglia viene da una sola versione del suo pacchetto, quella con cui jsDelivr ha risposto per il suo foglio di stile:@5indica qualunque versione a cui si risolve ciascun indirizzo, e dopo un rilascio che taglia di nuovo una famiglia i suoi file potrebbero venire da due tagli diversi. - Un file lento, o che la rete non dà. I file delle varianti di un libro vengono scaricati prima della sua prima impaginazione, e l’impaginazione li aspetta finché continuano ad arrivare: un libro di diverse centinaia di file (uno cinese o giapponese) su una connessione lenta viene impaginato una volta sola, con tutti. Le richieste vengono abbandonate solo quando nessun file di font ha ricevuto nulla per 15 secondi; il capitolo viene allora impaginato con le varianti arrivate, e le altre con il ripiego che i suoi avvisi nominano. Un’impaginazione del genere è provvisoria: i suoi conteggi di pagine non vengono salvati con il libro né scritti in un pacchetto. Il file viene richiesto di nuovo tre volte, a mezzo minuto di distanza, e da ogni impaginazione successiva; quando arriva, le anteprime e ogni capitolo impaginato senza di esso vengono impaginati di nuovo, indice e rimandi di pagina compresi, e il PDF e l’EPUB vengono segnati come non aggiornati.
- Un peso o un’inclinazione che la famiglia non ha. Le anteprime e il PDF compongono ogni famiglia con i suoi file. Dove una famiglia non ha il grassetto (Bangers, Zen Antique e la maggior parte dei caratteri da titolo hanno un solo peso) o il corsivo, il grassetto e il corsivo si compongono con la sua variante più vicina così com’è, senza le lettere più nere o inclinate che disegnerebbe un browser, e per essi non viene elencato alcun
fontFallback. Viene elencato invece un peso a cui risponde un’altra variante reale della famiglia (un 600 composto con il 700). Una famiglia che Fontsource ha e Google Fonts no, come Commit Mono, viene caricata da Fontsource. - I tuoi file di font è dove aggiungi, rinomini ed elimini le famiglie personalizzate.
- Carica i file delle varianti per peso (100–900) e stile (normale / corsivo). I formati accettati sono WOFF2, WOFF, TTF e OTF, riconosciuti dall’estensione del file. I file vengono conservati nell’IndexedDB del browser.
- Le famiglie personalizzate compaiono in ogni selettore di font sotto un gruppo Personalizzati accanto ai risultati di Google Fonts. Una famiglia personalizzata ha la precedenza su un Google Font con lo stesso nome.
- In un documento cinese ogni selettore di font elenca per prime, sotto Cinese semplificato o Cinese tradizionale, le famiglie di Google che contengono i caratteri del documento (i sottoinsiemi
chinese-simplified,chinese-traditionalechinese-hongkongdi Fontsource), poi le altre. - In un documento in arabo (o in un’altra lingua scritta in alfabeto arabo) ogni selettore di font elenca per prime, sotto Arabo, le famiglie di Google con il sottoinsieme
arabicdi Fontsource, prima i caratteri da libro (Amiri, Noto Naskh Arabic, Scheherazade New, Markazi Text, Lateef, poi Noto Kufi Arabic, Reem Kufi, Aref Ruqaa, El Messiri). Le anteprime caricano il file arabo di ogni variante prima della prima impaginazione, e il PDF lo incorpora insieme a quello latino quando il testo usa entrambi. - I file di font orfani (caricamenti non più usati da alcuna famiglia) vengono rimossi automaticamente da IndexedDB.
Pannello Grafica
Un editor a moduli per PostextConfig, con più di cinquecento campi.
Panoramica. Quando si apre il pannello Grafica, mostra una panoramica:
- Una scheda Questo libro con un disegno dal vivo della pagina. Il disegno rispetta le proporzioni reali e mostra i margini, le colonne e i colori della pagina e dell’inchiostro, come doppia pagina quando i margini sono speculari. Le righe di un libro verticale sono disegnate dall’alto in basso a partire da destra, le sue colonne come registri. Accanto ci sono il formato rifilato, la disposizione delle colonne, il sistema di scrittura, il carattere e il corpo del testo corrente, e la palette. La riga del sistema di scrittura nomina la lingua del documento e, quando sono una scelta, la direzione e la rilegatura (Verticale · rilegato a destra · 中文(繁體), Da destra a sinistra · rilegato a destra · العربية); apre Sistema di scrittura.
- L’elenco dei tredici gruppi di impostazioni. Ogni gruppo ha una descrizione di una frase e il numero di sezioni che vi hai modificato.
Una pagina per gruppo. Aprire un gruppo ne mostra le sezioni come una pagina a sé. Viene costruito solo quel gruppo, il che mantiene il pannello veloce anche con libri grandi.
- Un percorso di navigazione (Grafica › gruppo) riporta alla panoramica.
- I chip sotto il titolo della pagina saltano a ciascuna sezione della pagina.
- Un link Avanti in fondo apre il gruppo successivo.
- Il focus passa al titolo della pagina quando apri un gruppo, e torna alla riga del gruppo quando rientri.
- Il gruppo aperto viene ricordato tra una sessione e l’altra.
I gruppi, nell’ordine di navigazione:
- Pagina e colonne
- Pagina: i campi sono raggruppati in Formato, Margini, Carta e Numerazione.
- Formato: i formati predefiniti dicono a che cosa servono: Tascabile 11 × 17, Romanzo, narrativa 12 × 19, Saggio, manuale 17 × 24 e Libro di testo, rivista 21 × 28; i formati da giornale Broadsheet 37,5 × 59,7, Berliner 31,5 × 47, Tabloid 28 × 43 e Compact 29,7 × 42 (da postext 1.18); oppure Personalizzato. Qui c’è anche Risoluzione di impaginazione (px per pollice) (
page.dpi): i pixel in cui lavora l’impaginazione, non la risoluzione delle immagini, anche se una bitmap senza una risoluzione propria si stampa a quel numero di ppi. - Margini: ogni margine è legato al disegno della pagina. Puntare un campo di margine o portarci il focus colora quel margine nel disegno. Un interruttore speculari trasforma sinistro/destro in margine interno/esterno per le pagine affiancate.
- Carta: il colore di sfondo della pagina.
- Numerazione: il formato del numero di pagina e il numero da cui partono le pagine.
- Formato: i formati predefiniti dicono a che cosa servono: Tascabile 11 × 17, Romanzo, narrativa 12 × 19, Saggio, manuale 17 × 24 e Libro di testo, rivista 21 × 28; i formati da giornale Broadsheet 37,5 × 59,7, Berliner 31,5 × 47, Tabloid 28 × 43 e Compact 29,7 × 42 (da postext 1.18); oppure Personalizzato. Qui c’è anche Risoluzione di impaginazione (px per pollice) (
- Colonne: la disposizione si sceglie da schede illustrate: Una colonna (romanzi, saggi), Due colonne (manuali, riviste, opere di consultazione), Colonna e mezza (una colonna principale più una stretta colonna laterale per note e piccole figure) o Più colonne (da tre a otto colonne uguali per giornali e riviste, con un conteggio Colonne; da postext 1.18). La sezione contiene anche l’intercolonna, la colonna laterale, Riduci le figure che non entrano (
layout.fitFiguresToPage), Risoluzione delle bitmap (layout.bitmapResolution: Dpi della pagina, Dal file, che legge anche la risoluzione delle immagini caricate in precedenza, o Fissa con i suoi ppi), Riduci le immagini flottanti con la sua Scala minima (layout.floatShrink), I flottanti in testa alla pagina che li cita (layout.floatsAtCitingPage) con Flottante massimo in testa alla pagina che lo cita (layout.maxTopFraction), Flottanti sotto un titolo a tutta larghezza, dalla prima colonna (layout.floatsUnderOpener, attivo per impostazione predefinita da postext 1.25: un elemento flottante recintato subito dopo un titolo che attraversa più colonne prende la testa della prima), Spazio attorno alle figure in linea (layout.inlineResourceGap), Spazio attorno alle figure nei riquadri (layout.inlineResourceGapInBoxes), Righe di un paragrafo a un taglio di riquadro (layout.boxChildSplitMinLines), Colonne nel testo, e gruppi che si dividono (layout.flowColumns, attivo per impostazione predefinita da postext 1.25: un gruppo:::columnsfuori da un riquadro compone i suoi blocchi in colonne, e un gruppo che non ci sta prosegue nella colonna o nella pagina successiva) e Flottanti finali vicini al testo (layout.hugClosingFloats). - Testo attorno: Distanza del testo attorno, Testo accanto più stretto, Minimo di righe accanto e Larghezza con testo attorno (
layout.wrap), i valori predefiniti delle immagini e dei riquadri accanto a cui scorre il testo.
- Pagina: i campi sono raggruppati in Formato, Margini, Carta e Numerazione.
- Sistema di scrittura. La pagina si apre con il disegno di Pagina e colonne. La sua doppia pagina porta i folio: 2 | 3 in un libro rilegato a sinistra, 3 | 2 in uno rilegato a destra, la cui pagina dispari è quella di sinistra; la didascalia dice quando il libro è rilegato a destra e quando le sue righe sono verticali.
- Lingua e direzione:
- Lingua del documento, con il cinese come 中文(简体), 中文(繁體) e 中文(香港), e l’arabo come العربية, العربية (مصر) e العربية (المغرب) (la regione imposta valori predefiniti regionali come le cifre). Un tag che manca nell’elenco (
es-ES,zh-TW,sv) compare come opzione in più, con il nome della lingua che viene riconosciuta. Cambiarla rinomina i tipi integrati di figura e tabella quando sono ancora quelli della lingua precedente (un libro spagnolo passato al cinese stampa 图 e 表, non Figura e Tabla); i tipi che hai rinominato conservano i loro nomi. - Direzione del testo: Auto, che nomina il valore risolto (da destra a sinistra per l’arabo), Da sinistra a destra o Da destra a sinistra (
direction). - Modalità di scrittura, da schede illustrate: Orizzontale, o Verticale, con le righe dall’alto in basso e da destra a sinistra (
layout.writingMode). - Rilegatura: Auto, che nomina il valore risolto (il lato destro per un libro verticale o da destra a sinistra e per un fumetto letto da destra a sinistra), Lato sinistro o Lato destro (
page.binding). - Cifre: Auto, che nomina le cifre date dalla lingua (٠ ١ ٢ ٣ per l’arabo, 0 1 2 3 per l’arabo del Maghreb e per ogni altra lingua), Europee, Arabo-indiane o Persiane (
numerals). - Predefiniti per il cinese: Rivedi… elenca che cosa cambia impostare il libro per il cinese. Scegli Semplificato 简体 o Tradizionale 繁體 e la direzione: un nuovo libro in tradizionale parte verticale, uno nuovo in semplificato orizzontale, e un libro già in cinese conserva la sua direzione. Ogni riga mostra l’impostazione com’è e come diventa: la lingua del documento (un tag cinese della stessa scrittura, come
zh-TW, viene conservato), il modo di scrittura con la rilegatura che comporta, Noto Serif e Noto Sans in SC, TC o HK per il testo corrente e per i titoli (la riga dei titoli nomina anche i caratteri che i livelli di titolo e gli stili di titolo impostano per conto proprio e, se spuntata, compone anche quelli con il carattere cinese), un rientro di prima riga di 2 em, rientro dopo i titoli, nessuno spazio tra i paragrafi, testo giustificato, nessuna sillabazione, 图 o 圖 e 表 numerati per capitolo ({h1}-{n}), didascalie composte 图1-1 标题 (niente prima del numero, uno spazio ideografico dopo), capitoli numerati 第一章 (第{1:一}章, uno spazio ideografico prima del titolo) ed elenchi numerati 一、 (一) 1. (1) ①. Si elenca solo ciò che differisce. Un’impostazione che hai cambiato tu arriva non spuntata, marcata tua impostazione, e resta com’è a meno che tu non la spunti; la lingua e la direzione si applicano sempre, e così la sillabazione, che un documento cinese disattiva da sé (a meno che tu non l’abbia attivata per una lingua latina indicata nella lingua di sillabazione). Applica fa le modifiche spuntate in un solo passo, e Annulla accanto alla conferma annulla quel passo nello stesso libro: ogni impostazione che ha cambiato torna com’era, anche quando nel frattempo hai cambiato altre impostazioni dello stesso gruppo; una che hai cambiato di nuovo nel frattempo resta come l’hai lasciata, e la conferma lo dice. Aprire un altro libro fa sparire Annulla. - Predefiniti per l’arabo (in un documento in arabo): Rivedi… elenca che cosa cambia impostare il libro per l’arabo. Scegli i caratteri: Classico, Amiri per il testo corrente e i titoli, o Moderno, Noto Naskh Arabic con titoli in Noto Kufi Arabic. Le righe: la direzione riportata su Auto quando il libro era impostato da sinistra a destra (si applica sempre), la rilegatura riportata su Auto (il lato destro), i due caratteri, il carattere dei testi grafici (testatine, folio, grafiche di apertura e di titolo) composto in un carattere senza lettere arabe, spostato al carattere dei titoli perché il PDF non stampi riquadri vuoti, un’interlinea di 1,75 em, testo giustificato, nessuna sillabazione, le cifre della regione quando il libro ne indica altre, شكل e جدول numerati per capitolo, didascalie composte شكل ١-١: العنوان, capitoli numerati الفصل الأول (
الفصل {1:ordinal}, due punti prima del titolo), elenchi numerati ١- أ- (١) e note a piè di pagina numerate da capo a ogni pagina, tutto nelle cifre del documento. Spunte, tua impostazione, Applica e Annulla funzionano come nell’elenco cinese. - Predefiniti per il giapponese (in un documento in giapponese): Rivedi… elenca che cosa cambia impostare il libro per il giapponese. Scegli il tipo di libro: Verticale 縦組, un romanzo bunko o tankōbon rilegato a destra su una griglia di caratteri, o Orizzontale 横組, un libro tecnico rilegato a sinistra. Le righe: la lingua del documento e il modo di scrittura (si applicano sempre), la rilegatura riportata su Auto, Noto Serif JP e Noto Sans JP per il testo corrente e i titoli (e per i testi grafici composti in un carattere senza kana), un’interlinea di 1,75 em, la griglia di caratteri che una pagina verticale contiene a quel corpo (al massimo 52 caratteri), un rientro di un em senza spazio supplementare tra i paragrafi, testo giustificato senza sillabazione, le impostazioni tipografiche cinesi riportate su Auto perché si applichino quelle giapponesi, 図 e 表 con didascalie composte 図1-1 …, capitoli numerati 第一章 (verticale) o 第1章 (orizzontale), titoli su tre e due righe (行取り) con i loro rientri, numeri degli elenchi giapponesi, impostazioni cinesi delle note riportate su Auto, e folio in kanji quando un folio verticale è collocato lungo il margine esterno. Applica e Annulla funzionano come per il cinese. In un libro giapponese la barra degli strumenti dell’editor aggiunge Ruby e In orizzontale nel testo verticale. Vedi Composizione giapponese.
- Lingua del documento, con il cinese come 中文(简体), 中文(繁體) e 中文(香港), e l’arabo come العربية, العربية (مصر) e العربية (المغرب) (la regione imposta valori predefiniti regionali come le cifre). Un tag che manca nell’elenco (
- Tipografia dell’Asia orientale (
cjk): Convenzioni regionali (Cina continentale, Taiwan, Hong Kong, Giappone) in alto, poi i campi in nove gruppi: Bordi della riga (Divisione in righe: nessuna, di base, GB, rigorosa, giapponese molto rigorosa, giapponese rigorosa, giapponese lasca; A capo tra i caratteri; Titoli di libri: caratteri a un a capo,cjk.titleMinChars; Numeri cerchiati: come caratteri cinesi o come lettere latine; Regole CJK nei testi grafici; Rifila le parentesi ai bordi della riga; Parentesi che apre un paragrafo: ①, ③ o a filo; Punteggiatura sporgente), Larghezze della punteggiatura (Larghezza della punteggiatura: kaiming, larghezza piena, metà a fine riga, mezza larghezza; Comprimi i segni adiacenti), Spaziatura (Spazio tra Han e latino; Spazio dopo ? e !), Testo verticale (Numeri in una cella diritta: disattivato, o fino a 2, 3 o 4 cifre,cjk.uprightDigits), Annotazioni (Enfasi nel testo cinese e giapponese: che cosa stampa*…*, segni o corsivo; Segno di enfasi, Riempimento del segno e Lato del segno; Titoli di libri (:book): parentesi, una linea ondulata o niente, e le loro Parentesi, 《》 〈〉 o 『』 「」; Colore dei segni), Ruby (carattere, corpo, colore e posizione delle letture, Sporgenza delle letture, Allineamento delle letture e Kana piccoli nelle letture), Note warichu (corpo, colore e parentesi di apertura e chiusura delle note), Segni kanbun (corpo, colore e posizione dei segni di ritorno) e Griglia dei caratteri (caratteri per riga, righe per pagina, la griglia disegnata a schermo e la lettura 字 × 行 con i margini che la griglia imposta). Ogni Auto segue la lingua del documento e nomina il valore risolto. In un documento la cui lingua non è cinese, giapponese o coreano e che non imposta nessuno di questi valori, la sezione mostra una riga che lo dice e un pulsante Mostra le impostazioni; una ricerca mostra i campi in qualunque documento. Composizione cinese e Composizione giapponese spiegano che cosa fanno queste impostazioni; le chiavi sono in Tipografia dell’Asia orientale, Scrittura verticale, Numeri nel testo verticale e Rilegatura.
- Lingua e direzione:
- Colori
- Tavolozza: colori con nome riusati da ogni selettore di colore. Cambiare una voce aggiorna ogni riferimento a essa.
- Contrasto (
contrast): Controlla il contrasto, il Livello (AA o AAA), Controllato per (Automatico, Schermo, Stampa, Schermo e stampa) e, sotto Testo in negativo, i corpi sotto i quali viene segnalato un testo chiaro su un fondo inchiostrato. Cambiarli non reimpagina alcuna pagina. Vedi Verifica del contrasto. - Il rapporto accanto a un colore: un campo colore il cui colore le pagine usano come testo, o come fondo del testo, mostra il rapporto di contrasto più basso che ha in quel ruolo, con una spunta quando raggiunge il livello e un segno di avviso quando non lo raggiunge. Aprire il campo elenca ogni colore con cui è abbinato (Testo su #ffffff, Fondo del testo #1a1a1a), il corpo più piccolo, e il rapporto a schermo e, per un libro impostato per la stampa, su carta. I numeri seguono il selettore mentre trascini, prima che la pagina venga reimpaginata. Un colore usato solo per filetti o bordi non mostra alcun rapporto.
- Tipografia
- Testo corrente: si apre con un campione di carattere a grandezza reale composto nel carattere, corpo, interlinea e colore correnti, nella lingua del documento: un libro cinese mostra l’inizio di 紅樓夢 nella sua scrittura,
*…*con i punti di enfasi, e lo compone dall’alto in basso quando le sue righe sono verticali. Le sue divisioni in righe sono quelle del browser; la pagina usa quelle di Postext. I campi sono raggruppati in:- Carattere: font, corpo, interlinea, e i pesi normale e grassetto.
- Paragrafi: allineamento (con la sillabazione, i limiti di giustificazione e Tracking massimo per giustificare (
bodyText.maxJustifyTracking) quando il testo è giustificato, e Sillaba il testo in bandiera con la sua zona, Divisione ottimale in righe e Divisione ottimale del testo in bandiera (bodyText.optimalRagged) quando non lo è; con un testo corrente giustificato Divisione ottimale del testo in bandiera segue Divisione ottimale in righe, per gli stili di paragrafo e i riquadri non giustificati; Sillabazione tra colonne (bodyText.hyphenateAcrossColumns) sotto la sillabazione quando il testo corrente è giustificato, e sotto Divisione ottimale del testo in bandiera, finché è attiva, quando il testo corrente non è giustificato; Sillaba le parole composte (bodyText.hyphenation.compounds) con la lingua di sillabazione), A capo dopo le lineette (bodyText.breakAfterDashes), A capo dopo i trattini (bodyText.breakAfterHyphens), Ripeti il trattino a capo (bodyText.repeatHyphen), A capo forzati (bodyText.hardLineBreaks), Tabulazioni (bodyText.tabStops: un elenco di tabulazioni, ciascuna con posizione, allineamento, carattere di riempimento, distanza del riempimento e carattere decimale) con Intervallo di tabulazione predefinito (bodyText.tabInterval), rientri e spaziatura dei paragrafi. - Colore: i colori del testo, del grassetto e del corsivo.
- Lingua: la lingua del documento, nominata nella lingua stessa. Si imposta in Sistema di scrittura; la riga apre quel gruppo.
- Vedove, orfane e righe corte (comprimibile): comprende Penalità graduata (
bodyText.gradedRuntPenalty), Stringi per recuperare una riga corta (bodyText.tightenRunts), Riduzione massima del tracking (bodyText.maxRuntTracking), e Tieni i due punti con l’elenco con Spazio sotto i due punti (bodyText.colonListRoom): quanto spazio serve sotto la riga che finisce con i due punti perché resti con il suo elenco, quello che serve al primo elemento o una riga come fino a postext 1.4. - Citazioni (comprimibile): il colore delle citazioni
>, Citazioni in corsivo, Rientro delle citazioni e Rientro della prima riga delle citazioni (bodyText.blockquote). - Versi (comprimibile): Poesie senza separatore (Riga per riga, o Come emistichi (1.22)), Rientro per spazio, Verso a capo (Rientrato o Allineato a destra) con il suo Rientro del rimando o Segno di rimando, Spazio tra le strofe, Tieni intere le strofe brevi e Stringi prima di andare a capo (
bodyText.verse, i valori predefiniti delle poesie:::versecomposte verso per verso). - Rimandi (comprimibile).
- Stili di paragrafo (
paragraphStyles): stili con nome per i contenitori:::paragraphs{style="…"}. Puoi aggiungere, rimuovere e rinominare gli id, poi impostare il font, il corpo, l’interlinea, il colore, i colori dei tratti in grassetto e in corsivo, i pesi normale e grassetto, gli interruttori corsivo e maiuscoletto, l’allineamento, la sillabazione, il rientro sinistro di ogni riga, i rientri di prima riga e sporgenti (misurati dal rientro sinistro), lo spazio tra i paragrafi, i margini, Allinea alla griglia (paragraphStyles[].snapToGrid), Maiuscole/minuscole (textTransform, maiuscole), Numeri di riga (paragraphStyles[].lineNumbers: Come il documento, Contate o Non contate), Tabulazioni con Intervallo di tabulazione predefinito (paragraphStyles[].tabStops,tabInterval), impostate come nel testo corrente, e Capolettera (paragraphStyles[].dropCap): le righe che occupa e di cui scende, le lettere composte in grande, il suo carattere, peso, corsivo, corpo, colore e distanza, il Segno di apertura (Con l’iniziale, Sporgente, Nella prima riga), l’Attacco (nessuno, un numero di parole o la prima riga, in maiuscoletto o in maiuscolo), che cosa fa un Paragrafo corto (Mantieni lo spazio, Riduci l’iniziale, Nessun capolettera) e Ogni paragrafo per un catalogo di voci (vedi Capolettera). I campi non impostati ereditano dal testo corrente. Sopra gli stili, Spazio sotto un contenitore (bodyText.paragraphContainerSpacing) dice come lo spazio sotto un contenitore si combina con il blocco successivo: Fondi, o Somma (1.4). - Etichette in linea (
chipStyles): stili con nome per il:chip[text]{style="…"}in linea. Lo stile integratochipviene mostrato finché la configurazione non ne ha nessuno. Puoi aggiungere, rimuovere e rinominare gli id, poi impostare:- Testo: font, corpo, colore, grassetto e corsivo. Ognuno eredita dal testo circostante finché non lo imposti.
- Riquadro: riempimento, spessore e colore del contorno, raggio degli angoli, spaziatura interna orizzontale e verticale (con Spaziatura interna superiore e Spaziatura interna inferiore per distinguerle, il che centra una maiuscola in un chip rotondo), e la distanza minima dalle parole vicine.
- Codice (
codeStyle): Recinzioni di codice e Codice rientrato (come vengono letti i listati); il Carattere del codice, il corpo, l’interlinea, Allinea alla griglia, il colore e la Larghezza della tabulazione; il Riquadro (estensione sulla pagina, sfondo, bordo, raggio degli angoli, spaziatura interna, spazio sopra e sotto); le Righe lunghe (Una riga più larga del riquadro: Manda a capo, Riduci con il suo Corpo minimo, o Taglia; il Rientro dell’a capo e il Segno dell’a capo); Numeri e righe evidenziate (Numera le righe, il colore dei numeri e lo spazio dopo di essi, la tinta delle righe che un recinto evidenzia); la divisione Tra colonne e pagine (tenere unito, righe da ogni lato, ripetere il titolo, il segno di continuazione); i Colori della sintassi (Integrato o Nessuno, e un colore e uno stile per tipo di token, colori della palette compresi); e il Codice in linea in un carattere da codice con il suo riempimento. Vedi Listati di codice. - Formule (
math), con Rientro dopo un display (math.indentAfterDisplay) e Tieni unita alla riga introduttiva (math.keepWithLeadIn). - Note a piè di pagina (
footnotes): Posizione (piede della colonna o fine del capitolo), Posizione nella colonna alla fine di un capitolo, Numerazione (per capitolo o continua), il corpo, l’interlinea, il colore, l’allineamento e il rientro sporgente delle note, gli spazi sopra e tra le note, e il Filetto separatore (lunghezza, spessore, colore). Vedi Note a piè di pagina. - Numeri di riga (
lineNumbers): Numera le righe, Conteggio (Versi o Ogni riga), Ogni (l’intervallo), Numera la prima riga, Riparti (mai, o a ogni capitolo, sezione, pagina o poesia) con il Primo numero, Posizione (margine esterno o interno, sinistra, destra, inizio riga, fine riga, colonna laterale), Con le colonne (bordi esterni, negli intercolonni, accanto a ogni colonna), Distanza dal testo, Allineamento, e il carattere, il corpo, il peso, il corsivo, il colore e il Formato del numero dei numeri. Vedi Numeri di riga.
- Testo corrente: si apre con un campione di carattere a grandezza reale composto nel carattere, corpo, interlinea e colore correnti, nella lingua del documento: un libro cinese mostra l’inizio di 紅樓夢 nella sua scrittura,
- Titoli e indice
- Titoli: valori predefiniti generali più impostazioni per ogni livello da H1 a H6. Comprendono:
- maiuscole/minuscole, Spaziatura tra lettere (
levels[].letterSpacing, negativa per stringere), allineamento (a bandiera a sinistra, giustificato, centrato o a bandiera a destra), interruzione prima con parità, ed estensione; - un interruttore Torna alla griglia dopo i titoli (
headings.snapToGrid, attivo per impostazione predefinita: il testo torna sulla griglia della linea di base sotto un titolo), e per livello Torna alla griglia dopo questo titolo (levels[].snapToGrid), che lo sostituisce per quel livello; - un interruttore Stili in linea nei titoli (
headings.inlineMarks, attivo per impostazione predefinita): un titolo compone il corsivo, il grassetto, apici e pedici, il maiuscoletto e i link scritti al suo interno, come fa un paragrafo; se disattivato, stampa le parole marcate nel suo stile; - per livello, Nascosto (strutturale) (
levels[].hidden): il titolo non stampa nulla e non occupa spazio, ma provoca comunque interruzioni, numera e alimenta l’indice, le testatine e i segnalibri del PDF; - per livello, Capolettera dopo il titolo (
levels[].dropCap): il primo paragrafo dopo un titolo del livello si apre con un capolettera, con gli stessi campi di uno stile di paragrafo; - un editor avanzato per livello degli slot grafici con un’altezza minima di apertura; ogni elemento della grafica di un titolo ha un interruttore Riserva spazio (disattivato: viene dipinto senza aggiungersi all’altezza che il titolo riserva);
- le leve del bilanciamento delle colonne, con i loro limiti per leva, e Riquadro che chiude una colonna (
balancing.closingBox): quando un riquadro che termina una colonna corta scende al piede della colonna: per primo, dopo le altre leve, o mai.
- maiuscole/minuscole, Spaziatura tra lettere (
- Stili dei titoli (
headingStyles): stili con nome applicati con{style="…"}sulla riga di un titolo. Puoi aggiungere, rimuovere e rinominare gli id, e per ogni stile:- scegliere se il titolo è numerato ed elencato nell’indice, e dargli un modello di numerazione proprio;
- disattivare Nominato nelle testatine (
runningChapter) per una tavola o una mappa composta come H1 dentro un capitolo, così le testatine continuano a nominare il capitolo che interrompe; - sostituire la tipografia del titolo (spaziatura tra lettere compresa), l’interruzione e l’estensione, Torna alla griglia dopo questo titolo e Nascosto (strutturale), e scegliere il Capolettera dopo il titolo: Come il livello, Proprio (i suoi campi come quelli di uno stile di paragrafo) o Nessuno;
- dare alla sezione testatine proprie, eventualmente partendo da quelle del documento;
- impostarne i margini e la disposizione delle colonne (con il ruolo e il lato della colonna laterale, come in Colonne, e il suo Riduci le figure che non entrano);
- impostare lo stile del testo, le sostituzioni degli elenchi e i colori della palette.
- Indice (
toc): i livelli di titolo che un:::tocelenca, con la tipografia delle voci di ciascuno. Copre anche le voci non numerate, i numeri di pagina, i puntini di guida, la riga del sottotitolo letta da un attributo del titolo, e le righe delle parti con il loro slot grafico.
- Titoli: valori predefiniti generali più impostazioni per ogni livello da H1 a H6. Comprendono:
- Elenchi
- Elenchi puntati, con Allinea l’inizio alla griglia (
unorderedLists.snapTopToGrid), che arrotonda per eccesso lo spazio sopra un elenco perché il primo elemento stia sulla griglia della linea di base. - Elenchi numerati: per ogni livello, il font, il peso, il corsivo, il colore e la distanza del separatore accanto alla sua numerazione; Allinea l’inizio alla griglia (
orderedLists.snapTopToGrid), come per gli elenchi puntati; e Colonna dei numeri (orderedLists.numberWidth): dove comincia il testo di un elemento, dopo il numero più largo della sua serie (Per sequenza) o del suo livello nel capitolo (Per livello), oppure dopo il numero dell’elemento stesso (Per voce), così ogni testo segue la sua etichetta alla distanza impostata. Allineamento dei numeri (orderedLists.numberAlign) colloca i numeri rispetto al testo, finendo insieme (Contro il testo), o all’inizio della loro colonna, cominciando insieme (All’inizio).
- Elenchi puntati, con Allinea l’inizio alla griglia (
- Figure e tabelle
- Numerazione e posizione (
resourceTypes): per ogni tipo di risorsa:- nomi ed etichette brevi;
- modelli di numerazione con i segnaposto
{n}e{h1}…{h6}, il formato del contatore e il livello di azzeramento, e il prefisso della didascalia, con un’anteprima dal vivo del tipo «Fig. 1.7»; - un gruppo Posizione: la posizione predefinita del tipo, l’estensione (colonna, pagina o colonna laterale), Colonne (quante colonne adiacenti occupa un elemento flottante di colonna del tipo in una pagina di più colonne; tante quante ne ha la pagina lo rende a tutta larghezza) e la rotazione, una frazione di larghezza, un allineamento per le risorse più strette del loro spazio (elementi flottanti e inserimenti ristretti dalla larghezza, e immagini più strette della colonna), e un interruttore per la didascalia accanto alla figura;
- una sostituzione dello stile della didascalia comprimibile che sostituisce solo i campi della didascalia che imposti per quel tipo (posizione, barra, colori, carattere) ed eredita il resto.
- Didascalie (
captionStyle): carattere, corpo, allineamento e posizione sopra o sotto la risorsa. C’è una barra di sfondo facoltativa con il suo colore e la sua spaziatura interna, e l’etichetta e la descrizione hanno stili indipendenti. Un gruppo Nota imposta il corpo, il colore, l’inclinazione, l’allineamento e la distanza della nota della risorsa. - Tabelle (
tableStyle):- tipografia del corpo e dell’intestazione, con la Spaziatura tra lettere (
headerLetterSpacing) e le Maiuscole/minuscole (headerTextTransform) dell’intestazione, e i riempimenti; - i bordi, con uno schema di filetti: griglia completa, solo orizzontali, cornice esterna, nessuno o Booktabs (un filetto spesso sopra e sotto la tabella, uno sottile sotto l’intestazione, filetti accorciati sotto le intestazioni che abbracciano più colonne). Booktabs mostra gli spessori dei suoi filetti, i filetti sotto le intestazioni che abbracciano più colonne e il loro accorciamento, i Filetti di gruppo e, sotto Tabelle più alte della pagina, il filetto sotto una parte che prosegue nella pagina seguente, e nasconde lo spessore del bordo e il raggio degli angoli;
- un raggio degli angoli per la cornice esterna;
- la spaziatura interna delle celle;
- sotto Tabelle più alte della pagina, Quando una tabella non entra (
overflow) e Applica alle tabelle nel testo (splitInline, attivo per impostazione predefinita da postext 1.25: una tabella collocatahereche non sta nel resto della sua colonna viene tagliata tra due righe e prosegue nella colonna successiva); - sotto Celle del corpo, Righe alternate (
bodyAlternateBackgroundEnabled), che riempie una riga del corpo ogni due con il Colore delle righe alternate (bodyAlternateBackground), visibile mentre è attivo.
- tipografia del corpo e dell’intestazione, con la Spaziatura tra lettere (
- Stili di tabella (
tableStyles): stili di tabella con nome. Puoi aggiungere, rimuovere e rinominare gli id (rinominare si porta dietro le tabelle che usano l’id), poi impostare qualunque campo di Tabelle. Ogni controllo mostra il valore ereditato da Tabelle finché non lo imposti. - Diagrammi (
diagramStyle): un interruttore inchiostro singolo che ricolora i diagrammi SVG con tinte di un solo inchiostro per la stampa a un colore, più un selettore del colore dell’inchiostro che per impostazione predefinita è il colore principale della palette, e Incorpora i font nel testo SVG (inlineFonts, attivo per impostazione predefinita), che compone il testo di ogni SVG con i font del libro (vedi Configurazione › Font nel testo SVG). - Stile video (
videoStyle): il Simbolo di riproduzione (forma, posizione, dimensioni, distanza dal bordo, colori e opacità dello sfondo) e il Codice QR (posizione, dimensioni, distanza dal bordo, correzione degli errori, margine, colori e raggio degli angoli) stampati sul poster di un video; Output: se il poster rimanda al video, e se il visualizzatore HTML mostra il lettore o il poster; e gli interruttori del Lettore da cui parte ogni video. Tra questi, Riproduci insieme ad altri video: se attivo, avviare un file video lascia in riproduzione gli altri, così i loop muti di una pagina scorrono insieme; se disattivo, avviarne uno mette in pausa gli altri. Vale nel visualizzatore HTML e in Folio.
- Numerazione e posizione (
- Riquadri
- Stili dei riquadri (
calloutStyles): stili con nome per:::callout{type="…"}. Puoi aggiungere, duplicare, rimuovere e rinominare gli id, poi impostare:- il titolo predefinito, l’estensione, la collocazione e la larghezza, e Colonne: quante colonne adiacenti occupa un riquadro flottante (collocazione Auto, In alto o In basso, estensione di colonna) in una pagina di più colonne. L’attributo
columnsdi un:::calloutlo sostituisce; - lo sfondo, il bordo, il raggio degli angoli e la spaziatura interna, e una striscia sul bordo;
- un’icona: un glifo di testo oppure un SVG o una bitmap scelti dal pannello Risorse. Si può collocare in linea o come badge d’angolo, con il lato dell’angolo e una larghezza per le illustrazioni non quadrate.
- un gruppo Linguetta (
calloutStyles[].label): font, corpo, peso, colore, riempimento, angolo, altezza, spaziatura interna, scostamento e rientro, una risorsa icona accanto alla linguetta, e un filetto lungo il bordo superiore; - la tipografia del titolo, con spaziatura tra lettere, rientro e Interlinea del titolo (
titleStyle.lineHeight); - sostituzioni del corpo e degli elenchi che ereditano dal testo del documento. Comprendono i colori del grassetto e del corsivo del corpo, i suoi pesi normale e grassetto, gli interruttori corsivo e maiuscoletto, le sue Tabulazioni e l’Intervallo di tabulazione predefinito (
body.tabStops,body.tabInterval), e il corpo e il peso del punto elenco. - un intercolonna per i gruppi
:::columnsdentro il riquadro; - un interruttore Allinea alla griglia (
calloutStyles[].snapToGrid, attivo per impostazione predefinita; disattivato conserva il margine inferiore esatto per i riquadri impilati); - la colonna del marcatore, un ancoraggio fisso, tenere unito e il minimo di righe a una divisione, e i controlli della barriera agli elementi flottanti;
- una scelta Riquadro laterale a fine colonna (
sideAtColumnEnd) per i riquadri laterali il cui testo non prosegue nella stessa colonna: accanto al testo prima del recinto, o accanto al testo dopo; - un gruppo Riquadri divisi: ripeti il titolo con un suffisso a ogni continuazione (
repeatTitle,continuedSuffix), e un segno di continuazione sotto ogni parte che prosegue, con il suo testo, allineamento e corsivo (continuesMarkerEnabled,continuesMarker,continuesMarkerAlign,continuesMarkerItalic). I testi predefiniti sono nella lingua del documento.
- il titolo predefinito, l’estensione, la collocazione e la larghezza, e Colonne: quante colonne adiacenti occupa un riquadro flottante (collocazione Auto, In alto o In basso, estensione di colonna) in una pagina di più colonne. L’attributo
- Stili dei riquadri (
- Intestazioni e piè di pagina
- Intestazioni e piè di pagina: elementi di testo, filetto, riquadro e immagine per ogni slot.
- Elementi di testo: allineamento verticale, allineamento del testo nel proprio riquadro (
align: a sinistra, centrato o a destra, visibile quando il riquadro è più largo del testo, oppure giustificato, che allarga gli spazi di ogni riga tranne l’ultima di ogni paragrafo per riempire il riquadro e, con Sillabazione attiva, divide una parola in sillabe per riempire una riga), interlinea, spaziatura tra lettere (negativa per stringere un titolo da display), maiuscole/minuscole, una larghezza e un’altezza adattate, piene o fisse, e una larghezza massima. Marcatura in linea (inlineMarks) compone**bold**,*italic*e gli altri segni in linea nel testo dell’elemento, e un contorno disegna il profilo delle lettere: Spessore del contorno, Colore del contorno e Lettere vuote (stroke). - Filetti: orizzontali o verticali.
- Segnaposto, scelti dall’elenco consentito dal motore: numero di pagina, totale delle pagine, totale delle pagine del libro, titolo, sottotitolo, autore, data di pubblicazione, titolo e numero del capitolo, titolo e numero della parte, e
{attr.key}per un attributo del capitolo. Le intestazioni e i piè di pagina accettano anche il titolo e il numero del capitolo in cima alla pagina,{chapterTitleAtTop}/{chapterNumberAtTop}(vedi Capitolo in cima alla pagina), e le parole guida{firstMark.h2}/{lastMark.h2}(un livello di titolo o l’id di uno stile di paragrafo dopo il punto; vedi Parole guida). - Dove compare uno slot: parità, e un filtro pagine: tutte, corpo, aperture di capitolo, pagine di parte o pagine bianche.
- Posizione: traboccamento, e un ancoraggio al contenitore, a un elemento fratello, o alla cornice della pagina / dell’abbondanza per le fasce da bordo a bordo; gli elementi di intestazione e piè di pagina possono anche ancorarsi al Margine esterno (
'outer'), il margine lontano dal dorso. - Direzione di scrittura di un elemento di testo: Orizzontale, o Verticale, righe da destra a sinistra (
writingMode), per le testatine composte lungo il margine esterno di un libro verticale. Testatine sul taglio (verticali) dell’editor delle intestazioni aggiunge il titolo del capitolo quattro caratteri sotto la testa della gabbia e il folio cinque sopra il suo piede, entrambi verticali, all’80 % del corpo del testo, ancorati al margine esterno (vedi Elementi di testo verticali). - Un gruppo Capolettera (righe, font, peso, corpo, colore e distanza) e un rientro di paragrafo. Un testo con capolettera va a capo qualunque sia il suo Eccedenza, e senza un corpo impostato la cima della lettera è allineata con le maiuscole della prima riga.
- Ogni altro slot grafico offre gli stessi controlli di testo.
- Elementi di testo: allineamento verticale, allineamento del testo nel proprio riquadro (
- Intestazioni e piè di pagina: elementi di testo, filetto, riquadro e immagine per ogni slot.
- Parti
- Parti (
parts):- Occhiello di parte (
parts.page): disattivarlo non apre alcuna pagina, e il numero, il titolo e i colori della parte si applicano semplicemente a partire dal contenuto successivo. Nasconde anche le impostazioni sottostanti. - la parità della pagina su cui si apre una
:::part, e un’interruzione facoltativa dopo la parte con la sua parità; - i margini della pagina di parte. Ereditano i margini della pagina, con le stesse etichette speculari interno/esterno.
- uno slot di grafica d’apertura disposto rispetto al riquadro di rifilo della pagina. Il suo selettore di segnaposto aggiunge la serie del titolo: il titolo corrente, e il suo numero in forma decimale, romana o alfabetica.
- uno stile del testo per i blocchi dentro la parte. Eredita il testo corrente e i colori degli elenchi, e comprende le sostituzioni degli elenchi (formato e scostamenti della numerazione, margini, rientro sporgente, e i campi delle liste di attività).
- Occhiello di parte (
- Parti (
- Esportazione
-
Preparazione per la stampa (
print, epage.cutLines), in quattro gruppi:- Segni di taglio e abbondanza: le linee di taglio, l’abbondanza, la lunghezza, lo scostamento e lo spessore dei segni, e il loro colore a schermo.
- PDF/X e colore: Standard PDF (Nessuno, PDF/X-1a:2003, PDF/X-4); Profilo di output, tra i quindici profili liberi (FOGRA39 per impostazione predefinita, FOGRA51 e FOGRA52 per le condizioni PSO v3, GRACoL, SWOP, carta da giornale); Carica un profilo ICC per quello che ti dà il tuo stampatore, con la sua Condizione di stampa (il nome nel registro che l’output intent PDF/X indica) e un pulsante per rimuoverlo; Intento di rendering, Compensazione del punto nero, Converti le immagini in CMYK (nascosto per PDF/X-1a, che converte sempre) e Limite di inchiostro.
- Nero: Grigi e nero solo in K, Sovrastampa del nero 100 %, Nero ricco per le grandi aree con la sua ricetta C/M/Y/K e la dimensione da cui un’area passa al nero ricco.
- Preflight: Preflight nelle Verifiche, la risoluzione minima e critica delle immagini, lo spessore minimo dei filetti, il corpo sotto il quale viene segnalato il testo in più inchiostri, la zona sicura, la distanza sotto la quale un riquadro dovrebbe andare al vivo, e Controlla i font dei PDF inseriti.
-
PDF: segnalibri, il PDF accessibile (con tag) e lo spazio colore forzato. Il CMYK viene separato con il profilo di Preparazione per la stampa.
-
Lettore web (HTML): le impostazioni
htmlViewer.
-
- Folio
- Visualizzatore Folio (3D) (
folio), in cinque gruppi: Vista (l’inclinazione e la rotazione), Carta (tipo di carta, grammatura, spessore specifico con lo spessore risultante, finitura, texture e la sua intensità, tonalità, trasparenza), Rilegatura (tipo, copertine, materiale e colore della copertina, immagine del dorso; il tipo Piegato (giornale) dispone fogli piegati una volta uno dentro l’altro senza nulla che li tenga, come un giornale, e poiché non ha un dorso su cui stampare, come Punto metallico (graffato), l’immagine del dorso è nascosta), Superficie (il materiale della scrivania e la sua tinta) e Illuminazione (ambiente, esposizione, ombre). Scegliere un altro tipo di carta riempie i campi che non hai cambiato con i valori di quella carta; quelli che hai cambiato conservano i tuoi. Su un formato da giornale la carta e la rilegatura che non hai scelto compaiono come Carta da giornale e Piegato (giornale). L’immagine del dorso si sceglie tra le bitmap e gli SVG del pannello Risorse. Vedi Scheda Folio.
- Visualizzatore Folio (3D) (
- Avanzate
- Aiuti a schermo (
debug): la griglia della linea di base (page.baselineGrid), che sta qui e non sotto Pagina, e gli altri livelli sovrapposti per il controllo dell’impaginazione. - Avvisi: quali problemi segnala il pannello Verifiche, e le loro soglie.
- Aiuti a schermo (
Trovare un’impostazione. La barra degli strumenti sotto l’intestazione funziona su tutti i gruppi:
- Cerca nelle impostazioni… filtra ogni campo di ogni sezione per etichetta, testo di aiuto e nomi delle opzioni. Ignora gli accenti e confronta l’inizio delle parole: marg trova Margine superiore (Top margin in inglese, Margen superior in spagnolo), e h3 apre Titoli › H3. I risultati sono raggruppati per gruppo di impostazioni. Le sezioni che corrispondono si aprono automaticamente, le righe e le sezioni che non corrispondono vengono nascoste, e le occorrenze sono evidenziate. Esc cancella la ricerca, poi lascia il campo.
- Modificate mostra solo i campi il cui valore differisce dal predefinito.
Testo di aiuto. Ogni campo ha una breve spiegazione. Gli screen reader la sentono come descrizione del campo, e a schermo resta nascosta finché non la apri con il pulsante ? della riga (Che cos’è «…»?). L’interruttore Mostra tutte le spiegazioni dell’intestazione apre tutte le spiegazioni insieme, e la scelta viene ricordata.
Valori modificati. Il pannello segue un modello di sostituzione coerente:
- Le intestazioni di sezione portano un badge con il numero di campi modificati al loro interno, contati attraverso i gruppi annidati.
- L’intestazione di una sezione mostra un pulsante di reimpostazione (che chiede conferma) solo finché contiene modifiche.
- Un campo modificato ha un punto accanto all’etichetta (letto come modificato) e un piccolo pulsante di reimpostazione tutto suo.
- Si salva o si esporta sempre e solo il sottoalbero modificato. I valori predefiniti vengono tolti, quindi una Sandbox intatta conserva una configurazione vuota.
- Reimpostare Pagina lascia stare la griglia della linea di base, perché la griglia si modifica in Avanzate.
I controlli:
- Le scelte sono menu a tendina le cui opzioni possono portare una descrizione di una riga, o pulsanti segmentati quando sono poche.
- Le impostazioni attivo/disattivo sono interruttori.
- I numeri hanno pulsanti − / +. I tasti freccia cambiano il valore di un passo, dieci volte tanto con Maiusc e un decimo con Alt.
- Le lunghezze hanno un selettore dell’unità che converte il valore quando l’unità cambia (cm, mm, in, pt, px, em, rem).
- Un colore è un unico pulsante che mostra il campione e il valore.
- Il selettore dei font si può percorrere con i tasti freccia.
I controlli dipendono dal contesto. La larghezza dell’intercolonna compare solo per le disposizioni a più colonne, le impostazioni di giustificazione compaiono solo quando il testo è giustificato (il testo non giustificato mostra invece Sillaba il testo in bandiera, e uno stile di paragrafo o un riquadro mostra il suo interruttore di sillabazione quando è giustificato o quando la sillabazione del testo non giustificato è attiva), e la percentuale della colonna laterale compare solo per la disposizione a colonna e mezza. Le modifiche hanno effetto subito nell’anteprima dell’area di visualizzazione. Per un riferimento completo di ogni opzione di configurazione e del suo valore predefinito, vedi la pagina Configurazione.
L’intestazione del pannello offre anche Reimposta (chiede conferma; compare solo quando la grafica differisce da quella del libro di esempio aperto, e ripristina la grafica di quell’esempio, font compresi), Esporta e Importa. Vedi Esportazione e importazione.
Pannello Verifiche
Diagnostica dal vivo, ricalcolata a partire dal testo, dalla grafica, dalle figure e dall’ultima build. Il conteggio corrisponde al badge sul pulsante della barra delle attività. Gli avvisi sono raggruppati per tipo, in ordine di priorità: prima ciò che rompe l’output, poi il markup, poi la composizione fine, che di solito arriva in tante piccole voci. Ogni gruppo è comprimibile e mostra il suo conteggio:
-
Font: una famiglia di font mancante, o varianti di peso/stile mancanti o duplicate in una famiglia personalizzata, e Elenco di font in una famiglia di caratteri: un’impostazione
fontFamilyche contiene una pila di font CSS (il testo viene composto con la sua prima famiglia; la voce nomina il percorso dell’impostazione) -
Figure e tabelle: un id di risorsa sconosciuto in un
::resource/:ref(anche nella didascalia, nella nota o nelle celle di una figura usata dal testo, o come immagine di una cella di tabella), id di risorsa duplicati, riferimenti a un tipo di risorsa che non esiste, bitmap rese molto più grandi delle loro dimensioni in pixel, una tabella il cui id di stile non indica alcuno stile di tabella, una griglia di tabella rimasta irregolare (una cella unita a cui mancano le celle coperte, o una riga con un buco: unisci di nuovo le celle nell’editor delle tabelle), un’immagine il cui file manca dall’archivio o non si decodifica (compare come segnaposto), un SVG il cui testo nomina una famiglia senza file di font da incorporare (Font mancante in un SVG: l’immagine la compone con un carattere di ripiego) o i cui font superano il limite di 2 MB (Font SVG troppo grandi da incorporare), e un video senza poster, un file video senza indirizzo di produzione (nessun codice QR né link in stampa) o un indirizzo YouTube o Vimeo che non indica alcun video, e un’immagine flottante composta più piccola per stare nello spazio della sua pagina (Immagine ridotta per entrare: la voce dà la scala, e lo sforamento in mm quando anche la scala minima va oltre la gabbia del testo), e un’immagine o un riquadro che non scontorna il testo come richiesto (Immagine o riquadro scontornato: giustezza accanto troppo stretta, troppo basso per avere righe accanto, spostato alla colonna successiva, o composto in testo verticale) -
Testo e marcatura:
- salti nella gerarchia dei titoli (per esempio H1 → H3), e titoli consecutivi senza testo tra loro;
- formule
$…$/$$…$$non valide o non chiuse; - nomi di direttiva sconosciuti (si accetta ogni nome che il parser conosce:
pagebreak,columnbreak,space,numbering,toc,callout,paragraphs,partecolumns), attributi di numerazione o di parità non validi, e un:::space{lines=N}fuori dall’intervallo 0–20 righe; - un recinto di contenitore
:::lasciato aperto alla fine del documento (un clic porta il focus sulla sua riga di apertura); - un
:::paragraphs{style="…"},:::callout{type="…"},:chip[…]{style="…"}o un{style="…"}di titolo il cui stile non è configurato; - una riga
::resourceche viene stampata come testo, perché malformata o attaccata sotto un paragrafo senza una riga vuota; - Markup a larghezza piena: markup digitato con un metodo di input cinese o giapponese (
:::,#,[^…],{…},**…**), che viene stampato come testo; la voce mostra la forma ASCII da digitare; - Chiave di attributo non letta: una chiave di attributo scritta fuori dall’ASCII (
作者=曹雪芹), che il parser ignora; - Blocco di codice non chiuso: un recinto
```o~~~senza recinto di chiusura, per cui il resto del testo viene composto come codice (unclosedCodeBlock; un clic porta il focus sul recinto); - Tabulazione nel testo verticale: un
:tabin un testo composto in verticale, che viene composto come spazio tra parole, perché le tabulazioni si applicano solo al testo orizzontale (tabInVerticalText); - Front matter ignorato: un capitolo diverso dal primo che comincia con un blocco di front matter (solo il front matter del primo capitolo appartiene al libro);
- Flusso di colonne sconosciuto: un
:::columns{flow=…}che non è nésnakenéparallel; il gruppo prende il valore predefinito (columnsFlowUnknown).
-
Grafica:
- nomi di segnaposto di intestazioni e piè di pagina fuori dall’elenco consentito dal motore (
{attr.…}e i segnaposto delle parti sono accettati), e segnaposto i cui metadati del documento mancano; - ancoraggi ciclici tra elementi grafici, o ancoraggi a un elemento che non esiste. Questa verifica e quella dei segnaposto coprono ogni slot grafico: le testatine, l’apertura di parte, il verso bianco dopo una pagina di parte, le righe delle parti nell’indice, la grafica di ogni livello di titolo, e la grafica di ogni stile di titolo e le testatine della sua sezione. Una voce che viene da uno stile di titolo nomina lo stile, come in
{style="index"} header · #rh → #missing, e una che viene dal verso o dalle righe delle parti nell’indice nomina la sua impostazione, come intoc.parts.design · #row → #missing; - elementi di testo il cui traboccamento con ritaglio tronca sempre;
- Testo grafico troncato: un testo grafico che non è stato nella sua larghezza e finisce con i puntini di sospensione, o che è stato ritagliato con inchiostro oltre il suo riquadro (
designTextTruncated). La voce nomina lo slot e l’elemento e dà il testo completo; un clic apre la pagina in cui è stato tagliato, e seleziona nell’editor un titolo o un titolo di front matter. Una testatina tagliata su ogni pagina di un capitolo viene elencata una volta sola; - Grafica del titolo tagliata: una grafica di titolo più alta di quanto la sua pagina possa contenere: testo di un’apertura disposto oltre il piede della pagina, o di una grafica in colonna oltre il piede della sua colonna (un attacco lungo su una pagina di schermo piccola). Il titolo reclama il resto della sua pagina o colonna, così il testo che segue comincia nella successiva, ma quella parte della grafica va persa; un clic sulla voce porta il focus sul titolo;
- Colonna laterale fuori intervallo: una colonna laterale di un’impaginazione a colonna e mezza che il motore ha dovuto limitare per lasciare spazio alla colonna principale;
- Numero di colonne fuori intervallo: un numero di colonne di una disposizione
multipleche non è un intero da 3 a 8, che il motore ha limitato; - Formato di numerazione sconosciuto: un formato di numero di elenco, di pagina o di tipo di risorsa che il motore non conosce, e che numera in decimale;
- Impostazione sconosciuta: una chiave che i titoli, un livello di titolo, uno stile di titolo o una tabulazione non hanno (un
letterSpacngscritto male), che il motore ignora; la voce suggerisce l’impostazione a cui è più vicina, quando ce n’è una. - Nessun numero di riga nel testo verticale: numeri di riga attivati in un documento verticale, che non ne riceve.
Queste ultime quattro, come Elenco di font in una famiglia di caratteri, vengono dalla configurazione e non dal testo: la voce nomina il percorso dell’impostazione, e un clic non sposta l’editor.
- nomi di segnaposto di intestazioni e piè di pagina fuori dall’elenco consentito dal motore (
-
Contrasto:
- Contrasto basso: un colore di testo sotto il rapporto che il suo corpo e il suo peso richiedono al livello del libro (
contrast.level), rispetto al fondo su cui è composto. La voce cita il testo e dà entrambi i colori, il corpo, e il rapporto a schermo e, per un libro impostato per la stampa, sulla carta del suo profilo di output. Una coppia viene elencata una volta, con il numero di punti in cui ricorre; - Testo in negativo troppo fine per la stampa: testo chiaro su un fondo inchiostrato sotto i corpi di Colori → Contrasto → Testo in negativo, in un libro impostato per la stampa.
Ogni voce nomina la pagina della sua prima occorrenza; un clic apre quella pagina e seleziona il testo nell’editor.
- Contrasto basso: un colore di testo sotto il rapporto che il suo corpo e il suo peso richiedono al livello del libro (
-
Composizione:
- righe troppo spaziate (spazi tra le parole allargati oltre la soglia configurata);
- Riga giustificata composta in bandiera: una riga di un paragrafo giustificato lasciata corta perché arrivare alla giustezza allargherebbe i suoi spazi oltre il triplo della loro larghezza; la voce cita la riga e dà l’allargamento che sarebbe servito, e un clic seleziona la riga;
- Riga CJK lasciata corta: una riga di testo cinese, giapponese o coreano lasciata più corta della sua giustezza perché riempirla distanzierebbe i suoi caratteri oltre il limite;
- Segni troppo vicini alla riga successiva e Letture troppo vicine alla riga successiva: punti di enfasi, linee di nomi e di titoli, o letture ruby che richiedono più spazio tra le righe di quello che il paragrafo ha; la voce dà entrambi i valori, in em;
- riquadri che traboccano dalla loro colonna;
- Chip che toccano la riga successiva: un chip il cui riquadro invade un chip della riga sopra o sotto (la sovrapposizione è data in punti); un chip alto senza un chip sopra o sotto non viene segnalato;
- cascate di parità;
- Numero di riga sopra un riquadro laterale: un numero di riga nella colonna laterale (
lineNumbers.position: 'side') che sta sopra un riquadro, una didascalia o una figura in quella colonna; entrambi vengono stampati dove sono; - Capolettera non composto come configurato: un paragrafo più corto delle righe di cui scende il suo capolettera (la voce dice se lo spazio è stato mantenuto, l’iniziale ridotta o omessa), uno spezzato prima dell’ultima riga dell’iniziale in una colonna troppo corta per lei, uno la cui prima lettera si lega alla successiva (arabo), uno in testo verticale, o uno che si apre senza una lettera (
dropCap); - Riga di codice più larga del suo riquadro: un listato con righe più larghe del suo riquadro, mandate a capo, composte più piccole (la voce dà il corpo) o tagliate, come dice Codice → Righe lunghe (
codeOverflow); - Colonne troppo strette: un gruppo
:::columnsle cui colonne sono più strette di sei em del loro testo (columnsTooNarrow); - Riquadro o figura laterale dopo la fine del testo: un riquadro laterale, o una figura della colonna laterale, collocato in una pagina senza testo perché il testo del suo capitolo è finito mentre aspettava spazio nella colonna laterale; la voce nomina la pagina (
afterText); - Non è su nessuna pagina: un riquadro o un elemento flottante ancora in attesa di uno spazio quando l’impaginazione è finita, e che non sta in nessuna pagina (
unplaced); - Elenco breve diviso tra colonne: un elenco di pochi elementi composto su due colonne o pagine; elencato quando Testo corrente → Elenchi brevi divisi tra colonne è su Avvisa, e su Evita per un elenco che nessuna colonna potrebbe contenere intero (
shortListSplit); - Elemento flottante su una pagina di apertura: una figura, una tabella o un riquadro flottante nella pagina in cui si apre un capitolo o una parte; elencato quando Colonne → Flottanti nelle pagine di apertura è su Avvisa (
openerFloat); - Nessun pattern di sillabazione per questa lingua: la lingua del documento (la sua lingua di sillabazione, altrimenti
locale) non ha modelli inclusi, quindi il suo testo viene sillabato con quelli dell’inglese americano. Sparisce quando la sillabazione viene disattivata.
-
Preflight, per un libro impostato per la stampa (uno standard PDF/X, un PDF CMYK o i segni di taglio), prima le segnalazioni critiche:
- Risoluzione dell’immagine bassa: un’immagine sotto la risoluzione minima alle sue dimensioni di stampa (critica sotto quella critica), calcolata dai pixel che il suo file ha davvero;
- I pixel dichiarati non corrispondono al file: una bitmap la cui larghezza e altezza dichiarate non sono quelle del file (un avviso quando ne dichiara di più);
- Immagine RGB: separata in CMYK all’esportazione, o lasciata in RGB da un PDF/X-4 che non converte le immagini;
- Filetto troppo sottile, Testo piccolo a più inchiostri, Copertura d’inchiostro oltre il limite (un colore CMYK definito dall’autore, la ricetta del nero ricco);
- Testo nella zona di sicurezza e Si ferma appena prima del rifilo (un riquadro o un’immagine che dovrebbe andare al vivo);
- Font non incorporati in un PDF inserito, RGB in un PDF inserito e Trasparenza in un PDF inserito (critica in PDF/X-1a), dal master di stampa di ogni figura.
Ogni voce nomina la sua pagina; un clic apre quella pagina nel visualizzatore.
-
Browser: archiviazione non disponibile (IndexedDB mancante)
Ogni voce mostra un’icona, un titolo, un dettaglio di una riga e, dove serve, il capitolo e la riga del sorgente (Cap. 2 · Riga 12 in un libro di più capitoli). Un clic su una voce con una posizione nel sorgente passa a quel capitolo e porta il focus dell’editor in quel punto. Quando non c’è nulla che non va, il pannello mostra Tutto a posto. Quali verifiche vengono eseguite si imposta in Grafica → Avanzate → Avvisi.
#Area di visualizzazione principale
Il lato destro dell’interfaccia mostra l’output reso. Sono disponibili cinque schede, una per modalità di rendering, in quest’ordine: Canvas, PDF, Folio, HTML ed EPUB 3. Cambiare scheda non rilancia l’impaginazione: lo stesso VDT alimenta ogni backend, quindi il contenuto che vedi è coerente tra le modalità. La scheda Folio viene offerta solo dove il browser ha WebGL2 e lo schermo non è quello di un telefono (vedi Scheda Folio).
Ogni area di visualizzazione esegue la pipeline di impaginazione dentro un Web Worker dedicato (postext/worker). Un hook useLayoutWorker per ogni area di visualizzazione possiede il riferimento al worker, vi invia i font come ArrayBuffer trasferibili, e pilota le build con un annullamento in cui vince l’ultima: un tasto premuto o il trascinamento di un cursore interrompe l’AbortSignal della build precedente prima che parta la successiva, così scrivere velocemente non accoda mai lavoro superato sul thread principale. Smontare un’area di visualizzazione ne elimina il worker e rifiuta ogni build in sospeso. Vedi Configurazione → Eseguire l’impaginazione in un Web Worker per lo schema di integrazione usato qui.
Scheda Canvas
Rende un’anteprima rasterizzata del documento su un elemento HTML5 <canvas>. Offre una rappresentazione esatta al pixel di come apparirà il documento composto finale, compresi il posizionamento preciso del testo, la disposizione delle colonne e la collocazione delle risorse.
Una barra degli strumenti in cima all’area del canvas offre:
- Controlli dello zoom: ingrandisci e rimpicciolisci (1,25x per passo, intervallo 0,25x–4x). Lo zoom manuale disattiva la modalità di adattamento.
- Modalità di adattamento: adatta alla larghezza della pagina o all’altezza della pagina. Si attivano e disattivano; l’adattamento si ricalcola automaticamente quando la finestra cambia dimensioni.
- Modalità di visualizzazione: pagina singola (una pagina per riga) o doppia pagina (disposizione da libro in cui la prima pagina compare a destra come recto, e le pagine successive sono accoppiate in doppie pagine). Un libro rilegato a destra (
page.binding, cinese verticale) mostra le sue doppie pagine al contrario: la pagina 1 da sola a sinistra, poi[3 | 2],[5 | 4]. Su una pagina verticale un clic cade sul carattere sotto il puntatore, e il cursore è una barra di traverso alla colonna. - Anteprima di stampa (icona
Printer): mostra le pagine come verranno stampate, disattivata per impostazione predefinita e ricordata dal browser: ogni colore separato tramite il profilo di output di Preparazione per la stampa e mostrato sul bianco proprio della carta, le grandi aree nere in nero ricco; un PDF forzato in scala di grigi si mostra nel solo inchiostro nero. Solo ciò che si stampa: niente guide a schermo e niente contorni (le segnalazioni del preflight sono in Verifiche). La scheda Folio condivide l’interruttore. Ridipinge le pagine e non le reimpagina mai.
Le pagine vengono rese in modo pigro tramite IntersectionObserver: sul canvas vengono disegnate solo le pagine visibili (più un margine di 200px), il che tiene basso l’uso di memoria della GPU nei documenti lunghi.
Scheda PDF
Genera un PDF vero del documento corrente tramite il pacchetto postext-pdf e lo mostra in un visualizzatore PDF del browser incorporato. Il PDF viene ricostruito automaticamente al primo montaggio e a ogni rigenerazione successiva, usando lo stesso VDT che alimenta le schede canvas e HTML: così le divisioni in righe, i confini delle pagine e la collocazione delle risorse coincidono pixel per pixel tra i tre backend, fino alla compressione delle righe finali troppo piene che Knuth–Plass accetta di tanto in tanto.
Una barra degli strumenti fluttuante in basso a destra nell’area di visualizzazione offre:
- Rigenera (icona
RefreshCw): ricostruisce il PDF dal markdown e dalla configurazione correnti. Utile dopo aver cambiato un’impostazione che non provoca da sola una ricostruzione, o quando i font hanno finito di caricarsi. - Scarica (icona
Download): salva su disco il PDF corrente. Il nome del file deriva dal primo titolo H1 del documento (condocument.pdfcome ripiego). - Stampa (icona
Printer): apre la finestra di stampa del browser sul visualizzatore PDF incorporato, che nella maggior parte dei browser permette di stampare o di salvare di nuovo come PDF. - Capitolo corrente / Libro intero (selettore a sinistra della barra delle schede, nei libri con più di un capitolo): rende tutti i capitoli come un unico PDF continuo invece del capitolo attivo che prosegue dopo i precedenti (il comportamento predefinito). Cambiarlo rigenera il PDF. Il canvas ha un selettore tutto suo (vedi Libri e capitoli).
Dietro le quinte la Sandbox usa un helper createPdfFontProvider() che scarica file WOFF2 statici per peso dal CDN jsdelivr di Fontsource, gli stessi file con cui si misurano le sue anteprime, li decomprime in TTF nel browser e passa i byte a pdf-lib tramite renderToPdf. Servono font statici per peso (anziché un unico font variabile) perché il testo in grassetto venga davvero incorporato con il peso grassetto. Vedi Generare PDF per lo stesso schema usato fuori dalla Sandbox.
Scheda Folio
Mostra il libro come oggetto stampato: le pagine impaginate dal motore, rilegate e aperte su una scrivania, in 3D (postext-folio, three.js). Le pagine sono gli stessi dipinti del canvas, mostrati un texel per pixel, quindi il testo è nitido come nella scheda Canvas; cambia tutto ciò che sta intorno. La carta, la rilegatura, la scrivania e la luce vengono dal gruppo Folio del pannello Grafica (la configurazione folio), e una sequenza :::paper nel testo stampa le sue pagine su un’altra carta (vedi Formato del documento › :::paper).
- Che cosa impagina. La scheda Folio segue il selettore Capitolo corrente / Libro intero del canvas. Un capitolo viene mostrato come parte del suo libro: le pagine prima e dopo vengono contate nello spessore dei due blocchi di pagine, e il capitolo si apre sul suo vero lato della doppia pagina. Un libro rilegato a destra (
page.binding: 'right', o un libro verticale) giace a specchio e gira i suoi fogli verso sinistra. - Girare le pagine. Prendi una pagina per il bordo e trascinala dall’altra parte; lasciala oltre la metà e si gira, prima di quel punto ricade indietro. Un clic su una pagina la gira (la pagina destra in avanti, quella sinistra indietro), e così fanno i pulsanti ‹ › della barra degli strumenti e i tasti freccia, Pag su/giù, Home e Fine quando il libro ha il focus. Ogni foglio si piega secondo la sua carta: la carta bibbia si arrotola stretta, il cartoncino gira con un arco ampio, il cartone e le copertine girano come lastre rigide.
- Salti lunghi. Una pagina a più di dieci pagine di distanza (digitata nel campo della pagina, indicata dal permalink, raggiunta da un link o dal cursore nel pannello Testo) si raggiunge in un solo movimento: il blocco di pagine intermedio si solleva tutto insieme, spesso quanto quelle pagine, e si posa dall’altra parte. Fino a dieci pagine, i fogli girano uno alla volta.
- Guardare intorno al libro. Un trascinamento con il tasto destro fa ruotare la vista intorno al libro, fino a 70° dalla verticale: per vedere il dorso, il taglio esterno o lo spessore del blocco. La vista resta dove la lasci, anche mentre le pagine girano, finché Reimposta la vista non la riporta dolcemente alla vista data dalle impostazioni (Inclinazione e Rotazione). Salva come vista predefinita memorizza in quelle impostazioni la vista così come la vedi, così il libro si apre lì e Reimposta la vista torna a essa.
- Che cosa fa il puntatore. Tre pulsanti nella barra degli strumenti scelgono che cosa fa il tasto sinistro (un dito, una penna) sul libro: Sfoglia le pagine a mano, il predefinito, come sopra; Ruota la vista, lo stesso di un trascinamento con il tasto destro, per un trackpad o un tablet; Seleziona il testo, che funziona come nella scheda Canvas sul libro così come lo si vede, inclinato o ruotato: un clic mette il cursore nel pannello Testo, un trascinamento seleziona, un doppio clic prende una parola, un clic su un link lo segue. La scelta viene ricordata; H, O e S la cambiano quando il libro ha il focus.
- Seguire l’editor. Il cursore e la selezione del pannello Testo vengono disegnati sulle pagine, e restano lì mentre scrivi: la pagina mostra la modifica appena viene reimpaginata. Spostare il cursore nell’editor su una pagina non visibile gira il libro fino a essa.
- Copertine. Con Copertine: una custodia intorno alle pagine il libro è rilegato in una custodia di tela, cartoncino o pelle del colore della copertina. Con Le pagine del documento la prima pagina è la copertina anteriore e l’ultima pagina (quando cade su una pagina sinistra) quella posteriore: il libro resta chiuso finché non si gira la copertina, e girare l’ultimo foglio lo richiude. Un libro spesso si apre con il dorso in piedi tra i due blocchi.
- La barra degli strumenti. Una barra fluttuante come quella del canvas: Ricalcola, Reimposta la vista, Salva come vista predefinita, le tre modalità del puntatore, Anteprima di stampa (la prova del canvas, sul bianco della carta del profilo di output, per cui nel frattempo la tonalità della carta del libro viene messa da parte; lo stesso interruttore del canvas), la puntina, ‹ › e il campo della pagina, che accetta un numero di pagina del libro e gira fino alla sua doppia pagina. La pagina a destra della doppia pagina aperta è quella indicata dal permalink (
view=folio&page=N). - Le impostazioni si applicano subito. Le impostazioni di Folio non fanno parte dell’impaginazione: cambiare la carta, la rilegatura o la luce ridisegna il libro senza reimpaginare alcuna pagina.
- Dove viene offerta. La scheda richiede WebGL2 e uno schermo il cui lato corto sia di almeno 600 px: su un telefono il libro 3D occupa più memoria di quanta il browser ne dia a una scheda, quindi lì la scheda non compare (né in un browser senza WebGL2). In un riquadro più stretto di 560 px il libro mostra una pagina alla volta; il foglio gira comunque sopra il dorso. Quando il sistema chiede movimento ridotto, le doppie pagine cambiano senza girare.
- Video sulla pagina. Un clic sul poster di un video lo riproduce sulla pagina, in qualunque delle tre modalità del puntatore, e l’immagine continua a muoversi mentre il foglio gira e si incurva. Un altro clic lo mette in pausa; avviarne un altro ferma il primo, a meno che non sia attivo Riproduci insieme ad altri video; il video si ferma quando il libro si posa su una doppia pagina che non lo mostra più. Spazio riproduce o mette in pausa il video della doppia pagina aperta. Un video con Riproduzione automatica attiva parte da solo la prima volta che si mostra la sua doppia pagina, con l’audio dopo che hai fatto clic sulla pagina (prima senza audio, e un clic lo riattiva); i due video della guida fanno così. I file caricati e i video a un indirizzo (MP4, HLS) si riproducono in questo modo quando il loro server consente letture tra origini diverse; i video di YouTube e Vimeo girano la pagina come prima (vedi Formato del documento › Video sulle pagine di Folio).
- Alternative testuali. Ogni pagina è disegnata come un’immagine; il suo nome accessibile rimanda alla scheda HTML e al pannello Testo per il suo testo.
Scheda HTML
Rende l’output di postext dentro un contenitore Shadow DOM, garantendo un isolamento completo degli stili rispetto alla pagina host. Il CSS editoriale (tipografia, spaziature, filetti tra le colonne) viene iniettato dentro la shadow root, così non può essere influenzato dagli stili dell’applicazione circostante né riversarsi in essi.
I link Markdown sono attivi qui e nel PDF (vedi Formato del documento › Link). In questa scheda, un clic su un link apre la sua destinazione in una nuova scheda del browser, così la Sandbox resta aperta; i rimandi :ref saltano comunque all’interno del documento.
Qui i video si riproducono: un video di YouTube o Vimeo nel lettore della piattaforma, un file o un indirizzo nel lettore del browser (uno stream HLS tramite hls.js dove il browser non gestisce HLS da sé), con le opzioni del lettore di Stile video del pannello Grafica e di ogni video. I clic su un lettore vanno al lettore, non all’editor. Con Nel visualizzatore HTML impostato su Locandina, la scheda mostra il poster stampato, con un link al video.
Una barra degli strumenti in cima all’area di visualizzazione offre:
- Controlli del corpo del testo: riduci o ingrandisci il testo corrente conservando ogni misura relativa della configurazione.
- Modalità delle colonne: singola (un’unica colonna alta e scorrevole) o multipla (il numero di colonne la cui larghezza si avvicina di più alla giustezza configurata, con scroll-snap orizzontale tra le pagine). Un documento a due colonne conserva le sue pagine a due colonne, ma il visualizzatore può mostrare un numero dispari di colonne (tre invece di due allargate o quattro strette) quando è la soluzione più vicina; l’ultima appartiene allora alla pagina successiva, visibile per metà. Anche un documento o una sezione in Più colonne viene mostrato in pagine a due colonne: da tre a otto colonne di stampa sarebbero strisce sottilissime alla larghezza dello schermo, quindi il visualizzatore compone il suo testo a due colonne per pagina e ne mostra affiancate tante quante la giustezza consente. Un libro rilegato a destra (
page.binding) scorre le sue pagine da destra a sinistra in modalità multipla: il visualizzatore si apre all’estremità destra e la freccia ‹ va alla pagina successiva. Un libro composto in verticale si legge solo in modalità multipla: il pulsante Singola è disattivato, con un tooltip che spiega perché, e la scelta che hai salvato torna con il libro orizzontale successivo.
La geometria delle colonne è guidata dalla sezione Lettore web (HTML) del pannello Grafica (Grafica → Esportazione): maxCharsPerLine imposta la giustezza desiderata in caratteri del font del testo corrente, columnGap la distanza orizzontale tra le colonne in modalità multipla, e optimalLineBreaking attiva o disattiva Knuth–Plass dentro il visualizzatore. Vedi il riferimento della configurazione del visualizzatore HTML e l’esempio di integrazione completo per lo stesso schema usato internamente dalla Sandbox.
Scheda EPUB 3
Scrive l’intero libro come file EPUB 3 con il pacchetto postext-epub, lo mostra in un lettore dentro la scheda e lo scarica. Il file viene costruito nel browser a partire dalla stessa impaginazione capitolo per capitolo che la scheda PDF usa per Libro intero, quindi i suoi numeri di pagina, le note, i rimandi, l’indice e l’indice analitico sono quelli che stampa il PDF. La scheda non ha il selettore Capitolo corrente / Libro intero, perché un EPUB contiene sempre il libro intero. Al suo posto, a sinistra della barra delle schede, offre la resa (come icone su un telefono).
EPUB 3 ha due rese, indicate dalla proprietà rendition:layout del pacchetto:
- Layout fisso (
pre-paginated, spesso chiamato FXL): ogni pagina com’è stampata. Ogni pagina è un documento a sé con le dimensioni della pagina, e il testo sta dove lo mette il PDF, nei font del libro, ma resta testo vero che si può selezionare, cercare e leggere ad alta voce. Le doppie pagine si accoppiano come in stampa, e un libro rilegato a destra (arabo, cinese verticale) gira da destra a sinistra. Conserva la grafica: colonne, elementi flottanti, testatine, aperture, le esatte divisioni in righe. Sceglilo per i libri le cui pagine sono progettate come pagine, come libri illustrati, manuali, cataloghi e riviste, e per i sistemi di lettura con uno schermo grande. Su uno schermo piccolo la pagina viene rimpicciolita, e il lettore deve ingrandirla per leggerla. - Layout fluido (il predefinito su telefoni e computer, e il predefinito di EPUB): il testo, le figure e le tabelle nell’ordine di lettura, ricomposti dal sistema di lettura per il suo schermo e per il carattere, il corpo e i margini che il lettore sceglie. I paragrafi vengono ricostruiti dalle righe impaginate (i trattini aggiunti a fine riga vengono tolti), le figure e le tabelle seguono il testo che le cita, i riquadri diventano aside, le note a piè di pagina rimandano alle note alla fine di ogni capitolo e viceversa, e i numeri di pagina stampati si conservano come marcatori di pagina. Un foglio di stile derivato dalla grafica dà ai titoli, ai riquadri, alle tabelle e alle didascalie il loro aspetto, ma la geometria della pagina sparisce: niente colonne, niente testatine, niente divisioni in righe fisse. Sceglilo per il testo continuo, come romanzi, saggi e relazioni, e per telefoni e lettori a inchiostro elettronico.
Finché non se ne sceglie uno, la scheda si apre con il layout fisso su un tablet come un iPad, il cui schermo ha spazio per la pagina stampata, e con quello fluido ovunque altrove. La scelta viene ricordata tra una visita e l’altra (postext-sandbox-epub-layout), e cambiarla riscrive subito il file.
- Generazione. L’EPUB viene scritto la prima volta che si apre la scheda e di nuovo quando si preme Ricalcola. Una barra di avanzamento conta i capitoli in impaginazione, poi i passaggi dello scrittore (font, immagini e copertina; le pagine o i capitoli; il pacchetto), e gli screen reader annunciano quando il file è pronto o non è riuscito. Dopo una modifica, una freccia accanto a Ricalcola indica che il file non corrisponde più al testo, come nella scheda PDF. Lasciare la scheda o cambiare la resa ferma una generazione in corso. Un libro lungo richiede qualche secondo, durante il quale la pagina non risponde.
- Che cosa entra nel file. I metadati vengono dal front matter del primo capitolo:
title,subtitle,author(un nome o un elenco),publishDateodate,isbnoidentifier,publisher,rightsedescription; la lingua viene dallocaledella configurazione. Un libro senza identificatore ne riceve uno ricavato dal progetto (o dal libro di esempio e dalla sua lingua), così ogni EPUB dello stesso libro conserva un’unica identità nella biblioteca di un lettore. Ogni famiglia di font nominata dalla grafica viene incorporata: le porzioni di Google Fonts solo dove il libro stampa caratteri che contengono, le famiglie personalizzate a meno che non siano marcate come non ridistribuibili. Le immagini entrano come sono memorizzate, mai come il master di stampa del PDF; ogni SVG porta le varianti nominate dal suo testo (famiglie personalizzate e famiglie di Google allo stesso modo), tranne le famiglie marcate come non ridistribuibili, che vengono segnalate. I file video entrano sottomedia/e si riproducono nel lettore del sistema di lettura; un file senza i suoi byte si riproduce dal suo indirizzo di produzione, che il pacchetto dichiara come risorsa remota, e un video di YouTube o Vimeo è il suo poster con un link al video. La copertina è l’immagine propria del libro quando è una bitmap larga almeno 600 px, altrimenti la prima pagina resa a 1.600 px di larghezza senza il margine dei segni di taglio. - Il lettore. La scheda apre il file che ha appena scritto, gli stessi byte che scarichi, non un’anteprima separata. Il layout fisso mostra una pagina, o una doppia pagina quando il riquadro è abbastanza largo, ridimensionata per starci; il libro a layout fluido viene impaginato una schermata alla volta (dall’alto in basso per il cinese verticale), e le sue pagine proseguono da un capitolo al successivo. I link del libro spostano il lettore; i link web e di posta si aprono in una nuova scheda del browser. ← / →, Pag su / Pag giù, Home e Fine girano le pagine, e in un libro da destra a sinistra ← va avanti.
- La barra degli strumenti. Una barra fluttuante come quella della scheda PDF: Ricalcola, la puntina, Scarica l’EPUB con le dimensioni del file (il file prende il nome dal titolo del libro), un pulsante degli avvisi quando lo scrittore ha segnalato qualcosa, Indice (un elenco di salti tratto dall’indice del libro), Aumenta il corpo e Riduci il corpo (solo nel layout fluido, mantenendo la posizione), ‹ › e, in un layout fisso, il campo della pagina. Il campo della pagina conta le pagine nell’ordine di lettura del file, con la copertina come 1; i riquadri nominano ogni pagina con il suo numero stampato.
- Avvisi. Il pulsante degli avvisi elenca ciò che il file non ha potuto portare così come lo ha il libro: un’immagine senza file memorizzato (al suo posto c’è un riquadro vuoto), una famiglia, un peso o uno stile senza variante incorporata (i sistemi di lettura ne sostituiscono una), una famiglia lasciata fuori perché potrebbe non essere ridistribuibile, e tutto ciò che la resa non può esprimere. Gli stessi messaggi vanno nella console del browser.
- Verificare il file. Entrambe le rese della guida e dei libri di esempio superano W3C EPUBCheck 5.4 senza errori né avvisi. Per verificare il tuo libro, scaricalo ed esegui
epubcheck book.epub, oppure leggilo in Apple Books, Thorium Reader o Calibre.
Vedi Libri EPUB per scrivere gli stessi file dal tuo codice.
#Telefoni e schermi piccoli
Sotto i 768 px di larghezza la Sandbox passa a una disposizione tutta sua:
- Pannelli. La barra dei pannelli si sposta in fondo alla finestra, con gli stessi pulsanti nello stesso ordine. Un pannello aperto copre l’anteprima invece di stare accanto a essa; l’anteprima resta sotto dov’era, fuori dall’ordine di tabulazione, così chiudendo il pannello la si ritrova sulla stessa pagina.
- Barra superiore. Le schede di output, il selettore dell’ambito (la scelta della resa nella scheda EPUB) e i controlli dell’host (bersagli grandi, tema, lingua) condividono la barra sopra l’anteprima. Sotto i 640 px occupa due righe: il logo, l’ambito e i controlli sopra, le schede sotto, che condividono tutta la larghezza; a 320 px ci stanno cinque schede.
- Barre degli strumenti. Le barre degli strumenti fluttuanti delle anteprime si agganciano lungo il fondo dell’anteprima e vanno a capo su una seconda riga quando non ci stanno.
- Folio. La scheda Folio non viene offerta sullo schermo di un telefono (vedi Scheda Folio).
- PDF. I telefoni e i tablet solo touch non possono mostrare un PDF dentro la pagina (Android non ha un visualizzatore integrato, e iOS disegna solo la prima pagina), quindi la scheda PDF mostra invece una scheda con Apri il PDF, che apre il file in una nuova scheda; il pulsante Scarica della barra degli strumenti continua a salvarlo.
#Libri e capitoli
Tutto ciò che apri nella Sandbox è un libro, così come un file libro di InDesign raggruppa un documento per capitolo: la configurazione, i font personalizzati e l’insieme delle risorse sono condivisi da tutto il libro, e ogni capitolo è un documento Markdown a sé. Le opere lunghe (un manuale di cinquecento pagine) si modificano un capitolo alla volta, mentre la numerazione, i rimandi e l’esportazione continuano a vedere un unico documento.
- La struttura si gestisce nel pannello Capitoli e nel selettore di capitoli del pannello Testo: aggiungi, rinomina (doppio clic su una riga), riordina, dividi un capitolo in uno per ogni titolo di livello 1, unisci un capitolo al precedente, elimina. Ogni capitolo conserva la propria cronologia di annullamento e il proprio cursore.
- Un capitolo alla volta. Per impostazione predefinita le anteprime impaginano il capitolo attivo, in continuità con i capitoli che lo precedono: il suo primo numero di pagina segue l’ultima pagina del capitolo precedente, i titoli di livello 1 continuano a contare (il capitolo 4 ha il numero 4, le sue figure 4.1, 4.2, …), le testatine
{chapterNumber}e{chapterTitle}si adeguano, la parità recto/verso viene rispettata (un’apertura di capitolo aggiunge una pagina bianca esattamente come farebbe a metà libro), e un:refa una figura citata per la prima volta nel capitolo 1 mantiene quel numero. Il numero di pagine dei capitoli precedenti viene dall’ultima impaginazione che ha mostrato ciascuno di essi; i capitoli mai visitati (o modificati da allora) vengono impaginati in background, uno dopo l’altro, e l’elenco dei capitoli indica pagine in attesa finché non arrivano. Gli intervalli di pagine sono esatti per i capitoli che si aprono su una pagina nuova (l’impostazione predefinita); un capitolo il cui testo sarebbe proseguito dalla pagina precedente viene invece collocato in cima a una pagina propria. - Libro intero. Il canvas, l’anteprima HTML e la scheda PDF possono mostrare l’intero libro come un unico documento continuo: scegli Libro intero nel selettore a sinistra della barra delle schede (libri con più di un capitolo). Il canvas impagina allora ogni capitolo in ordine, ciascuno dopo le pagine a cui sono arrivati i precedenti, e mostra i documenti cuciti insieme: una modifica reimpagina solo il suo capitolo, e i capitoli successivi solo quando la loro prima pagina si è spostata; l’elenco dei capitoli, le parti
chapter=epage=del permalink e la sincronizzazione con l’editor seguono il capitolo della pagina. La scelta si conserva con il libro (un romanzo breve si legge come un solo documento, un manuale un capitolo alla volta), e un preset può aprirsi così tramiteview.canvasScopedel manifest. L’anteprima HTML condivide la scelta del canvas e impagina l’intero libro come un unico documento dalla prima pagina, con le righe dell’indice e il frammento che seguono il capitolo di ogni pagina; la scheda PDF ha un selettore proprio. - Libri lunghi. Un libro di 120 capitoli funziona come uno breve. Il menu dei capitoli nell’intestazione del pannello Testo scorre all’interno della finestra e si apre sul capitolo attivo; i tasti freccia si spostano a partire da quello. Un libro diviso in parti (recinti
:::partnei suoi capitoli) elenca i capitoli sotto le rispettive parti, nel menu e nel pannello Capitoli, e un clic su una parte nel menu apre il suo primo capitolo. Oltre i 30 capitoli il menu ha in alto un campo di ricerca che trova i numeri dei capitoli (27) e le parole dei titoli e dei nomi delle parti (埋香,卷三); Invio apre la prima corrispondenza. Mentre un metodo di input sta componendo (Zhuyin, Cangjie, pinyin, kana), Invio e i tasti freccia appartengono a lui: Invio conferma la conversione e non apre nulla. I file dei capitoli di un libro di esempio si caricano otto alla volta, e mentre i capitoli vengono impaginati in background il pannello Capitoli mostra l’avanzamento (Impaginazione 34/120). Il canvas e l’anteprima HTML mostrano un libro di più di 200 capitoli un capitolo alla volta, qualunque cosa chiedano il libro o il suo manifest: impaginare tutti i capitoli insieme tiene in memoria l’intero libro. Un libro al di sotto di questa soglia può aprirsi intero: 紅樓夢 (129 capitoli, circa 2.000 pagine) richiede circa 25 secondi e 100 MB sul canvas. La scheda PDF può comunque esportare intero qualsiasi libro. - Front matter. Il front matter del primo capitolo è il front matter del libro (titolo, autore, …). Un blocco di front matter in cima a qualsiasi altro capitolo viene ignorato, e il pannello Verifiche lo segnala.
buildBundlesegue la stessa regola, quindi un libro si presenta allo stesso modo nella Sandbox e nel tuo programma. - Conteggio delle pagine. Ogni capitolo viene impaginato come un documento a sé, quindi
{totalPages}conta le pagine del capitolo.{bookTotalPages}conta l’intero libro: una volta note le pagine di tutti i capitoli, le anteprime impaginano ogni capitolo con quel totale (solo quando un’intestazione, un piè di pagina o il progetto grafico lo stampano). Fino ad allora un capitolo stampa le pagine fino alla propria fine. Libro intero nella scheda PDF conta le pagine che impagina, quindi il file stampa sempre il totale reale del libro. - Aperture di capitolo. Tra un capitolo e l’altro non viene forzata alcuna interruzione di pagina: un capitolo il cui primo blocco è un titolo di livello 1 si apre su una pagina nuova grazie all’impostazione interruzione prima del titolo stesso, esattamente come un capitolo che inizia a metà documento.
- Sincronizzazione. Un clic su un paragrafo di qualsiasi capitolo nel canvas o nell’anteprima HTML porta l’editor a quel capitolo e vi colloca il cursore; il cursore dell’editor viene evidenziato nelle anteprime ovunque si trovi il capitolo nel libro. Gli avvisi riportano il loro capitolo.
- I documenti esistenti si aprono come un libro con un solo capitolo; non cambia nulla finché non si aggiunge un secondo capitolo.
#Modificare i fumetti
Un capitolo con pagine a fumetti (:::page) o strisce (:::strip) si può modificare direttamente sulle pagine, nella scheda Canvas, nella scheda HTML e nella modalità di selezione di Folio. Gli strumenti funzionano allo stesso modo su una striscia composta in una colonna, fatta flottare in testa alla pagina o a tutta larghezza, più stretta della sua giustezza o sotto una didascalia, e scrivono nel recinto della striscia stessa. Ogni modifica viene scritta nel Markdown del capitolo, come lo sarebbe una modifica digitata, quindi l’annullamento dell’editor la riporta indietro. Il markup e le regole di lettering sono spiegati in Fumetti.
- Separatori. Sopra l’intercolonna tra due vignette il puntatore diventa un cursore di ridimensionamento. Trascinalo per spostare la linea di suddivisione; al rilascio la nuova percentuale viene scritta nell’attributo
splitdella pagina (aggiunto al recinto quando la pagina non ne ha uno) e la pagina viene reimpaginata. Maiusc aggancia la linea a passi del 5 %, Alt sposta solo l’estremità più vicina al puntatore, inclinando la linea, e nessuna vignetta diventa più stretta del 5 %. Durante il trascinamento, una vignetta la cui immagine non manterrebbe più visibile la propria zona sicura viene evidenziata, con un suggerimento. Ogni separatore è anche un elemento focalizzabile: i tasti freccia lo spostano dell’1 % (5 % con Maiusc), Invio scrive la posizione ed Esc la ripristina. - Dividi e unisci. Sopra una vignetta una piccola barra degli strumenti offre Dividi con una linea orizzontale, Dividi con una linea verticale (per la nuova cella viene aggiunta una riga
::panelvuota, subito dopo questa vignetta) e Unisci alla vignetta successiva: la linea tra le due scompare, e la vignetta unita conserva l’immagine della prima e prende le righe di sceneggiatura di entrambe. Alle vignette si arriva anche con Tab: una vignetta con il focus ha un contorno, H la divide con una linea orizzontale, V con una verticale, e M la unisce alla successiva; dopo la reimpaginazione il focus resta sulla vignetta. Invio apre la barra degli strumenti, ed Esc torna da questa alla vignetta. - Nuvolette. Trascina una nuvoletta per fissarla: al rilascio la sua riga di sceneggiatura riceve
at="x% y%", il punto in percentuale dell’immagine della vignetta (della cella, per una vignetta senza immagine), così il punto fissato resta nello stesso posto del disegno attraverso ritagli, trascinamenti dei separatori e traduzioni. Un gruppo unito si sposta come un tutt’uno, fissato dalla sua prima nuvoletta. I tasti freccia spostano una nuvoletta con il focus dell’1 % (5 % con Maiusc), e un doppio clic su una nuvoletta fissata ne rimuoveat, restituendola al posizionamento automatico. Un clic singolo porta il cursore dell’editor sulla riga della nuvoletta. - Avviso di sconfinamento. Mentre una nuvoletta si sposta, con il puntatore o con i tasti freccia, l’anteprima verifica dove finirebbe. Se coprisse un volto o una zona da evitare, o uscisse dalla vignetta più di quanto fa ora, il contorno in movimento diventa arancione, i volti e le zone da evitare della vignetta vengono disegnati tratteggiati, e il tooltip dice quale caso: Qui coprirebbe un volto, Qui coprirebbe una parte dell’immagine da tenere libera, Qui uscirebbe dalla vignetta. Una riga con
breaknon viene segnalata per l’uscita dalla vignetta. L’avviso non prevede come si sposteranno le altre nuvolette della vignetta per fare spazio. - Code. Sopra la punta di una coda il puntatore diventa un mirino. Trascina la punta verso il punto a cui la coda deve mirare: al rilascio la riga riceve
to="x% y%", il punto in percentuale dell’immagine della vignetta, e la coda si orienta verso di esso, fermandosi poco prima come fa davanti a una bocca. Esc annulla il trascinamento, e un doppio clic sulla punta rimuoveto, così la coda torna a indicare chi parla. Da tastiera, T su una nuvoletta con il focus passa alla sua coda: i tasti freccia spostano il punto a cui mira dell’1 % (5 % con Maiusc), Invio lo scrive, Esc lo ripristina, Canc rimuoveto, e T torna alla nuvoletta. - Personaggi e zone da evitare. Su un’immagine nel pannello Risorse, il campo Zona sicura e lettering apre una finestra di dialogo con tre modalità. Zona sicura marca la parte dell’immagine che deve restare visibile. Personaggi colloca un punto per ogni personaggio: un clic sull’immagine aggiunge lì un personaggio e mette il focus sul suo id, che deve essere la chiave del personaggio usata dalla sceneggiatura (
maya: …); la sua bocca, la sua testa (dove puntano le nuvolette di pensiero) e il suo volto (mai coperto da una nuvoletta) si trascinano al loro posto. Le zone da evitare sono rettangoli che nessuna nuvoletta copre, disegnati trascinando sopra l’immagine. La stessa modalità marca i volti delle persone che non parlano (Aggiungi volto di comparsa, o l’interruttore Un volto sulla riga di una zona): nessuna nuvoletta copre un volto del genere, mentre una zona da evitare cede quando una vignetta non ha altro spazio. Ogni marca si può spostare con i tasti freccia (Maiusc per passi più ampi) e rimuovere con Canc; la finestra di dialogo ha un proprio annullamento, e un personaggio fuori dalla zona sicura viene segnalato. - Impostazioni. Il gruppo Fumetti del pannello Grafica contiene la configurazione dei fumetti: direzione di lettura e immagini specchiate, la cornice e le intercolonne, la vignetta predefinita e gli stili di vignetta con nome, il lettering e gli stili delle nuvolette, ciascuno con un’anteprima del proprio contorno.
- Editor e verifiche. L’editor di testo colora le righe
:::page,:::strip,::panele le chiavi e gli attributi delle righe di sceneggiatura. Il pannello Verifiche elenca gli avvisi dei fumetti (una suddivisione illeggibile, vignette e celle che non corrispondono, una nuvoletta che non ci sta…) alla riga a cui si riferiscono; vedi Fumetti › Avvisi dei fumetti.
#Documenti Word
I manoscritti arrivano di solito come file Word. Il pannello Testo importa direttamente un .docx, senza agenti di IA e senza nulla da installare, e ne mappa gli stili come fa Inserisci in InDesign. Importa un documento Word legge il file nel browser (non viene mai caricato su un server) e apre una finestra di dialogo; il libro cambia solo quando premi Importa. Un file che non è un documento Word, come un vecchio .doc binario, viene rifiutato con un messaggio che lo spiega; salvalo prima da Word come .docx.
La finestra di dialogo ha queste parti, ognuna delle quali si può comprimere:
- Qualità dell’originale. Un giudizio su come è stato preparato il manoscritto: Ben strutturato con stili (si converte in modo pulito), Stili in parte (alcuni paragrafi sono formattati a mano) o Nessuno stile (tutto è in Normale, quindi il testo entra come paragrafi semplici). Sotto, i conteggi (paragrafi, quanti sono in uno stile diverso da Normale, immagini, tabelle, note) e ciò che è stato trovato, ciascuno con le prime parole di alcuni paragrafi in cui succede: paragrafi con formattazione impostata a mano (font, dimensioni, colori, allineamento; viene scartata, perché la stabilisce il progetto grafico), paragrafi brevi in grassetto che sembrano titoli digitati a mano, numeri o punti elenco digitati invece degli elenchi di Word, a capo manuali, interruzioni di pagina manuali, paragrafi vuoti usati come spaziatura, tabulazioni e doppi spazi, revisioni (gli inserimenti si conservano e le eliminazioni si scartano; accettale o rifiutale prima in Word), commenti (non importati), caselle di testo (il loro testo segue il paragrafo a cui ciascuna è ancorata), equazioni (convertite in TeX; controllale), testo nascosto e immagini in formati che il browser non sa mostrare (EMF, WMF, TIFF).
- Modello di importazione. La mappatura in uso: Automatico (per nome dello stile), un modello salvato, o Salvato in questo documento per un file esportato dalla Sandbox. Salva come nuovo modello chiede un nome e conserva nel browser la mappatura, compreso ogni stile di questo documento; Salva le modifiche aggiorna il modello selezionato; il pulsante di download lo scrive come file
.jsone quello di caricamento ne carica uno, così un intero gruppo di lavoro può condividere lo stesso modello. L’eliminazione chiede conferma. L’ultimo modello usato viene proposto per primo la volta successiva. - Stili di paragrafo. Ogni stile di paragrafo usato dal documento, con il numero di paragrafi che lo usano e le prime parole di uno di essi, e ciò in cui si trasforma: Testo corrente, Titolo (un livello da 1 a 6 e, quando il progetto grafico ha stili di titolo, uno di questi), Stile di paragrafo (uno degli stili di paragrafo del progetto grafico; i paragrafi consecutivi in quello stile formano un gruppo
:::paragraphs), Riquadro (i paragrafi consecutivi formano un riquadro di quel tipo), Titolo di riquadro (apre un riquadro intitolato con il testo del paragrafo), Citazione, Didascalia dell’immagine o della tabella accanto, Inizio di un nuovo capitolo, Markdown di Postext, così com’è scritto (il testo si copia tale e quale, per le direttive digitate in Word) o Escludi. I paragrafi degli elenchi numerati e puntati di Word diventano elenchi Postext qualunque sia il loro stile, con i loro numeri e i loro livelli di annidamento. Poesia (:::verse, riga per riga) compone i paragrafi dello stile come una poesia:::verse, eventualmente in uno degli stili di paragrafo del progetto grafico: Maiusc+Invio va a capo, un paragrafo è una strofa, più paragrafi di una riga di seguito formano una strofa e un paragrafo vuoto separa le strofe; viene proposto automaticamente per gli stili chiamati Verse, Poem o Poesía. - Stili di carattere. Lo stesso per gli stili di carattere: Testo semplice, Grassetto, Corsivo, Grassetto corsivo, Maiuscoletto, Apice, Pedice, Chip (uno degli stili di chip del progetto grafico), Markdown di Postext, così com’è scritto o Escludi.
- Opzioni. Gli a capo manuali (Maiusc+Invio) si conservano come a capo all’interno del paragrafo (una barra rovesciata alla fine della riga Markdown, l’impostazione predefinita), si uniscono con uno spazio o iniziano un nuovo paragrafo; grassetto, corsivo, maiuscoletto, apici e pedici impostati a mano si conservano o si scartano; i paragrafi brevi in grassetto restano paragrafi o diventano titoli di un certo livello; le interruzioni di pagina manuali si scartano (è il progetto grafico a girare le pagine) o si conservano come
:::pagebreak; immagini e tabelle si aggiungono o no come risorse. - Anteprima del Markdown, aggiornata quando cambia la mappatura.
Il piè della finestra sceglie dove va il testo: Sostituisci questo capitolo, Nuovi capitoli dopo questo o Sostituisci l’intero libro; le ultime due opzioni iniziano un capitolo a ogni titolo di livello 1. Le immagini (PNG, JPEG, GIF, WebP, SVG) diventano risorse di tipo figura e le tabelle risorse di tipo tabella (con righe di intestazione, celle unite, larghezze delle colonne e riempimenti delle celle conservati), ciascuna collocata con ::resource{id="…"} dove si trovava e con la didascalia presa da un paragrafo Didascalia accanto, senza l’etichetta digitata (Figura 3.) perché Postext numera le risorse da sé. Le note a piè di pagina e le note di chiusura diventano note a piè di pagina Postext ([^1]), le voci di indice di Word (campi XE) diventano marche :index, i link restano link e le equazioni diventano $…$ / $$…$$. Una tabulazione nel testo corrente diventa :tab con lo stop che Word le ha assegnato (:tab{at=432pt align=end leader="."}), oppure un semplice :tab quando il paragrafo va a uno stile di paragrafo del libro che ha stop propri; i caratteri di riempimento a punti, a trattini e a punto centrale di Word diventano ., - e ·, quelli a trattino basso e spessi un filetto. Una tabulazione in un titolo, in una cella di tabella o in una nota diventa uno spazio.
Prima di abbinare gli stili per nome, la mappatura automatica riconosce i ruoli propri di Word in qualsiasi lingua dell’interfaccia (titolo 1–6, Titolo, Citazione, Didascalia; i paragrafi di sommario, di indice, di intestazione e di piè di pagina si scartano) e gli stili del progetto grafico: uno stile di Word che si chiama come uno stile di paragrafo, un tipo di riquadro, uno stile di titolo o uno stile di chip del libro (per id o per nome, ignorando maiuscole e accenti) viene mappato su di esso.
Esporta in Word scarica il capitolo aperto, o l’intero libro, come .docx perché qualcuno ci lavori in Word. Lo stesso modello si applica al contrario: i titoli ricevono gli stili di titolo di Word, gli stili di paragrafo, i riquadri, le citazioni e i chip ricevono stili Word propri (con il nome degli stili del progetto grafico, Callout: Note, Chip: Key), gli elenchi diventano elenchi di Word, le note a piè di pagina diventano note a piè di pagina di Word e i link restano link. :tab diventa una tabulazione di Word, un :tab{…} con uno stop proprio si conserva così com’è scritto, e gli stop di tabulazione di uno stile di paragrafo impostati a una lunghezza diventano gli stop di tabulazione del suo stile Word, con il carattere di riempimento di Word più vicino (uno stop a 'end' o a una percentuale dipende dalla pagina su cui Word compone il testo, e viene scartato). Ciò che Word non sa mostrare (front matter, recinti, direttive, :ref, formule, marche :index, righe di risorsa) si conserva così com’è scritto negli stili grigi Postext Markup. Un libro si esporta con un paragrafo Postext Chapter in testa a ogni capitolo. Il modello viaggia dentro il file, quindi il documento modificato si importa di nuovo con la stessa mappatura, come libro intero quando contiene paragrafi di capitolo. Lascia il testo grigio com’è e il testo tornerà come è uscito; le etichette delle note a piè di pagina vengono rinumerate ([^1], [^2]…), il che si stampa allo stesso modo, e _italic_ torna come *italic*.
Per le conversioni che questa finestra di dialogo non copre (sorgenti PDF, PowerPoint, EPUB o IDML, riproduzione delle regole di impaginazione di un originale), usa la skill per agenti.
#Persistenza
La Sandbox salva automaticamente il tuo lavoro nel browser:
- Libro e configurazione: i capitoli, il capitolo attivo e l’ambito del canvas si salvano automaticamente in
localStoragesottopostext-sandbox-book(un documento singolo salvato da una versione precedente si legge dapostext-sandbox-markdowncome libro di un capitolo e viene migrato al primo salvataggio); la configurazione si salva dopo 1 secondo di inattività, privata dei valori predefiniti in modo da memorizzare solo le tue modifiche, insieme alla sua versione (postext-sandbox-config-version); una configurazione salvata prima che esistesse la versione si legge come descritto più avanti in Interruzioni dei titoli salvate da postext 1.4 o precedenti - Stato dell’interfaccia: il pannello e la scheda di visualizzazione attivi, la larghezza della barra laterale, il gruppo aperto del pannello Grafica (
postext-sandbox-settings-group), il suo interruttore Mostra tutte le spiegazioni (postext-sandbox-settings-help) e lo stato aperto delle sezioni, i libri di esempio nascosti, lo zoom, l’adattamento e le modalità di visualizzazione del canvas, la scala del font e la modalità a colonne dell’HTML, la resa della scheda EPUB (postext-sandbox-epub-layout) e lo stato di blocco delle barre degli strumenti persistono tutti inlocalStorage - Libro aperto: l’id del libro tuo aperto (un progetto) si memorizza in
localStoragesottopostext-sandbox-project; i progetti stessi (capitoli, configurazione e record delle risorse; recordversion: 9, ilCONFIG_VERSIONdel motore, con cui vengono contrassegnate anche la configurazione di lavoro e le esportazionipostext-config.json, così che ciascuna venga migrata una sola volta quando cambiano le regole del motore; i record di documento singolo delle versioni precedenti vengono migrati alla lettura, e le interruzioni dei titoli dei record anteriori alla versione 3, la dimensione delle formule dei record anteriori alla versione 4, lo spazio sotto le figure in linea dei record anteriori alla versione 5, lo spazio attorno alle figure in linea nei riquadri, le marche dei titoli, le dimensioni dei capilettera, lo spazio sotto una riga con i due punti e i tagli dei riquadri dei record anteriori alla versione 6, le interruzioni ai trattini e la divisione in righe del testo non giustificato dei record anteriori alla versione 7, e le divisioni sotto un titolo, le interruzioni ai trattini delle parole composte e lo spazio sotto i contenitori:::paragraphsdei record anteriori alla versione 8 vengono fissati come descritto più avanti) vivono nello storeprojectsdel database IndexedDB della Sandbox, e i loro contenuti binari condividono gli store dei blob e dei font con il documento di lavoro. I contenuti vengono eliminati dalla garbage collection quando né il documento di lavoro né alcun progetto vi fanno riferimento - Libri di esempio modificati: la tua versione di un libro di esempio (capitoli, capitolo attivo, ambito del canvas, configurazione e record delle risorse, con ciò che l’esempio ha applicato quando l’hai aperto) si salva nello store
presetDraftsdel database IndexedDB della Sandbox, un record per esempio e lingua del contenuto, e i suoi file vengono conservati dalla garbage collection come quelli di un progetto. Ripristinare l’originale la elimina - Copertine dei libri di esempio: la copertina ricavata dalla prima pagina di un libro di esempio che non include una miniatura si conserva nello store
presetCoversdel database IndexedDB della Sandbox, un record per esempio e lingua del contenuto (vedi pannello Libri). Un libro tuo conserva la copertina nel record del suo progetto. - Salvataggio all’uscita: le modifiche in sospeso si scrivono subito quando la pagina viene nascosta o chiusa, quando lasci la Sandbox tramite un link (il logo) e prima che si apra un altro libro, invece che dopo la pausa di 1 secondo
- Libro di esempio aperto: l’id dell’ultimo preset caricato si memorizza in
localStoragesottopostext-sandbox-preset, così i pulsanti Reimposta dei pannelli continuano a ripristinare quel preset da una sessione all’altra (un preset che non viene più servito appare come non disponibile). Ciò che quel preset ha applicato (l’impronta del suo pacchetto più gli hash del Markdown, della configurazione e dell’insieme delle risorse) si memorizza sottopostext-sandbox-preset-applied, ed è così che la visita successiva distingue un documento intatto da uno modificato - Risorse e font: i record delle risorse, i loro blob binari (bitmap e SVG) e i file dei font personalizzati persistono in IndexedDB; quando IndexedDB non è disponibile (per esempio in alcune modalità di navigazione privata), nel pannello Verifiche compare un avviso archiviazione non disponibile (sotto Browser)
- Permalink: il frammento dell’URL indica ciò che è sullo schermo, così un ricaricamento, un segnalibro o un link passato a qualcun altro portano alla stessa pagina dello stesso libro nello stesso visualizzatore:
#preset=bioquimica-feduchi&lang=es&view=canvas&chapter=1&page=7apre il preset Bioquímica in spagnolo nella scheda Canvas al capitolo 1, pagina 7 (il numero stampato sulla pagina).viewècanvas,pdf,folio,htmloepub; nella scheda Folio la pagina è quella di destra della doppia pagina aperta. Un progetto locale si indica comeproject=ID, il suo id di archiviazione, quindi solo il browser che contiene il progetto può seguire un link del genere. La Sandbox mantiene aggiornato il frammento mentre cambi libro, scheda e capitolo e mentre scorri. Una parte omessa significa ciò che c’è già (senza pagina: la prima pagina del capitolo; senza libro: l’ultimo aperto), e un libro che il browser non riesce ad aprire viene ignorato. Incollare un link nella barra degli indirizzi di una Sandbox aperta lo apre sul posto. Quando la pagina si apre su un link a un libro diverso dall’ultimo aperto, la Sandbox mostra il suo stato di caricamento finché non è arrivato il libro collegato, mai quello precedente. Un host può anche collegare libri propri con la prophashBundles(vedi Props): il sito apre una ricetta del Ricettario con#recipe=<slug>&lang=es. La prima visita importa il file.postextdella ricetta come uno dei tuoi libri. Una visita successiva allo stesso link chiede prima (Hai già questo libro): Apri la mia copia apre quel libro, con le tue modifiche, e Sostituisci con la versione pubblicata importa di nuovo la ricetta, che nel frattempo potrebbe essere stata corretta, ed elimina la tua copia una volta aperta quella nuova; Esc conserva la tua copia. Il frammento indica allora il progetto. La lingua dell’interfaccia resta nel percorso (/en/sandbox,/es/sandbox);langè la lingua del contenuto di un pacchetto bilingue, un qualsiasi tag BCP 47, mantenuto nella forma canonica di maiuscole e minuscole (lang=zh-hantsi leggezh-Hant). Un tag che il pacchetto non elenca apre l’edizione che lo serve:zh-TWezh-HKaprono quella in cinese tradizionale (zh-Hant),zhezh-CNquella in cinese semplificato (zh-Hans),en-GBquella inglese. L’altra scrittura cinese si legge solo quando il pacchetto non ha un’edizione in quella del lettore: un linkzh-TWa un libro inzh-Hanse in inglese apre il testo semplificato, non quello inglese. Un link senzalangapre l’openLocaledel pacchetto quando ne indica uno, altrimenti l’edizione nella lingua dell’interfaccia. Il capitolo e la pagina di un link si applicano all’edizione che apre, e il frammento indica allora quell’edizione con il suo tag (lang=zh-TW&chapter=28diventalang=zh-Hant&chapter=28).
Interruzioni dei titoli salvate da postext 1.4 o precedenti. Fino a postext 1.4, una configurazione con un oggetto headings impaginava i titoli di livello 1 senza interruzione di pagina a meno che non impostasse esplicitamente l’interruttore Interruzione prima dell’H1 (e il salvataggio eliminava un’interruzione dell’H1 disattivata), un’interruzione parziale dell’H1 prendeva il campo mancante dal valore predefinito senza interruzione, e l’interruzione di uno stile di titolo faceva lo stesso invece di fondersi con quella del suo livello. Ora il motore mantiene il valore predefinito di ogni livello (l’H1 si apre su un recto nuovo, always-odd) e vi fonde un’interruzione parziale. Perché un libro salvato allora conservi le pagine che aveva, la Sandbox scrive esplicitamente quelle interruzioni quando legge un record di progetto anteriore alla versione 3 o una configurazione di lavoro senza versione: enabled: false sull’H1 dove l’interruzione era disattivata, e parity: 'any' accanto a un enabled: true che non indicava una parità, sull’H1 e sugli stili di titolo. Il pannello Grafica mostra allora l’interruzione con cui sono state impaginate le pagine. Da postext 1.5 anche i file registrano la versione: un file .postext il cui manifest non ha configVersion, e un postext-config.json senza di essa, sono stati scritti da postext 1.4 o precedenti, e vengono letti allo stesso modo quando si importano o si aprono (vedi Pacchetti scritti da postext 1.4 o precedenti).
Dimensione delle formule salvata prima di postext 1.5. Fino a postext 1.4 ogni formula usciva 1,131 volte più grande di quanto indicasse la sua Scala del corpo (vedi Dimensione delle formule). Perché un libro salvato allora conservi le sue pagine, la Sandbox fissa quella dimensione quando legge un record di progetto anteriore alla versione 4, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 4, o un postext-config.json esportato prima di essa: la Scala del corpo diventa la scala salvata × 1,1312 e un margine delle formule in evidenza espresso in em viene diviso per 1,1312, così le formule e lo spazio attorno a esse restano come erano. Un libro i cui capitoli non contengono $ resta com’era (un postext-config.json non contiene capitoli, quindi la sua dimensione si fissa ogni volta che le formule sono attive), e così uno con Attiva LaTeX disattivato. La sezione Formule mostra allora i valori con cui è impaginato il libro; reimposta Scala del corpo, Margine superiore del display e Margine inferiore del display per portarlo alla dimensione attuale. Il fissaggio si scrive una sola volta: il record si salva di nuovo con la versione attuale e da allora si legge così com’è. Un preset applicato allora e mai modificato conta ancora come intatto (la Sandbox lo confronta con i suoi valori fissati, e questo vale anche per il fissaggio delle interruzioni dei titoli): ricaricarlo o cambiare libro non chiede di scartare modifiche che non hai mai fatto, e una versione più recente del preset, come quella della guida integrata, lo sostituisce comunque.
Figure in linea salvate prima di postext 1.5. Fino a postext 1.4 una figura o una tabella composta in linea nel testo (posizionamento Nel testo (qui)) conservava una riga di spazio solo sopra di sé: il testo successivo riprendeva alla riga successiva della griglia, per quanto vicina fosse. Ora conserva la stessa riga anche sotto (Colonne → Spazio attorno alle figure in linea, Sopra e sotto). Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Spazio attorno alle figure in linea su Solo sopra quando legge un record di progetto anteriore alla versione 5, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 5, o un postext-config.json esportato prima di essa, quando una riga del libro incorpora una risorsa: ::resource{id="…"} da solo sulla propria riga, non una menzione nel testo. Un postext-config.json non contiene capitoli, quindi lì si imposta ogni volta che il file è più vecchio. Scegli Sopra e sotto per impaginare il libro con la spaziatura attuale.
Figure in linea nei riquadri salvate prima di postext 1.5. Fino a postext 1.4 una figura o una tabella composta in linea dentro un riquadro stava a contatto con il testo del riquadro attorno a essa. Ora conserva una riga del testo del riquadro sopra di sé, e anche sotto con Sopra e sotto (Colonne → Spazio attorno alle figure nei riquadri). Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva Spazio attorno alle figure nei riquadri quando legge un record di progetto anteriore alla versione 6, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 6, o un postext-config.json esportato prima di essa, quando un riquadro del libro incorpora una risorsa su una riga propria. Un postext-config.json non contiene capitoli, quindi lì si disattiva ogni volta che il file è più vecchio. Attivalo per impaginare il libro con la spaziatura attuale.
Marche nei titoli e capilettera salvati prima di postext 1.5. Fino a postext 1.4 un titolo stampava le parole delle sue marche *italic*, **bold** e simili nel proprio stile semplice, e un capolettera senza dimensione era alto quanto tutte le righe che occupa, con la sommità al di sopra della prima riga. Ora un titolo applica le sue marche (Titoli → Stili in linea nei titoli), e la sommità di un capolettera è allineata alle maiuscole della prima riga. Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva Stili in linea nei titoli quando legge un record di progetto anteriore alla versione 6, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 6, o un postext-config.json esportato prima di essa, quando un titolo del libro contiene una marca (un postext-config.json non contiene capitoli, quindi lì si disattiva ogni volta che il file è più vecchio); e scrive nella sua Corpo del capolettera la dimensione con cui era composto ciascun capolettera. Attiva l’interruttore, o cancella la dimensione, per comporre il libro con le regole attuali. Tieni presente che un titolo in corsivo il cui intero testo è marcato *…* esce allora in tondo.
Elenchi dopo i due punti salvati prima di postext 1.5. Fino a postext 1.4 Tieni i due punti con l’elenco considerava sufficiente per l’elenco una riga di spazio sotto la riga che termina con i due punti, quindi un primo elemento di due righe che le regole su orfane e vedove tengono unito passava alla colonna successiva e lasciava sola al piede la riga con i due punti. Ora chiede lo spazio di cui ha bisogno il primo elemento (Tipografia → Testo corrente → Vedove, orfane e righe corte → Spazio sotto i due punti, Quanto serve alla prima voce). Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Spazio sotto i due punti su Una riga (1.4) quando legge un record di progetto anteriore alla versione 6, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 6, o un postext-config.json esportato prima di essa, quando un elenco del libro segue una riga che termina con i due punti. Un postext-config.json non contiene capitoli, quindi lì si imposta ogni volta che il file è più vecchio. Scegli Quanto serve alla prima voce per impaginare il libro con la regola attuale.
Tagli dei riquadri salvati prima di postext 1.5. Fino a postext 1.4 un riquadro che si divideva all’interno di un paragrafo o di un elemento di elenco poteva lasciarne una sola riga su un lato, purché ogni lato del riquadro conservasse le sue Righe mantenute su ogni lato di una divisione. Ora un taglio lascia almeno due righe del paragrafo o dell’elemento su ogni lato (Colonne → Righe di un paragrafo a un taglio di riquadro). Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Righe di un paragrafo a un taglio di riquadro a 1 quando legge un record di progetto anteriore alla versione 6, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 6, o un postext-config.json esportato prima di essa, quando un capitolo del libro apre un :::callout. Un postext-config.json non contiene capitoli, quindi lì si imposta ogni volta che il file è più vecchio. Riportalo a 2 per impaginare il libro con la regola attuale.
Lineette e testo non giustificato salvati prima di postext 1.5. Fino a postext 1.4 la divisione ottimale in righe non terminava mai una riga dopo una lineetta lunga o media composta senza spazi tra due parole (say—that’s), e il testo non giustificato si componeva sempre riga per riga, riempiendo ciascuna prima della successiva. Ora una riga può terminare dopo una lineetta del genere (Tipografia → Testo corrente → Paragrafi → A capo dopo le lineette), e anche il testo corrente non giustificato si divide in righe con Knuth-Plass (Divisione ottimale del testo in bandiera). Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva A capo dopo le lineette quando legge un record di progetto anteriore alla versione 7, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 7, o un postext-config.json esportato prima di essa, quando un capitolo del libro contiene una lineetta del genere (un postext-config.json non contiene capitoli, quindi lì si disattiva ogni volta che il file è più vecchio); e disattiva Divisione ottimale del testo in bandiera quando la configurazione compone non giustificata una parte del testo corrente: il testo corrente stesso, uno stile di paragrafo, il corpo di un riquadro, il corpo di una parte o il corpo di uno stile di sezione. Attivali per impaginare il libro con le regole attuali.
Divisioni sotto un titolo salvate prima di postext 1.5. Fino a postext 1.4 il paragrafo sotto un titolo al piede di una colonna conservava lì tutte le righe che ci stavano, per quanto poche ne passassero alla colonna successiva. Ora rispetta anche il minimo per le orfane, altrimenti il titolo passa avanti insieme al paragrafo (Titoli e indice → Titoli → Dividi sotto un titolo). Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Dividi sotto un titolo su Riempi la colonna quando legge un record di progetto anteriore alla versione 8, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 8, o un postext-config.json esportato prima di essa, quando un capitolo del libro ha un titolo (un postext-config.json non contiene capitoli, quindi lì si imposta ogni volta che il file è più vecchio) e la configurazione mantiene attivi Tieni con il successivo e il controllo delle orfane. Impostalo su Secondo le regole per impaginare il libro con la regola attuale.
Contenitori di paragrafi salvati prima di postext 1.5. Fino a postext 1.4 lo spazio sotto un contenitore :::paragraphs era quello proprio dello stile (il maggiore tra il suo spazio tra paragrafi e il suo margine inferiore), applicato sotto l’ultima riga prima che il testo tornasse ad agganciarsi alla griglia; lo spazio che un titolo mantiene sopra di sé si aggiungeva sotto, e la spaziatura tra paragrafi del testo corrente non contava, quindi un titolo stava più lontano da una bibliografia che da un paragrafo, e il paragrafo dopo un gruppo di voci compatte stava più vicino a esso che a qualsiasi altro. Ora lo spazio si fonde con quello proprio del blocco successivo ed è almeno pari alla spaziatura tra paragrafi del testo (Tipografia → Stili di paragrafo → Spazio sotto un contenitore, Fondi). Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Spazio sotto un contenitore su Somma (1.4) quando legge un record di progetto anteriore alla versione 8, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 8, o un postext-config.json esportato prima di essa, quando la configurazione dichiara uno stile di paragrafo e un capitolo del libro apre un contenitore :::paragraphs. Un postext-config.json non contiene capitoli, quindi lì si imposta ogni volta che il file è più vecchio e dichiara uno stile di paragrafo. Scegli Fondi per impaginare il libro con la regola attuale.
Parole composte salvate prima di postext 1.5. Fino a postext 1.4 la divisione ottimale in righe non terminava mai una riga giustificata dopo il trattino di una parola composta (well-known) in un paragrafo senza grassetto, corsivo o altra formattazione, mentre lo faceva in uno con formattazione. Ora una riga può terminare lì in ogni paragrafo (Tipografia → Testo corrente → Paragrafi → A capo dopo i trattini). Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva A capo dopo i trattini quando legge un record di progetto anteriore alla versione 8, una configurazione di lavoro salvata con un contrassegno più vecchio (o senza), un file .postext il cui manifest è anteriore a configVersion: 8, o un postext-config.json esportato prima di essa, quando un capitolo del libro contiene un trattino tra due lettere (un postext-config.json non contiene capitoli, quindi lì si disattiva ogni volta che il file è più vecchio). Attivalo per impaginare il libro con la regola attuale.
Poesie e stili sporgenti salvati prima di postext 1.23. Fino a postext 1.22 una poesia :::verse le cui righe non contenevano || si componeva come emistichi singoli, ogni riga centrata, e il rientro sporgente di uno stile di paragrafo sostituiva il suo rientro della prima riga. Ora una poesia del genere si compone verso per verso (Tipografia → Testo corrente → Versi → Poesie senza separatore, Riga per riga), e uno stile che imposta entrambi i rientri inizia la prima riga al rientro della prima riga. Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Poesie senza separatore su Come emistichi (1.22) quando legge un record di progetto anteriore alla versione 9, una configurazione di lavoro o un’esportazione postext-config.json con un contrassegno inferiore a 9 i cui capitoli contengono una poesia del genere, ed elimina il rientro della prima riga di uno stile che è anche sporgente. Disattiva inoltre A capo forzati (Tipografia → Testo corrente → Paragrafi) quando i capitoli di un record del genere terminano una riga con una barra rovesciata o contengono \\ prima di uno spazio, che fino a postext 1.22 si stampava (per un’esportazione postext-config.json, che non contiene capitoli, sempre). E disattiva Recinzioni di codice (Tipografia → Codice) quando i capitoli contengono un recinto ``` o ~~~, le cui righe fino a postext 1.22 si leggevano come Markdown (per un’esportazione, sempre).
Poesie salvate con postext 1.23. In postext 1.23 un verso di una poesia composta verso per verso che fosse anche solo un poco più largo della giustezza andava a capo. Ora stringe gli spazi tra le parole, fino alla spaziatura minima, e resta su una riga quando basta (Tipografia → Testo corrente → Versi → Stringi prima di andare a capo). Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva Stringi prima di andare a capo quando legge un record di progetto, una configurazione di lavoro o un’esportazione postext-config.json con contrassegno 9 o inferiore i cui capitoli compongono una poesia verso per verso (per un’esportazione, che non contiene capitoli, sempre).
Testi del progetto grafico salvati con postext 1.23. Fino a postext 1.23 un elemento di testo di un design di titolo o di una pagina di parte che non impostava alcun comportamento in caso di eccedenza veniva tagliato a una riga con i puntini di sospensione. Ora va a capo su più righe, e Aggiungi testo lascia Eccedenza allo slot. Perché un libro salvato allora conservi le sue pagine, la Sandbox imposta Eccedenza su Puntini alla fine (…) su ciascuno di quegli elementi quando legge un record di progetto, una configurazione di lavoro, un file .postext o un’esportazione postext-config.json con contrassegno 9 o inferiore.
Tabelle in linea e colonne salvate con postext 1.24. Fino a postext 1.24 una tabella collocata here che non stava nel resto della sua colonna passava intera alla successiva, un recinto :::columns fuori da un riquadro veniva ignorato, e un riquadro non si tagliava mai all’interno di un gruppo :::columns. Ora la tabella si taglia tra una riga e l’altra e il gruppo compone i suoi blocchi in colonne e prosegue nella colonna o pagina successiva. Perché un libro salvato allora conservi le sue pagine, la Sandbox disattiva Applica alle tabelle nel testo (Tabelle) quando legge un record di progetto, una configurazione di lavoro o un’esportazione postext-config.json con un contrassegno inferiore a 11 i cui capitoli incorporano una risorsa, e Colonne nel testo, e gruppi che si dividono (Colonne) quando contengono un recinto :::columns (per un’esportazione, che non contiene capitoli, sempre).
Questi fissaggi trattengono ciò che ciascuno di quei cambiamenti di regola sposterebbe. La versione 1.5 corregge anche errori di impaginazione, e una correzione non ha fissaggio, quindi un libro salvato può comunque vedere spostarsi una pagina dove si applica una di esse: la fascia di un titolo di capitolo a tutta larghezza senza design, un capolettera in un design di titolo, un paragrafo in un riquadro, un paragrafo lasco che il bilanciamento allarga, un riquadro flottante con un margine più largo di una riga, una testatina centrata o allineata a destra con spaziatura tra lettere, la seconda colonna sotto un’apertura a tutta larghezza, una testatina presa da un titolo diviso dopo un trattino, una parola più larga della sua riga tagliata accanto al proprio trattino, il resto di una parola più larga della sua riga, che ora conserva i propri punti di divisione, l’elemento dopo un elenco annidato in un altro (vedi Dimensione delle formule per l’elenco).
L’archiviazione è condivisa tra le lingue dell’interfaccia. Un documento predefinito intatto passa al Markdown predefinito della lingua corrente e reinserisce le risorse di esempio quando la lingua cambia, così aprire la Sandbox in spagnolo mostra esempi in spagnolo. Qualsiasi modifica dell’utente esclude il documento da questo comportamento. Tutte le anteprime ricavano inoltre una lingua di sillabazione dalla lingua dell’interfaccia quando la configurazione non indica alcuna lingua (né una lingua di sillabazione né locale).
#Esportazione e importazione
Un libro intero viaggia come file .postext: un archivio zip con esattamente la struttura della directory di un pacchetto preset, cioè preset.json, chapters/*.md, resources/* e fonts/* (vedi Formato dei pacchetti preset). L’archivio contiene anche l’impaginazione del libro come layouts.json (il numero di pagine e la numerazione di ogni capitolo, contrassegnati con la versione del motore, la configurazione e le risorse con cui sono stati calcolati), così un libro importato si apre già impaginato e si reimpagina solo ciò che quei contrassegni non garantiscono più. Un pacchetto in più lingue compone ciascuna con la propria configurazione, quindi può contenerne invece una per lingua, layouts.<locale>.json (layouts.zh-Hant.json), letta prima di layouts.json. Il documento attivo esporta l’impaginazione che contiene; un progetto o un preset esportato dalla sua riga porta quella registrata l’ultima volta che è stato il libro di lavoro. Un’immagine di copertina si scrive come thumbnail del manifest, quindi sopravvive al viaggio di andata e ritorno. Il menu Nuovo del pannello Libri (Apri un file .postext…) importa un file come nuovo libro; il menu ⋯ di ogni riga ha il proprio Scarica (.postext), e quello del libro aperto esporta il documento di lavoro. I file scritti da versioni precedenti (un manifest di versione 1 con un solo document.md) si importano come libro di un capitolo. Un libro in una sola lingua conserva le etichette delle figure e delle tabelle di quella lingua qualunque sia la lingua dell’interfaccia: un file spagnolo aperto da /en/sandbox stampa Figura e Tabla a meno che la sua configurazione non indichi altri tipi di risorsa. La lingua è quella indicata dal file o, quando non ne indica alcuna, quella impostata dalla sua configurazione (locale, poi la lingua di sillabazione). L’importazione accetta i file alla radice dell’archivio o sotto un’unica cartella di primo livello (come succede comprimendo la cartella stessa; le voci __MACOSX e i file nascosti vengono ignorati). I font si scrivono come file separati, mai dentro config.customFonts; le varianti .woff vengono saltate con un avviso in entrambe le direzioni, come le risorse di cui mancano i byte. Decomprimi un file esportato in <presets-root>/<dir>/ e aggiungi una voce a index.json per servirlo come preset.
Gli stessi file vengono letti e scritti dal pacchetto postext (openBundle, createBundle, buildBundle; vedi Pacchetti). Un libro esportato qui si apre nel tuo programma, e un libro scritto dal tuo programma si apre qui. Questo fa della Sandbox un luogo in cui esaminare e rifinire ciò che un programma impagina: esportalo dal programma, importalo qui, correggilo con l’anteprima in tempo reale, esportalo di nuovo e ricaricalo nel programma. Anche la skill per agenti consegna i suoi adattamenti come file .postext.
Il testo e il progetto grafico si esportano anche separatamente dalle intestazioni dei pannelli Testo e Grafica.
L’intestazione del pannello Grafica scarica postext-config.json privo dei valori predefiniti:
{
"type": "postext-config",
"version": 1,
"config": { ... }
}L’intestazione del pannello Testo scarica il capitolo attivo come semplice file .md e il suo pulsante Importa sostituisce il capitolo attivo con il contenuto di un file .md. Il pulsante Importa del pannello Grafica apre un selettore di file .json validati rispetto a type e version attesi; i file non validi vengono ignorati senza segnalazione. L’involucro postext-markdown.json e il formato combinato postext-sandbox.json delle versioni precedenti non esistono più.
#Agenti: WebMCP
La Sandbox fornisce a un agente nel browser strumenti propri tramite WebMCP (document.modelContext), così un assistente lavora sul libro stesso invece di fare clic nell’interfaccia. Non c’è nulla da configurare: gli strumenti si registrano mentre la Sandbox è sullo schermo, e il resto di questo sito ne registra alcuni propri su ogni pagina (cercare nella documentazione e nel Ricettario, leggere una pagina come Markdown, aprire una ricetta nella Sandbox, cambiare lingua e tema).
Sono pensati per il ciclo che un grafico segue a occhio: cambiare qualcosa, guardare la pagina, cambiare di nuovo.
- Vedere:
sandbox_get_state,sandbox_render_page,sandbox_inspect_pages,sandbox_inspect_point,sandbox_inspect_comic,sandbox_get_warnings: il libro con i suoi capitoli e i suoi intervalli di pagine, e ciò che succede nell’interfaccia (la selezione, un avviso, una domanda in attesa di risposta); qualsiasi pagina come JPEG, PNG o WebP alla larghezza richiesta, o un suo ritaglio per guardare da vicino, con l’anteprima di stampa su richiesta; la stessa pagina come dati (i suoi blocchi e le sue righe, quanto è piena ogni colonna, quali righe sono lasche o terminano con una parola divisa); ciò che si trova in un punto di una pagina (la riga del sorgente, un link e dove porta, una cella di una tabella); le vignette e le nuvolette di una pagina a fumetti; e ciò che le verifiche trovano in qualsiasi capitolo o nell’intero libro, qualunque siano il capitolo e il visualizzatore sullo schermo. - Cambiare:
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: qualsiasi impostazione tramite il suo percorso (bodyText.fontSize,page.margins.top,headings.levels[level=2].fontSize,header.elements[id=titleOdd].italic), il testo con trova e sostituisci esatto, con annullamento, capitoli, immagini, disegni SVG, video, tabelle con la loro formattazione, font, le vignette e le nuvolette di un fumetto, e un documento Word importato con i suoi stili mappati. Una modifica risponde con ogni valore prima e dopo e con le pagine a cui è arrivato ogni capitolo; un’impostazione dice anche come l’ha risolta il motore e quali altre impostazioni l’hanno seguita, e un valore che il motore non riesce a risolvere viene rifiutato senza cambiare nulla. - Mostrare:
sandbox_set_view,sandbox_go_to_page,sandbox_run_viewer: la scheda del visualizzatore, il pannello laterale, capitolo o libro intero, zoom, adattamento e pagine affiancate, la dimensione del testo per il lettore, l’anteprima di stampa, le guide disegnate sulle pagine, la lente d’ingrandimento di Folio e la pagina sullo schermo (per numero, per passaggio, per ancora o per voce dell’indice di un EPUB); riscrivere il PDF o l’EPUB, stampare, e riprodurre un video su una pagina. - Conservare:
sandbox_list_books,sandbox_open_book,sandbox_save_book,sandbox_import_book,sandbox_export,sandbox_word_templates,sandbox_answer: gli esempi e i tuoi progetti con le loro copertine, un file.postextimportato, il libro (o uno che non è aperto) scritto in PDF, EPUB,.postext, Word, Markdown o le sue impostazioni come JSON, i modelli dell’importazione da Word, e la risposta a una domanda posta dalla Sandbox.
Uno strumento che modifica il libro attende l’impaginazione, quindi l’immagine successiva è sempre delle pagine nuove; una pagina viene impaginata e disegnata per lo strumento qualunque sia la scheda sullo schermo. Ciò che non si può annullare (eliminare un capitolo, una risorsa o un progetto, ripristinare l’originale, importare un documento Word sopra il testo, sostituire la tua copia di un libro) è contrassegnato come operazione con conseguenze, così il browser può chiedertelo prima. Come per l’interfaccia, tutto resta nel tuo browser: gli strumenti non raggiungono nulla che la Sandbox stessa non raggiunga.
WebMCP è una bozza: Chrome lo offre come origin trial, e dietro chrome://flags/#enable-webmcp-testing. In un browser che non lo supporta gli stessi strumenti si trovano su window.postextWebMcp (listTools(), executeTool(name, args)), per un agente in grado di eseguire script nella pagina. Quando incorpori la Sandbox, webmcp={false} esclude gli strumenti (vedi Props).
La pagina WebMCP mostra che cosa si può chiedere a un agente e come si chiama ogni strumento, con esempi.
#Uso autonomo
La Sandbox è disponibile come pacchetto React autonomo (postext-sandbox) che si può incorporare in qualsiasi applicazione 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 | Tipo | Descrizione |
|---|---|---|
initialMarkdown | string | Contenuto Markdown iniziale |
initialConfig | PostextConfig | Configurazione di impaginazione iniziale |
className | string | Classe CSS per il contenitore radice |
labels | Partial<SandboxLabels> | Sostituzioni delle etichette dell’interfaccia, fuse sopra i valori predefiniti integrati in inglese: passa le etichette tradotte insieme a locale quando incorpori la Sandbox in un’altra lingua |
locale | string | Lingua dell’interfaccia (predefinita 'en'). Seleziona i tipi di risorsa predefiniti localizzati e le risorse di esempio (un preset o un file in una sola lingua riceve i tipi di risorsa della propria lingua), e fornisce la lingua di sillabazione che le anteprime usano quando non ne è configurata nessuna |
presetSources | { url: string; private?: boolean }[] | Sorgenti di preset remote, provate in ordine dopo il preset integrato. Ogni url è un URL di base che serve un index.json (vedi Formato dei pacchetti preset); private: true contrassegna i preset della sorgente come privati e rende il loro flag default idoneo al caricamento automatico. Le sorgenti che non rispondono semplicemente non contribuiscono nulla |
hashBundles | Record<string, (id: string, lang: string | null) => string | string[] | null> | Libri collegati da una chiave di frammento propria dell’host: { recipe: (slug, lang) => fa sì che #recipe=<slug>&lang=es apra quel pacchetto. Restituisci l’URL di un file .postext sull’origine della pagina stessa, più URL da provare in ordine (vince il primo che risponde), o null per un id che l’host non serve. La prima visita importa il file come progetto registrato con il link (recipe:<slug>:<lang>); una visita successiva chiede se aprire quel progetto, con le modifiche, o sostituirlo con il file così come è servito ora. Il frammento viene allora riscritto in #project=<id> |
onConfigChange | (config) => void | Callback quando cambia la configurazione |
onMarkdownChange | (markdown) => void | Callback quando cambia il Markdown |
webmcp | boolean | Registra gli strumenti WebMCP della Sandbox per gli agenti nel browser mentre è montata. Predefinito true |
themeToggle | ReactNode | Componente personalizzato per cambiare tema, inserito in fondo alla barra delle attività |
languageSwitcher | ReactNode | Componente personalizzato per cambiare lingua, inserito in fondo alla barra delle attività |
homeUrl | string | Se impostato, mostra in cima alla barra delle attività un logo che rimanda a questo URL |
homeLink | ReactNode | Nodo personalizzato per lo spazio del logo, che sostituisce il link predefinito con il logo (ha la precedenza su homeUrl) |
#Requisiti CSS
Il pacchetto usa classi di utilità di Tailwind CSS che fanno riferimento a proprietà personalizzate CSS. L’applicazione host deve fornire queste variabili:
--background,--foreground: colori di base--surface: colore delle superfici in rilievo;--surface-2: righe al passaggio del mouse e opzioni evidenziate (ripiega su--background)--slate: colore del testo attenuato--rule: colore di bordi e separatori;--rule-strong: filetto più marcato per i controlli al passaggio del mouse (ripiega su--slate)--brand: colore d’accento, per l’indicatore del pannello attivo, gli anelli di focus, gli interruttori e le scelte selezionate--brand-hover: colore d’accento al passaggio del mouse--brand-soft: riempimento d’accento traslucido dietro le scelte selezionate (ripiega su--surface)--brand-contrast: pomello di un interruttore attivo (ripiega su--background)--destructive: colore delle azioni distruttive e degli errori--accent-blue: colore dei link e d’accento--font-sans: famiglia di caratteri dell’interfaccia--font-mono: famiglia di caratteri monospaziata (per l’editor di codice)--font-display,--brand-blue,--brand-gilt: carattere e colori facoltativi del logo predefinito nella barra delle attività (ripiegano su Georgia,#2b4acbe#d8a21a)
Il sito imposta --brand sull’oro nel tema scuro e sul blu in quello chiaro. Le versioni precedenti leggevano --gilt e --gilt-hover; la Sandbox non li usa più.
I popover, i menu e i tooltip vengono resi in un portal su document.body, quindi definisci le variabili su :root (o body), non solo sull’elemento che avvolge la Sandbox. La build Tailwind dell’host deve analizzare i sorgenti del pacchetto (@source "…/postext-sandbox/src/**/*.tsx" in Tailwind 4) perché vengano generate le classi di utilità che usa.
#Formato dei pacchetti preset
Appendice. Una sorgente di preset è una directory (servita via HTTP) la cui radice contiene un index.json che elenca le directory dei preset; ogni directory contiene un manifesto preset.json più i file Markdown, delle risorse e dei font a cui fa riferimento. Gli strumenti scripts/presets/ del repository generano pacchetti esattamente in questa forma, e un file .postext esportato dalla Sandbox è una di queste directory compressa in zip (senza 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" }
]
}
]
}Note:
idinpreset.jsondeve corrispondere alla voce diindex.json;description,localeedefaultnel manifesto prevalgono sui valori dell’indice una volta caricato il preset, come i campi della vetrinalocales,openLocale,license,creditsetags.openLocale, una dellelocales, è la lingua in cui il libro si apre quando un link o un clic non ne chiedono nessuna (anche lo scaffale della home page punta lì): impostalo quando l’originale non è nella lingua del lettore, come fa la vetrina di 紅樓夢 conzh-Hant, così la sua traduzione inglese non si apre per ogni lettore anglofono. Senza, decide la lingua dell’interfaccia. Il selettore mostra come etichette ogni lingua dilocales(olocale) e la licenza, i crediti sotto la descrizione, ethumbnail(una piccola immagine di pagina, con percorso relativo alla directory del preset) al posto della colonna con il segno di spunta della riga; un libro copiato dal preset (Crea una mia copia) la conserva come copertina. I preset pubblici della vetrina inapps/web/public/presets/usano tutti i campi e contengono unCREDITS.mdcon la licenza e la fonte di ogni testo e immagine.configVersion(facoltativo) indica le regole di configurazione per cui sono scritteconfige le configurazionilocalized. Ogni generatore da postext 1.5 in poi lo imposta a 8. Un manifesto senza questo campo è stato scritto da postext 1.4 o precedente, e le sue interruzioni dei titoli, la dimensione delle formule, lo spazio intorno alle figure in linea (nel testo e nei riquadri), le marche nei titoli, i capilettera, lo spazio sotto una riga che termina con i due punti, i tagli dei riquadri, gli a capo dopo le lineette e dopo i trattini delle parole composte, il testo non giustificato, le divisioni sotto un titolo e lo spazio sotto i contenitori di paragrafi vengono letti come li impaginava la 1.4 (vedi Interruzioni dei titoli salvate da postext 1.4 o precedenti, Dimensione delle formule salvata prima di postext 1.5, Figure in linea salvate prima di postext 1.5, Figure in linea nei riquadri salvate prima di postext 1.5, Marche nei titoli e capilettera salvati prima di postext 1.5, Elenchi dopo i due punti salvati prima di postext 1.5, Tagli dei riquadri salvati prima di postext 1.5, Lineette e testo non giustificato salvati prima di postext 1.5, Parole composte salvate prima di postext 1.5, Divisioni sotto un titolo salvate prima di postext 1.5 e Contenitori di paragrafi salvati prima di postext 1.5 in Persistenza); uno marcato da 3 a 7 (una pre-release della 1.5) riceve solo i vincoli delle regole successive. Con 3 sono la dimensione delle formule, lo spazio in linea, i cinque vincoli delle regole 6, i due delle regole 7 e i tre delle regole 8; con 4, lo spazio in linea e i vincoli delle regole 6, 7 e 8; con 5, i vincoli delle regole 6, 7 e 8; con 6, i vincoli delle regole 7 e 8; con 7, solo i vincoli delle regole 8. Impostalo a 8 quando scrivi a mano un manifesto per le regole attuali.view(facoltativo) dice come la Sandbox apre il pacchetto:{ "canvasScope": "book" }impagina l’intero libro sul canvas (vedi Libri e capitoli); se manca, il canvas mostra un capitolo alla volta. I libri esportati lo contengono quando è impostato. Un libro di oltre 200 capitoli si apre un capitolo alla volta, qualunque cosa chieda.start(facoltativo) dice dove comincia il libro quando il pacchetto ne contiene una parte di uno più lungo:{ "pageIndexOffset": 57, "pageNumbering": { "startAt": 58 }, "headings": { "h1": 3 } }lo apre a pagina 58, una pagina pari, nel capitolo 4. È lacontinuationdel primo capitolo (buildDocument); la Sandbox impagina il libro da lì, la conserva con il libro quando viene salvato come progetto e la riscrive all’esportazione. Nessun pannello la modifica. Una vocelocalizedpuò avere unstartproprio per la sua edizione.localized(facoltativo) contiene le sostituzioni per lingua di un pacchetto bilingue:{ "es": { "config": { … }, "resources": [ { "id": "fig-1", "caption": "…", "note": "…", "altText": "…" } ] } }. Le sostituzioni della lingua da cui sono stati scelti i capitoli si applicano sopra laconfigcondivisa (le chiavi di primo livello vengono sostituite per intero: di solitoresourceTypescon i prefissi delle didascalie tradotti) e sopra leresources(didascalia, nota, testo alternativo e celle di tabella uniti per id); una lingua senza voce conserva la formulazione condivisa. Una voce può anche avere unaviewpropria, che per quell’edizione si applica sopra quella condivisa: 紅樓夢 apre le edizioni cinesi sul libro intero e quella inglese di Joly, molto più lenta da disegnare per intero, un capitolo alla volta ("en": { "view": { "canvasScope": "chapter" } }).chapters(versione 2) è un elenco di{ title, file }nell’ordine del libro, o una mappa lingua → elenco;markdown(versione 1) è un nome di file o una mappa lingua → file. In entrambi i casi la Sandbox sceglie la voce che corrisponde alla lingua richiesta (tag esatto, a prescindere da maiuscole e minuscole; poi stessa lingua e stessa scrittura, cosìzh-TWleggezh-Hantprima dizh-Hans; poi stessa lingua nell’altra scrittura, così un lettorezh-TWdi un pacchetto con chiavezhsemplice riceve il cinese; poi lalocalepropria del preset, poi la prima voce), e vengono letti solo i file dei capitoli di quella lingua. Untitledi capitolo vuoto viene ricavato dal primo titolo di livello 1 del file. La Sandbox scrive sempre la versione 2.width/heightsono facoltativi per le risorsesvgebitmap: quando mancano vengono letti dal file al caricamento. Una bitmap può anche avereresolution(i suoi ppi alla sua dimensione naturale di stampa) efileResolution(quella dichiarata dal file, letta al caricamento quando la configurazione impostalayout.bitmapResolution: 'file').pdfFile(solo risorse svg) punta a un PDF di una sola pagina che contiene la stessa figura in forma vettoriale: di solito l’esportazione originale da Illustrator o in PDF da cui è stato ricavato l’SVG. L’esportazione in PDF incorpora quella pagina così com’è (font, sfumature e spazi colore intatti) al posto dell’SVG; le anteprime canvas e HTML continuano a usare l’SVG. Viene ignorato in modalità a inchiostro singolo, il cui passaggio di ricolorazione opera solo sul markup SVG, e un file mancante fa cadere solo il master, mai la figura. Modificare la sorgente SVG nel dettaglio della risorsa stacca il master (era stato fatto per la sorgente com’era), quindi da quel momento l’esportazione in PDF segue l’SVG modificato; ripristina l’originale (Ripristina l’originale… nel pannello Libri) per riaverlo. Gli SVG senza master vengono emessi come tracciati vettoriali quando restano nel sottoinsieme supportato dal backend PDF (forme di base, tracciati, gruppi,use, tracciati di ritaglio, riempimenti e contorni a tinta piatta, opacità e trattitext/tspancomposti nei font che il documento può caricare: prima i font personalizzati, poi le famiglie ospitate da Google) e rasterizzati a 600 dpi negli altri casi.- Il
textSVG viene disegnato ovunque nei font del libro: le anteprime e l’EPUB incorporano nell’SVG, prima di mostrarlo, i caratteri che il suo testo nomina (un<img>non vede i font della pagina), le famiglie personalizzate come sono state caricate e le famiglie Google come i file Fontsource che contengono i caratteri necessari, e l’esportazione in PDF compone i tratti come testo vero e selezionabile negli stessi caratteri incorporati. Indica la famiglia infont-familyesattamente come compare in Font. Una risorsa può rinunciarvi con"inlineFonts": falsenella sua voce del manifesto (svg.inlineFonts). - L’editor della sorgente SVG ti lascia scrivere solo dentro i nodi di testo (evidenziati), così una figura non si può rompere per sbaglio; il pulsante con il lucchetto nella sua intestazione apre l’intera sorgente (coordinate, colori, struttura), e richiuderlo analizza di nuovo i nodi di testo.
table.modelè unTableModeldi Postext:rowsè un array di celle per righe (content, e facoltativamentecolSpan,rowSpan,isHeader,align,verticalAlign),headerRowCountil numero di righe d’intestazione iniziali, ecolumnWidthsun array facoltativo di pesi relativi delle colonne.table.styleIdindica facoltativamente uno deitableStylesdella configurazione.- I file dei font sono conservati in IndexedDB con id ricavati dall’id del preset e dal percorso del file, e le famiglie vengono aggiunte a
config.customFontsquando si applica il preset; unindex.jsonmancante o malformato non produce preset invece di un errore. <preset-dir>/fingerprint.jsonè facoltativo e, nella route di sviluppo, virtuale: quando il file non esiste,GETrisponde{ "fingerprint": "<sha1 hex>", "files": <n> }calcolato dai metadati dei file della directory (percorso relativo, data di modifica e dimensione di ogni file fino a quattro livelli di profondità, saltando i file nascosti enode_modules), mai dal loro contenuto, conCache-Control: no-store. La Sandbox lo interroga periodicamente per seguire le modifiche al pacchetto (vedi Pannello Libri). Un host statico può servire un verofingerprint.jsoncon la stessa forma, o nessuno, e in quel caso i suoi preset non vengono seguiti.
#Prossimi sviluppi
Queste funzioni sono previste per le prossime versioni:
- Modifica collaborativa: modificare un libro insieme da più browser