Betrachten Sie dieses Beispiel:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\starty{3}
\def\length{1};
\coordinate(a1) at (1, \starty);
\coordinate(b1) at ($(a1) + (0, -\length)$);
\coordinate(a2) at (2, \starty - \length);
\coordinate(b2) at ($(a2) + (0, \length)$);
\draw[red, ->](a1) -- (b1);
\draw[red, ->](b2) -- (a2);
\draw (0, 0) -- (3, 0);
\draw (0, 0) -- (0, 3);
\end{tikzpicture}
\end{document}
Das Ergebnis sind 2 horizontal verschobene Pfeile, wie es sich bei einer einfachen arithmetischen Betrachtung ergeben sollte:
Wenn ich jedoch ersetze
\def\length{1};
von
\def\length{1cm};
Das Ergebnis ist unerwartet:
Was verursacht die Diskrepanz und wie kann ich dieses Beispiel beheben?
Antwort1
Das Problem besteht darin, dass Sie Ausdrücke mit und ohne Einheiten hinzufügen/kombinieren. TikZ unterscheidet zwischen Ausdrücken mit und ohne Einheiten. Ich empfehle die Lektürediese Antwort. Wenn Sie haben
\path (x,y) coordinate (p);
mit x
und y
dimensionslos, dann p
liegt der Punkt bei x*(x unit vector)+y*(y unit vector)
. Die Anfangswerte dieser Einheitsvektoren sind (1cm,0)
bzw. (0,1cm)
, aber Sie können sie ändern, z. B. mit x=(1cm,0.2cm)
. (Diese Änderungen sind schwierig, wenn Sie keine Einheiten angeben, denn wenn man verwendet x={({cos(20)},{(sin(20)})},y={({cos(20+90)},{(sin(20+90)})}
, erhält man nicht einfach ein gedrehtes Koordinatensystem. Vielmehr y=...
wird beim Analysieren bereits das neu definierte verwendet x unit vector
. Aus diesem Grund fügen Pakete wie tikz-3dplot
Einheiten an, um die gedrehten Koordinatensysteme zu definieren.)
Wenn Sie haben
\path (x,y) coordinate (p);
wobei x
und y
Einheiten tragen, dann p
liegt der Punkt x
bei rechts und y
oben (Modulo-Transformationen wie Rotationen natürlich). Für die Anfangswerte der Einheitsvektoren
\path (1,2) coordinate (p);
Und
\path (1cm,2cm) coordinate (p);
führen zu den gleichen Ergebnissen, aber im Allgemeinen ist das nicht der Fall. Sie können auch eine Koordinate mit Einheiten und die andere ohne haben, z. B.
\path (1cm,2) coordinate (p);
führt zu einem Punkt 1cm
nach rechts, der um das Doppelte verschoben ist y unit vector
.
Kommen wir nun zu Ihrer Frage, wenn Sie Ti präsentieren,kZ eine Mischung
\path (a+b,y) coordinate (p);
wo a
trägt Einheiten undb
nicht, dann TikZ wird Einheiten anfügen pt
. b
So zum Beispiel in
\path (1cm+1,2) coordinate (p);
p
hat eine x
Koordinate von 1cm+1pt
, während in
\path (1+1,2) coordinate (p);
Die Koordinate beträgt x
2 mal x unit vector
.
Um dies zu veranschaulichen, vergleiche ich die Koordinaten Ihres MWE mit denen, die ich pt
an die dimensionslosen Ausdrücke angehängt habe, und zeige, dass sie übereinstimmen.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\subsection*{No units}
\begin{tikzpicture}
\def\starty{3}
\def\length{1};
\coordinate(a1) at (1, \starty);
\coordinate(b1) at ($(a1) + (0, -\length)$);
\coordinate(a2) at (2, \starty - \length);
\coordinate(b2) at ($(a2) + (0, \length)$);
\draw[red, ->](a1) -- (b1);
\draw[red, ->](b2) -- (a2);
\draw (0, 0) -- (3, 0);
\draw (0, 0) -- (0, 3);
\end{tikzpicture}
\subsection*{Mix of expressions with and without units}
\begin{tikzpicture}
\def\starty{3}
\def\length{1cm};
\coordinate(a1) at (1, \starty);
\coordinate(b1) at ($(a1) + (0, -\length)$);
\coordinate(a2) at (2, \starty - \length);
\coordinate(b2) at ($(a2) + (0, \length)$);
\draw[red, ->](a1) -- (b1);
\draw[red, ->](b2) -- (a2);
\draw (0, 0) -- (3, 0);
\draw (0, 0) -- (0, 3);
\draw[<->,blue] (2,3pt-1cm) -- ++ (1,0) -- (2,3pt);
\end{tikzpicture}
\end{document}