我有以下用于时间线的 LaTeX 代码(使用tree
),但我希望“否”框后面的两个空框消失,而是只显示指向 action3 的直箭头——如下所示:
yes -> action1 -> action2 -> action3
no -----------------------> action3
以下是代码:
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees,arrows}
\begin{document}
\begin{tikzpicture}[level distance=1in,sibling distance=.25in,scale=.65]
\tikzset{edge from parent/.style=
{thick, draw, -latex,
edge from parent fork right},
every tree node/.style={draw,minimum width=0.7in,text width=0.7in, align=center},grow'=right}
\Tree
[. {do?}
[. {yes }
[. {action1}
[. {action2}
[. {action3}
]
]
]
]
[. {no }
[. {}
[. {}
[. {action3}
]
]
]
]
]
\end{tikzpicture}
\end{document}
答案1
答案2
谢谢你们两位。这是我在发布问题后想到的解决方案:(注意,代码还将是和否移到了箭头上方)(还请注意 \edge[-] 命令以避免额外的中间箭头末端)
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees,arrows}
\begin{document}
\begin{tikzpicture}[level distance=1.5in,sibling distance=.25in,scale=.65]
\tikzset{edge from parent/.style={thick, draw, -latex, edge from parent fork right},
every tree node/.style={draw,minimum width=0.7in,minimum height=0.65in,text width=0.7in, align=center},grow'=right}
\Tree
[. \node {do?};
\edge node[above, pos=0.7] {yes};
[. {action1}
[. {action2}
[. {action3} ]
]
]
\edge[-] node[below, pos=0.6] {no};
[
\edge[-] {};
[
\edge {};
[. {action3} ]
]
]
]
\end{tikzpicture}
\end{document}
答案3
答案4
一个优点森林是您可以用来tier
告诉包某些节点应该位于树的同一级别,即使某些节点比其他节点有更多的中间节点。
例如,在下面的代码中
if n children=0{tier=terminums}{},
表示终端节点应全部放置在树的同一层。因此可以放置 2 个动作 3 节点,而无需为祖先较少的节点创建虚拟节点。
label me={}{}
创建样式以方便在边缘上放置yes
和no
标签。第一个参数添加到标签节点的选项中,可用于指定相对位置(例如above right
或锚点anchor=north west
等)。第二个参数给出标签的内容。
该包的一大优点是,一旦您配置了样式,您就可以非常简洁地指定树。例如:
[do?
[action 1, label me={above, anchor=south west}{yes}
[action 2
[action 3]
]
]
[action 3, label me={below, anchor=north west}{no}]
]
生产
完整代码:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
label me/.style n args=2{
delay={edge label/.wrap value={node [midway, #1, font=\scriptsize] {#2}}}
},
for tree={
grow'=0,
draw,
text width=15mm,
minimum height=7mm,
parent anchor=east,
child anchor=west,
edge={->},
text centered,
edge path={
\noexpand\path [\forestoption{edge}] (!u.parent anchor) -- +(3mm,0) |- (.child anchor)\forestoption{edge label};
},
if n children=0{tier=terminums}{},
l sep+=5mm,
}
[do?
[action 1, label me={above, anchor=south west}{yes}
[action 2
[action 3]
]
]
[action 3, label me={below, anchor=north west}{no}]
]
\end{forest}
\end{document}