Hello all, I'd mentioned to Morten that I would look at how one might implement some kind of keyval system for package authors in LaTeX3 (at present my xnotes2bib implementation is simply using keyval). The limitations of packages such as xkeyval are well known, so I've been looking at the pgfkeys approach. I think that I can get something working, but wondered how others might see the syntax (or if I'm wasting my time!). Thus far, I'm following pgfkeys, with a UNIX-file-like "tree" for keys and "properties": /module/key name = value % Assigns to key name /module/key name/.code = some code % Defines key name /module/key name/.code args = {#1#2#3}{Code using #1, #2 and #3} The last item illustrates the issue best. I suspect a more expl3 approach would be: /module/key name/.code:Nn = 1 {some code} % Not sure about this /module/key name/.code:pn = #1#2#3 {Code using #1, #2 and #3} but then picking up the end of the parameter list is more difficult. Following pgfkeys, the parameter list needs to be stored, so this is important. For those of you not familiar, in the above the .code "property" has one argument (I think the ".code 2 args" variant from pgfkeys can happily be dropped in favour of simply using ".code args") I was wondering about /module/key name/.code:n = some code % Allows #1 only /module/key name/.code:x = some code % \edef version /module/key name/.code:nn = #1#2#3 {Code using #1, #2 and #3} /module/key name/.code:nx = #1#2#3 {Code using #1, #2 and #3} % \edef as a middle way that takes the best of expl3 and pgfkeys. The same approach could then be used for other properties. I'd be interest to see how others see this. -- Joseph Wright