在原问题中,原题主需要输入“宋体”扩展H区的字体“𱠧”。
在叶典网的检索结果:
在windows11系统中,有以下两种字体似乎均支持扩展H区的该字。
通过win11设置>个性化>字体
在本人的windows11中,系统版本如下:
版本 Windows 11 专业版
版本号 24H2
安装日期 2025/1/29
操作系统版本 26100.2894
体验 Windows 功能体验包 1000.26100.36.0
使用xelatex
编译,pdf中不显示该字。
使用lualatex
编译,pdf中可以显示该字。
我的问题:
lualatex
可行而xelatex
不行,但这会导致xeCJK
的一些设置例如AutoFallBack
无法使用xelatex
或者lualatex
最完善的FallBack策略是什么, 即希望下面mwe可以正确被 FallBack?\documentclass{ctexbook}
% \xeCJKsetup{AutoFallBack=true}
% \setCJKmainfont{SimSun-ExtG}
\setCJKmainfont{TH-Tshyn-P1}
% \setCJKmainfont[FallBack=SimSun-ExtG]{SimSun}
% \setCJKmainfont[FallBack=TH-Tshyn-P1]{SimSun}
\begin{document}
你好,world!
“𠳹”、“𤠠”、“𬬺”、“𱠧”、“𤝽”。
\end{document}
1.这是因为扩展 H 区直到 2022 年 9 月的 Unicode 15 才引入,xeCJK
还没有更新到这个版本。
自己设置一下就好了。
\documentclass{ctexbook}
\xeCJKsetup{AutoFallBack=true}
\xeCJKDeclareCharClass{CJK}{"2EBF0->"2EE5F, "31350->"323AF} % Ext-I, Ext-H
\setCJKmainfont{SimSun}
\setCJKfallbackfamilyfont{\CJKrmdefault}{
{[AutoFakeBold,AutoFakeSlant]{SimSun-ExtB}},
{[AutoFakeBold,AutoFakeSlant]{SimSun-ExtG}},
}
\begin{document}
你好,world!
“𠳹”、“𤠠”、“𬬺”、“𱠧”、“𤝽”。
\end{document}
xeCJK
还支持为不同的字符区间设置不同的 CJK 字体,见 \xeCJKDeclareSubCJKBlock
的说明。
2.比较完善的策略是使用大而全的字库,或者为不同的字符区间设置不同的字体,然而这总是有时效的,因为 Unicode 没有收录“所有汉字”,每个版本都有可能添加新的 CJK 字符。
补充评论中的内容,来测试下(并非)开源的天珩字库
除了天珩标准字库外,还提供了以下的字体。
安装字体后,使用xeCJK
文档中提到的方法,在powershell
中输入:
fc-list -f "%{family}\n" :lang=zh > zhfont.txt
或者(需要安装typst
,感觉字体族名管理比fc-list
好)
typst fonts
可以得到有关的字体名如下:
TH-Feon
TH-Hak
TH-Joeng-H
TH-Joeng-J
TH-Khaai-PP0
TH-Khaai-PP2
TH-Khaai-TP0
TH-Khaai-TP16
TH-Khaai-TP2
TH-Ming-HP0
TH-Ming-JP0
TH-Ming-P2
TH-Sung-KP0
TH-Sung-KP2
TH-Sung-PP0
TH-Sung-PP2
TH-Sung-TP0
TH-Sung-TP2
TH-Sy-P0
TH-Sy-P16
TH-Sy-P2
TH-Times
TH-Times_cyrl
TH-Times_grek
TH-Times_telex
TH-Tshyn-P0
TH-Tshyn-P1
TH-Tshyn-P16
TH-Tshyn-P2
下面测试基于"楷体"和"黑体"字形测试
TH-Khaai-T
TH-Hak
TH-Khaai-TP0
支持扩展H区字体"𱠧"TH-Khaai-TP2
支持扩展B区字体"𤝽"\documentclass{ctexbook}
\xeCJKsetup{AutoFallBack=true}
\xeCJKDeclareCharClass{CJK}{"2EBF0->"2EE5F, "31350->"323AF}
\setCJKmainfont{KaiTi}
\setCJKfallbackfamilyfont{\CJKrmdefault}{%
{[AutoFakeBold,AutoFakeSlant]{TH-Khaai-TP2}},
{[AutoFakeBold,AutoFakeSlant]{TH-Khaai-TP0}},
}
\begin{document}
扩展B区: “𤝽”.
扩展H区: “𱠧”.
\end{document}
TH-Hak
目前似乎仍然不支持“黑体”的扩展H区字符"𱠧"
\documentclass{ctexbook}
\xeCJKsetup{AutoFallBack=true}
\xeCJKDeclareCharClass{CJK}{"2EBF0->"2EE5F, "31350->"323AF}
\setCJKmainfont{SimHei}
\setCJKfallbackfamilyfont{\CJKrmdefault}{%
{[AutoFakeBold,AutoFakeSlant]{TH-Hak}},
}
\begin{document}
扩展B区: “𤝽”.
扩展H区: “𱠧”.
\end{document}
还需另寻他法,但是缺的也只是支持的字体,而不是xeCJK
调用的方法(逃)。
打算趁此机会多认识/熟悉点儿CJK字体(TBC)
添加一下学习的记录吧,在
![image.png image.png](https://pics.latexstudio.net/uploads/20250203/0782e0172da862057e8fc1d9417d399f.png)
xeCJK
的源码中,以下代码添加了对unicode扩展BCDEFG区域的码位支持。而
\xeCJKDeclareCharClass{CJK}{"2EBF0->"2EE5F, "31350->"323AF}
补充添加了H区和I区的码位。在unicode官方Blocks.txt中可以查询到不同分区的区块列表,其中"
意为十六进制。关于扩展B区文字"𤝽"和扩展H区文字"𱠧":
![image.png image.png](https://pics.latexstudio.net/uploads/20250203/26c8de82a91e22380d84c025093e6393.png)
我们可以对
SimSun-ExtB
,SimSun-ExtG
以及TH-Tshyn-P1
与TH-Tshyn-P2
通过尝试获知SimSun-ExtB
与TH-Tshyn-P2
字体支持扩展B区"𤝽"SimSun-ExtG
与TH-Tshyn-P1
字体支持扩展H区"𱠧"为了交作业,构造用上
\xeCJKDeclareSubCJKBlock
的使用场景,我们下面预期实现的目标为:为扩展B区字符区间使用
SimSun-ExtB
字体,为扩展H区字符使用TH-Tshyn-P1
字体若如此做,我们可以得到:
@u10307 还有一个小小的疑惑是,以上的字体方案(SimSun扩展以及天珩宋体)都是对于宋体生僻字比较好的输入方案。对于"楷体"以及"黑体",是否有比较成熟的包含扩展区域的方案呢?
非常感谢雾月老师,我之前看
xeCJK
的文档对于\xeCJKDeclareCharClass
因为没有好的应用场景以及unicode的知识就把这部分跳过去了😄@u70550 黑体就是我之前提到的 Plangothic,楷体的很少,可以到 GitHub 上搜搜看。总是可以使用组字的方案,即之前回答 https://ask.latexstudio.net/ask/question/17580.html 提到的字统网和 glyphwiki。
另外,天珩字库并不算是“开源”字体,根据它网站的介绍,它并不拥有字形的版权,在商业场合使用这些字体可能有版权问题。
@u10307 再不行还可以自己插图,用已有的字形拆分再组合,简单的用 Power Point、Ps、Ai 就可以完成,复杂的用专业字体编辑软件。