아래 이미지를 제작하려고 다음 코드를 함께 넣었습니다.
\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}
아래 이미지가 제공됩니다. 보시다시피 노드의 크기가 변경되었습니다. 이 문제를 어떻게 해결할 수 있나요? 시간 내 줘서 고마워.
답변1
노드 스타일 정의에서 제거하거나 draw
표준 line width
. 선 너비가 다른 경로에 스타일을 사용하기 때문에 solid node
이러한 노드의 그려진 테두리는 선 너비가 다르며 일부는 다른 것보다 더 크게 보입니다.
line width=0.4pt
다음은 예제를 최소화하고 정의에 추가한 결과입니다 .
tikz-qtree
또는 같은 패키지를 사용하는 것이 현명할 수 있지만 forest
, 사용하지 않고 로드하는 것은 아무 소용이 없습니다. 마찬가지로 문제는 라틴어가 아닌 스크립트의 사용에 따라 달라지지 않으며 코드에는 프리앰블에 로드된 대부분의 라이브러리가 필요하지 않습니다.
\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
(또는 tikz-qtree
)을 사용하면 덜 복잡한 구문과 더 강력한 자동화를 포함하여 더 강력한 사용자 정의를 사용할 수 있습니다. styles
일반 Ti로 간단히 정의하고 적용하는 것만으로도케이Z는 코드를 더 명확하고 유연하게 만듭니다.
예를 들어,
\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}