
Usando lualatex, Linux, TeXlive 2023.
Quando fontspec
não consegue encontrar uma fonte solicitada, ele emite uma mensagem, definida da seguinte forma (usando expl3):
\__fontspec_msg_new:nnn {font-not-found}
{
The font "#1" cannot be found.
}
{
A font might not be found for many reasons.\\
Check the spelling, where the font is installed etc. etc.\\\\
When in doubt, ask someone for help!
}
No meu caso, com uma classe de documento personalizada, há exatamente um motivo pelo qual uma fonte não foi encontrada e instruções específicas para corrigir o problema. Isso ocorre porque a escolha de fontes do usuário é limitada. Então, quero redefinir a mensagem acima. Imediatamente após fontspec
o carregamento, mas antes de procurar qualquer fonte, quero algo assim:
\ExplSyntaxOn
\__fontspec_msg_new:nnn {font-not-found}
{
The font "#1" cannot be found.
}
{
You need to install package "this-font-package".\\
If your system does not allow you to install packages,\\
then download the font package zip archive, unzip it,\\
and place the *.otf files in the same directory as the main document.
}
\ExplSyntaxOff
Eu não esperava que isso funcionasse (não funcionou), mas tentei hackear com \__fontspec_msg_renew
o qual também não funciona (aparentemente não existe algo como msg_renew).
Sem dúvida, o expl3 pode lidar com isso. Ó gurus, como?
Responder1
Você pode usar \msg_set:nnnn
para definir um novo texto para a mensagem, mas como mencionado nos comentários, você provavelmente não deveria fazer isso, mas sim emitir um erro de sua própria classe ou pacote.
\documentclass{article}
\usepackage{fontspec}
\ExplSyntaxOn
\msg_set:nnnn {fontspec} {font-not-found}
{
The~font~"#1"~cannot~be~found.
}
{
You~need~to~install~package~"this-font-package".\\
If~your~system~does~not~allow~you~to~install~packages,\\
then~download~the~font~package~zip~archive,~unzip~it,\\
and~place~the~*.otf~files~in~the~same~directory~as~the~main~document.
}
\ExplSyntaxOff
\setmainfont{foo.otf}
\begin{document}
\end{document}
Se você quiser que a mensagem mude usando \AtBeginDocument
você precisa definir um \NewDocumentCommand
para fazer isso:
\ExplSyntaxOn
\NewDocumentCommand{\fixerror}{}{
\msg_set:nnnn {fontspec} {font-not-found}
{
The~font~"##1"~cannot~be~found.
}
{
You~need~to~install~package~"this-font-package".\\
If~your~system~does~not~allow~you~to~install~packages,\\
then~download~the~font~package~zip~archive,~unzip~it,\\
and~place~the~*.otf~files~in~the~same~directory~as~the~main~document.
}
}
\ExplSyntaxOff
\AtBeginDocument{\fixerror}