在选项中使用括号时,KOMAscript 会出现错误

在选项中使用括号时,KOMAscript 会出现错误

接下来是我之前的问题如何在 pgfopts 的类选项中使用等号我将基类从 切换articlescrartcl并遇到编译错误。

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 中的错误还是我错过了其他东西?目标是使用scrreprtscrbook

答案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@,但这可能会在其他地方产生意想不到的后果......

相关内容