> 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/uk/movi/01-multilingual-typesetting-on-overleaf-using-polyglossia-and-fontspec.md).

# Багатомовна верстка в Overleaf за допомогою polyglossia та fontspec

## Вступ

Ця стаття подає огляд верстки багатомовних документів в Overleaf за допомогою компілятора XeLaTeX (або LuaLaTeX) у поєднанні з `fontspec` та `polyglossia` пакетами LaTeX.

Для багатьох, якщо не для більшості, користувачів типовим вибором рушія TeX є `pdfTeX`, який, на відміну від XeTeX і LuaTeX, не має вбудованої можливості читати [UTF-8](https://en.wikipedia.org/wiki/UTF-8) закодовані текстові файли. Використання pdfTeX значно ускладнює верстку деяких мов у LaTeX, особливо тих, що не використовують латинську систему письма. Деякі пакети — наприклад, [`inputenc`, `fontenc` та](/latex/uk/movi/05-arabic.md) [`arabtex`](/latex/uk/movi/05-arabic.md)— надають pdfTeX підтримку для верстки нелатинських мов і систем письма, але не всі гліфи й символи можуть підтримуватися або коректно відображатися у вихідному PDF, навіть якщо ви використали `utf8` або `utf8x` опцію з `inputenc`.

Для докладного обговорення UTF-8, кодування Unicode та рушіїв XeTeX/LuaTeX, стаття Overleaf [Unicode, UTF-8 та багатомовний текст: Вступ](/latex/uk/dokladni-statti/51-unicode-utf-8-and-multilingual-text-an-introduction.md) — це захопливе читання.

## Знайомтеся: XeTeX і LuaTeX

Рушії XeTeX і LuaTeX можуть безпосередньо читати/обробляти текст, закодований у UTF-8; відповідно, вони пропонують вбудовану підтримку Unicode — вони також можуть [безпосередньо працювати зі шрифтами TrueType і OpenType](/latex/uk/shrifti/03-xelatex.md) Ці властивості роблять їх природним вибором для верстки багатомовних або нелатинських документів у LaTeX, створюючи такі результати:

![](/files/fe84449366845fe535bf241376a620716fabf2f2) ![](/files/388ee87971832d38ee9c8eec7ebd86beee1b4ea8) ![](/files/3f25cc068c8d477a52cf50131503e83422835ab9)

Ці приклади можна знайти в Галереї Overleaf: [Як писати багатомовний текст із різними системами письма в LaTeX на Overleaf](https://www.overleaf.com/latex/examples/how-to-write-multilingual-text-with-different-scripts-in-latex/wfdxqhcyyjxz) та [Багатомовне «Дякую»](https://www.overleaf.com/latex/templates/multilingual-thank-you/wjmrnnqkstyf).

Якщо ви хочете верстати китайську, японську й корейську мови, погляньте на ці статті:

* [Китайська](/latex/uk/movi/06-chinese.md)
* [Японська](/latex/uk/movi/11-japanese.md)
* [корейська](/latex/uk/movi/12-korean.md)

Xe(La)TeX і досі корисний для цих мов, але існують більш спеціалізовані рушії TeX, зокрема [створені для верстки мов CJK](/latex/uk/inshi-temi/45-tex-primitives-listed-by-cjk-tex-engine.md)— такі як [pTeX](https://ctan.org/pkg/ptex?lang=en) для верстки японської.

Зверніть увагу: якщо здається, що курсор поводиться некоректно під час редагування тексту певними мовами в Overleaf, вам може знадобитися натиснути кнопку Overleaf **Меню** (розташовану над списком файлів проєкту) і змінити параметр «Font Family». Також можна спробувати [змінити налаштування моноширинного шрифту у вашому браузері](https://www.howtogeek.com/208552/how-to-change-the-default-fonts-in-your-web-browser/) або замість цього скористатися режимом Rich Text в Overleaf. Однак на момент написання Source і Rich Text режими можуть ще не повністю підтримувати редагування тексту справа наліво на тому рівні функціональності, якого ми прагнемо досягти.

## Зміна компілятора проєкту

Функція `fontspec` та `polyglossia` пакети потребують компілятора XeLaTeX або LuaLaTeX, тож вам потрібно налаштувати проєкт Overleaf для використання одного з цих компіляторів. Детальні інструкції можна знайти в нашій статті [Вибір компілятора LaTeX](/latex/uk/inshi-temi/08-choosing-a-latex-compiler.md) але ось короткий відеофрагмент, що показує, як вибрати компілятор для вашого проєкту:

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

Після того як ви компілюєте за допомогою XeLaTeX або LuaLaTeX, ви можете (і повинні) видалити `inputenc` та `fontenc` пакети з преамбули вашого файлу .tex, оскільки ці рушії з підтримкою Unicode вважатимуть, що вхідні (текстові) файли закодовані в UTF-8. До речі, всі текстові файли, завантажені в Overleaf, перетворюються на UTF-8, тож зазвичай слід використовувати `utf8` з `inputenc` під час роботи з компіляторами pdfLaTeX і LaTeX в Overleaf.

## Якщо весь ваш документ використовує лише одну мову

Під час використання `fontspec` пакета ви можете обійтися лише налаштуванням основного (з засічками) шрифту, шрифту без засічок і, ймовірно, моноширинного шрифту, призначеного для підтримки мови, яку ви верстаєте — втім, тут є один нюанс, але ми повернемося до нього пізніше в статті. Наприклад, якщо весь ваш документ грецькою мовою, з кількома англійськими словами, ви можете просто написати

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

Ви можете вибирати шрифти з [списку доступних шрифтів TrueType та OpenType](https://www.overleaf.com/help/193). `Ligatures=TeX` опція додається автоматично для `\setmainfont` та `\setsansfont`, тож вам не потрібно додавати її вручну. (`\setromanfont` є псевдонімом для `\setmainfont`.)

Наведений вище код LaTeX створює такий результат:

![](/files/f9ff5cd6f3778ae179ead1257031cd872186a0b3)

## Кілька мов/систем письма в одному документі: представлення polyglossia

Якщо ваш документ містить значні обсяги тексту кількома мовами, пакет `polyglossia` допомагає подбати про мовно-специфічні правила верстки та переносів.

```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}

Дякуємо. \textenglish{Thank you.} \textrussian{Спасибо.} І ще більше
тексту французькою!

Le Lorem Ipsum est le faux texte standard ...

\begin{english}
Lorem Ipsum — це просто текст-заглушка ...
\end{english}

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

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

![](/files/47d5c1775565a483de97efc15b616a8ea1bca16a)

`polyglossia` дозволяє вам задавати основну мову документа за допомогою `\setdefaultlanguage` (за замовчуванням — англійська) та (можливо, кілька) «інших» мов за допомогою `\setotherlanguages`. (`\setmainlanguage` є псевдонімом для `\setdefaultlanguage`.) Якщо ви очікуєте використовувати лише одну іншу іноземну мову, можна використати однину `\setotherlanguage`. Назви мов такі самі, як і ті, що використовуються `babel`.

Ми підготували невеликий приклад (переважно) французького документа, який також містить трохи англійського, російського та тайського тексту. Ми вирішили використати гарнітури FreeSerif, FreeSans і FreeMono.

Оскільки основна мова документа — `французька`, а `abstract` середовище автоматично створює заголовок «Résumé». Зверніть увагу, як наприкінці першого абзацу знак оклику набрано за французькою типографічною конвенцією: його відділено від «français», хоча він одразу слідує за словом `français` у вихідному коді.

У основному тексті короткі англійські, кириличні та тайські фрагменти можна вставляти в абзац французького тексту за допомогою `\textenglish{Thank you}`, `\textrussian{Спасибо}` та `\textthai{ขอบคุณ}`. Загалом, ви можете використовувати `\textLANGUAGE{...}` для верстки тексту будь-якою `LANGUAGE` що була оголошена за допомогою `\setdefaultlanguage` та `\setotherlanguages`. Оскільки основний (з засічками) шрифт документа — FreeSerif, а FreeSerif містить гліфи для латинської, кириличної та тайської (і не лише!) систем письма, `fontspec` та `polyglossia` він може використати його для відтворення всього цього тексту у вихідному PDF.

Для довших абзаців тексту іноземними/іншими мовами рекомендується використовувати `\begin{LANGUAGE}`...`\end{LANGUAGE}`, напр. `\begin{russian}`...`\end{russian}`, `\begin{thai}`...`\end{thai}`. У випадку арабської мови ви не можете використовувати `\begin{arabic}`...`\end{arabic}`; вам доведеться писати `\begin{Arabic}`...`\end{Arabic}` замість цього, тоді як `\textarabic{...}` залишається дійсним.

Для деяких мов можуть знадобитися певні застереження: наприклад, у середовищі `thai` слова `Lorem Ipsum` потрібно обгорнути в `\textenglish{...}` (або `\textfrench{...}`команду, щоб переконатися, що вони відображаються за допомогою гліфів латинської системи письма.

На цьому етапі ви можете запитати: якщо FreeSerif такий універсальний і все одно містить гліфи для російської та тайської мов, навіщо нам і далі використовувати `\textrussian`, `\begin{english}`...`\end{english}` тощо? Хіба це не було б надмірним? Подивімося, що станеться, коли ми приберемо `\begin{english}`...`\end{english}` та `\begin{russian}`...`\end{russian}` середовища:

![](/files/0eef45f7e6775fb75cf16039d1e7480e2e646556)

Звісно, усі латинські та кириличні гліфи відображаються у вихідному PDF, але зауважте, що деякі слова тепер переносяться неправильно: ‘unk-nown’ і ‘unchan-ged’ — а стандартной зовсім не переноситься. Без середовищ перемикання мов компілятор вважає, що ці текстові елементи все ще французькою мовою, і намагається набирати їх за французькими правилами. Компілятор намагається застосувати правила французького переносу, що, природно, дає неправильні результати. Саме тому типографіка і верстка — це набагато більше, ніж просто дизайн і вибір шрифтів: це дисципліни, дуже специфічні для кожної мови й культури.

Повертаючись до нашого першого грецького прикладу, тепер ми бачимо, чому хорошою ідеєю є завантажити `polyglossia` і використовувати `\setdefaultlanguage{greek}`: щоб документ було набрано відповідно до грецьких правил.

## Змішування мов із письмом справа наліво (RTL) і зліва направо (LTR)

Потрібно бути обережним, коли ви верстаєте суміш систем письма справа наліво (RTL), наприклад арабської або івриту, та систем письма зліва направо (LTR) в одному документі. Розгляньмо такий невеликий арабський документ з англійським словом, використовуючи Amiri як основний шрифт:

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

що створює:

![](/files/f595ccb8499150b5c1ad803e4389b6c2b718885f)

Текст автоматично набирається справа наліво, починаючи з правого краю сторінки. Саме слово “differentiation” набирається коректно як текст зліва направо — але зачекайте, *ні, це не так*! У результаті воно відображається як “dffirentiation”! Що відбувається?

Шрифт Amiri справді має гліфи для латинського алфавіту, але тут текст `differentiation` не позначено як англійський: компілятор трактує `differentiation` як текст справа наліво, ніби це послідовність арабських символів. Під час верстки початкова послідовність `iff` обробляється як `ffi` (тобто як текст RTL), і набирається лігатурний [гліф](https://en.wikipedia.org/wiki/Typographic_ligature) для “ffi”. Позначення слова за допомогою `\textenglish{...}` забезпечує його правильне тлумачення як тексту зліва направо.

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

![](/files/fc5c44ec80c2c84594a5c0ff2c87bf5ec5765347)

**Примітка:** Якщо ви звикли до `babel` команд пакета, вам буде приємно дізнатися, що команди `\selectlanguage`, `\foreignlanguage` і середовище `otherlanguage` також підтримуються `polyglossia`.

## Параметри, специфічні для мови

Деякі мови підтримують додаткові параметри для налаштування; наприклад, `greek` приймає `variant=ancient`, `mono` або `poly` для давньогрецької, монотонічної або політонічної грецької; `hindi` можна налаштувати за допомогою `numerals=western` або `devanagari`. Дивіться [документацію пакета polyglossia](http://texdoc.net/pkg/polyglossia) для отримання подробиць.

Їх можна вказати під час завантаження мови:

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

або пізніше в будь-який момент:

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

або навіть локально для конкретного середовища:

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

## Визначення шрифтів для конкретних мов

Ви можете вказати шрифт, що використовується для різних мов. Припустімо, ви хочете набирати весь англійський текст (у нашому попередньому прикладі) курсивом; ви можете написати:

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

![](/files/41f3c73aeed9cae4934a407baab8e8688562c7b1)

Звісно, ви можете використати щось ще більш химерне:

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

![](/files/b890df3ca5787c317dca4af5d4cb6251b9ffcfe2)

Цей механізм задання шрифтів для різних мов або систем письма особливо важливий, коли ви використовуєте основний шрифт, що *не* має гліфи для всіх систем письма або мов у вашому документі. Припустімо, тепер ми вирішили використовувати Caladea як основний шрифт документа:

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

Під час компіляції ми побачили б таку помилку:

```
Package polyglossia Error: The current roman font
не містить кириличної системи письма!

(polyglossia)                Будь ласка, визначте
\cyrillicfont за допомогою \newfontfamily.

Дивіться документацію пакета polyglossia для
пояснення.
Введіть H <return> для негайної допомоги.
 ...

l.15 \select@language {russian}

Package polyglossia Error: The current roman font
не містить тайської системи письма!

(polyglossia)                Будь ласка, визначте
\thaifont за допомогою \newfontfamily.

Дивіться документацію пакета polyglossia для
пояснення.
Введіть H <return> для негайної допомоги.
 ...

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

Тепер ми зобов’язані вказати, які шрифти використовувати для кириличної та тайської систем письма. Знову ж таки, ви можете звернутися до [списку доступних шрифтів TrueType та OpenType](https://www.overleaf.com/help/193) в Overleaf.

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

![](/files/ace8a2465b797a542546bfead0de65e57a231ed9)

**Примітка**: за межами цієї статті залишаються питання, пов’язані з вибором естетично приємних і типографічно сумісних поєднань шрифтів.

Зверніть увагу, що ми визначили `\cyrillicfont` замість `\russianfont`, тобто ми визначили шрифт для кириличного *писем* а не для російської *мови*. Перевага визначення `\cyrillicfont` полягає в тому, що якщо, наприклад, `serbian` також є визначеною мовою у вашому проєкті, тоді `\textserbian` автоматично використовуватиме визначений `\cyrillicfont`. Якщо б ви визначили лише `\russianfont`, тоді використання `\textserbian` знову поскаржиться на «поточний римський шрифт не містить кириличної системи письма», і вам доведеться визначити `\cyrillicfont` в будь-якому разі — *якщо тільки* вас *ви* справді не хотіли використовувати інший шрифт для сербського тексту!

Інший подібний сценарій — це деванагарі *писем*система письма, яка використовується для мов хінді та санскриту *мов*; або арабська система письма, що використовується для арабської та фарсі (перської).

```latex
\setdefaultlanguage{english}
\setotherlanguages{hindi,sanskrit}
\newfontfamily\devanagarifont[Script=Devanagari]{Lohit Devanagari}
...
Хінді: \texthindi{हिन्दी}
Санскрит: \textsanskrit{संस्कृतम्}
```

![](/files/47722d86b15e076703e4e511aa42c4a9d522cc91)

Під час використання `\newfontfamily` необхідно вказати `Script`, інакше деякі гліфи можуть відображатися некоректно; наприклад, якби ми написали лише `\newfontfamily\thaifont{Garuda}` результат верстки може бути неправильним (ліворуч на зображенні нижче) — правильний результат отримується додаванням `[Script=Thai]`.

Неправильно: ![](/files/d101f9421301e8270e2bd3bd568a5e372c1fd4f9) Правильно: ![](/files/59a39c99c9db270033a17c820cf6624381a8ffcb)

## Визначення інших сімейств шрифтів

Розгляньмо ще один приклад, цього разу з івритом:

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

![](/files/f2d6499161b68cd58bd9b4e4040fe9322f0a4a87)

Поки що все добре. Тепер припустімо, що ми використовували шаблон, спочатку створений для англійського документа, який задає заголовки розділів без засічок за допомогою `titlesec` пакета:

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

Нам доводиться зіткнутися з повідомленням про помилку:

```
Package polyglossia Error: The current roman font
не містить івритської системи письма!

(polyglossia)                Будь ласка, визначте
\hebrewfont за допомогою \newfontfamily.

Дивіться документацію пакета polyglossia для
пояснення.
Введіть H <return> для негайної допомоги.
 ...

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

Це трохи збиває з пантелику: хіба ми вже не визначили `\hebrewfont` щоб це був Hadasim CLM? Що ж, насправді причина в тому, що ми *не вказали шрифт без засічок для івриту*. Виправімо це, додавши визначення для `\hebrewfontsf`:

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

А тепер маємо такий результат:

![](/files/a2552816e43ba570c30cd3ae159d936c14abfae8)

За потреби ми також могли б визначити моноширинний шрифт для використання з `\hebrewfonttt`.

## Подяки

Усі фрагменти lorem ipsum різними мовами взяті з [`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/uk/movi/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.
