Возможный дубликат:
Относительное расположение узлов в TikZ
Я создаю древовидную диаграмму в tikz и знаю, что вычислять каждую точку было бы глупо. По этой причине я хочу разместить вещи в относительном положении друг к другу.
Итак, вот два вопроса:
Как определить второй узел в этом простом примере?
\begin{tikzpicture} \node (a) at (0,0) {}; \node (b) at (2,1) {}; \end{tikzpicture}
Как заменить эту команду строки на ту, которая будет иметь относительное позиционирование (
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}