declarar nodos en un comando \draw en relación con otros nodos

declarar nodos en un comando \draw en relación con otros nodos

¿Por qué no funciona la línea comentada? Me gustaría colocar un nodo (en realidad, uno anónimo) declarado en un comando \draw.

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, calc}
\begin{document}
\title{arrow test}
\begin{tikzpicture}[>=latex,
  font=\sffamily,
]

\node[draw, thin, black, fill=green, rectangle] (P1) at (0cm,0cm){};
\node[draw, thin, black, fill=red, rectangle, right=1cm of P1] (P2){};
\node[draw, thin, black, fill=green, rectangle] (P3) at (0cm,0.5cm){};
\draw[->] (P1) -- (P2);
%\draw[->] (P3) to node[draw, thin, black, fill=red, rectangle, right=1cm of P3](P4){};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta1

Pruebe el siguiente MWE:

\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{positioning}

\begin{document}
\title{arrow test}
\begin{tikzpicture}[%>=latex,
    node distance = 10mm,
box/.style = {rectangle, draw, thin, fill=#1, font=\sffamily},
                    ]
\node[box=green]            (P1) at (0cm,0cm)  {};
\node[box=red, right=of P1] (P2)    {};
\node[box=green]            (P3) at (0cm,1cm)   {};

\draw[->] (P1) -- (P2);
\draw[->] (P3) node[box=red, right=of P3] (P4) {} -- (P4);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Las coordenadas no se pueden "arrancar"... primero debe definirlas y luego usarlas. Compara la última línea en tu MWE y en el mío.

Respuesta2

Esto es casi lo que quieres, el defecto es que la distancia de 1 cm se calcula desde el centro del primer nodo (por lo que en el ejemplo los dos nodos de la derecha no están alineados correctamente)

 \documentclass[border=3mm]{standalone}
 \usepackage{tikz}
 \usetikzlibrary{positioning, calc}
 \begin{document}
 \title{arrow test}
 \begin{tikzpicture}[>=latex,
   font=\sffamily,
 ]

 \node[draw, thin, black, fill=green, rectangle] (P1) at (0cm,0cm){};
 \node[draw, thin, black, fill=red, rectangle, right=1cm of P1] (P2){};
 \node[draw, thin, black, fill=green,opacity=0.5, rectangle] (P3) at (0cm,0.5cm){};
 \draw[->] (P1) -- (P2);
 \draw[->] (P3) -- +(1cm,0)  node[draw, thin, black, fill=red, rectangle, right] (P4) {};

 % \draw[->] (0,0.5cm) node[draw, thin, black, fill=green,opacity=0.5,
 % rectangle,left] {} -- +(1cm,0) node[draw, thin, black, fill=red, rectangle,
 % right] {};
 \end{tikzpicture}
 \end{document}

Entonces, en cierto sentido, es posible dibujar nodos anónimos, el problema es que funciona solo para dos nodos, ya que necesitaría cambiar el punto de partida de una ruta sucesiva, lo cual no es posible si el nodo es anónimo.

información relacionada