Making Diagrams with Xy-pic

Recently, I upgraded my \LaTeX installation from teTeX to TeX Live.  As I was reviewing the available packages, I noticed Xy-pic, a set of macros for creating diagrams and graphs.  I was immediately intrigued and I started reading the relatively short manual.

Today, I will show you a few of the things Xy-pic can do.

1. First, create a file and insert the \LaTeX document class and the macro package.

~ % cd ~/tmp
~ % touch example.tex
~ % vim example.tex
1 \documentclass{article}
2 \usepackage[all]{xy}
3 \begin{document}
5 \end{document}

All of our editing will stay between “\begin{document}” and”\end{document}”.

2. Next, let’s begin with our first example.

1 \documentclass{article}
2 \usepackage[all]{xy}
3 \begin{document}
4 \xymatrix@1{A \ar[r] & B}
5 \end{document}

The above example will create:

Explanation: \xymatrix initialises the macro environment and @1 restricts the output to a single line.  \ar creates an arrow and the direction, [r], points the arrow in the right direction.  & separates the columns.  The direction is translated from its mnemonic form (right,left,up,down) into a coordinate pair based upon its initial position.  In this case, [r] means (1,0).  Using [l] would result in an error because [l], which is (-1,0), doesn’t exist.

Throughout the rest of this tutorial, I’ll remove everything except the \xymatrix macro; remember to add the LaTeX commands (lines 1,2, 3, and 5) before you compile the document.  Also, I will bold changes in each progressive example.

3. Let’s add some more letters and arrows to the previous example. (It would have better to use a double headed arrow style, see ex. #7.)

5 \xymatrix@1{A \ar[r] & B \ar[r] & C \ar[l]}

4. Let’s change the C to bullet.

6 \xymatrix@1{A \ar[r] & B \ar[r] & \bullet \ar[l]}

Explanation: \bullet creates a bullet

5. Add another row.

7 \xymatrix{
8 A \ar[r] & B \ar[r] & \bullet \ar[l] \\
9 D & &
10 } 

Explanation: The “\\” creates a linebreak.  Even though no content follows the D, we still have to create the empty columns with &’s.  Since we are now dealing with multiple rows, we have to remove the @1.

6. Create an arrow from A to D.

11 \xymatrix{
12 A \ar[r] \ar[d] & B \ar[r] & \bullet \ar[l] \\
13 D & &
14 }

Explanation: \ar[d] creates a downward arrow to (0,-1), which in this case, is D.

7. Now, let me introduce you to styles.  This time, we’ll begin with a fresh example.

15 \xymatrix@1{
16 A \ar@{<->}[r] & B}

Explanation: The @{<->} is in a @{tail shaft head} format, so in this case, it creates a double-headed arrow.

8. Another example of styling arrows.

17 \xymatrix@1{
18 A \ar@{-}[r] & B}

Explanation: @{-} creates an arrow with only a shaft.

9. Next, an example of labelling arrows.

19 \xymatrix@1{
20 A \ar@{-}[r]^f & B \ar@{-}[r]_f & C }

Explanation: This is not as complicated as it looks.  “^” means up; likewise “_” means down.

10. What about a label with more than one character?

21 \xymatrix@1{
22 A \ar@{-}[r]^{more} & B \ar@{-}[r]_f & C }

Explanation: The “{}” is a container for extra characters.

11. What happens if we lengthen the arrow?

23 \xymatrix@1{
24 A \ar@{-}[rr]^{more} & & B \ar@{-}[r]_f & C }

Explanation: Here, the label stays centered.  Note that we had to modify the direction “[rr]” to account for the blank column between A and B.

12. What about curved arrows?

25 \xymatrix@1{
26 A \ar@{-}@/^/[rr]^{more} & & B \ar@{-}@/_/[r]_f & C }

Explanation: All we did here was add another style “@/^/” and “@/_/”.  /^/ means curve upwards; likewise, /_/ means curve downwards.

13. The last example: a square.

First, we create the outline of the square.

27 \xymatrix{
28 A & B \\
29 C & D
30 }

Next, we connect the corners with arrows.

31 \xymatrix{
32 A \ar[r] \ar[d] & B \ar[d] \\
33 C \ar[r] & D
34 }

Next, we change the styling of the arrows and add labels to each side.

35 \xymatrix{
36 A \ar@{-}[r]^e \ar@{-}[d]_f & B \ar@{-}[d]^g \\
37 C \ar@{-}[r]_h & D
38 }

Finally, let’s add some curved arrows, just for the sake of it.

39 \xymatrix{
40 A \ar@{-}[r]^e \ar@{-}[d]_f & B \ar@{-}[d]^g \ar@/^1pc/[d]\\
41 C \ar@{-}[r]_h \ar@/_1pc/[r]& D
42 }

The added “1pc” makes the curve more prominent so it does not overlap the label.

This tutorial only covers pages 1 – 4 of the 16 page manual.  As you can tell, it is dense.
Xy-pic is a great \LaTeX package that can be used to create beautiful diagrams when typesetting documents.



  1. Posted 8 July, 2008 at 17:59 | Permalink | Reply

    Waay over my head.
    I skimmed thru it.
    But I think in the end you should get paid for some of these blogs

  2. Posted 2 August, 2008 at 21:18 | Permalink | Reply

    Thanks for the post

One Trackback

  1. By Setting up Mutt « AJ Online on 12 July, 2008 at 12:55

    […] a look at my article on using Xy-pic for some more examples of its […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: