
이 트리에 녹색 호, 라벨 및 상자를 추가하고 싶습니다. (레이블은 최소한의 MWE에서와 같이 검은색과 빨간색으로 표시됩니다.) 프로그래밍 방식의 솔루션이 필요하지 않습니다. 녹색 호 3종 각각 하나씩 어떻게 하는지 보면 작업을 끝낼 수 있어요.
MWE:
\documentclass{standalone}
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
\ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,rectangle,align=center},
level distance=1.5cm,sibling distance=0.5cm,
edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
\Tree [.0
\edge \ee{1};
[.1
\edge \ee{1};
[.2
\edge \ee{1};
[.3
\edge \ee{1}; 4
\edge \ee{\anti{2}}; \anti{5}
]
\edge \ee{\anti{2}};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
]
\edge \ee{\anti{2}};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
]
% second half
\edge \ee{\anti{2}};
[.\anti{2}
\edge \ee{1};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
\edge \ee{\anti{2}};
[.4
\edge \ee{1};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
\edge \ee{\anti{2}};
[.\anti{6}
\edge \ee{1}; \anti{7}
\edge \ee{\anti{2}}; 8
]
]
]
]
]
\end{tikzpicture}
\end{document}
답변1
로서후속 질문, 그리고 다른 주제이므로 초점이 다른 별도의 답변이 있습니다.
기본 아이디어:
named nodes
다음 과 같이 소개하다이전에 표시됨- 유용한 정의
styles
, 다음 항목과 함께 사용 \node
기억된 위치(이름이 지정됨)에 이러한 스타일을 사용하여 새 항목을 배치합니다.\draw
평행선을 위해 그들 사이에 몇 개의 선이 있습니다.
주의 깊게 살펴보면 tikz-qtree
적어도 가끔은 트리 노드가 중심에서 약간 벗어나 연결되어 있는 것처럼 보입니다. 따라서 스타일 sq
과 crc
최소 크기 정의(기본적으로 정사각형 또는 원으로 만들기)가 실패하여 평행하지 않은 선이 생성됩니다.
\node[sq] (X0) at (A0){};
\node[crc] (X1) at (C1){};
\draw[teal] (X0.south west) -- (X1.south east); % <<< no parallel line !
그래서 제가 선택한 대안은 다음과 같습니다.
- 대신 극 표기법을 사용합니다. 예를 들어
(X1.340)
(340도 노드 모양의 교차점) - "눈으로" 각도 조정
eg 를 사용할 수도 있지만 ([yshift=-2mm] X1)
실제로 이점이 발생하지는 않습니다.
보다 균일한 시각적 결과를 얻으려면 트리의 모든 노드에 대해 유용한 minimum size
또는가 필요할 수도 있습니다 . minimum width
이 값이 충분히 크면 A4 직사각형을 제외하고 모든 검은색 직사각형의 크기가 동일합니다.
\documentclass[border=3mm]{standalone} % <<<
\usepackage{tikz} % <<< see manual
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
\ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[
every tree node/.style={draw,rectangle,align=center},
level distance=1.5cm,
sibling distance=0.5cm,
edge from parent path={(\tikzparentnode) -- (\tikzchildnode)},
sq/.style ={draw=teal!100!black!80, minimum size=9mm},
crc/.style={draw=teal!100!black!80, minimum size=8mm,circle},
]
\Tree [.\node(A0){0}; % <<<
\edge \ee{1};
[.\node(C1){1}; % <<<
\edge \ee{1};
[.2
\edge \ee{1};
[.3
\edge \ee{1}; 4
\edge \ee{\anti{2}}; \anti{5}
]
\edge \ee{\anti{2}};
[.\node(B4){\anti{4}}; % <<<
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
]
\edge \ee{\anti{2}};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
]
% second half
\edge \ee{\anti{2}};
[.\anti{2}
\edge \ee{1};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
\edge \ee{\anti{2}};
[.\node(A4){A4}; % <<<
\edge \ee{1};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
\edge \ee{\anti{2}};
[.\anti{6}
\edge \ee{1}; \anti{7}
\edge \ee{\anti{2}}; 8
]
]
]
]
]
% ~~~ extra-nodes and connectors ~~~~~~
\node[sq] (X0) at (A0){};
\node[crc] (X1) at (C1){};
\draw[teal] (X0.south west) -- (X1.340);
% ~~~ some connectors ~~~~~~~~~
\draw[teal,dashed] (A0) -- (A4);
\draw[teal,
loosely dashed, <->]
(A0) to[out=-10,in=90] node[sloped,above]{off-road}(A4);
% \draw[dotted,blue] (B4) -- node[below,pos=.7,anchor=west]{note!}(A0);
\end{tikzpicture}
\end{document}
답변2
이를 수행하는 방법은 다음과 같습니다.
- ch를 참조하십시오. 설명서에 4개
node
추가 로 배치\draw
나중에anti
-macro를 수정해야 할 수도 있습니다
controls
매뉴얼에 제공된 설명 외에도 나는 명령을 --
로 대체하는 것을 선호하는 경향이 있는데 , 이는 시각화하기 쉽고 제어하기가 더 쉽다고 생각합니다.\draw
to[out=angle,in=angle]
\documentclass{standalone}
\usepackage{tikz} % <<< see manual
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
\ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,rectangle,align=center},
level distance=1.5cm,sibling distance=0.5cm,
edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
\Tree [.\node(A0){A0}; % <<<
\edge \ee{1};
[.1
\edge \ee{1};
[.2
\edge \ee{1};
[.3
\edge \ee{1}; 4
\edge \ee{\anti{2}}; \anti{5}
]
\edge \ee{\anti{2}};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
]
\edge \ee{\anti{2}};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
]
% second half
\edge \ee{\anti{2}};
[.\anti{2}
\edge \ee{1};
[.\anti{3}
\edge \ee{1};
[.\anti{4}
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
\edge \ee{\anti{2}};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
]
\edge \ee{\anti{2}};
[.\node(A4){A4}; % <<<
\edge \ee{1};
[.5
\edge \ee{1}; 6
\edge \ee{\anti{2}}; \anti{7}
]
\edge \ee{\anti{2}};
[.\anti{6}
\edge \ee{1}; \anti{7}
\edge \ee{\anti{2}}; 8
]
]
]
]
]
% ~~~ some connectors ~~~~~~~~~
\draw[teal,dashed] (A0) -- (A4);
\draw[teal,
loosely dashed, <->]
(A0) to[out=-10,in=90] node[sloped,above]{off-road}(A4);
\end{tikzpicture}
\end{document}
추신
노드 내부에서 매크로를 사용할 수 있지만 \anti
아마도 최선의 방법은 아닐 것입니다.
...
\edge \ee{\anti{2}};
[.\node(B4){\anti{4}}; % <<<
\edge \ee{1}; \anti{5}
\edge \ee{\anti{2}}; 6
]
...
\draw[dotted,blue] (B4) -- node[below,pos=.7,anchor=west]{note!}(A0);
\end{tikzpicture}
\end{document}
이 코드는:
\node(B4){\anti{4}};
왼쪽 아래로 정의- (A0)에 파란색 점선을 그립니다.
- 해당 경로를 따라 위치에 노드를 배치합니다
pos=.7
(여기서는 직선임). - 거기에 텍스트가 있는 노드를 삽입합니다.
below
- 고정
west
하면 텍스트가 항상 이 노드 오른쪽에서 시작하는 것처럼 표시됩니다.