나는 가설에 대한 보기 좋은 그래픽 표현을 생성하려고 많은 시간을 보냈지만 올바르게 이해할 수 없는 것 같습니다. 가장 큰 문제는 화살표를 표시하는 방법을 알 수 없다는 것입니다(캡션 H8). 노드 H에서 F와 G 사이의 화살표 중간을 가리킵니다. 또 다른 화살표(캡션 H9)가 노드 I에서 방금 생성된 화살표를 가리키고 H에서 F와 G 사이의 화살표를 가리킵니다. 또 다른 문제는 다음과 같습니다. 내 생각엔 화살표가 좀 이상해 보이는 것 같아요. (그들이 더 짧아야 하고 노드에 '접촉'하지 않아야 할까요?) 현재 모습은 다음과 같습니다.
그리고 이것은 두 개의 화살표가 없는 현재 코드입니다.
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{main node/.style={rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt},
}
\begin{document} \centering \begin{tikzpicture}
\node[main node] (A) at (0,3) {Situation};
\node[main node] (B) at (3,1) {Gratitude};
\node[main node] (C) at (3,3) {Guilt};
\node[main node] (D) at (3,5) {Anger};
\node[main node] (F) at (6,3) {State};
\node[main node] (G) at (9,3) {Actions};
\node[main node] (H) at (7.5,0) {Higher order beliefs};
\node[main node] (I) at (9,1.5) {Time pressure};
\draw [->] (A) -- node[below] {H3} (B);
\draw [->] (A) -- node[below] {H2} (C);
\draw [->] (A) -- node[above] {H1} (D);
\draw [->] (B) -- node[below] {H6} (F);
\draw [->] (C) -- node[below] {H5} (F);
\draw [->] (D) -- node[above] {H4} (F);
\draw [->] (F) -- node[above] {H7} (G);
\end{tikzpicture}
\end{document}
당신의 도움에 미리 감사드립니다!
답변1
다음과 같이 노드 사이의 점을 정의할 수 있습니다.
\draw [->] (F) -- coordinate[pos=0.2] (fg) (G);
이는 와 fg
사이에 명명된 좌표를 정의합니다 . 을 의미하고 , 을 의미하며 은 에 매우 가까운 위치에 있습니다 . 옵션을 생략하면 과 동일합니다 . 즉, 좌표가 두 노드 사이의 중간에 배치됩니다.F
G
pos=0
F
pos=1
G
pos=0.2
F
pos=0.5
-|
및 를 사용하여 다른 노드의 위/아래/왼쪽/오른쪽 위치를 지정할 수 있습니다 |-
. 위치는 (A-|B)
가로로 왼쪽/오른쪽 A
, 세로로 위/아래입니다 B
.
shorten <=2pt
화살표 길이를 줄이는 옵션은 (화살표 시작 부분 2pt 단축)과 shorten >=2pt
(화살표 끝 부분 2pt 단축) 옵션을 사용하면 됩니다 . 이를 추가하면 tikzpicture
모든 줄에 영향을 미치고, 명령 옵션에 추가하면 \draw
특정 줄에만 영향을 줍니다.
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset
{main node/.style=
{rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt}
}
\begin{document}
\begin{tikzpicture}%
[shorten <=2pt,shorten >=2pt,>=stealth]
\node[main node] (A) at (0,3) {Situation};
\node[main node] (B) at (3,1) {Gratitude};
\node[main node] (C) at (3,3) {Guilt};
\node[main node] (D) at (3,5) {Anger};
\node[main node] (F) at (6,3) {State};
\node[main node] (G) at (9,3) {Actions};
\node[main node] (H) at (7.5,0) {Higher order beliefs};
\node[main node] (I) at (9,1.5) {Time pressure};
\draw [->] (A) -- node[below] {H3} (B);
\draw [->] (A) -- node[below] {H2} (C);
\draw [->] (A) -- node[above] {H1} (D);
\draw [->] (B) -- node[below] {H6} (F);
\draw [->] (C) -- node[below] {H5} (F);
\draw [->] (D) -- node[above] {H4} (F);
\draw [->] (F) -- node[above] {H7} coordinate[pos=0.2] (fg) (G);
\draw [<-] (fg) --node[left] {H8} coordinate (fgH) (fg|-H.north);
\draw [->] (I.west) -- node[above] {H9} (I.west-|fgH);
\end{tikzpicture}
\end{document}
편집하다의견의 질문과 관련하여 가장자리 레이블을 배치하는 방법에는 여러 가지가 있습니다.
등에 거리를 추가할 수 있습니다 above
.below
\draw [->] (A) -- node[below=3mm] {H2} (C);
xshift
및/또는 yshift
노드를 이동하는 데 사용할 수 있습니다 .
\draw [->] (C) -- node[below,xshift=-5mm] {H5} (F);
내부 또는 외부 분리를 변경할 수 있습니다. 이는 노드 테두리를 둘러싸는 추가 공간입니다.
\draw [->] (A) -- node[below,outer sep=2pt] {H3} (B);
\draw [->] (A) -- node[above,inner sep=7pt] {H1} (D);
내용이 없는 노드를 행에 직접 배치하고 내용을 레이블로 추가할 수 있습니다.노드로.
\draw [->] (D) -- node[label=H4] {} (F);
\draw [->] (D) -- node[label=90:H4] {} (F);
\draw [->] (B) -- node[label={[label distance=1cm]-90:H6}] {} (F);
처음 두 줄은 동일합니다. 방향이 지정되지 않은 경우 기본값은 90도 이상입니다. 추가적으로 라벨 거리도 옵션으로 지정할 수 있습니다. 옵션 값에 label
대괄호, 쉼표 또는 등호가 포함된 경우 추가 중괄호가 필요합니다.
draw
아래 예에서는 노드의 테두리와 위치를 표시하는 옵션을 추가했습니다 .
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset
{main node/.style=
{rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt}
}
\begin{document}
\begin{tikzpicture}%
[shorten <=2pt,shorten >=2pt,>=stealth]
\node[main node] (A) at (0,3) {Situation};
\node[main node] (B) at (3,1) {Gratitude};
\node[main node] (C) at (3,3) {Guilt};
\node[main node] (D) at (3,5) {Anger};
\node[main node] (F) at (6,3) {State};
\draw [->] (A) -- node[below,outer sep=2pt,draw] {H3} (B);
\draw [->] (A) -- node[below=3mm,draw] {H2} (C);
\draw [->] (A) -- node[above,inner sep=7pt,draw] {H1} (D);
\draw [->] (B) -- node[label={[label distance=1cm]-90:H6},draw] {} (F);
\draw [->] (C) -- node[below,xshift=-5mm,draw] {H5} (F);
\draw [->] (D) -- node[label=H4,draw] {} (F);
\end{tikzpicture}
\end{document}
답변2
기존 화살표를 더 짧게 만드는 빠른 방법은 s outer sep
에 일부를 추가하는 것입니다 main node
.
누락된 화살표의 경우 화살표 중간에 있는 노드에 이름을 지정하고 이를 시작점으로 사용할 수 있습니다.
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
main node/.style={rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt,outer sep=2pt}
}
\begin{document}
\centering
\begin{tikzpicture}
\node[main node] (A) at (0,3) {Situation};
\node[main node] (B) at (3,1) {Gratitude};
\node[main node] (C) at (3,3) {Guilt};
\node[main node] (D) at (3,5) {Anger};
\node[main node] (F) at (6,3) {State};
\node[main node] (G) at (9,3) {Actions};
\node[main node] (H) at (7.5,0) {Higher order beliefs};
\node[main node] (I) at (9,1.5) {Time pressure};
\draw [->] (A) -- node[below] {H3} (B);
\draw [->] (A) -- node[below] {H2} (C);
\draw [->] (A) -- node[above] {H1} (D);
\draw [->] (B) -- node[below] {H6} (F);
\draw [->] (C) -- node[below] {H5} (F);
\draw [->] (D) -- node[above] {H4} (F);
\draw [->] (F) -- node[above] (FG) {H7} (G);
\draw [->,shorten >=2pt] (H) to[bend left] node[left] (FGH) {H8} (FG);
\draw [->] (I) -- node[above] {H9} (FGH);
\end{tikzpicture}
\end{document}
답변3
*Torbjørn T.$ 답변을 기반으로 하지만 quotes
가장자리 라벨링에는 패키지를 사용하고 positioning
노드 위치 지정에는 패키지를 사용하며 코드를 더 짧게 만들기 위한 노력이 필요합니다.
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{positioning, quotes}
\begin{document}
\centering
\begin{tikzpicture}[auto,
node distance = 6mm and 15 mm,
main node/.style = {rectangle, draw, minimum size=1cm,
inner sep=4pt, outer sep=2pt}
]
\begin{scope}[every node/.style={main node}]
\node (A) {Situation};
\node[right=of A] (C) {Guilt};
\node[below=of C] (B) {Gratitude};
\node[above=of C] (D) {Anger};
\node[right=of C] (F) {State};
\node[right=of F] (G) {Actions};
\node[below=of G] (I) {Time pressure};
\node[below=of I.south west] (H) {Higher order beliefs};
\end{scope}
\draw[->] (A) edge ["H3" '] (B)
(A) edge ["H2"] (C)
(A) edge ["H1"] (D)
(B) edge ["H6"'] (F)
(C) edge ["H5"] (F)
(D) edge ["H4"] (F)
(F) edge node[above] (FG) {H7} (G);
\draw [->,shorten >=2pt]
(H) edge [bend left] node[left] (FGH) {H8} (FG)
(I) to ["H9" '] (FGH.east |- I);
\end{tikzpicture}
\end{document}