# 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

- Versión HTML: https://postext.dev/es/docs/configuration-language
- Última actualización: 2026-10-16
- Tiempo de lectura: 23 min
- Otros idiomas: [en](https://postext.dev/en/docs/configuration-language.md), [ca](https://postext.dev/ca/docs/configuration-language.md), [de](https://postext.dev/de/docs/configuration-language.md), [fr](https://postext.dev/fr/docs/configuration-language.md), [it](https://postext.dev/it/docs/configuration-language.md), [pt](https://postext.dev/pt/docs/configuration-language.md), [zh](https://postext.dev/zh/docs/configuration-language.md), [ja](https://postext.dev/ja/docs/configuration-language.md), [ar](https://postext.dev/ar/docs/configuration-language.md)

## 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](https://postext.dev/es/docs/justification.md) para una explicación detallada. El texto en bandera solo se divide si se pide: ver [Texto en bandera](https://postext.dev/es/docs/configuration-language.md#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](https://postext.dev/es/docs/configuration-language.md#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](https://postext.dev/es/docs/justification.md#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](https://postext.dev/es/docs/configuration-language.md#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](https://postext.dev/es/docs/configuration-language.md#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](https://postext.dev/es/docs/configuration-language.md#idioma-del-documento)).

```ts
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 consola
```

Las 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](https://postext.dev/es/docs/configuration-notes-references.md#citas).

```ts
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](https://postext.dev/es/docs/justification.md#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`.

```ts
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](https://postext.dev/es/docs/configuration-resources.md#tablas-más-altas-que-la-página) y [Marcas de un recuadro partido](https://postext.dev/es/docs/configuration-callouts.md#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](https://postext.dev/es/docs/configuration-headings.md#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](https://www.w3.org/TR/clreq/#x1-2-basic-features-of-chinese-script): 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](https://postext.dev/es/docs/japanese-layout.md)). 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](https://postext.dev/es/docs/configuration-resources.md#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'`](https://postext.dev/es/docs/configuration-text.md#texto-de-cuerpo), 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.

```ts
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.

```ts
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'`](https://postext.dev/es/docs/configuration-page-layout.md#encuadernación) 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](https://postext.dev/es/docs/document-format-inline.md#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](https://postext.dev/es/docs/arabic-layout.md#dirección-y-algoritmo-bidireccional).

```ts
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](https://postext.dev/es/docs/chinese-layout.md) y [Composición japonesa](https://postext.dev/es/docs/japanese-layout.md) explican cómo se componen y qué ajustes los gobiernan; las claves están en [Tipografía de Asia oriental](https://postext.dev/es/docs/configuration-east-asian.md#tipografía-de-asia-oriental), [Escritura vertical](https://postext.dev/es/docs/configuration-page-layout.md#escritura-vertical) y [Encuadernación](https://postext.dev/es/docs/configuration-page-layout.md#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 de `locale`, 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 `locale` `ja` da la región `japan`, 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](https://postext.dev/es/docs/arabic-layout.md) explica cómo. La [`direction`](https://postext.dev/es/docs/configuration-language.md#dirección-del-texto) del documento sale de la escritura del `locale`, 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](https://postext.dev/es/docs/configuration-language.md#cifras-del-documento) 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](https://postext.dev/es/docs/configuration-language.md#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](https://postext.dev/es/docs/arabic-layout.md) 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 de `lineHeight`, y el verso vocalizado del todo 1,9–2,1 em.
- **Énfasis.** La letra árabe no tiene cursiva, así que en un documento cuyo `locale` se escribe en alfabeto árabe `*…*` se compone por defecto en negrita (`bodyText.emphasis: 'auto'`). `'color'` lo compone en redonda con `italicColor`, 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 y `noteNumberPosition: '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 `letterSpacing` a 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](https://postext.dev/es/docs/arabic-layout.md#formas-enlazadas-y-palabras-enteras).
- **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](https://postext.dev/es/docs/justification.md#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`](https://postext.dev/es/docs/document-format-directives.md#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](https://postext.dev/es/docs/configuration-notes-references.md#índice-analítico).
