Using pgfkeys
, I'd like to initialize keys as in setting attributes with an object constructor.
Such that I can create keys /Photo/May
, /Photo/June
etc. based on some initial properties of /Photo
, and set some default values.
Apparently this should be easy, but I don't seem to interpret the manual correctly:
! Package pgfkeys Error: I do not know the key '/Photo/May/defaults' and I am going to ignore it. Perhaps you misspelled it.
MWE:
\documentclass{article}
\makeatletter
\usepackage{pgfkeys}
\pgfkeys{
/Photo/.is family, /Photo,
init/.style = {
defaults/.style = {file = {}, bleed = 0pt},
file/.initial = {},
bleed/.initial = {},
}
}
% #1 = options, #2 = photo name
\newcommand\SetPhoto[2][]{%
\pgfkeys{%
/Photo/#2/.is family, /Photo/#2,
/Photo/#2/.append style=/Photo/init,
defaults, file={#2},
#1%
}%
}
\newcommand\DoPhoto[1]{%
% suppose it was an image...
\hskip -\pgfkeysvalueof{/Photo/#1/bleed}%
\frame{\pgfkeysvalueof{/Photo/#1/file}}%
}
\setlength{\parskip}{0pt}%
\setlength{\parindent}{0pt}%
\makeatother
\begin{document}
% somewhere early in the document
\SetPhoto{May}%
\SetPhoto[bleed=3mm]{June}%
\SetPhoto[bleed=5mm]{July}%
% typeset the photos with the given options
\DoPhoto{May}
\DoPhoto{June}
\DoPhoto{July}
\end{document}