在具有 n 个参数的图片中,是否可以仅对一个参数使用默认值?

在具有 n 个参数的图片中,是否可以仅对一个参数使用默认值?

假设我有一个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}

在此处输入图片描述

相关内容