使用 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}