我正在尝试在 XeLaTeX 中排版多语言 Unicode 文档(英语、德语、西班牙语、俄语以及即将推出的更多语言),但西里尔字母却让我头疼。请考虑以下示例:
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{russian}
\begin{document}
\noindent
\textrm{Hello! Привет!}\\
\textit{Hello! Привет!}\\
\textsl{Hello! Привет!}\\
\textsc{Hello! Привет!}
\end{document}
在我的 TeXLive 2012 系统上,使用 XeLaTeX 排版的文档没有出现错误消息,但西里尔字母没有显示。我对fontspec
和cm-unicode
包进行了一些实验,但除了罗马衬线字体之外,我无法让任何东西工作(而且它本来就很乱 - 这就是我没有在上面的例子中包括它的原因)。
在 XeLaTeX(或 LuaLaTeX)中同时使用尽可能多的语言的所有可用计算机现代字符的正确方法是什么?
答案1
Polyglossia 加载fontspec
,但默认字体是 Latin Modern,不支持西里尔字母。
您可以加载 Computer Modern Unicode 字体:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{CMU Serif}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{russian}
\newcommand{\RU}[1]{\foreignlanguage{russian}{#1}}
\begin{document}
\noindent
\textrm{Hello! \RU{Привет!}}\\
\textit{Hello! \RU{Привет!}}\\
\textbf{Hello! \RU{Привет!}}\\
\textbf{\textit{Hello! \RU{Привет!}}}\\
\textsl{Hello! \RU{Привет!}}\\
\textsc{Hello! \RU{Привет!}}
\end{document}
即使字体直接支持西里尔字母,我仍然会使用语言转换命令,因为否则连字符会不正确(或缺失)。
如果您没有将 CMU 字体安装为系统字体,您需要一种不同的方式来调用它们,假设您的 TeX Live 有它们。
\documentclass{article}
\usepackage{fontspec}
\setmainfont[
Ligatures=TeX,
Extension=.otf,
BoldFont=cmunbx,
ItalicFont=cmunti,
BoldItalicFont=cmunbi,
]{cmunrm}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{russian}
\newcommand{\RU}[1]{\foreignlanguage{russian}{#1}}
\begin{document}
\noindent
\textrm{Hello! \RU{Привет!}}\\
\textit{Hello! \RU{Привет!}}\\
\textbf{Hello! \RU{Привет!}}\\
\textbf{\textit{Hello! \RU{Привет!}}}\\
\textsl{Hello! \RU{Привет!}}\\
\textsc{Hello! \RU{Привет!}}
\end{document}
没有倾斜的 CMU 字体,因此对 的调用\textsl
与 相同\textit
。可以人为地倾斜直立字体。