![TikZ 3.0---`pic`에 대한 여러 인수](https://rvso.com/image/286982/TikZ%203.0---%60pic%60%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%97%AC%EB%9F%AC%20%EC%9D%B8%EC%88%98.png)
에 대해 여러 인수를 제공하려면 어떻게 해야 합니까 pic
?
giraffe
색상에 대한 두 개의 인수가 포함되어 #1
있으며 #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
.
답변1
명령이 좀 더 복잡하면 일반 구문을 사용하는 것이 좋습니다.
\tikzset{pics/giraffe/.style={code={....with #1...}}}
는 핸들러 메커니즘 /.style
의 일부 pgfkeys
이며 두 개의 인수, 즉 /.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}}}}
로 불려집니다 \draw pic {giraffe={pink}{yellow}}
. 마찬가지로 /.style n args={5}{code={...}}
5개의 인수로 버전을 정의하는 것도 있습니다 .
그러나 사용 가능한 다른 구문도 있습니다. 그것이 당신이 설정하고 있는 색상일 뿐이라면 아마도 당신은 다음과 같이 쓰고 싶을 것입니다.
\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}