
Eu tenho o seguinte código LaTeX para uma linha do tempo (usando tree
), mas gostaria que as duas caixas vazias após a caixa "não" desaparecessem e, em vez disso, tivessem apenas uma seta reta para action3 - algo assim:
yes -> action1 -> action2 -> action3
no -----------------------> action3
Aqui está o código:
\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}
Responder1
Com tikz-qtree
, você pode remover bordas usando \edge[draw=none];
e posteriormente conectar o no
-node e o action3
-node com \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);
Responder2
Obrigado, ambos. Aqui está a solução que encontrei depois de postar a pergunta: (Observe que o código também move o sim e o não para acima das setas) (Observe também o comando \edge[-] para evitar as pontas intermediárias adicionais das setas)
\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}
Responder3
Responder4
Uma vantagem deflorestaé que você pode usar tier
para informar ao pacote que determinados nós devem estar no mesmo nível da árvore, mesmo que alguns tenham mais nós intermediários do que outros.
Por exemplo, no código abaixo
if n children=0{tier=terminums}{},
diz que todos os nós terminais devem ser colocados na mesma camada da árvore. Portanto, os nós de 2 ações 3 podem ser colocados sem a necessidade de criar nós fictícios para aquele com menos ancestrais.
Um estilo label me={}{}
é criado para posicionamento conveniente dos rótulos yes
e no
nas bordas. O primeiro argumento é adicionado às opções do nó rótulo e pode ser usado para especificar uma posição relativa, por exemplo, above right
ou uma âncora, por exemplo, anchor=north west
ou qualquer outra coisa. O segundo argumento fornece o conteúdo do rótulo.
A grande vantagem do pacote é que, depois de configurar um estilo, você pode especificar árvores de forma muito concisa. Por exemplo:
[do?
[action 1, label me={above, anchor=south west}{yes}
[action 2
[action 3]
]
]
[action 3, label me={below, anchor=north west}{no}]
]
produz
Código completo:
\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}