
Verwende Lualatex, Linux, TeXlive 2023.
Wenn fontspec
eine angeforderte Schriftart nicht gefunden werden kann, wird eine Meldung ausgegeben, die wie folgt definiert ist (mit 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!
}
In meinem Fall mit einer benutzerdefinierten Dokumentklasse gibt es genau einen Grund, warum eine Schriftart nicht gefunden wird, und spezifische Anweisungen zur Behebung des Problems. Dies liegt daran, dass die Auswahl an Schriftarten für den Benutzer begrenzt ist. Daher möchte ich die obige Meldung neu definieren. Unmittelbar nach fontspec
dem Laden, aber bevor nach Schriftarten gesucht wird, möchte ich so etwas wie Folgendes:
\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
Ich habe nicht erwartet, dass das funktioniert (es hat nicht funktioniert), aber ich habe versucht, es zu hacken, \__fontspec_msg_renew
was auch nicht funktioniert hat (anscheinend gibt es so etwas wie msg_renew nicht).
Zweifellos kann expl3 damit umgehen. O Gurus, wie?
Antwort1
Sie können \msg_set:nnnn
einen neuen Text für die Nachricht festlegen, aber wie in den Kommentaren erwähnt, sollten Sie dies wahrscheinlich nicht tun, sondern stattdessen einen Fehler aus Ihrer eigenen Klasse oder Ihrem eigenen Paket ausgeben.
\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}
Wenn Sie möchten, dass sich die Nachricht ändert, \AtBeginDocument
müssen Sie \NewDocumentCommand
dazu Folgendes definieren:
\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}