Closed Firestar-Reimu closed 1 year ago
@Firestar-Reimu 送你个建议:你不知道的东西不要乱猜,收回你最后一句话吧
AutoFakeBold
和 AutoFakeSlant
是 fontspec
就有的功能(文档 Part Ⅲ,第 6.7 节)。只是不支持设置 true
和 false
而已。
用 ctex
或者直接使用 luatexja-fontspec
都行。
因为 xeCJK
默认有 EmboldenFactor=4
,所以 xelatex 下的
\usepackage[fontset=none]{ctex}
\xeCJKsetup{AutoFakeBold=true}
在加粗程度上,应该和
\usepackage[fontset=none]{ctex}
\defaultfontfeatures{AutoFakeBold=4}
效果一致。但 xeCJK
的 AutoFakeBold
只在找不到 bold 字体时生效,而 fontspec
的相同选项,会不管有没有 bold 字体,总是使用 fake bold。
那怎么样写代码决定使用不同后端使用的代码呢,例如:
if use xelatex:
\xeCJKsetup{AutoFakeBold=true}
else if use lualatex:
\defaultfontfeatures{AutoFakeBold=4}
iftex
包了解一下~
在 cls 文件的 209-222 行,我修改了以下内容:
\ifdefstring{\ELEGANT@chinesefont}{nofont}{
\RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}
\RequirePackage{iftex}
\ifxetex
\xeCJKsetup{AutoFakeBold=true}
\xeCJKsetup{AutoFakeSlant=true}
\else
\fi
\ifluahbtex
\defaultfontfeatures{AutoFakeBold=4}
\defaultfontfeatures{AutoFakeSlant=0.167}
\else
\fi
}{\relax}
效果:test.tex可以编译出伪粗体(单独加了一句),test2.tex不行(lualatex不行,xelatex可以)
\defaultfontfeatures{...}
的形式会覆盖之前设置的 feature(见文档)。你会发现 \textit{...}
会出现伪斜体。
应该把这两个 feature 写到一起,或使用 \defaultfontfeatures+{...}
的形式。
谢谢!
但 xeCJK 的 AutoFakeBold 只在找不到 bold 字体时生效,而 fontspec 的相同选项,会不管有没有 bold 字体,总是使用 fake bold。
这个问题我感觉要么 fontspec 上游解决,要么关闭这个功能,让用户自己实现(毕竟 fakebold 不推荐使用)
这个问题来源于 ElegantBook 中有一句
\xeCJKsetup{AutoFakeBold=true}
使得该宏包无法在lualatex下编译。
想知道lualatex(即luatex-ja)下有没有对应的命令