tikzで相対的な位置決めを実現するにはどうすればいいですか?

tikzで相対的な位置決めを実現するにはどうすればいいですか?

重複の可能性あり:
TikZ におけるノードの相対的な配置

私は tikz でツリー ダイアグラムを作成していますが、各ポイントを計算するのは無意味だとわかっています。そのため、物事を互いの相対的な位置に配置したいと考えています。

では、2つの質問です。

  1. この簡単な例で 2 番目のノードをどのように定義すればよいでしょうか?

    \begin{tikzpicture}  
    \node (a) at (0,0) {};  
    \node (b) at (2,1) {};  
    \end{tikzpicture}  
    
  2. この行コマンドを、相対的な位置付けを持つコマンド(上記で作成されたもの)に置き換えるにはどうすればよいですab?

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

不明な点がありましたらお知らせください。

答え1

コメントで述べたように、positioningライブラリを使用できます。以下は、たとえば、使用時に使用できるオプションを示す簡単な例ですabove left(同じ図が 2 回繰り返され、2 回目に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}

ここに画像の説明を入力してください

関連情報