在 XeLaTeX 中混合西里尔字母和拉丁字母

在 XeLaTeX 中混合西里尔字母和拉丁字母

我想使用 在我的文档中混合使用西里尔字母和拉丁字母XeLaTeX。它可以编译,但西里尔字母不会显示在 pdf 中。此外,LaTeX如果有必要,我想对拉丁字母使用默认字体,对西里尔字母使用另一种字体。

\documentclass{article}

\usepackage{fontspec}
\usepackage[T1,T2A]{fontenc}

\usepackage[russian,english]{babel}
\begin{document}
  Latin first.

\fontencoding{T2A}\selectfont Математические формулы  
\end{document}

答案1

您得到了polyglossia答案,所以这里有babel解决方案。这些功能相当新(babel文档说是 3.15 版)。

\documentclass{article}
\usepackage{fontspec}
\usepackage[russian,english]{babel}

\babelfont{rm}[
  Ligatures=TeX,
  SmallCapsFont={Latin Modern Roman Caps}]%
  {Latin Modern Roman}
\babelfont[russian]{rm}[
  Ligatures={Common, TeX},
  Scale=MatchUppercase]%
  {Libertinus Serif}

\begin{document}
Mathematical formulas

\begin{otherlanguage}{russian}
Математические формулы
\end{otherlanguage}

Mathematical formulae

\foreignlanguage{russian}{Математические формулы}
\end{document}

在此处输入图片描述

请注意语言切换界面(\begin{otherlanguage}{<language>}...\end{otherlanguage}\foreignlanguage{<language>}\begin{<language>}...\end{<language>}\text<language>)的区别。

这里也没有\setmainfont,连默认语言都是设置的\babelfont


也许可以用几句话来描述这里发生的事情。正如 David Carlisle 在评论中提到的那样fontenc(及其编码开关)不应与 XeLaTeX 或 LuaLaTeX 一起使用。但即使您删除它,您也看不到您期望的结果。您的文档在问题设置中使用的字体没有西里尔文字符,因此这些字符将被丢弃。

最漂亮的解决方案可能是选择一种支持所有所需脚本的字体(至少是西里尔文和拉丁文),然后对整个文档使用相同的字体。这会使外观更加统一和谐。

Davislor 的回答和此处的这两个示例都展示了一种根据文档中所选语言选择字体的方法。显然,也可以尝试根据 Unicode 块更改字体,请参阅如何使用 ucharclasses 更改特殊脚本的字体,然后恢复到之前的状态?在 LuaTex 中,是否可以根据所使用的脚本/字形更改字体/语言?XeTeX,遇到希腊字符时更改字体使用(Sabon Linotype / Sabon Greek)根据 Unicode 块自动更改 XeTeX 字体

答案2

使用polyglossia获取多语言文本,并设置\russianfont

用于\begin{russian}俄语的长篇和\textrussian{}短篇。如果文件主要为俄语,\setdefaultlanguage{russian}

\documentclass[varwidth, preview]{standalone}
\usepackage{fontspec}
\usepackage{polyglossia}

\setmainfont{Latin Modern Roman}
\defaultfontfeatures{Scale=MatchUppercase}
\newfontfamily\russianfont{Libertinus Serif}[
  Script=Cyrillic,
  Language=Russian]

\setdefaultlanguage{english}
\setotherlanguage{russian}

\begin{document}

Latin first.  \textrussian{Математические формулы}

\end{document}

答案3

我的想法是将这个polyglossia包和newcomputermodern提供不同形状和重量的俄文字母与 Computer Modern 字体非常一致。您可以使用以下代码。

\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{english}
\setotherlanguage{russian}
\newfontfamily\russianfont[Script=Cyrillic,Language=Russian,
ItalicFont={NewCM10-Italic.otf}, BoldFont={NewCM10-Bold.otf},
BoldItalicFont={NewCM10-BoldItalic.otf}]{NewCM10-Regular.otf}
\newfontfamily\russianfontsf[Script=Cyrillic,Language=Russian,
ItalicFont={NewCMSans10-Oblique.otf}, BoldFont={NewCMSans10-Bold.otf},
BoldItalicFont={NewCMSans10-BoldOblique.otf}]{NewCMSans10-Regular.otf}
\newfontfamily\russianfonttt[Script=Cyrillic,Language=Russian,
ItalicFont={NewCMMono10-Italic.otf}, BoldFont={NewCMMono10-Bold.otf},
BoldItalicFont={NewCMMono10-BoldOblique.otf}]{NewCMMono10-Regular.otf}

\begin{document}
Mathematical formulas

{\itshape\textrussian{Математические формулы}}

Mathematical formulae

{\bfseries\textrussian{Математические формулы}}

Mathematical formulas

{\itshape\bfseries\textrussian{Математические формулы}}

Mathematical formulae

{\sffamily\textrussian{Математические формулы}}

Mathematical formulas

{\ttfamily\textrussian{Математические формулы}}

\end{document}

注意这些otf字体不需要安装在电脑上,因为它们已经包含在软件包中了newcomputermodern。其编译结果如下。

在此处输入图片描述

另外,如果你想要主要语言(英语)新的Computer Modern字体与Computer Modern字体几乎相同,输入会更容易,您可以使用以下代码。

\documentclass{article}
\usepackage[regular]{newcomputermodern}

\begin{document}
Mathematical formulas

{\itshape Математические формулы}

Mathematical formulae

{\bfseries Математические формулы}

Mathematical formulas

{\itshape\bfseries Математические формулы}

Mathematical formulae

{\sffamily Математические формулы}

Mathematical formulas

{\ttfamily Математические формулы}

\end{document}

\usepackage[regular]{newcomputermodern}也可以替换为\usepackage[olddefault]{fontsetup},其编译结果与上面相同。

顺便说一下,该newcomputermodern包中还包含其他语言的文本字母,例如希腊语等,调用方式与上面类似。

相关内容