Настройка переопределения параметров pgfkeys

Настройка переопределения параметров pgfkeys

У меня есть собственный макрос \MyMacro, который pgfkeysопределяет три вещи:

  1. text=Вывод должен быть
  2. Текстcolor=
  3. Разместить 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}

введите описание изображения здесь

Связанный контент