微量元素

微量元素

我有這個例子

\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=Defaultwith Script=Latin,同時繼續使用Language=Arabic阿爾及利亞Script=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 阿拉伯語)不支援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第三個選項是作為班級選項通過。

相關內容