我想创建一个键,\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
开箱即用的效果。