
Использую lualatex, Linux, TeXlive 2023.
Если fontspec
запрошенный шрифт не найден, выдается сообщение, определенное следующим образом (с использованием 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!
}
В моем случае с пользовательским классом документа есть только одна причина, по которой шрифт не найден, и конкретные инструкции по устранению проблемы. Это связано с тем, что выбор шрифтов пользователем ограничен. Поэтому я хочу переопределить приведенное выше сообщение. Сразу после fontspec
загрузки, но до того, как он начнет искать какие-либо шрифты, я хочу что-то вроде этого:
\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
Я не ожидал, что это сработает (не сработало), но я попытался взломать его, \__fontspec_msg_renew
что тоже не сработало (судя по всему, такой вещи, как msg_renew, не существует).
Без сомнения, expl3 справится с этим. О гуру, как?
решение1
Вы можете использовать , \msg_set:nnnn
чтобы задать новый текст сообщения, но, как упоминалось в комментариях, вам, вероятно, не следует этого делать, а вместо этого выдать ошибку из вашего собственного класса или пакета.
\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}
Если вы хотите, чтобы сообщение изменялось с помощью , \AtBeginDocument
вам нужно определить , \NewDocumentCommand
чтобы сделать это:
\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}