TikZ 'midway' que conhece a operação 'to'

Nov 29 2020

Este é mais ou menos o mesmo que o seguinte: Coordenada TikZ que se refere à última "coordenada atual"

A resposta a essa pergunta sugere que eu use em tovez de --para que possa usar \tikztostartpara se referir à "coordenada atual", que funciona bem até eu tentar usar node[midway]. Expandindo o exemplo original:

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

saídas (o esquerdo está correto):

Parece-me que midwaynão sabe toe tira do midwaysegmento de caminho anterior.

Como posso midwaysaber se ele deve anexar o nó ao tosubcaminho? Ou outra resposta à minha pergunta anterior que lida com este caso?

Respostas

3 M.AlJumaily Nov 29 2020 at 11:00

A resposta dada por Ti k Zling é ótima e, além disso, podemos simplesmente trocar a ordem de \node[]{...}: de

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

para

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

Podemos até tirar o as midwayTi k Z, por padrão, ajustá-lo para o meio do caminho, entre as duas coordenadas está imprensado entre:

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

Outra dica lateral é usar a poschave que aceita um argumento decimal entre 0,0 e 1,0 para posicionamento preciso.

\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

Sua observação está correta. Já existe o comentário de M. Al Jumaily , que mostra uma solução possível. Outra solução, que é indiscutivelmente mais conveniente porque posiciona bem os rótulos de borda também para caminhos inclinados, é usar a edge labelchave. Observe que o problema que você encontra não tem nada a ver, \tikztostartmas apenas com 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}