使用xeCJK的备用字体设置,无法正确fallback

发布于 2021-06-20 10:40:55

首先需要安装下面的字体:
中华书局宋体字库(http://www.ancientbooks.cn/helpcore?font

  • 中华书局宋体00平面(ZhongHuaSongPlane00)
  • 中华书局宋体02平面(ZhongHuaSongPlane02)
  • 中华书局宋体15平面(ZhongHuaSongPlane15)

1.正常使用fontspec宏包可以调用:

\newfontfamily\ZhongHuaSongFifteen{中华书局宋体15平面}
% \newfontfamily\ZhongHuaSongFifteen{ZhongHuaSongPlane15}
{\ZhongHuaSongFifteen ????????}

编译之后,正确显示。
image.png
image.png
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/也传了一份

查看更多

关注者
0
被浏览
3k
輪迴
輪迴 2021-07-23
这家伙很懒,什么也没写!

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平面的第一个字符:
image.png

2 个回答
LaTeXStudio
LaTeXStudio 2021-06-20
这家伙很懒,什么也没写!

字体尽量使用字体名来查找,不直接使用中文名,这样查找字体不一定可以,最好去看字体生效的时候使用的字体名。可以测试下。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览