pdfTeX 中如何做 Emoji 映射呢?
MEW 中,我试了 newunicodechar、DeclareUnicodeCharacter 都报错:
! pdfTeX error (font): invalid font identifier.
而 xe、Lua TeX 都可以通过 newunicodechar 映射
【测试 MEW 】如下
\documentclass[12pt,UTF8,oneside,a5paper]{ctexbook}
\usepackage{newunicodechar,iftex}
%\usepackage[utf8]{inputenc}
\newunicodechar{????}{ 乌龟\dotfill\includegraphics[width=2cm]{example-image-a.pdf} }
\newunicodechar{????}{ 南瓜\dotfill\includegraphics[width=2cm]{example-grid-100x100pt.pdf} }
\newunicodechar{????}{ 刺猬\dotfill\includegraphics[width=2cm]{example-image-golden-upright.pdf} }
\newunicodechar{我}{【Me】汉字可以用 newunicodechar 映射}
\ifPDFTeX
\DeclareUnicodeCharacter{1F994} {\LaTeX}
\DeclareUnicodeCharacter{4F60} {\TeX} % 你
\fi
\begin{document}
\ifPDFTeX emoji 引起报错,pdf\LaTeX 中怎么映射 emoji 呢
\else
Lua、xe\LaTeX 直接支持 Unicode 没问题
????
????
????
\fi
你我
detokenize \detokenize{????} 不报错
\end{document}问答站貌似不支持 emoji ,以上MWE 转截图如下
ctex 在 pdftex 下使用 CJK 宏包,应该是和 newunicodechar 不兼容的。
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\DeclareUnicodeCharacter{1F994}{\LaTeX}
\begin{document}
what?
????%% <-- U+1F994
\end{document}
这个可以在 pdftex 下编译,但改成 ctex 文档类就不行了。
我有几个思路:
① 字体层面造 Metric (TFM) file 造假
② unicode 编码层面通过高位特征字节 active 吃参数
和豆包讨论未完全解决
https://www.doubao.com/thread/w84816d6cd77f2ffe
守株待兔,等高人指点
有类似原理支持相关功能的 hwemoji 宏包,担任让不支持与ctex共同使用。
\documentclass{article}
% \usepackage{ctex}
\usepackage{hwemoji}
\begin{document}
\texttt{pdflatex-friendly}
%中文 + emoji ?
✏ 🆔 🍄 😀 😁
\end{document}

哎哎... CJK的内部实现想必修改了某些映射...不过为什么pdftex-only呢....2026年了,pdflatex+CJK也许已经不是主流,除非是在维护某些旧文档...
看下我那两个思路:
① 字体层面造 Metric (TFM) file 造假
② unicode 编码层面通过高位特征字节 active 吃参数
现在发现上述还是与 ctex 不兼容
hwemoji 对 套装版本有要求,我的生产力机太旧了还不支持 。
hwemoji 的可取之处是 hwemoji-assets 图形库,可供调用 。
@u870 @u70550 找到原因了。不用ctex也能复现。是因为这些emoji字符使用utf8编码后是4个字节,CJK、ctex只处理了2、3个字节的情况,没处理4个字节的情行。看看ctex会不会修。
可以暂时在导言区这样修补:
@u10307 work on my windows 11!