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: