如何将宏设为 \pgfkeys 中键的值

如何将宏设为 \pgfkeys 中键的值

我想创建一个键,\pgfkeys其值是宏。但以下尝试失败。请在代码中查看我的问题。

\documentclass[a4paper]{article}
\usepackage{xcolor,pgf}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
\begin{document}
\pgfkeys{
  halign/.code=#1,
  halign/.default=\centering,
  width/.initial,
  width/.default=4in
}
\newcommand\test[1][]{
  \pgfkeys{width,#1}
    \fbox{\parbox{\pgfkeysvalueof{/width}}{\pgfkeys{/halign} some text}}
}
\test\\
\test[halign=AAA]\\% Why is "AAA" out of the box?

\end{document}

为什么下面的版本不能得到我想要的?

\documentclass[a4paper]{article}
\usepackage{xcolor,pgf}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
\begin{document}
\pgfkeys{
  halign/.initial={}, halign/.default={},
  width/.initial=4in,
}
\newcommand\test[1][]{{%
  \pgfkeys{halign,#1}%
  \fbox{\parbox{\pgfkeysvalueof{/width}}{\pgfkeys{/halign} some text}}%
}}
\test[width=2in,halign=AAA]\\
\test[halign=\raggedleft]\\
\test
\end{document}

答案1

要使用某些pgfkeys(由自动加载的独立包pgf)键来保存某些值,通常可以使用

  • key/.initial=<init value>初始化密钥,
  • key=<new value>更新存储的值,最后
  • \pgfkeysvalueof{<full path>}检索存储的值。

因此在 OP 的例子中,

\documentclass[a4paper]{article}
\usepackage{xcolor,pgfkeys}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}

\begin{document}
% init keys
\pgfkeys{
  halign/.initial=\centering,
  width/.initial=4in,
}
\newcommand\test[1][]{{% use an extra group of braces to restrict the scope
  % locally modify keys
  \pgfkeys{#1}%
  % use keys
  \fbox{\parbox{\pgfkeysvalueof{/width}}{\pgfkeys{/halign} some text}}%
}}
\test \\
\test[halign=AAA] \\
\end{document}

在此处输入图片描述

halign定义为时halign/.code=#1\pgfkeys{halign=AAA}将输出AAA,从而产生AAA开箱即用的效果。

相关内容