Notebook paper PDFs

Last week, I mentioned that Staples now has Rolla notebooks in letter and junior sizes (I’ve seen them in Staples stores, but can’t find them online). They—and Levenger—also sell filler paper with the little mushroom-shaped cutouts pre-punched along the edge, but I’ve never liked the standard layouts and have always made my own by printing my own templates. I’ve set up a GitHub repository with PostScript and PDF versions of the templates I’ve written.

There are three basic templates:

  1. Letter-sized paper (8.5 × 11) with side binding margins.

  2. Junior-sized paper (5.5 × 8.25) with side binding margins.

  3. Junior-sized paper (5.5 × 8.5) with top binding margins.

All are intended to be printed on letter-sized paper, with the junior-sizes pages printed two-up. The side binding pages fit in standard Rolla/Circa notebooks; the topbinding pages were designed to fit my homemade steno notebook.

Rather than use a graphics program like Illustrator, I wrote the PostScript files directly and created the PDFs via the ps2pdf utility that ships with Ghostscript. The advantage of writing PostScript directly is that

Here’s an example. This is the notes-letter-r.ps, the recto page of the letter-sized template.

  1:  %!PS-Adobe-3.0
  2:  %%Title: Cornellish Notes Recto - Letter
  3:  %%Author: Dr. Drang (drdrang at gmail)
  4:  %%EndComments
  5:  %%BeginSetup
  6:  
  7:  % basic dimensions
  8:  /inch {72 mul} def            % conversion to points
  9:  /swidth 8.5 inch def        % letter-sized sheet width
 10:  /slength 11 inch def        % letter-sized sheet length
 11:  
 12:  % size of printed area
 13:  /width 7.25 inch def
 14:  /length 10 inch def
 15:  
 16:  % dimensions of gridded area
 17:  /gwidth 5.625 inch def
 18:  /glength 9.375 inch def
 19:  /gspace .3125 inch def
 20:  
 21:  % dimensions of cue area
 22:  /cwidth width gwidth sub def
 23:  /clength glength def
 24:  
 25:  % dimensions of title block
 26:  /hwidth width def
 27:  /hlength .5 inch def
 28:  /hpage hwidth .75 inch sub def
 29:  /hdate hpage 1.25 inch sub def
 30:  
 31:  % draw the notes
 32:  % stack: llx lly
 33:  /notes {
 34:    /lly exch def
 35:    /llx exch def
 36:  
 37:    % draw cue area
 38:    .5 setlinewidth
 39:    0 setgray
 40:    newpath
 41:      llx lly moveto
 42:      cwidth 0 rlineto
 43:      0 clength rlineto
 44:      cwidth neg 0 rlineto
 45:    closepath
 46:    stroke
 47:  
 48:    % draw grid horizontals
 49:    .25 setlinewidth
 50:    0 setgray
 51:    [1 1] 0 setdash
 52:    lly gspace lly glength add {
 53:      newpath
 54:        llx cwidth add exch moveto
 55:        gwidth 0 rlineto
 56:      stroke
 57:    } for
 58:    [] 0 setdash
 59:  
 60:    % draw grid verticals
 61:    0.25 setlinewidth
 62:    0 setgray
 63:    [1 6.5] 4 setdash
 64:    llx cwidth add gspace llx cwidth add gwidth add {
 65:      newpath
 66:        lly moveto
 67:        0 glength rlineto
 68:      stroke
 69:    } for
 70:    [] 0 setdash
 71:  
 72:    % draw grid box
 73:    .5 setlinewidth
 74:    0 setgray
 75:    newpath
 76:      llx cwidth add lly moveto
 77:      gwidth 0 rlineto
 78:      0 glength rlineto
 79:      gwidth neg 0 rlineto
 80:    closepath
 81:    stroke
 82:  
 83:    % draw title block
 84:    .5 setlinewidth
 85:    0 setgray
 86:    newpath
 87:      llx lly length add moveto
 88:      hwidth 0 rlineto
 89:      0 hlength neg rlineto
 90:      hwidth neg 0 rlineto
 91:    closepath
 92:    stroke
 93:  
 94:    % page and date separators
 95:    .5 setlinewidth
 96:    0 setgray
 97:    newpath
 98:      llx hpage add lly length add moveto
 99:      0 hlength neg rlineto
100:    stroke
101:    newpath
102:      llx hdate add lly length add moveto
103:      0 hlength neg rlineto
104:    stroke
105:  } def
106:  
107:  % draw the notes section
108:  gsave
109:  0 0 moveto
110:  .75 inch .5 inch notes
111:  grestore
112:  
113:  showpage

Lines 7–29 define all the dimensions used later in the program. Line 8 is a particularly useful function. It converts from inches to points, so I define all the later dimensions in their “natural” units.

Lines 31–105 define a function that does all the drawing. As the comments indicate, it’s broken into several sections for drawing the title block, the content borders, and the horizontal and vertical grid lines. I’m particularly proud of the vertical grid lines. I wanted vertical lines because my notes often contain sketches and graphs, but I wanted the verticals sparser than the horizontals because I tend to do more text writing than sketching. The verticals, therefore, are mostly whitespace, and the dashes spaced to take up the same positions relative to every horizontal line—the vertical dashes never intersect the horizontals to make little crosses that would draw attention to themselves.

At present, I generate the single-page PDFs through commands like

ps2pdf notes-letter-r.ps

and create the two-page PDFs in Preview by dragging the sidebar page images from one window to another. I’ll probably automate this in the future and create a Makefile that will do everything at once.

If you like the templates as they are, you can just use the PDFs; I’m pretty sure they’ll work with ringbound notebooks as well as Rolla/Circas. You don’t need to use git to use GitHub; the repository has a download link that will send you a zip or tar archive of all the files.

If you want to change the layout a bit, it’s not too hard to edit the PostScript to get what you want. If you’ve never programmed in PostScript before, don’t worry, it’s easy to pick up. You can download a PDF of Adobe’s PostScript Language Tutorial and Cookbook for hints.

Update 7/27/09
OK, now there’s a Makefile that generates all the PDFs at once. The README at GitHub explains how to use it. You’ll need Ghostscript installed on your machine if you want to edit the PostScript and autogenerate the PDFs.

Also, Merlin Mann, of 43 Folders fame, is following the GitHub repository, which is weird because I thought he was through with productivity porn.

Tags: