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 can't seem to figure out the difference between + and ++ relative coordinates in TikZ.

I understand ++. ++ specifies delta coordinates that are added to the last current point, the current point is then set to the new absolute current point (correct?):

\draw (0,0) -- ++(1,0) -- ++(0,1) means:

set Current Point to (0,0)
add (1,0) to Current Point = (1,0)
set Current Point to (1,0)
add Current Point (1,0) to (0,1) = (1,1)
set Current Point to (1,1)

I can't seem to figure out that + does, when I try it out it looks like the coordinates in the +(x,y) are absolute coordinates rather than delta coordinates, but the manual says otherwise

share|improve this question
    
Start from here and then manual makes sense :) tex.stackexchange.com/questions/7643/… –  percusse May 8 '13 at 20:06
    
I remember reading that section of the manual but I interpreted as all +(x,y) terms are relative to the first coordinate, hence a list of +() would generate a set of lines radiating from a single point, which it doesn't. I will look more closely at the question you refer to. –  rhody May 8 '13 at 20:22
1  
@rhody The pluses only affect the calculation of these relative coordinates, they do (++) or don’t update (+) the “current point for subsequent usages of relative coordinates.” The lines (or whatever is used) will always start from the last actual point. The set of lines radiating from a single point will always need a move-to operation. E.g. \draw (12,34) -- +(1,0) +(0,0) -- +(0,1) + (0,0) -- + (left:1) + (0,0) -- + (270:1) + (0,0) circle (2pt); vs. \draw (12,34) -- ++(1,0) ++(-1,0) -- ++(0,1) ++ (0,-1) -- ++ (left:1) ++ (right:1) -- ++ (270:1) ++(90:1) circle (2pt); –  Qrrbrbirlbel May 8 '13 at 20:47
    
It is also important to recognize that \draw (a,b) + (c,d) -- (e,f) + (g,h); draws a line from (a+c,b+d) to (e,f) and then moves the current point to (e+g,f+h) (here the pluses do not matter as the following coordinate is an absolute one). –  Qrrbrbirlbel May 8 '13 at 20:59

1 Answer 1

up vote 13 down vote accepted

Your example:

\draw (0,0) -- ++(1,0) -- ++(0,1) means:

  • the current point is (0,0).
  • draw a line from the current point (0,0) to (0,0)+(1,0) (vector addition) and move the current point to (0,0)+(1,0).

  • next draw a line from the current point (0,0)+(1,0) to (0,0)+(1,0)+(0,1) and move the current point to (0,0)+(1,0)+(0,1).

Other examples are given as follows.

enter image description here

\documentclass[tikz,border=12pt]{standalone}

\begin{document}
\begin{tikzpicture}
    \draw (-2,-2) grid (2,2);
    \fill (110:2) circle (1pt);
    \draw (110:2) -- +(0,-1);
\end{tikzpicture}
\end{document}

Remarks for TikZ:

  • \draw (110:2) -- +(0,-1); The current point is (110:2). It draws a line from point (110:2) to point (110:2)+(0,-1) (vector addition). The current point is still at (110:2).

  • \draw (110:2) -- ++(0,-1); The current point is (110:2). It draws a line from point (110:2) to point (110:2)+(0,-1) (vector addition). The current point is moved to (110:2)+(0,-1).

  • \draw (110:2) +(0,-1) -- +(0,1); The current point is (110:2). It draws a line from point (110:2)+(0,-1) to point (110:2)+(0,1). The current point is still at (110:2).

  • \draw (110:2) ++(0,-1) -- +(0,1); The current point is (110:2)+(0,-1). It draws a line from point (110:2)+(0,-1) to point (110:2)+(0,-1)+(0,1). The current point is still at (110:2)+(0,-1).

  • \draw (110:2) ++(0,-1) -- ++(0,1); The current point is (110:2)+(0,-1). It draws a line from point (110:2)+(0,-1) to point (110:2)+(0,-1)+(0,1). The current point is moved to (110:2)+(0,-1)+(0,1) (which is equal to (110:2)).

Edit:

\draw (0,0) -- +(1,1) -- +(2,0) means

  • the current point is (0,0).

  • the first segment connecting (0,0) and (0,0)+(1,1).

  • the current point is still (0,0).

  • the second segment connecting the previous point (0,0)+(1,1) and (0,0)+(2,0).

The key is A -- B connects A and B with a line no matter how A and B are defined.

share|improve this answer
    
+1; Thanks for this answer. It clears up quite a bit for me. –  kan May 8 '13 at 20:15
    
Thanks for the detailed answer. In your notation what would the following do: \draw (0,0) -- +(1,1) -- +(2,0); Does it say: Current Point is (0,0); Draw line from (0,0) to (0,0)+(1,1); Current point remains at (0,0); Draw line from (0,0) to (0,0)+(2,0); If I run this I get a triangle, not two lines radiating from (0,0) –  rhody May 8 '13 at 20:29
    
I was looking again at the example shown in tex.stackexchange.com/questions/7643/… and what seems to be happening given: \draw (0,0) -- +(1,1) -- +(2,0) Current Point is (0,0);' Draw line from (0,0) to (0,0)+(1,1)` Current Point is set to (0,0)+(1,1) Draw a line from current point (0,0)+(1,1) to the point (0,0)+(2,0)` Seems like an odd thing to do? –  rhody May 8 '13 at 20:40
    
@rhody: The current point is (0,0), draw a line from (0,0) to (0,0)+(1,1) first and draw a line from the previous point (0,0)+(1,1) to (0,0)+(2,0). A -- B connects A and B regardless of how A and B are defined. –  In PSTricks we trust May 8 '13 at 20:41
    
Ok, I see what its doing now, I just need to let it sink in a bit. Thanks for your help. –  rhody May 8 '13 at 20:47

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.