如何让 polyglossia 自动选择希腊文字体?

如何让 polyglossia 自动选择希腊文字体?

我的问题是关于希腊文字的,但我想它也可以是任何其他文字。

如果我设置的字体\setmainfont{#latinfont}不包含希腊字形,因此设置了另一种字体\newfontfamily\greekfont[script=Greek]{#greekfont},则我的 PDF 中不会出现 xelatex 的希腊语输出。为了获得希腊语脚本,我必须将相应的文本括在内\textgreek{#text}

我的 MWE 如下

\documentclass{article}

\usepackage{polyglossia}

\setmainfont{Cantarell}
\setsansfont{Cantarell}
\newfontfamily\greekfont[Script=Greek]{Liberation Serif}
\newfontfamily\greekfontsf[Script=Greek]{Liberation Serif}
\setdefaultlanguage{english}
\setotherlanguage{greek}

\begin{document}
\tableofcontents{}

\section{Αυτό είναι ελληνικά.}
Welcome to Greek ``serif'': Αυτό είναι ελληνικά

Welcome to Greek ``sans'': \textsf{Αυτό είναι ελληνικά}

Another try to get Greek: \textgreek{Αυτό είναι ελληνικά}
\end{document}

编译后为

my MWE compiles, but its not how I would like it to look

不幸的是,总是使用\textgreek不仅麻烦,而且在某些情况下也不可能。例如在参考书目中,我在 zotero 中组织我的图书馆,并从那里以 UTF-8 编码导出到 biblatex。因此,例如文章标题中的希腊文包含在参考书目中,通常只有一个字符(例如 γ-羟基丁酸)。

因此我的问题是:是否可以让 xelatex/xetex/polyglossia/fontspec 根据源文件中存在的脚本选择正确的字体?如果可以,我该如何实现?如果没有,是否有其他选择或解决方法?

答案1

您可以使用ucharclasses,但适当的标记更好。

\documentclass{article}

\usepackage{polyglossia}
\usepackage{ucharclasses}

\setmainfont{XCharter} % no Cantarell on my machine
\setsansfont{Futura} % a different one
\newfontfamily{\greekfont}{Liberation Serif}[
  Script=Greek,
  NFSSFamily=liberationserif,
]
\newfontfamily{\greekfontsf}{Liberation Sans}[
  Script=Greek,
  NFSSFamily=liberationsans,
]

\setdefaultlanguage{english}
\setotherlanguage{greek}

\makeatletter
\newcommand{\switchtogreek}{%
  \ifnum\strcmp{\f@family}{\sfdefault}=\z@
    \usefont{\encodingdefault}{liberationsans}{\f@series}{\f@shape}
  \else
    \usefont{\encodingdefault}{liberationserif}{\f@series}{\f@shape}
  \fi
}
\makeatother
\setTransitionsForGreek{\begingroup\switchtogreek}{\endgroup}

\begin{document}
\tableofcontents

\section{Αυτό είναι ελληνικά.}
Welcome to Greek ``serif'': Αυτό είναι ελληνικά

\textsf{Welcome to Greek ``sans'': Αυτό είναι ελληνικά}

Another try to get Greek: \textgreek{Αυτό είναι ελληνικά}
\end{document}

enter image description here

相关内容