Tengo una macro personalizada \MyMacro
que utiliza pgfkeys
para especificar tres cosas:
- El
text=
que va a salir - el
color=
del texto - 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=magenta
y punctuation={!}
de \SetUpMyMacroAdjustedOptions
anulan 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
.
\MyMacro
invoca
\pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
¿Dónde #1
están las opciones especificadas por el usuario y adjust MyMacro options
se 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 options
anulará cualquier configuración predeterminada y cualquier configuración especificada por el usuario.
El MWE a continuación produce:
mientras que deseo que el código produzca:
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}