`\node` と `\coordinate` の実装の違いを表示

`\node` と `\coordinate` の実装の違いを表示

2 つの平行線分を描画するための環境は 4 つありますTikZ。すべての環境で、最初の線分の 1 つの端点は または で指定され\coordinate(A)、 2 番目の線分の 1 つの端点はまたは\node(A){$A$};で指定されます。\coordinate(B)\node(B){$B$};

最初に点 A が指定されますが、座標は指定されていません。TikZデフォルトでは原点に配置されますか? 2 番目のグラフではコマンド があり\node at (0,0) {$O$};、A の座標に「O」と入力されているため、原点に配置されているようです。

「A」の位置を除いて、2 番目と 3 番目の表示は同じです。2 番目の表示では、\coordinate(A);とを使用して\node at (0,0) {$A$};「A」の位置を決め、3 番目の表示では、を使用して\node[inner sep=0pt,outer sep=0pt] (A){$A$};「A」の位置を決めます。2 番目の表示では、「A」は (0,0) の中央に配置されているように見えますが、3 番目の表示では、「A」は (0,0) の左側にタイプセットされているように見えます。なぜ違いがあるのでしょうか。

3 番目と 4 番目のディスプレイのコーディングの唯一の違いは、inner sep=0pt3 番目のディスプレイに「A」をタイプセットするためのノード コマンドのオプションと、inner sep=1.5pt4 番目のディスプレイに「A」をタイプセットするためのノード コマンドのオプションがあることです。なぜ、3 番目のディスプレイと比較して、4 番目のディスプレイの「すべて」がシフトするのでしょうか。

\documentclass{amsart}
\usepackage{tikz}\usetikzlibrary{calc,positioning}
\begin{document}

    \begin{tikzpicture}
    \coordinate(A);
    \coordinate[right=of A](B);
    \draw[yellow, line width=2pt] (A) -- ++(1,1);
    \draw[red] (B) -- ++(1,1);
    \end{tikzpicture}
    \vskip1.25mm

    \begin{tikzpicture}
    \coordinate(A);
    \coordinate[right=of A](B);
    \draw[yellow, line width=2pt] (A) -- ++(1,1);
    \draw[red] (B) -- ++(1,1);
    \node at (0,0) {$A$};
    \end{tikzpicture}
    \vskip1.25mm

    \begin{tikzpicture}
    \node[inner sep=0pt,outer sep=0pt] (A){$A$};
    \coordinate[right=of A](B);
    \draw[yellow, line width=2pt] (A) -- ++(1,1);
    \draw[red] (B) -- ++(1,1);
    \end{tikzpicture}
    \vskip1.25mm

    \begin{tikzpicture}
    \node[inner sep=1.5pt,outer sep=0pt] (A) {$A$};
    \coordinate[right=of A] (B);
    \draw[yellow, line width=2pt] (A) -- ++(1,1);
    \draw[red] (B) -- ++(1,1);
    \end{tikzpicture}

\end{document}

答え1

以下の内容は役に立ちますか?

\documentclass[tikz,border=5pt,mult]{standalone}
\usetikzlibrary{positioning}

\begin{document}

  \begin{tikzpicture}[every node/.style={draw}]
    \draw [help lines] (-1,-1) grid (2,2);
    \coordinate(A);
    \coordinate[right=of A](B);
    \draw [blue] (A) -- ++(1,1);
    \draw (B) -- ++(1,1);
    \node at (0,0) {$A$};
    \path [fill=blue] (0,0) circle (1.5pt);
  \end{tikzpicture}

  \begin{tikzpicture}[every node/.style=draw]
    \draw [help lines] (-1,-1) grid (2,2);
    \node[inner sep=0pt,outer sep=0pt] (A){$A$};
    \coordinate[right=of A](B);
    \draw [blue] (A) -- ++(1,1);
    \draw (B) -- ++(1,1);
    \path [fill=blue] (0,0) circle (1.5pt);
  \end{tikzpicture}

\end{document}

ケース1

最初のケースでは、青い線は座標 から描かれABこの座標を基準として配置されます。座標は点なので、これは から描画することになります(0,0)

ケース2

2 番目のケースでは、青い線はノード から描かれABノードを基準として配置されます。TikZ は、ノードの境界上の最も近い点から描画または計測すると想定します。 がAゼロで であっinner sepてもouter sep、スペースを占める文字が含まれているため、正のサイズを持ちますA。したがって、このケースでは、線は の少し上から少し右に描かれ(0,0)Bの少し右の点を基準として配置されます(0,0)

アンカーを指定することで、座標を使用する効果をエミュレートできますcenter

  \begin{tikzpicture}[every node/.style=draw]
    \draw [help lines] (-1,-1) grid (2,2);
    \node[inner sep=0pt,outer sep=0pt] (A){$A$};
    \coordinate[right=of A.center](B);
    \draw [blue] (A.center) -- ++(1,1);
    \draw (B) -- ++(1,1);
    \path [fill=blue] (0,0) circle (1.5pt);
  \end{tikzpicture}

アンカーを使用して座標をエミュレートする

あるいは、ノードAにコンテンツがなく、ゼロの場合sep、基本的にスペースを占有しないため、座標と同様に動作します。

  \begin{tikzpicture}[every node/.style=draw]
    \draw [help lines] (-1,-1) grid (2,2);
    \node[inner sep=0pt,outer sep=0pt] (A){};
    \coordinate[right=of A](B);
    \draw [blue] (A) -- ++(1,1);
    \draw (B) -- ++(1,1);
    \node at (A) {$A$};
    \path [fill=blue] (0,0) circle (1.5pt);
  \end{tikzpicture}

空のノードを使用して座標をエミュレートする

いずれの場合も、はA原点(0,0)(青い点でマーク)を中心としていることに注意してください。

関連情報