我为 XeLaTeX 和 而苦恼不已polyglossia
。不知何故,字体选择似乎没有像我预期的那样工作(也没有像错误消息所提示的那样)。
请考虑以下示例:
\documentclass{scrreprt}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
\newfontfamily\greekfont[Script=Greek]{Linux Libertine O}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\begin{document}
\tableofcontents{}
\section{Αυτό είναι ελληνικά.}
{\bfseries Welcome to Greek:} Αυτό είναι ελληνικά
Or Russian: Привет
Or Hebrew: מה הבעיה?
\end{document}
这与自动生成的“Table des matières”配合得非常好,这要归功于polyglossia
。
当我使用以下方法将默认语言更改为希腊语时:
\setdefaultlanguage{greek}
XeLaTeX 发出以下错误polyglossia
:
! Package polyglossia Error:
The current roman font does not contain the Greek script!
Please define \greekfont with \newfontfamily.
See the polyglossia package documentation for explanation.
Type H <return> for immediate help.
...
l.12 \tableofcontents
{}
正如您所见,我确实声明了\greekfont
with ,但不知何故似乎做了其他事情并期待其他事情。\newfontfamily
\tableofcontents
最后,我想使用包含不同语言的同一篇文档,以适当的语言获取章节、目录等\setdefaultlanguage
的所有精美的自动文本。polyglossia
有人可以帮忙吗?
答案1
KOMA 脚本将标题设置为无衬线字体。这意味着在您的示例中,它们将设置为 Arial。因此,您安装的 Arial 版本没有希腊文脚本,因此会出现错误(尽管错误中提到的罗马字体在这里有点误导)。
但是,如果您想将 Linux Libertine 用于所有希腊文本,那么您需要单独定义\greekfontsf
:
% !TEX TS-program = XeLaTeX
\documentclass{scrreprt}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
\newfontfamily\greekfont[Script=Greek]{Linux Libertine O}
\newfontfamily\greekfontsf[Script=Greek]{Linux Libertine O}
\usepackage{polyglossia}
\setdefaultlanguage{greek}
\begin{document}
\tableofcontents{}
\section{Αυτό είναι ελληνικά.}
{\bfseries Welcome to Greek:} Αυτό είναι ελληνικά
Or Russian: Привет
Or Hebrew: מה הבעיה?
\end{document}
当然,这不再使用无衬线字体设置标题。如果您想要这样,那么您需要获取带有希腊文脚本的 Arial 版本(在这种情况下,您不需要明确设置\greekfontsf
),或者使用另一种带有希腊文脚本的无衬线字体执行\greekfontsf
命令。