У меня есть собственный макрос \MyMacro
, который pgfkeys
определяет три вещи:
text=
Вывод должен быть- Текст
color=
- Разместить
punctuation=
в конце.
Я хотел бы определить макрос\SetUpMyMacroAdjustedOptions
чтобы иметь возможность указатьпереопределитьварианты дляследующийвызов \MyMacro
.
Так, например, с
\SetUpMyMacroAdjustedOptions{color=magenta, punctuation={.}}
Я хотел бы
\MyText{text={xxx}, color=brown, puncutation={:}}
рассматриваться так, как если бы это было вызвано как
\MyText{text={xxx}, color=magenta, punctuation={.}}}
То есть параметры color=magenta
и punctuation={!}
переопределяют \SetUpMyMacroAdjustedOptions
любые указанные параметры, а также любые настройки этих параметров по умолчанию.
Моя попытка нижепочтиработает в том, что переопределение puncutaion=
применяется, но color=
не применяется. Более того, параметры, похоже, не сбрасываются между последующими вызовами \MyMacro
.
\MyMacro
вызывает
\pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
где #1
— заданные пользователем параметры, которые adjust MyMacro options
устанавливаются посредством вызова \SetUpMyMacroAdjustedOptions
. Я предполагаю, что последняя настройка ключа переопределяет любую предыдущую настройку, так что все, что находится внутри, adjust MyMacro options
переопределит любую настройку по умолчанию и любую заданную пользователем настройку.
Нижеприведенный MWE дает:
в то время как я хочу, чтобы код выдал:
Примечание:
- У этого конкретного макроса очень большое количество опций, которые я, возможно, захочу переопределить, поэтому я надеюсь, что мне не придется делать что-то конкретное длякаждыйконкретный вариант.
Код:
\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}
решение1
adjust MyMacro options
Я думаю, ты хочешь измениться .
\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}