Paper calendars with pcal

I’m sure almost everyone reading this uses some form of electronic calendar, and for good reason. A calendar on your computer can be changed at will, never getting cluttered with scratched-out appointments that got rescheduled. And when it’s synced with your phone, you always have an up-to-date version in your pocket or purse. But sometimes there’s no substitute for a simple paper calendar, and it’s nice to be able to make one at a moment’s notice.

As I’ve written here before, I use paper calendars at work to keep track of our equipment and personnel and at home to make sure I don’t forget that I remembered to take a pill. And because I got into the habit of using it many years ago, I make my printable calendars using the pcal program.

Of course, I could use iCal. If you click and unclick enough settings in the initial print window, it’ll give you a decent looking calendar.

iCal blank calendar print settings

But it’s not as nice looking or as flexible in its output options as pcal.

To make a PDF with pages for every month of the year, the command

pcal -b all -S 2012

usually does the trick for me. The -b all option tells it to print the Saturday and Sunday dates in black (gray is the default), the -S option tells it not to print mini calendars for the preceding and subsequent months, and the 2012 is the year I want printed. Pcal will then make a twelve-page PostScript calendar, with each month on a single page in landscape orientation. Pcal streams the PostScript it generates to standard output, so it can be sent to a file, like this:

pcal -b all -S 2012 >

Preview can open PostScript files and convert them to PDF, so you can just double-click on the PS file and it will open for viewing and printing. I tend to pipe the PostScript through the ps2pdf utility to do the conversion on the fly:

pcal -b all -S 2012 | ps2pdf - 2012.pdf

This way I don’t have a PS file lying around that I have to delete. The first argument to ps2pdf, the hyphen, tells it to read standard input. The second argument tells it to send the output to a file with the given name. The first page of the resulting PDF looks like this:

PCal output

You’re not surprised that someone with middle-aged eyes prefers the big, bold letters on the pcal output, are you?

Don’t like Times as the font? Don’t need a full year? Want some information printed in the footer? Want the calendar scaled to a different size? There are command line options for all of these things described in the manual page. If you find a set of options you like, you can set them in an environment variable. My ~/.bashrc file contains this line,

export PCAL_OPTS="-b all -S"

so I don’t actually have to remember or type the options given above. I just type

pcal 2012 | ps2pdf - 2012.pdf  

Unfortunately, pcal doesn’t come with OS X, so you’ll have to install it yourself. If you’re still a MacPorts user, there’s a portfile for installing it. If you’re a Homebrew user, or anyone else, you’ll have to install it “by hand.” This isn’t a big deal:

  1. Download the gzipped tarfile.
  2. Double-click it to expand the archive.
  3. cd into the pcal directory from within the Terminal.
  4. Issue make and sudo make install commands. Enter your administrator password when prompted.

When you’re done, you’ll have pcal and its man page in your /usr/local tree.

As for the ps2pdf program, it’s part of the Ghostscript suite of utilities. If you’ve installed TeX on your Mac, chances are you have it. If not, you can install Ghostscript though Homebrew or MacPorts.

Although I use it mainly for printing blank calendars for people to write on, pcal also can read a “calendar” file and print the appointments listed in it. This feature isn’t just an afterthought—it’s quite an extensive and adaptable system. So extensive the first two-thirds of the man page are devoted to it.

Of course I could run to the office supply store and have my choice of dozens of calendars, especially at this time of year. But when I want a simple, throwaway calendar for capturing one specific set of information, pcal’s calendars make more sense.

6 Responses to “Paper calendars with pcal”

  1. Allen MacKenzie says:

    Possibly not useful for you with your big bold numerals, but I get a fair amount of use out of this every year:

    Obviously, not big enough to write anything on, but I use them to mark off things, as you do for medicine. (In our house, it answers the question of whether or not the dog has been fed. A single slash on the day at the morning feeding, crossed into an “X” at the evening feeding.)

    I also customize it to make an academic year calendar each year, and I keep a printout of that on my desk. Here, it really shines with answering calendar-related questions such as: What is the date six weeks from tomorrow? If I am to give an exam on March 1, then when must the homework be assigned/collected/returned to be covered on the exam? How many weeks are left in the semester?

    The biggest problem with it is the format, which is an Excel file. But I have Excel, the file is easy to customize, and I like the way the finished product looks. So.

  2. Dr. Drang says:

    I think the David Seah calendar is really nice. I don’t need to plan in 3-4 month chunks anymore, but if I did I’d use something like that.

    Two things I should’ve mentioned in the post:

    1. Pcal has a -w option that prints a whole year on a single sheet. It’s month-oriented rather than week-oriented, but it’s similar to the David Seah calendar in that it gives you the big picture (no room for writing notes on the same sheet, though).
    2. When I don’t need calendars to be the size of a full sheet of paper, I use the Layout settings in the Print dialog to print them at two or four per page. Those work better for cross-off type calendars.
  3. Marc Wilson says:

    There’s also pscal, which does everything in Bourne shell + Postscript. I like it because there’s no installation required.

    You have to add OS X’s default language setting to it, though:

    --- pscal.orig  2011-08-29 18:30:20.000000000 -0700
    +++ pscal   2011-08-29 18:31:52.000000000 -0700
    @@ -125,6 +125,7 @@
            "$LANGUAGE" = "C" -o \
            "$LANGUAGE" = "en" -o \
            "$LANGUAGE" = "en_US" -o \
    +       "$LANGUAGE" = "en_US.UTF-8" -o \
            "$LANGUAGE" = "english" -o \
            "$LANGUAGE" = "English";
  4. Dr. Drang says:

    Marc, I think I rescued your diff from the perils of the site’s not-entirely-consistent comment formatting. Let me know if I got it wrong.

    And I love that my blog is a place where commenters expect the other readers to be comfortable with diff and patch.

  5. Jaume Bernadí says:

    an alternative to ps2pdf is Apple’s pstopdf

    (thank you, I like very much your blog)

  6. Marc Wilson says:

    Yes, thank you for cleaning it up. ^_^