Back in high school, my biology teacher required us to use the Cornell note taking system. From what I remember, the point was to expose us to a new system and force us to reevaluate how we take notes and whether our current methods were fruitful. Looking back it was interesting to try it and I incorporated some elements into my notetaking, but I soon forgot about it.

Now that notebooks have fallen in lieu of computer paper for my note taking needs, I thought it would be nice to try using the system again to organize my thoughts. I found the introspective aspect of writing the key concepts in summaries and generating cues in a Jeopardy-esque question after lectures useful. During this process, I found a template on Stack Exchange posted by user sgmoye. The answer he gave is linked here. It’s a really nice template that is nearly perfect for my writing use. However, it’s somewhat inconvenient since his solution requires you to call the command for each page you want to print.

I have implemented his template into a package that allows you to, in a single command, define the number of Cornell note pages you want and the page number to start from. The repeat command function implementation is using an answer given by Joseph Wright on Stack Exchange as well, see here. I also added a command that the user can change to pre-populate the page with a subject name and date if they already know what it will be used for.

What does cornellNotes.sty do?

cornellNotes.sty is a package that generates a specified number of Cornell Note Taking System pages with the option of starting the page count from a specified value. It also allows the user to include the subject name and date if desired.

You can download the package and minimum working example from my GitHub. You can also copy and paste it from the bottom of this blog post. Just save the file as “cornellNotes.sty”.

Package dependencies

  1. calc
  2. tikz – to draw the template
  3. expl3 – for the repeat command function

How to use it

To begin using cornellNotes.sty, download the sty file and place it in the directory where your main tex file is. Include this in your file header via \usepackage{cornellNotes}. You can set your own size for page margins, but I recommend using \usepackage[top=0.25in, bottom=0.75in, left=0.5in, right=0.5in]{geometry} that the template was developed for.

To pre-populate the subject line, renew the command \cornellNotesSubject{}. To pre-populate the date line, renew the command \cornellNotesDate{}.

To generate the pages, you can call the command \cornellNotesPacket[<start page>]{<num pages>}. The first argument in the square bracket is optional, it defines the page number to start numbering from and defaults to 1 if not entered. The second argument in the curly braces is mandatory and it is how many pages you want generated. An example use: \cornellNotesPacket[15]{10} generates 10 pages where the numbering starts from 5.

An example

Here is an example displaying all the use of all functions and a sample output page.

\usepackage[top=0.25in, bottom=0.75in, left=0.5in, right=0.5in]{geometry} 


\renewcommand{\cornellNotesSubject}{This is a test course}

The first page of the output generated by the code above. In total, ten pages were generated


First, if the subject name is too long, the output will start skipping pages and the template will only appear on every other page. This only happens if the text is longer than the line, so unless you’re trying to do “Class — topic” type of thing you should be fine.

If the page margins are increased, it has a tendency to skip the first page but then every page after that is fine. A kludge might be to skip page count on the first page and then just print pages 2 onwards in your pdf viewer, but I haven’t tried that.

I’m also aware that renewing commands is not the most user friendly way to get the lines in above the text, but I am not familiar enough with tikz as it is not a package I have used in my own works yet.


Answers on Stack Exchange are under the CC BY-SA 3.0 license, so the template code in those answers are under that license. I believe that means the package is also required to be released under that license.

The package itself

In case you are not comfortable downloading the .sty file from the link above, you can copy and paste it here.

\ProvidesPackage{cornellNotes}[2020/10/21 1.0.0 Cornell Notes Template Maker]


%Original cornell note template by sgmoye on
%Repeat code copied from Jospeh Wright
%Combined into one command by Jakub Konkol


\newcommand{\cornellNotesSubject}{%Insert note subject here
\newcommand{\cornellNotesDate}{%Insert a date here

\draw[step=.5cm,gray!80,thin] (\cuewd,\summht) grid (\wholeboxwd,\wholeboxht);
%% Optional:
%\draw[step=.25cm,gray!30,thin] (\cuewd,\summht) grid (\wholeboxwd,\wholeboxht);      
% Summary, top:
\draw [line width=.2pt] (\xorig,\summht) -- (\wholeboxwd,\summht);  
% Grid, left:
\draw [line width=.2pt] (\cuewd,\summht) -- (\cuewd,\wholeboxht);
% Draw the big box:
\draw (\xorig,\yorig) rectangle (\wholeboxwd,\wholeboxht);
\node[anchor=west] at (0.25,\wholeboxht-1em) {\textbf{Cues:}};
\node[anchor=west] at (0.25,\summht-1em){\textbf{Summary:}}; 
\node[anchor=west,fill=white] at (\cuewd+1em,\wholeboxht-1em) {\textbf{\ Notes:\ }};
\node[anchor=west] at (0.25,\wholeboxht+2em){%
    \parbox[t]{0.9\textwidth}{Subject: \cornellNotesSubject\par\smallskip Date: \cornellNotesDate}%

\cs_new_eq:NN \Repeat \prg_replicate:nn

\newcommand{\cornellNotesPacket}[2][1]{\setcounter{page}{#1} \Repeat{#2}{\cornellNotesPage}}