Beim Versuch, das folgende Bild zu erzeugen Ich habe folgenden Code zusammengestellt:
\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}
Das Ergebnis ist das folgende Bild: Wie Sie sehen, hat sich die Größe der Knoten geändert. Wie kann ich das beheben? Vielen Dank für Ihre Zeit.
Antwort1
Entfernen Sie es entweder draw
aus der Definition des Knotenstils oder fügen Sie einen Standard ein line width
. Da Sie den solid node
Stil auf Pfaden mit unterschiedlichen Linienbreiten verwenden, haben die gezeichneten Ränder dieser Knoten unterschiedliche Linienbreiten und einige von ihnen sehen größer aus als andere.
Das Folgende ist das Ergebnis der Minimierung Ihres Beispiels und der Ergänzung line width=0.4pt
der Definition.
Es wäre klug, ein Paket wie tikz-qtree
oder besser noch zu verwenden, forest
aber es zu laden, ohne es zu verwenden, nützt Ihnen nichts. Ebenso hängt das Problem nicht von der Verwendung einer nicht-lateinischen Schrift ab und der Code erfordert nicht die Mehrheit der in Ihrer Präambel geladenen Bibliotheken.
\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
(oder sogar tikz-qtree
) würde Ihnen eine weniger überladene Syntax und eine leistungsfähigere Anpassung, einschließlich einer stärkeren Automatisierung, ermöglichen. Selbst das einfache Definieren und Anwenden styles
mit einfachem TikZ würde Ihren Code klarer und flexibler machen.
Zum Beispiel,
\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}