¿Cómo puedo lograr un posicionamiento relativo en tikz

¿Cómo puedo lograr un posicionamiento relativo en tikz

Posible duplicado:
Posicionamiento relativo de nodos en TikZ

Estoy creando un diagrama de árbol en tikz y sé que calcular cada punto sería una tontería. Por esa razón, quiero colocar las cosas en una posición relativa entre sí.

Entonces, aquí hay dos preguntas:

  1. ¿Cómo puedo definir el segundo nodo en este sencillo ejemplo?

    \begin{tikzpicture}  
    \node (a) at (0,0) {};  
    \node (b) at (2,1) {};  
    \end{tikzpicture}  
    
  2. ¿Cómo puedo reemplazar este comando de línea con uno que tendrá un posicionamiento relativo ( ay bson los creados anteriormente)?

    \draw (a) -- (0,1);
    \draw (0,1) -- (b);
    

Por favor, avíseme si algo no está claro.

Respuesta1

Como se mencionó en los comentarios, puede utilizar la positioningbiblioteca; Aquí hay un ejemplo simple que ilustra las opciones disponibles al usar, por ejemplo, above left(el mismo diagrama se repite dos veces; la segunda vez que on gridse activa la opción):

\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}

ingrese la descripción de la imagen aquí

Los valores de los parámetros 2cmy 3cmse pueden modificar en relación con la ubicación deseada, por ejemplo, -2cmy -3cmpara reflejar la ubicación en el sistema de coordenadas local donde aestá el punto central.

\node[above right = 2cm and 3cm of a] 
\node[above right = -2cm and -3cm of a] 

Ahora un pequeño ejemplo que muestra la node distanceclave y algunas opciones además 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}

ingrese la descripción de la imagen aquí

Explica pgfmanualalgunas otras opciones disponibles a través de esta biblioteca.

Refiriéndose ahora al ejemplo específico de la pregunta original, el siguiente ejemplo muestra el código original en el que todo se hace manualmente, y luego el mismo diagrama producido utilizó la positioningbiblioteca y algunas de las ideas mencionadas anteriormente:

\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}

ingrese la descripción de la imagen aquí

información relacionada