TeX Alchemist Online

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

TeXで絵文字を入出力する (2) 〜 カラー絵文字篇

前回の記事で,

TeXソースに絵文字を入力 → 和田研細丸ゴシックで絵文字を出力

という流れで絵文字の入出力に成功しました。

ですが,これで出力されるのは白黒絵文字です(出力サンプル)。
「白黒絵文字じゃ我慢できない!やっぱり絵文字はカラーじゃなくちゃ!?」という(私のような)カラー絵文字ファンのために,upTeXでカラー絵文字を入出力するパッケージを作りました。

GitHub: coloremoji パッケージ

動作イメージ

f:id:doraTeX:20140107225655p:plain

システム要件

  • 10.7 Lion 以降*1の Mac OS X
  • e-upTeXエンジン + dvipdfmx(最近の TeX Live ベースのディストリビューションならば問題ありません)
  • ImageMagick convert(PNGからPDFへの変換に用います。)ImageMagick convert は TeX Live には含まれませんが,MacTeX[改訂第6版]LaTeX2ε 美文書作成入門 の付属DVDからインストールした場合は同時にインストールされています。あるいは,Homebrew や MacPorts などでインストールしてもよいでしょう。convert コマンドへのパスを通しておいてください。

導入法

ZRさんのブログ記事に詳しく書かれていますのでご参照ください。

実験

テストドキュメントを upLaTeX + dvipdfmx でコンパイルします。

$ ptex2pdf -u -l coloremoji-test

その結果,このようなPDFが生成されれば成功です。

パッケージの使用法

プリアンブルで

\usepackage[dvipdfmx]{graphicx}
\usepackage[hires]{coloremoji}

と宣言し,本文中では

\coloremoji{??????}

のように,絵文字部分を \coloremoji{} で囲んで使用します。すると,出力PDFにはカラー絵文字が出力されます。

また,絵文字の画像を収録したディレクトリへのパス(相対パスまたは絶対パス)を \coloremojidir というマクロにて指定しておく必要があります。
同梱のテストドキュメントでは, emoji_images ディレクトリ内に絵文字画像を格納しているので

\renewcommand{\coloremojidir}{./emoji_images/}

と指定してあります。

また,

\usepackage[hires]{coloremoji}

の [hires] オプションを外せば,低解像度の軽量版イメージが使われます。ファイルサイズを抑えたい場合は [hires] オプションを外して軽量版をお使いください。大きく拡大しなければ違いはあまり分からないと思います。

原理

  1. システムにインストールされている Apple Color Emoji.ttf から,その中に格納されている絵文字の透過PNGイメージを抽出する。
  2. ImageMagick convert を用いてPDFに変換し,絵文字保管庫を準備しておく。*2
  3. コンパイル時には,ソースに入力された絵文字を1文字ごとに走査し,その文字のコードポイントに対応する絵文字の画像を \includegraphics で読み込み,和文1文字のように整形して出力する。

制約の撤廃

前回の記事で定義した \emojifamily や \textemoji は,注意点で述べたように,

  • 絵文字選択符号(VS)を除去しないと余計な空白が入ってしまう。
  • 結合文字列として実現されている絵文字が正しく出力できない。
  • #️⃣ (HASH KEY) という絵文字は \string を付けないとコンパイルエラーになる。

という制約がありましたが,今回定義した \coloremoji は,マクロ内でVSの除去や結合文字列の考慮,# の取り扱いを全て処理しますので,そのような制約はなくなりました。
難しいことは考えず,単純に \coloremoji{ } の引数内に絵文字を普通に打ちこむだけで,カラー絵文字が出力されます❗?

追記 [2014/01/09] 〜 安全な #️⃣ (HASH KEY) の使用法

\coloremoji は引数中で # を使えるようにしているので

\coloremoji{1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣#️⃣}

はエラーになりませんが,

\newcommand\hoge{\coloremoji{1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣#️⃣}}

のように,マクロ定義中で #️⃣ を用いると,

Illegal parameter number in definition of \hoge.

といったエラーが出てしまいます。

この問題に対処するため,id:zrbabbler さんの

というアドバイスに従い,\# にも対応させました。

これにより,ユーザは常に “\#️⃣” と書いておけば安全に処理できます。すなわち,

\coloremoji{1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣\#️⃣}
\newcommand\hoge{\coloremoji{1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣0️⃣\#️⃣}}

はいずれも正しくコンパイルされます。

追記 [2014/01/10] 〜 高解像度オプション [hires] を追加

従来,生成PDFが重くなることを避けるためにやや解像度の低い軽量版絵文字画像を用いていましたが,id:munepi さんのコメントを受けて,「やはり画質がいいに越したことはないな」と思い,coloremoji パッケージに高解像度オプション [hires] を追加しました。[hires] を外せば従来通り軽量版の絵文字画像が埋め込まれます。

*1:Apple Color Emoji.ttf が装備されているのは 10.7 Lion 以降のため。ただし,OSのバージョンアップごとに Apple Color Emoji.ttf も少しずつアップデートされています。私の手元の Mac は全て 10.9 Mavericks であり,それでしか動作確認していないため,Mavericks 以前の Mac ではもしかするとうまく動かないかもしれません。

*2:現在の dvipdfmx ならばPNG画像のままでもロードできるので,PDFに変換する必要はないと思われるかもしれませんが,この絵文字画像を透過PNGのままで dvipdfmx によって埋め込むと,なぜか色が薄くなってしまう現象が確認されました。その回避のため,PDFに変換して用いています。