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.

When I draw an edge between two nodes with anchors and globally set option [->], I get an additional arrow tip symbol at the beginning of the last edge in the path. For example in

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \node (A) at (0,0) {$A$};
    \node (B) at (1,0) {$B$};

    \draw[->] (A.north east) edge (B.north west);

    \draw (A.south east) edge[->] (B.south west);
\end{tikzpicture}
\end{document}

the first \draw command produces incorrect output, while the second produces correct output:

result

Am I doing something wrong, or is this a bug in TikZ?

share|improve this question
add comment

2 Answers 2

up vote 20 down vote accepted

This has to do with the fact that you are using \draw, while edge is usually used in conjunction with \path.

What happens when you use the edge operation is that TikZ first draws everything up to the edge keyword, and then starts a new path with the every edge style between the nodes/coordinates specified in your edge operation. So using edge essentially splits your \draw command in two:

\draw[->] (A.north east) edge (B.north west);

is the same as saying

\draw[->] (A.north east);
\path[every edge,->] (A.north east) -- (B.north west);

The first line will just create the arrowhead pointing up, while the second line creates the actual line with the arrow head.

Your example can be corrected like this:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \node (A) at (0,0) {$A$};
    \node (B) at (1,0) {$B$};

    \path[->] (A.north east) edge (B.north west);

    \draw (A.south east) edge[->] (B.south west);
\end{tikzpicture}
\end{document}
share|improve this answer
    
Just ran into this. Thanks for the explanation. –  Faheem Mitha Sep 8 '11 at 20:58
add comment

Try to use to instead of edge like \draw[->] (A.north east) to (B.north west);. I had a similar situation and to worked for me.

share|improve this answer
4  
In this simple case, this works without a doubt. But note that \draw[->] (a) to (b) to (c); and \path[->] (a) edge (b) edge (c); and \path[->] (a) edge (b) (b) edge (c); produce different outputs. –  Qrrbrbirlbel Jan 27 '13 at 19:27
add comment

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.