\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={!}
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}