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 lualatex
recebo 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 babel
arquivo 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, babel
será carregadoAmiricom arab.ARA
escrita e linguagem. Isso existe na fonte, então está tudo bem.
Mas babel-en.ini
contém isto:
tag.opentype = ENG
script.tag.opentype = latn
Então, quando o inglês estiver em uso, babel
tentarei carregarAmiricom latn.ENG
escrita 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 babel
para usar Language=Default
with Script=Latin
em inglês e continuar a usar Language=Arabic
with Script=Arabic
em árabe argelino.
Para fazer isso, remova english
das babel
opções principais e carregue-o assim:
\babelprovide[import,language=Default]{english}
Observação: babel
usa language
com letras minúsculas l
em oposição a fontspec
which usa Language
!
babel
agora 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 Traditional
e 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 fontspec
opções para o \babelfont
comando:
\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 realscripts
pacote.
Observe que, devido a um bug, o Babel 3.27 e versões anteriores ignoram \defaultfontfeatures
no \babelfont
. Eu resolvi o bug aqui, mas uma correção está chegando à árvore de lançamento.
Neste ponto, como beamer
usa 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 silent
opçã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 silent
como opção de classe.