МВЭ

МВЭ

У меня есть этот пример

\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=Defaultwith Script=Latinдля английского языка, продолжая использовать Language=Arabicwith Script=Arabicдля алжирского арабского языка.

Для этого удалите englishиз основных babelопций и вместо этого загрузите его следующим образом:

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

Примечание: babelиспользуется languageсо строчной буквы l, в отличие от fontspecwhich, который использует 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как класс.

Связанный контент