TikZ 'midway' que sabe de la operación 'to'

Nov 29 2020

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 tolugar de --para poder usar \tikztostartpara 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 midwayno lo sabe toy toma el midwaydel segmento de ruta anterior.

¿Cómo puedo hacer midwaysaber que se supone que debe adjuntar el nodo a la tosubruta? ¿O otra respuesta a mi pregunta anterior que resuelva este caso?

Respuestas

3 M.AlJumaily Nov 29 2020 at 11:00

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 midwayya 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 posclave 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}
3 Noname Nov 29 2020 at 10:54

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 labelllave. Tenga en cuenta que el problema que encuentra no tiene nada que ver, \tikztostartsino 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}