4

I have an argumentation framework that has attacks on attacks. So basically what I would like to draw is nodes with edges and edges attacking these edges.

What I got so far:

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2cm,
                    thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]

  \node[main node] (A) {A};
  \node[main node] (B) [left of=A] {B};
  \node[main node] (C) [above left of=A] {C};

  \path[every node/.style={font=\sffamily\small}]
    (A) edge [bend right] node [left] {} (B)
    (B) edge [bend right] node [left] {} (A)
    ;
   \path [every node/.style={font=\sffamily\small}] 
   (C) edge node [left] {} ($ (A) !.5! (B) $)
   ;
\end{tikzpicture}

Which results into this graphic:

enter image description here

But as you can imagine, I would like the arrow from C→ (A→B) ending at the right position of the bent edge. Of course I could remove the bend right option, but this would lead to a graph that is not as readable as expected.

Any general approach how to fix this?

2 Answers 2

6

I think a relatively hassle free solution is placing arbitrary coordinates along the way

  \path[every node/.style={font=\sffamily\small}]
    (A) edge [bend right] coordinate [pos=0.2] (top) (B) 
    (B) edge [bend right] (A)
    ;
   \path [every node/.style={font=\sffamily\small}] (C) edge (top);

enter image description here

2
  • 1
    Hmm, yeah that is exactly what I was looking for! Thanks!
    – SebasZil
    Feb 28, 2016 at 18:26
  • @SebasZil My pleasure
    – percusse
    Feb 28, 2016 at 18:27
1

Just for comparison, here is a luamplib + Metapost alternative.

enter image description here

The key construction is point t of p which gives the (x,y) pair at time t along path p.

\documentclass[border=2mm]{standalone}
\usepackage{fontspec}
\setmainfont{Latin Modern Sans}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path A, B, C, a[];
A = fullcircle scaled 16 shifted 20 right rotated -30;
B = A rotated -120;
C = B rotated -140;
a1 = center A .. { dir 220 } center B cutbefore A cutafter B;
a2 = center B .. { dir  40 } center A cutbefore B cutafter A;
a3 = center C .. point 0.5 of a1      cutbefore C;
forsuffixes $=A,B,C: draw $; label("\textbf{" & str $ & "}", center $); endfor
interim ahangle := 32;
forsuffixes $=1,2,3: drawarrow a$; endfor
endfig;
\end{mplibcode}
\end{document}
2
  • Well your solution is not based on my initial setup and it looks a lot more complicated, I think @percusse had a great solution for it.
    – SebasZil
    Feb 29, 2016 at 11:30
  • It's only supposed to be an alternative! If you are happy with the TikZ solution that's great. I was just trying to show that MP has the point t of p mechanism that provides similar functions to the [pos=x] mechanism of TikZ.
    – Thruston
    Feb 29, 2016 at 22:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .