TikZ 'midway' yang tahu tentang opearasi 'to'

Nov 29 2020

Ini sama saja dengan / tindak lanjuti ini: Koordinat TikZ yang mengacu pada "koordinat saat ini" terakhir

Jawaban atas pertanyaan itu menyarankan saya untuk menggunakan toalih-alih --sehingga saya dapat menggunakan \tikztostartuntuk merujuk ke "koordinat saat ini", yang berfungsi dengan baik sampai saya mencoba menggunakannya node[midway]. Memperluas contoh aslinya:

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

keluaran (kiri benar):

Sepertinya saya midwaytidak tahu tentang todan mengambil midwaydari segmen jalur sebelumnya.

Bagaimana saya bisa midwaymengetahui bahwa itu seharusnya melampirkan node ke tosubpath? Atau jawaban lain untuk pertanyaan saya sebelumnya yang menangani kasus ini?

Jawaban

3 M.AlJumaily Nov 29 2020 at 11:00

Jawaban yang diberikan oleh Ti k Zling sangat bagus dan selanjutnya kita dapat dengan mudah menukar urutan \node[]{...}: dari

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

untuk

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

Kita bahkan dapat mengeluarkan midwaysebagaimana Ti k Z akan secara default menyesuaikannya ke tengah jalur, di antara dua koordinat yang diapit di antara:

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

Tip samping lainnya adalah menggunakan poskunci yang menerima argumen desimal antara 0,0 dan 1,0 untuk penempatan yang tepat.

\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

Pengamatan Anda benar. Sudah ada komentar M. Al Jumaily yang menunjukkan satu solusi yang mungkin. Solusi lain, yang bisa dibilang lebih nyaman karena menempatkan label tepi dengan baik juga untuk jalur miring, adalah dengan menggunakan edge labelkunci. Harap dicatat bahwa masalah yang Anda temui tidak ada hubungannya \tikztostarttetapi hanya dengan 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}