TikZ 'midway' que sabe de la operación 'to'
Esto es algo parecido a / seguimiento de esto: coordenada TikZ que se refiere a la última "coordenada actual"
La respuesta a esa pregunta me sugiere que use en to
lugar de --
para poder usar \tikztostart
para referirme a la "coordenada actual", que funciona bien hasta que intento usar node[midway]
. Ampliando el ejemplo 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}
salidas (la de la izquierda es correcta):

Me parece que midway
no lo sabe to
y toma el midway
del segmento de ruta anterior.
¿Cómo puedo hacer midway
saber que se supone que debe adjuntar el nodo a la to
subruta? ¿O otra respuesta a mi pregunta anterior que resuelva este caso?
Respuestas
La respuesta dada por Ti k Zling es excelente y, además, simplemente podemos intercambiar el orden de \node[]{...}
: de
\draw (origin) -| (1,1) to (\tikztostart-|origin) node [midway,above] {hi};
a
\draw (origin) -| (1,1) to node [midway,above] {hi} (\tikztostart-|origin);
Incluso podemos sacar el midway
ya que Ti k Z lo ajustará por defecto a la mitad del camino, entre las dos coordenadas que se encuentran entre:
\draw (origin) -| (1,1) to node [above] {hi} (\tikztostart-|origin);
Otro consejo adicional es usar la pos
clave que acepta un argumento decimal entre 0.0 y 1.0 para una ubicación precisa.

\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}
Tu observación es correcta. Ya existe el comentario de M. Al Jumaily , que muestra una posible solución. Otra solución, que podría decirse que es más conveniente porque coloca bien las etiquetas de los bordes también para caminos inclinados, es usar la edge label
llave. Tenga en cuenta que el problema que encuentra no tiene nada que ver, \tikztostart
sino realmente solo 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}
