中出现了一个奇怪的问题fontspec
。在 MWE 和下图中,您会看到 fontspec 在 时会呈现希腊小写字母,Script=Greek
但在 时不会呈现拉丁小写字母,反之亦然Script=Latin
。这有什么问题,如何修复?
注意:如果可能的话,我不想让 LaTeX 知道我使用的是哪种语言,我想要一个全局解决方案。
提前致谢。
\documentclass{minimal}
\usepackage{fontspec}
\newfontfamily{\greek}[Script=Greek]{CMU Serif}
\newfontfamily{\latin}[Script=Latin]{CMU Serif}
\begin{document}
\noindent
{\greek\scshape Παράξενο Aυτό, Don't You Think?} \\
{\latin\scshape Παράξενο Αυτό, Don't You Think?}
\end{document}
答案1
它不是 fontspec,而是字体。它已实现小型大写字母功能,因此其他脚本已禁用该功能。
使用 xelatex 没有什么可以做的(除了正确选择语言,我认为你应该这样做,因为它还会设置正确的连字模式)。
你可以尝试使用 lualatex 来修复字体。下面的方法有效,但我真的不确定这是否是声明该功能的正确方法,以及是否也需要更改其他一些值。
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{luacode}
local patch_cmuserif = function (fontdata)
if fontdata.psname == "CMUSerif-Roman"
then
for i, v in ipairs(fontdata.resources.sequences) do
if
fontdata.resources.sequences[i].features.name==s_s_1
or
fontdata.resources.sequences[i].features.name==s_s_3
then
fontdata.resources.sequences[i].features.smcp={
["dflt"]={["dflt"]=true,},
["cyrl"]={["dflt"]=true,},
["latn"]={["dflt"]=true,},
["grek"]={["dflt"]=true,},
}
end
end
end
end
luatexbase.add_to_callback
(
"luaotfload.patch_font",
patch_cmuserif,
"change_cmuserif"
)
\end{luacode}
\newfontfamily{\greek}[Script=Greek]{CMU Serif}
\newfontfamily{\latin}[Script=Latin]{CMU Serif}
\begin{document}
\noindent
{\greek\scshape Παράξενο Aυτό, Don't You Think?} \\
{\latin\scshape Παράξενο Αυτό, Don't You Think?}
\end{document}