我已经在 Ubuntu 12.04 中使用“install-tl”脚本安装了完整的 TexLive 2011。当我使用存储库中的 TexLive 2009 时,以下文件编译时没有任何错误。
\documentclass{article}
% XeLaTeX
\usepackage{xltxtra}
\usepackage{xunicode}
% Fonts
\setmainfont{Arial}
\newfontfamily\cyrillicfont{Arial}
\setmonofont{Courier New}
% Lang
\usepackage{polyglossia}
\setmainlanguage{russian}
\setotherlanguage{english}
\begin{document}
English normal. \texttt{English monospace}.
Русский обычный. \texttt{Русский моноширинный}. % Text in Russian
\end{document}
但是 TexLive 2011 的 XeLaTeX 给出了这个错误:
错误:软件包 polyglossia 错误:
--- TeX 说 --- 当前罗马字体不包含西里尔字母!请使用 \newfontfamily 定义 \cyrillicfont。
请参阅 polyglossia 包文档以获取解释。输入 H 可立即获得帮助。...
l.17 ...英语正常。\texttt{英语等宽字体}。
尽管存在此错误,但输出的 PDF 是正确的。
如果注释掉 ,错误仍然存在\setmonofont{Courier New}
。使用 Courier New 作为主字体不会在普通文本上出现错误(没有\texttt
,\textbf
等等)。使用 DejaVu Sans Mono 作为等宽字体也不会出现错误。
我已经搜索了几个小时的解决方案,但没有任何结果。也许这是 Polyglossia 或 Fontspec 的一个错误?
答案1
有些字体没有正确地宣传其功能,就 Polyglossia 所能理解的而言。对于您的情况,您必须声明 Courier New 也可用于西里尔字母等宽位:
\newfontfamily{\cyrillicfonttt}{Courier New}
还要注意,如果您应该将英语段落放在合适的环境中,否则甚至不会尝试连字符。
举一个我所了解的语言的例子,假设我正在用英语写一份文件,其中有部分是意大利语。意大利语的连字规则是非常与英语规则不同:意大利语单词“formidabile”需要用连字符连接for-mi-da-bi-le
,而英语单词“formidable”也需要用连字符连接for-mid-able
。
XeTeX 每次使用一组连字规则,但它可以在多组规则之间切换。当当前语言是俄语时,一段英语文章将不是根本无法使用连字符,因为俄语规则只涉及西里尔字符。原则上可以编写正确处理英语和俄语的连字符规则,因为它们使用 Unicode 的不同部分。但这对俄语和乌克兰语来说是不可能的;如果文档是俄语、意大利语和英语,将使用哪一套规则?