tikz 中的樹和標籤問題

tikz 中的樹和標籤問題

我想在樹的邊緣放置一個標籤,以打破邊緣。我嘗試了一些愚蠢的方法,將背景設為白色,但隨後我得到了標籤來覆蓋其他附近的邊緣:

例子

另外,我似乎有一個有 2 位數字更大標籤的節點。我怎樣才能使一切統一?

這是我的 MWE:

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{shapes.geometric}
\begin{document}
    \begin{tikzpicture}[level/.style={sibling distance=15mm/#1}]
        \node [circle,draw] {0}
        child[very thick,red] {node [thin, black,circle,draw] {$1$} edge from parent node [fill=white] {$s_1$}}
        child[very thick,blue] {node [thin, black,circle,draw] {$2$}
            child[very thick, red] {node [thin, black,circle,draw] {$3$}}
            child[very thick, blue] {node [thin, black,circle,draw] {$4$}}
            child[very thick, orange] {node [thin, black,circle,draw] {$8$}}
            edge from parent node [fill=white] {$s_2$} }
        child[very thick,orange] {node [thin, black,circle,draw] {$6$}}
        child[very thick,orange] {node [thin, black,circle,draw] {$7$}}
        child[very thick,blue] {node [thin, black,circle,draw] {$11$}
            child[very thick, red] {node [thin, black,circle,draw] {$10$}}
            child[very thick, blue] {node [thin, black,circle,draw] {$9$}}
            child[very thick, orange] {node [thin, black,circle,draw] {$5$}}
        }
        child[very thick,red] {node [thin, black,circle,draw] {$12$}};
    \end{tikzpicture}
\end{document}

答案1

使用該forest包,樹代碼更短:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% abbreviation for Edge Label
             edge label={node[midway, font=\small, text=black,
                         fill=white, inner sep=2pt]{$#1$}} 
             }
          }% end of forestset
  
\begin{forest}
for tree = {
% node style
    circle,
    draw, 
    minimum size = 1.5em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=3mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2,fit=band
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [7,edge=orange]
    [11,edge=blue,fit=band
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

在此輸入影像描述

附錄(1): 如果您只想增加節點「6」和「7」之間的距離,最簡單的方法是在它們之間插入幻像節點:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% shortens for (my) edge label
             edge label={node[midway, font=\small, text=black,
                         fill=white, inner sep=2pt]{$#1$}}
             }
          }% end of forestset

\begin{forest}
for tree = {
% node style
    circle,
    draw,
    minimum size = 1.5em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=3mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2, fit=band
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [, phantom, no edge]  % <---
    [7,edge=orange]
    [11,edge=blue,fit=band
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

在此輸入影像描述

附錄(2): 如果你喜歡更窄的樹圖像,你可以設定:

  • s sep=1mms
  • 刪除fit=band樹底層的選項
  • 將邊緣標籤的字體大小減小到font=\footnotesize
  • 將邊緣標籤位置推低並替換midwaypos=0.65
  • font=\small透過在\for tree設定中新增選項來減少樹節點的字體大小
  • 將節點大小減少到“最小大小=1.2em”,則新的 MWE 為:
\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% abbreviation for Edge Label
             edge label={node[pos=0.65, font=\footnotesize, text=black,
                         fill=white, inner sep=2pt]{$#1$}}
             }
          }% end of forestset

\begin{forest}
for tree = {
% node style
    circle,
    draw,
    font=\small,
    minimum size = 1.2em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=2mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2,
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [7,edge=orange]
    [11,edge=blue,
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

產生:

在此輸入影像描述

答案2

在此輸入影像描述

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{shapes.geometric}
\begin{document}
    \begin{tikzpicture}[
        every node/.style={% standard style for all nodes no repetition required every time
            thin, 
            black,
            draw,
            circle,
            inner sep=1pt,% space around the text in the circle
            text width=10pt,%uniform circles minimum size
            text centered
        },
    level/.style={
        sibling distance=15mm/#1
    },
        level distance=5em% can vary to suit 
]
        \node [] {0}
        child[very thick,red] {node [] {$1$} edge from parent node [draw=none,fill=white] {$s_1$}}
        child[very thick,blue] {node [] {$2$}
            child[very thick, red] {node [] {$3$}}
            child[very thick, blue] {node [] {$4$}}
            child[very thick, orange] {node [] {$8$}}
            edge from parent node [fill=white,draw=none] {$s_2$} }
        child[very thick,orange] {node [] {$6$}}
        child[very thick,orange] {node [] {$7$}}
        child[very thick,blue] {node [] {$11$}
            child[very thick, red] {node [] {$10$}}
            child[very thick, blue] {node [] {$9$}}
            child[very thick, orange] {node [] {$5$}}
        }
        child[very thick,red] {node [] {$12$}};
    \end{tikzpicture}
\end{document}

相關內容