接下来是我之前的问题如何在 pgfopts 的类选项中使用等号我将基类从 切换article
到scrartcl
并遇到编译错误。
l.451 \FamilyProcessOptions{KOMA} \relax
缺少字符:字体 nullfont 中没有 ,!缺少字符:字体 nullfont 中没有 ,!!您不能在水平模式下使用“宏参数字符 #”。> @removeelement #1#2#3->\def \reserved@a ##1,#1,## 2\reserved@a {##1,##2\rese... l.451 \FamilyProcessOptions{KOMA}
以下是我使用的示例
\begin{filecontents}{\jobname.cls}
\ProvidesClass{\jobname}[2018-11-20 v1.0 SE Test package]
\RequirePackage{pgfopts}
\pgfkeys{
testproj/.cd,
mystuff/.store in = \myValue,
mystuff = {} % <-- Set default to empty
}
\ProcessPgfOptions{/testproj}
\LoadClass[\myValue]{scrartcl} % article is working
\endinput
\end{filecontents}
\documentclass[mystuff={hello=SE,test=1}]{\jobname}
%\pgfkeys{/testproj/mystuff = {hello=SE}} % <-- working as aspected
\begin{document}
myValue: \myValue
\end{document}
这是 KOMAScript 中的错误还是我错过了其他东西?目标是使用scrreprt
和scrbook
。
答案1
这可能是安全的,但它是 latex2e 代码中非常微妙的区域
\begin{filecontents}{\jobname.cls}
\ProvidesClass{\jobname}[2018-11-20 v1.0 SE Test package]
\RequirePackage{pgfopts}
\pgfkeys{
testproj/.cd,
mystuff/.store in = \myValue,
mystuff = {} % <-- Set default to empty
}
\let\zzz \@expandtwoargs
\def\@expandtwoargs#1#2#3{%
\edef\tmp@zz{\noexpand\zzz\noexpand#1{\noexpand\detokenize{#2}}{\noexpand\detokenize{#3}}}%
\tmp@zz}
\ProcessPgfOptions{/testproj}
\LoadClass[\myValue]{scrartcl} % article is working
\let\@expandtwoargs\zzz
\endinput
\end{filecontents}
\documentclass[mystuff={hello=SE,test=1}]{\jobname}
%\pgfkeys{/testproj/mystuff = {hello=SE}} % <-- working as aspected
\begin{document}
myValue: \myValue
\end{document}
它在使用之前对参数进行去标记化(使其{}
安全)\in@
,但这可能会在其他地方产生意想不到的后果......