更改 pgfkey 的默认值

更改 pgfkey 的默认值

我想创建一个可以更改我的 pgfkeys 默认值的命令。我认为问题是设置为默认值的值没有扩展。因此下面的方法icondefaultsa不起作用。因此我创建了icondefaultsb,它可以工作。缺点是创建了全局变量\width\overlay,更改它们也会更改 pgfkeys 的默认值。

\pgfkeys{
    /icon/.cd,
    width/.initial = ,
    width/.default = ,
    overlay/.initial = ,
    overlay/.default = ,
    width,overlay,
}
\newcommand\icondefaultsa[1]{%
    \pgfkeys{/icon/.cd,#1}%
    \pgfkeys{
        /icon/.cd,
        width/.default = \pgfkeysvalueof{/icon/width},
        overlay/.default = \pgfkeysvalueof{/icon/overlay},
        width,overlay,
    }%
}
\newcommand\icondefaultsb[1]{%
    \pgfkeys{/icon/.cd,#1}%
    \pgfkeysgetvalue{/icon/width}{\width}%
    \pgfkeysgetvalue{/icon/overlay}{\overlay}%
    \pgfkeys{
        /icon/.cd,
        width/.default = \width,
        overlay/.default = \overlay,
        width,overlay,
    }%
}

答案1

不确定这是否正是您想要的,但您可以尝试以下操作,看看是否有效:

\documentclass[border=5]{standalone}
\usepackage{pgfkeys}

\begin{document}

\pgfkeys{%
    /icon/.cd,
    width/.initial=,
    width/.default=,
    overlay/.initial=,
    overlay/.default=,
    %
    set defaults/.cd,
    .unknown/.code={%
      \pgfkeys{/icon/\pgfkeyscurrentname/.default=#1}%
    }
}
\def\icondefaultsa#1{%
    \pgfkeys{/icon/set defaults/.cd, #1}%
}
\tt
\begin{tabular}{l}
\pgfkeys{/icon/width}
width: (\pgfkeysvalueof{/icon/width})
\\
\icondefaultsa{width=5pt}%
\pgfkeys{/icon/width}
width: (\pgfkeysvalueof{/icon/width})
\\
\icondefaultsa{width=23pt}%
\pgfkeys{/icon/width}
width: (\pgfkeysvalueof{/icon/width})

\end{tabular}
\end{document}

在此处输入图片描述

相关内容