Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I have three nodes and want to connect two nodes with an arrow that is bent like in my paint drawing. I also need to include some text above the arrow.

enter image description here

This is my stripped down code for generating the nodes:

\documentclass{standalone}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node[draw=none,fill=none, text height=1em] (1) {test1};
\node[draw=none,fill=none, text height=1em] (2) [right=.6cm of 1 ]{test2};
\node[draw=none,fill=none, text height=1em] (3) [right=.6cm of 2]{test3};
\end{tikzpicture}
\end{document}

In the past, I've connected nodes with a curve, like this:

\path[every node/.style={font=\sffamily\small}]
    (3)edge [bend angle=90] node[above left] {foo} (1);

Unfortunately I can't adapt this code to look like the picture above.

I guess I could insert "invisible" nodes to fake the corners of the arrow, but TikZ might have a simple option for my desired output, that I wasn't able to find?

share|improve this question
    
You might find interesting Is there a TikZ equivalent to the PSTricks \ncbar command? –  Claudio Fiandrino May 15 at 12:28

3 Answers 3

up vote 5 down vote accepted

This is a possible solution where the vertical height due to +(0,1) can be changed to suit one's need.

enter image description here

Code

\documentclass[border=10pt]{standalone}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
\node[draw=none,fill=none, text height=1em] (1) {test1};
\node[draw=none,fill=none, text height=1em] (2) [right=.6cm of 1 ]{test2};
\node[draw=none,fill=none, text height=1em] (3) [right=.6cm of 2]{test3};
\draw (3.north) -- +(0,1)-| node[above right]{Text starts from there} (1);
\end{tikzpicture}
\end{document}
share|improve this answer
\usetikzlibrary{arrows,calc}
\usetikzlibrary{positioning}
\begin{tikzpicture}
\node[draw=none,fill=none, text height=1em] (1) {test1};
\node[draw=none,fill=none, text height=1em] (2) [right=.6cm of 1 ]{test2};
\node[draw=none,fill=none, text height=1em] (3) [right=.6cm of 2]{test3};
\draw[->, every node/.style={font=\sffamily\small}] 
   (3) -- ($(3)+(0,.5)$) -- ($(1)+(0,.5)$) node[above, pos=0.8] {some text} -- (1) ; 
\end{tikzpicture}

Result

share|improve this answer

For fun, here is a nontikz version.

\documentclass{article}
\usepackage{stackengine}
\usepackage{xcolor}
\newcommand\leftbentarrow[4][]{\setstackgap{L}{.3\baselineskip}%
  \setbox0=\hbox{#2}%
  \def\stackalignment{r}\stackon{#2}{\def\stackalignment{l}%
    \stackon[-.2pt]{\makebox[0pt]{$\downarrow$}}%
    {\trlap{\textcolor{cyan}{\sffamily#1}}\rule{.5\wd0}{.4pt}}}%
  \setbox0=\hbox{#3}%
  \setbox1=\hbox{$\downarrow$}%
  \def\stackalignment{c}\stackon[\Sstackgap+\dp1+\ht1-.2pt]{#3}{\rule{\wd0}{.4pt}}%
  \setbox0=\hbox{#4}%
  \def\stackalignment{l}\stackon{#4}{\def\stackalignment{r}%
    \stackon[-.2pt]{\makebox[0pt]{\rule{.4pt}{\ht1+\dp1}}}{\rule{.5\wd0}{.4pt}}}%
}
\usepackage{lipsum}
\parskip 1em
\begin{document}
\leftbentarrow[some text]{test1}{ test2 test2a }{test3}

\leftbentarrow[some text]{test1}{\makebox[1in]{test2}}{test3}
\end{document}

enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.