輪迴
輪迴
这家伙很懒,什么也没写!

注册于 3年前

回答
2
文章
0
关注者
0

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

调了一个MWE如下,Windows环境,字体使用系统默认的SimSun和KaiTi:

\documentclass[openany, zihao=5]{ctexbook}

\usepackage{geometry}

\geometry{a4paper, top=2.54cm, left=3.18cm, bottom=2.54cm, right=3.18cm, includehead=true}

\xeCJKsetup{CJKecglue={\hskip 0.1em plus 0.1em}} % 这些排版需求希望不要改

\setCJKfamilyfont{mysong}{SimSun}
\setCJKfamilyfont{mykai}{KaiTi}

\newcommand*{\mysongti}{\CJKfamily+{mysong}} % 阿拉伯数字也使用中文字体,这些排版需求希望不要改
\newcommand*{\mykaishu}{\CJKfamily+{mykai}} % 阿拉伯数字也使用中文字体,这些排版需求希望不要改

\def\cmda#1{\zihao{-4}\mysongti{#1}\vspace{0.3ex}\par} % \vspace{0.3ex}是希望排版额外增加段后间距。但是在某些临界情况下,好像会出现多出一行的问题
\def\cmdb#1{\zihao{5}\mykaishu{#1}\vspace{0.3ex}\par}

\begin{document}

% 如果\cmda命令里有\vspace{0.3ex},在这个极端情况下,就会多出一个空行
% 有没有办法,即使段落最后一行非常挤,也能多出0.3ex的段后间距,但又不会多出一个空行的段后间距?
\cmda{1王致伯于秦,2诸侯皆贺秦。3秦孝公使公子少官帅师会诸侯于逢泽以朝王。} % 或者干脆让这一行松一点,把“王。”成为新行?
\cmdb{1王致伯于秦,2诸侯皆贺秦。3秦孝公使公子少官帅师会诸侯于逢泽以朝王。} 

\end{document}

发布
问题