\MyMacro
次の 3 つのことを指定するカスタム マクロがあります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={!}
from は\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}