Unterschiede bei der Implementierung von `\node` und `\coordinate` auf dem Display

Unterschiede bei der Implementierung von `\node` und `\coordinate` auf dem Display

Hier sind vier TikZUmgebungen zum Zeichnen von zwei parallelen Liniensegmenten. In allen Umgebungen wird ein Endpunkt des ersten Liniensegments entweder mit \coordinate(A)oder angegeben \node(A){$A$};und ein Endpunkt des zweiten Liniensegments entweder mit \coordinate(B)oder angegeben \node(B){$B$};.

Punkt A wird zuerst angegeben; es sind keine Koordinaten dafür angegeben. Wird TikZer standardmäßig am Ursprung platziert? Er scheint am Ursprung platziert zu sein, da ich im zweiten Diagramm den Befehl habe \node at (0,0) {$O$};und „O“ an der Koordinate für A gesetzt ist.

Abgesehen von der Positionierung von „A“ sind die zweite und dritte Anzeige identisch. In der zweiten Anzeige verwende ich \coordinate(A);und , \node at (0,0) {$A$};um „A“ zu positionieren, und in der dritten Anzeige verwende ich , \node[inner sep=0pt,outer sep=0pt] (A){$A$};um „A“ zu positionieren. In der zweiten Anzeige scheint das „A“ auf (0,0) zentriert zu sein, und in der dritten Anzeige scheint das „A“ links von (0,0) gesetzt zu sein. Warum gibt es einen Unterschied?

Der einzige Unterschied in der Kodierung für die dritte und vierte Anzeige besteht darin, dass ich inner sep=0ptim Knotenbefehl die Option habe, „A“ in der dritten Anzeige zu setzen, und inner sep=1.5ptim Knotenbefehl die Option, „A“ in der vierten Anzeige zu setzen. Warum verschiebt sich dadurch „alles“ in der vierten Anzeige im Vergleich zur dritten Anzeige?

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

Antwort1

Hilft das Folgende?

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

Fall 1

Im ersten Fall wird die blaue Linie von der Koordinate aus gezeichnet Aund Brelativ zu dieser Koordinate positioniert. Da es sich bei Koordinaten um Punkte handelt, entspricht dies dem Zeichnen von (0,0).

Fall 2

Im zweiten Fall wird die blaue Linie vom Knoten gezeichnet Aund Brelativ zum Knoten positioniert. TikZ geht davon aus, dass Sie vom nächsten Punkt an der Grenze des Knotens aus zeichnen oder messen möchten. Selbst wenn ANull inner sepund hat outer sep, hat es immer noch eine positive Größe, da es den Buchstaben enthält A, der Platz einnimmt. In diesem Fall wird die Linie also etwas oberhalb und etwas rechts von gezeichnet (0,0)und Brelativ zu einem Punkt etwas rechts von positioniert (0,0).

Sie können den Effekt der Verwendung einer Koordinate emulieren, indem Sie den centerAnker angeben:

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

Verwenden eines Ankers zum Emulieren einer Koordinate

Wenn der Knoten hingegen Akeinen Inhalt und den Wert 0 (null) hat sep, verhält er sich ähnlich wie eine Koordinate, da er grundsätzlich keinen Platz einnimmt:

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

Verwenden eines leeren Knotens zum Emulieren einer Koordinate

Beachten Sie, dass der AMittelpunkt (0,0)in jedem Fall der Ursprung ist (durch den blauen Punkt markiert).

verwandte Informationen