本文内でギリシャ文字をちょっとだけ扱いたい

<!-- # 本文内でギリシャ文字をちょっとだけ扱いたい -->

LaTeX でギリシャ文字をちょっとだけ扱いたいこと、例えば、ギリシャ文字が以下のような特定のワードの中で使われていることは多々あります。

- アンドロメダ座 α 星
- β1 受容体
- ε-δ 論法

しかし、これをそのまま upLaTeX や LuaLaTeX で使おうとすると以下のようになります。（この例では LuaLaTeX で作成）

![greek-font](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/66edac8b-458f-f8ec-8d1d-7af5f9699621.png "ギリシャ文字に和文フォントが当てられている例")

<details>
<summary>コード（折りたたみ）</summary>

```latex
\documentclass{jlreq}
\begin{document}

アンドロメダ座α星、β1受容体、ε-δ論法

\end{document}
```

</details>

ギリシャ文字が 1 文字単体の “α” こそ気にならないですが、アラビア数字が続く “β1” やハイフンで繋がった “ε-δ” は間延びしたような印象を受けます。

このようになる原因は、ギリシャ文字に和文フォントを使うためです。そのため、ギリシャ文字を欧文扱いに変更し、ギリシャ文字に適切なフォントを当てる必要があります。

そこで、本記事では本文内でギリシャ文字を欧文としてちょっとだけ扱いたいときの方法を紹介します。

:::note info
この “ちょっとだけ” とは、ダイアクリティカルマークの付かないギリシャ文字（小文字 24 文字、大文字 24 文字）を使って、せいぜい数文字程度のギリシャ文字を扱うこと指します。
:::

## upLaTeX の場合

### textgreek パッケージを使う

現在の LaTeX では標準で提供される `\textmu` が利用できますが、これ以外のギリシャ文字を利用することは出来ません。

[textgreek][] パッケージを使うと、`\textmu` と同じように `\textalpha` 等と言った形でギリシャ文字を扱うことが出来るようになります。

[textgreek]: https://ctan.org/pkg/textgreek "CTAN: Package textgreek"

```latex
\documentclass{jlreq}
\usepackage[T1]{fontenc}
%% ギリシャ文字のエンコーディングは LGR だが、
%% fontenc では T1 を指定するだけで良い
\usepackage{textgreek}
\begin{document}

アンドロメダ座\textalpha{}星、\textbeta{}1受容体、\textepsilon-\textdelta{}論法

\end{document}
```

![cbgreek.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9dd8cc81-43c5-a2d5-a6d2-af4249f8b000.png "textgreek パッケージの cbgreek オプションの例")

ギリシャ文字用のコマンドは `text` に続いて基本的なギリシャ文字名を与えます。大文字は `\textAlpha`、小文字は `\textalpha` 等のようにします。
ただし、オミクロンは <code>\textOmi**k**ron</code>・<code>\textomi**k**ron</code>（omi**c**ron ではない）、小文字のミューは `\textmugreek`（textcomp の `\textmu` を上書きしない）です。

いくつかのギリシャ文字小文字のバリアントは以下のように定義されます。

|     |                    |
| --- | ------------------ |
| ϵ   | `\straightepsilon` |
| ϑ   | `\scripttheta`     |
| θ   | `\straighttheta`   |
| ϕ   | `\straightphi`     |
| ς   | `\textvarsigma`    |

イプシロン、シータ、ファイに関しては、数式のギリシャ文字と異なって `\var~` となる文字が普通の `\text~` ギリシャ文字として割り当てられる傾向にあるようです。

フォントは `cbgreek`（デフォルト）、`euler`、`artemisia` の 3 つをパッケージオプションから選択できます。また、`\textgreekfontmap` を構成することで任意のギリシャ文字フォントを指定できます。[^greek-font]

[^greek-font]: エンコーディングが LGR のギリシャ文字に関する情報は、[greek-fontenc][] のドキュメントを参照してください。

[greek-fontenc]: http://mirrors.ctan.org/language/greek/greek-fontenc/greek-fontenc-doc.html#greek-text-font-encodings "greek-fontenc Greek font encoding definition files"

:::note warn
`euler` を指定すると、和欧文間スペースが挿入されません。

![euler.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9149feca-b0c4-d66a-891c-be2389a08d53.png "textgreek パッケージの euler オプションの例")

原因はよく分からないので、対処療法的に [BXghost][] パッケージを使って適切に和欧文間スペースを挿入するようにしてください。 （[参考][wtsnja-bxghost]）

```latex
アンドロメダ座\eghostguarded{\textalpha}星、\eghostguarded{\textbeta}1受容体、\eghostguarded{\textepsilon-\textdelta}論法
```
:::

[bxghost]: https://ctan.org/pkg/bxghost "CTAN: Package bxghost"
[wtsnja-bxghost]: https://blog.wtsnjp.com/2019/10/31/bxghost/ "BXghost: (u)pTeX 以外でも適切に和欧文間スペースを入れたい | ラング・ラグー"

加えて、[pxcjkcat][] パッケージで `prefercjkvar` を指定すると、リテラルな入力であっても欧文フォントで出力されます。フォントは textgreek パッケージのフォントに従います。

[pxcjkcat]: https://ctan.org/pkg/pxcjkcat "CTAN: Package pxcjkcat"

```latex
\documentclass{jlreq}
\usepackage[T1]{fontenc}
\usepackage[prefercjkvar]{pxcjkcat}
\usepackage[artemisia]{textgreek}
\begin{document}

アンドロメダ座α星、β1受容体、ε-δ論法

\end{document}
```

![artemisia](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e2a4102f-1693-24f8-c1a4-09f1dc1f2978.png "textgreek パッケージの artemisia オプションの例")

おそらくこの方法が upLaTeX を使ってリテラルにギリシャ文字を入力する最も平易な方法です。

:::note info
textgreek パッケージの類似パッケージには、[textalpha][] や [alphabeta][] パッケージがあります。これらのパッケージは greek-fontenc のバンドルです。
:::

[textalpha]: https://mirrors.ctan.org/language/greek/greek-fontenc/textalpha.sty.html "alphabeta.sty Greek symbols in text and math"
[alphabeta]: https://mirrors.ctan.org/language/greek/greek-fontenc/alphabeta.sty.html "textalpha.sty Greek symbols in text"

### babel＋pxcjkcat を使う

これはギリシャ文字を扱う最も一般的な方法で、本記事のコンセプトである “ちょっとだけ” と言うよりはかなり真面目な方法です。（そのため、普通に “Καλημέρα” のような文章を扱えます）

upLaTeX でギリシャ文字を扱うには、[babel][] パッケージを使ってギリシャ文字を導入し、pxcjkcat パッケージでギリシャ文字を欧文扱いに変更します。

[babel]: https://ctan.org/pkg/babel "CTAN: Package babel"

```latex
%% LGR エンコーディングを追加していることに注意
\usepackage[LGR, T1]{fontenc}
\usepackage[greek, japanese]{babel}
\usepackage[prefercjkvar]{pxcjkcat}
```

babel を使うため、ギリシャ文字は `\foreignlanguage{greek}` を使ってエンコーディングの切り替えを明示する必要があります。

その都度 `\foreignlanguage{greek}{α}` 等とするのは非常に面倒なので、以下のように定義すると楽でしょう。

```latex
\newcommand{\greek}[1]{\foreignlanguage{greek}{#1}}
```

![NewComputerModern.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/41df8e5e-5937-2d1a-4856-f0d1fe46775e.png "ギリシャ文字に NewComputerModern が当てられている例")

<details>
<summary>コード（折りたたみ）</summary>

```latex
\documentclass{jlreq}
\usepackage[LGR, T1]{fontenc}
\usepackage[greek, japanese]{babel}
\usepackage[prefercjkvar]{pxcjkcat}
\newcommand{\greek}[1]{\foreignlanguage{greek}{#1}}
\begin{document}

アンドロメダ座\greek{α}星、\greek{β}1受容体、\greek{ε-δ}論法

\end{document}
```

</details>

`\textalpha` のように定義しようとすると定義済みのエラーが生じるため、もしもこのような形で定義したい場合は別のコマンド名を命名してください。

## LuaLaTeX の場合

LuaLaTeX の場合は、[luatexja][] パッケージの `\ltjsetparameter` から `jacharrange` でギリシャ文字が含まれる範囲を欧文扱いに変更します。

[luatexja]: https://ctan.org/pkg/luatexja "CTAN: Package luatexja"

加えて、デフォルトの Latin Modern ではギリシャ文字が収録されていないため、[fontspec][] パッケージで適当なフォントに変更します。
以下の例では TeXGyrePagellaX に変更しました。

[fontspec]: https://ctan.org/pkg/fontspec "CTAN: Package fontspec"

```latex
\usepackage{luatexja}
\ltjsetparameter{ jacharrange = {-2} }
\usepackage{fontspec}
\setmainfont{texgyrepagellax-regular.otf}
```

これによって、リテラルなギリシャ文字が欧文扱いとなります。

![TeXGyrePagellaX.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e5deccb6-0224-be97-59da-ac568bfa8837.png "ギリシャ文字に TeXGyrePagellaX が当てられている例")

<details>
<summary>コード（折りたたみ）</summary>

```latex
\documentclass{jlreq}  %% jlreq 文書クラスは内部で luatexja を読み込む
\ltjsetparameter{ jacharrange = {-2} }
\usepackage{fontspec}
\setmainfont{texgyrepagellax-regular.otf}
\begin{document}

アンドロメダ座α星、β1受容体、ε-δ論法

\end{document}
```

</details>

babel を使えばハイフネーションやギリシャ文字のフォント変更等が出来ますが、ちょっと扱いたいだけであればこのような方法でも十分だと思われます。

## 余談

ギリシャ文字をちょっとだけ扱う方法でした。

### textgreek が使えない

ギリシャ文字に関するパッケージは TeX Live の langgreek コレクションに含まれ、textgreek パッケージは langgreek コレクションのいくつかのパッケージを必要とします。
一方で、textgreek パッケージは mathscience コレクションに含まれます。

そのため、textgreek パッケージが無い、あるいはギリシャ文字に関する諸々のパッケージが無いという事態に陥る可能性があります。

どちらかが不足している場合は、以下のようにしてインストールしてください。

- textgreek パッケージのインストール
    ```batch
    tlmgr install textgreek
    ```
- langgreek コレクションのインストール
    ```batch
    tlmgr install collection-langgreek
    ```

### ギリシャ文字を数式で代用する

数式のギリシャ文字で代替する方法は最も平易でよく行われることでしょう。ただ、簡単ですが（個人的に）あまりオススメ出来ない方法です。

:::note warn
数式のギリシャ文字で代替する方法は非常に楽ですが、以下のような問題が生じます。

- `\textit` や `\textbf` 等による変更が効かない
- 見出しにギリシャ文字を含めた場合、PDF の見出し情報にギリシャ文字が反映されない

これまでに紹介した方法ではこのような問題は生じません。
:::

数式では、`$\alpha$` 等とすればギリシャ文字を扱うことが出来ます。これを利用して、数式用のギリシャ文字を代替的に本文に持ち込みます。

また、その都度 `$\alpha$` 等とするのは面倒なので、以下のようにコマンドを定義しておくと楽でしょう。

```latex
\newcommand{\textalpha}{$\alpha$}
```

これを踏まえて先の例を作成してみると、以下のようになります。

![article2-image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/14ad9f34-bc76-0056-ed67-6fb58727bdf6.png "ギリシャ文字を数式で代用する例")

<details>
<summary>コード（折りたたみ）</summary>

```latex
\documentclass{jlreq}
\usepackage[T1]{fontenc}
\newcommand{\textalpha}{$\alpha$}
\newcommand{\textbeta}{$\beta$}
\newcommand{\textepsilon}{$\varepsilon$}
\newcommand{\textgamma}{$\gamma$}
\newcommand{\textdelta}{$\delta$}
\begin{document}

アンドロメダ座\textalpha{}星、\textbeta{}1受容体、\textepsilon-\textdelta{}論法

\end{document}
```

</details>

あるいは、立体のギリシャ文字を使いたい場合は、立体のギリシャ文字が収録されたパッケージを利用しましょう。

例えば、[upgreek][] パッケージは数式用の立体ギリシャ文字を提供します。また、[newtxmath][] や [newpxmath][] パッケージでは立体のギリシャ文字が初めから提供されています。
あるいは、[unicode-math][] パッケージ (LuaLaTeX) を利用している場合でも、立体ギリシャ文字を扱うことが出来ます。

[upgreek]: https://ctan.org/pkg/upgreek "CTAN: Package upgreek"
[newtxmath]: https://ctan.org/pkg/newtx "CTAN: Package newtx"
[newpxmath]: https://ctan.org/pkg/newpx "CTAN: Package newpx"
[unicode-math]: https://ctan.org/pkg/unicode-math "CTAN: Package unicode-math"

ここでは、upgreek パッケージを利用した結果を例として紹介します。（upgreek では、`\upalpha` 等とします）

![article2-image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/93d61817-26fd-0e47-45fe-66cf091b700d.png "ギリシャ文字を数式の upgreek で代用する例")

<details>
<summary>コード（折りたたみ）</summary>

```latex
\documentclass{jlreq}
\usepackage[T1]{fontenc}
\usepackage{upgreek}
\newcommand{\textalpha}{$\upalpha$}
\newcommand{\textbeta}{$\upbeta$}
\newcommand{\textepsilon}{$\upvarepsilon$}
\newcommand{\textgamma}{$\upgamma$}
\newcommand{\textdelta}{$\updelta$}
\begin{document}

アンドロメダ座\textalpha{}星、\textbeta{}1受容体、\textepsilon-\textdelta{}論法

\end{document}
```

</details>