如何对不同语言使用多种字体?

如何对不同语言使用多种字体?

我正在使用xelatexwithxepersian包。我想做的是对文本的波斯语部分(波斯语/阿拉伯语 Unicode 字符)使用一种特定的字体,对英语部分(英语 Unicode 字符)使用另一种字体。

在 HTML + CSS 中,我可以轻松做到:

p { font-family: persianfont, englishfont }

使用persianfont仅支持波斯语字符和englishfont英语字符的正确字体,HTML 可以正确呈现文本。
它会尝试使用第一种字体呈现字符,但如果其中不存在该字符,则会移动到下一种字体。(我们可以说这englishfont是一种后备字体)

现在我正尝试在 中实现这一点TeX

我尝试了下面的代码,但只应用了最后一种字体:

\settextfont[Mapping=english]{Garamond}
\settextfont[Mapping=arabic]{B NAZANIN.ttf}

此外,映射似乎不起作用。

  • 我不想使用支持两种语言的单一字体
  • 我不想\begin ... \end在文档中为每种英文字体都使用字体!我希望它是自动的。

答案1

您可以使用包onchar=fonts ids中的命令在 LuaTeX 中执行此操作babel

\documentclass{article}
\tracinglostchars=3 % Errot if the font and language do not match!
\usepackage[bidi=basic, english]{babel}
\usepackage{fontspec}

\babelprovide[import=fa, onchar=fonts ids]{persian}

\defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX }

\babelfont{rm}
          [Scale=1.0]{NewCM10-Book}
\babelfont{sf}
          {NewCMSans10-Book}
\babelfont{tt}
          {NewCMMono10-Book}
\babelfont[persian]{rm}
          {Noto Naskh Arabic}
% Sans-Serif Persian font goes here, if needed.
\babelfont[persian]{tt}
          {ALM Fixed}
          
\begin{document}

\section*{Farsi (فارسی)}

Persian (/ˈpɜːrʒən, -ʃən/), also known by its endonym Farsi (فارسی, Fārsī, [fɒːɾˈsiː], is a Western Iranian language belonging to the Iranian branch of the Indo-Iranian subdivision of the Indo-European languages.

\begin{otherlanguage}{persian}
\section*{مقدمه}


از آنجا که شناسائی حیثیت ذاتی کلیهٔ اعضای خانواده بشری و حقوق یکسان و انتقال ناپذیر آنان اساس آزادی و عدالت و صلح را در جهان تشکیل میدهد،

از آنجا که عدم شناسائی و تحقیر حقوق بشر منتهی به اعمال وحشیانه‌ای گردیده است که روح بشریت را بعصیان واداشته و ظهور دنیائی که در آن افراد بشر در بیان و عقیده آزاد و از ترس و فقر فارغ باشند بعنوان بالاترین آمال بشر اعلام شده است،

از آنجا که اساساً حقوق انسانی را باید با اجرای قانون حمایت کرد تا بشر بعنوان آخرین علاج بقیام بر ضد ظلم و فشار مجبور نگردد،

از آنجا که اساساً لازم است توسعه روابط دوستانه بین ملل را مورد تشویق قرار داد،
\end{otherlanguage}

\end{document}

新版计算机现代书籍 + 诺托纳斯赫阿拉伯语样本

混合从左到右和从右到左的脚本使事情变得复杂:虽然这种方法可以正确检测英语段落中的单个波斯语单词,但您仍然需要使用语言标记来更改整个章节或段落的布局。

答案2

我发现文档xepersian\settext波斯语文本有 & 。\setlatintext效果非常好。但是,我仍然需要使用类似这样的命令来分隔拉丁文本,\lr{text}但这不是什么大问题。

相关内容