Positionierung des Knotens mit zwei Messungen

Positionierung des Knotens mit zwei Messungen

Im pgf-Handbuch findet sich in Kapitel 17, Abschnitt 5.3 folgendes Zitat („Mit dieser Option“ wird die Angabe der Position eines Knotens durch zwei Messungen gemeint.):

Die Auswirkung dieser Option ist folgende. Zuerst (<number or dimension 2>, <number or dimension 1>)wird der Punkt nach den normalen Regeln zur Berechnung einer solchen Koordinate berechnet, was eine Position ergibt. Dann wird der Knoten um die vertikale Komponente dieses Punktes verschoben. Der Anker wird nach Süden gesetzt.

Ich stelle das im Handbuch bereitgestellte Beispiel zur Verfügung. Veranschaulicht das Beispiel „diese Option“? Wie ändert sich and 3mmdie Position des Knotens?

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,shapes,positioning}

\begin{document}

\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\node at (1,1) [above=0.2 and 3mm, draw] {over};
\end{tikzpicture}

\end{document}

Möchte jemand ein besseres veranschaulichendes Beispiel anbieten?

Antwort1

Die Option funktioniert nur, wenn Sie above right, above leftoder below right, hinzufügen below left. Außerdem erhalten Sie andere Ergebnisse, wenn Sie das weglassen and 3mm. Vergleichen Sie Folgendes:

  • [above right=0.2, draw]

    Bildbeschreibung hier eingeben

  • [above right=0.2 and 3mm, draw]

    Bildbeschreibung hier eingeben

Wie im Zitat erklärt, wird der Anker südlich des Knotens gesetzt. Der Anker ist das, was „verschoben“ wird. Der Rest der Form folgt natürlich. Wenn Sie nicht wissen, was Anker sind, lesen Sie den Abschnitt 49 „Formen“ imTikz-Pgf-Handbuch(Seite 477). Wenn Sie möchten, können Sie einen anderen Anker setzen, indem Sie den Schlüssel hinzufügen anchor=northoder anchor=north westin den Optionen.

Ein Kreis würde genauso funktionieren, außer dass der Anker auf den Mittelpunkt des Kreises gesetzt wird, nicht auf Süden. Wenn Sie Ihr Beispiel so ändern \node at (1,1) [circle, draw] {over};, dass es hat, sehen Sie, dass es genau in der Mitte positioniert ist, aber wenn Sie hinzufügen anchor=south, wird es nach oben verschoben, sodass sein Süden mit dem Mittelpunkt des Rasters übereinstimmt.

Antwort2

Ich denke, es besteht noch weiterer Klärungsbedarf. Zunächst einmal, warum es keinen Syntaxfehler gibt. Das liegt daran, dass dadurch viel if then-Syntax gespart wird. Sehen Sie sich den internen Code für diese Optionen im archaischen Stil von an \tikzoption(was äquivalent zu ist \tikzset).

\tikzoption{above}[]{\def\tikz@anchor{south}\tikz@possibly@transform{y}{}{#1}}
\tikzoption{below}[]{\def\tikz@anchor{north}\tikz@possibly@transform{y}{-}{#1}}
\tikzoption{above left}[]%
  {\def\tikz@anchor{south east}%
    \tikz@possibly@transform{x}{-}{#1}\tikz@possibly@transform{y}{}{#1}}

Nun müssen Sie nicht wissen, was es mit möglichen Transformationen usw. macht. Sie bemerken aber, dass, wenn Sie „oben“, „unten“ usw. angeben, die X-Informationen verworfen werden, selbst wenn Sie explizit 0,2 und 3 mm angeben.

Sie können auch die umgekehrte Verankerung in der Praxis beobachten: Sie wählen eine Option und diese wählt die entgegengesetzte Kompassrichtung für die Verankerung. Wenn Sie dies überschreiben möchten, müssen Sie „explicit“ anchor=<foo>zu Ihren Optionen hinzufügen.

Durch die Aktivierung eines feineren Rasters können Sie die Positionierung tatsächlich besser erkennen

%\usetikzlibrary{positioning}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [circle,above=0.2 and 3mm, draw] {over};
\end{tikzpicture}

Bildbeschreibung hier eingeben

Und auch oben rechts erhalten Sie die genaue Verschiebungsmenge

%\usetikzlibrary{positioning,shapes.geometric}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [ellipse,above right=0.2 and 3mm, draw] {over};
\fill[red] (1,1) ++(3mm,2mm) circle(0.5pt);
\end{tikzpicture}

Bildbeschreibung hier eingeben

verwandte Informationen