TikZ 'auf halbem Weg', der über die 'to'-Operation Bescheid weiß

Nov 29 2020

Dies ist ungefähr das Gleiche wie / Follow-up: TikZ-Koordinate, die sich auf die letzte "aktuelle Koordinate" bezieht.

Die Antwort auf diese Frage schlägt vor, dass ich toanstelle von verwenden soll, --damit ich mich auf \tikztostartdie "aktuelle Koordinate" beziehen kann, die einwandfrei funktioniert, bis ich versuche, sie zu verwenden node[midway]. Erweiterung des ursprünglichen Beispiels:

\documentclass[tikz,margin=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
 \coordinate (origin) at (0,0);
 \draw (origin) -| (1,1) -- (1,1-|origin) % this uses --
   node [midway,above] {hi};
 \begin{scope}[xshift=2cm]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (1,1) to (\tikztostart-|origin) % this uses to
    node [midway,above] {hi};
 \end{scope}
\end{tikzpicture}
\end{document}

Ausgänge (der linke ist korrekt):

Es sieht für mich so aus, als midwaywüsste es nichts tound nimmt das midwayaus dem vorherigen Pfadsegment.

Wie kann ich midwaywissen, dass der Knoten an den toUnterpfad angehängt werden soll? Oder eine andere Antwort auf meine vorherige Frage, die diesen Fall behandelt?

Antworten

3 M.AlJumaily Nov 29 2020 at 11:00

Die Antwort von Ti k Zling ist großartig und außerdem können wir einfach die Reihenfolge der \node[]{...}: von tauschen

\draw (origin) -| (1,1) to (\tikztostart-|origin) node [midway,above] {hi};

zu

\draw (origin) -| (1,1) to node [midway,above] {hi} (\tikztostart-|origin);

Wir können sogar das herausnehmen, midwayda Ti k Z es standardmäßig auf die Mitte des Pfades zwischen den beiden Koordinaten einstellt, zwischen denen es liegt:

\draw (origin) -| (1,1) to node [above] {hi} (\tikztostart-|origin);

Ein weiterer Tipp ist die Verwendung des posSchlüssels, der ein Dezimalargument zwischen 0,0 und 1,0 für eine präzise Platzierung akzeptiert.

\documentclass[tikz,margin=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
 \coordinate (origin) at (0,0);
 \draw (origin) -| (1,1) -- (1,1-|origin)
   node [midway,above] {hi};
 \begin{scope}[xshift=2cm]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (2,1) to node [above] {hi} (\tikztostart-|origin);
 \end{scope}
  \begin{scope}[xshift=5cm]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (2,1) to node [pos=0.25, above] {hi} (\tikztostart-|origin);
 \end{scope}
\end{tikzpicture}
\end{document}
3 Noname Nov 29 2020 at 10:54

Ihre Beobachtung ist richtig. Es gibt bereits den Kommentar von M. Al Jumaily , der eine mögliche Lösung zeigt. Eine andere Lösung, die wohl bequemer ist, weil sie die Kantenbeschriftungen auch für geneigte Pfade gut platziert, ist die Verwendung des edge labelSchlüssels. Bitte beachten Sie, dass das Problem, auf das Sie stoßen, nichts damit zu tun hat, \tikztostartsondern nur mit to.

\documentclass[tikz,margin=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
 \begin{scope}[local bounding box=1]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (1,1) -- (1,1-|origin)
    node [midway,above] {hi};
 \end{scope}  
 \begin{scope}[xshift=2.5cm,local bounding box=2]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (1,1) coordinate (tmp) to (tmp-|origin)
   node [midway,above] {hi};
 \end{scope}
 \begin{scope}[xshift=5cm,local bounding box=3]
  \coordinate (origin) at (0,0);
  \draw (origin) -| (1,1) to[edge label'={hi}] (\tikztostart-|origin);
 \end{scope}
 %
 \path foreach \X [count=\Y] in {--,to,to w/ edge label}
 {(\Y.south) node[below=1em,font=\sffamily]{\X}};
\end{tikzpicture}
\end{document}