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

# polyglossia と fontspec を使った Overleaf での多言語組版

## はじめに

この記事では、XeLaTeX（またはLuaLaTeX）コンパイラと以下のものを組み合わせて、Overleaf上で多言語文書を組版する方法の概要を説明します。 `fontspec` や `polyglossia` LaTeXパッケージ。

多くのユーザーにとって、少なくとも大半のユーザーにとって、TeXエンジンの既定の選択は `pdfTeX`であり、XeTeXやLuaTeXとは異なり、 [UTF-8](https://en.wikipedia.org/wiki/UTF-8) でエンコードされたテキストファイルを直接読み取る機能がありません。pdfTeXを使うと、LaTeXで特定の言語、特にラテン系文字を使わない言語の組版は非常に複雑になります。以下のような一部のパッケージ—たとえば [`inputenc`, `fontenc` や](/latex/ja/yan-yu/05-arabic.md) [`arabtex`](/latex/ja/yan-yu/05-arabic.md)—は、非ラテン言語や文字体系の組版をpdfTeXで支援しますが、 `utf8` または `utf8x` オプションを `inputenc`.

UTF-8、Unicodeエンコーディング、そしてXeTeX/LuaTeXエンジンについて詳しく知りたいなら、Overleafの記事 [Unicode, UTF-8 and multilingual text: An introduction](/latex/ja/xiang-xi-ji-shi/51-unicode-utf-8-and-multilingual-text-an-introduction.md) は必読です。

## XeTeXとLuaTeXの登場

XeTeXおよびLuaTeXエンジンはUTF-8でエンコードされたテキストを直接読み取り／処理できます。そのため、Unicodeをネイティブにサポートしており、さらに [TrueTypeおよびOpenTypeフォントを直接](/latex/ja/fonto/03-xelatex.md) 扱うこともできます。これらの特性により、LaTeXで多言語文書や非ラテン文書を組版する際の自然な選択肢となり、次のような出力が得られます。

![](/files/1631ef6d18219a9b02b516b075b6101bd806d775) ![](/files/2c94228fee5b0bcfed547adc7e1a5ba55b252624) ![](/files/a09ae759376422eb846f3373c5e708c4d491fa86)

これらの例はOverleafギャラリーで見つかります： [OverleafのLaTeXで異なる文字体系を使って多言語テキストを書く方法](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/ja/yan-yu/06-chinese.md)
* [日本語](/latex/ja/yan-yu/11-japanese.md)
* [韓国語](/latex/ja/yan-yu/12-korean.md)

Xe(La)TeXはこれらの言語にも依然として有用ですが、より特化したTeXエンジンも利用できます。具体的には [CJK言語の組版用に設計された](/latex/ja/sononotopikku/45-tex-primitives-listed-by-cjk-tex-engine.md)—たとえば [pTeX](https://ctan.org/pkg/ptex?lang=en) 日本語の組版用の

なお、Overleafで特定の言語のテキストを編集中にカーソルの挙動がおかしいようであれば、Overleafの **メニュー** ボタン（プロジェクトのファイル一覧の上にあります）をクリックして、「フォントファミリー」オプションを変更してみてください。あるいは [ブラウザの等幅フォント設定を変更する](https://www.howtogeek.com/208552/how-to-change-the-default-fonts-in-your-web-browser/) か、代わりにOverleafのリッチテキスト表示を使ってみてもよいでしょう。ただし執筆時点では、Source表示とRich Text表示は、目標としている機能レベルでの右から左へのテキスト編集をまだ完全にはサポートしていない場合があります。

## コンパイラの変更

この `fontspec` や `polyglossia` パッケージにはXeLaTeXまたはLuaLaTeXコンパイラが必要なので、Overleafプロジェクトをそれらのどちらかを使うように設定する必要があります。詳細な手順は、記事 [LaTeXコンパイラの選択](/latex/ja/sononotopikku/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` を使うべきです。これは、OverleafでpdfLaTeXおよびLaTeXコンパイラを使うときの話です。

## 文書全体が1つの言語だけで構成されている場合

以下の `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/dafb08a27c503584ce4dd05276e62a60ee7e9cdd)

## 同一文書内で複数の言語／文字体系を扱う：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}

Merci. \textenglish{Thank you.} \textrussian{Спасибо.} さらに
フランス語のテキスト！

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

`polyglossia` は、文書の主言語を `\setdefaultlanguage` で（既定は英語）、また（複数の）「その他の」言語を `\setotherlanguages`. (`\setmainlanguage` は `\setdefaultlanguage`で設定できます。ひとつだけ別の外国語を使う予定なら、単数形の `\setotherlanguage`を使えます。言語名は `babel`.

私たちは、主にフランス語の文書で、英語、ロシア語、タイ語のテキストも含む小さな例を用意しました。フォントには FreeSerif、FreeSans、FreeMono を使うことにしました。

文書の主言語が `french`、 `abstract` 環境は自動的に「Résumé」という見出しを生成します。最初の段落の末尾では、感嘆符がフランス語のスペーシング規則に従って組版されている点に注意してください。ソースコード上では単語 `français` の直後に続いているのに、「français」とは離して配置されています。

本文では、短い英語・キリル文字・タイ語の断片を、フランス語の段落の中に `\textenglish{Thank you}`, `\textrussian{Спасибо}` や `\textthai{ขอบคุณ}`を使って挿入できます。一般に、 `\textLANGUAGE{...}` を使えば、宣言済みの任意の `LANGUAGE` でテキストを組版できます。文書の主（セリフ体）フォントが FreeSerif であり、FreeSerif にはラテン、キリル、タイ（そしてさらに多くの）文字体系のグリフが含まれているので、 `\setdefaultlanguage` や `\setotherlanguages`これらすべてのテキストを出力PDFに描画するためにそれを使えます。 `fontspec` や `polyglossia` 外国語／その他の言語でより長い段落を書きたい場合は、

を使うことを推奨します。 `\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/d1c227b7f217efaf60ad5d1f6bccfb762212bccc)

もちろん、ラテン文字とキリル文字のグリフはすべて出力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/55f86ca5e3a0aed37dbfe0c1ed8652b3a2f34837)

テキストは自動的に右から左へ設定され、ページの右端から始まります。「differentiation」という単語自体は左から右のテキストとして正しく組版されます―しかし、ちょっと待ってください、 *いや、違います*！ 出力では「dffirentiation」になってしまうのです！ 何が起きているのでしょうか？

Amiriフォントにはラテン文字のグリフもありますが、ここではテキスト `differentiation` は英語としてマークされていません。コンパイラは `differentiation` を、あたかもアラビア文字列であるかのように、右から左のテキストとして扱います。組版の際、元の並び `iff` は `ffi` として処理され（つまりRTLテキストとして）、Amiriの [合字](https://en.wikipedia.org/wiki/Typographic_ligature) グリフ「ffi」が組版されます。単語に `\textenglish{...}` を付けることで、左から右のテキストとして正しく解釈されます。

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

![](/files/ef6e2e219292e09fcfabb85dda90674f76f6e2a2)

**注：** もし `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/b0e948389e058599693a7aee52128a6fa8d4e5d9)

もちろん、もっと派手なものを使っても構いません。

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

![](/files/6868c9e6210ad86ed8030cd9bb9d35ea2f4cfb7b)

異なる言語や文字体系ごとにフォントを設定するこの仕組みは、文書内のすべての文字体系や言語に対してグリフを持つ *終了しません* メインフォントを使う場合に特に重要です。ここで、文書の主フォントとして Caladea を使うことに決めたとしましょう。

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

コンパイルすると、次のエラーが表示されます。

```
Package polyglossia Error: The current roman font
にはキリル文字の文字体系が含まれていません！

(polyglossia)                \newfontfamily で
\cyrillicfont を定義してください。

詳細は polyglossiaパッケージのドキュメントを
参照してください。
即時ヘルプを表示するには H を入力して Enter を押してください。
 ...

l.15 \select@language {russian}

Package polyglossia Error: The current roman font
にはタイ文字の文字体系が含まれていません！

(polyglossia)                \newfontfamily で
\newfontfamily で \thaifont を定義してください。

詳細は polyglossiaパッケージのドキュメントを
参照してください。
即時ヘルプを表示するには H を入力して Enter を押してください。
 ...

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/5d85ff238e1fdad41abecd1945478d0ccc19c4bb)

**注**を参照できます。この記事の範囲を超えるため、美的に心地よく、かつ組版的に互換性のあるフォントの組み合わせの選択に関する問題は扱いません。

ここで、 `\cyrillicfont` の代わりに `\russianfont`を定義したことに注意してください。つまり、ロシア語の *文字体系* ではなく、キリル文字の *言語*用のフォントを定義したということです。 `\cyrillicfont` を定義する利点は、たとえば `serbian` もプロジェクトで定義済みの言語である場合、 `\textserbian` は自動的に定義済みの `\cyrillicfont`を使うことです。もし `\russianfont`だけを定義していたら、 `\textserbian` を使うと再び「現在のroman fontにはキリル文字の文字体系が含まれていません」と警告され、結局 `\cyrillicfont` を定義しなければなりません。 *ただし* あなた *が* セルビア語のテキストに別のフォントを使うつもりだった場合を除きます！

別の同様のシナリオとして、デヴァナーガリー *文字体系*があります。これはヒンディー語とサンスクリット語の *言語*に使われます。あるいは、アラビア語とファルシ語（ペルシア語）に使われるアラビア文字もあります。

```latex
\setdefaultlanguage{english}
\setotherlanguages{hindi,sanskrit}
\newfontfamily\devanagarifont[Script=Devanagari]{Lohit Devanagari}
...
ヒンディー語: \texthindi{हिन्दी}
サンスクリット語: \textsanskrit{संस्कृतम्}
```

![](/files/a4d1451b6e155873167593785c76dbc7ddf98219)

\newfontfamily `を使う場合は、` Script `を指定する必要があります。そうしないと、一部のグリフが正しく描画されない可能性があります。たとえば、もし`\newfontfamily\thaifont{Garuda} `とだけ書いていたら、組版結果は誤っているかもしれません（下の左図）。` 正しい出力は、 `[Script=Thai]`.

誤り： ![](/files/668fcb4c61bcef843d772af0861116d5d83a04c7) 正しい： ![](/files/226e354ba3dbd0649dbf0f86d773237e91770d1b)

## 他のフォントファミリーの定義

別の例を見てみましょう。今度はヘブライ語です。

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

![](/files/77db5da3d4bf24bfdb38a53bfb15e3026c0fd412)

ここまでは順調です。では、もともと英語の文書用に作成されたテンプレートを使っており、 `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)                \newfontfamily で
\hebrewfont を \newfontfamily で定義してください。

詳細は polyglossiaパッケージのドキュメントを
参照してください。
即時ヘルプを表示するには H を入力して Enter を押してください。
 ...

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

少し紛らわしいですね。すでに `\hebrewfont` を Hadasim CLM に定義していませんでしたか？ まあ、実際のところ、 *ヘブライ語用のサンセリフ体フォントを指定していなかった*からです。これを修正するために、 `\hebrewfontsf`:

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

を定義しましょう。

![](/files/a8ce312bff8995dbb9e9fe1a0557ae769268071f)

必要であれば、 `\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/ja/yan-yu/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.
