
TikZ에서 다음 다이어그램을 그리려고 합니다.
내 시도는 다음과 같습니다(노드 레이블이 약간 다르지만 내 문제는 아닙니다!).
내 코드는 다음과 같습니다
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds,arrows,shapes,automata,petri}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\title{Test}
\author{Me}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[node distance=1cm and 2cm,>=stealth',bend angle=45,thick]
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {}
edge[pre,bend right,overlay] (q1)
edge[post,bend left,overlay] (q1);
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {}
edge[pre] (p41);
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {}
edge[pre] (q4);
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {}
edge[pre] (p24);
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {}
edge[pre,bend right,overlay] (q2)
edge[post,bend left,overlay] (q2);
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {}
edge[pre] (p31);
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {}
edge[pre] (q3)
edge[post] (q2);
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {}
edge[pre,bend left,out=45,in=45,looseness=1.2] (q2)
edge[post,bend left,out=315,in=315,looseness=1.2] (q1);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}
TikZ에 대한 지식이 고갈되었습니다. 위의 예와 같이 다이어그램을 멋지게 보이게 하는 방법을 알려주실 수 있는 분이 계십니까? 감사해요!
답변1
당신이 갖고 싶은 것이 무엇인지, 무엇을 시도했는지, 그리고 그것을 달성하지 못한 부분에 대해 구체적인 질문을 하십시오. 현재 상태로는 이 사이트에 대한 연구 가치가 없으며 단지 "나를 위해 하세요" 게시물일 뿐입니다.
제가 본 두 가지 주요 문제를 수정했습니다. 나머지는 이미 가지고 있는 코드를 통해 자명하게 설명할 수 있어야 합니다.
% arara: pdflatex
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows,petri}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[node distance=1cm and 2cm,>=stealth',bend angle=45,thick]
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {}
edge[pre,bend right=70] (q1)
edge[post,bend left=70] (q1);
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {}
edge[pre] (p41);
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {}
edge[pre] (q4);
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {}
edge[pre] (p24);
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {}
edge[pre,bend right=70] (q2)
edge[post,bend left=70] (q2);
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {}
edge[pre] (p31);
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {}
edge[pre] (q3)
edge[post] (q2);
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {}
edge[pre,out=0,in=20,,looseness=1.2] (q2)
edge[post,out=180,in=160,looseness=1.2] (q1);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}
답변2
저는 경로에서 노드를 분리하고 arc
측면에 작은 경로를 그리는 데 경로를 사용하여 코드를 수정했습니다. 이는 더 잘 구성된 코드가 이해하기 더 쉽다고 생각하고 일부 코드를 작성/마칠 때마다 구조를 수정하고 중복 옵션을 제거하는 데 몇 분 정도 시간이 걸리기 때문입니다.
선은 앵커를 사용하여 다른 경로에서 연결되며 이 경우 calc
이를 달성하기 위해 다른 위치를 계산하기 위해 추가해야 했습니다. 예를 들어 (q2.west)
및 가 있는 경우 (q2.south west)
중간점을 계산하려면 이라고 쓰면 ($(q2.west)!.5!(q2.south west)$)
화살표가 특정 노드의 서쪽과 남서쪽 사이의 중간점에 연결될 수 있습니다.
원하는 예에 따라 모든 경로도 단축되었습니다. bending
호 화살표의 끝 부분이 올바르게 정렬되도록 라이브러리도 추가되었습니다 .
산출
암호
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds,arrows,shapes,automata,petri,calc,bending}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\title{Test}
\author{Me}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[
node distance=1cm and 2cm,
>=stealth',
bend angle=#1,
thick,
shorten >=2pt,
shorten <=2pt
]
% Nodes
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {};
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {};
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {};
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {};
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {};
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {};
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {};
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {};
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {};
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {};
% Paths
% left
\draw ($(q1.north east)!.5!(q1.east)$) edge[bend left=15,->] (p31);
\draw (q1.east) edge[bend right=15,->] (p41);
% central
\draw (p31) edge[bend left=10,->] (q3);
\draw (q3) edge[bend left=10,->] (p23);
\draw (p41) edge[bend right=10,->] (q4);
\draw (q4) edge[bend right=10,->] (p24);
% right
\draw (p23) edge[bend left=15,->] ($(q2.north west)!.5!(q2.west)$);
\draw (p24) edge[bend right=15,->] (q2.west);
% round arrows on the...
% ...left
\draw[->] ($(p11.west)+(2pt,4pt)$) arc (240:105:1.8em);
\draw[<-] ($(p11.east)+(-2pt,4pt)$) arc (-60:75:1.8em);
% ...right
\draw[->] ($(p22.west)+(2pt,4pt)$) arc (240:105:1.8em);
\draw[<-] ($(p22.east)+(-2pt,4pt)$) arc (-60:75:1.8em);
% huge round arrows from the top node
\draw[->] (p12) edge[out=180,in=145] ($(q1.north west)!.5!(q1.west)$);
\draw[->] (p12) edge[out=0,in=35] ($(q2.north east)!.5!(q2.east)$);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}