노드 및 기타 가장자리가 겹치지 않도록 TikZ에서 가장자리 경로 조정

노드 및 기타 가장자리가 겹치지 않도록 TikZ에서 가장자리 경로 조정

다음 코드

\begin{tikzpicture}[auto,node distance=2cm,>=latex]

  % Posizionamento manuale dei vertici
  \node[circle,draw] (A) at (1,2) {A};
  \node[circle,draw] (B) at (3,2) {B};
  \node[circle,draw] (C) at (5,2) {C};
  \node[circle,draw] (D) at (4,0) {D};
  \node[circle,draw] (E) at (0,-1) {E};
  \node[circle,draw] (F) at (2,0) {F};
  \node[circle,draw] (S) at (-0.5,1) {S};

  % Disegno degli archi con pesi
  \draw (A) -- node {$2$} (B);
  \draw (A) -- node {$2$} (S);
  \draw (S) to[out=90,in=120] node[above] {$3$} (B);
  \draw (S) -- node {$1$} (F);
  \draw (S) -- node {$4$} (E);
  \draw (E) -- node {$5$} (F);
  \draw (E) to[out=0,in=220] node[above] {$2$} (D);
  \draw (F) -- node {$3$} (D);
  \draw (C) -- node {$3$} (D);
  \draw (C) -- node {$3$} (B);
  \draw (B) -- node {$6$} (D);
  \draw (B) to[out=90,in=120] node[above] {$1$} (E);
\end{tikzpicture}

다음 그래프를 생성합니다.

여기에 이미지 설명을 입력하세요

자세히 살펴보면 B에서 E까지의 에지가 다른 에지 및 노드 A와 겹치는 것이 분명합니다. 이 특정 에지를 노드 S와 A의 왼쪽으로 다시 라우팅하여 다른 에지 및 노드와의 중첩을 방지하는 방법에 대한 지침을 찾고 있습니다. . 이를 달성하는 데 도움을 주시면 대단히 감사하겠습니다.

답변1

해결책은 명령 looseness=2에 키를 사용하는 것입니다 \draw. 또한 키 out와 키도 in변경되었습니다. overlay경계 상자가 너무 커지지 않도록 옵션이 추가됩니다.

여기에 이미지 설명을 입력하세요

\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[auto,node distance=2cm,>=latex]

  % Posizionamento manuale dei vertici
  \node[circle,draw] (A) at (1,2) {A};
  \node[circle,draw] (B) at (3,2) {B};
  \node[circle,draw] (C) at (5,2) {C};
  \node[circle,draw] (D) at (4,0) {D};
  \node[circle,draw] (E) at (0,-1) {E};
  \node[circle,draw] (F) at (2,0) {F};
  \node[circle,draw] (S) at (-0.5,1) {S};

  % Disegno degli archi con pesi
  \draw (A) -- node {$2$} (B);
  \draw (A) -- node {$2$} (S);
  \draw (S) to[out=90,in=120] node[above] {$3$} (B);
  \draw (S) -- node {$1$} (F);
  \draw (S) -- node {$4$} (E);
  \draw (E) -- node {$5$} (F);
  \draw (E) to[out=0,in=220] node[above] {$2$} (D);
  \draw (F) -- node {$3$} (D);
  \draw (C) -- node {$3$} (D);
  \draw (C) -- node {$3$} (B);
  \draw (B) -- node {$6$} (D);
  \draw[looseness=2,overlay] (B) to[out=110,in=130] node[above] {$1$} (E);
\end{tikzpicture}
\end{document}

답변2

bbox및 라이브러리를 사용하면 quotes이미지 코드가 조금 더 짧아지고 더 명확해지며 결과 이미지가 훨씬 더 좋습니다(주변에 추가 공백이 없음).

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{bbox,
                quotes}

\begin{document}
    \begin{tikzpicture}[bezier bounding box,
                C/.style = {circle, draw, inner sep=2pt},
every edge quotes/.style = {auto, font=\footnotesize, inner sep=2pt},
                        ]
% Posizionamento manuale dei vertici
    \begin{scope}[nodes=C]
\node (A) at (1, 2) {A};
\node (B) at (3, 2) {B};
\node (C) at (5, 2) {C};
\node (D) at (4, 0) {D};
\node (E) at (0,-1) {E};
\node (F) at (2, 0) {F};
\node (S) at (-.5,1){S};
    \end{scope}
% Disegno degli archi con pesi
\draw   (A) edge["$2$"] (S) 
        (A) edge["$2$"] (B)
        (S) edge[bend left=60,"$3$"] (B) 
        (S) edge["$1$"] (F) 
        (S) edge["$4$"] (E) 
        (E) edge["$5$"] (F)
        (E) edge[bend right,"$2$"] (D)
        (E) edge[bend left=90, looseness=2, "$1$"] (B) 
        (F) edge["$3$"] (D) 
        (C) edge["$3$"] (D) 
        (C) edge["$3$"] (B) 
        (B) edge["$6$"] (D);
\end{tikzpicture}
\end{document}

그런데 코드 조각에서 그림에 사용되지 않은 화살표 머리를 정의합니다. 그래서 약간 불분명합니다. 그래프가 방향을 향하고 있는지(가장자리에 화살표 머리가 있음) 아닌지입니다. MY MWE는 후자의 경우를 고려합니다.

여기에 이미지 설명을 입력하세요

관련 정보