¿Existe una forma general de pasar un <key list>
contenido dentro de una macro al \pgfkeys
comando para procesarlo de la forma habitual? En ejemplos sencillos, \expandafter
ayuda pero no sé muy bien cómo ir en situaciones más complicadas. En particular, ¿qué debo hacer si quiero pasar \pgfkeys
algunas claves explícitamente y otras a través de una macro?
\documentclass[varwidth,border=1mm]{standalone}
\usepackage{pgf}
\def\x{g/a=1,g/b=2}
\def\y{a=3,b=4}
\pgfkeys{%
/g/.is family, /g,
a/.code={(a is #1)},
b/.code={(b is #1)},
c/.code={(c is #1)}
}
\begin{document}
%\pgfkeys{\x} % CLEARLY FAILING
\expandafter\pgfkeys\expandafter{\x} \\
%\pgfkeys{\x,g/c=7} % CLEARLY FAILING
\expandafter\pgfkeys\expandafter{\x,g/c=7} \\
%\pgfkeys{g,c=5,\y} % CLEARLY FAILING
%\pgfqkeys{/g}{c=5,\y} % CLEARLY FAILING
\pgfkeys{g,c=5,a=3,b=4} \\ % <-- What I'd like to get from
\pgfqkeys{/g}{c=5,a=3,b=4} % <-- the previous two lines
\end{document}
Me topé con este aspecto aplicando lo descrito en el86.6.3 Controladores de claves no procesadassección del pgf
manual, intentando procesar nuevamente con \pgfkeys
las claves filtradas guardadas en la \remainingoptions
macro.
Respuesta1
Puedes procesar las claves desde una macro con \pgfkeysalsofrom
:
\documentclass[varwidth,border=1mm]{standalone}
\usepackage{pgf}
\def\x{g/a=1,g/b=2}
\def\y{a=3,b=4}
\pgfkeys{%
/g/.is family, /g,
a/.code={(a is #1)},
b/.code={(b is #1)},
c/.code={(c is #1)}
}
\begin{document}
\pgfkeysalsofrom{\x}
\end{document}
Pero no deberías intentar mezclar macros y claves normales en un argumento \pgfkeys. Ese no es un buen estilo de programación si lo necesitas. Normalmente obtienes macros con una lista de claves de algún filtrado y el código debe tener suficiente control sobre el procesamiento para evitar tal combinación.
Respuesta2
¿Algo como esto?
\documentclass[varwidth,border=1mm]{standalone}
\usepackage{pgf}
\def\x{g/a=1,g/b=2}
\def\y{a=3,b=4}
\pgfkeys{%
/g/.is family, /g,
a/.code={(a is #1)},
b/.code={(b is #1)},
c/.code={(c is #1)}
}
\begin{document}
%\pgfkeys{\x} % CLEARLY FAILING
%\expandafter\pgfkeys\expandafter{\x} \\
%\pgfkeys{\x,g/c=7} % CLEARLY FAILING
\edef\temp{\noexpand\pgfkeys\expandafter{\x,g/c=7}}\temp \\
%\pgfkeys{g,c=5,\y} % CLEARLY FAILING
%\pgfqkeys{/g}{c=5,\y} % CLEARLY FAILING
\pgfkeys{g,c=5,a=3,b=4} \\ % <-- What I'd like to get from
\pgfqkeys{/g}{c=5,a=3,b=4} % <-- the previous two lines
\end{document}
O
\documentclass[varwidth,border=1mm]{standalone}
\usepackage{pgf}
\def\x{g/a=1,g/b=2}
\def\y{a=3,b=4}
\pgfkeys{%
/g/.is family, /g,
a/.code={(a is #1)},
b/.code={(b is #1)},
c/.code={(c is #1)}
}
\begin{document}
%\pgfkeys{\x} % CLEARLY FAILING
%\expandafter\pgfkeys\expandafter{\x} \\
%\pgfkeys{\x,g/c=7} % CLEARLY FAILING
\edef\temp{\noexpand\pgfkeys\expandafter{\x,g/c=7}}\temp \\
\edef\temp{\noexpand\pgfkeys{g,c=5,\y} }\temp
%\pgfqkeys{/g}{c=5,\y} % CLEARLY FAILING
%\pgfkeys{g,c=5,a=3,b=4} \\ % <-- What I'd like to get from
%\pgfqkeys{/g}{c=5,a=3,b=4} % <-- the previous two lines
\end{document}