我想创建一个可以更改我的 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}