-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
xeCJK: 更新到 LaTeX 2020 和 fontspec v2.7h 之后找不到 Fandol 字体 #482
Comments
在例子\setCJKmainfont[Extension=.otf]{FandolSong-Regular}
\setmainfont[Scale=MatchLowercase]{texgyretermes-regular.otf} 中, \font \l__fontspec_test_font ="FandolSong.otf/OT" at 10pt 正确的展开结果应是 \font \l__fontspec_test_font ="[FandolSong.otf]/OT" at 10pt 在另一个例子\setCJKmainfont{FandolSong}
\setmonofont{texgyrecursor-regular.otf}[Scale=MatchLowercase] 中, \font \l__fontspec_test_font ="FandolSong.otf/OT" at 10pt 正确的展开结果应是 \font \l__fontspec_test_font ="FandolSong/OT" at 10pt 可能的方案各点为并列关系(都没什么依据,只是我的猜测)
|
另一个角度 尝试知,单独降级 latex2e 到 2019-10-01,问题消失。fontspec 的版本(2.7h/2.7g)与此问题无关。texlive 默认储存一层备份,可通过 latex2e 2020-02-02 改了不少 nfss 的内容,要慢慢看了。 |
主要的影响是 ci 过不去 |
找到具体原因了:latex2e 2020-02-02 修改了 首先,有定义 \DeclareRobustCommand\fontfamily[1]{\edef\f@family{#1}} 然后,在 latex3/latex2e@69f6705#diff-ba08b740b88cf76da18c9c76eb8b8b15 中, \DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
\fontfamily{#2}%
\fontseries{#3}%
\fontshape{#4}\selectfont
\ignorespaces} 改为了 \DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
\edef\f@family{#2}%
\edef\f@series{#3}%
\edef\f@shape{#4}\selectfont
\ignorespaces} 仅 revert \documentclass{article}
\usepackage[LoadFandol=false]{xeCJK}
\makeatletter
\DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
\fontfamily{#2}% used in latex2e 2019-10-01
% \edef\f@family{#2}% used in latex2e 2020-02-02
\edef\f@series{#3}%
\edef\f@shape{#4}\selectfont
\ignorespaces}
\makeatother
% right: "[FandolSong-Regular.otf]/OT:language=dflt;"
% wrong: "FandolSong-Regular.otf/OT:language=dflt;"
%\setCJKmainfont[Extension=.otf]{FandolSong-Regular}
% right: "FandolSong/OT:language=dflt;"
% wrong: "FandolSong.otf/OT:language=dflt;"
\setCJKmainfont{FandolSong}
\setmainfont[Scale=MatchLowercase]{texgyretermes-regular.otf}
\begin{document}
中文
\end{document} 个人建议报给 latex2e,看能不能改回来。如果结论是需要在 xecjk 这头处理,patch |
以上把之前几条回复提供的信息串了起来,基本梳理清楚了为什么 latex2e 2020-02-02 对 从 latex2e 团队在 latex3/latex2e#265 下的回复看,1)不建议依赖
我对 nfss 和 xecjk 的了解都还不够清楚,只是把自己知道的发出来。 |
这个问题的根源是 fontspec 包没有完全初始化相关变量,导致在嵌套定义字体时,相关变量发生了混淆。这里把变量 \ExplSyntaxOn
\tl_put_right:Nn \__fontspec_init:
{ \bool_set_false:N \l__fontspec_external_bool }
\ExplSyntaxOff LaTeX2e 2020-02-02 对 NFSS 的修改会令 xeCJK 中对中西字体族的匹配失效,但可以使用新提供的 |
最小示例:
报错为
有以下特征:
\setCJKmainfont
要用Extension=.otf
\setCJKmainfont
更换为\setCJKsansfont
则不报错\setCJKmainfont
要在\setmainfont
之前\setmainfont
要使用Scale=MatchLowercase
可能原因:
版本信息:
fontspec
2020/02/03 v2.7hxeCJK
2019/06/02 v3.7.4The text was updated successfully, but these errors were encountered: