如何跳过 Latex 树中的中间节点?

如何跳过 Latex 树中的中间节点?

我有以下用于时间线的 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

使用tikz-qtree,您可以使用 删除边\edge[draw=none];,然后用 连接no-节点 和action3-节点\draw

\Tree
    [. {do?}
            [. {yes }
                [. {action1}
                   [. {action2}
                      [. {action3}
                      ]
                   ]
                ]
            ]
            [.\node(no){no}; \edge[draw=none];
               [ \edge[draw=none];
                 [ \edge[draw=none];
                   [.\node(a3){action3};
                   ]
                 ]
                ]
            ]
    ]
\draw[-latex] (no)--(a3);

在此处输入图片描述

答案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

两次评论. {}

\Tree
    [. {do?}
            [. {yes }
                [. {action1}
                   [. {action2}
                      [. {action3}
                      ]
                   ]
                ]
            ]
            [. {no }
               [ %. {}
                 [ %. {}
                   [. {action3}
                   ]
                 ]
                ]
            ]
    ]

你得到:

输出的屏幕截图

这应该通过删除两个箭头来进一步改进(我想这需要对代码进行一些更深层次的改变)。

答案4

一个优点森林是您可以用来tier告诉包某些节点应该位于树的同一级别,即使某些节点比其他节点有更多的中间节点。

例如,在下面的代码中

    if n children=0{tier=terminums}{},

表示终端节点应全部放置在树的同一层。因此可以放置 2 个动作 3 节点,而无需为祖先较少的节点创建虚拟节点。

label me={}{}创建样式以方便在边缘上放置yesno标签。第一个参数添加到标签节点的选项中,可用于指定相对位置(例如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}

相关内容