首先需要安装下面的字体:
中华书局宋体字库(http://www.ancientbooks.cn/helpcore?font)
1.正常使用fontspec宏包可以调用:
\newfontfamily\ZhongHuaSongFifteen{中华书局宋体15平面}
% \newfontfamily\ZhongHuaSongFifteen{ZhongHuaSongPlane15}
{\ZhongHuaSongFifteen ????????}
编译之后,正确显示。
2.但当我使用xeCJK宏包的备用字体设置时,却无法使用备用字体。MWE如下:
\documentclass[UTF8]{ctexart}
\usepackage{xeCJK}
\xeCJKsetup{AutoFallBack=true}
\setCJKfallbackfamilyfont{\CJKrmdefault}{{中华书局宋体00平面},{中华书局宋体02平面},{中华书局宋体15平面}}
\begin{document}
????????世????????????????????????????????????
中華書局宋體字庫隸定字:????????????????????????????????????????????????
\end{document}
编译log:
Package xeCJK Warning: Redefining CJKfamily `\CJKrmdefault' (SimSun(0)).
(./fk.aux) ABD: EverySelectfont initializing macros [1] (./fk.aux) )
(see the transcript file for additional information)
请教,应该怎么做可以实现备用字体?
补充:
私有区字体无法显示,在Ubuntu Pastebin https://paste.ubuntu.com/p/QsFNfX7dP3/也传了一份
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.sty
中的\c__xeCJK_CJK_chars_clist
未定义15平面范围。在
\c__xeCJK_CJK_chars_clist
定义中最后一行增加15平面的范围"F0000 -> "FFFFF
就可以fallback了,并且可以多层fallback。修改完后,多层fallback的排版结果:
yes,按照你的建议修改sty文件,私用区字体已经可以显示了。非常感谢!!!
原来还有最好的方案,不用修改
xeCJK.sty
文件。在导言区增加
\xeCJKDeclareCharClass{CJK}{"F0000 -> "FFFFD}
就可以:参考如下问题的答复:
https://github.com/CTeX-org/forum/issues/205
感谢muzimuzhi的方案。