按照《LaTeX Companion》第 3 版第 II 部分第 700 页中的示例,我尝试加载以下 .sty 文件和 .tex 文件,但出现错误:
./myfont.sty:8: LaTeX Error: The key property '.notif' is uknknown.
怎么了?
% myfont.sty
\ProvidesPackage{myfont}[2023-09-14]
\DeclareKeys {
draft.if = @fnt@draft ,
final.notif = @fnt@draft ,
languages.store = @fnt@foreigns,
}
\ProcessKeyOptions[fnt]
\endinput
% driver.tex
\documentclass{article}
\usepackage[final,languages={french,russian}]{myfont}
\begin{document}
Some text.
\end{document}
我正在使用 pdfTeX 和 LaTeX <2023-06-01> 补丁级别 1,以及 L3 编程层 <2023-08-29>。
答案1
该示例有几个问题。首先,它必须是.ifnot
而不是.notif
。其次,.store
它期望的是宏而不是宏的名称。第三,您声明的键没有可选系列。因此\@currname
使用默认系列,如myfont
示例中所示。但\ProcessKeyOptions
使用可选参数的显式使用系列fnt
。因此,对于该系列,所有声明的选项都是未知的。正确的例子是:
\begin{filecontents}[overwrite]{myfont.sty}
% myfont.sty
\ProvidesPackage{myfont}[2023-09-14]
\DeclareKeys {
draft.if = @fnt@draft ,
final.ifnot = @fnt@draft ,
languages.store = \@fnt@foreigns,
}
\ProcessKeyOptions
\endinput
\end{filecontents}
% driver.tex
\documentclass{article}
\usepackage[final,languages={french,russian}]{myfont}
\begin{document}
\makeatletter
This is \if@fnt@draft\else not \fi a draft. Languages are \@fnt@foreigns.
\end{document}
另请参阅适用于包和类作者的 LaTeX。