답변1
pics
다음 18장을 정의합니다 .틱즈매뉴얼은 확실히 갈 길입니다. 아래 코드는 두 개의 사진을 정의 2box
하고 3box
각각 두 개 또는 세 개의 원이나 사각형을 포함하는 상자를 정의합니다. 2box
두 개의 원 안의 레이블과 화살표 위와 아래의 레이블 등 4개의 인수만 사용하므로 약간 더 쉽습니다 . 이것을 사용하면 다음을 사용하여 상단 상자를 그릴 수 있습니다.
\pic at (0,0) {2box={r,a,1{\mid}0,01}};
다음 과 pic
같은 유용한 노드를 정의합니다.
ra
상자 전체에 대해ra-r
첫 번째 서클의 경우ra-a
두 번째 원의 경우
이것은 부분적으로는 그림을 그리기 위한 것이고 부분적으로는 나중에 화살표를 그리기 위한 것입니다. 그림 3box
은 비슷하지만 7개의 인수가 필요합니다. 즉, 3개의 노드 레이블과 2개의 화살표 위와 아래에 있는 4개의 레이블입니다.
2box
이를 제자리에 두고 및 를 사용하여 상자를 그린 3box
다음 가장자리를 그리기 만 하면 됩니다 . 처음에는 positioning
라이브러리를 사용하여 노드를 배치하려고 생각했지만 안타깝게도 잘 작동하지 pics
않아서 positioning
모든 것을 손으로 배치하여 제작했습니다.
변화를 쉽게 주기 위해 스타일링을 넉넉하게 적용했습니다. 전체 코드는 다음과 같습니다.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{
arrow/.style = {-{LaTeX}, thick},
label/.style = {pos=0.4, font=\scriptsize},
mynode/.style = {fill=white, inner sep=3pt, thick, draw=black},
onode/.style = {circle, mynode},
snode/.style = {rectangle, mynode},
box/.style = {thick, fill=gray!50, draw=black, anchor=south west},
pics/2box/.style args = {#1,#2,#3,#4}{% a,b,top,bot
code = {
\node[box, minimum width=2cm, minimum height=1cm](#1#2) at (0,0){};
\node[onode] (#1#2-#1) at (0.4,0.5){#1};
\node[onode] (#1#2-#2) at (1.6,0.5){#2};
\draw[arrow](#1#2-#1) -- node[label,above]{$#3$}
node[label,below]{$#4$} (#1#2-#2);
}
},
pics/3box/.style args = {#1,#2,#3,#4,#5,#6,#7}{% a,b,c,top,bot,top,bot}
code = {
\node[box, minimum width=2cm, minimum height=2cm](#1#2#3) at (0,0){};
\node[snode] (#1#2#2-#1) at (0.4,1.5){#1};
\node[snode] (#1#2#2-#2) at (0.4,0.5){#2};
\node[onode] (#1#2#2-#3) at (1.6,1){#3};
\draw[arrow](#1#2#2-#1.east) to[out=20, in=135]
node[label,above]{$#4$} node[label,below]{$#5$} (#1#2#2-#3);
\draw[arrow](#1#2#2-#2.east) to[out=-20, in=225]
node[label,above]{$#6$} node[label,below]{$#7$} (#1#2#2-#3);
}
},
}
\begin{document}
\begin{tikzpicture}
\pic at (0,9) {2box={r,a,1{\mid}0,01}};
\pic at (0,6) {3box={b,q,m,1{\mid}0,02,2{\mid}0,02}};
\pic at (1,4) {2box={q,b,1{\mid}0,03}};
\pic at (0,2) {2box={e,p,1{\mid}2,04}};
\pic at (0,0) {2box={q,e,1{\mid}0,05}};
\draw[arrow] (ra.south)--(bqm.north);
\draw[arrow] (bqm.south)--(qb.north);
\draw[arrow] (bqm) to[out=250, in=120](ep);
\draw[arrow] (ep.south)--(qe.north);
\draw[arrow] (qe.south)--++(0,-0.5);
\draw[thick](0.5,10.6) -- ++(0,-0.1)--++(1,0)--++(0,0.1);
\draw[{LaTeX}-,thick](ra.north)--++(0,0.5);
\draw[arrow,rounded corners]
(2.5,4)--++(0,-0.3)--++(1,0)--++(0,6.65)--++(-2,0)--++(0,-0.35);
\end{tikzpicture}
\end{document}
보시다시피, 2box
및 의 정의 3box
는 상당히 유사한 작은 조각일 뿐입니다.틱즈암호. 상대 좌표 의 정의 내부가 pics
사용됩니다. 나는 \delta
연습으로 레이블을 남겼습니다 .