Gibt es eine allgemeine Möglichkeit, ein <key list>
in einem Makro enthaltenes Objekt an den \pgfkeys
Befehl zu übergeben, um es auf die übliche Weise zu verarbeiten? In einfachen Beispielen hilft das, aber ich weiß nicht wirklich, wie ich in komplizierteren Situationen vorgehen soll. Insbesondere, wie soll ich vorgehen, wenn ich einige Tasten explizit und andere über ein Makro \expandafter
übergeben möchte ?\pgfkeys
\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}
Ich bin auf diesen Aspekt gestoßen, als ich das anwandte, was in der86.6.3 Handler für unverarbeitete Schlüsseldes Handbuchs und versuchen Sie, den Vorgang mit den herausgefilterten und im Makro gespeicherten Schlüsseln pgf
erneut durchzuführen .\pgfkeys
\remainingoptions
Antwort1
Sie können die Tastenkombinationen eines Makros wie folgt verarbeiten \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}
Sie sollten jedoch nicht versuchen, Makros und normale Tasten in einem \pgfkeys-Argument zu mischen. Das ist kein guter Programmierstil, wenn Sie dies benötigen. Normalerweise erhalten Sie Makros mit einer Liste von Tasten durch Filterung und der Code sollte dann genügend Kontrolle über die Verarbeitung haben, um eine solche Mischung zu vermeiden.
Antwort2
Etwas wie das?
\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}
Oder
\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}