Combining calc and perpendicular coordinates in tikz
The syntax of the line to
operation given in the manual is to place |-
between two coordinates:
Sometimes you want to connect two points via straight lines that are only horizontal and vertical. For this, you can use two path construction operations.
\path . . . -|< coordinate or cycle> . . . ;
This operation means “first horizontal, then vertical.”
Following by these example:
\begin{tikzpicture}
\draw (0,0) node(a) [draw] {A} (1,1) node(b) [draw] {B};
\draw (a.north) |- (b.west);
\draw[color=red] (a.east) -| (2,1.5) -| (b.north);
\end{tikzpicture}
and these drawing:
Thus, this two-path operation is not intended to make a translation from one point to another. This is a handy shortcut when you need to draw horizontal lines followed by vertical lines or vice versa.
You just have to write (syntactically) in your code:
\draw ($ (node1.south) + (1,0) $) to ($ (node1.south) + (1,0) $) |- (node2.north);
instead of
\draw ($ (node1.south) + (1,0) $) to ( ( ( $ (node1.south) + (1,0) $) |- node2.north);`
Your code becomes like this:
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node at (0, 0) (node1) {Hello};
\node at (0, -2) (node2) {World};
% working:
%\draw ($ (node1.south) + (1,0) $) to ( node1.south |- node2.north);
% now working too:
\draw ($ (node1.south) + (1,0) $) to ($ (node1.south) + (1,0) $) |- (node2.north);
\end{tikzpicture}
\end{document}
To have the same path as the one you want, you must build your path as indicated by @marmot or @ignasi.
Just for completeness: a version that is really the equivalent of the first. AndreC's nice answer is correct but I don't see how the second path, which has a corner, is the shifted version of the first one.
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node at (0, 0) (node1) {Hello};
\node at (0, -2) (node2) {World};
% working:
\draw ($ (node1.south) + (1,0) $) to ( node1.south |- node2.north);
% not working:
\draw ($ (node1.south) + (1,0) $) to ([xshift=1cm] node1.south |- node2.north);
\end{tikzpicture}
\end{document}
You can always declare an auxiliary coordinate and use it. This way you don't need to remember which is the working syntax ;-)
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node at (0, 0) (node1) {Hello};
\node at (0, -2) (node2) {World};
% working:
\draw ($ (node1.south) + (1,0) $) to ( node1.south |- node2.north);
% working:
\draw ($ (node1.south) + (1,0) $) coordinate (aux) to (aux |- node2.north);
\end{tikzpicture}
\end{document}