Einrichten der Überschreibung von pgfkeys-Optionen

Einrichten der Überschreibung von pgfkeys-Optionen

Ich habe ein benutzerdefiniertes Makro \MyMacro, pgfkeysmit dem drei Dinge angegeben werden:

  1. Die text=auszugebende
  2. Die color=des Textes
  3. 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=magentaund 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.

\MyMacroruft auf

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

wobei #1die 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 optionsalle Standardeinstellungen und alle benutzerdefinierten Einstellungen überschreibt.

Der folgende MWE ergibt:

Bildbeschreibung hier eingeben

wobei ich möchte, dass der Code Folgendes erzeugt:

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen