Capítulo 3.4 · Parte II · El oficio
Configuración: separación silábica e idioma
Los patrones y las excepciones de la separación silábica, el texto en bandera, el idioma del documento con sus cifras y su dirección, y las escrituras que compone Postext
En pocas palabras
Esta página explica cómo se parten las palabras al final de la línea y cómo sabe Postext en qué idioma está el libro. Activas o desactivas la separación silábica y anotas las palabras que nunca deben partirse. Puedes dejar el borde derecho del texto irregular en lugar de recto. El idioma del documento decide las reglas para partir palabras, los nombres de las figuras y las tablas, las cifras y la dirección del texto. Las últimas secciones dicen qué escrituras sabe componer Postext y cómo trata el texto árabe.
#Separación silábica
Cuando la alineación del texto está configurada como 'justify', la separación silábica evita el espaciado excesivo entre palabras al romper las palabras largas en los límites silábicos. El motor utiliza patrones TeX/Liang para encontrar puntos de ruptura naturales en los límites silábicos. Ver Separación silábica y justificación para una explicación detallada. El texto en bandera solo se divide si se pide: ver Texto en bandera más abajo.
| Propiedad | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled | boolean | true | Si se permite la separación silábica. |
locale | LocaleTag | el locale de primer nivel o, si no, 'en-us' | Reglas de idioma para los límites silábicos: uno de los idiomas soportados de abajo o cualquier etiqueta BCP 47 ('es-ES', 'pt-BR'). |
ragged | boolean | false | Separa sílabas también en el texto en bandera (alineado a la izquierda, a la derecha o centrado), dentro de la zone. Ver Texto en bandera. |
zone | Dimension | 3em | Zona de separación del texto en bandera: una palabra que no cabe solo se divide cuando pasarla entera a la línea siguiente dejaría un hueco mayor que esta medida. En em es relativa al cuerpo del propio texto. No se aplica al texto justificado. |
compounds | boolean | true | Permite que el diccionario divida las palabras de un compuesto, una palabra con un guion entre dos letras (teó-rico-práctico). false deja la palabra entera salvo por su propio guion, donde la línea sí puede terminar (teórico- · práctico), como hace TeX. Un guion blando escrito en la palabra sigue permitiendo el corte, y un compuesto más ancho que toda la línea se sigue dividiendo. Se aplica al texto corrido, los títulos, las listas, las citas y los recuadros; los pies, las notas, las celdas de tabla y el índice de contenidos siguen dividiendo los compuestos. Ver Palabras compuestas. |
exceptions | string[] | ninguna | Palabras que el diccionario no debe dividir, o que solo puede dividir por donde dice la entrada: 'Alice' no se divide nunca, 'You-Tube' solo por su guion. Ver Palabras que no se dividen. |
capitalized | boolean | true | Divide las palabras con mayúscula inicial como cualquier otra. false deja entera toda palabra que empieza por mayúscula (Alice, Ámsterdam, UNESCO), incluida la primera de cada frase. Ver Palabras que no se dividen. |
Idiomas soportados: 'en-us' (inglés), 'es' (español), 'fr' (francés), 'de' (alemán), 'it' (italiano), 'pt' (portugués), 'ca' (catalán), 'nl' (neerlandés).
Para elegir los patrones se ignoran las subetiquetas de región, escritura y variante, las mayúsculas y los separadores _: 'es-ES', 'es-MX' y 'es_419' se dividen con 'es', 'pt-BR' con 'pt' y cualquier etiqueta inglesa ('en', 'en-GB') con 'en-us', los únicos patrones ingleses incluidos, de modo que el texto británico recibe los cortes estadounidenses. Un idioma sin patrones incluidos ('sv', 'pl', 'fi'…) se divide con los de 'en-us', lo que da cortes equivocados en lugar de ninguno; el motor lo avisa una vez por etiqueta con un console.warn, y el Sandbox lo muestra en su panel de revisión. Para un documento así, fija enabled: false; eso también acalla el aviso. El chino, el japonés y el coreano (zh, ja, ko, con cualquier región o escritura) no necesitan patrones ni imprimen aviso: un documento en uno de ellos se compone sin separación silábica. Para dividir las palabras latinas que cita, fija enabled: true y nombra su idioma en locale ('en-us' para el inglés). Con enabled: true sin locale, o con uno chino, japonés o coreano, la separación sigue desactivada y la consola lo avisa una vez. matchHyphenationLocale(tag) devuelve el idioma incluido al que corresponde una etiqueta (undefined si no hay ninguno), y HYPHENATION_LOCALES enumera los incluidos. La configuración resuelta (doc.config.bodyText.hyphenation) nombra en locale los patrones que se usan de verdad y conserva en tag la etiqueta que diste cuando es distinta. El backend PDF declara el idioma del documento a partir de locale, en la raíz de la configuración, y solo usa esta etiqueta cuando locale falta (consulta Idioma del documento).
import { matchHyphenationLocale } from 'postext';
matchHyphenationLocale('es-MX'); // 'es'
matchHyphenationLocale('en-GB'); // 'en-us'
matchHyphenationLocale('sv'); // undefined: se divide con 'en-us', con un aviso en la consolaLas palabras de menos de 5 caracteres nunca se separan. El motor requiere al menos 2 caracteres antes y 3 caracteres después de un punto de ruptura.
#Palabras que no se dividen
Un diccionario divide un nombre como divide cualquier palabra: Al-ice, Áms-ter-dam, You-Tu-be. Tres ajustes dejan enteras las palabras, y los tres tienen por defecto lo que hace el diccionario.
hyphenation.exceptions es una lista de palabras, como el \hyphenation{…} de TeX. Una entrada escrita sin guion no se divide nunca; una escrita con guiones solo se divide por ellos, de modo que 'You-Tube' da You- · Tube y nada más. Una entrada coincide con una serie de letras, la rodee lo que la rodee: 'Alice' vale para (Alice, y Alice’s, y un compuesto se compara parte por parte (Blender-based coincide con 'Blender'). Una forma flexionada es otra palabra y necesita su propia entrada. Una entrada en minúsculas vale para la palabra la escriban como la escriban ('blender' cubre Blender y BLENDER); una entrada con mayúscula inicial solo vale para las apariciones que empiezan por mayúscula, de modo que 'Rose' deja entero el nombre y deja rose al diccionario. Las entradas solo llevan letras y guiones; lo demás se descarta.
hyphenation.capitalized: false deja entera toda palabra que empieza por mayúscula: los nombres, las siglas y también la primera palabra de cada frase. Es la opción «Hyphenate Capitalized Words» de InDesign desactivada, y el \uchyph=0 de TeX. Una entrada de exceptions con guiones sigue dividiendo su palabra por ellos. El alemán escribe con mayúscula todos los sustantivos, así que el ajuste dejaría un texto alemán casi sin palabras que dividir: nombra allí las palabras en exceptions, o usa citations.hyphenateNames.
citations.hyphenateNames: false deja enteros los apellidos de los autores que el documento cita, estén donde estén: en una cita, en el texto corrido y en la lista de referencias. Ver Citas.
const config: PostextConfig = {
locale: 'es',
bodyText: {
hyphenation: { exceptions: ['Ámsterdam', 'Blender', 'You-Tube'] },
},
};Los tres alcanzan a todo texto que el diccionario divide: cuerpo, títulos, listas, recuadros, pies, celdas de tabla, notas, cabeceras y el resto del texto de diseño. Es más de lo que alcanza compounds, que los pies, las notas, las celdas y el índice de contenidos ignoran. Dos cosas siguen como estaban. Un guion blando escrito en una aparición de una palabra sigue decidiendo esa aparición, y un guion blando ante la primera letra deja entera una aparición sin necesidad de lista (ver Dónde nunca se corta una línea). Y una palabra más ancha que la medida entera se sigue dividiendo: por los puntos de su entrada si los tiene y, si no, por las sílabas del diccionario. Con menos palabras divididas, una columna justificada estrecha tiene menos maneras de llenar sus líneas, así que revisa el espaciado entre palabras después de desactivar capitalized en una página a tres columnas. El EPUB de maquetación fluida deja la separación silábica al sistema de lectura, que no sabe nada de estas reglas.
#Texto en bandera
Por defecto solo se divide el texto justificado: con textAlign: 'left', y en los estilos de párrafo alineados a la izquierda, centrados o a la derecha, todas las palabras se mantienen enteras por irregular que quede el margen, salvo en un guion blando (U+00AD) escrito en el texto. Fija hyphenation.ragged: true para separar sílabas también en el texto en bandera.
Una línea en bandera nunca se estira, así que dividir toda palabra que no cabe llenaría el margen de guiones. La zona de separación lo limita, como hace el componedor de una sola línea de los programas de maquetación. Cuando una palabra no cabe al final de una línea, el motor mira el hueco que dejaría pasarla entera a la línea siguiente. Si ese hueco es mayor que zone, divide la palabra por la última sílaba que cabe; si no, la palabra baja entera. Una zona en em es relativa al cuerpo del propio texto. La zona por defecto, 3em, solo divide las palabras que dejarían una línea claramente corta. Una zona más ancha da menos guiones y un margen más irregular; con 0 se divide toda palabra que no cabe. Línea a línea, nunca terminan más de dos líneas seguidas en sílaba. Los guiones propios de la palabra (enseñanza-aprendizaje), las juntas de las URL, los guiones blandos escritos en el texto y las palabras más anchas que la línea entera se cortan como siempre: la zona y el límite de dos líneas solo gobiernan las sílabas del diccionario.
El ajuste vale para todo el documento. Se aplica al texto de cuerpo y a las citas cuando van en bandera, y a todo estilo de párrafo y cuerpo de recuadro en bandera que tenga activada su propia hyphenation (que toma por defecto el hyphenation.enabled del cuerpo), de modo que hyphenation: false mantiene enteras las palabras de un estilo. Los títulos, los pies, las notas, las celdas de tabla y el índice de contenidos no se dividen; en ellos, como en todas partes, solo se corta una palabra más ancha que la medida entera. El texto de diseño — cabeceras corridas, portadillas, páginas de parte — sigue la marca hyphenate de cada elemento de texto, que llevan activada las portadillas de página completa y las páginas de parte integradas, y también usa el diccionario del documento. El texto justificado ignora ragged y zone.
const config: PostextConfig = {
locale: 'es',
bodyText: {
textAlign: 'left',
// Algo más de separación silábica que con la zona por defecto de 3 em.
hyphenation: { ragged: true, zone: { value: 2, unit: 'em' } },
},
};Con optimalRagged (el valor por defecto), el texto corrido en bandera se compone con Knuth-Plass, y la zona conserva su sentido: una palabra solo se divide cuando no cabe en lo que queda de línea y pasarla entera abajo dejaría vacío más que la zona. Dos sílabas seguidas no se rechazan, pero cuestan lo que dos guiones seguidos en el texto justificado, así que una tercera es rara. Con optimalRagged: false, o con optimalLineBreaking: false, cada línea se llena antes de pasar a la siguiente, como hasta postext 1.4.
La separación silábica en bandera compone los párrafos con el divisor de líneas que usan siempre los párrafos con formato en línea (negrita, cursiva, enlaces, fórmulas), así que activarla puede mover algún corte que no es un guion. En una línea en bandera, además de en los espacios y en las sílabas del diccionario, ese divisor corta tras un guion o una raya entre dos palabras (largas—separadas; con breakAfterDashes, tras cualquier raya puesta entre palabras sin espacios, también I.—Que y calidad–*precio*), en las juntas de las URL y entre ideogramas, y mantiene unida una palabra escrita en varios tramos (**Nota**:, (*véase*). Sin separación silábica en bandera, un párrafo en bandera sin formato lo corta Knuth-Plass cuando optimalRagged está activado (el valor por defecto): en los espacios, tras un guion entre dos letras (enseñanza- · aprendizaje), como el otro divisor, y, con breakAfterDashes, tras las rayas entre palabras. Línea a línea, pasa por el divisor de pretext, que difiere en tres cosas: puede cortar también antes de la raya que cierra un inciso o después de la que lo abre (él · — y), tras una barra cuando divide sílabas (km/ · h), y corta una palabra más ancha que la línea por cualquier carácter y sin guion, donde el otro divisor la parte antes por una sílaba.
En el Sandbox el interruptor es Separación silábica en bandera, bajo la alineación de párrafo de la sección Texto base, con la zona debajo. Con el cuerpo justificado, el mismo interruptor aparece junto a los ajustes de justificación, para los estilos de párrafo y recuadros en bandera.
#Idioma del documento
El locale de primer nivel es el idioma del documento en su conjunto. Admite los mismos valores que hyphenation.locale y es el valor al que recurre ese campo cuando no está definido, de modo que a un libro en español le basta locale: 'es' para separar sílabas en español. También elige el idioma de las cadenas integradas de continuación de tablas y de avisos partidos ((cont.) / Continued frente a Continúa, ver Tablas más altas que la página y Marcas de un recuadro partido) y el de los números de encabezado escritos con letras (Chapter One frente a Capítulo uno, ver Números con letras), y es el idioma que se etiqueta en un PDF accesible. Sin definir, el motor asume 'en-us'; el Sandbox recurre al idioma de la interfaz y muestra el campo en Diseño › Escritura.
También elige los tipos de recurso integrados. Cuando resourceTypes no está definido, buildDocument numera y rotula con defaultResourceTypes(locale), así que locale: 'de' basta para obtener Abbildung 1.1 y Tabelle 1.1. Si locale no está definido, lo sustituye el idioma de la separación silábica, tanto para los tipos de recurso como para las cadenas de las tablas. Una lista resourceTypes explícita siempre manda. Las versiones anteriores usaban los tipos en inglés fuera cual fuera el locale, salvo que pasaras tú mismo defaultResourceTypes(locale); un documento que fija locale y quiere conservar las etiquetas inglesas pasa resourceTypes: defaultResourceTypes('en'). Los libros del Sandbox y los paquetes llevan su propia lista, así que no les afecta.
Aquí vale cualquier etiqueta BCP 47, igual que en hyphenation.locale: 'de-AT' recibe las cadenas alemanas. Las cadenas integradas existen en los ocho idiomas que admite la separación silábica, en chino (en caracteres simplificados y tradicionales), en japonés y en árabe; cualquier otro idioma recibe las inglesas.
El chino admite zh, zh-Hans, zh-Hant, zh-CN, zh-SG, zh-TW, zh-HK, zh-MO y las formas largas (zh-Hant-TW), en mayúsculas o minúsculas y con - o _. Las cadenas siguen la escritura, leída con Intl.Locale(tag).maximize(): zh, zh-CN y zh-SG son chino simplificado; zh-TW, zh-HK y zh-MO, tradicional. Los valores tipográficos que dependen del idioma siguen en cambio la región, como recomienda clreq §1.2: CN, SG y MY cuentan como China continental, TW como Taiwán, HK y MO como Hong Kong, y una etiqueta sin región se rige por su escritura (zh-Hant es Taiwán; zh y zh-Hans, la China continental). El japonés admite ja, ja-JP, ja-Jpan y cualquier otra etiqueta ja (isJapaneseLanguage(tag)); desde postext 1.16 tiene sus propias cadenas y su propia región, japan, cuyos valores tipográficos por defecto siguen JLReq (ver Composición japonesa). Una tabla de cadenas sin entrada japonesa da el inglés, nunca el chino. localeScript(tag), cjkRegionOf(tag), stringsKeyOf(tag) y sameContentLocale(a, b) devuelven estas lecturas, y DOCUMENT_LANGUAGES enumera los idiomas con cadenas integradas, cada uno con su nombre en su propia lengua (日本語 entre las entradas chinas y العربية), tal como los muestra el selector de idioma del documento del Sandbox.
| Idioma | Figura: nombre, plural, etiqueta corta | Tabla: nombre, plural, etiqueta corta | Continuación de tabla: continuedSuffix, continuesMarker |
|---|---|---|---|
Inglés (en) | Figure, Figures, Fig. | Table, Tables, Tab. | (cont.), Continued |
Español (es) | Figura, Figuras, Fig. | Tabla, Tablas, Tabla | (cont.), Continúa |
Francés (fr) | Figure, Figures, Fig. | Tableau, Tableaux, Tabl. | (suite), À suivre |
Alemán (de) | Abbildung, Abbildungen, Abb. | Tabelle, Tabellen, Tab. | (Forts.), Wird fortgesetzt |
Italiano (it) | Figura, Figure, Fig. | Tabella, Tabelle, Tab. | (segue), Continua |
Portugués (pt) | Figura, Figuras, Fig. | Tabela, Tabelas, Tab. | (cont.), Continua |
Catalán (ca) | Figura, Figures, Fig. | Taula, Taules, Taula | (cont.), Continua |
Neerlandés (nl) | Figuur, Figuren, Fig. | Tabel, Tabellen, Tab. | (vervolg), Wordt vervolgd |
Chino simplificado (zh-Hans, zh, zh-CN) | 图, 图, 图 | 表, 表, 表 | (续), 接下页 |
Chino tradicional (zh-Hant, zh-TW, zh-HK) | 圖, 圖, 圖 | 表, 表, 表 | (續), 接下頁 |
Japonés (ja, ja-JP) | 図, 図, 図 | 表, 表, 表 | (続き), 次ページへ続く |
Árabe (ar, ar-EG, ar-MA…) | شكل, أشكال, شكل | جدول, جداول, جدول | (تابع), يتبع |
El prefijo del pie es el nombre del tipo (Figura 1.1.). Los tipos chinos numeran dentro del capítulo con un guion, {h1}-{n} (图 1-1); con los ajustes de pie labelNumberGap: '' y labelSeparator: ' ' el pie se lee 图1-1 标题 (ver Estilo de pies de recurso). El índice alfabético sigue también el idioma: 见 y 另见 ante una remisión, 符号 y 数字 sobre los símbolos y los números en chino simplificado; 見, 另見, 符號 y 數字 en tradicional. El japonés numera sus tipos del mismo modo y compone sus pies como 図1-1 題 sin los dos ajustes, escribe las referencias cruzadas como 第3章, 2.3節 y 12ページ, titula la bibliografía 参考文献, y su índice imprime 記号 y 数字 sobre los símbolos y los números y escribe sus remisiones con una flecha, →夏目漱石 para véase y →夏目漱石、森鷗外も見よ tras las páginas para véase también, con las etiquetas en redonda. El árabe numera sus tipos del mismo modo, {h1}-{n} (شكل 2-3), escribe las referencias cruzadas como الفصل 3, القسم 2-1 y ص 12, titula la bibliografía المراجع, y su índice imprime انظر / انظر أيضًا, رموز y أرقام, con la coma y el punto y coma árabes (، ؛).
Un documento en chino, japonés o coreano declara su idioma en la salida HTML (lang en la raíz .pt-doc, con zh-Hant-TW completo) y en el canvas que pinta (ctx.lang, en Chrome 136 y posteriores), de modo que el navegador dibuja las formas de glifo de su región: Unicode unifica los caracteres han, y un mismo punto de código se ve distinto en una fuente taiwanesa y en una japonesa. Desde postext 1.30 también lo hacen los demás documentos, en el idioma en el que se compone su texto (bodyText.shapingLanguage: 'document', el valor por defecto); con 'host' los demás documentos no llevan lang, y todo canvas pinta en el idioma de la página que lo aloja. El PDF declara /Lang a partir de locale para todo documento, etiquetado o no, con su escritura y su región. Un documento en un idioma que se escribe de derecha a izquierda (árabe, persa, urdu, hebreo…) también declara su idioma: las formas de la lengua de la fuente (locl) y la fuente de reserva lo siguen.
const config: PostextConfig = {
locale: 'es',
bodyText: { textAlign: 'justify', hyphenation: { enabled: true } }, // separa sílabas en español
};#Cifras del documento
La clave numerals de primer nivel fija las cifras de todos los números que escribe el motor: los números de página y las etiquetas de página del índice general, del índice alfabético y de las referencias a página; los números de las listas ordenadas y de las notas; los contadores de títulos y capítulos, {chapterNumber}; el {h1} y el {n} del número de una figura y de una referencia a ella; {totalPages}, {bookTotalPages} y {numberDecimal}. 'latn' escribe 0–9, 'arab' las cifras arábigo-índicas ٠–٩ y 'arabext' las persas ۰–۹. Solo cambia el formato decimal —decimal, el arabic de las listas o un ajuste que se deja por defecto—, así que un formato que el autor nombra se imprime como se nombra: lower-roman sigue siendo i, ii, iii, y arabic-indic en un documento latino escribe ١, ٢, ٣. El texto del documento nunca se reescribe.
El valor por defecto, 'auto', toma las cifras de locale (defaultNumeralsFor(tag)): 'arab' para el árabe sin región o con cualquier región fuera del Magreb (ar, ar-EG, ar-SA, ar-AE…), 'latn' para ar-MA, ar-DZ, ar-TN, ar-LY, ar-MR y ar-EH, 'arabext' para el persa (fa), el pastún (ps) y el urdu de la India (ur-IN), y 'latn' para todo lo demás, incluido el urdu de Pakistán. CLDR da latn para ar sin región y para ar-AE; los libros árabes del Máshrek y del Golfo imprimen ٠–٩, y Postext sigue a los libros. Una etiqueta que nombra sus cifras las conserva: ar-MA-u-nu-arab. Una página numerada con las cifras del documento guarda arabic-indic o persian como pageNumberFormat, de modo que las etiquetas de página del PDF muestran las mismas cifras. Un valor desconocido sigue la lengua y se avisa como unknownNumerals.
Los números que escribe el autor se leen en cualquiera de los tres sistemas: un elemento de lista ٣. empieza en 3, y {startAt=٥}, :::numbering{startAt=٥}, :::space{lines=٢} y :::part{number="٣"} (para {numberDecimal}) leen 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, 3#Dirección del texto
direction, en el primer nivel, fija la dirección base del documento: 'ltr', 'rtl' o 'auto' (lo predeterminado), que es 'rtl' cuando la escritura del locale se escribe de derecha a izquierda (árabe, persa, urdu, hebreo, siríaco, thaana, n'ko, adlam…, según directionOf(tag)) y 'ltr' en los demás casos. Un documento de derecha a izquierda se compone en un marco espejado: sus líneas empiezan a la derecha, su primera columna es la de la derecha, sus sangrías, marcadores de lista, flotantes, notas al pie y cajas quedan a la derecha, y page.binding: 'auto' lo encuaderna por la derecha. La configuración resuelta solo lleva direction: 'rtl' en un documento así, de modo que un documento de izquierda a derecha se resuelve igual que antes. Un valor desconocido se lee como 'auto' y se avisa como unknownConfigValue. El algoritmo bidireccional de Unicode (UAX #9) ordena los tramos de cada línea en cualquiera de las dos direcciones: una cita árabe en un libro inglés se lee de derecha a izquierda en su sitio.
Dentro del documento, un título o un contenedor ::: admite {dir=ltr} o {dir=rtl}, y :ltr[…] y :rtl[…] aíslan un tramo de texto (véase Dirección del texto en el marcado); un recurso de tabla admite table.direction. Un bloque compuesto contra la dirección del documento conserva su propio lado de principio: su sangría, sus marcadores de lista y el final alineado de su última línea pasan al lado por el que empieza su texto.
Un ajuste que nombra un lado se refiere a un lado del texto o del flujo, nunca del pliego, así que un diseño hecho para un libro inglés sigue valiendo cuando el libro pasa a árabe. 'start' y 'end' se aceptan como nombres explícitos:
| Ajuste | 'left' / 'right' | 'start' / 'end' |
|---|---|---|
textAlign del cuerpo, los títulos, los estilos de párrafo, las partes, las notas al pie y el cuerpo de los avisos; align del pie y de su nota | Los lados del texto: 'left' es el lado por el que empieza la línea, la derecha de un párrafo árabe, y allí va la última línea de un párrafo justificado. | Sinónimos de 'left' y 'right'. La configuración resuelta lleva 'left' / 'right'; la guardada conserva lo que se escribió. |
align de una celda de tabla | Los lados del texto de la celda, leídos en la dirección de la tabla (table.direction). | Sinónimos, leídos en la dirección de la tabla. |
placement.align (flotantes, figuras estrechas) | Los lados del flujo: en un libro de derecha a izquierda, 'left' es la derecha del pliego. | Sinónimos. |
stripe.side, icon.cornerSide y labelTab.position de los avisos ('top-start', 'top-end') | Los lados del flujo, los mismos para todas las cajas de la página. | La dirección de la propia caja (un :::callout{dir=ltr} en un libro árabe empieza por la izquierda del pliego). |
| Ranuras de cabecera y pie; elementos de diseño anclados al pliego | Los lados del pliego. | Solo los elementos de texto: el principio y el final de su propia direction. |
placement.rotate conserva su sentido físico en una página espejada: una figura girada en el sentido de las agujas del reloj queda girada así en el pliego. Quien lee la maquetación encuentra el marco espejado en cada página (VDTPage.flow con direction: 'rtl', pageIsMirrored(page)) y el orden visual de los segmentos de cada línea en VDTLine.order; flowToPage y pageToFlow pasan del flujo al pliego y al revés. Véase Composición árabe.
const arabe: PostextConfig = { locale: 'ar' }; // de derecha a izquierda, encuadernado por la derecha
const ingles: PostextConfig = { locale: 'en', direction: 'rtl' }; // forzado; rara vez es lo que quieres#Idiomas y escrituras
Postext compone escrituras alfabéticas que se escriben de izquierda a derecha, y el chino y el japonés a lo ancho de la página y a lo alto. Composición china y Composición japonesa explican cómo se componen y qué ajustes los gobiernan; las claves están en Tipografía de Asia oriental, Escritura vertical y Encuadernación. Lo que recibe cada escritura:
- El chino lo compone el compositor CJK cuando un párrafo tiene más caracteres CJK que espacios entre palabras: sus líneas se cortan entre caracteres con las reglas de principio y final de línea de
cjk.lineBreak(ninguna línea empieza por 。、」 o ー, ninguna termina en 「 o (), mantienen enteros —— y ……, un número con sus signos y una palabra latina, y una línea justificada se ensancha entre sus caracteres hasta la medida. El ancho de la puntuación, la puntuación colgada, el espacio entre chino y latín, la retícula de caracteres, los puntos de énfasis, las marcas de nombre propio y de título, el ruby y las notas warichu siguen la región delocale, a lo largo de la línea horizontal o de la vertical (layout.writingMode: 'vertical-rl'). Un párrafo latino que cita unas pocas palabras CJK conserva la división óptima de líneas y puede cortarse junto a ellas; un signo de apertura o cierre CJK, el punto medio o un signo de ancho completo citados en texto latino (〈h〉, %) no cambian nada. - El japonés pasa por el mismo compositor con reglas propias desde postext 1.16, las de los Requisitos para la composición de textos japoneses del W3C (JLReq) y la JIS X 4051: un
localejada la regiónjapan, cuyos valores automáticos fijan los niveles de kinsoku de JLReq (los kana pequeños y ー nunca abren línea), la puntuación de ancho completo con compresión de parejas, un cuadratín tras ?!, el paréntesis que abre un párrafo en la segunda mitad de la sangría, marcas de énfasis de sésamo sobre el texto, títulos de obras entre 『』, furigana repartidos 1:2:1, contadores japoneses, notas y un índice ordenado por la lectura. Las versiones anteriores componían el japonés con los valores por defecto de China continental. - El coreano pasa por el mismo compositor y se compone sin separación silábica, pero con los valores por defecto de China continental: sus reglas propias (KLREQ) no están implementadas. El coreano se corta entre sílabas además de en sus espacios.
- El árabe y las demás escrituras de derecha a izquierda (persa, urdu, hebreo…) se componen de derecha a izquierda; Composición árabe explica cómo. La
directiondel documento sale de la escritura dellocale, el algoritmo bidireccional de Unicode ordena las palabras latinas y las cifras dentro de cada línea, el libro se encuaderna por la derecha con la primera columna a la derecha, y cada número que escribe el motor toma las cifras de la región. Una palabra con una letra del alfabeto árabe no se divide, no se espacia ni se corta nunca, y una línea árabe justificada se estira en sus espacios y con cachidas. Los signos vocálicos, el énfasis, las notas al pie y las cadenas del árabe están en Texto árabe. El persa, el urdu y el hebreo reciben la dirección, las cifras y las reglas de palabra entera, pero no cadenas integradas propias.
Hay patrones de separación silábica para ocho idiomas (en-us, es, fr, de, it, pt, ca, nl); los tipos de recurso integrados y las cadenas de continuación existen en esos ocho, en chino, en japonés y en árabe. El chino, el japonés, el coreano y las lenguas que se escriben de derecha a izquierda se componen sin separación silábica. Cualquier otro idioma se divide con los patrones del inglés de EE. UU., con un aviso en la consola, y recibe las cadenas inglesas. Para un documento así, fija hyphenation.enabled: false y pasa resourceTypes y las cadenas de continuación de tableStyle en su idioma.
#Texto árabe
Estos ajustes sirven al texto en alfabeto árabe; ninguno cambia un documento escrito en otra escritura. Composición árabe los explica junto con el resto de un libro árabe: dirección, encuadernación, cifras, verso, índice general e índice analítico.
- Signos vocálicos e interlineado. Los signos vocálicos de un texto vocalizado (fatḥa, kasra, shadda, tanwīn, el alif volado, los signos coránicos) se apilan sobre y bajo las letras, en el interlineado, que no crece por ellos. Cada línea con signos anota hasta dónde llega su tinta (
VDTLine.markInk), y el recorte de columna de los renderizadores incluye los signos de la primera y la última línea de cada columna. Cuando un signo sobre una palabra toca las letras o los signos que cuelgan bajo la palabra de encima, la composición avisa del párrafo (arabicMarksExceedLeading, en el panel Revisión del Sandbox). Solo se comparan palabras que están una sobre otra. El texto vocalizado en parte pide unos 1,7–1,85 em delineHeight, y el verso vocalizado del todo 1,9–2,1 em. - Énfasis. La letra árabe no tiene cursiva, así que en un documento cuyo
localese escribe en alfabeto árabe*…*se compone por defecto en negrita (bodyText.emphasis: 'auto').'color'lo compone en redonda conitalicColor, y'overline'traza una raya encima de las palabras, el khaṭṭ fawqī de los libros árabes. El ajuste alcanza todo texto compuesto con las fuentes del cuerpo: párrafos, listas, citas, estilos de párrafo, cuerpo de los recuadros, notas y encabezados. Los pies, las celdas de tabla, el índice general y el índice analítico conservan sus propios ajustes de cursiva. Se elija lo que se elija, el motor nunca inclina letras árabes: las palabras árabes de un tramo en cursiva van en redonda y sus palabras latinas conservan la cursiva. En un documento así, las citas van en redonda por defecto. - Tashkīl.
bodyText.tashkil: 'strip'quita los signos vocálicos y coránicos del texto que se compone, para una edición sin vocales hecha a partir de una fuente vocalizada: fatḥa, ḍamma, kasra y sus tanwīn, sukūn, shadda, el alif volado (هٰذا pasa a هذا) y los signos U+0656–U+065F y U+06D6–U+06ED.'strip-vowels'conserva la shadda, como la imprimen la mayoría de los libros modernos. La hamza y la madda se quedan (أ إ آ son letras, también tecleadas con signos combinantes). La fuente conserva sus signos; las líneas, los encabezados y el índice general se componen sin ellos, y cada carácter compuesto sigue apuntando a su lugar en la fuente. - Notas al pie.
footnotes.markerTemplate: '({n})'escribe las llamadas «(١)» con las cifras del documento,numbering: 'page'las reinicia en cada página ynoteNumberPosition: 'inline'pone sobre la línea el número de la nota. El filete separador y los números de nota quedan al principio de la columna, a la derecha en un libro de derecha a izquierda. - Palabras enteras. Una palabra con una letra del alfabeto árabe nunca se divide, se corta ni se espacia, en un libro árabe o citada en otro. Un estilo que pone
letterSpacinga texto árabe se avisa (joiningScriptLetterSpacing), y una palabra más ancha que su línea la desborda y se avisa (unbreakableWordOverflow). Véase Composición árabe. - Cachida y verso. Una línea árabe justificada se estira con cachidas además de en sus espacios (
bodyText.kashida, véase Cachida en el texto árabe), y un poema clásico se compone un bayt por línea en dos hemistiquios de una misma anchura con:::verse(véase:::verse). - Índice analítico. Un índice en árabe ordena alfabéticamente y no tiene en cuenta el artículo ال (
index.ignoreArticle), los signos vocálicos ni los soportes de la hamza; véase Índice analítico.