노드에 텍스트를 추가하기 위해 노드의 크기를 변경하는 방법 아래는 코드이며 이 코드에서 두 번째 다이어그램이 생성됩니다.
\begin{figure}
\usetikzlibrary{trees}
\begin{tikzpicture}[sibling distance=2.8cm,level distance=2.8cm,
box/.style={
shape=rectangle,
font=\small,
draw,
align=center,
minimum height=1.5cm,
text width=1.75cm,
top color=white,
bottom color=blue!20}
]
\node [box,text width=3cm] {Indoor\\Localization\\System} [edge from parent fork down]
child { node [box] {Proximity} }
child { node [box] {Angulation}
child { node [box] {Received Angle}
child [sibling distance=2.2cm] { node [box] {AOA}
child [sibling distance=2.2cm] { node [box] {Antenna array} }}}}
child { node [box] {Scene Analysis} }
child [sibling distance=3cm] { node [box] (lat) {Lateration}
child [sibling distance=4.5cm] { node [box] {Propagation time}
child [sibling distance=2.2cm] { node [box] {TOA}
child [sibling distance=2.2cm] { node [box] {RF or ultrasonic} }}
child [sibling distance=2.2cm] { node [box] {TDOA}
child [sibling distance=2.2cm] { node [box] {RF or Ultrasonic} }} }
child [sibling distance=3.4cm]{ node [box] (tof) {Signal Strength}
child [sibling distance=2.2cm] { node [box] {RSS}
child [sibling distance=2.2cm] { node [box] {RF} }}} };
\end{tikzpicture}
\caption{Overview of Localization}
\end{figure}
답변1
귀하의 코드로는 이미지를 재현할 수 없습니다. 괜찮아 보인다. 어쨌든 코드를 약간 줄이고 새로운 형제 거리를 선택합니다. 이 변경으로 다음 그림을 얻습니다.
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[sibling distance=2.8cm,level distance=2.8cm,
box/.style={
shape=rectangle,
font=\small,
draw,
align=center,
minimum height=1.3cm,
text width=1.75cm,
top color=white,
bottom color=blue!20},
level 1/.style = {sibling distance=2.6cm},
level 2/.style = {sibling distance=3.4cm},
level 3/.style = {sibling distance=2.4cm},
]
\node [box,text width=3cm] {Indoor\\Localization\\System} [edge from parent fork down]
child { node [box] {Proximity} }
child { node [box] {Angulation}
child { node [box] {Received Angle}
child { node [box] {AOA}%sibling distance=2.2cm
child { node [box] {Antenna array} }}}}%[sibling distance=2.2cm]
child { node [box] {Scene Analysis} }
child { node [box] (lat) {Lateration}%[sibling distance=3cm]
child { node [box] {Propagation time}%[sibling distance=4.5cm]
child { node [box] {TOA}%[sibling distance=2.2cm]
child { node [box] {RF or ultrasonic} }}%[sibling distance=2.2cm]
child [sibling distance=2.2cm] { node [box] {TDOA}
child { node [box] {RF or Ultrasonic} }} }%[sibling distance=2.2cm]
child { node [box] (tof) {Signal Strength}%[sibling distance=3.4cm]
child { node [box] {RSS}%[sibling distance=2.2cm]
child { node [box] {RF} }}} };%[sibling distance=2.2cm]
\end{tikzpicture}
\end{document}
코드에서는 모든 형제 거리에 대해 주석을 달고 대신 level
스타일로 정의합니다.
답변2
이 답변은 두 가지를 보여줍니다.
그숲솔루션을 사용하면 형제 거리를 수동으로 지정할 필요가 없습니다. 트리는 자동으로 압축되어 간결하고 간결한 형태를 생성합니다.
그 실험 패키지는그냥 나무원본 다이어그램 오른쪽에 표시된 레이블을 추가하는 데 사용할 수 있으며숲화살표를 자동으로 추가할 수 있습니다.
언급하지 않았기 때문에 레이블에 관심이 있는지는 모르겠지만 테스트 사례가 필요하므로 내가 하는 동안 부주의하게 결과를 적용하는 것이 좋습니다.
집에서 이것을 시도하고 싶다면 아직 쉽게 사용할 수 없으므로 사본을 원한다고 알려주세요(예: CTAN에는 없음).
다음은 더 자세히 읽을지 여부를 결정할 수 있도록 결과입니다. 맨 위 화살표가 다른 화살표와 정렬되어야 하는지 아니면 그것이 가리키는 노드와 정렬되어야 하는지 모르겠습니다. 나는 후자를 선택했지만 전자는 약간의 수정이 필요합니다.
가장 큰 장점은숲나무를 그릴 때 제공하는 강력함과 유연성, 특히 자동화 및 일관된 서식의 잠재력입니다. 또한 기본적으로 매우 컴팩트한 나무를 그립니다.
그냥 나무는숲래퍼는 한 가지 작업을 수행하도록 설계되었습니다. 자동으로 트리의 왼쪽이나 오른쪽에 레이블을 정렬하여 레이블 내용을 트리의 일부로 지정할 수 있도록 하고 레이블 형식을 사용자 정의할 수 있는 몇 가지 키를 제공합니다.
전문
코드를 로드합니다:
\usepackage{justtrees}% v 0.07
화살표 팁의 경우:
\usetikzlibrary{arrows.meta}
.edges
edge from parent fork down
\useforestlibrary{edges}
설정을 기본값으로 적용합니다 edges
. forest
문서의 모든 트리에 적용하지 않으려면 로컬 TeX 범위 내에서 이 작업을 수행하세요 .
\forestapplylibrarydefaults{edges}
몸
그냥 나무justtree
트리의 서문을 제공해야 하는 단일 필수 인수를 취하는 새로운 환경을 제공합니다 . 비어 있을 수 있지만 인수를 생략할 수는 없습니다.
\begin{justtree}
{
가장자리에 제곱 회전을 얻으려면.
forked edges,
우리는 트리의 모든 노드에 몇 가지 사항을 적용하기를 원합니다. 이는 본질적으로 호환성을 위해 스타일을 box
약간 수정한 것입니다.
for tree={
font=\small,
draw,
보다는 align=center
이것이 필요합니다. (왜인지는 잘 모르겠습니다.)
text centered,
minimum height=1.5cm,
text width=1.75cm,
일을 정렬하려면 이것이 필요합니다.
anchor=north,
top color=white,
bottom color=blue!20,
우리가 텍스트를 원하지 않는다면. 그렇지 않으면 생략합니다.
font=\sffamily,
},
오른쪽 라벨의 형식은 다음과 같습니다. 화살표를 위한 공간을 확보하기 위해 오른쪽으로 이동합니다.
just format={xshift=25pt, font=\sffamily},
이 코드는 화살표를 그리는 역할을 합니다. 화살표가 예상치 못한 곳에서 끝나지 않도록 메인 트리에 있는 모든 노드의 위치가 계산되었는지 확인하기 위해 이를 지연시킵니다.
before drawing tree={
이것은 약간 복잡합니다. 작동하지만 올바른지 확실하지 않습니다. 매뉴얼은 나 같은 바보들을 위해 더 간단한 예(또는 단지 몇 가지 예)를 제공해야 합니다. ;)!
이는 노드에서 노드로 이동하며 각 단계에서 작업을 수행합니다. r
나무의 뿌리입니다. L
마지막 리프, 즉 오른쪽 하단 노드입니다. current and ancestors
그런 다음 마지막 리프에서 루트로 다시 이동합니다. 즉 오른쪽 하단 노드 -> 부모 -> 조부모 -> 증조부모 -> ... -> 루트입니다.
for nodewalk={rL,current and ancestors}{
0
우리는 레벨 이나 1
트리에 대한 화살표를 원하지 않습니다 . (레벨은 0
를 사용할 때 실제로 보이지 않습니다 justtree
.) 따라서 각 단계에서 현재 레벨을 테스트하고, 레벨이 2보다 작으면 아무 것도 하지 않고, 그렇지 않으면 화살표를 그려서 적절한 앵커에 맞춰 정렬합니다. 오른쪽 노드와 현재 노드.
if={level()<2}{}{tikz+={\draw [Stealth-] (.mid east) ++(2.5pt,0) -- ++(15pt,0);},},
},
},
}
그게 서문입니다. 이제 그 안에 있는 나무숲의 괄호 표기법. 노드에 일반 TikZ 옵션을 추가할 수 있으며숲그것들을 전달할 것입니다.
[Indoor\\Localization\\System, text width=3cm
오른쪽의 라벨은 를 사용하여 지정됩니다 just=<label content>
. 단지 올바른 수준의 노드로 전달되기만 하면 됩니다. 어느 노드인지는 중요하지 않습니다.
[Proximity, just={Positioning}
]
[Angulation
[Received\\Angle
[AOA
[Antenna\\array
]
]
]
]
[Scene\\Analysis
]
[Lateration
몇 가지 라벨이 더 있습니다.
[Propagation\\time, just=Variable
[TOA
[RF or\\ultrasonic, just=Device
]
]
[TDOA
[RF or\\Ultrasonic
]
]
]
[Signal\\Strength
최종 라벨. 이는 지정 위치가 중요하지 않음을 보여주기 위해 트리 내에 분산되어 있습니다.
[RSS, just=Ranging
[RF
]
]
]
]
]
환경을 닫으면 완료됩니다.
\end{justtree}
전체 코드:
\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage{justtrees}% v 0.07
\usetikzlibrary{arrows.meta}
\useforestlibrary{edges}
\forestapplylibrarydefaults{edges}
\begin{document}
\begin{justtree}
{
forked edges,
for tree={
font=\small,
draw,
text centered,
minimum height=1.5cm,
text width=1.75cm,
anchor=north,
top color=white,
bottom color=blue!20,
font=\sffamily,
},
just format={xshift=25pt, font=\sffamily},
before drawing tree={
for nodewalk={rL,current and ancestors}{
if={level()<2}{}{tikz+={\draw [Stealth-] (.mid east) ++(2.5pt,0) -- ++(15pt,0);},},
},
},
}
[Indoor\\Localization\\System, text width=3cm
[Proximity, just={Positioning}
]
[Angulation
[Received\\Angle
[AOA
[Antenna\\array
]
]
]
]
[Scene\\Analysis
]
[Lateration
[Propagation\\time, just=Variable
[TOA
[RF or\\ultrasonic, just=Device
]
]
[TDOA
[RF or\\Ultrasonic
]
]
]
[Signal\\Strength
[RSS, just=Ranging
[RF
]
]
]
]
]
\end{justtree}
\end{document}