TikZ 3.0---`pic` の複数の引数

TikZ 3.0---`pic` の複数の引数

に複数の引数を指定するにはどうすればよいですかpic?

giraffe#1には、色との 2 つの引数が含まれています。これらをまたは#2として提供できるようにしたいと思います。構文は特に重要ではありません。giraffe={pink, yellow}giraffe={colorA=pink, colorB=yellow}

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usepackage{tikz-uml}
\usetikzlibrary{arrows,positioning,shapes}
\begin{document}

\tikzset{
    giraffe/.pic={
        \umlbasicstate[x=-1.5, y=0, fill=#1, width=15ex]{test1}
        \umlbasicstate[x=1.5, y=0, fill=#2, width=15ex]{test2}
    }%
}


\begin{tikzpicture}[auto]
\umlstateinitial[x=0, y=11, name=initial]
\umlbasicstate[x=0, y=9, name=a, fill=white, width=15ex]{a}
\umlbasicstate[x=0, y=6, name=b, fill=white, width=15ex]{b}
\umlbasicstate[x=0, y=3, name=c, fill=white, width=15ex]{c}
\umlstatefinal[x=0, y=1, name=final]

\draw pic[below of = final] {giraffe={pink, yellow}};          % below final
\draw pic[above of =  initial] {giraffe={blue, green}};        % above initial

\umltrans{initial}{a}
\umltrans{a}{b}
\umltrans{b}{c}
\umltrans{c}{final}

\end{tikzpicture}

\end{document}

マニュアルにはpicセクション 18.3 新しい Pic タイプの定義これは別の質問に関連しています。提案された pic答えとして。

私も確認しましたこの質問ですが、 の問題にそれを適用するのは困難ですpic

答え1

コマンドがもう少し複雑な場合は、一般的な構文を使用します。

\tikzset{pics/giraffe/.style={code={....with #1...}}}

はハンドラ機構/.styleの一部でありpgfkeys、2つの引数を持つ直接的な類似物である があります/.style 2 args。したがって、次のように記述できます。

\tikzset{pics/giraffe/.style 2 args={code={
  \umlbasicstate[x=-1.5,y=0,fill=#1,width=15ex]{test1}
  \umlbasicstate[x=-1.5,y=0,fill=#2,width=15ex]{test2}}}}

として呼び出されます。同様に、5 つの引数を持つバージョンを定義する が\draw pic {giraffe={pink}{yellow}}あります。/.style n args={5}{code={...}}

ただし、他の構文も利用できます。色だけを設定する場合は、次のように記述するといいでしょう。

\draw pic {giraffe=pink/yellow};

これは次のように達成できる。

\tikzset{
    pics/giraffe/.style args={#1/#2}{
      code = {
        \umlbasicstate[x=-1.5, y=0, fill=#1, width=15ex]{test1}
        \umlbasicstate[x=1.5, y=0, fill=#2, width=15ex]{test2}
    }}}

最初の引数は、/.style argsコード内で使用される引数を抽出するために使用されるパターンを提供します。

あなたの例では、次のようになります:

サンプル出力

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usepackage{tikz-uml}
\usetikzlibrary{arrows,positioning,shapes}
\begin{document}

\tikzset{
    pics/giraffe/.style args={#1/#2}{
      code = {
        \umlbasicstate[x=-1.5, y=0, fill=#1, width=15ex]{test1}
        \umlbasicstate[x=1.5, y=0, fill=#2, width=15ex]{test2}
    }}}

\begin{tikzpicture}[auto]
\umlstateinitial[x=0, y=11, name=initial]
\umlbasicstate[x=0, y=9, name=a, fill=white, width=15ex]{a}
\umlbasicstate[x=0, y=6, name=b, fill=white, width=15ex]{b}
\umlbasicstate[x=0, y=3, name=c, fill=white, width=15ex]{c}
\umlstatefinal[x=0, y=1, name=final]

\draw pic[below of = final] {giraffe=pink/yellow};          % below final
\draw pic[above of =  initial] {giraffe=blue/green};        % above initial

\umltrans{initial}{a}
\umltrans{a}{b}
\umltrans{b}{c}
\umltrans{c}{final}

\end{tikzpicture}

\end{document}

関連情報