我有這個例子
\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=Default
with 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
。它們可能與英語無關,但與包括阿拉伯語在內的許多其他語言無關。要完全刪除它們(它們僅在設定文件格式時才真正有用),您可以將選項傳遞silent
給fontspec
:
\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
第三個選項是作為班級選項通過。