Notebook paper PDFs
July 27, 2009 at 12:00 PM by Dr. Drang
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:
Letter-sized paper (8.5 × 11) with side binding margins.
Junior-sized paper (5.5 × 8.25) with side binding margins.
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
- I have access to every PostScript command, not just the subset the graphics program provides.
- I can experiment with line thicknesses and dash patterns by just changing a couple of lines of code, which is much faster than using a GUI.
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.