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.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 3 down vote accepted

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

share|improve this answer
1  
Hmm, yeah that is exactly what I was looking for! Thanks! – SebasZil Feb 28 at 18:26
    
@SebasZil My pleasure – percusse Feb 28 at 18:27

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}
share|improve this answer
    
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 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 at 22:13

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.