当某些字形不是粗体字体时定义一类字形

当某些字形不是粗体字体时定义一类字形

我发现{\bf παπαῖ}在答案中添加这一行通过功能文件定义初始变体导致致命错误,因为类中的某些字形在粗体字体中不存在。我尝试通过定义新功能 ualt 并将其仅用于直立字体来解决这个问题。但是,似乎仅定义类并使用粗体希腊字母就足以产生错误。(我甚至尝试将类定义放在功能中。)有没有办法避免它?

 \documentclass{article}

\usepackage{fontspec,filecontents}

\begin{filecontents*}{junicode.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;

feature ualt {
# (incomplete list)
@greekletter = [
Alphatonos anoteleia Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos
Omegatonos iotadieresistonos Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota
Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
Iotadieresis Upsilondieresis alphatonos epsilontonos etatonos iotatonos
upsilondieresistonos alpha beta gamma delta epsilon zeta eta theta iota kappa
lambda mu nu xi omicron pi rho sigma1 sigma tau upsilon phi chi psi omega
iotadieresis upsilondieresis omicrontonos upsilontonos omegatonos uni03D0
theta1 phi1 omega1 uni03D7 uni03D8 uni03D9 uni03DA uni03DB uni03DC uni03DD
];
    sub @greekletter beta' by uni03D0;
} ualt;
\end{filecontents*}

\setmainfont[FeatureFile={junicode.fea}]{junicode}

\begin{document}
βιβλίον\par
\addfontfeature{UprightFeatures={RawFeature={+ualt}}}
βιβλίον\par
{\bf παπαῖ}
\end{document}

答案1

Junicode 粗体字体形状似乎只包含“希腊语和科普特语”组中的 3 个字形,以及“希腊语扩展”组中的 0 个字形。相比之下,Junicode Upright(非粗体)字体形状分别包含“希腊语和科普特语”和“希腊语扩展”组中的 88 个和 233 个字形。显然,将特征文件方法应用于Junicode 粗体

幸运的是,可以通过替换将功能文件的范围限制为 Junicode 的直立(非粗体)字体形状

\setmainfont[FeatureFile={junicode.fea}]{junicode}
...
\addfontfeature{UprightFeatures={RawFeature={+ualt}}}

\setmainfont{junicode}
...
\addfontfeature{UprightFeatures={FeatureFile={junicode.fea},
                                 RawFeature={+ualt}}}

写作

\setmainfont[UprightFeatures={FeatureFile={junicode.fea}}]{junicode}
...
\addfontfeature{RawFeature={+ualt}}

也有效。

在以下 MWE 中,值得注意的是,Junicode Bold 没有提供πα或 的字形。因此,的参数不会显示在屏幕截图中。παπαῖ\textbf

在此处输入图片描述

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{junicode.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;

feature ualt {
# (incomplete list)
@greekletter = [
Alphatonos anoteleia Epsilontonos Etatonos Iotatonos Omicrontonos Upsilontonos
Omegatonos iotadieresistonos Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota
Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
Iotadieresis Upsilondieresis alphatonos epsilontonos etatonos iotatonos
upsilondieresistonos alpha beta gamma delta epsilon zeta eta theta iota kappa
lambda mu nu xi omicron pi rho sigma1 sigma tau upsilon phi chi psi omega
iotadieresis upsilondieresis omicrontonos upsilontonos omegatonos uni03D0
theta1 phi1 omega1 uni03D7 uni03D8 uni03D9 uni03DA uni03DB uni03DC uni03DD
];
    sub @greekletter beta' by uni03D0;
} ualt;
\end{filecontents*}

\usepackage{fontspec}
\setmainfont{junicode}

\begin{document}
βιβλίον

\addfontfeature{UprightFeatures={FeatureFile={junicode.fea},
                                 RawFeature={+ualt}}}
βιβλίον

\textbf{παπαῖabc}
\end{document}

相关内容