你好,我有一个关于 polyglossia 和 fontspec 组合的问题,我写了以下内容:
\documentclass[oneside, 12pt]{book}
\usepackage{fontspec}
\setmainfont[Script=greek, Mapping=tex-text]{Times New Roman}
\setmonofont[Script=greek,Mapping=tex-text]{Courier New}
\usepackage{polyglossia}
\usepackage{xunicode} % Unicode from accented glyphs
\setdefaultlanguage{greek}
\setotherlanguage{english}
%\newfontfamily\greekfont[Mapping=tex-text]{Times New Roman}
%\newfontfamily\greekfonttt[Mapping=tex-text]{Courier New}
\begin{document}
(This is greek:) Αυτό είναι ελληνικά.
(This is mono spaced greek:) \texttt{Αυτό είναι ελληνικά}
\end{document}
如果我这样做,XeTeX(实际上是 polyglossia)会抱怨:
当前的罗马字体不包含希腊文字!
但是,如果我取消注释这些newfontfamily
行,一切都会正常。我不明白为什么我必须包含它们,因为我已经在 中明确定义了使用希腊文字时字体系列应该是什么\setmainfont[Script=greek, Mapping=tex-text]{Times New Roman}
。否则我不明白[Script=greek]
fontspec 中的选项。
有人可以解释一下吗?
非常感谢!
答案1
该选项的正确名称是Greek
大写字母 G。它是开放类型功能的别名grek
。 polyglossia 是正确的:Times 没有开放类型功能grek
(在 xelatex 中,lualatex 似乎可以添加它)。主要问题是,如果您犯了这样的拼写错误,fontspec 不会警告您。在下面的例子中,“Greek”在日志和终端上发出警告,而“Unknown”则通过:
\documentclass[oneside, 12pt]{book}
\usepackage{fontspec}
\setmainfont[Script=Greek]{Times New Roman}
\setmonofont[Script=Unknown]{Courier New}
\begin{document}
abc
\end{document}
人们当然可以讨论,如果缺少脚本标签,polyglossia 是否应该抛出错误,因为这不是一个非常可靠的测试(即使缺少标签,很多字体确实有字形)。
顺便说一句:使用实际的 fontspec 时无需加载 xunicode,fontspec 会为您完成此项工作。