MWE

MWE

eu tenho esse exemplo

\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}

Compilado com lualatexrecebo este aviso

Aviso do pacote fontspec: Idioma 'Inglês' não disponível para a fonte 'Amiri'

O que eu fiz de errado? ou o que eu perdi?

Responder1

Isso também me incomodou por muito tempo. Isto é o que está acontecendo:

Estes são os scripts e idiomas suportados porAmiri:

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

Quando você carrega o árabe com \babelprovide[import=ar-DZ, main]{arabic}o babelarquivo babel-ar-DZ.ini.

Neste arquivo você encontrará (entre outras coisas):

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

Então, quando o árabe argelino for o idioma em uso, babelserá carregadoAmiricom arab.ARAescrita e linguagem. Isso existe na fonte, então está tudo bem.

Mas babel-en.inicontém isto:

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

Então, quando o inglês estiver em uso, babeltentarei carregarAmiricom latn.ENGescrita e linguagem. Exceto que esta combinação não existe na fonte, então um aviso é emitido por babel:

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

Agora tudo o que precisamos fazer é dizer babelpara usar Language=Defaultwith Script=Latinem inglês e continuar a usar Language=Arabicwith Script=Arabicem árabe argelino.

Para fazer isso, remova englishdas babelopções principais e carregue-o assim:

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

Observação: babelusa languagecom letras minúsculas lem oposição a fontspecwhich usa Language!

babelagora irá carregarAmiricom opções suportadas para texto em inglês e nenhum aviso é emitido.

MWE

\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}

Responder2

Você pode definir o idioma como padrão:

\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}

Responder3

Primeiro, você pode ignorar este aviso. É inofensivo. (No entanto, concordo que é uma boa prática suprimir avisos sem sentido para não perder avisos significativos.)

A resposta de David Purton é muito elegante, mas há uma situação em que você pode precisar de algo mais complexo: se estiver carregando fontes diferentes para o mesmo idioma que exigem opções diferentes. Por exemplo, a \babelfont[chinese-traditional]{rm}pode suportar Language=Chinese Traditionale a \babelfont[chinese-traditional]{sf}pode suportar CJKShape = Traditional. Mais imediatamente, algumas fontes árabes (incluindo Noto Sans Arabic) não suportam Language=Arabic.

Neste caso, você precisa passar diferentes fontspecopções para o \babelfontcomando:

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

No entanto, uma ótima fonte multilíngue para Amiri de Khaled Hosny é outra de suas famílias de fontes, Libertinus. Ele baseou Libertinus Serif no Linux Libertine e Libertinus Sans no Linux Biolinum. Vou deixá-lo falar sobre a inspiração das letras latinas em Amiri, mas elas são muito parecidas. Há também uma fonte matemática que você pode selecionar com unicode-math.

Se quiser ativar todos os recursos de fonte dessas fontes, você pode tentar o seguinte:

\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}

Você pode usar o recurso OpenType de sobrescritos com o realscriptspacote.

Observe que, devido a um bug, o Babel 3.27 e versões anteriores ignoram \defaultfontfeaturesno \babelfont. Eu resolvi o bug aqui, mas uma correção está chegando à árvore de lançamento.

Neste ponto, como beamerusa fontes sem serifa por padrão, você precisa definir \babelfont[arabic]{sf}. Você pode copiar as linhas babelfont[arabic]{rm}ou carregar uma fonte árabe sem serifa, por exemplo:

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

Responder4

Nada de errado, pelo contrário. Esses avisos são mostrados por fontspec, não por babel. Podem ser irrelevantes para o inglês, mas não para muitas outras línguas, incluindo o árabe. Para removê-los completamente (eles só são realmente úteis quando o formato do documento está sendo configurado), você pode passar a silentopção para fontspec:

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

Ou também:

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

Editar.Uma terceira opção é passar silentcomo opção de classe.

informação relacionada