Aumento del tamaño del nodo cuando el ancho de la línea difiere en el árbol

Aumento del tamaño del nodo cuando el ancho de la línea difiere en el árbol

En un intento de producir la siguiente imagen.ingrese la descripción de la imagen aquí He reunido el siguiente código:

\documentclass[11pt]{book}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees,graphs,calc,arrows.meta,positioning,decorations.pathreplacing,bending,decorations.markings,matrix,fit,patterns}
\usepackage{pgfplots}
\usepackage{xepersian}
\settextfont[Scale=1]{Tahoma}
\setlatintextfont[Scale=1]{Times New Roman}
\setdigitfont[Scale=1]{Tahoma}
\begin{document}
    \begin{figure}
        \centering
        \tikzset{
            solid node/.style={circle,draw,inner sep=1.2,fill=black},}
        \begin{tikzpicture}
            \tikzset{
                level 1/.style={level distance=12mm,sibling distance=20mm},
                level 2/.style={level distance=12mm,sibling distance=12mm},
                level 3/.style={level distance=12mm,sibling distance=6mm},
            }
            \node (r) [solid node, label = above: {$r\,$\rl{(ریشه)}}]{}
            child{node[solid node, label= left: {$a_{1}$}]{}
                child[edge from parent/.style={draw, line width=0.7mm}]{node[solid node, label = left: {$b_{1}$}]{}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
            }}
            child{node[solid node, label = left:{$a_{2}$}]{}
                child[edge from parent/.style={draw, line width=0.7mm}]{node[solid node, label = left:{$b_{2}$}]{}
                    child[missing]
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                }
            }
            child{node (a3) [solid node, label = left:{$a_{3}$}]{}
                child[edge from parent/.style={draw, line width=0.7mm}]{node (b3)[solid node, label = left:{$b_{3}$}]{}
                    child[missing]}
            }
            child{node (aq)[solid node, label = right:{$a_{q}$}]{}
                child[edge from parent/.style={draw, line width=0.7mm}]{node (bq) [solid node, label = right:{$b_{q}$}]{}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                    child[edge from parent/.style={draw, thin}]{node[solid node]{}}
                }   
            }
            ;
            \path (a3.east) -- (aq.west) node [midway] {$\cdots$};
            \path (b3.east) -- (bq.west) node [midway] {$\cdots$};
            \tikzset{
                solid node/.style={circle,draw,inner sep=1.2,fill=black},
                no edge from this parent/.style={
                    every child/.append style={
                        edge from parent/.style={draw=none}}},
                level 3/.style={yshift=5cm},
                level 4/.style={level distance=10mm} }
            \node[right = 5 of r,align=right] {\rl{سطح $0$ (بیرونی)}} [no edge from this parent]
            child{node {\rl{سطح $1$ (درونی)}}[no edge from this parent]
                child{node {\rl{سطح $2$ (بیرونی)}} [no edge from this parent]
                    child{node {\rl{سطح $3$ (درونی)}}}
            }};
        \end{tikzpicture}
        \caption{درخت تناوبی.}
        \label{fig:3-33}
    \end{figure}
\end{document}

Lo que da la siguiente imagen: ingrese la descripción de la imagen aquí Como puede ver, el tamaño de los nodos se modifica. ¿Cómo puedo arreglar esto? Gracias por tu tiempo.

Respuesta1

Elimínelo drawde la definición del estilo de nodo o incluya un estándar line width. Debido a que utiliza el solid nodeestilo en trazados con diferentes anchos de línea, los bordes dibujados de estos nodos tienen diferentes anchos de línea y algunos de ellos parecen más grandes que otros.

El siguiente es el resultado de minimizar su ejemplo y agregar line width=0.4pta la definición.

anchos estandarizados

Sería prudente utilizar un paquete como tikz-qtreeo, mejor aún, forest, pero cargarlo sin usarlo no sirve de nada. De manera similar, el problema no depende del uso de escritura no latina y el código no requiere que la mayoría de las bibliotecas estén cargadas en su preámbulo.

\documentclass[11pt]{book}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{
  solid node/.style={circle,draw,line width=0.4pt,inner sep=1.2,fill=black},}
\begin{tikzpicture}
  \tikzset{
    level 1/.style={level distance=12mm,sibling distance=20mm},
    level 2/.style={level distance=12mm,sibling distance=12mm},
    level 3/.style={level distance=12mm,sibling distance=6mm},
  }
  \node (r) [solid node, label = above: {$r\,$xxx}]{}
  child{node[solid node, label= left: {$a_{1}$}]{}
    child[edge from parent/.style={draw, line width=0.7mm}]{node[solid node, label = left: {$b_{1}$}]{}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
    }}
  child{node[solid node, label = left:{$a_{2}$}]{}
    child[edge from parent/.style={draw, line width=0.7mm}]{node[solid node, label = left:{$b_{2}$}]{}
      child[missing]
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
    }
  }
  child{node (a3) [solid node, label = left:{$a_{3}$}]{}
    child[edge from parent/.style={draw, line width=0.7mm}]{node (b3)[solid node, label = left:{$b_{3}$}]{}
      child[missing]}
  }
  child{node (aq)[solid node, label = right:{$a_{q}$}]{}
    child[edge from parent/.style={draw, line width=0.7mm}]{node (bq) [solid node, label = right:{$b_{q}$}]{}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
      child[edge from parent/.style={draw, thin}]{node[solid node]{}}
    }   
  }
  ;
  \path (a3.east) -- (aq.west) node [midway] {$\cdots$};
  \path (b3.east) -- (bq.west) node [midway] {$\cdots$};
  \tikzset{
    solid node/.style={circle,draw,inner sep=1.2,fill=black},
    no edge from this parent/.style={
      every child/.append style={
        edge from parent/.style={draw=none}}},
    level 3/.style={yshift=5cm},
    level 4/.style={level distance=10mm} }
  \node[right = 5 of r,align=right] {xxx} [no edge from this parent]
  child{node {xxx}[no edge from this parent]
    child{node {xxx} [no edge from this parent]
      child{node {xxx}}
    }};
\end{tikzpicture}
\end{document}

forest(o incluso tikz-qtree) le permitiría utilizar una sintaxis menos desordenada y una personalización más potente, incluida una mayor automatización. Incluso simplemente definiendo y aplicando stylescon Ti simplekZ haría que su código sea más claro y flexible.

Por ejemplo,

\documentclass[11pt]{book}
\usepackage{forest}
\usetikzlibrary{positioning}
% ateb: https://tex.stackexchange.com/a/705271/ addaswyd o gwestiwn Arian: https://tex.stackexchange.com/q/705249/
\newcounter{forlevel}
\renewcommand* \theforlevel{\alph{forlevel}}
\forestset{%
  declare toks={level label}{},
  last level label/.style={label={right:{${#1}_{q}$}}},
  other level label/.style 2 args={label={left:{${#1}_{#2}$}}},
  fancy tree/.style={%
    for tree={
      solid node,
      tier/.option=level,
      fit=band,
    },
    before typesetting nodes={
      for nodewalk={%
        fake=root,
        last leaf,
        branch'={%
          while={%
            >On>{level}{1}%
          }{%
            parent,
            TeX={\setcounter{forlevel}{\foresteoption{level}}},
            level label/.expanded=\theforlevel,
            last level label/.option=level label,
            tikz+={\path () -- (!previous on tier) node [midway] {$\cdots$};}%
          },
          while nodewalk valid={previous on tier}{%
            previous on tier,
            TeX={\setcounter{forlevel}{\foresteoption{level}}},
            level label/.expanded=\theforlevel,
            other level label/.process={OO{level label}{n}}
          }%
        }%
      }{},
    },
    before packing={%
      tempdima/.max={> OO OO  w4+d  {s}{!u1.s}  {s sep}{!u.n children} {(##1-##2)+##3*(##4-1)} }{leaves},
      for children={minimum width=\foresteregister{tempdima},typeset node},
    },
    before drawing tree={%
      for children={minimum width=0pt,typeset node},
    },
  },
}
\tikzset{
  solid node/.style={circle,draw,line width=0.4pt,inner sep=1.2,fill=black},}
\begin{document}
\begin{forest}
  fancy tree,
  [,label={above:{${r}$ xxx}}
    [[[][][][]]]
    [[[,phantom][][]]]
    [[]]
    [[[][][]]]
  ]
  \coordinate (e) at (current bounding box.east);
  \foreach \i/\j in {!r/xxx,!rl/xxx,!rll/xxx,!rlll/xxx}
  \node [anchor=west,xshift=10pt] at (\i -| e) {\j};
\end{forest}

\end{document}

información relacionada