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

# Penataan huruf multibahasa di Overleaf menggunakan polyglossia dan fontspec

## Pendahuluan

Artikel ini memberikan gambaran umum tentang penataan huruf dokumen multibahasa di Overleaf menggunakan kompiler XeLaTeX (atau LuaLaTeX) bersama dengan `fontspec` dan `polyglossia` paket LaTeX.

Bagi banyak pengguna, jika bukan sebagian besar, pilihan default mesin TeX mereka adalah `pdfTeX`, yang, tidak seperti XeTeX dan LuaTeX, tidak memiliki kemampuan bawaan untuk membaca [UTF-8](https://en.wikipedia.org/wiki/UTF-8) file teks yang dienkode. Menggunakan pdfTeX membuat penataan huruf bahasa tertentu dalam LaTeX menjadi sangat rumit, terutama bahasa yang tidak menggunakan aksara berbasis Latin. Beberapa paket—seperti [`inputenc`, `fontenc` dan](/latex/id/bahasa/05-arabic.md) [`arabtex`](/latex/id/bahasa/05-arabic.md)—menyediakan dukungan bagi pdfTeX untuk menata bahasa dan aksara non-Latin, tetapi tidak semua glif dan karakter mungkin didukung atau dirender dengan benar dalam PDF keluaran, bahkan jika Anda telah menggunakan opsi `utf8` atau `utf8x` dengan `inputenc`.

Untuk pembahasan mendalam tentang UTF-8, pengodean Unicode, dan mesin XeTeX/LuaTeX, artikel Overleaf [Unicode, UTF-8, dan teks multibahasa: Sebuah pengantar](/latex/id/artikel-mendalam/51-unicode-utf-8-and-multilingual-text-an-introduction.md) merupakan bacaan yang sangat menarik.

## Masuklah XeTeX dan LuaTeX

Mesin XeTeX dan LuaTeX dapat langsung membaca/memproses teks berkode UTF-8; akibatnya, keduanya menawarkan dukungan asli untuk Unicode—keduanya juga dapat [bekerja dengan font TrueType dan OpenType](/latex/id/font/03-xelatex.md) secara langsung. Sifat-sifat ini menjadikannya pilihan alami untuk menata dokumen multibahasa atau non-Latin dalam LaTeX, menghasilkan keluaran seperti ini:

![](/files/f8f2647e2622e5212f2a76b12c454ff0cad5bd98) ![](/files/7cfa1e349cb801c9a028ac109d399496559d9bc4) ![](/files/93ad44f9bce570b352af81441bde331fb1f7d7e3)

Contoh-contoh ini dapat ditemukan di Galeri Overleaf: [Cara Menulis Teks Multibahasa dengan Berbagai Aksara di LaTeX di Overleaf](https://www.overleaf.com/latex/examples/how-to-write-multilingual-text-with-different-scripts-in-latex/wfdxqhcyyjxz) dan [Multibahasa "Terima Kasih"](https://www.overleaf.com/latex/templates/multilingual-thank-you/wjmrnnqkstyf).

Jika Anda ingin menata huruf Tionghoa, Jepang, dan Korea, lihat artikel-artikel berikut:

* [Tionghoa](/latex/id/bahasa/06-chinese.md)
* [Jepang](/latex/id/bahasa/11-japanese.md)
* [Korea](/latex/id/bahasa/12-korean.md)

Xe(La)TeX masih berguna untuk bahasa-bahasa ini, tetapi tersedia mesin TeX yang lebih khusus, khususnya [yang dirancang untuk menata bahasa CJK](/latex/id/topik-lainnya/45-tex-primitives-listed-by-cjk-tex-engine.md)—seperti [pTeX](https://ctan.org/pkg/ptex?lang=en) untuk menata bahasa Jepang.

Perhatikan bahwa jika kursor Anda tampak berperilaku aneh saat mengedit teks dalam bahasa tertentu di Overleaf, Anda mungkin ingin mengeklik **Menu** tombol Overleaf [mengubah preferensi font monospasi peramban Anda](https://www.howtogeek.com/208552/how-to-change-the-default-fonts-in-your-web-browser/) atau menggunakan tampilan Rich Text Overleaf sebagai gantinya. Namun, pada saat penulisan, tampilan Source dan Rich Text mungkin belum sepenuhnya mendukung penyuntingan teks kanan-ke-kiri pada tingkat fungsionalitas yang ingin kami capai.

## Mengubah kompiler proyek

Fitur `fontspec` dan `polyglossia` paket-paket memerlukan kompiler XeLaTeX atau LuaLaTeX, jadi Anda perlu menyiapkan proyek Overleaf Anda untuk menggunakan salah satu kompiler tersebut. Petunjuk terperinci dapat ditemukan di artikel kami [Memilih Kompiler LaTeX](/latex/id/topik-lainnya/08-choosing-a-latex-compiler.md) tetapi berikut cuplikan video singkat yang menunjukkan cara mengatur kompiler untuk proyek Anda:

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

Setelah Anda mengompilasi dengan XeLaTeX atau LuaLaTeX, Anda dapat (seharusnya) menghapus `inputenc` dan `fontenc` paket-paket dari preambel file .tex Anda karena mesin yang mendukung Unicode ini akan menganggap file input (teks) dienkode UTF-8. Kebetulan, semua file teks yang diunggah ke Overleaf dikonversi ke UTF-8 jadi biasanya Anda harus menggunakan `utf8` dengan `inputenc` saat bekerja dengan kompiler pdfLaTeX dan LaTeX di Overleaf.

## Jika seluruh dokumen Anda hanya melibatkan satu bahasa

Saat menggunakan `fontspec` paket Anda mungkin bisa cukup dengan hanya menyiapkan font utama (serif), font sans-serif, dan mungkin font monospasi yang dirancang untuk mendukung bahasa yang Anda tata—ada satu kendala, tetapi kita akan membahasnya lagi nanti dalam artikel. Misalnya, jika seluruh dokumen Anda dalam bahasa Yunani, dengan beberapa kata bahasa Inggris, Anda cukup menulis

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

Anda dapat memilih font dari sebuah [daftar font TrueType dan OpenType yang tersedia](https://www.overleaf.com/help/193). Paket `Ligatures=TeX` opsi ditambahkan secara otomatis untuk `\setmainfont` dan `\setsansfont`, jadi Anda tidak perlu menambahkannya sendiri. (`\setromanfont` adalah alias dari `\setmainfont`.)

Kode LaTeX di atas menghasilkan keluaran berikut:

![](/files/dd4abaf4614e4df45810fe66901b68860c811512)

## Beberapa bahasa/aksara dalam dokumen yang sama: Memperkenalkan polyglossia

Jika dokumen Anda berisi teks dalam jumlah yang tidak sedikit dalam beberapa bahasa, paket `polyglossia` sangat membantu untuk menangani konvensi penataan huruf dan pemenggalan kata yang spesifik menurut bahasa.

```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{Спасибо.} Dan lebih banyak
teks dalam bahasa Prancis!

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/cb6f4ad45c1126a6aa8d7060b9cf8cff1eb6a5d7)

`polyglossia` memungkinkan Anda menetapkan bahasa utama dokumen dengan `\setdefaultlanguage` (baku adalah bahasa Inggris) dan bahasa 'lain' (mungkin lebih dari satu) dengan `\setotherlanguages`. (`\setmainlanguage` adalah alias dari `\setdefaultlanguage`.) Jika Anda memperkirakan hanya akan menggunakan satu bahasa asing lainnya, Anda dapat menggunakan bentuk tunggal `\setotherlanguage`. Nama-nama bahasa sama seperti yang digunakan oleh `babel`.

Kami telah menyiapkan contoh kecil dokumen (terutama) berbahasa Prancis yang juga berisi beberapa teks bahasa Inggris, Rusia, dan Thai. Kami memutuskan untuk menggunakan typeface FreeSerif, FreeSans, dan FreeMono.

Karena bahasa utama dokumen adalah `french`,  `abstract` lingkungan secara otomatis menghasilkan judul ‘Résumé’. Perhatikan bagaimana, pada akhir paragraf pertama, tanda seru ditata menggunakan konvensi penataan spasi bahasa Prancis: tanda seru itu dipisahkan dari ‘français’ meskipun langsung mengikuti kata `français` dalam kode sumber.

Dalam teks utama, cuplikan pendek teks Inggris, Kiril, dan Thai dapat disertakan dalam satu paragraf teks Prancis dengan `\textenglish{Thank you}`, `\textrussian{Спасибо}` dan `\textthai{ขอบคุณ}`. Secara umum, Anda dapat menggunakan `\textLANGUAGE{...}` untuk menata teks dalam bahasa apa pun `LANGUAGE` yang telah dideklarasikan oleh `\setdefaultlanguage` dan `\setotherlanguages`. Karena font utama (serif) dokumen adalah FreeSerif, dan FreeSerif berisi glif untuk aksara Latin, Kiril, dan Thai (dan lebih banyak lagi!), `fontspec` dan `polyglossia` dapat menggunakannya untuk merender semua teks ini ke dalam PDF keluaran.

Untuk paragraf teks yang lebih panjang dalam bahasa asing/lainnya, disarankan untuk menggunakan `\begin{LANGUAGE}`...`\end{LANGUAGE}`, mis. `\begin{russian}`...`\end{russian}`, `\begin{thai}`...`\end{thai}`. Dalam kasus bahasa Arab Anda tidak dapat menggunakan `\begin{arabic}`...`\end{arabic}`; Anda harus menulis `\begin{Arabic}`...`\end{Arabic}` sebagai gantinya, sementara `\textarabic{...}` masih valid.

Beberapa pertimbangan mungkin diperlukan untuk bahasa tertentu: misalnya, di dalam lingkungan `thai` , kata-kata `Lorem Ipsum` perlu dibungkus dalam `\textenglish{...}` (atau `\textfrench{...}`) perintah untuk memastikan bahwa teks tersebut dirender menggunakan glif aksara Latin.

Pada titik ini Anda mungkin bertanya: Jika FreeSerif begitu serbaguna dan toh berisi glif untuk bahasa Rusia dan Thai, mengapa kita masih perlu menggunakan `\textrussian`, `\begin{english}`...`\end{english}` dll? Bukankah itu berlebihan? Mari kita lihat apa yang terjadi ketika kita menghapus `\begin{english}`...`\end{english}` dan `\begin{russian}`...`\end{russian}` lingkungan:

![](/files/2943d5fc71ce2cfc9c5936c58be785460357e72c)

Tentu saja, glif Latin dan Kiril semuanya dirender dalam PDF keluaran, tetapi perhatikan bahwa beberapa kata sekarang dipenggal dengan tidak benar: ‘unk-nown’ dan ‘unchan-ged’—dan стандартной sama sekali tidak dipenggal. Tanpa lingkungan pengalihbahasa, kompiler mengira bahwa item teks ini masih dalam bahasa Prancis dan mencoba menatanya menggunakan konvensi Prancis. Kompiler mencoba menerapkan aturan pemenggalan kata bahasa Prancis yang, secara alami, menghasilkan hasil yang salah. Inilah sebabnya tipografi dan penataan huruf jauh lebih dari sekadar desain dan pemilihan font: keduanya merupakan disiplin yang sangat spesifik terhadap bahasa dan budaya.

Meninjau kembali contoh Yunani pertama kita, sekarang kita melihat mengapa merupakan ide yang baik untuk memuat `polyglossia` dan menggunakan `\setdefaultlanguage{greek}`: untuk memastikan dokumen ditata sesuai dengan konvensi Yunani.

## Mencampur bahasa kanan-ke-kiri (RTL) dan kiri-ke-kanan (LTR)

Anda harus berhati-hati saat menata campuran aksara kanan-ke-kiri (RTL), seperti Arab atau Ibrani, dan aksara kiri-ke-kanan (LTR), dalam dokumen yang sama. Pertimbangkan dokumen Arab kecil berikut dengan sebuah kata bahasa Inggris, menggunakan Amiri sebagai font utama:

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

yang menghasilkan:

![](/files/68d015a707ec56ed481ed3fd8484a4cab2c996e0)

Teks secara otomatis ditata dari kanan ke kiri, dimulai dari tepi kanan halaman. Kata “differentiation” itu sendiri ditata dengan benar sebagai teks kiri-ke-kanan—tetapi tunggu, *tidak, itu tidak*! Itu dirender sebagai “dffirentiation” di keluaran! Ada apa ini?

Font Amiri memang memiliki glif untuk alfabet Latin tetapi di sini teks `differentiation` tidak ditandai sebagai bahasa Inggris: kompiler memperlakukan `differentiation` sebagai teks kanan-ke-kiri, seolah-olah itu adalah rangkaian karakter Arab. Selama penataan huruf, urutan asli `iff` diproses sebagai `ffi` (yaitu, sebagai teks RTL) dan glif ligatur Amiri untuk “ffi” ditata. Menandai kata dengan [ligature](https://en.wikipedia.org/wiki/Typographic_ligature) memastikan kata itu diinterpretasikan dengan benar sebagai teks kiri-ke-kanan. `\textenglish{...}` menggunakan

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

![](/files/e28dc8831387b558dfa001520c8cf31988167825)

**Catatan:** Jika Anda terbiasa dengan `babel` perintah paket, Anda akan senang mengetahui bahwa perintah `\selectlanguage`, `\foreignlanguage` dan lingkungan `otherlanguage` juga didukung oleh `polyglossia`.

## Opsi khusus bahasa

Beberapa bahasa mendukung opsi tambahan untuk penyesuaian; misalnya, `greek` menerima sebuah `variant=ancient`, `mono` atau `poly` opsi untuk Yunani kuno, monotonic, atau polytonic; `hindi` dapat dikonfigurasi dengan `numerals=western` atau `devanagari`. Lihat [dokumentasi paket polyglossia](http://texdoc.net/pkg/polyglossia) untuk detail.

Ini dapat ditentukan saat memuat bahasa:

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

atau kemudian kapan saja:

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

atau bahkan secara lokal untuk lingkungan tertentu:

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

## Menentukan font untuk bahasa tertentu

Anda dapat menentukan font yang digunakan untuk bahasa yang berbeda. Misalkan Anda ingin menata semua teks bahasa Inggris (terdapat dalam contoh sebelumnya) dengan huruf miring; Anda dapat menulis:

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

![](/files/e995f22f25cfa67310f7da08958fcc777c46c895)

Tentu saja Anda bisa menggunakan sesuatu yang bahkan lebih mencolok:

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

![](/files/8dbb62fb395fc86d0d3681d9537b983ad6a23ed5)

Mekanisme penetapan font untuk bahasa atau aksara yang berbeda ini sangat penting ketika Anda menggunakan font utama yang *tidak* memiliki glif untuk semua aksara atau bahasa dalam dokumen Anda. Misalkan sekarang kita memutuskan untuk menggunakan Caladea sebagai font utama dokumen:

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

Saat kompilasi kita akan melihat pesan kesalahan berikut:

```
Package polyglossia Error: Font roman saat ini
tidak mengandung aksara Kiril!

(polyglossia)                Harap definisikan
\cyrillicfont dengan \newfontfamily.

Lihat dokumentasi paket polyglossia untuk
penjelasannya.
Ketik  H <return>  untuk bantuan segera.
 ...

l.15 \select@language {russian}

Package polyglossia Error: Font roman saat ini
tidak mengandung aksara Thai!

(polyglossia)                Harap definisikan
\thaifont dengan \newfontfamily.

Lihat dokumentasi paket polyglossia untuk
penjelasannya.
Ketik  H <return>  untuk bantuan segera.
 ...

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

Sekarang kita diwajibkan untuk menentukan font mana yang akan digunakan untuk aksara Kiril dan Thai. Lagi-lagi, Anda dapat merujuk ke [daftar font TrueType dan OpenType yang tersedia](https://www.overleaf.com/help/193) di Overleaf.

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

![](/files/8d8d9ca864d06c4e104d98671a7375ef4889f8cc)

**Catatan**: artikel ini berada di luar cakupan untuk membahas isu-isu yang berkaitan dengan pilihan kombinasi font yang estetis dan kompatibel secara tipografi.

Perhatikan bahwa kita telah mendefinisikan `\cyrillicfont` bukannya `\russianfont`, yaitu kita mendefinisikan font untuk aksara Kiril *aksara* bukan bahasa *Rusia*. Keuntungan mendefinisikan `\cyrillicfont` adalah bahwa jika, misalnya, `serbian` juga merupakan bahasa yang didefinisikan dalam proyek Anda, maka `\textserbian` akan secara otomatis menggunakan `\cyrillicfont`. Jika Anda hanya mendefinisikan `\russianfont`, maka penggunaan `\textserbian` akan kembali mengeluh tentang “font roman saat ini tidak mengandung aksara Kiril” dan Anda tetap harus mendefinisikan `\cyrillicfont` bagaimanapun juga — *kecuali* Anda *Anda memang* bermaksud menggunakan font yang berbeda untuk teks Serbia!

Skenario serupa lainnya adalah aksara Devanagari *aksara*, yang digunakan untuk bahasa Hindi dan Sanskerta *bahasa*; atau aksara Arab yang digunakan untuk bahasa Arab dan Farsi (Persia).

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

![](/files/725bf37b5de7c98251246b9bdf52ecb03dcd44f7)

Saat menggunakan `\newfontfamily` perlu menentukan `Script`, jika tidak beberapa glif mungkin dirender dengan salah; misalnya, jika kita hanya menulis `\newfontfamily\thaifont{Garuda}` hasil penataan huruf mungkin salah (gambar kiri di bawah)—output yang benar dihasilkan dengan menambahkan `[Script=Thai]`.

Salah: ![](/files/68c644fed9f4ce08ced1b765d37f9c8e39035129) Benar: ![](/files/2b13ce59d28d5e4c3de7ca69c15e14857ea30c93)

## Mendefinisikan keluarga font lainnya

Mari kita lihat contoh lain, kali ini dengan bahasa Ibrani:

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

![](/files/d8a250c897b9d1b66df8ae9b4154c8107c91871e)

Sejauh ini baik. Sekarang misalkan kita menggunakan templat yang awalnya dibuat untuk dokumen berbahasa Inggris, yang mengatur tajuk bagian dalam jenis sans serif menggunakan `titlesec` paket:

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

Kita dihadapkan pada pesan kesalahan:

```
Package polyglossia Error: Font roman saat ini
tidak mengandung aksara Ibrani!

(polyglossia)                Harap definisikan
\hebrewfont dengan \newfontfamily.

Lihat dokumentasi paket polyglossia untuk
penjelasannya.
Ketik  H <return>  untuk bantuan segera.
 ...

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

Ini agak membingungkan: bukankah kita sudah mendefinisikan `\hebrewfont` menjadi Hadasim CLM? Nah, sebenarnya karena kita *belum menentukan font sans serif untuk bahasa Ibrani*. Mari kita perbaiki ini dengan menambahkan definisi untuk `\hebrewfontsf`:

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

Dan sekarang kita mendapatkan output:

![](/files/c02b67e1b49f6bf00f8721f746017077a52f3ba2)

Jika diperlukan, kita juga dapat mendefinisikan font monospasi untuk digunakan dengan `\hebrewfonttt`.

## Ucapan terima kasih

Semua cuplikan lorem ipsum, dalam berbagai bahasa, berasal dari [`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/id/bahasa/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.
