XeLaTeX
我正在使用、scrreprt
文档类以及XeCJK
和microtype
包(按顺序加载)编写多语言文档。
MWE(我的系统上已正确安装字体):
\documentclass{scrreprt}
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK SC}
\usepackage{microtype}
\begin{document}
This sentence is short.
这句话很短。
\end{document}
我收到以下警告(但仅当有中文文本时):
Package microtype Warning: One or more slots in the configuration are unknown.
(microtype) Make sure that no text commands are used.
(microtype) See the documentation for details (the note
(microtype) on `xeCJK' in section 9: `Hints and caveats').
该说明的相关部分(microtype
文献第 27 页)如下:
当与 xeCJK 包或 luatexja 包一起使用时,配置中的文本命令(例如 \'A、\textless)将无法理解。因此,您必须确保 microtype 不会遇到任何这些命令。这首先要求将字形仅指定为单个(可能是 Unicode)字符、数字或字形名称(参见第 5 节);其次,如果您使用的字体不存在预定义设置,则您需要自己创建这些设置(否则,将加载包含文本命令的默认设置)。此外,您应该稍后加载 microtype。
而“插槽”的定义如下(第 12 页):
字符可以指定为单个字母(A)、文本符号命令(\textquoteleft)或槽号(分别为 LuaTeX 或 XeTeX 的 Unicode 编号):十进制表示法为三位或更多位数字,十六进制以前缀 " 表示,八进制以 ' 表示(例如,T1 编码中的 'fl' 连字符:029,“1D,'35)。
我的 MWE 中的每个字符都是以 UTF-8 编码输入的,就我对上述段落的理解而言,microtype
应该没有什么可抱怨的。“配置中的一个或多个插槽未知”和“文本命令”是什么意思?以下部分可能是问题的根源吗?
如果您使用的字体不存在预定义设置,请自行创建这些设置(否则,将加载包含文本命令的默认设置)。
我如何知道是否存在预定义设置,或者如何创建这样的设置,或者如何以其他方式解决问题?
答案1
您可以为您的字体设置突起,然后 microtype 将不会尝试使用罗马字体的设置(这里没有您的字体,因此我使用了另一种字体):
\documentclass{scrreprt}
\usepackage{xeCJK}
\setCJKmainfont{Microsoft YaHei}
\usepackage{microtype}
\SetProtrusion
{ encoding = {TU},
family = Microsoft YaHei }
{}
\begin{document}
This sentence is short.
这句话很短。
\end{document}
编辑
Noto 字体具有不同的字符集,因此也应该覆盖继承列表:
\documentclass{scrreprt}
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK SC}%{NotoSerifCJKsc-Regular.otf}[NFSSFamily=notofamily]
\usepackage{microtype}
\DeclareCharacterInheritance
{ encoding = {TU},
family = NotoSerifCJKSC }
{}
\SetProtrusion
{ encoding = {TU},
family = NotoSerifCJKSC
}
{}
\begin{document}
This sentence is short.
这句话很短。
\end{document}
这些设置可以放在名为 的文件中mt-NotoSerifCJKSC.cfg
。