setCJKfallbackfamilyfont不能使用PUA-A字体,应该是bug。
使用xeCJKDeclareSubCJKBlock可以解决这个问题:
\documentclass{ctexart}
% declare a Unicode block for Supplementary Ideographic Plane (U+20000 - U+2FFFF)
\xeCJKDeclareSubCJKBlock{SIP} % 这里的SIP应该可以随意命名,比如可以命名为Plane02,与下面的\setCJKfamilyfont保持一致即可
{
"20000 -> "2A6DF , % CJK Unified Ideographs Extension B
"2A700 -> "2B73F , % CJK Unified Ideographs Extension C
"2B740 -> "2B81F % CJK Unified Ideographs Extension D
}
% declare a Unicode block for Supplementary Private Use Area-A (U+F0000 - U+FFFFF)
\xeCJKDeclareSubCJKBlock{PUA-A}
{
"F0000 -> "FFFFF % Supplementary Private Use Area-A
}
\setCJKfamilyfont{zhsong}{ZhongHuaSongPlane00}
\setCJKfamilyfont{zhsong}[SIP]{ZhongHuaSongPlane02}
\setCJKfamilyfont{zhsong}[PUA-A]{ZhongHuaSongPlane15}
\newcommand*{\zhsongti}{\CJKfamily+{zhsong}}
\begin{document}
\zhsongti{一\char"20000\char"F0000} % 实际上可以直接用UTF-8编码粘贴字符,但是网页显示不出来,所以这里用\char"20000和\char"F0000替代
\end{document}
下图是排版的结果,分别是SIP平面和15平面的第一个字符:
问 使用xeCJK的备用字体设置,无法正确fallback