読者です 読者をやめる 読者になる 読者になる

TeX Alchemist Online

TeX を使って化学のお仕事をしています。

TeXで絵文字を入出力する (1) 〜 白黒絵文字篇

10.7 Lion以降の Mac OS X では,iOSと同じUnicode絵文字が使えるようになっています。

こんなやつです(環境によっては正しく表示されません)→ 😄💜🚀🍰

TeXを使ってこれを入出力する方法を考えてみます。

(カラー絵文字の形での出力については (2) 〜 カラー絵文字篇 を御覧ください。)

注意

以下の記事には絵文字がたくさん登場します。Mac OS X (10.7以降) やiOSSafariならば正しく表示されますが,その他の環境では正しく表示されない場合があります。
Chromeの場合は,Chromoji - Emoji for Google Chromeという拡張機能を入れておけば,絵文字部分が画像化されて正しく表示されるようになります。

Macでの絵文字入力の方法

かつては携帯電話専用の特殊文字であった絵文字が,2010年にUnicode 6.0に正式に採用され,Macでも簡単に入出力できるようになりました。
Macで絵文字入力するには,文字ビューアを使うのが簡単です。

まず,システム環境設定の「キーボード」の中の「メニューバーにキーボードビューアと文字ビューアを表示」にチェックを入れておきます。

f:id:doraTeX:20140107025655p:plain

すると,メニューバーの「あ」などと表示されている入力ソースアイコンをクリックしたときに,「文字ビューアを表示」という項目が現れます。

f:id:doraTeX:20140107005057p:plain

それをクリックすると,次のような文字ビューアが現れます。

f:id:doraTeX:20140107005103p:plain

また,Mavericksの場合,Command + Control + スペース を押すと,iOS風の絵文字入力パレットが現れるので,これを使うのが簡便でしょう。

f:id:doraTeX:20140107005101p:plain

このカラフルな絵文字は /System/Library/Fonts/Apple Color Emoji.ttf という特殊なTrueTypeフォントによって表示されています。

TeXで絵文字を入出力するには

まず,これらの絵文字はUnicode特有の文字なので,Unicodeを直接処理できるupTeXを使います。
upTeXは,最近のTeX Liveベースのディストリビューションならば標準で収録されています。
(以下の実験は TeX Live 2013 で確認しています。)

ただし,Apple Color Emoji.ttf は特殊なTrueTypeフォントなので,upTeXを用いても出力できません。(XeLaTeXですら出力できません。)代わりに,このUnicode絵文字領域の文字を収録しているフリーフォントである和田研細丸ゴシックを用います。Apple Color Emoji.ttf のようにカラーの絵文字ではありませんが,携帯電話由来のUnicode絵文字を全て収録しています。

準備

和田研細丸ゴシックの最新版を用意

和田研細丸ゴシックの最新版(本記事執筆時ではwlmaru2004emojip4320.lzh)をダウンロードして,lzhアーカイブを展開します。
展開される wlmaru2004emojip.ttf を,作業ディレクトリに配置します。

tfmのコピー

texmf 内の upjisr-h.tfm, upjisr-v.tfm を作業ディレクトリにコピーし,それぞれ emoji-h.tfm,emoji-v.tfm とリネームします。

[改訂第6版]LaTeX2ε 美文書作成入門 の付属DVDから標準的なインストールを行った場合は,

/Applications/TeXLive/Library/texlive/2013/texmf-dist/fonts/tfm/uptex/jis/

内に存在しているはずです。

[改訂第6版] LaTeX2ε美文書作成入門

[改訂第6版] LaTeX2ε美文書作成入門

テスト

ストファイルのダウンロード

次のテスト用ファイル emoji.tex を,同じ作業ディレクトリに保存します。
( wlmaru2004emojip.ttf, emoji-h.tfm, emoji-v.tfm, emoji.tex を全て同じディレクトリに置いてください。 )


(コピー&ペーストすると環境によっては正しくコピーされない可能性があるので,Gistのページから Download Gist するのがお勧めです。)

エディタ上の見た目は,TeXソースとは思えない非常にカラフルなものになります。

f:id:doraTeX:20140107005058p:plain

このサンプルのように,

{\emojifamily 😄🎅🌟🍅🍦💛} 

または

\textemoji{😄🎅🌟🍅🍦💛} 

のように絵文字を囲んで使用します。

upTeXでコンパイル

そして,この文書を

$ ptex2pdf -u -l emoji

コンパイルします。-u はupTeXでコンパイルするオプションです。

コンパイルした結果,このようなPDFが生成されれば成功です。和田研細丸ゴシックに収録された白黒絵文字で出力されます。

カラフルな Apple Color Emoji ほど見栄えは派手ではありませんが,TeXで作成する文書に彩りを添えるには役立つのではないかと思います。

これが気に入り,今後も永続的に使いたいという場合は,tfm を $TEXMF/fonts/tfm/emoji/,ttf を $TEXMF/fonts/truetype/emoji/ に入れ,また

\DeclareKanjiFamily{JY2}{emoji}{}
\DeclareKanjiFamily{JT2}{emoji}{}
\DeclareFontShape{JY2}{emoji}{m}{n}{<->s*[0.924690]emoji-h}{}
\DeclareFontShape{JT2}{emoji}{m}{n}{<->s*[0.924690]emoji-v}{}

の部分を $TEXMF/tex/latex/emoji/emoji.fd として保存,残りの部分は適当に sty にまとめて,mktexlsr するとよいでしょう。

注意点

絵文字スタイル選択符号(VS)の除去

10.9 Mavericks / iOS7 以降,一部の絵文字には,(白黒スタイルではなく)絵文字スタイルで表示することを指示するための字形選択子(VS; Variation Selector) U+FE0F が入力時に付与されるようになりました。

例えば,「❤️」という絵文字を絵文字パレットから入力すると,

U+2764 (HEAVY BLACK HEART) U+FE0F (絵文字スタイル選択符号)

が入力され,赤いハートの絵文字❤️が表示されます。これを,

U+2764 (HEAVY BLACK HEART) U+FE0E (白黒スタイル選択符号)

と入力すると,黒いハート❤︎が表示されます。
Chromeだと,VSが付くとどちらの絵文字も表示されなくなってしまうようです。)

10.8 Mountain Lion / iOS6 以前では,このようなVSは自動では付与されませんでいた。VSの付いていない U+2764 ❤︎ が赤・黒のどちらで表示されるかは,OSやアプリケーションの実装によって異なります。

絵文字VSについては,id:NAOI さんの記事 Mavericksの絵文字バリエーション・シーケンス絵文字バリエーション・シーケンスとは何か に詳説されています。

さて,upTeXのエンジンはVSに対応していません。そのため,絵文字に付された U+FE0F のVSは単なるゴミ文字となります。VS付きのままでコンパイルすると,変なスペースが空いてしまうなど,組版が乱れます。

そのため,絵文字を使った文書を作成した際には,文書内に含まれる U+FE0F を一括削除しましょう。エディタの一括置換機能を使うのが楽でしょう。
単独の U+FE0F を入力するには,Google日本語入力を使うと楽です。Google日本語入力で,「U+FE0F」と入力すると,予測変換候補に見えない文字が現れますので,それを確定することで U+FE0F が入力できます。

f:id:doraTeX:20140107025146p:plain

あるいは,文字ビューアの左上のボタンから「リストをカスタマイズ」を選び,「コード表」の「Unicode」にチェックを入れて,Unicodeのコード表を表示させ,U+FE0F の位置の文字をエディタの置換ダイアログ上にドラッグ&ドロップしてもよいでしょう。

f:id:doraTeX:20140107025654p:plain

こうして,文書全体の U+FE0F を一括置換で削除しておくことで,正しく組版されるようになります。

結合文字列の非サポート

一部の絵文字は,単一のUnicode文字としてではなく,複数の文字の結合として実現されています。
例えば,1️⃣ (KEYCAP 1) という絵文字は,

U+0031 ("1") U+FE0F (絵文字スタイルVS) U+20E3 (COMBINNING ENCLOSING KEYCAP)

という結合で表現されています。

まず前述の通り,VSである U+FE0F はTeXでは解釈されずゴミ文字となります。また,それを除去したとしても,U+0031 と U+20E3 の部分の結合はなされず,別々の文字と解釈されて,次のような組版結果となります。

f:id:doraTeX:20140107031215p:plain

さらに,#️⃣ (HASH KEY) という絵文字はより厄介で,

U+0023 ("#") U+FE0F (絵文字スタイルVS) U+20E3 (COMBINNING ENCLOSING KEYCAP)

の結合からなりますが,U+0023("#") はTeXにおいては特別な意味を持つカテゴリーコード6の文字であるため,普通に入力するだけで You can't use `macro parameter character #' のエラーに引っかかります。

\textemoji{\string#️⃣}

のように入力することで,コンパイルエラーは回避されますが,結合はなされないので単に

f:id:doraTeX:20140107031754p:plain
と出力されるだけです。

また,国旗を表す10個の絵文字🇯🇵🇰🇷🇩🇪🇨🇳🇺🇸🇫🇷🇪🇸🇮🇹🇷🇺🇬🇧は,各国を表す2文字のアルファベットの結合として表現されています。TeXでこれらの絵文字を入力すると,1文字ずつ砕かれて次のように出力されてしまいます。

f:id:doraTeX:20140107032539p:plain
(JP:日本,KR:韓国,DE:ドイツ,……という具合です。)

このあたりの仕様については,こちらの記事が参考になりました。

(2) 〜 カラー絵文字篇 に続く。]