ezyang’s blog

the arc of software bends towards understanding

Diagramming in Xournal and Gimp

Two people have asked me how drew the diagrams for my previous post You Could Have Invented Zippers, and I figured I'd share it with a little more elaboration to the world, since it's certainly been a bit of experimentation before I found a way that worked for me.

Diagramming software for Linux sucks. Those of you on Mac OS X can churn out eye-poppingly beautiful diagrams using OmniGraffle; the best we can do is some dinky GraphViz output, or maybe if we have a lot of time, a painstakingly crafted SVG file from Inkscape. This takes too long for my taste.

So, it's hand-drawn diagrams for me! The first thing I do is open my trusty Xournal, a high-quality GTK-based note-taking application written by Denis Auroux (my former multivariable calculus professor). And then I start drawing.


Actually, that's not quite true; by this time I've spent some time with pencil and paper scribbling diagrams and figuring out the layout I want. So when I'm on the tablet, I have a clear picture in my head and carefully draw the diagram in black. If I need multiple versions of the diagram, I copy paste and tweak the colors as I see fit (one of the great things about doing the drawing electronically!) I also shade in areas with the highlighter tool. When I'm done, I'll have a few pages of diagrams that I may or may not use.

From there, it's "File > Export to PDF", and then opening the resulting PDF in Gimp. For a while, I didn't realize you could do this, and muddled by using scrot to take screen-shots of my screen. Gimp will ask you which pages you want to import; I import all of them.


Each page resides on a separate "layer" (which is mildly useless, but not too harmful). I then crop a logical diagram, save-as the result (asking Gimp to merge visible layers), and then undo to get back to the full screen (and crop another selection). When I'm done with a page, I remove it from the visible layers, and move on to the next one.

When it's all done, I have a directory of labeled images. I resize them as necessary using convert -resize XX% ORIG NEW and then dump them in a public folder to link to.

Postscript. Kevin Riggle reminds me not to mix green and red in the same figure, unless I want to confuse my color blind friends. Xournal has a palette of black, blue, red, green, gray, cyan, lime, pink, orange, yellow and white, which is a tad limiting. I bet you can switch them around, however, by mucking with predef_colors_rgba in src/xo-misc.c

8 Responses to “Diagramming in Xournal and Gimp”

  1. Anonymous says:

    Dia (for Linux) is much better than OmniGraffle. But hand-drawn are better than both. I showed of your post in large part because the pictures were great!

  2. ifp5 says:

    I’d advise to take a look at SDraw (part of OpenOffice package). It lacks stencil library mechanism, but except for that lacking SDraw is quite good enough. Also it supports grouping and copy-pasting which allows to do most Visio jobs.

  3. Anonymous and ifp5, thanks for the suggestions. I’ve also received a recommendation for Krita, the KDE based drawing app.

  4. David Gibb says:

    You should really check out tikz. Sure, it’s not as friendly as some of the gui apps, but you can create some really nice diagrams

  5. Alex says:

    Hi Edward,

    I wanted to check one more thing about this post — you mentioned word tablet up there. Is it actually useable on the tablet (as in android touchscreen)? I can’t see it mentioning android anywhere on Xournal home page.

  6. I have never used Xournal on an iPad style tablet. I’m not sure if it is a good idea, since those tends of tablets tend not to have stylus.

  7. Anonymous says:

    i know this blog is a bit old but i’m looking around for ways to draw nice pictures just like you and could not find good recommendations. do you use a particular digital pen (for Linux)?

  8. Well, a digital pen is not enough if you don’t have a tablet. The X61 comes with a Wacom stylus, which I quite like.

Leave a Comment