Capítol 5 · Part II · L'ofici
Configuració: text i encapçalaments
La tipografia del text de cos, la partició de mots i l'idioma del document; els encapçalaments, les llistes i les matemàtiques
En poques paraules
Aquesta pàgina reuneix els paràmetres de les paraules de la pàgina. Tries la tipografia, el cos i l'interlineat del text principal, i com es parteixen els mots al final de la línia. Li dius a Postext en quin idioma està escrit el llibre. Decideixes l'aspecte de cada nivell de títol i com es dibuixen les llistes amb pics i les numerades. L'última secció fixa la mida i el color de les fórmules matemàtiques.
#Text de cos
La propietat bodyText controla la tipografia de tot el text de paràgraf.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
fontFamily | string | 'EB Garamond' | Família tipogràfica per al cos de text. Qualsevol font de Google Fonts, del sistema, o declarada com a font personalitzada. Una sola família, no una llista de fonts CSS (vegeu més avall). |
fontSize | Dimension | 8 pt | Mida de font base per al cos de text. |
lineHeight | Dimension | 1.5 em | Espaiat vertical entre línies. Les unitats relatives (em, rem) s'escalen amb la mida de font. |
paragraphSpacing | boolean | false | Quan està activat, insereix una línia en blanc (igual al lineHeight) entre paràgrafs consecutius, com fan algunes editorials. |
color | ColorValue | #000000 | Color del text. |
boldColor | ColorValue | Color principal (#295AA3) | Color aplicat als fragments en negreta. Es resol contra l'entrada main-color de la paleta per defecte, de manera que canviar aquest color retinta tots els fragments en negreta del document. |
italicColor | ColorValue | Color principal (#295AA3) | Color aplicat als fragments en cursiva. Mateix enllaç a la paleta que boldColor. |
referenceColor | ColorValue | Color principal (#295AA3) | Color aplicat a les etiquetes de :ref en línia (referències a recursos). Mateix enllaç a la paleta que boldColor. Segueix la paleta des de postext 1.5; fins a la 1.4 es quedava en #295AA3 fos quin fos el color principal. |
referenceBold | boolean | true | Renderitzar les etiquetes de :ref en línia amb la font en negreta. Una referència conserva l'èmfasi del text que l'envolta (dins de … continua en negreta cursiva amb qualsevol valor); aquesta opció només hi afegeix la negreta. |
referenceItalic | boolean | false | Renderitzar les etiquetes de :ref en línia en cursiva. Una referència dins de text en cursiva continua en cursiva amb qualsevol valor. |
emphasis | 'auto' | 'italic' | 'bold' | 'color' | 'overline' | 'auto' | Com es compon …: en cursiva, en la negreta i boldColor, en rodona amb italicColor, o en rodona amb una ratlla damunt de les paraules. 'auto' és 'bold' en un document escrit en alfabet àrab i 'italic' en qualsevol altre. Vegeu Text àrab. |
tashkil | 'keep' | 'strip' | 'strip-vowels' | 'keep' | Signes vocàlics de l'àrab: tal com estan escrits, tots suprimits, o suprimits llevat de la shadda. Vegeu Text àrab. |
textAlign | 'left' | 'justify' | 'start' | 'end' | 'justify' | Alineació del text. 'left' (o 'start') és el costat per on comença la línia: la dreta d'un paràgraf de dreta a esquerra (vegeu Direcció del text). El text justificat distribueix l'espaiat al llarg de cada línia per obtenir vores uniformes. Les últimes línies dels paràgrafs justificats es componen en bandera, a la seva amplada natural — llevat de quan Knuth-Plass ha acceptat una línia final sobreomplerta confiant en la compressió de la cola (glue): en aquest cas els espais entre paraules es comprimeixen perquè la línia encaixi exactament en la mesura (semàntica de glue-setting de TeX, aplicada de manera idèntica als backends canvas, HTML i PDF). |
fontWeight | number | 400 | Pes per al text normal (100–900). |
boldFontWeight | number | 700 | Pes per al text en negreta/strong (100–900). |
hyphenation | HyphenationConfig | activada, 'en-us' | Configuració de la partició de mots automàtica. Vegeu més avall. |
firstLineIndent | Dimension | 1.5em | Sagnat aplicat a la primera línia de cada paràgraf (o a totes les línies excepte la primera quan el sagnat francès està activat). |
hangingIndent | boolean | false | Quan està activat, el sagnat s'aplica a totes les línies excepte la primera (sagnat francès). |
indentAfterHeading | boolean | true | Quan val false, el primer paràgraf immediatament posterior a un encapçalament es compon sense sagnat de primera línia — convenció tipogràfica habitual en publicacions científiques i en molts estils editorials. El mateix val per a un paràgraf just després d'una línia :::space. Un requadre que surt del text entre tots dos —a la columna lateral (span: 'side'), flotat al cap o al peu d'una pàgina, o fix— i una figura flotant no compten: a la seva columna, el paràgraf segueix l'encapçalament i es compon sense sagnat. Un requadre compost en el text (placement: 'here') sí que compta, i el paràgraf que el segueix porta sagnat. No té efecte quan hangingIndent està activat. |
maxWordSpacing | number | 2 | Límit superior de l'espaiat entre paraules en text justificat, expressat com a multiplicador de l'amplada de l'espai normal. Knuth-Plass hi manté totes les línies que el paràgraf permet, i abans parteix una paraula o reparteix l'excés d'espai entre les línies veïnes; una línia que cap conjunt de talls no deixa dins del límit el supera, i la que passa de 3 vegades l'espai normal es compon en bandera. Les línies que superen aquesta proporció es consideren "fluixes": vegeu Línies que l'algorisme no pot omplir, i maxJustifyTracking perquè prenguin una mica de tracking en lloc seu. |
minWordSpacing | number | 0.6 | Límit inferior de l'espaiat entre paraules en text justificat, com a multiplicador de l'amplada de l'espai normal. |
maxJustifyTracking | number | 0 | Tracking màxim que pot prendre una línia justificada, en mil·lèsimes d'em en un sentit o en l'altre (la unitat d'InDesign: 10 = 0,01 em per caràcter), quan només amb els seus espais entre paraules s'estiraria més enllà de maxWordSpacing o es comprimiria per sota de minWordSpacing. La part de l'ajust que passa del límit va a les lletres, així que els espais d'una línia fluixa tornen a maxWordSpacing i una línia atapeïda hi cap amb minWordSpacing. Knuth-Plass el té en compte en triar els talls, i només a les línies que l'espaiat entre paraules duria més enllà dels límits: les altres, l'última línia d'un paràgraf (llevat que es desbordi), una línia d'una sola paraula i una línia amb un chip no el fan servir. La línia el desa com a letterSpacing, i canvas, HTML i PDF el pinten. Requereix optimalLineBreaking. Amb 0 queda desactivat. Vegeu Tracking com a últim recurs. |
kashida | 'auto' | 'none' | 'auto' en un document en alfabet àrab; si no, 'none' | Justificació amb caixida: una línia justificada de text en alfabet àrab pren el sobrant als espais entre paraules (fins a una quarta part de la seva amplada) i després en caixides, tatweels sencers (U+0640) inserits entre dues lletres enllaçades, mai com a espaiat entre lletres. Knuth-Plass compta l'allargament de cada paraula com a estirament. Mai en paraules llatines, xifres, títols, línies en bandera ni a l'última línia d'un paràgraf. Els tatweels es pinten però queden fora del text pla i del text copiat. Vegeu Caixida en el text àrab. |
kashidaPatterns | 'auto' | 'naskh' | 'simple' | 'nastaliq' | 'auto' | Quins enllaços prenen caixida i en quin ordre: les regles clàssiques del naskh, les prioritats de Microsoft o les regles del naskh adaptades al nastaʿlīq (segons raqim-kashida). 'auto' mira la font del text: cap en un tipus ruqʿa o dīwānī (Aref Ruqaa), regles de nastaʿlīq en un tipus nastaʿlīq, naskh en els altres. |
kashidaPerWord | number | 1 | Màxim d'allargaments en una paraula. |
kashidaMaxLength | number | 0.6 | Allargament màxim en un enllaç, en em; en pren tants tatweels sencers com hi càpiguen. |
optimalLineBreaking | boolean | true | Fer servir el tall òptim de línies Knuth-Plass en lloc del voraç de primer ajust. Produeix un espaiat entre paraules més uniforme en tot el paràgraf. Un paràgraf en xinès, japonès o coreà (vegeu Tipografia de l'Àsia oriental), o amb una paraula més ampla que la columna, es compon igualment línia a línia; un paràgraf llatí que cita unes poques paraules CJK el conserva. El text en bandera també el fa servir amb optimalRagged. Vegeu Partició de mots i justificació. |
optimalRagged | boolean | true | Compon també amb Knuth-Plass el text corregut en bandera: el text de cos, les cites i els elements de llista alineats a l'esquerra, a la dreta o centrats, i els estils de paràgraf, els cossos de requadre i els cossos de les parts i dels estils de secció en bandera. Els espais entre paraules no canvien d'amplada. L'algorisme pondera quant es queda curta cada línia respecte de la mesura (una línia 3 em més curta costa el mateix que una línia justificada amb maxWordSpacing), així que iguala el marge irregular en lloc d'omplir cada línia abans de passar a la següent, i les regles contra les línies curtes (avoidRunts, tightenRunts) i hyphenateAcrossColumns actuen en el text en bandera com en el justificat. Amb hyphenation.ragged, la zona continua decidint quines síl·labes poden acabar una línia (vegeu Text en bandera). Els títols en bandera, els peus, les notes, les cel·les de taula i l'índex de continguts es continuen component línia a línia. Requereix optimalLineBreaking. false compon el text en bandera línia a línia, com fins a postext 1.4; així es llegeixen les configuracions desades abans que posen en bandera algun text corregut (vegeu Paquets escrits per postext 1.4 o anterior). |
breakAfterDashes | boolean | true | Permet que una línia acabi després d'un guió o d'un guió curt posat entre dues paraules sense espais: Madrid–Barcelona, I.—Que trata (un títol de capítol a l'antiga) o, en un text en anglès, say—that’s, també quan la paraula que segueix el guió va en un altre estil (calidad–precio). Knuth-Plass el pren com un espai entre paraules, i la línia acaba al guió sense afegir-hi res. Mai després del guió que obre un incís o un diàleg (—dijo, dijo "—Hola, sagte »—Ich: amb un espai, o un espai i unes cometes, davant del guió; després d'unes cometes que tanquen una paraula, com a «no»—y, l'alemany „nein“—und o el francès « non »—et, la línia sí que pot acabar), davant d'un signe de puntuació (él—,), davant d'unes cometes o un parèntesi (pensaba—» y, dijo—«no», dijo—(no): després d'un guió, unes cometes solen tancar la cita que el guió interromp), dins d'una sèrie de guions ni dins d'un interval de números amb guió curt (1914–1918). false manté els talls de la 1.4: Knuth-Plass mai no talla després d'un guió, i el divisor línia a línia del text amb format o del text en bandera amb partició de mots només entre dues lletres; així es llegeixen les configuracions desades abans el text de les quals té algun d'aquests guions (vegeu Paquets escrits per postext 1.4 o anterior). S'aplica al text corregut, els títols, les llistes, les cites i els requadres. Els peus, les notes, les cel·les de taula i l'índex de continguts conserven els talls de la 1.4, i un paràgraf en bandera sense format compost línia a línia segueix en tots dos casos les regles pròpies de pretext. |
breakAfterHyphens | boolean | true | Permet que una línia acabi després del guionet d'un compost, un guionet entre dues lletres (físico- · química, vencer- · se), en qualsevol paràgraf que talla Knuth-Plass. La línia acaba al guionet i no s'hi afegeix res; el tall costa el mateix que una síl·laba. Mai després d'un guionet al costat d'una xifra o un signe (COVID-19, -5 °C). Un paràgraf justificat sense format en línia només hi talla amb dues lletres a cada costat del guionet, perquè cap línia no acabi en la e- d'e-mail. false manté els talls de la 1.4: un paràgraf justificat sense format en línia mai no hi talla, mentre que el mateix paràgraf amb una paraula en cursiva en qualsevol lloc, un paràgraf en bandera i un de compost línia a línia sí que ho fan; així es llegeixen les configuracions desades abans el text de les quals té algun compost (vegeu Paquets escrits per postext 1.4 o anterior). S'aplica al text corregut, els títols, les llistes, les cites i els requadres. Vegeu Paraules compostes. |
repeatHyphen | boolean | false | Comença també amb un guionet la línia que segueix un tall al guionet d'un compost: léxico- · -semántico, com demanen les normes de la Real Academia Española des del 2010, i vencer- · -se, com demana l'ortografia portuguesa. El guionet repetit es mesura i es pinta amb la seva línia, que l'anota com a repeatedHyphen; el seu plainStart i el seu sourceStart apunten darrere seu, de manera que els enllaços, els titolets i el Sandbox llegeixen la paraula tal com està escrita. El PDF el pinta sota un /ActualText que l'omet, així que el text que es copia o s'extreu del PDF llegeix la paraula una sola vegada. Una adreça web mai no el porta. S'aplica al text corregut, els títols, les llistes, les cites i els requadres; un paràgraf sense format que conté un compost es talla llavors amb el divisor del text amb format. |
hardLineBreaks | boolean | true | Llegeix una barra inversa al final d'una línia del text, i davant d'un espai, com un salt de línia forçat dins d'un paràgraf, una cita o un element de llista (el salt forçat de CommonMark): les paraules següents comencen una línia nova del mateix paràgraf, i la línia anterior es compon amb la seva amplada natural, com una última línia. Una barra inversa al final del paràgraf s'imprimeix, i dos espais al final d'una línia no són un salt (vegeu Format del document › Salts de línia). false conserva la lectura de la 1.22: les barres s'imprimeixen i les línies s'uneixen amb un espai; les configuracions desades abans el text de les quals té una barra així es llegeixen amb aquest valor (vegeu Paquets escrits per postext 1.4 o anterior). Els títols, els peus, les notes i les cel·les de taula es parteixen a en tots dos casos. |
tabStops | TabStop[] | sense fixar | Tabulacions de tots els paràgrafs, elements de llista i cites: on porta un tabulador (:tab, o un caràcter de tabulació al text) les paraules que el segueixen. Un estil de paràgraf o el cos d'un requadre que fixa les seves les substitueix. Sense fixar, un caràcter de tabulació és un espai entre paraules, com fins ara, i un :tab sense cap tabulació on anar també ho és. Vegeu Tabulacions. Des de postext 1.23. |
tabInterval | Dimension | sense fixar | Tabulacions predeterminades a cada interval des de l'inici de la mesura, passada l'última de tabStops. Sense fixar, un tabulador més enllà de l'última tabulació és un espai entre paraules. Des de postext 1.23. |
blockquote | BlockquoteConfig | vegeu a sota | Com es componen les cites de Markdown (> …): color, cursiva i sagnats. Vegeu Cites. |
#Cites
Una cita (les línies que comencen per >) pren la família, el cos, l'interlineat, els pesos, l'alineació i la partició de mots del text de cos. bodyText.blockquote fixa la resta; si no es fixa, una cita es veu com fins a postext 1.4: grisa, en cursiva, amb el sagnat de primera línia del cos i sense sagnat lateral.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
color | ColorValue | #666666 | Color del text. Un color enllaçat a una entrada de la paleta (paletteId) segueix aquella entrada, com arreu; els colors de negreta, cursiva i referències del cos no s'apliquen dins d'una cita. |
italic | boolean | true | Compon el text en cursiva. Un tram … dins torna a rodona; amb false va en cursiva, com en un paràgraf. |
indent | Dimension | 0 | Sagnat de totes les línies des de la vora esquerra de la columna o del requadre. La mesura s'estreny en aquesta quantitat, de manera que les línies justificades acaben a la vora dreta. em és el cos del text. |
firstLineIndent | Dimension | la del cos | Sagnat de la primera línia de cada paràgraf citat, comptat des d'indent (amb el hangingIndent del cos, el de totes les línies llevat de la primera). Si no es fixa: bodyText.firstLineIndent. |
bodyText: {
firstLineIndent: { value: 1.5, unit: 'em' },
// Versos en rodona, en el color del cos, entrats 2 em i sense sagnat de primera línia.
blockquote: { color: { hex: '#241f26', model: 'hex' }, italic: false, indent: { value: 2, unit: 'em' }, firstLineIndent: { value: 0, unit: 'em' } },
}Al Sandbox són el grup Cites de la secció Text base.
#Vers
Un poema :::verse les línies del qual no porten separador d'hemistiquis es compon línia a línia (vegeu Format del document › :::verse). bodyText.verse dona els valors per defecte d'aquests poemes; un atribut del mateix nom a l'obertura d'un poema el fixa per a aquell poema.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
layout | 'auto' | 'bayt' | 'auto' | Com es compon un poema l'obertura del qual no anomena composició. 'auto': en baits quan una línia porta separador (||), línia a línia si no. 'bayt': sempre en baits, i un poema sense separador com a hemistiquis solts centrats, com fins a postext 1.22. |
indentStep | Dimension | 0.5em | Amplada d'un espai inicial d'un vers (un tabulador en compta quatre, un espai ideogràfic dos); em és el cos del poema. |
turnover | 'hang' | 'right' | 'hang' | Com es parteix un vers més ample que la caixa: penjat a la línia següent, o contra el final de la caixa darrere de turnoverMark. |
hang | Dimension | 2em | Sagnat de la resta penjada des de l'inici del seu vers, quan l'estil de paràgraf del poema no fixa hangingIndent. |
turnoverMark | string | '[' | El signe davant d'una resta composta a la dreta. |
stanzaSpace | number | 1 | Espai entre estrofes, en línies de l'interlineat del poema. A la retícula de base surt en línies senceres; un estil de paràgraf amb snapToGrid: false el conserva exacte. |
keepStanzas | number | 0 | Mantenir en una sola columna tota estrofa d'aquests versos o menys. 0 ho desactiva. |
tighten | boolean | true | Estrènyer els espais entre paraules d'un vers una mica més ample que la caixa, fins a bodyText.minWordSpacing de la seva amplada natural, i mantenir-lo en una línia; només es parteix el que continua sense cabre. Les lletres mai no s'espaien per a això. false parteix tot vers més ample que la caixa, com feia postext 1.23. L'EPUB adaptable, les línies del qual talla el sistema de lectura, no estreny. |
bodyText: {
// Restes a la dreta darrere d'un claudàtor; les tankes, senceres.
verse: { turnover: 'right', keepStanzas: 5 },
}Una configuració desada abans d'aquests ajustos (configVersion 8 o anterior) que compon un poema sense separador es llegeix amb layout: 'bayt', de manera que el poema conserva les línies centrades que li donava postext 1.22. Una desada amb postext 1.23 (configVersion 9) que compon un poema vers a vers es llegeix amb tighten: false, de manera que els seus versos es parteixen on els partia la 1.23.
Al Sandbox són el grup Vers de la secció Text base.
#Tabulacions
bodyText.tabStops enumera les tabulacions on va un tabulador: :tab, o un caràcter de tabulació en un paràgraf que té tabulacions (vegeu Format del document › Tabuladors i tabulacions per al marcatge i per a com es compon una línia). Els tabStops d'un estil de paràgraf les substitueixen als seus paràgrafs, i el body.tabStops d'un estil de requadre dins de les seves caixes; una llista buida no en fixa cap. Cada tabulació és un TabStop:
bodyText: {
tabStops: [
{ position: { value: 30, unit: 'mm' } },
{ position: 'end', align: 'end', leader: '.', leaderGap: { value: 2, unit: 'pt' } },
],
tabInterval: { value: 10, unit: 'mm' },
}| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
position | | obligatòria | On és la tabulació, des de la vora d'inici de la mesura del paràgraf (després de l'indent d'un estil de paràgraf; em és el cos del mateix paràgraf): una longitud, 'end' per a la vora final de la mesura, o una part de la mesura ('50%'). En text de dreta a esquerra la vora d'inici és la dreta. |
align | 'start' | 'end' | 'center' | 'decimal' | 'start' | Com es col·loca a la tabulació el text que segueix el tabulador: hi comença, hi acaba (el text fins al tabulador següent o fins al final del paràgraf), s'hi centra o hi posa el separador decimal (un tram sense separador hi acaba). |
leader | string | cap | El farciment que es repeteix al llarg de l'espai abans de la tabulació: '.', '. ', '·', '_', '-' o qualsevol text breu, amb la lletra i el color del paràgraf; 'rule' traça una línia una mica per sota de la línia de base. El farciment acaba arran del final del seu espai, de manera que els farciments de diverses línies queden alineats. Es mesura com una tira sencera, com la línia de punts d'una entrada de l'índex general. |
leaderGap | Dimension | 0.5em | L'espai que es deixa entre el farciment i el text a cada costat, com el leader.gap de l'índex general. No n'hi ha abans del farciment quan el tabulador obre la seva línia, ni després quan no el segueix res. |
decimalChar | string | el de la llengua del document | El separador amb què s'alinea una tabulació 'decimal': . en anglès, xinès, japonès i àrab, , en castellà, català, portuguès, francès, alemany i altres. |
tabInterval afegeix tabulacions a cada interval des de l'inici de la mesura, passada l'última tabulació de la llista; sense aquest valor, un tabulador més enllà de l'última tabulació és un espai entre paraules. Un caràcter de tabulació escrit al text només és un tabulador en un paràgraf l'estil del qual té tabulacions o un interval, propis o del text de cos; a tot arreu més continua sent l'espai entre paraules que sempre ha estat, de manera que un document desat es compon com abans i no cal fixar-lo a cap versió.
Les tabulacions es comproven amb la resta de la configuració (vegeu Avisos de configuració): una clau desconeguda en una tabulació (leaders) es notifica com a unknownConfigKey amb la clau a què més s'assembla; un align que no és cap dels quatre, com a unknownConfigValue, i la tabulació es compon com a 'start'; una position que no és una longitud, 'end' ni un percentatge, com a unknownConfigValue amb used: 'none', i la tabulació es deixa fora.
El color i la lletra del farciment són els del paràgraf; encara no tenen cap ajust propi.
#Caplletres
Un paràgraf de cos pot començar amb una caplletra: la primera lletra, gran, al costat de les primeres línies, que s'escurcen en l'amplada de la lletra més un espai i es componen com qualsevol altra línia (tallades amb Knuth–Plass, justificades, partides per síl·labes). Un estil de paràgraf en dona una al primer paràgraf de cada grup :::paragraphs de l'estil (a tots els paràgrafs amb each: true, per a un catàleg d'entrades); un nivell d'encapçalament o un estil d'encapçalament en dona una al primer paràgraf de cos després de l'encapçalament (vegeu el camp dropCap de Configuració per nivell, Estils de paràgraf i Estils d'encapçalament). El paràgraf que segueix l'encapçalament es busca més enllà de les línies d'obertura i tancament dels contenidors, les directives, les caixes que han sortit del flux i les figures flotants, igual que el troba indentAfterHeading; un paràgraf dins d'una caixa, un element de llista, una cita, un poema o una nota no en porta mai. Al text, {dropcap}, {dropcap=false} i {dropcap=N} en una línia d'encapçalament o en la línia d'obertura d'un :::paragraphs l'activen, la desactiven o en fixen les línies per a aquell capítol o grup (vegeu Format del document › Caplletres). Des de postext 1.23.
headings: {
levels: [
{ level: 1, dropCap: { lines: 3, fontFamily: 'Libre Bodoni', fontWeight: 700, color: { hex: '#8b2e2a', model: 'hex', paletteId: 'accent' }, leadIn: { words: 3 } } },
],
},| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
lines | number | 3 | Línies que abasta la inicial, des de la part alta de les seves majúscules fins a la seva línia de base. 1 amb un fontSize més gran és una inicial alçada, assentada a la primera línia de base. |
sink | number | lines | Línies que la inicial baixa dins del text: s'assenta a la línia de base de la línia sink, i aquestes línies s'escurcen. Un valor inferior a lines l'alça per damunt de la primera línia. |
characters | number | 1 | Grups de grafemes que es componen grans: É, una lletra amb un signe combinant o un caràcter de fora del pla multilingüe bàsic compten com un. Mai més enllà de la primera paraula. |
fontFamily, fontWeight, italic | string, number, boolean | els del paràgraf; false | Font de la inicial. Es carrega i s'incrusta amb les altres fonts del document. |
fontSize | Dimension | vegeu a sota | Mida de la inicial. Sense fixar: la mida que enrasa la part alta de les seves majúscules amb les majúscules de la primera línia mentre s'assenta lines línies més avall. |
color | ColorValue | el del paràgraf | Un color enllaçat a la paleta segueix les paletes de la part i de la secció. |
gap | Dimension | 0.15em | Espai entre la inicial i les línies escurçades; l'em és el cos del text. |
punctuation | 'with-cap' | 'hang' | 'text' | 'with-cap' | Unes cometes d'obertura, un ¿, un ¡ o un parèntesi davant de la lletra: compost gran com a part de la inicial, penjat al cos del text fora de la mesura, davant seu, o compost al cos del text a l'inici de la primera línia, després de la inicial. |
leadIn | { words, smallCaps, uppercase } | cap | Les primeres words paraules després de la inicial, en versaletes (per defecte) o en majúscules (uppercase: true); words: 'line' pren les paraules de la primera línia. Les paraules de la primera línia es compten en una primera composició i es componen en una segona: en versaletes, la línia pot encabir llavors una paraula més, que es compon tal com està escrita. |
shortParagraph | 'reserve' | 'shrink' | 'skip' | 'reserve' | Un paràgraf de menys línies que sink: manté el bloc amb una alçada de sink línies perquè el bloc següent quedi per sota de la inicial, compon la inicial sobre les línies pròpies del paràgraf, o compon el paràgraf sense caplletra. Cada cas genera un avís de contingut dropCap. |
each | boolean | false | Només en estils de paràgraf: tots els paràgrafs del grup comencen amb la caplletra, no només el primer. |
Com es compon la lletra:
- Mida. Les dues alçades de majúscula, la del text i la de la inicial, es mesuren a les seves fonts (la tinta d'una
H; la de la inicial mateixa en text xinès o japonès), i una font que no dona mètriques de tinta compta les seves majúscules com a 0,72 del seu cos. La mida per defecte serveix per a qualsevol parell de fonts, així que no cal cap correcció per font. EldropCapd'un text de disseny conserva el seu 0,72 fix (vegeu Elements de text). - La lletra i la seva paraula. La inicial pren grups de grafemes sencers. La resta de la primera paraula continua darrere seu sense espai; una paraula d'una sola lletra (A, I) conserva el seu espai entre paraules a l'inici de la primera línia. Es descarta el sagnat de primera línia propi del paràgraf. La còpia, la cerca, el mapa d'origen i el cursor del Sandbox llegeixen el paràgraf tal com està escrit: el text pla del bloc inclou la lletra, el
plainStartde la primera línia compta a partir d'ella, iVDTBlock.dropCapen desa el rang i la geometria al fragment que porta la primera línia. - Una inicial alçada (
lines: 1amb unfontSizemés gran, o unsinkinferior alines) s'alça per damunt de la primera línia, i el paràgraf manté aquesta alçada lliure al damunt, en línies senceres de la retícula, perquè no se sobreimprimeixi al text anterior. - Talls. El paràgraf no es talla mai abans de la línia
sink: passa sencer a la columna o la pàgina següent, tret que estigui sol en una columna buida que no pot encabir aquestes línies; llavors es talla igualment i genera un avísdropCap. Un encapçalament lligat al seu text manté aquestes línies a sota. La part que continua a la columna següent no porta inicial i té les línies a amplada completa; si es torna a tallar per a una columna d'una altra amplada, les primeres línies conserven el seu sagnat. L'equilibratge de columnes pot compondre el paràgraf fluix o estret com qualsevol altre, i no afegeix mai espai entre les línies escurçades. - Escriptures. Les línies s'escurcen pel costat d'inici: l'esquerra en text llatí, la dreta en àrab i hebreu. Una lletra que s'enllaça amb la següent (àrab, siríac, n'ko) no se separa, i el paràgraf genera un avís
dropCap; el xinès i el japonès horitzontals prenen una inicial d'un caràcter (首字下沉). El text vertical no en porta (avís). Un paràgraf que no comença amb cap lletra ni xifra (una referència, una fórmula, una marca de nota) tampoc no en porta (avís). - Sortides. El canvas, el visor HTML i l'EPUB de maquetació fixa pinten la inicial al costat de les línies; l'HTML l'escriu just abans del text de la primera línia, sense res entremig, de manera que un lector de pantalla llegeix la paraula sencera. En un PDF etiquetat la inicial forma part del
Pdel paràgraf, i amb la resta de la seva paraula, d'unSpanl'/ActualTextdel qual és la paraula: l'extracció de text llegeix Molt abans, mai M olt abans. Un EPUB de maquetació fluida la compon com uninitial-letterde CSS (línies, enfonsament), flotant on el sistema de lectura no l'admet.
Els ajustos es comproven amb la resta de la configuració (vegeu Avisos de configuració): una clau desconeguda en una caplletra o en les seves paraules inicials es notifica com a unknownConfigKey; un punctuation o un shortParagraph que no és cap dels seus valors, o un lines, un sink o un characters que no és un nombre enter a partir d'1, com a unknownConfigValue, i es fa servir el valor per defecte. Les caplletres estan desactivades per defecte, de manera que cap document desat no canvia.
#Una sola família per fontFamily
fontFamily —aquí i en qualsevol altre camp de família tipogràfica (headings.fontFamily, tableStyle.bodyFontFamily, separatorFontFamily, el fontFamily d'un estil de xip o d'un element de disseny…)— anomena una família. El canvas, la sortida HTML i el PDF han de compondre amb la mateixa font, i el PDF incrusta una font per família, sense cadena de reserva, de manera que una llista de fonts CSS no té a què recórrer. Una llista es compon en la seva primera família i es notifica com a avís de configuració:
bodyText: { fontFamily: "'EB Garamond', Georgia, serif" } // es compon en EB GaramondCarrega aquesta família abans de compondre (consulta Fonts personalitzades i el proveïdor de fonts a Generació de PDF); si falta, el navegador mesura amb la seva font per defecte, digui el que digui la resta de la llista. Una coma entre cometes forma part del nom ('"Foo, Bar"' és una sola família).
#Partició de mots
Quan l'alineació del text està configurada com a 'justify', la partició de mots evita l'espaiat excessiu entre paraules en trencar les paraules llargues pels límits sil·làbics. El motor utilitza patrons TeX/Liang per trobar punts de ruptura naturals en els límits sil·làbics. Vegeu Partició de mots i justificació per a una explicació detallada. El text en bandera només es divideix si es demana: vegeu Text en bandera més avall.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
enabled | boolean | true | Si es permet la partició de mots. |
locale | LocaleTag | el locale de primer nivell o, si no n'hi ha, 'en-us' | Regles de llengua per als límits sil·làbics: una de les llengües admeses de sota o qualsevol etiqueta BCP 47 ('es-ES', 'pt-BR'). |
ragged | boolean | false | Parteix mots també en el text en bandera (alineat a l'esquerra, a la dreta o centrat), dins de la zone. Vegeu Text en bandera. |
zone | Dimension | 3em | Zona de partició del text en bandera: una paraula que no hi cap només es divideix quan passar-la sencera a la línia següent deixaria un buit més gran que aquesta mesura. En em és relativa al cos del mateix text. No s'aplica al text justificat. |
compounds | boolean | true | Permet que el diccionari divideixi les paraules d'un compost, una paraula amb un guionet entre dues lletres (teó-rico-práctico). false deixa la paraula sencera excepte pel seu propi guionet, on la línia sí que pot acabar (teórico- · práctico), com fa TeX. Un guionet tou escrit a la paraula continua permetent el tall, i un compost més ample que tota la línia es continua dividint. S'aplica al text corregut, els títols, les llistes, les cites i els requadres; els peus, les notes, les cel·les de taula i l'índex de continguts continuen dividint els compostos. Vegeu Paraules compostes. |
Llengües admeses: 'en-us' (anglès), 'es' (castellà), 'fr' (francès), 'de' (alemany), 'it' (italià), 'pt' (portuguès), 'ca' (català), 'nl' (neerlandès).
Per triar els patrons s'ignoren les subetiquetes de regió, escriptura i variant, les majúscules i els separadors _: 'es-ES', 'es-MX' i 'es_419' es divideixen amb 'es', 'pt-BR' amb 'pt' i qualsevol etiqueta anglesa ('en', 'en-GB') amb 'en-us', els únics patrons anglesos inclosos, de manera que el text britànic rep els talls nord-americans. Una llengua sense patrons inclosos ('sv', 'pl', 'fi'…) es divideix amb els d''en-us', cosa que dona talls equivocats en lloc de cap; el motor ho avisa un cop per etiqueta amb un console.warn, i el Sandbox ho mostra al seu tauler de revisió. Per a un document així, fixa enabled: false; això també fa callar l'avís. El xinès, el japonès i el coreà (zh, ja, ko, amb qualsevol regió o escriptura) no necessiten patrons ni imprimeixen cap avís: un document en una d'aquestes llengües es compon sense partició de mots. Per dividir les paraules llatines que cita, fixa enabled: true i anomena'n la llengua a locale ('en-us' per a l'anglès). Amb enabled: true sense locale, o amb un de xinès, japonès o coreà, la partició continua desactivada i la consola ho avisa un cop. matchHyphenationLocale(tag) retorna la llengua inclosa a la qual correspon una etiqueta (undefined si no n'hi ha cap), i HYPHENATION_LOCALES enumera les incloses. La configuració resolta (doc.config.bodyText.hyphenation) anomena a locale els patrons que s'usen de debò i conserva a tag l'etiqueta que vas donar quan és diferent. El backend PDF declara la llengua del document a partir de locale, a l'arrel de la configuració, i només fa servir aquesta etiqueta quan locale falta (consulta Llengua del document).
import { matchHyphenationLocale } from 'postext';
matchHyphenationLocale('es-MX'); // 'es'
matchHyphenationLocale('en-GB'); // 'en-us'
matchHyphenationLocale('sv'); // undefined: es divideix amb 'en-us', amb un avís a la consolaLes paraules de menys de 5 caràcters no es parteixen mai. El motor requereix com a mínim 2 caràcters abans i 3 caràcters després d'un punt de ruptura.
Text en bandera
Per defecte només es divideix el text justificat: amb textAlign: 'left', i en els estils de paràgraf alineats a l'esquerra, centrats o a la dreta, totes les paraules es mantenen senceres per irregular que quedi el marge, excepte en un guionet tou (U+00AD) escrit al text. Fixa hyphenation.ragged: true per partir mots també en el text en bandera.
Una línia en bandera no s'estira mai, de manera que dividir tota paraula que no hi cap ompliria el marge de guionets. La zona de partició ho limita, com fa el compositor d'una sola línia dels programes de maquetació. Quan una paraula no cap al final d'una línia, el motor mira el buit que deixaria passar-la sencera a la línia següent. Si aquest buit és més gran que zone, divideix la paraula per l'última síl·laba que hi cap; si no, la paraula baixa sencera. Una zona en em és relativa al cos del mateix text. La zona per defecte, 3em, només divideix les paraules que deixarien una línia clarament curta. Una zona més ampla dona menys guionets i un marge més irregular; amb 0 es divideix tota paraula que no hi cap. Línia a línia, mai no acaben més de dues línies seguides en síl·laba. Els guionets propis de la paraula (enseñanza-aprendizaje), les juntures de les URL, els guionets tous escrits al text i les paraules més amples que la línia sencera es tallen com sempre: la zona i el límit de dues línies només governen les síl·labes del diccionari.
L'ajust val per a tot el document. S'aplica al text de cos i a les cites quan van en bandera, i a tot estil de paràgraf i cos de requadre en bandera que tingui activada la seva pròpia hyphenation (que pren per defecte el hyphenation.enabled del cos), de manera que hyphenation: false manté senceres les paraules d'un estil. Els títols, els peus, les notes, les cel·les de taula i l'índex de continguts no es divideixen; en aquests, com arreu, només es talla una paraula més ampla que la mesura sencera. El text de disseny — capçaleres corregudes, portadelles, pàgines de part — segueix la marca hyphenate de cada element de text, que porten activada les portadelles de pàgina completa i les pàgines de part integrades, i també fa servir el diccionari del document. El text justificat ignora ragged i zone.
const config: PostextConfig = {
locale: 'es',
bodyText: {
textAlign: 'left',
// Una mica més de partició de mots que amb la zona per defecte de 3 em.
hyphenation: { ragged: true, zone: { value: 2, unit: 'em' } },
},
};Amb optimalRagged (el valor per defecte), el text corregut en bandera es compon amb Knuth-Plass, i la zona conserva el seu sentit: una paraula només es divideix quan no cap en el que queda de línia i passar-la sencera a baix deixaria un buit més gran que la zona. Dues síl·labes seguides no es rebutgen, però costen el mateix que dos guionets seguits en el text justificat, de manera que una tercera és rara. Amb optimalRagged: false, o amb optimalLineBreaking: false, cada línia s'omple abans de passar a la següent, com fins a postext 1.4.
La partició de mots en bandera compon els paràgrafs amb el divisor de línies que fan servir sempre els paràgrafs amb format en línia (negreta, cursiva, enllaços, fórmules), de manera que activar-la pot moure algun tall que no és un guionet. En una línia en bandera, a més dels espais i de les síl·labes del diccionari, aquest divisor talla després d'un guionet o un guió entre dues paraules (largas—separadas; amb breakAfterDashes, després de qualsevol guió posat entre paraules sense espais, també I.—Que i calidad–*precio*), a les juntures de les URL i entre ideogrames, i manté unida una paraula escrita en diversos trams (**Nota**:, (*véase*). Sense partició de mots en bandera, un paràgraf en bandera sense format el talla Knuth-Plass quan optimalRagged està activat (el valor per defecte): als espais, després d'un guionet entre dues lletres (enseñanza- · aprendizaje), com l'altre divisor, i, amb breakAfterDashes, després dels guions entre paraules. Línia a línia, passa pel divisor de pretext, que difereix en tres coses: pot tallar també abans del guió que tanca un incís o després del que l'obre (él · — y), després d'una barra quan divideix síl·labes (km/ · h), i talla una paraula més ampla que la línia per qualsevol caràcter i sense guionet, on l'altre divisor la parteix abans per una síl·laba.
Al Sandbox l'interruptor és Partició de mots en bandera, sota l'alineació de paràgraf de la secció Text base, amb la zona a sota. Amb el cos justificat, el mateix interruptor apareix al costat dels ajustos de justificació, per als estils de paràgraf i requadres en bandera.
#Llengua del document
El locale de primer nivell és la llengua del document en conjunt. Admet els mateixos valors que hyphenation.locale i és el valor al qual recorre aquest camp quan no està definit, de manera que a un llibre en castellà li n'hi ha prou amb locale: 'es' per partir mots en castellà. També tria la llengua de les cadenes integrades de continuació de taules i d'avisos partits ((cont.) / Continued davant de Continúa, vegeu Taules més altes que la pàgina i Marques d'un requadre partit) i la dels números d'encapçalament escrits amb lletres (Chapter One davant de Capítulo uno, vegeu Números amb lletres), i és la llengua que s'etiqueta en un PDF accessible. Si no es defineix, el motor assumeix 'en-us'; el Sandbox recorre a l'idioma de la interfície i mostra el camp a Disseny › Escriptura.
També tria els tipus de recurs integrats. Quan resourceTypes no està definit, buildDocument numera i retola amb defaultResourceTypes(locale), de manera que amb locale: 'de' n'hi ha prou per obtenir Abbildung 1.1 i Tabelle 1.1. Si locale no està definit, el substitueix la llengua de la partició de mots, tant per als tipus de recurs com per a les cadenes de les taules. Una llista resourceTypes explícita sempre mana. Les versions anteriors feien servir els tipus en anglès fos quin fos el locale, tret que passessis tu mateix defaultResourceTypes(locale); un document que fixa locale i vol conservar les etiquetes angleses passa resourceTypes: defaultResourceTypes('en'). Els llibres del Sandbox i els paquets porten la seva pròpia llista, així que no els afecta.
Aquí val qualsevol etiqueta BCP 47, igual que a hyphenation.locale: 'de-AT' rep les cadenes alemanyes. Les cadenes integrades existeixen en les vuit llengües que admet la partició de mots, en xinès (en caràcters simplificats i tradicionals), en japonès i en àrab; qualsevol altra llengua rep les angleses.
El xinès admet zh, zh-Hans, zh-Hant, zh-CN, zh-SG, zh-TW, zh-HK, zh-MO i les formes llargues (zh-Hant-TW), en majúscules o minúscules i amb - o _. Les cadenes segueixen l'escriptura, llegida amb Intl.Locale(tag).maximize(): zh, zh-CN i zh-SG són xinès simplificat; zh-TW, zh-HK i zh-MO, tradicional. Els valors tipogràfics que depenen de la llengua segueixen en canvi la regió, com recomana clreq §1.2: CN, SG i MY compten com a Xina continental, TW com a Taiwan, HK i MO com a Hong Kong, i una etiqueta sense regió es regeix per la seva escriptura (zh-Hant és Taiwan; zh i zh-Hans, la Xina continental). El japonès admet ja, ja-JP, ja-Jpan i qualsevol altra etiqueta ja (isJapaneseLanguage(tag)); des de postext 1.16 té les seves pròpies cadenes i la seva pròpia regió, japan, els valors tipogràfics per defecte de la qual segueixen JLReq (vegeu Composició japonesa). Una taula de cadenes sense entrada japonesa dona l'anglès, mai el xinès. localeScript(tag), cjkRegionOf(tag), stringsKeyOf(tag) i sameContentLocale(a, b) retornen aquestes lectures, i DOCUMENT_LANGUAGES enumera les llengües amb cadenes integrades, cadascuna amb el seu nom en la seva pròpia llengua (日本語 entre les entrades xineses i العربية), tal com les mostra el selector de llengua del document del Sandbox.
| Llengua | Figura: nom, plural, etiqueta curta | Taula: nom, plural, etiqueta curta | Continuació de taula: continuedSuffix, continuesMarker |
|---|---|---|---|
Anglès (en) | Figure, Figures, Fig. | Table, Tables, Tab. | (cont.), Continued |
Castellà (es) | Figura, Figuras, Fig. | Tabla, Tablas, Tabla | (cont.), Continúa |
Francès (fr) | Figure, Figures, Fig. | Tableau, Tableaux, Tabl. | (suite), À suivre |
Alemany (de) | Abbildung, Abbildungen, Abb. | Tabelle, Tabellen, Tab. | (Forts.), Wird fortgesetzt |
Italià (it) | Figura, Figure, Fig. | Tabella, Tabelle, Tab. | (segue), Continua |
Portuguès (pt) | Figura, Figuras, Fig. | Tabela, Tabelas, Tab. | (cont.), Continua |
Català (ca) | Figura, Figures, Fig. | Taula, Taules, Taula | (cont.), Continua |
Neerlandès (nl) | Figuur, Figuren, Fig. | Tabel, Tabellen, Tab. | (vervolg), Wordt vervolgd |
Xinès simplificat (zh-Hans, zh, zh-CN) | 图, 图, 图 | 表, 表, 表 | (续), 接下页 |
Xinès tradicional (zh-Hant, zh-TW, zh-HK) | 圖, 圖, 圖 | 表, 表, 表 | (續), 接下頁 |
Japonès (ja, ja-JP) | 図, 図, 図 | 表, 表, 表 | (続き), 次ページへ続く |
Àrab (ar, ar-EG, ar-MA…) | شكل, أشكال, شكل | جدول, جداول, جدول | (تابع), يتبع |
El prefix del peu és el nom del tipus (Figura 1.1.). Els tipus xinesos numeren dins del capítol amb un guionet, {h1}-{n} (图 1-1); amb els ajustos de peu labelNumberGap: '' i labelSeparator: ' ' el peu es llegeix 图1-1 标题 (vegeu Estil de peus de recurs). L'índex alfabètic també segueix la llengua: 见 i 另见 davant d'una remissió, 符号 i 数字 sobre els símbols i els números en xinès simplificat; 見, 另見, 符號 i 數字 en tradicional. El japonès numera els seus tipus de la mateixa manera i compon els seus peus com 図1-1 題 sense els dos ajustos, escriu les referències creuades com 第3章, 2.3節 i 12ページ, titula la bibliografia 参考文献, i el seu índex imprimeix 記号 i 数字 sobre els símbols i els números i escriu les remissions amb una fletxa, →夏目漱石 per a vegeu i →夏目漱石、森鷗外も見よ després de les pàgines per a vegeu també, amb les etiquetes en rodona. L'àrab numera els seus tipus de la mateixa manera, {h1}-{n} (شكل 2-3), escriu les referències creuades com الفصل 3, القسم 2-1 i ص 12, titula la bibliografia المراجع, i el seu índex imprimeix انظر / انظر أيضًا, رموز i أرقام, amb la coma i el punt i coma àrabs (، ؛).
Un document en xinès, japonès o coreà declara la seva llengua a la sortida HTML (lang a l'arrel .pt-doc, amb zh-Hant-TW complet) i al canvas que pinta (ctx.lang, a Chrome 136 i posteriors), de manera que el navegador dibuixa les formes de glif de la seva regió: Unicode unifica els caràcters han, i un mateix punt de codi es veu diferent en una font taiwanesa i en una de japonesa. Els altres documents no porten lang, com abans. El PDF declara /Lang a partir de locale per a tot document, etiquetat o no, amb la seva escriptura i la seva regió. Un document en una llengua que s'escriu de dreta a esquerra (àrab, persa, urdú, hebreu…) també declara la seva llengua: les formes de la llengua de la font (locl) i la font de reserva la segueixen.
const config: PostextConfig = {
locale: 'es',
bodyText: { textAlign: 'justify', hyphenation: { enabled: true } }, // parteix mots en castellà
};Xifres del document
La clau numerals de primer nivell fixa les xifres de tots els números que escriu el motor: els números de pàgina i les etiquetes de pàgina de l'índex general, de l'índex alfabètic i de les referències a pàgina; els números de les llistes ordenades i de les notes; els comptadors de títols i capítols, {chapterNumber}; el {h1} i el {n} del número d'una figura i d'una referència a aquesta; {totalPages}, {bookTotalPages} i {numberDecimal}. 'latn' escriu 0–9, 'arab' les xifres aràbigues orientals ٠–٩ i 'arabext' les perses ۰–۹. Només canvia el format decimal —decimal, l'arabic de les llistes o un ajust que es deixa per defecte—, de manera que un format que l'autor anomena s'imprimeix tal com s'anomena: lower-roman continua sent i, ii, iii, i arabic-indic en un document llatí escriu ١, ٢, ٣. El text del document no es reescriu mai.
El valor per defecte, 'auto', pren les xifres de locale (defaultNumeralsFor(tag)): 'arab' per a l'àrab sense regió o amb qualsevol regió fora del Magrib (ar, ar-EG, ar-SA, ar-AE…), 'latn' per a ar-MA, ar-DZ, ar-TN, ar-LY, ar-MR i ar-EH, 'arabext' per al persa (fa), el paixtu (ps) i l'urdú de l'Índia (ur-IN), i 'latn' per a tota la resta, inclòs l'urdú del Pakistan. CLDR dona latn per a ar sense regió i per a ar-AE; els llibres àrabs del Màixriq i del Golf imprimeixen ٠–٩, i Postext segueix els llibres. Una etiqueta que anomena les seves xifres les conserva: ar-MA-u-nu-arab. Una pàgina numerada amb les xifres del document desa arabic-indic o persian com a pageNumberFormat, de manera que les etiquetes de pàgina del PDF mostren les mateixes xifres. Un valor desconegut segueix la llengua i s'avisa com a unknownNumerals.
Els números que escriu l'autor es llegeixen en qualsevol dels tres sistemes: un element de llista ٣. comença a 3, i {startAt=٥}, :::numbering{startAt=٥}, :::space{lines=٢} i :::part{number="٣"} (per a {numberDecimal}) llegeixen el valor.
const config: PostextConfig = { locale: 'ar' }; // ١، ٢، ٣
const magreb: PostextConfig = { locale: 'ar-MA' }; // 1, 2, 3
const forzado: PostextConfig = { locale: 'ar', numerals: 'latn' }; // 1, 2, 3Direcció del text
direction, al primer nivell, fixa la direcció base del document: 'ltr', 'rtl' o 'auto' (el valor predeterminat), que és 'rtl' quan l'escriptura del locale s'escriu de dreta a esquerra (àrab, persa, urdú, hebreu, siríac, thaana, n'ko, adlam…, segons directionOf(tag)) i 'ltr' en els altres casos. Un document de dreta a esquerra es compon en un marc emmirallat: les línies comencen a la dreta, la primera columna és la de la dreta, els sagnats, els marcadors de llista, els flotants, les notes a peu de pàgina i les caixes queden a la dreta, i page.binding: 'auto' l'enquaderna per la dreta. La configuració resolta només porta direction: 'rtl' en un document així, de manera que un document d'esquerra a dreta es resol igual que abans. Un valor desconegut es llegeix com a 'auto' i s'avisa com a unknownConfigValue. L'algorisme bidireccional d'Unicode (UAX #9) ordena els trams de cada línia en qualsevol de les dues direccions: una cita àrab en un llibre anglès es llegeix de dreta a esquerra al seu lloc.
Dins del document, un títol o un contenidor ::: admet {dir=ltr} o {dir=rtl}, i :ltr[…] i :rtl[…] aïllen un tram de text (vegeu Direcció del text al marcatge); un recurs de taula admet table.direction. Un bloc compost en contra de la direcció del document conserva el seu propi costat d'inici: el sagnat, els marcadors de llista i el final alineat de l'última línia passen al costat per on comença el seu text.
Un ajust que anomena un costat es refereix a un costat del text o del flux, mai del plec, de manera que un disseny fet per a un llibre anglès continua valent quan el llibre passa a l'àrab. 'start' i 'end' s'accepten com a noms explícits:
| Ajust | 'left' / 'right' | 'start' / 'end' |
|---|---|---|
textAlign del cos, els títols, els estils de paràgraf, les parts, les notes a peu de pàgina i el cos dels avisos; align del peu i de la seva nota | Els costats del text: 'left' és el costat per on comença la línia, la dreta d'un paràgraf àrab, i allà va l'última línia d'un paràgraf justificat. | Sinònims de 'left' i 'right'. La configuració resolta porta 'left' / 'right'; la desada conserva el que s'hi va escriure. |
align d'una cel·la de taula | Els costats del text de la cel·la, llegits en la direcció de la taula (table.direction). | Sinònims, llegits en la direcció de la taula. |
placement.align (flotants, figures estretes) | Els costats del flux: en un llibre de dreta a esquerra, 'left' és la dreta del plec. | Sinònims. |
stripe.side, icon.cornerSide i labelTab.position dels avisos ('top-start', 'top-end') | Els costats del flux, els mateixos per a totes les caixes de la pàgina. | La direcció de la caixa mateixa (un :::callout{dir=ltr} en un llibre àrab comença per l'esquerra del plec). |
| Ranures de capçalera i peu; elements de disseny ancorats al plec | Els costats del plec. | Només els elements de text: l'inici i el final de la seva pròpia direction. |
placement.rotate conserva el seu sentit físic en una pàgina emmirallada: una figura girada en el sentit de les agulles del rellotge queda girada així al plec. Qui llegeix la maquetació troba el marc emmirallat a cada pàgina (VDTPage.flow amb direction: 'rtl', pageIsMirrored(page)) i l'ordre visual dels segments de cada línia a VDTLine.order; flowToPage i pageToFlow passen del flux al plec i a l'inrevés. Vegeu Composició àrab.
const arab: PostextConfig = { locale: 'ar' }; // de dreta a esquerra, enquadernat per la dreta
const angles: PostextConfig = { locale: 'en', direction: 'rtl' }; // forçat; poques vegades és el que vols#Llengües i escriptures
Postext compon escriptures alfabètiques que s'escriuen d'esquerra a dreta, i el xinès i el japonès en horitzontal i en vertical. Composició xinesa i Composició japonesa expliquen com es componen i quins ajustos els governen; les claus són a Tipografia de l'Àsia oriental, Escriptura vertical i Enquadernació. El que rep cada escriptura:
- El xinès el compon el compositor CJK quan un paràgraf té més caràcters CJK que espais entre paraules: les seves línies es tallen entre caràcters amb les regles de principi i final de línia de
cjk.lineBreak(cap línia no comença per 。、」 o ー, cap no acaba en 「 o (), mantenen senceres —— i ……, un número amb els seus signes i una paraula llatina, i una línia justificada s'eixampla entre els seus caràcters fins a la mesura. L'amplada de la puntuació, la puntuació penjada, l'espai entre xinès i llatí, la retícula de caràcters, els punts d'èmfasi, les marques de nom propi i de títol, el ruby i les notes warichu segueixen la regió delocale, al llarg de la línia horitzontal o de la vertical (layout.writingMode: 'vertical-rl'). Un paràgraf llatí que cita unes poques paraules CJK conserva la divisió òptima de línies i es pot tallar al costat d'aquestes; un signe d'obertura o tancament CJK, el punt volat o un signe d'amplada completa citats en text llatí (〈h〉, %) no canvien res. - El japonès passa pel mateix compositor amb regles pròpies des de postext 1.16, les dels Requisits per a la composició de textos japonesos del W3C (JLReq) i la JIS X 4051: un
localejadona la regiójapan, els valors automàtics de la qual fixen els nivells de kinsoku de JLReq (els kana petits i ー mai no obren línia), la puntuació d'amplada completa amb compressió de parelles, un quadratí després de ?!, el parèntesi que obre un paràgraf a la segona meitat del sagnat, marques d'èmfasi de sèsam sobre el text, títols d'obres entre 『』, furigana repartits 1:2:1, comptadors japonesos, notes i un índex ordenat per la lectura. Les versions anteriors componien el japonès amb els valors per defecte de la Xina continental. - El coreà passa pel mateix compositor i es compon sense partició de mots, però amb els valors per defecte de la Xina continental: les seves regles pròpies (KLREQ) no estan implementades. El coreà es talla entre síl·labes a més de pels seus espais.
- L'àrab i les altres escriptures de dreta a esquerra (persa, urdú, hebreu…) es componen de dreta a esquerra; Composició àrab explica com. La
directiondel document surt de l'escriptura dellocale, l'algorisme bidireccional d'Unicode ordena les paraules llatines i les xifres dins de cada línia, el llibre s'enquaderna per la dreta amb la primera columna a la dreta, i cada número que escriu el motor pren les xifres de la regió. Una paraula amb una lletra de l'alfabet àrab no es parteix, no s'espaia ni es talla mai, i una línia àrab justificada s'estira als espais i amb caixides. Els signes vocàlics, l'èmfasi, les notes a peu de pàgina i les cadenes de l'àrab són a Text àrab. El persa, l'urdú i l'hebreu reben la direcció, les xifres i les regles de paraula sencera, però no cadenes integrades pròpies.
Hi ha patrons de partició de mots per a vuit llengües (en-us, es, fr, de, it, pt, ca, nl); els tipus de recurs integrats i les cadenes de continuació existeixen en aquestes vuit, en xinès, en japonès i en àrab. El xinès, el japonès, el coreà i les llengües que s'escriuen de dreta a esquerra es componen sense partició de mots. Qualsevol altra llengua es divideix amb els patrons de l'anglès dels EUA, amb un avís a la consola, i rep les cadenes angleses. Per a un document així, fixa hyphenation.enabled: false i passa resourceTypes i les cadenes de continuació de tableStyle en la seva llengua.
#Text àrab
Aquests ajustos serveixen el text en alfabet àrab; cap no canvia un document escrit en una altra escriptura. Composició àrab els explica juntament amb la resta d'un llibre àrab: direcció, enquadernació, xifres, vers, índex general i índex analític.
- Signes vocàlics i interlineat. Els signes vocàlics d'un text vocalitzat (fatḥa, kasra, shadda, tanwīn, l'alif volat, els signes alcorànics) s'apilen sobre i sota les lletres, a l'interlineat, que no creix per ells. Cada línia amb signes anota fins on arriba la seva tinta (
VDTLine.markInk), i el retall de columna dels renderitzadors inclou els signes de la primera i l'última línia de cada columna. Quan un signe sobre una paraula toca les lletres o els signes que pengen sota la paraula de sobre, la composició avisa del paràgraf (arabicMarksExceedLeading, al tauler Revisió del Sandbox). Només es comparen paraules que estan una sobre l'altra. El text vocalitzat en part demana uns 1,7–1,85 em delineHeight, i el vers vocalitzat del tot 1,9–2,1 em. - Èmfasi. La lletra àrab no té cursiva, així que en un document el
localedel qual s'escriu en alfabet àrab*…*es compon per defecte en negreta (bodyText.emphasis: 'auto').'color'el compon en rodona ambitalicColor, i'overline'traça una ratlla per sobre de les paraules, el khaṭṭ fawqī dels llibres àrabs. L'ajust abasta tot text compost amb les fonts del cos: paràgrafs, llistes, cites, estils de paràgraf, cos dels requadres, notes i encapçalaments. Els peus, les cel·les de taula, l'índex general i l'índex analític conserven els seus propis ajustos de cursiva. Es triï el que es triï, el motor no inclina mai lletres àrabs: les paraules àrabs d'un tram en cursiva van en rodona i les seves paraules llatines conserven la cursiva. En un document així, les cites van en rodona per defecte. - Tashkīl.
bodyText.tashkil: 'strip'treu els signes vocàlics i alcorànics del text que es compon, per a una edició sense vocals feta a partir d'una font vocalitzada: fatḥa, ḍamma, kasra i els seus tanwīn, sukūn, shadda, l'alif volat (هٰذا passa a هذا) i els signes U+0656–U+065F i U+06D6–U+06ED.'strip-vowels'conserva la shadda, tal com la imprimeixen la majoria dels llibres moderns. La hamza i la madda es queden (أ إ آ són lletres, també teclejades amb signes combinants). La font conserva els seus signes; les línies, els encapçalaments i l'índex general es componen sense aquests signes, i cada caràcter compost continua apuntant al seu lloc a la font. - Notes a peu de pàgina.
footnotes.markerTemplate: '({n})'escriu les crides «(١)» amb les xifres del document,numbering: 'page'les reinicia a cada pàgina inoteNumberPosition: 'inline'posa sobre la línia el número de la nota. El filet separador i els números de nota queden al principi de la columna, a la dreta en un llibre de dreta a esquerra. - Paraules senceres. Una paraula amb una lletra de l'alfabet àrab no es parteix, no es talla ni s'espaia mai, en un llibre àrab o citada en un altre. Un estil que posa
letterSpacinga un text àrab s'avisa (joiningScriptLetterSpacing), i una paraula més ampla que la seva línia la desborda i s'avisa (unbreakableWordOverflow). Vegeu Composició àrab. - Caixida i vers. Una línia àrab justificada s'estira amb caixides a més dels espais (
bodyText.kashida, vegeu Caixida en el text àrab), i un poema clàssic es compon un bayt per línia en dos hemistiquis d'una mateixa amplada amb:::verse(vegeu:::verse). - Índex analític. Un índex en àrab ordena alfabèticament i no té en compte l'article ال (
index.ignoreArticle), els signes vocàlics ni els suports de la hamza; vegeu Índex analític.
#Òrfenes, vídues, runts i regles de cohesió
Consulta Partició de mots i justificació per entendre la mecànica de demèrits que hi ha al darrere. Aquesta secció és la referència de les claus de bodyText que governen aquestes penalitzacions.
Més enllà de la partició de mots i els límits d'espaiat, la configuració del cos exposa les regles toves que eviten els salts de paràgraf estructuralment incòmodes. Totes s'injecten com a demèrits a l'algorisme de salt de línia Knuth-Plass: decanten la maquetació cap a salts nets sense imposar mai una regla dura. Posa a 0 qualsevol *Penalty per desactivar aquella penalització.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
avoidOrphans | boolean | true | Desaconsellar que un paràgraf acabi amb menys de orphanMinLines línies al principi de la columna següent. |
orphanMinLines | number | 2 | Línies mínimes requerides al principi de la columna següent quan un paràgraf es parteix. Només actiu quan avoidOrphans és true. |
orphanPenalty | number | 1000 | Demèrit afegit quan s'incompleix la restricció d'òrfenes. Valors més alts decanten més fortament l'algorisme; 0 desactiva la penalització. |
avoidOrphansInLists | boolean | true | Quan és true, els elements de llista també reben protecció contra òrfenes (no només els paràgrafs). Només té efecte si avoidOrphans és true. |
avoidWidows | boolean | true | Desaconsellar que un paràgraf comenci amb menys de widowMinLines línies al final de la columna actual. |
widowMinLines | number | 2 | Línies mínimes requerides al final de la columna actual quan un paràgraf es parteix. Només actiu quan avoidWidows és true. |
widowPenalty | number | 1000 | Demèrit afegit quan s'incompleix la restricció de vídues. 0 desactiva la penalització. |
avoidWidowsInLists | boolean | true | Quan és true, els elements de llista també reben protecció contra vídues. Només té efecte si avoidWidows és true. |
avoidRunts | boolean | true | Desaconsellar que els paràgrafs acabin amb una línia curta: una última línia molt breu, p. ex. una única paraula curta aïllada. També en el text en bandera, amb optimalRagged. Un paràgraf xinès, japonès o coreà no acaba en una línia d'un sol caràcter, sol o amb els signes que el tanquen (孤字): la línia anterior li cedeix el seu últim caràcter si encara es pot justificar dins del límit d'espaiat. |
runtMinCharacters | number | 20 | Llindar per a l'última línia d'un paràgraf, comptat en espais entre paraules, no en lletres: la línia és curta quan és més estreta que runtMinCharacters × anchoDeEspacioNormal píxels. En la majoria de tipus de lletra de text un espai fa entre un quart i un terç d'em, més o menys mitja lletra minúscula, així que el valor per defecte, 20, arriba a les últimes línies de menys de 4 a 7 em: unes 8 a 12 lletres. Per arribar a les de menys d'unes N lletres, posa-hi un valor proper a 2 × N. |
runtPenalty | number | 1000 | Penalització equivalent a badness (s'injecta a la fórmula quadràtica de Knuth–Plass, a la mateixa escala que el badness de línia, que se satura a 10000). 0 desactiva la penalització. |
gradedRuntPenalty | boolean | false | Gradua la penalització per línia curta segons com de curta es queda l'última línia: una última línia d'amplada w per sota del llindar t costa runtPenalty × (1 − w / t) en lloc de la penalització sencera. Així, un final de dues paraules costa menys que un d'una, i l'algorisme baixa una paraula quan una línia de dalt la pot cedir («…sallies of» / «our minds.» en lloc de «…sallies of our» / «minds.»). Desactivat per defecte: totes les línies curtes costen el mateix, i l'algorisme conserva les línies més atapeïdes de dalt. |
avoidRuntsInLists | boolean | true | Quan és true, els elements de llista també reben la penalització per línia curta. Només té efecte si avoidRunts és true. |
tightenRunts | boolean | true | Quan la penalització no ha pogut evitar una línia curta, compon el paràgraf amb una línia menys: els espais s'estrenyen (mai per sota de minWordSpacing) i, si amb això no n'hi ha prou, hi entra a més una mica de tracking negatiu. La composició més curta es descarta, i la línia curta es queda, si estira una línia justificada més enllà de maxWordSpacing o, si el paràgraf ja té una línia justificada més oberta, més que aquella línia, o si compon en bandera (més de 3 vegades l'espai normal) més línies que el paràgraf. Els espais del text en bandera no canvien d'amplada, així que allà només hi intervé el tracking. Requereix optimalLineBreaking i avoidRunts (i optimalRagged en el text en bandera). |
maxRuntTracking | number | 10 | Tracking màxim que pot prendre aquest ajust, en mil·lèsimes d'em (la unitat d'InDesign: 10 = 0,01 em per caràcter), aplicat com a estrenyiment. Amb 0 l'ajust es limita a l'espaiat entre paraules. |
slackWeight | number | 10 | Pes aplicat al cost quadràtic de l'"espai de columna no utilitzat". Valors més alts fan que la maquetació prefereixi omplir les columnes al màxim; 0 desactiva aquesta pressió del tot. |
keepColonWithList | boolean | true | Quan un paràgraf acaba amb dos punts que introdueixen directament una llista, manté la línia dels dos punts unida a la llista: si col·locar el paràgraf no deixa lloc perquè el primer element de la llista comenci a la mateixa columna/pàgina, l'última línia (o el paràgraf sencer, si només té una línia) es mou a la columna següent juntament amb la llista. Quant lloc és suficient ho diu colonListRoom. Quan aquesta regla hagi d'empènyer el paràgraf complet i just abans hi hagi una seqüència de títols a la columna, aquests títols també s'arrosseguen endavant perquè headings.keepWithNext es continuï complint. |
colonListRoom | 'item' | 'line' | 'item' | El lloc que demana keepColonWithList sota la línia dels dos punts. 'item': el que les regles d'òrfenes i vídues de les llistes deixarien del primer element al peu de la columna, una línia si s'hi pot partir, tot sencer si el mantenen sencer (un element de dues línies, per exemple). 'line': una línia, com fins a postext 1.4; un primer element que aquestes regles mantenen sencer passa llavors tot sol a la columna següent i deixa la línia dels dos punts al peu. Una configuració desada abans de configVersion 6, en un llibre que introdueix una llista amb dos punts, es llegeix amb 'line' (vegeu Paquets escrits per postext 1.4 o anterior). Qualsevol altre valor es llegeix com a 'item'. |
hyphenateAcrossColumns | boolean | true | Permet que una columna o una pàgina acabi en una paraula partida (l'Hyphenate Across Column d'InDesign). Amb false, el paràgraf que travessa el salt de columna es torna a tallar perquè la seva última línia a la columna acabi en una paraula sencera; els espais entre paraules de les línies de dalt absorbeixen la diferència, dins de maxWordSpacing i minWordSpacing. És una preferència: on cap tall dins d'aquests límits no ho evita, el guionet es queda. Ho intenta en tots els salts de columna d'un paràgraf: en el primer i en els següents que cauen on acaba una columna plena, amb un nou tall; i en un salt posterior que cau en un altre lloc (una vídua evitada, una banda tallada a nivell), amb un altre nou tall des d'aquella columna, que deixa les línies ja col·locades a les columnes anteriors amb els seus talls i només torna a tallar la resta. No afecta el cos dels requadres. Amb optimalRagged, un paràgraf en bandera es torna a tallar igual: els seus espais entre paraules no canvien d'amplada, així que només es mouen els finals de les seves línies. Cada nou tall mesura el paràgraf una vegada més, així que un llibre amb molts guionets al peu de columna triga una mica més a compondre's. Necessita optimalLineBreaking, i optimalRagged en el text en bandera. |
paragraphContainerSpacing | 'collapse' | 'add' | 'collapse' | L'espai sota un contenidor :::paragraphs que es tanca amb un paràgraf, entre aquest paràgraf i el bloc següent (vegeu El contenidor :::paragraphs). 'collapse': el més gran entre el spaceBetween i el marginBottom de l'estil i la separació entre paràgrafs del text que envolta el contenidor (una línia amb paragraphSpacing; en un requadre, la del requadre), fos amb l'espai que el bloc següent deixa sobre seu, com entre dos paràgrafs del text corregut: un encapçalament sota una bibliografia en queda separat pel seu propi marginTop, no per aquest marge més la separació de les entrades. 'add': com fins a postext 1.4, sota l'última línia només s'hi posa l'espai de l'estil abans de l'ajust a la retícula, l'espai que el bloc següent deixa sobre seu se suma a sota i la separació entre paràgrafs no compta, així que el paràgraf que segueix el contenidor podia quedar-hi més enganxat que a qualsevol altre. Una configuració desada abans de configVersion 8 que declara algun estil de paràgraf, en un llibre que té un d'aquests contenidors, es llegeix amb 'add' (vegeu Paquets escrits per postext 1.4 o anterior). Un marginBottom negatiu puja el bloc següent en tots dos casos. |
Sobre les línies curtes. Una línia curta (runt, en anglès) és l'última línia d'un paràgraf quan és massa curta per semblar una línia de text pròpiament dita, típicament una o dues paraules curtes encallades al final del paràgraf. Com que la comprovació es basa en l'amplada en píxels de la línia relativa a l'amplada de l'espai normal, runtMinCharacters s'adapta automàticament a la mida de font actual. Una paraula curta visualment més ampla que runtMinCharacters × anchoDeEspacio és vàlida; una paraula més estreta que això (o veritablement sola) dispara la penalització. El llindar compta espais entre paraules, que fan més o menys la meitat que una lletra: el valor per defecte, 20, equival a una última línia d'unes 8 a 12 lletres. Tota línia curta costa la penalització sencera, així que entre dos finals per sota del llindar l'algorisme conserva les línies més atapeïdes de dalt; gradedRuntPenalty valora cadascun segons el que li falta i guanya el final més llarg. Per a qui tingui curiositat matemàtica: amb el runtPenalty per defecte de 1000, evitar una línia curta domina sobre qualsevol alternativa que exigís un estirament de l'espai entre paraules de fins a aproximadament r≈2,15.
Toves, no dures. Cap d'aquestes regles no pot impedir un salt: el motor sempre produeix una maquetació. Són demèrits: l'algorisme combina en una única optimització global la "badness" (desigualtat), el cost de la partició de mots, la suavitat de classe d'encaix i aquestes penalitzacions estructurals, i tria el conjunt de salts amb el cost total més baix. Si necessites una garantia més dura, puja la penalització; si un document concret es llegeix millor amb la penalització relaxada, abaixa-la.
#Encapçalaments
La propietat headings controla la tipografia de tots els nivells d'encapçalament (H1–H6). Pots establir valors generals per defecte que s'apliquen a tots els nivells, i després sobreescriure propietats específiques per nivell.
#Valors generals per defecte
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
fontFamily | string | 'Open Sans' | Família tipogràfica per a tots els encapçalaments. |
lineHeight | Dimension | 1.2 em | Alçada de línia per als encapçalaments. Més ajustada que el cos de text. |
color | ColorValue | Color principal (#295AA3) | Color del text d'encapçalament. Enllaçat a l'entrada main-color de la paleta per defecte, de manera que canviar aquest color retenyeix tots els encapçalaments. |
textAlign | 'left' | 'justify' | 'center' | 'right' | 'start' | 'end' | 'left' | Alineació de tots els nivells d'encapçalament (no hi ha un valor per nivell): en bandera, justificada, centrada o alineada a la dreta. Un encapçalament justificat compon la seva última línia a l'esquerra, com un paràgraf, així que un encapçalament d'una sola línia es veu com 'left'. Canvas, HTML i PDF col·loquen les línies de la mateixa manera, prefix de numeració inclòs. L'obertura per defecte d'un encapçalament span: 'page' sense disseny avançat també la segueix (justificada queda a l'esquerra); un disseny avançat alinea els seus propis elements de text amb el seu align. |
fontWeight | number | 700 | Pes de font per als encapçalaments (100–900). |
marginTop | Dimension | 1.5 em | Espai sobre els encapçalaments. |
marginBottom | Dimension | 0.5 em | Espai sota els encapçalaments. |
keepWithNext | boolean | true | Quan és true, un encapçalament mai no es col·loca com a últim element d'una columna o pàgina. Si el bloc següent no tingués almenys bodyText.widowMinLines línies de buit després de l'encapçalament (o una línia quan bodyText.avoidWidows és false), l'encapçalament s'empeny endavant per quedar unit al seu text. Interactua amb bodyText.keepColonWithList: si aquesta regla ha d'empènyer del tot el paràgraf de dos punts, els encapçalaments que el precedeixen a la columna viatgen amb ell en lloc de quedar encallats. |
keepWithNextSpread | boolean | false | Amb keepWithNext, deixa igualment que un encapçalament tanqui l'última columna de text d'una pàgina parella, perquè el seu text obre llavors la pàgina senar del davant, en el mateix plec (JLReq §4.1.7). Els plecs són la pàgina 1 sola i després 2–3, 4–5…, comptats amb pageIndexOffset, tant en llibres enquadernats per l'esquerra com per la dreta. Des de postext 1.16. |
keepWithNextSplit | 'rules' | 'fill' | 'rules' | Com es divideix el paràgraf que segueix un encapçalament quan l'encapçalament queda al peu d'una columna i empènyer el paràgraf sencer el deixaria enrere. 'rules': totes les línies que hi càpiguen, sempre que en quedin almenys bodyText.widowMinLines sota l'encapçalament i en passin almenys bodyText.orphanMinLines a la columna següent; si cap divisió no compleix les dues coses, l'encapçalament passa a la columna següent amb el seu paràgraf, i l'equilibrat de columnes omple el buit que deixa. 'fill': totes les línies que hi càpiguen, encara que en passin molt poques, així que un paràgraf de quatre línies amb lloc per a tres es divideix 3 + 1. Fins a postext 1.4 tots els encapçalaments es dividien així, i les configuracions desades abans de configVersion 8 ho conserven (vegeu Paquets escrits per postext 1.4 o anterior). Amb avoidWidows o avoidOrphans desactivat, aquella part de la regla no s'aplica. |
snapToGrid | boolean | true | Si el flux torna a la retícula de base sota un títol. Amb true el marginBottom del títol s'arrodoneix a línies senceres de la retícula; amb false es conserva el marge exacte i el text sota el títol pot quedar fora de la retícula fins al punt d'ajust següent (el final d'una llista, la cua d'un :::paragraphs, una equació), com molts llibres, que deixen línia i mitja sota el títol. Un nivell (levels[].snapToGrid) o un estil d'encapçalament poden fixar el seu propi valor; aquest és el que hereten. |
inlineMarks | boolean | true | Si un encapçalament llegeix les seves marques en línia com ho fa un paràgraf: cursiva, negrita, ^superíndice^, ~subíndice~, :smallcaps[…] i enllaços. Un tram en cursiva inverteix la inclinació de l'encapçalament, així que en un encapçalament en cursiva surt en rodona; un tram en negreta pren bodyText.boldFontWeight, o el pes del mateix encapçalament si és més gran. L'índex també recull els trams en negreta i en cursiva; els titolets i els marcadors del PDF imprimeixen només el text. Amb false es treuen els marcadors i les paraules s'imprimeixen amb l'estil de l'encapçalament, com fins a postext 1.4. L'obertura per defecte d'un encapçalament span: 'page' sense disseny també compon els trams en negreta, en cursiva, en superíndex i en subíndex; el disseny d'un encapçalament (una banda d'obertura amb disseny o un advancedDesign de columna) imprimeix com a text sense marques en tots dos casos, tret que el seu element de text llegeixi les marques en línia (inlineMarks: true): llavors conserva els trams en negreta, en cursiva i en índex de l'encapçalament (des de postext 1.19). Les configuracions desades abans amb encapçalaments que porten marques es llegeixen amb false (vegeu Paquets escrits per postext 1.4 o anterior). |
balancing | ColumnBalancingConfig | activat | Equilibrat vertical de columnes: espai addicional sobre els encapçalaments perquè les columnes acabin alineades amb el peu de pàgina. Vegeu més avall. |
Encapçalaments centrats per a poemes o els actes d'una obra de teatre, sense ranura de disseny:
headings: {
textAlign: 'center',
levels: [{ level: 2, textTransform: 'uppercase' }],
}Un objecte headings conserva tots els valors per defecte de nivell que no repeteixis, inclòs el salt de pàgina d'H1 (vegeu Configuració per nivell).
#Equilibratge de columnes
Les editorials esperen que cada columna comenci a la part superior de la pàgina i acabi alineada amb la part inferior. Les regles de ruptura (protecció d'òrfenes i vídues, títols units al seu text, figures indivisibles) deixen columnes curtes de manera natural — una o més línies de retícula de base buides al final. Amb l'equilibratge activat, el motor fa el que faria un maquetista, aplicant les seves palanques en ordre de prioritat editorial:
- Una caixa que tanca la columna — un callout que acaba una columna curta baixa exactament l'espai que queda sota el seu peu, de manera que la seva vora inferior cau a l'última casella de retícula de la pàgina, a nivell amb l'última línia de la columna contigua. Ocupa aquest espai encara que sigui menor que una línia, sempre que res no passi a una altra columna. Per defecte actua abans que qualsevol altra palanca i es queda tot el buit, de manera que un requadre que comenta el paràgraf de damunt pot acabar diverses línies per sota d'aquest; amb
closingBox: 'last'els encapçalaments, els finals de llista i les altres palanques d'espai prenen abans les línies senceres, i el requadre només el que deixen, i ambclosingBox: 'off'no es mou mai. - Imatges amb zona segura — una imatge amb zona segura (
Resource.safeArea, vegeu Format del document › Zona segura) col·locada en línia a la columna curta, o flotada al seu cap o al seu peu i només sobre ella, creix en línies senceres de retícula, retallada dins de la zona segura, fins a omplir la columna o fins que el retall arriba a la zona segura. Una imatge més alta no deixa cap forat a la pàgina, així que actua abans d'afegir cap espai; un flotant al cap d'una columna d'una pàgina o banda on els caps de columna queden anivellats (vegeu més avall) no creix. S'anota com aflexFigure. No té cap ajust propi: només creix una imatge el recurs de la qual marca una zona segura. - Encapçalaments — s'afegeixen línies completes de retícula al marge superior dels encapçalaments de la columna curta. Quan calen diverses línies i la columna conté diversos encapçalaments, les línies es reparteixen entre ells, deixant sempre la major part a l'encapçalament més important (un
h2en rep més que unh3). Els encapçalaments situats al principi d'una columna no reben mai espai addicional, de manera que les columnes continuen començant a la part superior — llevat d'un encapçalament just sota una figura o taula que encapçala la seva columna en una pàgina que flueix cap a la següent: l'espai va damunt d'aquest encapçalament, sota la figura. - Finals de llista — quan els encapçalaments no poden absorbir tot el buit, s'afegeix una línia de retícula on acaba una llista o enumeració (l'aire després d'una llista es llegeix amb naturalitat), amb un màxim per llista.
- Paràgrafs correguts — com a últim recurs, es recompon un paràgraf de la columna amb una línia més (el
\looseness=+1de TeX), triant el paràgraf més llarg perquè l'espaiat addicional es dilueixi de manera invisible. La solució correguda només s'accepta quan totes les seves línies queden per sota debodyText.maxWordSpacing— el color tipogràfic mai no supera el límit que ja tinguis configurat. RequereixbodyText.optimalLineBreaking.
En una retícula de caràcters (cjk.grid, vegeu Composició xinesa › La retícula de caràcters) cada caràcter ocupa una casella d'un quadratí d'amplada i cada línia cau al pas de línies de la retícula, que és també la retícula de base. Allà l'equilibratge està desactivat per defecte, com en el text vertical: una pàgina composta línia a línia sobre una retícula, a la manera de la GB/T 9704, que compta 22 línies de 28 caràcters, deixa curta la columna que acaba curta. Una configuració que fixa enabled: true rep palanques que respecten la retícula: els encapçalaments, els finals de llista, les fórmules en bloc i les figures prenen línies senceres de la retícula, de manera que el text de sota es desplaça files senceres, i gridLines: 'off' deixa fora aquestes palanques per a una norma que no té cap fila buida per cedir. Un paràgraf xinès o japonès guanya una línia només quan cap espai entre dos dels seus caràcters no s'obre més de maxTracking, i no rep tracking a les seves lletres: una línia a la qual falta un caràcter reparteix un quadratí entre els seus espais, molt per sobre dels 0,01 em per defecte, així que en una retícula de caselles senceres la palanca de paràgrafs correguts gairebé mai no troba res. La caixa que tanca una columna i les imatges amb zona segura queden fora de la retícula per disseny i funcionen com a qualsevol altra pàgina.
L'última columna d'una pàgina només s'equilibra quan la pàgina flueix de manera natural cap a la següent — la pàgina final d'un capítol acaba curta de manera legítima. Aquesta pàgina, i una banda de tancament tallada a nivell per trailing, mantenen a més els caps de les seves columnes a la mateixa altura: no s'afegeix cap línia sota una figura o taula que encapçali una de les seves columnes (la palanca després de flotants), i un encapçalament o una caixa que obre una columna sota aquesta figura es queda al seu cap, digui el que digui stretchAfterFloats, de manera que cap columna no comença més avall que la veïna només per igualar els peus.
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
enabled | boolean | true | Si s'equilibren els finals de columna. Desactivat per defecte en text vertical (layout.writingMode: 'vertical-rl') i en una retícula de caràcters (cjk.grid.enabled, des de postext 1.25); true l'activa també allà. |
maxLinesPerHeading | number | 4 | Nombre màxim de línies de retícula addicionals que es poden afegir damunt d'un mateix encapçalament. |
stretchAfterLists | boolean | true | Permet línies de retícula addicionals on acaba una llista, quan els encapçalaments no poden absorbir tot el buit. |
maxLinesAfterList | number | 1 | Nombre màxim de línies de retícula addicionals després del final d'una mateixa llista. |
stretchAfterFloats | boolean | true | Permet línies de retícula addicionals sota una figura o taula que encapçala la columna curta (un flotant superior), després de la palanca dels finals de llista, de manera que el text de sota baixa en lloc d'acabar la columna curta. Mai en una pàgina que no flueix cap a la següent (la pàgina final d'un capítol) ni en una banda de tancament tallada a nivell per trailing: allà els caps de les columnes queden a la mateixa altura i l'última columna pot acabar una línia més curta. El primer bloc sota la figura pot ser la continuació d'un paràgraf començat a la pàgina anterior: baixa igualment, la línia que les regles de tall van deixar lliure al peu de la columna (una línia que la regla de vídues va deixar buida, o un espai entre paràgrafs sense lloc per a text al darrere). Amb false, el text queda just a sota de la figura. |
maxLinesAfterFloat | number | 1 | Nombre màxim de línies de retícula addicionals sota un mateix flotant superior. |
looseParagraphs | boolean | true | Últim recurs: recompon paràgrafs d'una columna curta amb una línia més (una línia extra cadascun), sense superar bodyText.maxWordSpacing. |
maxLooseParagraphs | number | 2 | Quants paràgrafs d'una mateixa columna curta poden guanyar una línia, els més llargs primer. |
trackParagraphs | boolean | true | Quan amb l'espaiat entre paraules no n'hi ha prou per guanyar la línia, el paràgraf corregut pot prendre a més el menor tracking positiu (interlletratge) que ho aconsegueixi. |
maxTracking | number | 10 | Límit d'aquest tracking, en mil·lèsimes d'em per caràcter (10 = 0,01 em). |
trailing | boolean | true | Anivella la banda de tancament de cada capítol i del document: quan el flux acaba abans d'omplir la pàgina (en una obertura de capítol, un :::part, una caixa placement: 'fixed' que tanca el capítol o el final del document) amb les columnes desiguals, es tallen a la mateixa altura — un topall de banda de ceil(Σ usado / N / rejilla) línies, resolt després que les palanques anteriors hagin assentat les pàgines prèvies —, de manera que una bibliografia curta acaba a la mateixa altura a totes les columnes en lloc d'omplir la primera i deixar l'última a mitges. El tall respecta les regles d'una banda sense tallar: quan un bloc que no s'hi pot partir (el final d'un paràgraf que els mínims d'òrfenes i vídues mantenen sencer, una caixa que no es parteix) el sobrepassaria — i perdria les seves últimes línies, perquè els renderitzadors retallen cada columna a la seva caixa — o un encapçalament tancaria una columna mentre el seu text obre la següent (amb headings.keepWithNext, el valor per defecte), el tall baixa una línia, fins a tres vegades, i si no n'hi ha prou es descarta. Un bloc que no pot començar a les línies que el tall deixa sota una figura que encapçala una columna (un paràgraf hi necessita el seu mínim d'òrfenes) passa a la columna següent de la banda, com ho faria des d'una columna sense tallar, i la figura queda sola a la seva columna. Les columnes els peus de les quals difereixen en una línia de la retícula o menys es deixen com estan: una banda de tancament l'última columna de la qual acaba una línia més curta és el final habitual, i tallar-la només mouria una línia. El tall va a la banda en què es va mesurar, igual que el que demana una caixa d'amplada de pàgina a mitja pàgina: fins a postext 1.4, quan el primer text de la pàgina de tancament s'havia ofert abans a una banda sense lloc per a ell (una pàgina que ocupa sencera un flotant, la banda estreta que deixa al peu de la pàgina anterior una caixa d'amplada de pàgina), el tall es gastava en aquesta banda i la pàgina de tancament deixava totes les seves línies a la primera columna. Les columnes d'amplades diferents (una disposició de columna i mitja amb text a les dues) es tallen per superfície, ponderant l'altura de cada columna per la seva amplada, perquè una línia de la columna estreta porta menys text. Només actua quan enabled és true. |
beforeSpan | boolean | true | Anivella la banda que deixa enrere un bloc d'amplada de pàgina: quan un avís span: 'page' no cap sota les columnes actuals ni tan sols després d'un tall anivellat, i ha de passar a la pàgina següent o partir-se (calloutStyles[].keepTogether: false), les columnes que interromp es tallen a la mateixa altura — el mateix topall de tancament que rep una banda final — en lloc que la primera ompli la pàgina i l'última acabi curta. La pàgina queda com a salt explícit perquè les palanques anteriors no tornin a estirar la seva última columna fins al peu; la caixa, o la part que hi cap, queda llavors sota les columnes anivellades. Només actua quan enabled és true. |
closingBox | 'first' | 'last' | 'off' | 'first' | Quan pren un requadre que tanca una columna curta l'espai sota el seu peu (la palanca 1, registrada com a trailingCallout). 'first': abans que qualsevol altra palanca, com fins a postext 1.4 — el requadre es queda tot el buit, encara que siguin diverses línies, i els encapçalaments de damunt no reben res. 'last': després de les palanques d'encapçalaments, finals de llista, fórmules i flotants, que prenen abans les línies senceres; el requadre baixa amb el text de damunt i després pren només el que han deixat, normalment una fracció de línia, de manera que el seu peu continua caient a l'última casella de la retícula i queda a prop del text que comenta. 'off': mai; el requadre conserva l'espai sota el seu peu, tot i que les altres palanques encara el poden baixar línies senceres quan afegeixen espai per damunt, i la fracció de línia que sobra s'hi queda. En una pàgina de tancament, on el requadre és l'única palanca que alinea el seu peu amb la columna contigua, 'off' el deixa on l'ha posat el flux. Qualsevol altre valor es llegeix com a 'first'. Un requadre que tanca l'única columna de text de la seva banda (una pàgina d'una sola columna que acaba abans d'hora i el bloc següent de la qual obre la pàgina següent) no es mou mai: no hi ha cap columna al costat amb què alinear-lo (des de postext 1.19). |
gridLines | 'allow' | 'off' | 'allow' | En una retícula de caràcters: si poden actuar les palanques que afegeixen línies senceres de la retícula (damunt d'un encapçalament, on acaba una llista, sota una fórmula en bloc o una caixa, sota una figura que encapçala la columna). Mantenen cada caràcter a la seva casella; 'off' convé a una norma que compta les línies de la pàgina, i deixa curta la columna. Sense efecte fora de la retícula. Qualsevol altre valor es llegeix com a 'allow'. Des de postext 1.25. |
Quina palanca ha actuat
La maquetació deixa constància de cada palanca que aplica, al bloc sobre el qual l'aplica: block.balancing al VDT que retorna buildDocument. Una prova d'impremta, un test o un informe poden dir per què una columna acaba alineada — i quines columnes no va poder tancar cap palanca. Els blocs que l'equilibratge deixa com estaven no porten balancing, i un document compost amb enabled: false no el porta en cap.
En una retícula de caràcters el document diu per què una columna pot acabar curta: doc.gridBalancing és { off: true } quan l'equilibratge està desactivat perquè la pàgina va sobre una retícula i la configuració no l'activa, i { gridLines: 'off' } quan actua sense les palanques de línies senceres; una columna que continua curta porta column.gridRefused, les palanques que la retícula li ha negat ('looseParagraph' quan un paràgraf només podia guanyar la seva línia traient els caràcters de les seves caselles, i les palanques de línies senceres amb gridLines: 'off'). Cap dels dos no apareix fora de la retícula.
interface VDTBalancing {
levers: BalanceLever[]; // normalment una: un paràgraf després d'una llista pot prendre la línia de final de llista i a més guanyar una línia
spaceAbove: number; // px que les palanques d'espaiat han afegit damunt del bloc (0 si només ha actuat looseParagraph o flexFigure)
bodyGrowth?: number; // flexFigure: px que ha crescut la imatge, retallada dins de la zona segura
extraLines?: number; // looseParagraph: línies que ha guanyat el paràgraf
tracking?: number; // looseParagraph: el tracking amb què les ha guanyades, en mil·lèsimes d'em (0 = només amb l'espaiat entre paraules)
}
type BalanceLever = 'trailingCallout' | 'flexFigure' | 'heading' | 'listEnd' | 'afterDisplay' | 'afterFloat' | 'looseParagraph';| Palanca | Es registra a | Què ha fet |
|---|---|---|
trailingCallout | el bloc del marc de l'avís | Una caixa que tanca la columna ha baixat exactament l'espai que quedava sota el seu peu (spaceAbove; pot ser una fracció de línia). |
flexFigure | el bloc de la imatge (en línia) o el flotant | Una imatge amb zona segura composta bodyGrowth px més alta, en línies senceres de retícula, retallada dins de la zona segura. El bodySource del bloc del recurs és la part que es veu, i bodyFlex.delta el mateix creixement. |
heading | l'encapçalament | Línies senceres de retícula damunt de l'encapçalament, fins a maxLinesPerHeading. |
listEnd | el primer bloc després de la llista | Una línia de retícula on acaba una llista, fins a maxLinesAfterList. |
afterDisplay | el bloc després de la fórmula o la caixa | Una línia de retícula sota una fórmula en bloc o una caixa d'avís. |
afterFloat | el primer bloc de la columna | Una línia de retícula entre una banda de flotants que encapçala la columna i el seu text, fins a maxLinesAfterFloat. |
looseParagraph | el paràgraf | El paràgraf recompost extraLines més llarg, amb el menor tracking que ho ha aconseguit (tracking; block.letterSpacing és el mateix valor en px). |
Els talls anivellats es registren a les columnes que tallen: column.bandCapped val true a tota columna tallada a nivell (la banda que deixa un bloc d'amplada de pàgina, una banda de tancament), i column.trailingCap marca a més la banda de tancament d'un capítol o del document (trailing).
import { buildDocument } from 'postext';
const doc = buildDocument(content, config);
for (const page of doc.pages) {
page.columns.forEach((column, i) => {
const levers: string[] = column.blocks.flatMap((block) => block.balancing?.levers ?? []);
if (column.trailingCap) levers.push('banda de tancament anivellada');
else if (column.bandCapped) levers.push('banda anivellada');
if (levers.length > 0) console.log(`pàgina ${page.index + 1}, columna ${i + 1}: ${levers.join(', ')}`);
});
}
// pàgina 3, columna 1: heading, heading
// pàgina 3, columna 2: listEnd, looseParagraph#Configuració per nivell
Cada nivell d'encapçalament pot sobreescriure els valors generals a través de l'array levels. Només fontSize (més el breakBefore d'H1, indicat a sota) difereix per defecte — totes les altres propietats s'hereten de la configuració general d'encapçalaments.
| Nivell | Mida de font per defecte | breakBefore per defecte |
|---|---|---|
| H1 | 18 pt | { enabled: true, parity: 'always-odd' } |
| H2 | 15 pt | { enabled: false, parity: 'any' } |
| H3 | 12 pt | { enabled: false, parity: 'any' } |
| H4 | 10 pt | { enabled: false, parity: 'any' } |
| H5 | 9 pt | { enabled: false, parity: 'any' } |
| H6 | 8 pt | { enabled: false, parity: 'any' } |
El valor per defecte d'H1 reprodueix la maqueta clàssica d'un llibre: cada encapçalament de nivell superior s'obre en una pàgina dreta (senar) nova, amb una pàgina separadora en blanc obligatòria que tanca el capítol anterior. Anul·la levels[0].breakBefore si el teu document és més pla que un llibre.
El breakBefore d'un nivell es combina camp a camp amb aquest valor per defecte, i un objecte headings que no el menciona el conserva. { parity: 'odd' } a H1 manté el salt i només canvia la paritat; { enabled: false } deixa que els capítols vagin seguits:
headings: {
fontFamily: 'Merriweather', // H1 continua saltant a una pàgina senar nova (always-odd)
levels: [{ level: 1, breakBefore: { parity: 'odd' } }], // …o: a una senar, sense pàgina en blanc obligatòria
}
headings: { levels: [{ level: 1, breakBefore: { enabled: false } }] } // capítols seguitsCanvia a postext 1.5. Fins a postext 1.4, qualsevol objecte headings desactivava el salt d'H1 llevat que es repetís levels[0].breakBefore, i un breakBefore parcial completava el camp que faltava amb el valor sense salt. Per això una configuració escrita en codi per a la 1.4 amb un objecte headings i sense salt d'H1 obre ara cada capítol en una pàgina senar nova, amb pàgines parelles en blanc on calgui. Perquè els capítols continuïn anant seguits, n'hi ha prou amb un camp a l'entrada d'H1 de levels:
headings: { fontFamily: 'Merriweather', levels: [{ level: 1, breakBefore: { enabled: false } }] } // com ho componia la 1.4On la configuració estava desada, el motor ho pot saber i ho fa per tu: el Sandbox amb els llibres i les configuracions que va desar llavors (vegeu Sandbox → Persistència), i openBundle / readBundle amb un paquet .postext escrit per postext 1.4 o anterior (vegeu Paquets escrits per postext 1.4 o anterior). Una configuració que vas desar tu pot passar per migrateConfig(config) de postext/bundle, que escriu els salts tal com els componia la 1.4 (pinLegacyHeadingBreaks): enabled: false en un H1 que no tenia salt, i parity: 'any' al costat d'un enabled: true que no indicava paritat, a H1 i als estils d'encapçalament. També fixa la mida de les fórmules, l'espai al voltant de les figures en línia (també als requadres), les marques en línia dels encapçalaments, la mida de les caplletres, el lloc sota una línia de dos punts que introdueix una llista, les línies que deixa d'un paràgraf o d'un element de llista el tall d'una caixa, els talls de línia després d'un guió llarg, la composició línia a línia del text en bandera, la divisió d'un paràgraf sota un encapçalament, els talls de línia després del guionet d'un compost i l'espai sota els contenidors :::paragraphs, tal com els componia la 1.4. Si li passes el markdown del llibre com a tercer argument, { content }, omet la fixació de les fórmules quan el text no té cap $, les dels buits quan cap línia no insereix un recurs (la del buit als requadres quan cap no ho fa dins d'un requadre), la de les marques quan cap encapçalament no en porta cap, la dels dos punts quan cap llista no segueix una línia que acaba en dos punts, la del tall de les caixes quan el text no obre cap :::callout, la dels guions llargs quan cap guió llarg no va entre paraules sense espais, la de la divisió sota un encapçalament quan el text no té cap encapçalament, la dels contenidors quan el text no obre cap contenidor :::paragraphs, i la dels compostos quan cap guionet no va entre dues lletres; la del text en bandera només s'aplica a una configuració que posa en bandera algun text corregut, i la dels contenidors només a una que declara algun estil de paràgraf (vegeu Paquets escrits per postext 1.4 o anterior). Per fixar només els salts, crida pinLegacyHeadingBreaks(config).
Les configuracions per nivell admeten les mateixes propietats que els valors generals — fontSize, lineHeight, fontFamily, color, fontWeight, marginTop, marginBottom, snapToGrid — més aquests camps exclusius de cada nivell (un estil d'encapçalament també els admet):
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
italic | boolean | false | Renderitza l'encapçalament en cursiva. Es combina amb el fontWeight. |
textTransform | 'none' | 'uppercase' | 'none' | Passa a majúscules el títol de l'encapçalament (el prefix de numeració es conserva tal qual, igual que un chip o l'etiqueta d'una :ref que hi hagi). Conserva la longitud del text perquè el mapa d'origen de l'editor continuï sent 1:1: els caràcters la majúscula dels quals s'expandeix (ß → SS) es deixen com estan. El títol transformat alimenta també el marcador {titleText} dels dissenys avançats i les obertures de capítol. Els marcadors del PDF conserven el títol tal com es va escriure —Contribucions dels autors, no CONTRIBUCIONS DELS AUTORS—, igual que text-transform en CSS no toca el text en si (fins a postext 1.4 sortien en majúscules). |
letterSpacing | Dimension | 0 | Espaiat entre lletres després de cada glif de l'encapçalament —espais i prefix de numeració inclosos—, com letter-spacing en CSS. Un valor positiu obre les lletres (les versals compostes amb textTransform: 'uppercase' solen demanar-ne una mica: { value: 0.12, unit: 'em' }); un de negatiu estreny un cos de titular. Un valor en em és relatiu al fontSize del nivell. Les línies de l'encapçalament es mesuren amb aquest valor, de manera que tallen on acaba el text espaiat, i canvas, HTML i PDF el pinten igual. Una línia centrada o alineada a la dreta es col·loca per les seves lletres: l'espaiat que segueix el seu últim glif no compta, com en el text dels dissenys, així que un encapçalament centrat queda alineat amb l'obertura per defecte d'un encapçalament span: 'page'. Un nivell dibuixat amb el seu advancedDesign l'ignora, com els altres camps tipogràfics d'aquesta taula: cada element de text del disseny té el seu propi letterSpacing. Un estil d'encapçalament també el pot fixar, per als encapçalaments que l'usen. Fins a postext 1.4 els encapçalaments no tenien espaiat entre lletres, i la clau es descartava sense avís. |
lineSpan | number | sense fixar | Línies que ocupa (行取り, JLReq §4.1.6): l'encapçalament es compon en una banda d'aquest nombre de línies del text, amb els caràcters centrats en ella, en lloc de marginTop i marginBottom; 3 és un encapçalament 3行取り. La banda comença en una línia del text quan l'encapçalament s'ajusta a la retícula, i el text que el segueix es queda a la retícula, en els dos modes d'escriptura i amb cjk.grid; un encapçalament les línies del qual necessiten més pren el nombre enter següent. El centre és el dels caràcters (la línia de base menys el centre ideogràfic de la font), com el mesura JLReq, no el de les caixes de línia. No s'aplica a les obertures (span: 'page'), als encapçalaments dibuixats amb un advancedDesign, als encapçalaments ocults ni als encapçalaments dins de requadres. Un estil d'encapçalament pot fixar 0 per treure el del seu nivell. Des de postext 1.16. |
indent | Dimension | 0 | Sagnat de l'encapçalament des del principi de la línia (字下げ), amb em igual al cos del text, perquè els llibres japonesos compten els sagnats dels títols en caràcters del text (JLReq §4.1.3): { value: 6, unit: 'em' } és 6字下げ sigui quin sigui el cos de l'encapçalament. La mesura s'estreny en aquesta quantitat, i un encapçalament centrat es centra en el que queda. Des de postext 1.16. |
firstLineIndent | Dimension | 0 | Sagnat només de la primera línia de l'encapçalament, comptat des d'indent i, com aquest, en quadratins del text: les línies següents d'un encapçalament llarg comencen a indent (al principi de la línia si no es fixa), com la GB/T 9704 compon tots els nivells de títol dos caràcters endins amb les línies següents al marge: { value: 2, unit: 'em' }. Amb cjk.grid activat, dos quadratins del text són dues cel·les de la retícula. Un encapçalament numerat imprimeix el número després del sagnat, de manera que la plantilla de numeració no necessita espais ideogràfics, que s'imprimirien també a l'índex i als marcadors del PDF. Funciona en text vertical (des del capdamunt de la línia), amb el compositor CJK (un parèntesi d'obertura al principi de l'encapçalament segueix les regles de principi de línia, com en un paràgraf) i amb Knuth–Plass. Un encapçalament centrat el pren com un paràgraf centrat: la primera línia es centra en el que queda després del sagnat. {firstLineIndent=N} després del títol d'un encapçalament el fixa per a aquell encapçalament, i {firstLineIndent=0} treu el del seu nivell. Des de postext 1.24. |
jidori | number | sense fixar | Espaiat uniforme (字取り): un encapçalament d'una línia més estret que aquest nombre dels seus quadratins propis s'espaia per igual fins a mesurar exactament aquesta amplada, així que 3 compon 序章 com a 序 章. Els títols més amples i els encapçalaments de diverses línies es queden com són. {jidori=N} després del títol d'un encapçalament el fixa per a aquest encapçalament, i {jidori=0} desactiva el del seu nivell. Des de postext 1.16. |
dropCap | ParagraphDropCap | false | cap | Una caplletra que obre el primer paràgraf de cos després d'un encapçalament d'aquest nivell (vegeu Caplletres): un sol ajust dona la seva inicial a tots els capítols. Un encapçalament la desactiva amb {dropcap=false} o en fixa les línies amb {dropcap=2}. Des de postext 1.23. |
numberingTemplate | string | '' | Plantilla del número automàtic del nivell. Un token … imprimeix el comptador acumulat d'aquest nivell d'encapçalament, opcionalment formatat amb un sufix — romans en majúscula, romans en minúscula, / alfabètic, amb zero a l'esquerra, en lletres (vint-i-u), com a ordinal (vint-i-unè), en numerals xinesos (japonesos en un document japonès: 第百一章), xifra a xifra, en numerals financers i en cercle, o qualsevol nom de Grafies dels formats de numeració — i la resta del text és literal ('Capítol . ', '.', '第回' per a 第一百二十回; una barra inversa escapa una clau literal). Un token el comptador del qual encara és buit es plega juntament amb el separador contigu. Buida (el valor per defecte) vol dir sense número automàtic. El número resultant s'anteposa al títol en el flux, alimenta el marcador d'una ranura de disseny avançat (on el prefix no s'anteposa) i s'imprimeix a l'índex de continguts. Vegeu Números en lletres per a les paraules, i Estils d'encapçalament per donar a alguns encapçalaments d'un nivell una plantilla pròpia. |
numberSeparator | string | ' ' | El que separa el número del títol: a la columna, a l'obertura per defecte d'un nivell span: 'page', als titolets que imprimeixen la línia de l'encapçalament i als marcadors del PDF. El separador del nivell 1 uneix també el número i el títol d'una part a la pàgina de part i a la fila de part de l'índex de continguts quan no tenen disseny propi. Els capítols xinesos porten un espai ideogràfic o res (' ': 第一回 甄士隱夢幻識通靈). L'índex de continguts conserva la seva pròpia columna de números (toc.levels[].numberGap). Un estil d'encapçalament pot fixar el seu. Quan un títol es parteix en dos amb , com els títols aparellats de les novel·les xineses, les formes d'una sola línia (la columna, l'índex de continguts, els titolets) uneixen les dues meitats amb un espai ideogràfic si a banda i banda hi ha caràcters xinesos o japonesos, i amb un espai en els altres casos. |
numberPosition | 'before' | 'replace' | 'before' | On va el número generat. 'before': davant del títol, unit per numberSeparator. 'replace': el número és el títol sencer i el títol escrit al text font no s'imprimeix, de manera que # Nit amb numberingTemplate: 'الليلة {1:ordinal-feminine}' imprimeix الليلة الثانية. L'índex general llista el número com a títol de l'entrada (sense columna de número), i les capçaleres (, ) i els marcadors del PDF també el llegeixen; queda buit en aquest títol. Només per a títols numerats amb plantilla (la del nivell o la del seu estil); els altres conserven el seu títol. Un estil de títol pot fixar el seu, 'before' per conservar els títols que el seu nivell substituiria. |
breakBefore | HeadingBreakBeforeConfig | H1: { enabled: true, parity: 'always-odd' }H2–H6: { enabled: false, parity: 'any' } | Força un salt de pàgina abans de cada encapçalament d'aquest nivell. parity: 'odd' / 'even' restringeix a més en quin costat del plec s'obrirà — s'insereix una pàgina en blanc de farciment quan calgui (continua comptant per a la numeració). 'always-odd' / 'always-even' garanteixen a més almenys una pàgina separadora en blanc obligatòria entre el contingut anterior i el nou encapçalament (la separadora pertany al capítol anterior; qualsevol farciment de paritat addicional pertany al nou). Quan l'encapçalament és el primer bloc del document i la primera pàgina continua buida, la imposició de paritat s'omet — l'encapçalament aterra a la pàgina 1 tal qual. Un camp sense definir conserva el valor per defecte del nivell: { parity: 'odd' } a H1 continua saltant. |
hidden | boolean | false | Un encapçalament estructural: no imprimeix res ni ocupa espai a la columna ni dins d'una caixa :::callout — ni text, ni marges, ni banda d'obertura —, però fa tota la resta del que fa un encapçalament. El seu breakBefore continua obrint pàgina, obre la secció del seu estil, compta (llevat que el seu estil digui numbered: false) i apareix a :::toc, a les capçaleres amb i als marcadors del PDF. Per a una dedicatòria, una pàgina d'epígraf o un colofó que l'índex i els marcadors del lector necessiten, però que la pàgina no mostra. Millor en un estil d'encapçalament que en un nivell sencer; un encapçalament el sobreescriu amb / . |
headings: {
fontFamily: 'Merriweather',
levels: [
// Preajust canònic de llibre: els capítols s'obren a la pàgina dreta (senar).
{ level: 1, fontSize: { value: 24, unit: 'pt' }, breakBefore: { enabled: true, parity: 'odd' } },
{ level: 2, fontSize: { value: 18, unit: 'pt' }, italic: true },
]
}snapToGrid també funciona per nivell. Sense fixar, un nivell segueix headings.snapToGrid; fixat, el substitueix — així un mateix document pot deixar els seus H2 a línia i mitja del seu text, fora de la retícula fins al següent punt d'ajust, mentre els seus H3 arrodoneixen l'espai inferior a línies senceres de la retícula. Un estil d'encapçalament també el pot fixar, per als encapçalaments que l'usen.
headings: {
marginBottom: { value: 1.5, unit: 'em' },
levels: [
{ level: 2, snapToGrid: false }, // exactament 1,5 em sota cada H2
{ level: 3 }, // hereta headings.snapToGrid: true
],
}#Saltar abans
breakBefore és ortogonal als controls de numeració: activar-lo força un salt de pàgina, però el comptador numèric només es reinicia quan insereixes explícitament una directiva :::numbering. Les pàgines de farciment per paritat compten com a pàgines reals a la seqüència i reben capçaleres/peus segons les seves regles normals de senar/parell.
Un :::pagebreak just abans d'un d'aquests encapçalaments no substitueix el seu salt: l'encapçalament aplica igualment la seva paritat després de la pàgina que va obrir la directiva, cosa que pot afegir una pàgina en blanc. Vegeu Estils d'encapçalament per a un encapçalament que hagi de començar just després d'un salt manual.
Valors de paritat
| Valor | Comportament |
|---|---|
'any' (per defecte) | Sense restricció de paritat. L'encapçalament simplement s'obre a la pàgina següent. |
'odd' | Garanteix que l'encapçalament s'obri en una pàgina senar (costat dret). Només s'insereix una pàgina en blanc si la pàgina natural següent fos parella. |
'even' | Igual però per a una pàgina parella (costat esquerre). |
'always-odd' | Garanteix almenys una pàgina separadora en blanc obligatòria entre el contingut anterior i el nou encapçalament, i després força la paritat senar. Útil quan cada capítol ha de començar un plec nou. |
'always-even' | Igual però per a una pàgina parella. |
Pertinença de les pàgines en blanc
Les pàgines en blanc que insereix breakBefore reben la capçalera {chapterTitle} en funció del motiu de la inserció:
- Les pàgines inserides per satisfer una restricció de paritat (
'odd','even', o la cua de paritat de'always-*') pertanyen al capítol entrant. El seu marcador{chapterTitle}es resol al títol del nou capítol — perquè la pàgina en blanc només existeix per empènyer el nou capítol fins a la paritat correcta. - La pàgina separadora obligatòria que insereix
'always-odd'/'always-even'pertany al capítol anterior. És una pausa de tancament de capítol deliberada, així que{chapterTitle}continua mostrant el títol del capítol sortint.
Les capçaleres i la paleta d'una secció amb estil (vegeu Estils d'encapçalament) segueixen les mateixes dues regles a les pàgines en blanc.
Excepció a l'inici del document
Quan el primer bloc del document és un encapçalament amb breakBefore activat — o la font comença amb :::pagebreak —, la imposició de paritat s'omet mentre la primera pàgina continuï buida. L'encapçalament aterra a la pàgina 1 tal qual, independentment de la paritat configurada, de manera que un document que comença amb # Capítulo 1 amb parity: 'odd' no arrossega una pàgina en blanc inicial innecessària. Un cop s'ha col·locat qualsevol contingut, la imposició de paritat funciona de la manera habitual.
#Span i disseny avançat
Cada nivell d'encapçalament admet dos camps addicionals que controlen com es renderitza l'encapçalament com a obertura de capítol a pàgina completa.
| Propietat | Tipus | Predeterminat | Descripció |
|---|---|---|---|
span | 'column' | 'page' | 'column' | Quan és 'page', l'encapçalament es tracta com a obertura de capítol i el seu disseny avançat (si està habilitat) s'adjunta a la pàgina com una banda d'obertura per damunt del cos. Combina-ho amb breakBefore.enabled: true perquè l'obertura comenci de manera fiable en una pàgina nova. Sense un disseny propi, el títol el pinta una obertura per defecte a tota l'amplada de la caixa de text, amb la tipografia i l'interlineat del nivell i amb els seus trams en negreta, en cursiva, en superíndex i en subíndex (headings.inlineMarks), i la banda es mesura a aquesta amplada. La banda reserva totes les línies que pinta l'obertura: si aquesta ocupa més línies que la mesura del mateix encapçalament (un títol justificat els espais del qual cabrien estrets en una línia, un salt forçat ), la banda també les pren. Fins a postext 1.4 la banda es mesurava amb el títol ajustat a l'amplada de la columna, de manera que un títol que cap en una línia a l'amplada de la caixa ocupava una banda de dues línies, amb la línia centrada. Les altres columnes comencen sota la banda com la columna del mateix encapçalament. El text que n'obre una comença on començaria el text just a sota de l'obertura, vingui el que vingui després de l'obertura en la seva columna: el marginBottom de l'obertura per sota del seu títol o del seu disseny, portat a la línia següent de la retícula quan el nivell s'hi ajusta. Un encapçalament, una fórmula en bloc o una entrada de l'índex que n'obre una queda a l'altura del primer encapçalament o fórmula en bloc que hi ha sota l'obertura, amb els marges que hi té; si la columna de l'obertura continua amb una altra cosa, comença on comença aquest text. Un encapçalament ocult sota l'obertura no compta, i l'espai que l'equilibri de columnes afegeix damunt de l'encapçalament que hi ha sota l'obertura no es repeteix a les altres columnes. El que aquestes columnes ajusten a la retícula cau a la retícula de la pàgina. Fins a postext 1.4 el seu primer bloc quedava al peu de la banda: fora de la retícula quan la banda acabava entre dues línies, i enganxat a la banda, sense marge, quan l'obertura anava seguida d'un encapçalament (una línia més amunt que ara si la banda acabava a la retícula); a més, un encapçalament en aquest lloc perdia el marge superior que conservava el de la primera columna. |
spanBreak | boolean | true | Si un encapçalament span: 'page' comença una pàgina nova. true obre la pàgina següent (amb el costat que triï breakBefore). false, amb breakBefore.enabled: false, l'obre on arriba el text, com un requadre de pàgina: les columnes de sobre acaben a la mateixa alçada (la banda s'equilibra quan headings.balancing.trailing és actiu), el disseny de l'encapçalament o l'obertura per defecte es compon a tota l'amplada de la caixa sota elles i el text continua a totes les columnes per sota: el segon article d'un butlletí sota el final del primer. Si l'espai que queda no basta per a l'encapçalament i el mínim de línies vídues sota seu, obre la pàgina següent com amb true. El paper de la pàgina continua sent el que li dona el primer bloc. No afecta un encapçalament span: 'column'. També en un estil d'encapçalament. Des de postext 1.19. |
advancedDesign | HeadingAdvancedDesignConfig | | Ranura de disseny de composició lliure per a aquest nivell. Quan està enabled, els elements de la ranura componen l'obertura. Fes servir dins d'un element de text per renderitzar el text del títol; , , etc. per inserir el número de l'encapçalament. |
advancedDesign.minHeight | Dimension | — | Alçada mínima reservada per a l'encapçalament en el flux de la columna. L'encapçalament ocupa max(fons del contingut del disseny, minHeight) i, a sota, el marginBottom de l'encapçalament (el del seu estil d'encapçalament, el del seu nivell o headings.marginBottom; 0,5 em del cos de l'encapçalament si cap no en fixa un altre); la suma s'arrodoneix cap amunt a la retícula de base quan els encapçalaments s'hi ajusten. Així una obertura pot empènyer el cos cap avall (o reclamar la pàgina sencera) encara que els seus elements siguin baixos o estiguin ancorats als marcs de pàgina/sang per damunt de l'encapçalament. Per a una franja d'exactament minHeight, posa aquest marginBottom a 0 i dona a minHeight un nombre enter de línies de la retícula. S'aplica sempre que enabled sigui true, fins i tot amb la ranura buida. Vegeu Alçada reservada per saber què compta en el fons del contingut del disseny. |
Una obertura tan alta com la pàgina. Quan l'alçada reservada arriba més enllà del peu de la columna — una portada el minHeight de la qual és l'alçada de la pàgina, una imatge o una caixa ancorada a la pàgina o a la sang que baixa fins al tall —, l'obertura reclama la resta de la pàgina: el text que la segueix comença a la pàgina següent, igual a totes les columnes d'una disposició a dues columnes o de columna i mitja. Per això una portada no necessita un :::pagebreak darrere (posar-lo no fa mal: no afegeix cap pàgina en blanc). Un encapçalament de columna (span: 'column') el disseny del qual és més alt que la seva columna reclama aquesta columna, i el text comença al capdamunt de la següent. El bloc de l'encapçalament baixa llavors fins al peu de la columna que reclama, i el seu disseny es compon contra aquesta banda: els elements ancorats a dalt es queden on són ancorats, i els que segueixen la banda —ancorats al seu centre o al seu peu, o amb alçada 'fill'— s'ajusten a l'espai que reclama l'encapçalament, igual que s'ajusten a l'alçada reservada quan hi cap (fins a postext 1.4 el bloc conservava l'alçada del seu text, de manera que aquests elements es componien contra una banda de l'alçada del títol, i el text que el seguia s'esmunyia sota el disseny). Els adorns de pàgina que no l'han de reclamar — una franja al llarg de tot el tall davanter, un ornament al peu de la pàgina — van al disseny de la capçalera o del peu: ancorats a 'page' o a 'bleed' i mostrats amb pages: 'opener', es pinten a la pàgina d'obertura sense reservar espai del cos.
Exemple — una obertura de capítol minimalista que mostra «Capítol N» damunt del títol:
{
"headings": {
"levels": [
{
"level": 1,
"span": "page",
"breakBefore": { "enabled": true, "parity": "always-odd" },
"advancedDesign": {
"enabled": true,
"slot": {
"elements": [
{
"kind": "text",
"id": "chapterLabel",
"placement": {
"anchor": { "to": "container", "edge": "top" },
"offset": { "y": { "value": 48, "unit": "pt" } },
"size": { "width": "fill" }
},
"content": "Capítol {numberRoman}",
"fontSize": { "value": 10, "unit": "pt" },
"align": "center",
"overflow": "ellipsis-end"
},
{
"kind": "text",
"id": "chapterTitle",
"placement": {
"anchor": { "to": "#chapterLabel", "edge": "below" },
"offset": { "y": { "value": 12, "unit": "pt" } },
"size": { "width": "fill" }
},
"content": "{titleText}",
"fontSize": { "value": 24, "unit": "pt" },
"fontWeight": 700,
"align": "center",
"overflow": "wrap",
"hyphenate": true
}
]
}
}
}
]
}
}Marcadors disponibles dins d'una ranura de disseny d'encapçalament:
{titleText}— text pla de l'encapçalament (sense prefix numèric). Un salt forçat al títol (\\) és aquí un salt de línia, tant en una banda d'obertura com en un disseny dins de la columna (fins a postext 1.4 un disseny dins de la columna imprimia un espai, tot i que la seva alçada es mesurava amb el salt). Les línies en què l'encapçalament ocult es reparteix a la seva columna es tornen a unir al títol tal com està escrit: una paraula tallada després del seu propi guionet conserva el guionet i no porta espai darrere, una paraula que la columna va dividir torna a quedar sencera, sense el guionet que hi va afegir el tall, un grup unit per un espai de no separació que no cabia a la columna i es va partir en aquest espai el recupera (Capítulo XVIII, noCapítuloXVIII), i cadascun dels altres talls retorna el seu espai. Fins a postext 1.4 cada salt de línia es convertia en un espai, de manera que un títol partit en un guionet imprimiaWord- Book, i en aquest títol es perdia un salt forçat.{number}— número formatat segonsnumberingTemplate.{numberDecimal},{numberRoman},{numberRomanLower},{numberAlpha},{numberAlphaLower}— el comptador de l'encapçalament (el compte acumulat del seu nivell, imprimeixi el que imprimeixi la plantilla) en altres formats de numeració: el tercer capítol dona3,III,iii,C,c, ambnumberingTemplateo sense. Un encapçalament sense numerar (un estil ambnumbered: false) els deixa buits.{numberWords},{numberWordsLower},{numberOrdinalWords},{numberOrdinalWordsLower}— el mateix comptador en lletres, amb majúscula inicial o en minúscula: Tres / tres, Tercero / tercero (vegeu Nombres en lletres).{numberHan}— el mateix comptador en numerals xinesos, en l'escriptura dellocaledel document: una obertura composta amb第{numberHan}回imprimeix 第十二回 al dotzè capítol mentre l'índex mostra12.{chapterNumber},{chapterTitle},{pageNumber},{totalPages},{bookTotalPages},{title},{subtitle},{author},{publishDate}— metadades compartides.{attr.<clave>}— un atribut escrit a la mateixa línia de l'encapçalament (# Título {author="I. Zango Martín"}), amb l'atribut de l'H1 del capítol actual com a alternativa. Els atributs absents es resolen com una cadena buida sense avís.
{chapterNumber} imprimeix el mateix que les capçaleres per a aquest capítol: el número de l'H1 quan el seu nivell (o el seu estil) té numberingTemplate; si no, l'ordinal del capítol —1, 2…, continuant després dels capítols maquetats abans que aquest—, i res per a un capítol sense numerar o un estil la plantilla del qual és ''. El disseny d'un encapçalament llegeix el capítol al qual pertany el seu encapçalament: un de nivell 1, el seu; un de nivell inferior, el de l'últim encapçalament de nivell 1 anterior. També és així quan dos capítols coincideixen en una pàgina, encara que les capçaleres d'aquesta pàgina imprimeixin el segon. L'alçada que reserva una obertura es mesura amb aquest mateix valor. Fins a postext 1.4 es mesurava amb el prefix numèric de l'encapçalament (buit sense plantilla), així que un disseny l'alçada del qual depengués de {chapterNumber} podia pintar-se més alt que l'espai que havia reservat; i el disseny imprimia el capítol de la pàgina, de manera que el primer de dos capítols que compartien pàgina mostrava el número del segon.
Els marcadors del comptador segueixen el llibre al llarg dels capítols compostos un a un (els comptadors que lliura continuationAfter()), i l'atribut startAt d'un encapçalament els reinicia (vegeu Format de document → Atributs d'encapçalament). Una obertura que diu Capítol III damunt d'un títol numerat 3. en el flux i a l'índex:
{
level: 1,
span: 'page',
numberingTemplate: '{1}.',
advancedDesign: {
enabled: true,
slot: { elements: [
{ kind: 'text', id: 'label', content: 'Capítol {numberRoman}', fontSize: { value: 10, unit: 'pt' }, overflow: 'ellipsis-end',
placement: { anchor: { to: 'container', edge: 'top-left' }, size: { width: 'fill', height: 'auto' } } },
{ kind: 'text', id: 'title', content: '{titleText}', fontSize: { value: 24, unit: 'pt' }, overflow: 'wrap',
placement: { anchor: { to: '#label', edge: 'below' }, size: { width: 'fill', height: 'auto' } } },
] },
},
}Alçada reservada
Un encapçalament amb disseny avançat ocupa espai a la columna com qualsevol bloc: el text de cos que el segueix comença a sota d'aquest espai. L'espai és la més gran de tres alçades, totes mesurades cap avall des de la part superior de l'encapçalament (la part superior de l'àrea de contingut en una obertura que comença la seva pàgina):
- el mateix text de l'encapçalament, amb la tipografia del nivell (queda ocult sota el disseny, però conserva les seves línies);
- el fons del contingut del disseny: la vora inferior més baixa entre els elements que compten (vegeu més avall);
advancedDesign.minHeight.
A continuació s'hi suma el marginBottom de l'encapçalament (el del seu estil d'encapçalament, el del seu nivell o headings.marginBottom; 0,5 em si cap no en fixa un altre) i el resultat s'ajusta cap amunt a la retícula de base quan els encapçalaments s'hi ajusten. En una obertura (span: 'page') la mateixa franja queda lliure a totes les columnes de la pàgina. En un encapçalament de columna que no la desborda, el disseny es compon dins de la caixa de l'encapçalament, que té exactament aquesta alçada.
Quins elements compten. Compten tots els elements del disseny —textos, filets, caixes i imatges per igual (fins a postext 1.4 un element image no comptava mai, de manera que el text podia començar damunt d'una imatge de banda si minHeight no ho impedia)—, excepte:
- els que tenen
reserve: false: decoració que pot quedar sota el text; - els que segueixen la mateixa franja: els ancorats a la fila central del contenidor (
left,center,right) o a la inferior (bottom-left,bottom,bottom-right), els que tenen una alçada'fill'respecte al contenidor (una caixa o una línia vertical sense alçada l'omplen per defecte) i qualsevol element ancorat a un d'ells. El contenidor és la franja reservada, així que aquests elements es recolzen al seu peu o l'abasten: una línia sota la franja, un plafó de color darrere del títol. Segueixen l'alçada; mai no la fixen. Un text d'entre ells que conserva la seva pròpia alçada sí que necessita lloc: un títol ancorat al peu de la franja fa que la franja mesuri almenys el que fa el títol, de manera que mai no comença per damunt de la vora superior de l'encapçalament. AmbminHeight: 36mmi el títol ancorat abottom-left, la caixa de l'encapçalament fa 36 mm més el seumarginBottom, ajustada cap amunt a la retícula, i el títol queda al peu d'aquesta caixa, just damunt del text que segueix; senseminHeight, un títol que ocupa més línies que el text del mateix encapçalament fa la franja tan alta com el títol. Fins a postext 1.4 aquest títol es pintava cap amunt, damunt del text que precedeix l'encapçalament. Les caixes, els filets i les imatges que segueixen la franja no fixen aquest mínim, així que un plafó ancorat al peu pot sobresortir per damunt de l'encapçalament.
Els elements ancorats a la pàgina o a la sang compten segons quant baixin per sota de la part superior de l'encapçalament. Una banda al capdamunt de la pàgina que acaba per damunt de l'encapçalament no compta gens; una imatge a sang que el sobrepassa empeny el text fins a la seva vora inferior. El mateix passa amb tot el que és a baix de la pàgina: un segell a 25 mm del peu, una banda lateral a tota alçada o un marc reserven la pàgina fins a la seva vora inferior, i el text sol començar a la pàgina següent. Marca aquesta decoració amb reserve: false —es continua pintant i altres elements s'hi poden continuar ancorant— i dona a l'encapçalament l'espai que necessita amb els seus elements de text o amb minHeight:
{
"kind": "image", "id": "seal", "resourceId": "seal", "reserve": false,
"placement": {
"anchor": { "to": "page", "edge": "bottom-right" },
"offset": { "x": { "value": -25, "unit": "mm" }, "y": { "value": -25, "unit": "mm" } },
"size": { "width": { "value": 30, "unit": "mm" } }
}
}Un element ancorat a un altre que no reserva continua comptant tret que també el marquis (un rètol compost damunt del segell necessita el seu propi reserve: false).
On es pinta. El disseny d'una obertura (span: 'page') es dibuixa abans que el cos, així que la decoració que no reserva espai queda sota el text. El disseny d'un encapçalament de columna es dibuixa amb el bloc de l'encapçalament —damunt dels blocs que el precedeixen a la columna i sota dels que el segueixen— allà on estigui col·locat per damunt del peu de la seva columna: també als marges laterals, al marge superior, a la sang i a les columnes veïnes. El peu de la columna el talla, al llenç i al PDF, perquè allà acaba el flux (vegeu Més alt que la columna més avall). Fins a postext 1.4 el llenç i el PDF també el tallaven a la part alta de la seva columna, de manera que una banda ancorada a la part alta de la pàgina o de la sang entrava als marges laterals però s'aturava al marge superior. La decoració ancorada al peu de la pàgina va en una obertura, o al disseny del peu amb pages: 'opener'.
Més alt que la columna. Quan l'espai arriba més enllà del peu de la columna —un minHeight tan alt com la pàgina, una imatge o un marc que baixen fins al tall—, l'encapçalament reclama la resta de la seva pàgina (una obertura, a totes les seves columnes) o de la seva columna (un encapçalament de columna), i el text que el segueix comença a la pàgina o a la columna següent. El seu bloc arriba llavors fins al peu de la columna, sense retallar-se mai a l'alçada del seu text, de manera que la banda contra la qual es compon el seu disseny és l'espai que reclama (minHeight inclòs, fins al peu). Un disseny més alt que la mateixa pàgina —una entradeta llarga en una pàgina de pantalla petita— continua tallant-se al peu de la pàgina (un disseny de columna, al de la seva columna): el Sandbox ho assenyala al tauler Revisió com a Disseny de títol tallat. La maquetació no emet cap avís per això —una portada que reclama la seva pàgina és el més habitual i no perd res—, però qualsevol amfitrió pot fer la mateixa comprovació sobre la maquetació acabada: collectHeadingDesignCuts(doc) retorna un { kind: 'headingDesignCut', pageIndex, level, where, overflowPx, sourceStart, sourceEnd } per cada encapçalament el text de disseny del qual queda més enllà del peu del tall de la pàgina (where: 'page', una obertura) o de la seva columna (where: 'column'), i formatWarning en descriu cadascun. Vegeu Una obertura tan alta com la pàgina a Span i disseny avançat.
La columna lateral. En una disposició de columna i mitja la columna lateral de la qual acull flotants (sideColumnRole: 'floats'), un element del disseny d'un encapçalament de columna que cau a la columna lateral —un numeral de capítol ancorat a la pàgina a la columna del marge exterior, a l'obertura d'un llibre de text— manté la pila lateral apartada. Cada figura, taula o requadre amb span: 'side' que la pàgina col·loca després de l'encapçalament deixa un buit de flotant lliure al voltant de cadascun d'aquests elements: es queda on el posa la pila quan hi cap per damunt de l'element i, si no, passa per sota —o espera a la pàgina següent quan la resta de la columna lateral no el pot acollir allà—. Així, un numeral al capdamunt del canal manté tota la pila per sota, mentre que un número de secció penjat al marge al costat d'un encapçalament més avall de la pàgina deixa el capdamunt del canal a les figures que cita la pàgina (la figura marginal continua al capdamunt de la seva pàgina). El que la columna lateral ja acull quan es col·loca l'encapçalament no es mou: una figura apilada abans a la pàgina que arriba fins a l'element de l'encapçalament es queda on és, a sota de l'element; per això, si el disseny té un element a la columna lateral a mitja pàgina, convé citar-ne les figures després de l'encapçalament. Els elements amb reserve: false deixen lliure la columna lateral, igual que deixen lliure el text. Una obertura (span: 'page') no necessita res d'això: la seva banda es reserva a totes les columnes, la lateral inclosa. Fins a postext 1.4 una figura lateral citada en una obertura així es col·locava al capdamunt de la columna lateral, damunt del numeral.
Portades. Per això un encapçalament de portada que omple la seva pàgina —amb un minHeight tan alt com la pàgina, o amb una imatge a pàgina completa al seu disseny— envia tot sol el text que el segueix a la pàgina següent, tant en disposicions d'una columna com de diverses. Un :::pagebreak just darrere és opcional i no fa mal: un salt de pàgina en una pàgina encara buida no fa res, així que mai no afegeix una pàgina en blanc. Només cal quan el disseny de la portada acaba abans del peu de la pàgina i tot i així el text ha de començar en una pàgina nova.
# Memòria anual 2026 {style="portada"}
:::pagebreak
# Carta de la presidenta#Nombres en lletres
Dos sufixos de les plantilles de numeració escriuen un comptador en lletres, en la llengua del document (el locale de primer nivell o, si no està definit, la llengua de partició — vegeu Llengua del document): words per al cardinal i ordinal per a l'ordinal. La caixa (majúscula o minúscula) del sufix fixa la de les paraules, com fan A / a amb les lletres:
| Token | Anglès (21) | Espanyol (21) | Xinès (21) |
|---|---|---|---|
| twenty-one | veintiuno | 二十一 |
| Twenty-one | Veintiuno | 二十一 |
| TWENTY-ONE | VEINTIUNO | 二十一 |
| twenty-first | vigesimoprimero | 第二十一 |
| Twenty-first | Vigesimoprimero | 第二十一 |
| TWENTY-FIRST | VIGESIMOPRIMERO | 第二十一 |
S'escriuen en lletres l'anglès, l'espanyol, el xinès i l'àrab; qualsevol altra llengua pren les paraules en anglès, com fan les cadenes integrades de continuació de taules. El xinès escriu els numerals informals de simp-chinese-informal o trad-chinese-informal, segons l'escriptura de locale (一万 / 一萬), amb 第 davant de l'ordinal; els caràcters han no tenen caixa, així que les tres grafies d'un sufix imprimeixen el mateix. L'anglès segueix l'ús nord-americà (one hundred five, sense and). L'espanyol fa servir les formes masculines, com es numera un capítulo o un libro (capítulo primero, tercero, veintiuno), i escriu els ordinals del 13 al 29 en una sola paraula, com prefereix la RAE (decimotercero, vigesimoprimero). Els cardinals s'escriuen fins a 999 999 i els ordinals espanyols fins a 999; els nombres més grans s'imprimeixen en xifres.
Els nombres àrabs concorden en gènere amb el substantiu que compten, així que el sufix admet un modificador: -feminine (o -f) per a un substantiu femení, -masculine (-m, el valor per defecte) per a un de masculí; -classical escriu les centenes مائة, com les edicions de Bulaq i la majoria de les egípcies, en lloc del modern مئة. {1:ordinal} escriu l'ordinal definit en nominatiu que fa servir un títol: الفصل {1:ordinal} dona الفصل الأول, الفصل الحادي عشر, الفصل الحادي والعشرون; الليلة {1:ordinal-feminine} dona الليلة الأولى, الليلة الحادية عشرة, الليلة الحادية والعشرون, الليلة المئتان i, per damunt de cent, la fórmula clàssica de «després de»: الليلة الخامسة والأربعون بعد الثلاثمئة, الليلة الحادية بعد الألف. {1:words} escriu el cardinal (واحد وعشرون; en femení إحدى عشرة, واحدة وعشرون). Els ordinals s'escriuen en lletres fins a 9 999 i els cardinals fins a 99 999; els modificadors es combinen ({1:ordinal-f-classical}) i les altres llengües els ignoren. L'àrab no té majúscules, així que la caixa del sufix no canvia res. Els marcadors de disseny {numberWords} i {numberOrdinalWords} escriuen les formes masculines; per a una obertura en femení, posa l'ordinal a la plantilla del nivell i imprimeix-lo amb {number}.
En un disseny d'encapçalament, {numberWords} / {numberWordsLower} i {numberOrdinalWords} / {numberOrdinalWordsLower} escriuen el comptador de l'encapçalament de la mateixa manera, així l'obertura pot dir Capítulo uno mentre l'índex mostra 1. El textTransform: 'uppercase' d'un element de text dona les majúscules:
// Novel·la en espanyol: «CAPÍTULO PRIMERO» damunt del títol, «1.» a l'índex.
{ level: 1, numberingTemplate: '{1}.', span: 'page',
advancedDesign: { enabled: true, slot: { elements: [
{ kind: 'text', id: 'n', content: 'Capítulo {numberOrdinalWordsLower}', textTransform: 'uppercase', /* … */ },
{ kind: 'text', id: 't', content: '{titleText}', /* … */ },
] } } }#Llistes no ordenades
La propietat unorderedLists controla com es renderitzen les llistes amb pics (-, *, +) i les llistes de tasques d'estil GFM (- [ ], - [x]). S'admeten fins a cinc nivells d'imbricació.
#Valors per defecte de les llistes no ordenades
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
fontFamily | string | hereta bodyText.fontFamily | Font del text dels elements. |
color | ColorValue | Color principal (#295AA3) | Color del text i dels pics dels elements. Enllaçat a l'entrada main-color de la paleta per defecte. |
fontWeight | number | 700 | Pes del text dels elements (100–900). Els pics hereten aquest pes tret que se sobreescrigui per nivell. |
italic | boolean | false | Renderitza el text dels elements en cursiva. |
bulletChar | string | '•' | Glif utilitzat com a pic. |
bulletFontSize | Dimension | 1 em | Mida del glif del pic. Les unitats relatives s'escalen amb la mida del cos de text. |
gap | Dimension | 0.5 em | Espai horitzontal entre el pic i el text de l'element. |
indent | Dimension | 0 em | Sagnat base per al nivell 1. Els nivells més profunds s'encadenen des de l'inici del text del nivell anterior tret que s'especifiqui (vegeu més avall). |
bulletVerticalOffset | Dimension | 0 em | Ajust fi vertical del pic. Els valors negatius el pugen; els positius l'abaixen. |
marginTop / marginBottom | Dimension | 1.5 em | Espai abans i després del bloc de llista. |
itemSpacing | Dimension | 0 em | Espai vertical extra entre elements, afegit a l'alçada de línia. Al voltant d'una llista imbricada en un element d'una altra s'aplica, a tots dos costats, el de la llista exterior: abans del primer element de la llista imbricada i després de l'últim (fins a postext 1.4, l'element que seguia una llista imbricada prenia l'espai d'aquesta). |
snapTopToGrid | boolean | false | Arrodoneix cap amunt l'espai damunt de la llista perquè el seu primer element quedi a la retícula de base, com el text sota un encapçalament; marginTop passa a ser un mínim. El final de la llista retorna el flux a la retícula en qualsevol cas, així que amb itemSpacing a 0 tots els elements queden alineats amb el text de la columna contigua. Desactivat per defecte, com fins a postext 1.4: un marginTop que no és un nombre enter de línies deixa els elements fora de la retícula fins que acaba la llista. No afecta les llistes dins de requadres, l'interior dels quals queda fora de la retícula. |
hangingIndent | boolean | true | Quan està actiu, les línies ajustades s'alineen amb el primer caràcter de text en lloc de fer-ho sota el pic (sagnat francès). |
levels | UnorderedListLevelConfig[] | — | Sobreescriptures per profunditat per als nivells 1–5. Vegeu més avall. |
#Extensions per a llistes de tasques
Els elements de tasca GFM (- [ ] …, - [x] …) es renderitzen com a elements de llista no ordenada substituint el pic per una casella. Els camps següents només s'apliquen a les tasques:
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
taskCheckboxChar | string | '☐' | Glif per a tasques no marcades. |
taskCheckedChar | string | '☑' | Glif per a tasques completades. |
taskCompletedStrikethrough | boolean | true | Dibuixa una línia que ratlla el text de les tasques completades. |
taskCompletedColor | ColorValue | hereta el color de l'element | Color opcional aplicat al text de les tasques completades. Quan s'omet, es fa servir el color habitual de l'element. |
#Sobreescriptures per nivell (llistes no ordenades)
Cada entrada de levels apunta a una profunditat (1–5) i pot sobreescriure qualsevol de les propietats següents:
| Propietat | Tipus | Descripció |
|---|---|---|
bulletChar | string | Glif de pic per a aquesta profunditat. |
fontFamily | string | Font del text en aquesta profunditat. |
fontSize | Dimension | Mida del glif de pic en aquesta profunditat. |
color | ColorValue | Color del text de l'element. |
fontWeight | number | Pes del text de l'element. |
italic | boolean | Activa la cursiva. |
indent | Dimension | Sagnat explícit del pic en aquesta profunditat. Vegeu la regla d'encadenament a continuació. |
verticalOffset | Dimension | Ajust fi vertical del pic en aquesta profunditat. |
Encadenament de sagnats. El nivell 1 arrenca sempre amb l'indent general (per defecte 0 em — els pics queden enganxats a la vora de la columna). Per als nivells 2–5, si deixes indent sense definir, el motor col·loca el pic a l'inici de text del nivell anterior (sagnat del pare + amplada del pic + gap). Defineix un indent explícit en un nivell per trencar l'encadenament i fixar aquesta profunditat on prefereixis.
unorderedLists: {
bulletChar: '—',
gap: { value: 0.4, unit: 'em' },
hangingIndent: true,
levels: [
{ level: 2, bulletChar: '·' },
{ level: 3, bulletChar: '◦', color: { hex: '#666666', model: 'hex' } },
],
}#Llistes ordenades
La propietat orderedLists controla les llistes numerades (1., 2), etc.). S'admeten fins a cinc nivells d'imbricació i cada profunditat pot fer servir un format de numeració diferent.
#Valors per defecte de les llistes ordenades
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
fontFamily | string | hereta bodyText.fontFamily | Font del text i del marcador numèric. |
color | ColorValue | Color principal (#295AA3) | Color del text i del marcador numèric. Enllaçat a l'entrada main-color de la paleta per defecte. |
fontWeight | number | 700 | Gruix del text i del marcador numèric (100–900). |
italic | boolean | false | Mostra el text en cursiva. |
numberFormat | OrderedListNumberFormat | 'arabic' | Estil de numeració: 'arabic', 'lower-alpha', 'upper-alpha', 'lower-roman', 'upper-roman'. També valen les grafies de les altres opcions ('decimal', 'roman-lower', 'i'…; consulta Grafies dels formats de numeració); un valor desconegut numera en aràbics i s'avisa. |
prefix | string | '' | Text que precedeix el número, amb l'estil del separador: amb '(' aquí i ')' com a separador, una llista xinesa es numera (一), (二). Quan el separador es dibuixa com un tram propi, el prefix també, just abans del número. |
separator | string | '.' | Caràcter situat entre el número i el text — normalment '.' o ')'. |
separatorFontFamily | string | hereta fontFamily | Font del separador. Quan algun estil del separador difereix del del número, el separador es dibuixa com un tram propi després del número (alineat a la dreta) — p. ex. 1 en Optima Bold negre seguit de • en DIN Pro Bold blau. |
separatorFontWeight | number | hereta fontWeight | Gruix del separador (100–900). |
separatorItalic | boolean | hereta italic | Mostra el separador en cursiva. |
separatorColor | ColorValue | hereta color | Color del separador. Es respecten les referències a la paleta. |
separatorGap | Dimension | 0 em | Espai entre el número i el separador. El text de l'element continua començant gap després del separador. |
numberFontSize | Dimension | 1 em | Mida del marcador numèric. |
gap | Dimension | 0.5 em | Espai horitzontal entre el número i el text de l'element. |
indent | Dimension | 0 em | Sagnat base per al nivell 1; els nivells més profunds s'encadenen des de l'inici del text del nivell anterior, tret que s'especifiqui una altra cosa. |
numberVerticalOffset | Dimension | 0 em | Ajust fi vertical del marcador numèric. |
marginTop / marginBottom | Dimension | 1.5 em | Espai abans i després del bloc de llista. |
itemSpacing | Dimension | 0 em | Espai vertical addicional entre elements. Al voltant d'una llista niada dins d'un element d'una altra s'aplica, a tots dos costats, el de la llista exterior: abans del primer element de la llista niada i després de l'últim (fins a postext 1.4, l'element que seguia una llista niada prenia l'espai d'aquesta). |
snapTopToGrid | boolean | false | Arrodoneix cap amunt l'espai sobre la llista perquè el seu primer número quedi a la retícula de base, com el text sota un encapçalament; marginTop passa a ser un mínim. El final de la llista torna el flux a la retícula en qualsevol cas, de manera que amb itemSpacing a 0 tots els elements queden alineats amb el text de la columna del costat. Desactivat per defecte, com fins a postext 1.4: un marginTop que no és un nombre enter de línies deixa els elements fora de la retícula fins que acaba la llista. No afecta les llistes dins de requadres, l'interior dels quals queda fora de la retícula. |
numberWidth | 'run' | 'level' | 'run' | L'amplada de la columna de números d'un element, que fixa on comença el seu text; els números s'alineen a la dreta dins d'aquesta columna. 'run': el número més ample del tram mateix de l'element, és a dir, els elements d'una mateixa profunditat sense res més que elements més profunds entre ells. Una figura, un paràgraf o un requadre entre dos elements obre un tram nou, de manera que ii) després d'una taula pot començar el text una mica més a la dreta que i) abans de la taula, i una llista de nou elements compon el text més a l'esquerra que una de dotze. 'level': el número més ample d'aquella profunditat en tot el document (el capítol, en un llibre), de manera que totes les llistes, i cada part d'una llista interrompuda, comencen el text al mateix lloc, com ja fan els sagnats dels nivells més profunds. |
numberAlign | 'end' | 'start' | 'end' | Com se situa un número a la seva columna. 'end': al costat del text, de manera que els números d'un tram acaben a la mateixa alçada i 9. i 10. alineen els punts. 'start': al principi de la columna (l'esquerra en una pàgina d'esquerra a dreta, la dreta en una de dreta a esquerra, el cap de la línia en text vertical), de manera que les etiquetes de llargada diferent comencen a la mateixa alçada, com els articles d'una llei (第九條, 第十一條). La columna conserva l'amplada que li dona numberWidth, de manera que el text dels elements comença al mateix lloc en tots dos casos; amb un separador d'estil propi, el separador segueix el seu número. Des de postext 1.26. |
hangingIndent | boolean | true | Les línies de continuació s'alineen amb el primer caràcter del text, no sota el número. |
levels | OrderedListLevelConfig[] | — | Sobreescriptures per profunditat per als nivells 1–5. |
#Sobreescriptures per nivell (llistes ordenades)
Cada entrada de levels pot sobreescriure numberFormat, prefix, separator, fontFamily, fontSize, color, fontWeight, italic, indent, verticalOffset i l'estil del separador (separatorFontFamily, separatorFontWeight, separatorItalic, separatorColor, separatorGap) — s'hi aplica el mateix encadenament de sagnats que a les llistes no ordenades. L'estil del separador d'un nivell hereta l'estil del seu propi número, tret que s'indiqui l'opció general del separador.
Alineació a la dreta. El pipeline mesura el número formatat més ample dins de cada tram i sagna tots els elements d'aquest tram perquè els marcadors quedin alineats per la vora dreta. Una llista de deu elements mostrada com 1. – 10. desplaça els números d'una xifra cap a la dreta perquè el separador caigui sempre a la mateixa columna.
orderedLists: {
numberFormat: 'arabic',
separator: '.',
levels: [
{ level: 2, numberFormat: 'lower-alpha' },
{ level: 3, numberFormat: 'lower-roman', separator: ')' },
],
}Això produeix la clàssica combinació niada:
1. Primer element
a. Subelement
i) Nota profunda
b. Subelement
2. Segon element
La jerarquia dels documents xinesos (GB/T 15834—2011, annex B.3) té cinc nivells: 一、, després (一), després 1., després (1) i després ①:
orderedLists: {
levels: [
{ level: 1, numberFormat: 'simp-chinese-informal', separator: '、' },
{ level: 2, numberFormat: 'simp-chinese-informal', prefix: '(', separator: ')' },
{ level: 3, numberFormat: 'arabic', separator: '.' },
{ level: 4, numberFormat: 'arabic', prefix: '(', separator: ')' },
{ level: 5, numberFormat: 'circled-decimal', separator: '' },
],
}#Matemàtiques
La propietat math controla com s'analitzen i es mostren les fórmules LaTeX escrites entre delimitadors $...$ (en línia) i $$...$$ (en bloc). El motor subjacent és MathJax (el paquet mathjax-full) en mode de sortida SVG, rasteritzat al canvas i incrustat com a glifs escalables al PDF.
interface MathConfig {
enabled?: boolean; // Mostrar el LaTeX. Si és false, els spans surten com a TeX literal.
fontSizeScale?: number; // × la mida del text que envolta la fórmula (la del cos en les fórmules en bloc).
color?: ColorValue; // Color de la fórmula; hereta el del cos si s'omet.
marginTop?: Dimension; // Espai damunt de les fórmules en bloc.
marginBottom?: Dimension; // Espai mínim a sota; l'ajust a la retícula el pot augmentar.
indentAfterDisplay?: boolean; // Sagnar el paràgraf que segueix una fórmula en bloc.
keepWithLeadIn?: boolean; // Mantenir una fórmula en bloc amb la línia que la introdueix.
equationNumbering?: { // Numerar les fórmules en bloc que porten un \label.
enabled?: boolean; // per defecte true
numberingTemplate?: string; // '{n}'; '{h1}.{n}' numera per capítol
resetOn?: ResourceCounterReset; // 'never' | 'h1' … 'h6'
counterFormat?: ResourceCounterFormat; // 'decimal'
format?: string; // '({n})': el que imprimeixen la fórmula i \eqref
};
}| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
enabled | boolean | true | Quan és false, els spans $...$ i $$...$$ encara s'analitzen (els avisos per delimitadors sense tancar es continuen emetent), però es mostren com el seu codi TeX literal. Útil quan el contingut conté signes de dòlar a propòsit o quan vols desactivar del tot la representació matemàtica. |
fontSizeScale | number | 1.0 | Multiplicador aplicat a la mida del text que envolta la fórmula abans de representar-la: un em de la font TeX de la fórmula mesura aquesta mida × fontSizeScale — bodyText.fontSize per a una fórmula en bloc i per a les fórmules en línia del text de cos, la mida del bloc que la conté per a una fórmula en línia en un encapçalament, un estil de paràgraf, un peu o el cos d'un requadre. 1.0 la iguala al text que l'envolta; els valors entre 0.9 i 1.1 són habituals quan la font matemàtica sembla lleugerament més gran o més petita que la font del text. Canvia a postext 1.5: fins a la 1.4 les fórmules sortien al voltant d'un 13 % més grans (consulta més avall). |
color | ColorValue | hereta el del cos | Color de la fórmula representada. Omet-lo per heretar bodyText.color. Fixa'l explícitament quan vulguis tenyir les fórmules d'una manera diferent del text — per exemple perquè coincideixin amb l'accent dels encapçalaments. |
marginTop | Dimension | 0.8em | Espai per sobre d'una fórmula en bloc. S'ignora en les fórmules en línia. |
marginBottom | Dimension | 0.8em | Espai per sota d'una fórmula en bloc. És un mínim: l'ajust a la retícula el pot ampliar perquè la línia de base següent caigui en una línia de la retícula (tant si page.baselineGrid dibuixa la retícula com si no). |
indentAfterDisplay | boolean | true | Sagna la primera línia del paràgraf que segueix una fórmula en bloc, com qualsevol altre paràgraf. Amb false, tot paràgraf just després d'una fórmula en bloc es compon sense sagnat, com a continuació de la frase que la fórmula ha interromput («on L és…»). Després d'una fórmula escrita dins d'un paràgraf —sense cap línia en blanc ni a sobre ni a sota— el text no se sagna mai: el que s'escriu sota el seu $$ de tancament continua aquell paràgraf (consulta Fórmules matemàtiques). |
keepWithLeadIn | boolean | false | Manté una fórmula en bloc a la columna de la línia que la introdueix, com la penalització \predisplaypenalty de TeX. Quan la fórmula no cap sota l'última línia del paràgraf anterior, aquesta línia passa amb la fórmula a la columna o pàgina següent; quan les línies que quedarien enrere són menys de bodyText.widowMinLines (menys d'una si bodyText.avoidWidows està desactivat), un paràgraf que comença en aquella columna passa sencer (amb els encapçalaments que tanquen la columna per damunt, segons headings.keepWithNext). La línia que passa queda sola a dalt de tot de la columna següent, digui el que digui la regla de les òrfenes. Amb false, la fórmula passa sola, i la línia que la introdueix pot tancar la columna de dalt o quedar sobre una figura que encapçala la següent. |
equationNumbering | { enabled, numberingTemplate, resetOn, counterFormat, format } | true, '{n}', 'never', 'decimal', '({n})' | Com es numeren les fórmules en bloc que porten un \label (vegeu Equacions numerades més avall). numberingTemplate, resetOn i counterFormat funcionen com els d'un tipus de recurs: '{h1}.{n}' amb resetOn: 'h1' numera (2.1), (2.2)… per capítol, i '{h1}.{h2}.{n}' amb 'h2', per secció. format és el número tal com l'imprimeixen la fórmula i \eqref, amb {n} al lloc del número: '[{n}]' compon [3]. enabled: false no numera res: un \label es descarta i una referència que hi apunta n'imprimeix la pàgina. |
math: {
enabled: true,
fontSizeScale: 1.0,
color: { hex: '#295AA3', model: 'hex' },
marginTop: { value: 1, unit: 'em' },
marginBottom: { value: 1, unit: 'em' },
}Mida de les fórmules, canvia a postext 1.5. MathJax dona la caixa de cada fórmula en ex, i un ex de la seva font TeX mesura 0,442 em. Fins a postext 1.4 el motor el prenia per mig em, de manera que cada fórmula es componia al voltant d'un 13 % més gran que bodyText.fontSize × fontSizeScale. Ara les fórmules surten de la mida documentada, i les línies i pàgines amb matemàtiques es recomponen. Una configuració escrita en codi per a la 1.4 conserva la mida de les fórmules de la 1.4 si passa per pinLegacyMathSize, de postext/bundle, una sola vegada i tal com està escrita:
import { pinLegacyMathSize } from 'postext/bundle';
config = pinLegacyMathSize(config); // fórmules, i l'espai al voltant de les fórmules en bloc, com les componia la 1.4Hi ha altres canvis de regles a la 1.5 que també poden moure les teves pàgines: els salts dels encapçalaments, l'espai al voltant d'una figura en línia (en el text corregut i en els requadres), les marques en línia dels encapçalaments, la mida de les caplletres, el lloc que es deixa sota una línia acabada en dos punts per a la llista que introdueix, les línies que el tall d'una caixa deixa d'un paràgraf o d'un element de llista, els salts de línia després d'un guió llarg, la composició del text en bandera, la divisió d'un paràgraf sota un encapçalament, els salts de línia després del guionet d'un compost i l'espai sota un contenidor :::paragraphs. migrateConfig, aplicada una sola vegada amb el markdown que compon la configuració, fixa els que aquest text necessita, també la mida de les fórmules (consulta Paquets escrits per postext 1.4 o anterior):
import { migrateConfig } from 'postext/bundle';
config = migrateConfig(config, undefined, { content: markdown }); // salts d'encapçalament, fórmules, espais en línia, marques dels encapçalaments, caplletres, dos punts, talls de les caixes, guions llargs, compostos, text en bandera, divisions sota un encapçalament i espai sota els contenidors com els componia la 1.4Així s'evita el que moverien aquests canvis de regles, però no es conserven totes les pàgines de la 1.4. La 1.5 corregeix a més errors de composició, i una correcció no té fixació: una configuració antiga la rep igual que una de nova, de manera que una pàgina afectada encara es pot moure. Entre aquestes correccions: un encapçalament a tota la pàgina sense disseny propi es mesura a l'amplada de la pàgina i es compon amb l'interlineat del seu nivell; en un disseny d'encapçalament no es reserva res sota la línia de base d'una caplletra; una caplletra pren el color de la paleta de la secció i es compon també en un text de disseny el overflow del qual no és 'wrap', que llavors salta de línia; un paràgraf dins d'una caixa pinta el tracking amb què es va mesurar; una caixa partida conserva la columna de la icona a cada fragment; una línia d'una caixa que estiraria els espais més de 3× es compon en bandera, com en el text corregut; la palanca dels paràgrafs fluixos no deixa mai una línia justificada més ampla del que permet maxWordSpacing; una caixa flotant conserva un marginBottom (en una banda superior) o un marginTop (en una banda inferior) més gran que l'espai dels flotants; un text de disseny centrat o alineat a la dreta amb tracking (un titolet, el títol d'una obertura) es col·loca per les seves lletres, sense el tracking que segueix l'última; sota una obertura a tota la pàgina, el text que obre la segona columna comença on començaria el text just a sota de l'obertura, també quan l'obertura va seguida d'un encapçalament; la línia de punts de l'índex s'atura abans del número de pàgina en una font el kerning de la qual separa una sèrie de punts; un titolet llegeix l'encapçalament tal com està escrit, sense espai on una de les seves línies acaba després d'un guionet o un guió llarg o dins d'una paraula tallada per l'amplada (MEDIOAMBIENTALES, no MEDIOAMBIENTALE S), i el {titleText} del disseny d'un encapçalament el llegeix igual (thousand-colour, no thousand- colour); un text ancorat al peu o al centre de la franja d'un disseny d'encapçalament manté la franja prou alta per contenir-lo, de manera que ja no puja sobre el text que precedeix l'encapçalament; una paraula més ampla que la seva línia, tallada al costat d'un guionet que ja porta, es talla darrere d'aquest guionet i no en rep cap altre; l'element que segueix una llista niada dins d'una altra pren l'itemSpacing de la seva pròpia llista, no el de la niada; i la resta d'una paraula tallada per ser més ampla que la seva línia conserva els seus propis punts de tall, de manera que una adreça web continua tallant-se per les juntures i un compost pels guionets en lloc de per les síl·labes del diccionari.
pinLegacyMathSize multiplica l'escala per 1,1312 (0,5 ÷ 0,442) i divideix pel mateix factor els marges de les fórmules en bloc en em. Amb l'escala sola no n'hi ha prou en un llibre amb fórmules en bloc: els seus marges són mesures de la mida de la fórmula mateixa, de manera que creixerien el mateix 13 % i empènyerien cap avall el text que les segueix. Escrits per als marges per defecte, els tres valors són:
math: {
fontSizeScale: 1.131,
marginTop: { value: 0.7072, unit: 'em' },
marginBottom: { value: 0.7072, unit: 'em' },
} // fórmules tan grans com les componia la 1.4, amb l'espai que els deixava al voltantOn la configuració estava desada, el motor ho pot saber i ho fa per tu: openBundle / readBundle amb un paquet .postext escrit abans de la 1.5 (consulta Paquets escrits per postext 1.4 o anterior), i el Sandbox amb els llibres, la configuració de treball i els fitxers postext-config.json que va desar llavors (consulta Sandbox → Persistència). Es llegeixen a través de migrateConfig, que fixa la mida (pinLegacyMathSize): fontSizeScale passa a ser l'escala desada (1 si no n'hi havia) × 1,1312, i un marge de les fórmules en bloc en em o rem — una mesura de la mida de la fórmula mateixa — es divideix pel mateix factor, de manera que l'espai al voltant d'una fórmula en bloc queda com el deixava la 1.4 (els 0,8 em per defecte passen a 0,7072 em). Un marge en una unitat de pàgina (pt, mm…) es queda com està, i també una configuració amb enabled: false o una el llibre de la qual no té cap $. Llavors el llibre antic es compon com el componia la 1.4, i la seva secció math mostra la mida amb què es compon. Per compondre aquell llibre a la mida actual, restableix aquests valors: Fórmules → Escala de mida, Marge superior de les fórmules en bloc i Marge inferior de les fórmules en bloc al Sandbox, o en codi:
math: { ...config.math, fontSizeScale: 1, marginTop: undefined, marginBottom: undefined } // mida i marges actualsEquacions numerades. Una fórmula en bloc amb número ocupa tota la seva mesura (la columna, o l'amplada interior del requadre que la conté): l'equació va centrada i el seu número alineat a la dreta, a la línia de l'equació, a cada fila numerada d'un align. El número surt d'un \label{eq:x} (des de postext 1.19): les fórmules amb etiqueta, i les files amb etiqueta d'un align, gather, alignat, flalign o eqnarray, es numeren en ordre de lectura segons equationNumbering, tret que una fila digui \nonumber o \notag. Entorns com equation no es numeren per si sols: una fórmula sense etiqueta no porta número. \tag{…} imprimeix el text que li donis, entre parèntesis, i \tag*{…}, tal qual; cap dels dos no compta, i un \label al seu costat li dona nom. Una equació numerada més ampla que la seva mesura desborda per la dreta, com qualsevol fórmula en bloc. (Fins a postext 1.4, una fórmula amb \tag no s'arribava a dibuixar; fins a la 1.18, només \tag numerava una fórmula.)
\eqref{eq:x} al text imprimeix el número en el seu format, (3), i \ref{eq:x}, el número sol; el mateix fan :ref{id="eq:x"} i @eq:x (vegeu Referències creuades), i dins d'una fórmula \eqref l'imprimeix com a text. En un llibre compost capítol a capítol, el comptador continua des del capítol anterior: continuationAfter el porta a LayoutContinuation.statementCounters (equation), i l'esquema del llibre dona a cada etiqueta el seu número (OutlineEntry.numberLabel), de manera que una referència a una equació d'un altre capítol l'imprimeix.
math: {
equationNumbering: { numberingTemplate: '{h1}.{n}', resetOn: 'h1' }, // (1.1), (1.2)… (2.1)
}El resolver i l'stripper segueixen el mateix patró que les altres seccions:
import {
DEFAULT_MATH_CONFIG,
resolveMathConfig,
stripMathDefaults,
} from 'postext';
const resolved = resolveMathConfig(config.math);
const minimal = stripMathDefaults(config.math);#Arrencar el motor de fórmules
MathJax es carrega a demanda, no amb la resta del motor. Quan compons al fil principal, arrenca'l abans de construir un document amb fórmules:
import { buildDocument, initMathEngine, renderPage } from 'postext';
await initMathEngine(); // carrega MathJax una vegada; les crides següents es resolen a l'instant
const doc = buildDocument({ markdown: 'Euler: $e^{i\\pi}+1=0$.' }, config);
document.body.append(renderPage(doc.pages[0], doc));- Fins que el motor arrenca, les fórmules són provisionals. Cadascuna es compon com una caixa grisa de mida estimada. Si un document amb fórmules es compon sense haver cridat mai
initMathEngine(), la consola mostra un avís, una sola vegada. - El worker de composició l'arrenca per tu. Un build a
postext/workercridainitMathEngine()pel seu compte quan el markdown conté un$. - Compondre ja, i un altre cop quan estigui a punt.
isMathReady()indica si el motor està en marxa.onMathReady(fn)cridafntan bon punt ho està (a l'instant si ja ho estava) i retorna una funció que cancel·la la crida. Un editor pot mostrar les caixes provisionals de seguida i tornar a compondre quan arriba MathJax; mentreinitMathEngine()està en curs no s'imprimeix cap avís. - Errors.
initMathEngine()es rebutja si MathJax no es pot carregar, i una crida posterior ho torna a intentar. - Amb qualsevol bundler, a Node o des d'una CDN. MathJax viatja dins del paquet com un únic mòdul preempaquetat (uns 1,8 MB sense comprimir, que només baixa
initMathEngine). L'import { initMathEngine } from 'https://esm.sh/postext'de sempre funciona; no cal?bundle. El paquetmathjax-fullnomés cal per compilar postext, de manera que instal·lar postext no l'instal·la. MathJax i l'analitzador mhchem que inclou tenen llicència Apache-2.0: els seus avisos i el text de la llicència viatgen al costat del mòdul, adist/math/THIRD_PARTY_LICENSES.txt. - Un motor per pàgina. El motor i la seva memòria cau de fórmules representades són compartits per tot el que importa
postexten el mateix context de JavaScript (consulta Estat global compartit en una pàgina).
Per a la gramàtica del document ($...$, $$...$$, com escapar un dòlar literal), consulta Format del document.