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

# Skład wielojęzyczny w Overleaf z użyciem polyglossia i fontspec

## Wstęp

Ten artykuł zawiera omówienie składu wielojęzycznych dokumentów w Overleaf przy użyciu kompilatora XeLaTeX (lub LuaLaTeX) w połączeniu z `fontspec` i `polyglossia` pakietami LaTeX.

Dla wielu, jeśli nie większości, użytkowników domyślnym wyborem silnika TeX jest `pdfTeX`, który, w przeciwieństwie do XeTeX i LuaTeX, nie ma wbudowanej możliwości odczytu plików tekstowych zakodowanych w [UTF-8](https://en.wikipedia.org/wiki/UTF-8)  . Używanie pdfTeX sprawia, że skład niektórych języków w LaTeX-u jest bardzo skomplikowany, zwłaszcza tych, które nie używają pisma opartego na alfabecie łacińskim. Niektóre pakiety — takie jak [`inputenc`, `fontenc` i](/latex/pl/jezyki/05-arabic.md) [`arabtex`](/latex/pl/jezyki/05-arabic.md)— zapewniają obsługę pdfTeX dla składu języków i pism niełacińskich, lecz nie wszystkie glify i znaki mogą być obsługiwane lub poprawnie renderowane w wynikowym pliku PDF, nawet jeśli użyto opcji `utf8` lub `utf8x` z opcją `inputenc`.

Aby zapoznać się ze szczegółowym omówieniem UTF-8, kodowania Unicode oraz silników XeTeX/LuaTeX, artykuł Overleaf [Unicode, UTF-8 i tekst wielojęzyczny: wprowadzenie](/latex/pl/artykuly-szczegolowe/51-unicode-utf-8-and-multilingual-text-an-introduction.md) jest fascynującą lekturą.

## XeTeX i LuaTeX

Silniki XeTeX i LuaTeX potrafią bezpośrednio odczytywać/przetwarzać tekst zakodowany w UTF-8; w związku z tym oferują natywną obsługę Unicode — mogą także [pracować z czcionkami TrueType i OpenType](/latex/pl/czcionki/03-xelatex.md) bezpośrednio. Właściwości te czynią je naturalnym wyborem do składu wielojęzycznych lub niełacińskich dokumentów w LaTeX-u, tworząc wyniki takie jak poniższe:

![](/files/30d6774d710b1ffe124bb00f18b5c4c986f7c078) ![](/files/c57f39f3ae1f6784885578556f99aa4885a21bcb) ![](/files/0df86915d447b71b1506dc54087e483fbf158d07)

Te przykłady można znaleźć w Galerii Overleaf: [Jak pisać wielojęzyczny tekst w różnych pismach w LaTeX-u w Overleaf](https://www.overleaf.com/latex/examples/how-to-write-multilingual-text-with-different-scripts-in-latex/wfdxqhcyyjxz) i [Wielojęzyczne „dziękuję”](https://www.overleaf.com/latex/templates/multilingual-thank-you/wjmrnnqkstyf).

Jeśli chcesz składać tekst chiński, japoński i koreański, zapoznaj się z tymi artykułami:

* [chiński](/latex/pl/jezyki/06-chinese.md)
* [japoński](/latex/pl/jezyki/11-japanese.md)
* [koreański](/latex/pl/jezyki/12-korean.md)

Xe(La)TeX nadal jest przydatny dla tych języków, ale dostępne są bardziej wyspecjalizowane silniki TeX, przeznaczone specjalnie [do składu języków CJK](/latex/pl/wiecej-tematow/45-tex-primitives-listed-by-cjk-tex-engine.md)— takie jak [pTeX](https://ctan.org/pkg/ptex?lang=en) do składu języka japońskiego.

Zauważ, że jeśli kursor zachowuje się nieprawidłowo podczas edycji tekstu w niektórych językach w Overleaf, możesz kliknąć przycisk Overleaf **Menu** (znajdujący się nad listą plików projektu) i zmienić opcję „Rodzina czcionek”. Możesz także spróbować [zmienić preferencje czcionki o stałej szerokości w przeglądarce](https://www.howtogeek.com/208552/how-to-change-the-default-fonts-in-your-web-browser/) lub zamiast tego użyć widoku Rich Text w Overleaf. Jednak w chwili pisania tego tekstu widoki Source i Rich Text mogą (jeszcze) nie obsługiwać w pełni edycji tekstu od prawej do lewej na poziomie funkcjonalności, który chcemy osiągnąć.

## Zmiana kompilatora projektu

Ta `fontspec` i `polyglossia` pakiety wymagają kompilatora XeLaTeX lub LuaLaTeX, więc musisz skonfigurować projekt Overleaf do użycia jednego z tych kompilatorów. Szczegółowe instrukcje można znaleźć w naszym artykule [Wybór kompilatora LaTeX](/latex/pl/wiecej-tematow/08-choosing-a-latex-compiler.md) ale oto krótki klip wideo pokazujący, jak ustawić kompilator dla projektu:

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

Po rozpoczęciu kompilacji za pomocą XeLaTeX lub LuaLaTeX możesz (i powinieneś) usunąć `inputenc` i `fontenc` pakiety z preambuły pliku .tex, ponieważ te silniki obsługujące Unicode zakładają, że pliki wejściowe (tekstowe) są zakodowane w UTF-8. Nawiasem mówiąc, wszystkie pliki tekstowe przesłane do Overleaf są konwertowane do UTF-8, więc zazwyczaj należy używać `utf8` z `inputenc` podczas pracy z kompilatorami pdfLaTeX i LaTeX w Overleaf.

## Jeśli cały dokument jest tylko w jednym języku

Podczas używania pakietu `fontspec` możesz ograniczyć się do skonfigurowania głównej czcionki (szeryfowej), czcionki bezszeryfowej i prawdopodobnie czcionki o stałej szerokości, zaprojektowanych do obsługi składanego języka — jest jednak pewien haczyk, do którego wrócimy później w artykule. Na przykład, jeśli cały dokument jest po grecku, z kilkoma angielskimi słowami, możesz po prostu napisać

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

Możesz wybrać czcionki z [listy dostępnych czcionek TrueType i OpenType](https://www.overleaf.com/help/193). Pakiet `Ligatures=TeX` opcja jest dodawana automatycznie dla `\setmainfont` i `\setsansfont`, więc nie musisz dodawać jej samodzielnie. (`\setromanfont` jest aliasem `\setmainfont`.)

Powyższy kod LaTeX generuje następujący wynik:

![](/files/da480e45aea292f3d9b79eba80324cacbbd17d30)

## Wiele języków/pism w tym samym dokumencie: wprowadzenie do polyglossia

Jeśli dokument zawiera nietrywialne ilości tekstu w wielu językach, pakiet `polyglossia` jest pomocny w obsłudze specyficznych dla języka konwencji składu i dzielenia wyrazów.

```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 is simply dummy text ...
\end{english}

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

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

![](/files/1080f467f388f0cb6879a7f6092717988323f387)

`polyglossia` pozwala ustawić główny język dokumentu za pomocą `\setdefaultlanguage` (domyślnie jest to angielski) oraz (potencjalnie wiele) „innych” języków za pomocą `\setotherlanguages`. (`\setmainlanguage` jest aliasem `\setdefaultlanguage`.) Jeśli spodziewasz się używać tylko jednego innego języka obcego, możesz użyć liczby pojedynczej `\setotherlanguage`. Nazwy języków są takie same jak te używane przez `babel`.

Przygotowaliśmy mały przykład dokumentu (głównie) francuskiego, który zawiera także trochę tekstu angielskiego, rosyjskiego i tajskiego. Zdecydowaliśmy się użyć krojów FreeSerif, FreeSans i FreeMono.

Ponieważ głównym językiem dokumentu jest `francuski`, a `abstract` środowisko automatycznie tworzy nagłówek „Résumé”. Zauważ, że na końcu pierwszego akapitu wykrzyknik jest składany zgodnie z francuską konwencją odstępów: jest oddzielony od „français”, mimo że następuje bezpośrednio po słowie `français` w kodzie źródłowym.

W tekście głównym krótkie fragmenty tekstu angielskiego, cyrylicznego i tajskiego można umieścić w akapicie tekstu francuskiego za pomocą `\textenglish{Thank you}`, `\textrussian{Спасибо}` i `\textthai{ขอบคุณ}`. Ogólnie można użyć `\textLANGUAGE{...}` do złożenia tekstu w dowolnym `JĘZYKU` który został zadeklarowany przez `\setdefaultlanguage` i `\setotherlanguages`. Ponieważ główną czcionką (szeryfową) dokumentu jest FreeSerif, a FreeSerif zawiera glify dla pism łacińskiego, cyrylickiego i tajskiego (oraz innych!), `fontspec` i `polyglossia` może użyć jej do wyrenderowania wszystkich tych tekstów w wynikowym pliku PDF.

W przypadku dłuższych akapitów tekstu w językach obcych/innych zaleca się użycie `\begin{LANGUAGE}`...`\end{LANGUAGE}`, np. `\begin{russian}`...`\end{russian}`, `\begin{thai}`...`\end{thai}`. W przypadku języka arabskiego nie można użyć `\begin{arabic}`...`\end{arabic}`; trzeba napisać `\begin{Arabic}`...`\end{Arabic}` zamiast tego, podczas gdy `\textarabic{...}` nadal jest poprawne.

W przypadku niektórych języków mogą być potrzebne pewne uwagi: na przykład w środowisku `thai` słowa `Lorem Ipsum` muszą zostać ujęte w polecenie `\textenglish{...}` (lub `\textfrench{...}`) aby zapewnić ich renderowanie przy użyciu glifów pisma łacińskiego.

W tym momencie możesz zapytać: jeśli FreeSerif jest tak wszechstronna i i tak zawiera glify dla języka rosyjskiego i tajskiego, dlaczego nadal potrzebujemy używać `\textrussian`, `\begin{english}`...`\end{english}` itd.? Czy nie byłoby to zbędne? Zobaczmy, co się stanie, gdy usuniemy środowiska `\begin{english}`...`\end{english}` i `\begin{russian}`...`\end{russian}` :

![](/files/18718cfe77846f10326cb2ee8e5a07224b1673b7)

Z pewnością wszystkie glify łacińskie i cyrylickie są renderowane w wynikowym pliku PDF, ale zauważ, że niektóre słowa są teraz niepoprawnie dzielone: „unk-nown” i „unchan-ged” — a стандартной w ogóle nie jest dzielone. Bez środowisk przełączających język kompilator uważa, że te elementy tekstowe nadal są w języku francuskim, i próbuje składać je zgodnie z francuskimi konwencjami. Kompilator próbuje zastosować francuskie reguły dzielenia wyrazów, co naturalnie daje nieprawidłowe wyniki. Dlatego typografia i skład to znacznie więcej niż tylko projektowanie i wybór czcionek: są to dziedziny bardzo zależne od języka i kultury.

Wracając do naszego pierwszego greckiego przykładu, widzimy teraz, dlaczego dobrym pomysłem jest załadowanie `polyglossia` i użycie `\setdefaultlanguage{greek}`: aby zapewnić skład dokumentu zgodnie z greckimi konwencjami.

## Łączenie języków pisanych od prawej do lewej (RTL) i od lewej do prawej (LTR)

Należy zachować ostrożność podczas składu mieszanki pism od prawej do lewej (RTL), takich jak arabskie czy hebrajskie, oraz pism od lewej do prawej (LTR) w tym samym dokumencie. Rozważ następujący mały dokument arabski z angielskim słowem, używający Amiri jako głównej czcionki:

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

co daje:

![](/files/c5a1e8ccdf2a2681616632a2d3d0388e9cd178af)

Tekst jest automatycznie ustawiany od prawej do lewej, począwszy od prawej krawędzi strony. Samo słowo „differentiation” jest składane poprawnie jako tekst od lewej do prawej — ale chwila, *wcale nie*! W wyniku jest renderowane jako „dffirentiation”! Co się dzieje?

Czcionka Amiri zawiera glify alfabetów łacińskich, ale tutaj tekst `differentiation` nie jest oznaczony jako angielski: kompilator traktuje `differentiation` jako tekst od prawej do lewej, tak jakby był sekwencją znaków arabskich. Podczas składu pierwotna sekwencja `iff` jest przetwarzana jako `ffi` (tj. jako tekst RTL), a glif ligatury [ligatura](https://en.wikipedia.org/wiki/Typographic_ligature) dla „ffi” z czcionki Amiri jest składany. Oznaczenie słowa za pomocą `\textenglish{...}` zapewnia jego prawidłową interpretację jako tekstu od lewej do prawej.

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

![](/files/733153d2dcba34a7495e0b40dd56ea0499fd9a3c)

**Uwaga:** Jeśli znasz polecenia pakietu `babel` z przyjemnością usłyszysz, że polecenia `\selectlanguage`, `\foreignlanguage` oraz środowisko `otherlanguage` są również obsługiwane przez `polyglossia`.

## Opcje specyficzne dla języka

Niektóre języki obsługują dodatkowe opcje dostosowywania; na przykład `greek` akceptuje opcję `variant=ancient`, `mono` lub `poly` dla greki starożytnej, monotonicznej lub politonicznej; `hindi` można skonfigurować za pomocą `numerals=western` lub `devanagari`. Zobacz [dokumentację pakietu polyglossia](http://texdoc.net/pkg/polyglossia) aby poznać szczegóły.

Można je określić podczas ładowania języka:

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

lub później, w dowolnym momencie:

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

lub nawet lokalnie dla określonego środowiska:

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

## Określanie czcionek dla konkretnych języków

Możesz określić czcionkę używaną dla różnych języków. Załóżmy, że chcesz złożyć cały tekst angielski (zawarty w naszym poprzednim przykładzie) kursywą; możesz napisać:

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

![](/files/0527ad5375ade88864b4e9a05096de03905b2d3d)

Oczywiście możesz użyć czegoś jeszcze bardziej ekstrawaganckiego:

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

![](/files/3e30540027e6ee0616540c72b25734b9042129cb)

Ten mechanizm ustawiania czcionek dla różnych języków lub pism jest szczególnie ważny, gdy używasz głównej czcionki, która *nie* nie zawiera glifów dla wszystkich pism lub języków w dokumencie. Załóżmy, że zdecydujemy się teraz użyć Caladea jako głównej czcionki dokumentu:

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

Po kompilacji zobaczylibyśmy następujący błąd:

```
Package polyglossia Error: Bieżąca czcionka rzymska
nie zawiera pisma cyrylickiego!

(polyglossia)                Zdefiniuj proszę
\cyrillicfont za pomocą \newfontfamily.

Zobacz dokumentację pakietu polyglossia, aby poznać
wyjaśnienie.
Wpisz H <return>, aby uzyskać natychmiastową pomoc.
 ...

l.15 \select@language {russian}

Package polyglossia Error: Bieżąca czcionka rzymska
nie zawiera pisma tajskiego!

(polyglossia)                Zdefiniuj proszę
\thaifont za pomocą \newfontfamily.

Zobacz dokumentację pakietu polyglossia, aby poznać
wyjaśnienie.
Wpisz H <return>, aby uzyskać natychmiastową pomoc.
 ...

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

Musimy teraz określić, których czcionek użyć dla pism cyrylickiego i tajskiego. Ponownie możesz odwołać się do [listy dostępnych czcionek TrueType i OpenType](https://www.overleaf.com/help/193) w Overleaf.

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

![](/files/58e21c3bcfb203a5b82cdcc4600e83bd8a5b644d)

**Uwaga**: omówienie zagadnień związanych z wyborem estetycznych i typograficznie zgodnych zestawień czcionek wykracza poza zakres tego artykułu.

Zauważ, że zdefiniowaliśmy `\cyrillicfont` zamiast `\russianfont`, tj. zdefiniowaliśmy czcionkę dla pisma *pismo* a nie dla języka rosyjskiego *język*. Zaletą zdefiniowania `\cyrillicfont` jest to, że jeśli na przykład `serbian` jest również językiem zdefiniowanym w projekcie, wtedy `\textserbian` automatycznie użyłoby zdefiniowanej `\cyrillicfont`. Gdyby zdefiniowano tylko `\russianfont`, wówczas użycie `\textserbian` ponownie zgłosiłoby błąd „bieżąca czcionka rzymska nie zawiera pisma cyrylickiego” i należałoby zdefiniować `\cyrillicfont` mimo wszystko — *chyba że* was *rzeczywiście* miało oznaczać użycie innej czcionki dla tekstu serbskiego!

Innym podobnym scenariuszem jest pismo dewanagari *pismo*, które jest używane dla języków hindi i sanskrytu *języki*; albo pismo arabskie używane dla języka arabskiego i farsi (perskiego).

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

![](/files/d4c539a95e1c40cbb7e676976464511c1ed3a407)

Podczas używania `\newfontfamily` konieczne jest określenie `Script`, w przeciwnym razie niektóre glify mogą zostać wyrenderowane niepoprawnie; na przykład, gdybyśmy napisali tylko `\newfontfamily\thaifont{Garuda}` wynik składu może być błędny (lewy obraz poniżej) — poprawny wynik uzyskuje się przez dodanie `[Script=Thai]`.

Niepoprawnie: ![](/files/a2e156cff53c8c19e6fef8dae2d02bd469c29a69) Poprawnie: ![](/files/73da22370473750b84930b716d47b6f303627ac3)

## Definiowanie innych rodzin czcionek

Spójrzmy na kolejny przykład, tym razem z językiem hebrajskim:

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

![](/files/543b18dfff42d6e997bcd4ece7d8f5ef3b7c4e6f)

Jak dotąd wszystko dobrze. Załóżmy teraz, że używamy szablonu pierwotnie utworzonego dla dokumentu angielskiego, który ustawia nagłówki sekcji czcionką bezszeryfową za pomocą `titlesec` pakiet:

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

Pojawia się komunikat o błędzie:

```
Package polyglossia Error: Bieżąca czcionka rzymska
nie zawiera pisma hebrajskiego!

(polyglossia)                Zdefiniuj proszę
\hebrewfont za pomocą \newfontfamily.

Zobacz dokumentację pakietu polyglossia, aby poznać
wyjaśnienie.
Wpisz H <return>, aby uzyskać natychmiastową pomoc.
 ...

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

To trochę mylące: czy nie zdefiniowaliśmy już `\hebrewfont` jako Hadasim CLM? Otóż wynika to z tego, że *nie określiliśmy czcionki bezszeryfowej dla języka hebrajskiego*. Naprawmy to, dodając definicję dla `\hebrewfontsf`:

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

A teraz otrzymujemy wynik:

![](/files/6294a82da5ae04e709e183e9f782a9be0668a3a9)

W razie potrzeby moglibyśmy również zdefiniować czcionkę o stałej szerokości do użycia z `\hebrewfonttt`.

## Podziękowania

Wszystkie fragmenty lorem ipsum w różnych językach pochodzą z [`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/pl/jezyki/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.
