> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/es/idiomas/01-multilingual-typesetting-on-overleaf-using-polyglossia-and-fontspec.md).

# Composición multilingüe en Overleaf usando polyglossia y fontspec

## Introducción

Este artículo ofrece una visión general de la composición tipográfica de documentos multilingües en Overleaf usando el compilador XeLaTeX (o LuaLaTeX) junto con los `fontspec` y `polyglossia` paquetes de LaTeX.

Para muchos usuarios, si no para la mayoría, la opción predeterminada de motor TeX es `pdfTeX`, que, a diferencia de XeTeX y LuaTeX, no tiene capacidad integrada para leer [UTF-8](https://en.wikipedia.org/wiki/UTF-8) archivos de texto codificados. Usar pdfTeX hace que la composición tipográfica de ciertos idiomas en LaTeX sea muy complicada, especialmente de aquellos que no usan una escritura basada en el alfabeto latino. Algunos paquetes, como [`inputenc`, `fontenc` y](/latex/es/idiomas/05-arabic.md) [`arabtex`](/latex/es/idiomas/05-arabic.md)—proporcionan compatibilidad con pdfTeX para componer idiomas y escrituras no latinas, pero es posible que no todos los glifos y caracteres sean compatibles o se representen correctamente en el PDF de salida, incluso si has usado la `utf8` o `utf8x` opción con `inputenc`.

Para una discusión en profundidad sobre UTF-8, la codificación Unicode y los motores XeTeX/LuaTeX, el artículo de Overleaf [Unicode, UTF-8 y texto multilingüe: una introducción](/latex/es/articulos-en-profundidad/51-unicode-utf-8-and-multilingual-text-an-introduction.md) es una lectura fascinante.

## Llegan XeTeX y LuaTeX

Los motores XeTeX y LuaTeX pueden leer/procesar directamente texto codificado en UTF-8; en consecuencia, ofrecen compatibilidad nativa con Unicode —también pueden [trabajar directamente con fuentes TrueType y OpenType](/latex/es/fuentes/03-xelatex.md) directamente. Estas propiedades los convierten en una elección natural para la composición tipográfica de documentos multilingües o no latinos en LaTeX, produciendo salidas como estas:

![](/files/165b6b050e174a3f73d1705b346ca00b0aa976e4) ![](/files/92cf954ee286f18ddcd1de2edb10e472cd3c2bce) ![](/files/17cdea611b7378ef54c4ac96bf30cc99753391f7)

Estos ejemplos se pueden encontrar en la galería de Overleaf: [Cómo escribir texto multilingüe con distintos sistemas de escritura en LaTeX en Overleaf](https://www.overleaf.com/latex/examples/how-to-write-multilingual-text-with-different-scripts-in-latex/wfdxqhcyyjxz) y [Multilingüe "Gracias"](https://www.overleaf.com/latex/templates/multilingual-thank-you/wjmrnnqkstyf).

Si buscas componer chino, japonés y coreano, echa un vistazo a estos artículos:

* [Chino](/latex/es/idiomas/06-chinese.md)
* [Japonés](/latex/es/idiomas/11-japanese.md)
* [Coreano](/latex/es/idiomas/12-korean.md)

Xe(La)TeX sigue siendo útil para estos idiomas, pero existen motores TeX más especializados, concretamente [diseñados para la composición tipográfica de idiomas CJK](/latex/es/mas-temas/45-tex-primitives-listed-by-cjk-tex-engine.md)—como [pTeX](https://ctan.org/pkg/ptex?lang=en) para la composición tipográfica del japonés.

Ten en cuenta que si tu cursor parece comportarse de forma extraña mientras editas texto en ciertos idiomas en Overleaf, quizá quieras hacer clic en el **Menú** botón de Overleaf (situado encima de la lista de archivos del proyecto) y cambiar la opción “Font Family”. También podrías probar [cambiando las preferencias de fuente monoespaciada de tu navegador](https://www.howtogeek.com/208552/how-to-change-the-default-fonts-in-your-web-browser/) o usar en su lugar la vista de Texto enriquecido de Overleaf. Sin embargo, en el momento de escribir esto, las vistas de Código fuente y Texto enriquecido puede que aún no admitan completamente la edición de texto de derecha a izquierda al nivel de funcionalidad que pretendemos alcanzar.

## Cambiar el compilador del proyecto

El `fontspec` y `polyglossia` los paquetes requieren el compilador XeLaTeX o LuaLaTeX, así que tendrás que configurar tu proyecto de Overleaf para usar uno de esos compiladores. Las instrucciones detalladas se pueden encontrar en nuestro artículo [Elegir un compilador LaTeX](/latex/es/mas-temas/08-choosing-a-latex-compiler.md) pero aquí hay un breve clip de vídeo que muestra cómo configurar el compilador de tu proyecto:

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/2HDpWlJuNR50hknbpxfQdu/93cdc17ef2c6c77249a1c7c76b34a817/choosingcompiler.mp4>" %}

Una vez que estés compilando con XeLaTeX o LuaLaTeX, puedes (y deberías) eliminar los `inputenc` y `fontenc` paquetes del preámbulo de tu archivo .tex porque estos motores compatibles con Unicode asumirán que los archivos de entrada (texto) están codificados en UTF-8. Por cierto, todos los archivos de texto cargados en Overleaf se convierten a UTF-8, así que normalmente deberías usar `utf8` con `inputenc` cuando trabajes con los compiladores pdfLaTeX y LaTeX en Overleaf.

## Si todo tu documento implica solo un idioma

Al usar el `fontspec` paquete quizá te baste con configurar solo una fuente principal (serif), una fuente sans serif y probablemente una fuente monoespaciada diseñada para admitir el idioma que estés componiendo —hay un matiz, pero volveremos a ello más adelante en el artículo. Por ejemplo, si todo tu documento está en griego, con algunas palabras en inglés, puedes escribir simplemente

```latex
\usepackage{fontspec}
\setmainfont[Script=Greek]{GFS Artemisia}
\setsansfont[Script=Greek]{GFS Neohellenic}
\setmonofont[Script=Greek]{Noto Mono}
. . .
Το Lorem Ipsum είναι \textsf{απλά} ένα κείμενο χωρίς νόημα
για τους επαγγελματίες της \texttt{τυπογραφίας} και στοιχειοθεσίας.
```

Puedes elegir fuentes de una [lista de fuentes TrueType y OpenType disponibles](https://www.overleaf.com/help/193). El `Ligatures=TeX` se añade automáticamente para `\setmainfont` y `\setsansfont`, así que no tienes que añadirlo tú mismo. (`\setromanfont` es un alias de `\setmainfont`.)

El código LaTeX anterior produce la siguiente salida:

![](/files/f8968ee2b98dfa5ce7a57a3b3d635ed556a14806)

## Múltiples idiomas/sistemas de escritura en el mismo documento: introducción a polyglossia

Si tu documento contiene cantidades importantes de texto en varios idiomas, el `polyglossia` paquete resulta útil para ocuparse de las convenciones de composición tipográfica y la separación silábica específicas de cada idioma.

```latex
\usepackage{fontspec}
\setmainfont{FreeSerif}
\setsansfont{FreeSans}
\setmonofont{FreeMono}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguages{english,russian,thai}

\begin{document}
\begin{abstract}
Le Lorem Ipsum est simplement du faux texte employé dans
la composition et la mise en page avant impression.
\end{abstract}

Merci. \textenglish{Thank you.} \textrussian{Спасибо.} Et plus de
texte en français!

Le Lorem Ipsum est le faux texte standard ...

\begin{english}
Lorem Ipsum es simplemente texto de relleno ...
\end{english}

\begin{russian}
Lorem Ipsum - это текст-`\textsf{рыба}', часто используемый в
\texttt{печати} и вэб-дизайне. ...
\end{russian}

\begin{thai}
\XeTeXlinebreaklocale "th_TH"
\textenglish{Lorem Ipsum} คือ เนื้อหาจำลองแบบเรียบๆ ที่ใช้กันในธุรกิจงานพิมพ์หรืองานเรียงพิมพ์
\end{thai}
```

![](/files/cada2adc365548ba25a6e0a621a5baac4881391c)

`polyglossia` te permite establecer el idioma principal del documento con `\setdefaultlanguage` (el predeterminado es inglés) y los idiomas “otros” (posiblemente varios) con `\setotherlanguages`. (`\setmainlanguage` es un alias de `\setdefaultlanguage`.) Si esperas usar solo otro idioma extranjero, puedes usar el singular `\setotherlanguage`. Los nombres de los idiomas son los mismos que los usados por `babel`.

Hemos preparado un pequeño ejemplo de un documento (principalmente) en francés que también contiene algo de texto en inglés, ruso y tailandés. Hemos decidido usar las tipografías FreeSerif, FreeSans y FreeMono.

Como el idioma principal del documento es `french`, la `abstract` el entorno produce automáticamente el encabezado ‘Résumé’. Observa cómo, al final del primer párrafo, el signo de exclamación se compone usando la convención tipográfica francesa de espaciado: queda separado de ‘français’ aunque siga inmediatamente a la palabra `français` en el código fuente.

En el texto principal, se pueden incluir breves fragmentos de texto en inglés, cirílico y tailandés en un párrafo de texto francés con `\textenglish{Thank you}`, `\textrussian{Спасибо}` y `\textthai{ขอบคุณ}`. En general, puedes usar `\textLANGUAGE{...}` para componer texto en cualquier `LANGUAGE` que haya sido declarada por `\setdefaultlanguage` y `\setotherlanguages`Debido a que la fuente principal (serif) del documento es FreeSerif, y FreeSerif contiene glifos para las escrituras latina, cirílica y tailandesa (¡y más!), `fontspec` y `polyglossia` puede usarse para representar todo este texto en el PDF de salida.

Para párrafos más largos de texto en idiomas extranjeros/otros, se recomienda usar `\begin{LANGUAGE}`...`\end{LANGUAGE}`, por ejemplo `\begin{russian}`...`\end{russian}`, `\begin{thai}`...`\end{thai}`. En el caso del árabe no puedes usar `\begin{arabic}`...`\end{arabic}`; tendrás que escribir `\begin{Arabic}`...`\end{Arabic}` en su lugar, mientras que `\textarabic{...}` sigue siendo válido.

Puede que se necesiten algunas consideraciones para ciertos idiomas: por ejemplo, dentro del `thai` entorno, las palabras `Lorem Ipsum` deben ir envueltas en un `\textenglish{...}` (o `\textfrench{...}`comando) para asegurarte de que se representen usando los glifos de la escritura latina.

En este punto quizá te preguntes: si FreeSerif es tan versátil y además contiene glifos para ruso y tailandés, ¿por qué seguiríamos necesitando usar `\textrussian`, `\begin{english}`...`\end{english}` etc.? ¿No sería redundante? Veamos qué ocurre cuando eliminamos los `\begin{english}`...`\end{english}` y `\begin{russian}`...`\end{russian}` entornos:

![](/files/3b4c2aa56a66d7908a3be039ba1d25c3937a049e)

Ciertamente, los glifos latinos y cirílicos se representan todos en el PDF de salida, pero observa que algunas palabras ahora se separan incorrectamente: ‘unk-nown’ y ‘unchan-ged’ —y стандартной no se separa en absoluto. Sin los entornos de cambio de idioma, el compilador piensa que estos elementos de texto siguen estando en francés e intenta componerlos usando las convenciones francesas. El compilador intenta aplicar reglas francesas de separación silábica, lo que naturalmente produce resultados incorrectos. Por eso la tipografía y la composición tipográfica son mucho más que el diseño y la selección de fuentes: son disciplinas muy específicas de cada idioma y cultura.

Volviendo a nuestro primer ejemplo en griego, ahora vemos por qué es una buena idea cargar `polyglossia` y usar `\setdefaultlanguage{greek}`: para asegurarte de que el documento se componga siguiendo las convenciones griegas.

## Mezcla de idiomas de derecha a izquierda (RTL) y de izquierda a derecha (LTR)

Debes tener cuidado al componer una mezcla de escrituras de derecha a izquierda (RTL), como el árabe o el hebreo, y escrituras de izquierda a derecha (LTR) en un mismo documento. Considera el siguiente pequeño documento en árabe con una palabra en inglés, usando Amiri como fuente principal:

```latex
\usepackage{polyglossia}
\setdefaultlanguage{arabic}
\setmainfont{Amiri}
\begin{document}
ما هو differentiation
\end{document}
```

que produce:

![](/files/f822df1558a43e0a96b5c553c9bc5d7fbac56105)

El texto se establece automáticamente de derecha a izquierda, comenzando en el borde derecho de la página. La palabra “differentiation” en sí misma se compone correctamente como texto de izquierda a derecha —pero espera, *no es así*! Se representa como “dffirentiation” en la salida. ¿Qué está pasando?

La fuente Amiri sí tiene glifos para alfabetos latinos, pero aquí el texto `differentiation` no está marcado como inglés: el compilador trata `differentiation` como texto de derecha a izquierda, como si fuera una secuencia de caracteres árabes. Durante la composición tipográfica, la secuencia original `iff` se procesa como `ffi` (es decir, como texto RTL) y se compone el glifo de ligadura de Amiri para “ffi”. Marcar la palabra con [ligadura](https://en.wikipedia.org/wiki/Typographic_ligature) asegura que se interprete correctamente como texto de izquierda a derecha. `\textenglish{...}` \textenglish{...}

```latex
\setmainfont{Amiri}
\setotherlanguage{english}
\newfontfamily\englishfont{TeX Gyre Termes}
\begin{document}
ما هو \textenglish{differentiation}
```

![](/files/51850f58614deee5b5aed5046bad77297186c1de)

**Nota:** Si estás acostumbrado a los comandos del paquete `babel` te alegrará saber que los comandos `\selectlanguage`, `\foreignlanguage` y el entorno `otherlanguage` también están admitidos por `polyglossia`.

## Opciones específicas del idioma

Algunos idiomas admiten opciones adicionales de personalización; por ejemplo, `greek` acepta una `variant=ancient`, `mono` o `poly` para el griego antiguo, monótono o politónico; `hindi` se puede configurar con `numerals=western` o `devanagari`. Consulta la [documentación del paquete polyglossia](http://texdoc.net/pkg/polyglossia) para más detalles.

Estas pueden especificarse al cargar el idioma:

```latex
\setdefaultlanguage[variant=poly]{greek}
\setotherlanguage[numerals=western]{hindi}
```

o más tarde, en cualquier momento:

```latex
\setkeys{greek}{variant=ancient}
```

o incluso localmente para un entorno específico:

```latex
\begin{greek}[variant=ancient]
...
\end{greek}
```

## Especificar fuentes para idiomas específicos

Puedes especificar la fuente usada para distintos idiomas. Supón que quieres componer todo el texto en inglés (contenido en nuestro ejemplo anterior) en cursiva; podrías escribir:

```latex
\newfontfamily\englishfont{FreeSerif Italic}
```

![](/files/e3fbd52fa4b24667a43927575d62db0c365df0b9)

Por supuesto, puedes usar algo incluso más llamativo:

```latex
\newfontfamily\englishfont{Chancery Uralic}
```

![](/files/b28fd815589ddc360de76bb451ec1ac4c5aa58d4)

Este mecanismo de establecer fuentes para distintos idiomas o escrituras es especialmente importante cuando utilizas una fuente principal que *no* tiene glifos para todas las escrituras o idiomas de tu documento. Supongamos ahora que decidimos usar Caladea como fuente principal del documento:

```latex
\setmainfont{Caladea}
```

Al compilar veríamos el siguiente error:

```
Error de paquete polyglossia: la fuente romana actual
¡no contiene la escritura cirílica!

(polyglossia)                Por favor, define
\cyrillicfont con \newfontfamily.

Consulta la documentación del paquete polyglossia para
explicación.
Escribe  H <return>  para ayuda inmediata.
 ...

l.15 \select@language {russian}

Error de paquete polyglossia: la fuente romana actual
¡no contiene la escritura tailandesa!

(polyglossia)                Por favor, define
\thaifont con \newfontfamily.

Consulta la documentación del paquete polyglossia para
explicación.
Escribe  H <return>  para ayuda inmediata.
 ...

l.23 \select@language {thai}
...
```

Ahora estamos obligados a especificar qué fuentes usar para las escrituras cirílica y tailandesa. Nuevamente, puedes consultar el [lista de fuentes TrueType y OpenType disponibles](https://www.overleaf.com/help/193) en Overleaf.

```latex
\newfontfamily\cyrillicfont[Script=Cyrillic]{Charis SIL}
\newfontfamily\thaifont[Script=Thai]{Garuda}
```

![](/files/c90d39343b4d38f165e758c6608193f4b02c8602)

**Nota**: está fuera del alcance de este artículo abordar cuestiones relacionadas con la elección de combinaciones de fuentes estéticamente agradables y tipográficamente compatibles.

Observa que hemos definido `\cyrillicfont` en lugar de `\russianfont`, es decir, hemos definido una fuente para la escritura cirílica *script* en lugar del *idioma ruso*. La ventaja de definir `\cyrillicfont` es que si, por ejemplo, `serbian` también es un idioma definido en tu proyecto, entonces `\textserbian` usaría automáticamente la fuente definida. `\cyrillicfont`Si solo hubieras definido `\russianfont`, entonces al usar `\textserbian` volvería a quejarse de “la fuente romana actual no contiene la escritura cirílica” y tendrías que definir `\cyrillicfont` de todos modos — *a menos que* tú *realmente* quisieras usar una fuente diferente para el texto serbio!

Otro escenario similar es la escritura devanagari *script*, que se usa para los idiomas hindi y sánscrito *idiomas*; o la escritura árabe usada para árabe y farsi (persa).

```latex
\setdefaultlanguage{english}
\setotherlanguages{hindi,sanskrit}
\newfontfamily\devanagarifont[Script=Devanagari]{Lohit Devanagari}
...
Hindi: \texthindi{हिन्दी}
Sánscrito: \textsanskrit{संस्कृतम्}
```

![](/files/8fcf513fceb41b795a8e8fb4b4000a286c3a1ae4)

Al usar `\newfontfamily` es necesario especificar el `Script`, de lo contrario algunos glifos podrían representarse incorrectamente; por ejemplo, si solo hubiéramos escrito `\newfontfamily\thaifont{Garuda}` el resultado compuesto podría ser incorrecto (imagen izquierda abajo)—la salida correcta se produce añadiendo `[Script=Thai]`.

Incorrecto: ![](/files/c17bc15644f35cbb0653e587931651193745c221) Correcto: ![](/files/d85406599620fabe35b7ca0ae6a54d5d3bab8782)

## Definir otras familias tipográficas

Veamos otro ejemplo, esta vez con hebreo:

```latex
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=hebrew]{hebrew}
\setotherlanguage{english}
\newfontfamily\hebrewfont[Script=Hebrew]{Hadasim CLM}
\begin{document}
\section{מבוא}
זוהי עובדה מבוססת שדעתו של הקורא תהיה מוסחת עלידי טקטס קריא כאשר הוא יביט בפריסתו.  -
\end{document}
```

![](/files/4e240edeacb6b97cc2621ecb235059b1a460c456)

Hasta ahora todo bien. Ahora supongamos que estábamos usando una plantilla creada originalmente para un documento en inglés, que establece los encabezados de sección en tipo sans serif usando `titlesec` paquete:

```latex
\RequirePackage{titlesec}
\titleformat{\section}{\Large\sffamily\bfseries}{\thesection}{1em}{}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=hebrew]{hebrew}
...
```

Nos encontramos con el mensaje de error:

```
Error de paquete polyglossia: la fuente romana actual
¡no contiene la escritura hebrea!

(polyglossia)                Por favor, define
\hebrewfont con \newfontfamily.

Consulta la documentación del paquete polyglossia para
explicación.
Escribe  H <return>  para ayuda inmediata.
 ...

l.27 \section{מבוא}
```

Esto resulta un poco confuso: ¿no habíamos definido ya `\hebrewfont` como Hadasim CLM? Bueno, en realidad es porque no *hemos especificado una fuente sans serif para hebreo*. Vamos a corregirlo añadiendo una definición para `\hebrewfontsf`:

```latex
\newfontfamily\hebrewfontsf[Script=Hebrew]{Miriam CLM}
```

Y ahora tenemos la salida:

![](/files/a8927dbd301efc3882613dc3a4374ae8c143fbbd)

Si fuera necesario, también podríamos definir una fuente monoespaciada para usar con `\hebrewfonttt`.

## Agradecimientos

Todos los fragmentos de lorem ipsum, en varios idiomas, provienen de [`https://lipsum.com`](https://lipsum.com).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/es/idiomas/01-multilingual-typesetting-on-overleaf-using-polyglossia-and-fontspec.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
