マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

bxcoloremojiがバージョン1になった話

今日11月11日は、皆さんお待ちかねの、きりたんぽの日!

……なのですが、あいにく今年は1TeXにもsc1Typstにも進展がなかったので、代わりに「バージョン1が今日リリースされたLaTeXパッケージ」の話をしたいと思います。それは何かというと、bxcoloremojiパッケージです。

bxcoloremojiについて語る件

bxcoloremojiパッケージは「LaTeX文書でカラー絵文字を使う」ためのパッケージの一つです。同様の機能をもつパッケージがイロイロありますが、その中では最古参の部類に入ると思います1

% pdfLaTeX document
\documentclass[a4paper]{article}
\usepackage{bxcoloremoji}% Do color emoji!
\begin{document}
I like \coloremoji{} better than
\coloremoji{🦆} and \coloremoji{🦉}.
\end{document}

旧版での出力結果

bxcoloremojiの長所は「絵文字を文字として扱ったときに正しい出力になるように細部が調整されている」という点です。例えば、hyperrefを使った文書の見出しに絵文字を含めても、ブックマークを含めて正しい出力が得られます。

% LuaLaTeX文書
\documentclass[a4paper]{ltjsarticle}
\usepackage{bxcoloremoji}% カラー絵文字したい
\usepackage[colorlinks]{hyperref}% hyperrefしたい
\begin{document}
% \coloremojicode はUnicode符号値や短縮名で入力する.
\section{ゆきだるま\coloremojicode{:snowman:}}
素敵\coloremojicode{:blush:}
\section{{\TeX}言語\coloremojicode{1F92E}}
素敵\coloremojicode{1F631}
\end{document}

出力PDFをAdobe Readerで見たときの様子

もちろん、和文処理も十分に考慮されていて、例えば縦組みの文書中で使用しても真っ当な出力が得られます。

% upLaTeX文書
\documentclass[uplatex,dvipdfmx,tate,paper=a5]{jlreq}% 縦組み
\usepackage{bxpapersize}
\usepackage{bxcoloremoji}% カラー絵文字したい
\begin{document}
% ラベルが 1️⃣2️⃣3️⃣ の箇条書き
\begin{coloremojicodeautolist}{:one:}
\item ゆきだるま\coloremoji{}
\item アヒル\coloremoji{🦆}
\item フクロウ\coloremoji{🦉}
\end{coloremojicodeautolist}
\end{document}

出力結果

以上のような様々な理由があって、bxcoloremojiは日本のLaTeX界隈ではよく使われているような気がします(気のせいかも🙃)

テフライブでbxcoloremojiできない件

さて日本で大人気な(気がする)bxcoloremojiですが、重大な欠点がありました。それは

CTANに登録されていない
(従ってTeX Liveにも登録されない)

ということです。bxcoloremojiは大量の画像ファイルを伴うパッケージであるため、インストールも結構面倒で、またオンラインのLaTeX環境(Cloud LaTeXやOverleafなど)で使おうとしても困難な作業を必要とします。

作者🙃がbxcoloremojiをCTANに登録していなかった理由は色々あるのですが、一番大きなのは

CTANに上げようと思い立った時には既に
他の絵文字パッケージが大量にあったから

だったりします。もちろん、同じ機能のパッケージが複数あること自体は全く問題にならないはずですが、大量の画像ファイルをアップロードすることを問題視していました。bxcoloremojiはTwemojiの画像データを利用しているのですが、CTANに既にある他のパッケージの多くがTwemojiを利用していました。実質的に同じ画像を大量にCTANに上げるのはかなり躊躇しました。

テフライブでbxcoloremojiできるようになる件

それでも「bxcoloremojiがテフライブで使えた方がよい」と感じたため「画像ファイルをアップロードせずに済む方法」を模索しました。思いついたのが

画像の出力を(既にCTANにある)他のパッケージに移譲する

という方法です2。既存のものの中ではtwemojisというパッケージが好都合3だったので、これを利用しました。

  • 0.18版[2024-08-02]で「twemojisモード」を新設しました。
  • 1.0版[2024-11-11]で「twemojisモード」を既定に変更し、画像ファイルを別パッケージに分離しました。

これでCTANへの登録の準備ができたので、1.0版のリリースと同時にCTANへの登録申請を行いました。現在既にCTANに登録されています。

近日中にTeX Liveに収録されるでしょう。

バージョン1のbxcoloremojiを使ってみる件

※ここでは従来の0.x版との違いについての話に絞ります。

1.0版では「画像出力をtwemojisパッケージに移譲する」ため、(既定設定では)当然twemojisがインストールされている必要があります。といってもtwemojisはTeX Liveに収録されているパッケージなので、これは問題にならないはずです4

それが済んだならば、あとの扱いは従来の0.x版と全く同じです。つまり文書ソースを書き換える必要はありません。

% pdfLaTeX document
\documentclass[a4paper]{article}
\usepackage{bxcoloremoji}% Do color emoji!
\begin{document}
I like \coloremoji{} better than
\coloremoji{🦆} and \coloremoji{🦉}.
\end{document}

例えば、一番初めに例に出したこの文書ソースの場合、0.x版では自前の画像ファイルが使われていましたが、1.0版ではtwemojisの絵文字出力命令が呼び出されます。どちらもTwemojiのSVG画像を基にして作られたPDF画像であるため、全く変わらない見た目の出力が得られます。

1.0版での出力結果

画像ファミリ選択オプション

bxcoloremojiパッケージでは絵文字出力に用いる画像のセットをパッケージオプションで選択することができます。

  • twemoji-pdf: 標準の(Twemojiに基づく)PDF画像
  • twemoji-png: 標準の(Twemojiに基づく)PNG画像
  • twemojis: twemojisパッケージに移譲する
  • custom=‹名前›: ユーザが用意したカスタムの画像セットを指定する

先述の通りtwemojisは0.18版で追加されました。そして、このオプションの既定値が、0.x版のtwemoji-pdfから1.0版でtwemojisに変わりました。

実は、変わったのは既定値だけなので、1.0版でも引き続きtwemoji-pdftwemoji-pngを指定することができてこの場合は従来と全く同じ出力が得られます。

% これは従来(0.x版)と全く同じ出力になる
\usepackage[twemoji-pdf]{bxcoloremoji}

ただしtwemoji-pdftwemoji-pngの画像セットは1.0版では“標準”ではなくなったので、パッケージに同梱されなくなりました。従来の“標準”の画像セットは別の「bxcoloremoji-oldstdリポジトリ」に公開されているので、それを別途インストールする必要があります。

※「0.x版がインストールされている状態からから1.0版に移行する」というパターンの場合、「画像データのディレクトリ(emoji_images)だけ残す」ことでも従来のtwemoji-pdftwemoji-pngオプションを使用できるようになります。
(インストールを0.x版から1.0版に移行する手順については後日改めて説明したいと思います。)

まとめ

皆さん、bxcoloremojiでドンドンカラー絵文字しましょう!💁


  1. ただし、bxcoloremojiパッケージは元々はDoraTeX氏作製のcoloremojiパッケージの改良版として作られたものでした。
  2. bxcoloremojiの強みは「絵文字の画像を用意していること」ではないと思っています。
  3. Twemojiの画像を用いていてかつどのエンジンでも使えるので。
  4. TeX Liveをフルインストールしたなら最初から入っているはずで、そうでなくてもフツーのTeX Liveならば「tlmgr install twemojis」でインストールできます。