У меня есть этот пример
\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}
then 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
with Script=Arabic
для алжирского арабского языка.
Для этого удалите english
из основных babel
опций и вместо этого загрузите его следующим образом:
\babelprovide[import,language=Default]{english}
Примечание: babel
используется language
со строчной буквы l
, в отличие от fontspec
which, который использует 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
Во-первых, вы можете проигнорировать это предупреждение. Оно безвредно. (Однако я согласен, что это хорошая практика — подавлять бессмысленные предупреждения, чтобы не пропустить значимые.)
Ответ Дэвида Пёртона очень элегантен, но есть одна ситуация, когда вам может понадобиться что-то более сложное: если вы загружаете разные шрифты для одного языка, которым требуются разные параметры. Например, 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}
Однако отличным многоязычным шрифтом-компаньоном для Amiri Халеда Хосни является еще одно из его семейств шрифтов, Libertinus. Он создал Libertinus Serif на основе Linux Libertine, а Libertinus Sans — на основе Linux Biolinum. Я позволю ему рассказать о том, что послужило вдохновением для латинских букв в 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
как класс.