在其他语言模式下插入等宽字体和无衬线字体

在其他语言模式下插入等宽字体和无衬线字体

假设我正在用希伯来语撰写一份文档,以英语作为另一种语言,使用多语言:

\usepackage{xcolor}
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}

\newfontfamily\hebrewfont[Script=Hebrew,Color=teal]{Hadasim CLM}
\newfontfamily\hebrewfontsf[Script=Hebrew,Color=cyan]{IBM Plex Sans Hebrew}
\newfontfamily\hebrewfonttt[Script=Hebrew,Color=magenta]{Miriam CLM}
\newfontfamily\englishfont{TeX Gyre Bonum}[Script=Latin,Language=English,Color=brown]
\newfontfamily\englishfontsf{CMU Sans Serif}[Script=Latin,Language=English,Color=olive]
\newfontfamily\englishfonttt{Logix Mono}[Script=Latin,Language=English,Color=orange]
\begin{document}
טקסט רגיל

\texttt{טקסט מונו}

\textsf{סנס סריף}

\begin{english}
These letters are in brown color.

\textsf{This should be in olive color, and it isn't.}
\end{english}
\end{document}

注意:所有这些字体都可以从overleaf 在线编辑器,方便您使用

现在我想插入各种字体的英语文本。要插入罗马字体,只需执行

\textenglish{Your text}

或者

\begin{english}
Your text
\end{english}

现在我如何插入英语等宽字体和无衬线字体的文本?

根据我对字体的指定,示例中的最后一行输入应为橄榄色。但事实并非如此,这意味着 TeX 既不使用 也不CMU Sans Serif使用IBM Plex Sans Hebrew?

我在这里遗漏了什么?

在此处输入图片描述

答案1

参考这个答案https://tex.stackexchange.com/a/325833/255984在使用多种语言时,polyglossia 在重新定义字体时会遇到一些麻烦。在序言中添加以下代码可修复此问题:

\makeatletter
\def\xpg@set@normalfont#1{%
  \letcs{\rmfamily}{#1@font@rm}%
  \letcs{\sffamily}{#1@font@sf}%
  \letcs{\ttfamily}{#1@font@tt}%
  \def\normalfont{\protect\xpg@select@fontfamily{#1}}%def instead of gdef
  \gdef\reset@font{\protect\normalfont}%
}
\addto\inlineextras@english{\xpg@set@normalfont{english}}
\addto\blockextras@english{\xpg@set@normalfont{english}}
\makeatother

现在你得到: 在此处输入图片描述

答案2

以下基于关于这个答案

根据fontspec手册第 II 部分第 1 节“主要命令”,您已经定义了一个用于插入这些字体的命令:

\newfontfamily⟨cmd⟩{⟨font⟩}[⟨font features⟩]

现在使用语言切换命令来插入简短的文本和较长段落的\textenglish{}环境:\begin{english}...\end{english}

\textenglish{%
\englishfonttt{This is printed in the Logix Mono face, colored orange}
}
\begin{english}
\englishfontsf{And this is printed in the CMU Sans Serif face, in olive color}
\end{english}

实际上englishfontenglishfontttenglishfontsf可以被任何其他字符串替换,以用作允许的命令名称。

相关内容