![使用 tikzstyle 的节点问题](https://linux22.com/image/305499/%E4%BD%BF%E7%94%A8%20tikzstyle%20%E7%9A%84%E8%8A%82%E7%82%B9%E9%97%AE%E9%A2%98.png)
我在构建游戏树时遇到了一些问题。我的第三层似乎想要连接到上一层的标签,而不是终端节点。
这是一张图片
产生这种情况的原因如下:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{sgame}
\usepackage{pstricks}
\usepackage{egameps}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}[!htb]
\begin{center}
%\newcommand{\payoff}[4][below]{\node[#1]at(#2){$(#1,#2)$};}
\begin{tikzpicture}[scale=1.5,font=\footnotesize][!htb]
\tikzstyle{solid node}=[circle,draw,inner sep=1.5,fill=black]
\tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
\tikzstyle{level 1}=[level distance=15mm,sibling distance=2.5cm]
\tikzstyle{level 2}=[level distance=15mm,sibling distance=1.5cm]
\tikzstyle{level 3}=[level distance=15mm,sibling distance=1.5cm]
\node[solid node,label=above:{$1$}]{}
child{node[solid node,label=above left:{}]{}
child{node[solid node,label=above left:{}]{} edge from parent node[left]{$L$}
child{node[solid node,label=above left:{}]{} edge from parent node[left]{$l$}}
child{node[solid node,label=above left:{}]{} edge from parent node[right]{$r$}}
}
child{node[solid node,label=above right:{}]{} edge from parent node[right]{$R$}
child{node[solid node,label=above left:{}]{} edge from parent node[left]{$l$}}
child{node[solid node,label=above left:{}]{} edge from parent node[right]{$r$}}
}
edge from parent node[left,xshift=-5]{$Left$}
}
child{node[solid node,label=above right:{}]{}
child[missing]
edge from parent node[right,xshift=5]{$Right$}
};
\end{tikzpicture}
\end{center}
\end{figure}
答案1
欢迎使用 TeX SE!就我个人而言,我会使用它forest
来处理任何树。代码更紧凑,包功能更强大。
这是一个相当简单的用法:
\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\begin{document}
\tikzset{
solid node/.style={circle,draw,inner sep=1.5,fill=black},
hollow node/.style={circle,draw,inner sep=1.5},
}
\forestset{
my left/.style = {
edge label={node[midway, left, inner sep=5pt, font=\footnotesize] {$#1$}},
},
my right/.style = {
edge label={node[midway, right, inner sep=5pt, font=\footnotesize] {$#1$}},
},
payoff/.style = {
label={below:{[$#1$]}},
}
}
\begin{forest}
for tree={
parent anchor=center,
child anchor=center,
l sep=15mm,
if level=0{s=25mm}{s sep=15mm},
font=\footnotesize,
}
[, solid node, label={above:1}
[, solid node, my left=Left
[, solid node, my left=L
[, solid node, my left=l, payoff=8
]
[, solid node, my right=r, payoff=9
]
]
[, solid node, my right=R
[, solid node, my left=l, payoff=3
]
[, solid node, my right=r, payoff=6
]
]
]
[, solid node, my right=Right
]
]
\end{forest}
\end{document}
您可以进一步减少这一点。例如,如果大多数节点都是实心的,则将其放入for tree
并仅在需要时进行覆盖。phantom
这可能是您想要的,missing
尽管您的树中没有此示例,因此很难确定。
答案2
和相似edge from parent node[left]{$L$}
被放在了错误的位置。 指示的新位置<--
是正确的位置。 并且sibling distance
对第 3 级的 进行了一点修改以显示空间。
不可否认,@cfr 的解决方案是值得推荐的。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{sgame}
\usepackage{pstricks}
\usepackage{egameps}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}[!htb]
\begin{center}
%\newcommand{\payoff}[4][below]{\node[#1]at(#2){$(#1,#2)$};}
\begin{tikzpicture}[scale=1.5,font=\footnotesize][!htb]
\tikzstyle{solid node}=[circle,draw,inner sep=1.5,fill=black]
\tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
\tikzstyle{level 1}=[level distance=15mm,sibling distance=2.5cm]
\tikzstyle{level 2}=[level distance=15mm,sibling distance=1.5cm]
\tikzstyle{level 3}=[level distance=15mm,sibling distance=1cm]
\node[solid node,label=above:{$1$}]{}
child{node[solid node,label=above left:{}]{}
child{node[solid node,label=above left:{}](){}
child{node[solid node,label=above left:{}]{} edge from parent node[left]{$l$}}
child{node[solid node,label=above left:{}]{} edge from parent node[right]{$r$}}
edge from parent node[left]{$L$} % <--
}
child{node[solid node,label=above right:{}]{}
child{node[solid node,label=above left:{}]{} edge from parent node[left]{$l$}}
child{node[solid node,label=above left:{}]{} edge from parent node[right]{$r$}}
edge from parent node[right]{$R$} %<--
}
edge from parent node[left,xshift=-5]{$Left$}
}
child{node[solid node,label=above right:{}]{}
child[missing]
edge from parent node[right,xshift=5]{$Right$}
};
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}
答案3
使用istgame
包,您可以绘制游戏树。这是一个Tikz
基于 latex 的包,用于绘制游戏树。您可以像使用istgame
环境一样使用该tikzpicture
环境,这意味着您可以在环境Tikz options and macros
内使用istgame
。
\documentclass{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}[scale=1.5,font=\footnotesize]
\xtShowEndPoints
\xtdistance{15mm}{30mm}
\istroot(0){1}
\istb{Left}[l]
\istb{Right}[r]{0,0}
\endist
\istroot(1)(0-1){2}
\istb{L}[l]
\istb{R}[r]
\endist
\xtdistance{15mm}{15mm}
\istroot(2)(1-1){1}
\istb{\ell}[l]{1,2}
\istb{r}[r]{3,4}
\endist
\istroot(3)(1-2){1}
\istb{\ell}[l]{5,6}
\istb{r}[r]{7,8}
\endist
\end{istgame}
\end{document}