Ich habe ein benutzerdefiniertes Makro \MyMacro
, pgfkeys
mit dem drei Dinge angegeben werden:
- Die
text=
auszugebende - Die
color=
des Textes - Die
punctuation=
Platzierung erfolgt am Ende.
Ich möchte das Makro definieren \SetUpMyMacroAdjustedOptions
, um angeben zu könnenaußer Kraft setzenOptionen für dienächsteAufruf von \MyMacro
.
So zum Beispiel mit
\SetUpMyMacroAdjustedOptions{color=magenta, punctuation={.}}
Ich möchte
\MyText{text={xxx}, color=brown, puncutation={:}}
so zu behandeln, als ob dies geltend gemacht würde als
\MyText{text={xxx}, color=magenta, punctuation={.}}}
Das heißt, die Optionen color=magenta
und punctuation={!}
„Von“ \SetUpMyMacroAdjustedOptions
überschreiben alle angegebenen Optionen und alle Standardeinstellungen dieser Optionen.
Mein Versuch untenfastfunktioniert, indem die Überschreibung puncutaion=
angewendet wird, aber color=
das tut es nicht. Darüber hinaus scheinen die Optionen zwischen nachfolgenden Aufrufen von nicht zurückgesetzt zu werden \MyMacro
.
\MyMacro
ruft auf
\pgfkeys{/MyMacro/.cd, default MyMacro options,#1,adjust MyMacro options}%
wobei #1
die benutzerdefinierten Optionen sind und adjust MyMacro options
über einen Aufruf von festgelegt werden \SetUpMyMacroAdjustedOptions
. Ich gehe hier davon aus, dass die letzte Einstellung des Schlüssels alle vorherigen Einstellungen überschreibt, sodass alles in adjust MyMacro options
alle Standardeinstellungen und alle benutzerdefinierten Einstellungen überschreibt.
Der folgende MWE ergibt:
wobei ich möchte, dass der Code Folgendes erzeugt:
Notiz:
- Dieses spezielle Makro hat eine sehr große Anzahl von Optionen, die ich möglicherweise überschreiben möchte, also hoffe ich, dass ich nichts Spezielles tun muss fürjedebesondere Option.
Code:
\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}
Antwort1
Sie möchten sich ändern adjust MyMacro options
, glaube ich.
\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}