使用默认值明确调用 tikzset 宏

使用默认值明确调用 tikzset 宏

我有一个以下形式的宏:

\tikzset{
    foo/.style 2 args={
        ...
    },
    foo/.default={2pt}{}
}

如果我不想指定任何参数,我可以使用foo。如果我想指定第一个参数,我可以使用foo={3pt}(编辑:在这种情况下,第二个参数为空)。如果我想指定两个参数,我可以写foo={3pt}{green}

现在我想调用foo,使用第一个参数的默认值并为第二个参数指定一个值。这可能吗?

就像是foo={default}{green}

答案1

这实现了一个/.default 2 args具有所请求行为的处理程序。

\documentclass{article}
\usepackage{pgfkeys}

\pgfkeys{/handlers/.default 2 args/.code 2 args={%
    \pgfkeyssetvalue{\pgfkeyscurrentpath/.@def}{{#1}{#2}}
    \pgfkeyssetvalue{\pgfkeyscurrentpath/.@def1}{{#1}}
    \pgfkeyssetvalue{\pgfkeyscurrentpath/.@def2}{{#2}}
    \pgfkeysgetvalue{\pgfkeyscurrentpath/.@cmd}{\temp}
    \pgfkeyslet{\pgfkeyscurrentpath/.@cmd@orig}{\temp}
    \pgfkeysdefargs{\pgfkeyscurrentpath}{##1##2}{
        \def\tempa{##1}\def\tempb{##2}\def\tempc{default}%
        \ifx\tempa\tempc
            \pgfkeysgetvalue{\pgfkeyscurrentpath/.@def1}{\temparga}%
        \else
            \def\temparga{{##1}}%
        \fi
        \ifx\tempb\tempc
            \pgfkeysgetvalue{\pgfkeyscurrentpath/.@def2}{\tempargb}%
        \else
            \def\tempargb{{##2}}%
        \fi
        \csname pgfk@\pgfkeyscurrentpath/.@cmd@orig\expandafter\expandafter\expandafter\endcsname\expandafter\temparga\tempargb\pgfeov
    }
}}

\begin{document}


\pgfkeys{
    foo/.code 2 args={(#1)(#2)},
    foo/.default 2 args={2pt}{1pt},
    foo={a}{b},
    foo={a}{default},
    foo={default}{b},
    foo
}
\end{document}

相关内容