expl3 обновить сообщение?

expl3 обновить сообщение?

Использую 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}

Связанный контент