に複数の引数を指定するにはどうすればよいですか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}