在 中\pgfkeys
,我希望一个键的值(b
在我的以下示例中)随着另一个键(a
在我的示例中)而改变,而无需引入新宏。如何实现?
例子:
\documentclass[a4paper]{article}
\usepackage{pgf}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
\begin{document}
\parindent=0pt
\pgfkeys{
a/.initial=1in,
b/.initial=a % I know this is wrong.
}
\newcommand\test[1][]{
\begingroup
\pgfkeys{#1}
\fbox{\parbox{\pgfkeysvalueof{/a}}{\pgfkeysvalueof{/a}}}\\
\rule{\pgfkeysvalueof{/b}}{3pt}
\endgroup
}
\test\\
\test[a=1cm]\\
\test[b=6cm]\\
\test
\end{document}
答案1
这是一个解决方案:
\documentclass[a4paper]{article}
\usepackage{pgf}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
\begin{document}
\parindent=0pt
\pgfkeys{
a/.code={%
\pgfkeyssetvalue{/a}{#1}%
\pgfkeyssetvalue{/b}{#1}%
},
a=1in,
}
\newcommand\test[1][]{
\begingroup
\pgfkeys{#1}
\fbox{\parbox{\pgfkeysvalueof{/a}}{a:\pgfkeysvalueof{/a}, b:\pgfkeysvalueof{/b}}}\\
\rule{\pgfkeysvalueof{/b}}{3pt}
\endgroup
}
\test\\
\test[a=1cm]\\
\test[b=6cm]\\
\test[a=2cm,b=6cm]\\
\test[b=6cm,a=2cm]
\end{document}
最后两个例子显示了一个潜在的问题:按键的顺序很重要。