TikZ „w połowie”, który wie o opearowaniu „do”

Nov 29 2020

To jest mniej więcej takie samo jak / kontynuacja: Współrzędna TikZ, która odnosi się do ostatniej "aktualnej współrzędnej"

Odpowiedź na to pytanie sugeruje, żebym używał tozamiast, --aby móc \tikztostartodwołać się do „bieżącej współrzędnej”, która działa dobrze, dopóki nie spróbuję jej użyć node[midway]. Rozwijając oryginalny przykład:

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

wyjścia (lewe jest poprawne):

Wydaje mi się, że midwaynie wie o tym toi bierze midwayz poprzedniego segmentu ścieżki.

Skąd mogę midwaywiedzieć, że ma on dołączyć węzeł do tościeżki podrzędnej? Albo inna odpowiedź na moje poprzednie pytanie, która dotyczy tego przypadku?

Odpowiedzi

3 M.AlJumaily Nov 29 2020 at 11:00

Odpowiedź udzielona przez Ti k Zlinga jest świetna, a ponadto możemy po prostu zamienić kolejność \node[]{...}: z

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

do

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

Możemy nawet wyjąć, midwayponieważ Ti k Z domyślnie dostosuje go do środka ścieżki, między dwiema współrzędnymi, umieszczonymi między:

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

Kolejną wskazówką jest użycie posklucza, który akceptuje argument dziesiętny z przedziału od 0,0 do 1,0 w celu precyzyjnego umieszczenia.

\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

Twoja obserwacja jest poprawna. Jest już komentarz M. Al Jumaily , który pokazuje jedno możliwe rozwiązanie. Innym rozwiązaniem, które jest prawdopodobnie wygodniejsze, ponieważ ładnie umieszcza etykiety krawędzi również na pochyłych ścieżkach, jest użycie edge labelklucza. Zwróć uwagę, że napotkany problem nie ma nic wspólnego, \tikztostarta tak naprawdę tylko 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}