전문

전문

노드에 텍스트를 추가하기 위해 노드의 크기를 변경하는 방법 아래는 코드이며 이 코드에서 두 번째 다이어그램이 생성됩니다.

\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

이 답변은 두 가지를 보여줍니다.

  1. 솔루션을 사용하면 형제 거리를 수동으로 지정할 필요가 없습니다. 트리는 자동으로 압축되어 간결하고 간결한 형태를 생성합니다.

  2. 그 실험 패키지는그냥 나무원본 다이어그램 오른쪽에 표시된 레이블을 추가하는 데 사용할 수 있으며화살표를 자동으로 추가할 수 있습니다.

언급하지 않았기 때문에 레이블에 관심이 있는지는 모르겠지만 테스트 사례가 필요하므로 내가 하는 동안 부주의하게 결과를 적용하는 것이 좋습니다.

집에서 이것을 시도하고 싶다면 아직 쉽게 사용할 수 없으므로 사본을 원한다고 알려주세요(예: CTAN에는 없음).

다음은 더 자세히 읽을지 여부를 결정할 수 있도록 결과입니다. 맨 위 화살표가 다른 화살표와 정렬되어야 하는지 아니면 그것이 가리키는 노드와 정렬되어야 하는지 모르겠습니다. 나는 후자를 선택했지만 전자는 약간의 수정이 필요합니다.

화살표와 라벨로 정렬된 것

가장 큰 장점은나무를 그릴 때 제공하는 강력함과 유연성, 특히 자동화 및 일관된 서식의 잠재력입니다. 또한 기본적으로 매우 컴팩트한 나무를 그립니다.

그냥 나무래퍼는 한 가지 작업을 수행하도록 설계되었습니다. 자동으로 트리의 왼쪽이나 오른쪽에 레이블을 정렬하여 레이블 내용을 트리의 일부로 지정할 수 있도록 하고 레이블 형식을 사용자 정의할 수 있는 몇 가지 키를 제공합니다.

전문

코드를 로드합니다:

\usepackage{justtrees}% v 0.07

화살표 팁의 경우:

\usetikzlibrary{arrows.meta}

.edgesedge 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}

관련 정보