如何使 \pgfkeys 中某个键的值随另一个键而改变?

如何使 \pgfkeys 中某个键的值随另一个键而改变?

在 中\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}

最后两个例子显示了一个潜在的问题:按键的顺序很重要。

相关内容