Eu tenho uma macro personalizada \MyMacro
que pgfkeys
especifica três coisas:
- A
text=
saída - O
color=
do texto - O
punctuation=
para colocar no final.
Eu gostaria de definir a macro \SetUpMyMacroAdjustedOptions
para poder especificarsobreporopções para opróximoinvocação de \MyMacro
.
Então, por exemplo com
\SetUpMyMacroAdjustedOptions{color=magenta, punctuation={.}}
Gostaria
\MyText{text={xxx}, color=brown, puncutation={:}}
ser tratado como se isso fosse invocado como
\MyText{text={xxx}, color=magenta, punctuation={.}}}
Ou seja, as opções color=magenta
e punctuation={!}
from \SetUpMyMacroAdjustedOptions
substituem quaisquer opções especificadas e substituem qualquer configuração padrão dessas opções.
Minha tentativa abaixoquasefunciona porque a substituição puncutaion=
é aplicada, mas color=
não. Além disso, as opções não parecem ser redefinidas entre invocações subsequentes de \MyMacro
.
\MyMacro
invoca
\pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
onde #1
estão as opções especificadas pelo usuário e adjust MyMacro options
são definidas por meio de uma chamada para \SetUpMyMacroAdjustedOptions
. Minha suposição aqui é que a última configuração da chave substitui qualquer configuração anterior, de modo que qualquer coisa adjust MyMacro options
substituiria qualquer configuração padrão e qualquer configuração especificada pelo usuário.
O MWE abaixo produz:
enquanto desejo que o código produza:
Observação:
- Esta macro em particular tem um grande número de opções que posso querer substituir, então espero não precisar fazer algo específico paracadaopção específica.
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}
Responder1
Você quer mudar adjust MyMacro options
, eu acho.
\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}