January 1, 2012 at 9:35 AM by Dr. Drang
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.
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 > 2012.ps
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:
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:
- Download the gzipped tarfile.
- Double-click it to expand the archive.
pcaldirectory from within the Terminal.
sudo make installcommands. Enter your administrator password when prompted.
When you’re done, you’ll have pcal and its man page in your
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.