La configuración anula las opciones de pgfkeys

La configuración anula las opciones de pgfkeys

Tengo una macro personalizada \MyMacroque utiliza pgfkeyspara especificar tres cosas:

  1. El text=que va a salir
  2. el color=del texto
  3. El punctuation=para colocar al final.

Me gustaría definir la macro.\SetUpMyMacroAdjustedOptions para poder especificaranularopciones para elpróximoinvocación de \MyMacro.

Así, por ejemplo con

\SetUpMyMacroAdjustedOptions{color=magenta, punctuation={.}}

Me gustaría

\MyText{text={xxx}, color=brown, puncutation={:}}

ser tratado como si esto fuera invocado como

\MyText{text={xxx}, color=magenta, punctuation={.}}}

Es decir, las opciones color=magentay punctuation={!}de \SetUpMyMacroAdjustedOptionsanulan cualquier opción especificada y anulan cualquier configuración predeterminada de esas opciones.

Mi intento a continuacióncasifunciona porque la anulación puncutaion=se aplica, pero color=no lo hace. Además, las opciones no parecen restablecerse entre invocaciones posteriores de \MyMacro.

\MyMacroinvoca

\pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%

¿Dónde #1están las opciones especificadas por el usuario y adjust MyMacro optionsse configuran mediante una llamada a \SetUpMyMacroAdjustedOptions? Mi suposición aquí es que la última configuración de la clave anula cualquier configuración anterior, por lo que cualquier cosa adjust MyMacro optionsanulará cualquier configuración predeterminada y cualquier configuración especificada por el usuario.

El MWE a continuación produce:

ingrese la descripción de la imagen aquí

mientras que deseo que el código produzca:

ingrese la descripción de la imagen aquí

Nota:

  • Esta macro en particular tiene una gran cantidad de opciones que quizás desee anular, por lo que espero no tener que hacer algo específico paracadaopción concreta.

Código:

\documentclass{article}
\usepackage{tikz}

\pgfkeys{ 
    %% https://tex.stackexchange.com/a/34318/4301
    /MyMacro/.is family,
    /MyMacro,
    %% Numerous other keys can be set here.
    default MyMacro options/.style={ 
        text={},
        color=blue,
        punctuation={.},
    },
    adjust MyMacro options/.style={},
    text/.store in = \Text,
    color/.store in = \Color,
    punctuation/.store in = \Punctuation,
}
\newcommand{\SetUpMyMacroAdjustedOptions}[1]{%
    \pgfkeys{ 
        /MyMacro,
        default MyMacro options/.style/.expand once={ 
            #1,%
        }
    }
}%


\newcommand{\MyMacro}[1]{%
    \pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
    \textcolor{\Color}{\Text}\Punctuation%
    \SetUpMyMacroAdjustedOptions{}% Reset for next use
}%

\begin{document}
    \MyMacro{%
        text={This should be in red and end with a period},
        color=red,
    }%
    
    %% ----------------------------------------------------------------
    %% For the next use of this, I want to fix SOME options independent
    %% of how the next invocation of \MyMacro sets them.
    \SetUpMyMacroAdjustedOptions{%
        color=magenta,
        punctuation={!},
    }%
    %% ----------------------------------------------------------------
    
    \MyMacro{%
        text={This should be magenta and end with an exclamation},
        color=brown,
    }%
    
    \MyMacro{%  Back to default case
        text={This should be in blue and end with a period},
    }%
\end{document}

Respuesta1

Quieres cambiar adjust MyMacro options, creo.

\documentclass{article}
\usepackage{tikz}

\pgfkeys{ 
    %% https://tex.stackexchange.com/a/34318/4301
    /MyMacro/.is family,
    /MyMacro,
    %% Numerous other keys can be set here.
    default MyMacro options/.style={/MyMacro/.cd,
        text={},
        color=blue,
        punctuation={.},
    },
    adjust MyMacro options/.style={},
    text/.store in = \Text,
    color/.store in = \Color,
    punctuation/.store in = \Punctuation,
}
\newcommand{\SetUpMyMacroAdjustedOptions}[1]{%
    \pgfkeys{ 
        /MyMacro/adjust MyMacro options/.style={
        /MyMacro/.cd,#1,%
        }
    }
}%


\newcommand{\MyMacro}[1]{%
    \pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
    \textcolor{\Color}{\Text}\Punctuation%
    \SetUpMyMacroAdjustedOptions{}% Reset for next use
}%

\begin{document}
    \MyMacro{%
        text={This should be in red and end with a period},
        color=red,
    }%

    %% ----------------------------------------------------------------
    %% For the next use of this, I want to fix SOME options independent
    %% of how the next invocation of \MyMacro sets them.
    \SetUpMyMacroAdjustedOptions{%
        color=magenta,
        punctuation={!},
    }%
    %% ----------------------------------------------------------------

    \MyMacro{%
        text={This should be magenta and end with an exclamation},
        color=brown,
    }%

    \MyMacro{%  Back to default case
        text={This should be in blue and end with a period},
    }%
\end{document}

ingrese la descripción de la imagen aquí

información relacionada