
У меня есть следующий код 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
решение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}