TikZ 'на полпути', который знает об операции 'to'

Nov 29 2020

Это вроде того же, что и / после этого: координата TikZ, которая относится к последней «текущей координате»

Ответ на этот вопрос предлагает мне использовать toвместо, --чтобы я мог использовать \tikztostartдля ссылки на «текущую координату», которая работает нормально, пока я не попытаюсь использовать node[midway]. Расширяя исходный пример:

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

выходы (левый правильный):

Мне кажется, что midwayон не знает toи берет midwayиз предыдущего сегмента пути.

Как я могу midwayузнать, что он должен присоединить узел к toподпутью? Или другой ответ на мой предыдущий вопрос, который справляется с этим случаем?

Ответы

3 M.AlJumaily Nov 29 2020 at 11:00

Ответ, данный Ti k Zling , великолепен, и, кроме того, мы можем просто поменять порядок \node[]{...}: от

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

к

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

Мы даже можем взять, midwayпоскольку Ti k Z по умолчанию настроит его на середину пути, между двумя координатами, которые он зажат между:

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

Другой боковой совет - использовать posключ, который принимает десятичный аргумент от 0,0 до 1,0 для точного размещения.

\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

Ваше наблюдение верно. Уже есть комментарий М. Аль-Джумали , который показывает одно возможное решение. Другое решение, которое, возможно, более удобно, поскольку оно хорошо размещает метки краев даже для наклонных путей, - это использовать edge labelключ. Обратите внимание, что проблема, с которой вы столкнулись, не имеет ничего общего, \tikztostartа на самом деле только 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}