Как добиться относительного позиционирования в tikz

Как добиться относительного позиционирования в tikz

Возможный дубликат:
Относительное расположение узлов в TikZ

Я создаю древовидную диаграмму в tikz и знаю, что вычислять каждую точку было бы глупо. По этой причине я хочу разместить вещи в относительном положении друг к другу.

Итак, вот два вопроса:

  1. Как определить второй узел в этом простом примере?

    \begin{tikzpicture}  
    \node (a) at (0,0) {};  
    \node (b) at (2,1) {};  
    \end{tikzpicture}  
    
  2. Как заменить эту команду строки на ту, которая будет иметь относительное позиционирование ( aи bсозданы ли они выше)?

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

Пожалуйста, дайте мне знать, если что-то непонятно.

решение1

Как уже упоминалось в комментариях, вы можете использовать библиотеку positioning; вот простой пример, иллюстрирующий доступные опции при использовании, например, above left(одна и та же диаграмма повторяется дважды; во второй раз опция on gridактивируется):

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

введите описание изображения здесь

Значения параметров 2cmи 3cmможно изменять относительно желаемого местоположения, например, -2cmи -3cmдля зеркального отображения местоположения в локальной системе координат, где aнаходится центральная точка.

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

Теперь небольшой пример, показывающий node distanceключ и некоторые другие опции 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}

введите описание изображения здесь

Объясняются pgfmanualнекоторые другие возможности, доступные в этой библиотеке.

Возвращаясь к конкретному примеру по исходному вопросу, в следующем примере показан исходный код, в котором все делается вручную, а затем та же самая диаграмма, созданная с использованием библиотеки positioningи некоторых из упомянутых выше идей:

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

введите описание изображения здесь

Связанный контент