Possível duplicata:
Posicionamento relativo de nós no TikZ
Estou criando um diagrama de árvore no tikz e sei que calcular cada ponto seria bobagem. Por esse motivo, quero colocar as coisas em posição relativa umas às outras.
Então, aqui estão duas perguntas:
Como posso definir o segundo nó neste exemplo simples?
\begin{tikzpicture} \node (a) at (0,0) {}; \node (b) at (2,1) {}; \end{tikzpicture}
Como posso substituir este comando de linha por um que terá posicionamento relativo (
a
eb
são os criados acima)?\draw (a) -- (0,1); \draw (0,1) -- (b);
Por favor, deixe-me saber se algo não estiver claro.
Responder1
Como foi mencionado nos comentários, você pode usar a positioning
biblioteca; aqui está um exemplo simples que ilustra as opções disponíveis ao usar, por exemplo, above left
(o mesmo diagrama é repetido duas vezes; na segunda vez a on grid
opção é ativada):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=5mm,gray!20] (0,0) grid (4,3);
\node (a) at (0,0) {a};
\node[above right] (b) {b};
\node[above right = of a] (c) {c};
\node[above right = 2cm of a] (d) {d};
\node[above right = 2cm and 3cm of a] (e) {e};
\begin{scope}[xshift=5cm,on grid]
\draw[help lines,step=5mm,gray!20] (0,0) grid (4,3);
\node (a) at (0,0) {a};
\node[above right] (b) {b};
\node[above right = of a] (c) {c};
\node[above right = 2cm of a] (d) {d};
\node[above right = 2cm and 3cm of a] (e) {e};
\end{scope}
\end{tikzpicture}
\end{document}
Os valores dos parâmetros 2cm
e 3cm
podem ser alterados em relação à localização desejada, por exemplo, -2cm
e -3cm
para espelhar a localização no sistema de coordenadas local onde a
está o ponto central.
\node[above right = 2cm and 3cm of a]
\node[above right = -2cm and -3cm of a]
Agora um pequeno exemplo mostrando a node distance
chave e algumas opções além above left
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=5mm,gray!20] (-4,-4) grid (4,3);
\node[draw] (a) at (0,0) {a};
\foreach \pos in {above,above right,right,below right,below,below left,left,above left}
\node[draw,\pos = of a] () {\pos};
\begin{scope}[yshift=8cm,node distance=2cm and 1cm]
\draw[help lines,step=5mm,gray!20] (-4,-4) grid (4,3);
\node[draw] (a) at (0,0) {a};
\foreach \pos in {above,above right,right,below right,below,below left,left,above left}
\node[draw,\pos = of a] () {\pos};
\end{scope}
\end{tikzpicture}
\end{document}
Explica pgfmanual
algumas outras opções disponíveis nesta biblioteca.
Referindo-nos agora ao exemplo específico da questão original, o exemplo a seguir mostra o código original em que tudo é feito manualmente, e a seguir o mesmo diagrama produzido utilizou a positioning
biblioteca e algumas das ideias mencionadas acima:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (a) at (0,0) {a};
\node (b) at (2,1) {b};
\draw (a) -- (0,1);
\draw (0,1) -- (b);
\begin{scope}[xshift=3cm,on grid]
\node (a) at (0,0) {a};
\node[above right= 1cm and 2cm of a] (b) {b};
\draw (a) |- (b);
\end{scope}
\end{tikzpicture}
\end{document}