XeTeX においては BMP 外の文字でも BMP の文字と全く同様に扱える。まあ当然である。
% XeLaTeX文書, 文字コードはUTF-8 \documentclass[a4paper]{article} \usepackage{fontspec} \setmainfont{IPAexMincho} \begin{document} 𠮟% U+20B9F \end{document}
BMP 外の文字をアクティブにすることもできる。まあ当然である。
% XeLaTeX文書, 文字コードはUTF-8 \documentclass[a4paper]{article} \usepackage{fontspec} \setmainfont{IPAexMincho} \begin{document} \catcode`𠮟=13 \def𠮟{(゚Д゚)ゴルァ!!} 𠮟 \end{document}
で、この状況で、文字に \scantokens
を被せても結果は全く変わらない。まあ当然……
% XeLaTeX文書, 文字コードはUTF-8 \documentclass[a4paper]{article} \usepackage{fontspec} \setmainfont{IPAexMincho} \begin{document} \catcode`𠮟=13 \def𠮟{(゚Д゚)ゴルァ!!} \scantokens{𠮟} \end{document}
うまくいかない! (゚Д゚)ゴルァ!!
またアレが怪しいので調べてみる。
% XeLaTeX文書, 文字コードはUTF-8 \documentclass[a4paper]{article} \begin{document} \def\what#1#2#3:{\typeout{(\number`#1, \number`#2)}} \what 𠮟.: \scantokens{\what 𠮟.:} \end{document}
(134047, 46) (55362, 57247)
うわぁ……やっぱりサロゲートペアの符号値のトークンに分裂している……。((さっきの〈𠮟〉をアクティブにした例の場合、一旦符号値が 55362(= U+D842)と 57247(= U+DF9F)の 2 つのトークンに分裂して、これらの値はアクティブでないため(つまり \catcode55362
は 12 である)アクティブ化が無視されたような動作をする。どういうわけか“実際に出力する”ときにはこの 2 つの“文字”の列はまた〈𠮟〉に戻っているのである。))