Having learnt a lot about the pgfkeys package as a result of my last question, I'm now trying to do some more adventurous things.
Let's say I have a command called \blob, whose value is the following list of pairs:
foo/{left=2,right=23,label=horse},%
bar/{left=25,right=29,label=sheep},%
baz/{left=31,label=zebra}
The first item of each pair is a simple string, while the second item is a key-value list. I run a \foreach command over \blob, to process each pair in turn. Suppose the current pair is \x/\xvalue. I want to execute the command
\pgfkeys{/wickerson/.cd,left=0,right=0,label={},\xvalue}
where left=0, right=0 and label={} are the default values, to be overwritten by any values that the contents of \xvalue provides. My intention is that the first pair, for example, will expand to
\pgfkeys{/wickerson/.cd,left=0,right=0,label={},left=2,right=23,label=horse}
Unfortunately, this doesn't work. Here is a snippet of my output:
x = bar, xvalue = left=25,right=29,label=sheep
! Package pgfkeys Error: I do not know the key '/wickerson/left=25,right=29,label=sheep' and I am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
For some reason, it's treating left=2,right=23,label=horse as a single key, when I mean it to be treated as three keys. Could somebody kindly explain what's going on?
\documentclass{article}
\usepackage{tikz}
\pgfkeys{/wickerson/.cd,
left/.code={\gdef\wickerson@left{#1}},
right/.code={\gdef\wickerson@right{#1}},
label/.code={\gdef\wickerson@label{#1}}
}
\begin{document}
\newcommand*\blob{%
foo/{left=2,right=23,label=horse},%
bar/{left=25,right=29,label=sheep},%
baz/{left=31,label=zebra}%
}
\foreach \x/\xvalue in \blob {
\typeout{x = \x, xvalue = \xvalue};
\pgfkeys{/wickerson/.cd,left=0,right=0,label={},\xvalue}
}
\end{document}
\xvalueisn't being expanded early enough. – Andrew Stacey May 14 '13 at 15:08