LaTeX で絵文字を使いたいときのエトセトラ

<!-- # LaTeX で絵文字を使いたいときのエトセトラ -->

LaTeX をしているときに絵文字を挿入したいことは多いでしょう。そんなときに、そのまま絵文字 😆 を挿入しようとしても上手くいきません 😵‍💫
適切なパッケージを使う必要があります。

本記事では、絵文字を挿入する際に必要なパッケージやそれらの特徴を紹介します 👍

## 絵文字を使うためのパッケージ

LaTeX で絵文字を利用するには、TeX Live に同梱されている 6 つのパッケージと同梱されていない 1 つのパッケージがあります。[^coloremoji]

[^coloremoji]: Apple Color Emoji (/images) を利用した [coloremoji][] がありますが、これは TeX Live に同梱されていないため割愛しました。
導入したい場合は、CTAN あるいは [GitHub リポジトリ][coloremoji-github] からダウンロードできます。

[coloremoji]: https://www.ctan.org/pkg/coloremoji "CTAN: Package coloremoji"
[coloremoji-github]: https://github.com/alecjacobson/coloremoji.sty "alecjacobson/coloremoji.sty: Style package for directly including color emojis in latex documents"

|    パッケージ    |    対応 LaTeX     |            フォント            |
| :--------------: | :---------------: | :----------------------------: |
|    [emoji][]     |     LuaLaTeX      |         任意のフォント         |
|   [emotion][]    | LuaLaTeX, XeLaTeX |         任意のフォント         |
|     [emo][]      |      すべて       | Noto Color Emoji (images/font) |
|   [hwemoji][]    |     pdfLaTeX      |        Twemoji (images)        |
|   [twemojis][]   |      すべて       |        Twemoji (images)        |
| [byo-twemojis][] |      すべて       |         Twemoji (TikZ)         |
| [BXcoloremoji][] |      すべて       |        Twemoji (images)        |

[emoji]: https://www.ctan.org/pkg/emoji "CTAN: Package emoji"
[twemojis]: https://www.ctan.org/pkg/twemoji "CTAN: Package twemoji"
[hwemoji]: https://www.ctan.org/pkg/hwemoji "CTAN: Package hwemoji"
[emo]: https://www.ctan.org/pkg/emo "CTAN: Package emo"
[byo-twemojis]: https://www.ctan.org/pkg/byo-twemojis "CTAN: Package byo-twemojis"
[emotion]: https://www.ctan.org/pkg/emotion "CTAN: Package emotion"
[bxcoloremoji]: https://www.ctan.org/pkg/bxcoloremoji "CTAN: Package bxcoloremoji"
[bxcoloremoji-github]: https://github.com/zr-tex8r/BXcoloremoji "zr-tex8r/BXcoloremoji: LaTeX: To use color emoji"

フォントが “images” となっているパッケージでは、絵文字を PDF や PNG として埋め込みます。これらのパッケージでは graphics パッケージを内部で利用しています。そのため、(u)pLaTeX 下では `\documentclass` での `dvipdfmx` の指定を忘れないようにしてください。

加えて、emo パッケージでは “images/font” としていますが、これは LuaLaTeX 以外では images を利用するのに対して、LuaLaTeX では Noto Color Emoji (/font) を利用するためです。

### 特記

emo パッケージは、デフォルトではいくつかの絵文字しかサポートしていません。そのため、emo.py による生成が必要になるようです。詳細は README を確認してください。

----------

byo-twemojis パッケージは TikZ を利用して Twemoji を再現します。（“byo” は Build Your Own の略）

このパッケージでは顔絵文字のみしか利用できません。しかし、この顔絵文字は分解されたいくつかのパーツ (TikZ elements) を組み合わせて作成するため、既存の絵文字に無いオリジナルな絵文字を作成することも出来ます。（下図では右 2 つがオリジナル）

```latex
\byoTwemoji{head; eyes normal; mouth laughing}
\byoTwemoji{head; eyes normal; mouth grimacing}
\byoTwemoji[set Yellow={254, 231, 184}]{head; clown makeup; clown nose; clown hair; mouth smiling!yscale=1.2,yshift=-3,fill=byoTwemojiRed; eyes normal!yshift=-2}
\byoTwemoji[let Yellow=byoTwemojiLightRed,let Brown=byoTwemojiBlack]{head; eyes normal!yshift=1.5; eyebrows worried; mouth tongue hanging-out; sweat left right}
%%
%% ↓ これらはオリジナル絵文字
\byoTwemoji{head; eyes tightly closed pupil!yshift=2; eyebrows worried!yshift=1; mouth thermostat; bandage}
\byoTwemoji{head exploding; mouth goofy}
```

![byo-twemojis image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/6d104fdf-67bf-6bd7-36e7-eb50331fb9d6.png "byo-twemojis による絵文字")

----------

:::note info
BXcoloremoji は v.1.0 となり、2024 年 11 月 11 日に CTAN に収録されました。
これに伴って、手動でインストールせずに TeX Live でも利用できるようになりました。

- [bxcoloremoji がバージョン 1 になった話][zrbabbler-215627]
:::

[zrbabbler-215627]: https://zrbabbler.hatenablog.com/entry/2024/11/11/215627 "bxcoloremoji がバージョン 1 になった話 - マクロツイーター"

BXcoloremoji パッケージは ~~TeX Live に集録されていませんが~~、非常によく利用される絵文字用パッケージです。単に絵文字を出力する以外にもいくつかの機能があり、画像による出力にも関わらず、和文的扱いをすることが出来ます。

また、デフォルトでは Twemoji フォント（twemojis パッケージによるもの）のみサポートしていますが、カスタム次第では他のフォントの絵文字を追加することも出来ます。（[参考][doratex-20201209]）
この意味では、BXcoloremoji のみが画像形式で複数フォントの絵文字を扱う方法が提供されています。[^another-font]

[^another-font]: Apple Color Emoji であれば [coloremoji のリポジトリ][coloremoji-github]、Noto Color Emoji であれば [noto-emoji のリポジトリ][noto-emoji-github] を参照すると、絵文字の画像を取得できます。

[doratex-20201209]: https://doratex.hatenablog.jp/entry/20201209/1607521856 "BXcoloremoji パッケージで最新の Apple Color Emoji を使う - TeX Alchemist Online"
[noto-emoji-github]: https://github.com/googlefonts/noto-emoji "googlefonts/noto-emoji: Noto Emoji fonts"

<!-- 加えて、Version 0.18 以降では `twemojis` オプションを有効にすることで twemojis パッケージの PDF 画像を利用できるようになりました。（入力方法は BXcoloremoji のまま）

このオプションのメリットは、絵文字画像ファイル揃が不要で BXcoloremoji を利用できる点です。
そのため、Overleaf や Cloud LaTeX のような BXcoloremoji がインストールされていない環境であっても STY ファイルと DEF ファイルのみがあれば簡単に活用できます。 -->

## 入力方法

それぞれのパッケージにおける入力方法と “😀” の表示例を紹介します。

|  パッケージ  |                  入力方法                  | 例                                                                                                                 |
| :----------: | :----------------------------------------: | :----------------------------------------------------------------------------------------------------------------- |
|    emoji     |                 shortcodes                 | `\emoji{grinning-face}`, <br>(aliase: `\emoji{grinning}`)                                                          |
|   emotion    |                 準リテラル                 | `\emotion{😀}`                                                                                                    |
|     emo      |                 shortcodes                 | `\emoji{grinning-face}`                                                                                            |
|   hwemoji    |                  リテラル                  | `😀`                                                                                                              |
|   twemojis   |         codepoints, <br>shortcodes         | `\(text)twemoji{1f600}` (lowercase), <br>`\(text)twemoji{grinning face}`, <br>(aliase: `\(text)twemoji{grinning}`) |
| byo-twemojis |          TikZ&nbsp;element names           | `\byoTwemoji{head; eyes normal; mouth laughing}`                                                                   |
| BXcoloremoji | 準リテラル, <br>codepoints, <br>shortcodes | `\coloremoji{😀}`, <br>`\coloremojicode{1f600}`, <br>`\coloremojicode{:grinning:}`                                |

emoji、emo、twemojis の shortcodes は Unicode CLDR 名に由来します。一方で、BXcoloremoji は [emoji-toolkit][] に由来します。

[emoji-toolkit]: https://github.com/joypixels/emoji-toolkit "joypixels/emoji-toolkit: The world's largest independent emoji font."

emoji と twemojis のパッケージガイドには shortcodes に関する情報が掲載されています。

## 絵文字の扱い方

すでに示しているように、絵文字はフォントとして埋め込むか画像として埋め込むかの 2 通りがあります。

### フォント

:::note info
絵文字をフォントとして挿入するこれらのパッケージでは fontspec パッケージを内部で利用しています。

そのため、LuaLaTeX や XeLaTeX といった限られた LaTeX のみで機能します。
:::

emoji や emotion パッケージでは、以下のコマンドから任意のフォントが利用可能となっています。

| パッケージ | フォント構成コマンド |
| :--------: | :------------------- |
|   emoji    | `\setemojifont`      |
|  emotion   | `\emotionsetup`      |

TeX Live では以下のフォントが同梱されており、これらを利用できます。もちろん、これ以外にも PC にインストールされたフォントを利用することも出来ます。

| フォント              |   色   |    パッケージ    |
| --------------------- | :----: | :--------------: |
| TwemojiMozilla.ttf    | カラー | [twemoji-colr][] |
| NotoColorEmoji.ttf    | カラー |  [noto-emoji][]  |
| NotoEmoji-Regular.ttf |  白黒  |    noto-emoji    |

[twemoji-colr]: https://www.ctan.org/pkg/twemoji-colr "CTAN: Package twemoji-colr"
[noto-emoji]: https://www.ctan.org/pkg/noto-emoji "CTAN: Package noto-emoji"

ただし、フォントの仕様によって利用できないとされているものもあるようです。詳しくはパッケージガイドを参照してください。

上記のパッケージを利用する以外に fontspec を利用して絵文字を得ることもできるようです。（[参考][kakinaguru_zo]）

[kakinaguru_zo]: https://qiita.com/kakinaguru_zo/items/8a085484c7a0530e032b "LuaTeX でカラーフォント・絵文字✌(SVG/COLR/CBDT) #LaTeX - Qiita"

### 画像

:::note info
絵文字を画像として挿入するこれらのパッケージでは graphics パッケージを内部で利用しています。

そのため、(u)pLaTeX 下では `\documentclass` での `dvipdfmx` の指定を忘れないようにしてください。
:::

パッケージによって取り扱う画像の形式が異なります。また、見出しに絵文字を使う際に hyperref パッケージでブックマークを作成したときのブックマーク情報がどのように出力されるか異なります。

これらに関して以下の表にしました。

|  パッケージ  | 画像形式 | ブックマーク情報  |
| :----------: | :------: | ----------------- |
|     emo      |   PDF    | 指定子とパス      |
|   hwemoji    |   PDF    | Unicode 文字      |
|   twemojis   |   PDF    | shortcodes        |
| byo-twemojis |   TikZ   | TikZ element name |
| BXcoloremoji | PDF, PNG | Unicode 文字      |

hwemoji と BXcoloremoji パッケージのみがまともにブックマークを出力することが出来ます。（BXcoloremoji の `twemojis` オプションでも同様）

もしも hwemoji・BXcoloremoji 以外のパッケージを利用してブックマークに Unicode 文字として絵文字を出力したい場合は、`\texorpdfstring` (hyperref) を利用してください。

## 縦書きで絵文字を使いたい

縦書きであっても絵文字を使いたいこともあるでしょう。その場合、絵文字の向きが縦向きになるように調整する必要があります。

縦書きにデフォルトで対応するパッケージは **BXcoloremoji のみ** です。これ以外のパッケージでは、時計回り 90 度回転した状態で表示されます。

ただし、`\rotatebox` で 90 度回転させて、`\raisebox` で位置を調整すればその限りではありません。（非常に面倒ですが）

特に、twemojis パッケージでは以下のように `angle = 90` を構成すると、縦書きであっても上手く表示させることができます。

```latex
\twemoji[height=1.4\twemojiDefaultHeight, angle = 90]{grinning face}
```

このような構成をいちいち書くのは面倒なので、`\texttwemoji` を以下のように再定義してしまえば、縦書きでもいい感じに表示されます。（[参考][twemoji-texttwemoji]）

[twemoji-texttwemoji]: https://gitlab.com/rossel.jost/latex-twemojis/-/blob/master/src/twemojis/dtx.jinja#L185-187 "src/twemojis/dtx.jinja · master · Jost Rossel / LaTeX Twemojis · GitLab"

```latex
%% 実際、twemojis では \texttwemoji を以下のような感じで定義しています
\renewcommand{\texttwemoji}[1]{%
  \raisebox{-1ex}{\twemoji[height=1.4\twemojiDefaultHeight, angle = 90]{#1}}%
}%
```

# 余談

フォントによって絵文字を扱う emoji や emotion パッケージを使うことが最も楽な利用方法ですが、対応する LaTeX は限られています 🤔

画像によって絵文字を扱うパッケージを使う場合は、hwemoji（pdfLaTeX のみ）か BXcoloremoji パッケージを使うと良いでしょう。
<!-- BXcoloremoji は自力でインストールする必要がありますが、それほど難しい作業ではありません 🥳 -->
BXcoloremoji も CTAN に収録されたので、非常に簡単に絵文字を使えるようになりました。

LaTeX では絵文字を使うにも一苦労ですね ⛄