Emoji(絵え文も字じ)是聊天軟件和社交平臺的常客,也幾乎成為了一種新的「世界語」。雖然 LATEX 以排版嚴肅的學術類文章見長,但偶爾賣個萌也不為過。

背景

Emoji 其實是文字的一種,換句話說它們是對應有 Unicode 碼位的。而微信、QQ 等聊天工具,為了抹平平臺差異以防出現歧義,實際上是用了自己的一套東西,復制出去就會原形畢露,得到 [奸笑]、[旺柴] 這樣的字符串。

在之前引擎沒有支持的時候,也有人在 LATEX 中實現過類似的想法,即先把 emoji 導出為圖片,再通過一些命令插入,比如:

這樣的機制雖然簡單可靠,但畢竟插圖不是文字,過多的圖片不便于下載和交換(完整的支持至少需要近千個圖片文件,這恐怕也是 TEX Live 不收錄的原因),也不能自由地切換樣式(字體)。不過,Lua-TEX 最近加入了一些功能,使得我們現在也可以在 LATEX 中以字體的形式直接使用 emoji。

基本方法

2019 年,Luigi Scarso 等人為 Lua-TEX 添加了 HarfBuzz 庫支持,構建了另一個分支 LuaHB-TEX。隨后,LATEX 的開發版本就改用它代替原來的 Lua-TEX;在 TEX Live 2020 中 LuaHB-TEX 也將成為默認的 Lua-TEX 引擎。因此,為了使用 emoji 字體,我們需要改用 lualatex-dev 命令編譯。

另一方面,顯示 emoji 還需有字體的支持。主流操作系統都配有設計精良的字體:

  • Windows 中是 Segoe UI Emoji

  • macOS 中是 Apple Color Emoji

  • Ubuntu 等 Linux 系統大多配有開源的 Noto Color Emoji

在最新版的 TEX Live 中,則包含有 Twemoji Mozilla 和 Noto Color Emoji,它們均是開源免費的。

與普通字體類似,我們可以使用 fontspec 提供的命令來聲明字體,但注意需要加上選項 Renderer=HarfBuzz[1]。在文檔中直接輸入想要的表情,就可以使用了:

\documentclass{article}
\usepackage{fontspec}
\newfontface\EmojiFont{Twemoji Mozilla}[Renderer=HarfBuzz]
\begin{document}The cat eats apple:  {\EmojiFont