平均能量损失

平均能量损失

我有这个例子

\documentclass[hyperref=unicode]{beamer}

\usepackage[english,nil,bidi=basic-r]{babel}
\babelprovide[import=ar-DZ, main]{arabic}
\babelfont{rm}{Amiri}
\babelfont{sf}{Amiri}


\begin{document}

\begin{frame}{}
\today
\end{frame}

\begin{frame}{}
\selectlanguage{english}
\today
\end{frame}

\end{document}

编译时lualatex我收到此警告

软件包 fontspec 警告:字体‘Amiri’不支持‘英语’语言

我做错了什么?或者我错过了什么?

答案1

这也困扰了我很长时间。事情是这样的:

这些是阿米里

DFLT        Default
arab        Arabic
arab.ARA    Arabic/Arabic
arab.KSH    Arabic/Kashmiri
arab.SND    Arabic/Sindhi
arab.URD    Arabic/Urdu
latn        Latin
latn.TRK    Latin/Turkish

当您加载阿拉伯语时\babelprovide[import=ar-DZ, main]{arabic}babel就会读入babel-ar-DZ.ini

在此文件中,您将发现(除其他外):

tag.opentype = ARA
script.tag.opentype = arab

因此,当使用阿尔及利亚阿拉伯语时,babel将加载阿米里带有arab.ARA脚本和语言。这存在于字体中,所以一切都很好。

babel-en.ini包含这个:

tag.opentype = ENG
script.tag.opentype = latn

因此,当使用英语时,babel将尝试加载阿米里包含latn.ENG脚本和语言。但字体中不存在此组合,因此会发出警告babel

Language 'English' not available for font 'Amiri' with script 'Latin'.

现在我们需要做的就是告诉babel使用Language=DefaultwithScript=Latin表示英语,同时继续使用Language=ArabicwithScript=Arabic表示阿尔及利亚阿拉伯语。

为此,请english从主babel选项中删除它,然后像这样加载它:

\babelprovide[import,language=Default]{english}

笔记: babel与使用language小写字母l相反,fontspec使用Language

babel现在将加载阿米里支持英语文本选项,且不会发出警告。

平均能量损失

\documentclass[hyperref=unicode]{beamer}

\usepackage[nil,bidi=basic-r]{babel}
\babelprovide[import=ar-DZ, main]{arabic}
\babelprovide[import, language=Default]{english}
\babelfont{rm}{Amiri}
\babelfont{sf}{Amiri}    

\begin{document}

\begin{frame}{}
\today
\end{frame}

\begin{frame}{}
\selectlanguage{english}
\today
\end{frame}

\end{document}

答案2

您可以将语言设置为默认语言:

\documentclass[hyperref=unicode]{beamer}

\usepackage[english,nil,bidi=basic-r]{babel}
\babelprovide[import=ar-DZ, main]{arabic}
\babelfont{rm}[Language=Default]{Amiri}
\babelfont{sf}[Language=Default]{Amiri}


\begin{document}

\begin{frame}{}
\today
\end{frame}

\begin{frame}{}
\selectlanguage{english}
\today
\end{frame}

\end{document}

答案3

首先,您可以忽略此警告。它是无害的。(但是,我同意抑制无意义的警告是一种很好的做法,这样您就不会错过有意义的警告。)

David Purton 的回答非常优雅,但有一种情况可能需要更复杂的东西:如果您要为同一种语言加载不同的字体,则需要不同的选项。例如, a\babelfont[chinese-traditional]{rm}可能支持Language=Chinese Traditional,而 a\babelfont[chinese-traditional]{sf}可能支持CJKShape = Traditional。更直接的是,一些阿拉伯字体(包括 Noto Sans Arabic)不支持Language=Arabic

在这种情况下,您需要fontspec向命令传递不同的选项\babelfont

\babelfont{rm}[Scale=1.0]{Amiri}
\babelfont[english]{rm}[Language=Default]{Amiri}

然而,Khaled Hosny 的 Amiri 的一个很棒的多语言配套字体是他的另一个字体系列 Libertinus。他基于 Linux Libertine 设计了 ​​Libertinus Serif,基于 Linux Biolinum 设计了 ​​Libertinus Sans。我会让他谈谈 Amiri 中拉丁字母的灵感来源,但它们非常接近。您还可以使用 选择数学字体unicode-math

如果您想启用这些字体的所有字体功能,您可以尝试以下操作:

\documentclass[hyperref=unicode]{beamer}

\usepackage[nil,bidi=basic-r]{babel}

\babelprovide[import=ar-DZ, main]{arabic}
\babelprovide[import=en, language=Default]{english}

\babelfont{rm}[Scale=1.0,
               Ligatures={Common, TeX},
               UprightFeatures={Ligatures=Discretionary},
               Numbers={OldStyle,Proportional}
              ]{Libertinus Serif}
\babelfont{sf}[Scale=MatchLowercase,
               Ligatures=TeX,
               UprightFeatures={Ligatures={Common, Discretionary}},
               BoldFeatures={Ligatures=Common}
             ]{Libertinus Sans}
\babelfont[arabic]{rm}[Scale=MatchLowercase,
                       Ligatures={Common, TeX},
                       Contextuals={WordInitial,WordFinal,Inner}
                      ]{Amiri}

您可以将上标 OpenType 功能与该realscripts包一起使用。

请注意,由于一个错误,Babel 3.27 及以下版本会忽略\defaultfontfeatures\babelfont我已经在这里解决了这个错误,但修复正在进入发布树。

此时,由于beamer默认使用无衬线字体,因此您需要定义\babelfont[arabic]{sf}。您可以复制行babelfont[arabic]{rm}或加载无衬线阿拉伯字体,例如:

\babelfont[arabic]{sf}[Scale=MatchLowercase,
                       Ligatures=Discretionary,
                       Language=Default
                      ]{Noto Sans Arabic}

答案4

恰恰相反,这没什么不对。这些警告由 显示fontspec,而不是 由 显示babel。它们可能与英语无关,但与许多其他语言(包括阿拉伯语)无关。要将它们全部删除(它们仅在设置文档格式时才真正有用),您可以将选项传递silentfontspec

\usepackage[english,nil,bidi=basic-r]{babel}
\babelprovide[import=ar-DZ, main]{arabic}
\PassOptionsToPackage{silent}{fontspec}
\babelfont{rm}{Amiri}
\babelfont{sf}{Amiri}

或者:

\usepackage[english,nil,bidi=basic-r]{babel}
\babelprovide[import=ar-DZ, main]{arabic}
\usepackage[silent]{fontspec}
\babelfont{rm}{Amiri}
\babelfont{sf}{Amiri}

编辑。silent第三个选项是作为类选项传递。

相关内容