\pgfkeys 명령에서 매크로 사용하기

\pgfkeys 명령에서 매크로 사용하기

일반적인 방법으로 처리하기 위해 <key list>매크로 내부에 포함된 내용을 명령에 전달하는 일반적인 방법이 있습니까 ? \pgfkeys간단한 예에서는 \expandafter도움이 되지만 더 복잡한 상황에서는 어떻게 해야 할지 모르겠습니다. 특히 \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}

나는에 설명 된 내용을 적용하여이 측면을 우연히 발견했습니다.86.6.3 처리되지 않은 키에 대한 처리기매크로 에 저장된 필터링된 키를 pgf사용하여 다시 처리하려고 합니다 .\pgfkeys\remainingoptions

답변1

다음을 사용하여 매크로의 키를 처리할 수 있습니다 \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}

하지만 하나의 \pgfkeys-argument에 매크로와 일반 키를 혼합하려고 해서는 안 됩니다. 이것이 필요한 경우에는 좋은 프로그래밍 스타일이 아닙니다. 일반적으로 일부 필터링을 통해 키 목록이 포함된 매크로를 얻을 수 있으며 코드는 이러한 혼합을 피하기 위해 처리를 충분히 제어할 수 있어야 합니다.

답변2

이 같은?

\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}

여기에 이미지 설명을 입력하세요

또는

\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}

여기에 이미지 설명을 입력하세요

관련 정보