假设我正在用希伯来语撰写一份文档,以英语作为另一种语言,使用多语言:
\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}
实际上englishfont
,englishfonttt
和englishfontsf
可以被任何其他字符串替换,以用作允许的命令名称。