为不同的脚本定义不同的字体

为不同的脚本定义不同的字体

我正在尝试为不同的文字(拉丁文和希腊文)定义不同的字体。我目前使用 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}

LuaLaTeX 字体示例

我选择了匹配的 OpenType 数学字体,uninormalize以防止在新行开头出现裸重音的错误,并microtype启用字体扩展。

您将收到一些无害的警告消息,提示这些字体不提供英语和多音调希腊语字体功能。这只是意味着这些字体没有为希腊语定义任何特殊的 OpenType 功能,除了为希腊语脚本定义的功能之外。您可以在Language=Default加载字体时添加选项来隐藏警告,就像启用 一样。这也是您应该选择( 的加糖名称)的Ligatures=地方。Variant=78cv78

在 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}

XeLaTeX 示例

答案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}

在此处输入图片描述

相关内容