我正在尝试为不同的文字(拉丁文和希腊文)定义不同的字体。我目前使用 Linux Libertine O 作为我的主要字体,它支持希腊文,但我想尝试为希腊文使用不同的字体。我可以不使用 来做到这一点吗?这样每次我想切换字体时\newfontfamily\greekfont[Script=Greek,⟨…⟩]{⟨font⟩}
都需要使用命令\textgreek{}
?也就是说,有没有一种方法可以在使用希腊文时自动切换字体?
我想更改字体,因为 Libertine 使用波浪号而不是倒置短音符来处理抑扬符。Gentium Plus 字体允许我在两者之间进行选择。我无法确定 Libertine 是否也有这样的字体功能。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\newfontfamily\greekfont[RawFeature=+cv78]{Gentium Plus}
\begin{document}
ῶ \greekfont{ῶ}
\end{document}
答案1
在 LuaLaTeX 中,您可以使用 的功能babel
自动更改字体以匹配您正在输入的脚本。在此示例中,衬线字体为拉丁语的 Libertinus Serif 和希腊语的 Gentium Plus。无衬线字母采用 Libertinus Sans(Linux Biolinum 的克隆),但 OpenType 脚本和语言功能自动设置为拉丁语/英语或希腊语/希腊语。这还会选择希腊语或英语连字模式。
\documentclass[english]{article}
\usepackage{babel}
\usepackage{unicode-math}
\usepackage{microtype}
\usepackage{uninormalize}
\babelprovide[import=el-polyton, onchar=ids fonts]{greek}
\defaultfontfeatures{ Ligatures=TeX,
Scale=MatchLowercase }
\babelfont{rm}
[Ligatures={Common,Rare}, Scale=1.0]{Libertinus Serif}
\babelfont[greek]{rm}
{Gentium Plus}
\babelfont{sf}
[Ligatures={Common,Rare}]{Libertinus Sans}
\babelfont{tt}
{Libertinus Mono}
\setmathfont{Libertinus Math}
\begin{document}
uῶ \textsf{uῶ}
\end{document}
我选择了匹配的 OpenType 数学字体,uninormalize
以防止在新行开头出现裸重音的错误,并microtype
启用字体扩展。
您将收到一些无害的警告消息,提示这些字体不提供英语和多音调希腊语字体功能。这只是意味着这些字体没有为希腊语定义任何特殊的 OpenType 功能,除了为希腊语脚本定义的功能之外。您可以在Language=Default
加载字体时添加选项来隐藏警告,就像启用 一样。这也是您应该选择( 的加糖名称)的Ligatures=
地方。Variant=78
cv78
在 XeLaTeX 中,您可能希望使用ucharclasses
它来更改当前语言,而不是选择特定字体。这样,它就可以适用于衬线字体、无衬线字体和等宽字体,并正确地将希腊语单词连字符化。
\documentclass[english]{article}
\usepackage{babel}
\usepackage{unicode-math}
\usepackage{ucharclasses}
\babelprovide[import=el-polyton]{greek}
\defaultfontfeatures{ Ligatures=TeX,
Scale=MatchLowercase }
\babelfont{rm}
[Ligatures={Common,Rare}, Scale=1.0]{Libertinus Serif}
\babelfont[greek]{rm}
{Gentium Plus}
\babelfont{sf}
[Ligatures={Common,Rare}]{Libertinus Sans}
\babelfont{tt}
{Libertinus Mono}
\setmathfont{Libertinus Math}
\setDefaultTransitions{\selectlanguage{english}}
{\selectlanguage{english}}
\setTransitionTo{GreekAndCoptic}
{\selectlanguage{greek}}
\setTransitionTo{GreekExtended}
{\selectlanguage{greek}}
\begin{document}
uῶ \textsf{uῶ}
\end{document}
答案2
我发现了一个可以自动化@UlrikeFischer 建议的 xetexcharclasses 方法的包。
\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\latinfont}{Linux Libertine O}
\newfontfamily{\greekfont}[RawFeature=+cv78]{Gentium Plus}
\usepackage[Greek, Latin]{ucharclasses}
\setDefaultTransitions{\defaultfont}{}
\setTransitionsForLatin{\latinfont}{}
\setTransitionsForGreek{\greekfont}{}
\begin{document}
This is written in Linux Libertine; the Greek in Gentium Plus. ῶ
\end{document}