假设我有一个pic
包含 3 个内容args
的节点:绘制颜色、填充颜色和文本。
我将默认值设置为:
pics/mynode/.default={red}{olive}{My node}
因此,如果我写:
\pic {mynode};
TikZ 使用所有默认值,如果我写:
\pic {mynode={green}{yellow}{Another node}};
它使用了我的价值观。
有可能写这样的内容吗:
\pic {mynode={pink}{cyan}{...?...}};
为了让 TikZ 对第三个使用默认值arg
,并对其他值使用我的值?
\documentclass{article}
\usepackage{tikz}
\tikzset{%
pics/mynode/.style n args={3}{code={%
\node[draw=#1,fill=#2] {#3};
}},
pics/mynode/.default={red}{olive}{My node}
}
\begin{document}
\begin{tikzpicture}
\pic {mynode}; % This uses all the default values
\pic at (0,-1) {mynode={green}{yellow}{Another node}};% This uses my values
\pic at (0,-2) {mynode={pink}{cyan}{}}; % I'd like this uses only one default values
\end{tikzpicture}
\end{document}
答案1
检查是否#3
为空:
\documentclass{article}
\usepackage{tikz}
\newcommand{\ifemptyTF}[3]{%
\if\relax\detokenize{#1}\relax #2\else #3\fi
}
\tikzset{%
pics/mynode/.style n args={3}{code={%
\node[draw=#1,fill=#2] {\ifemptyTF{#3}{Default}{#3}};
}},
pics/mynode/.default={red}{olive}{My node}
}
\begin{document}
\begin{tikzpicture}
\pic {mynode}; % This uses all the default values
\pic at (0,-1) {mynode={green}{yellow}{Another node}};% This uses my values
\pic at (0,-2) {mynode={pink}{cyan}{}}; % I'd like this uses only one default values
\end{tikzpicture}
\end{document}