Idraluna Archives

Grimoire Handout Zines

Earlier this year, I sorted the spell list for my campaign into 14 themed grimoires. I've found this to be a nice middle ground between 'mages get free spells from the ether when leveling up',1 'spells are found one-by-one as loot',2 and convoluted downtime spell research systems. This way, spell acquisition is diegetic, but since spells come in groups of 5-6 at a time mages get a bit more flexibility right out of the gate. And since most of my grimoires have a couple high-level spells, it preserves the aspirational element that occurs when players have access to a full spell list.

It also makes mage specialization feel more natural (want to become a necromancer? Better track down a copy of the Necronomicon; also, some grimoires 'unlock' a crafting subsystem like alchemy & vivimancy with a page devoted to brief rules & material costs). Finally, I love cramming references fiction & history & my niche interests into my campaign, and grimoires are a great vehicle for that

I had previously compiled each grimoire as a chapter in a larger pdf, but for the last couple of weeks I've been converting them to printable 6-page mini-zines3 laid out in LaTeX with 1 spell per page.4

I used the LaTeX template on this StackExchange thread in combination with the csvsimple package to automatically insert spell details from a csv table.

The macro for inserting spells from the csv looks like this:

%%% Spellblock
\newcommand{\spellblock}[1]{

\csvreader[filter strcmp={\grim}{#1}]{../Chapters/Spells.csv}

{Spell=\spell, Level=\lvl, Proper_name=\proper, Grimoire=\grim, tex=\fileref, targets=\targets, duration=\duration, range=\range, desc=\descr}{%

\raggedright\textbf{\headerfont\proper} \\ (\textit{\spell})

Level: \lvl \\ Target: \textit{\targets} \\ Duration: \textit{\duration} \\ Range: \textit{\range}

\descr

\input{../Chapters/Spell_desc/\fileref}

\newpage

}%

}

And the code to generate the source pdf looks like this:

\documentclass[a6paper,20pt]{book}
\usepackage[paperwidth=2.64in, paperheight=4.08in, inner=0.25in, outer=0.25in, bmargin=0.5in, tmargin=0.5in, headsep=0.1in, twoside]{geometry}
\usepackage{Grimoire}  % just a modified version of my usual formatting package, loads packages csvsimple, babel, graphicx, and fontspec

\usepackage{enumitem}  % space saving
\setlist{noitemsep}

\parskip1em

\begin{document}

%%%%%%%%%%%%Aida's Eximious Cantraps Vol. 1

% define fonts for grimoire
\setmainfont[Path=../Fonts/]{Buda-Light.ttf}
\newfontfamily{\headerfont}[Path=../Fonts/]{tobaccoroadnf.regular.otf}

\spellblock{AEC1}  % insert spells from csv, must have only six labeled AEC1

\pagestyle{empty}  % prevents page numbers printing for front and back pages

% Illustration for back cover
\hphantom{2em}\vfill\begin{center}\includegraphics[width=0.25\textwidth]{../Illustrations/glyph.png}\end{center}\vfill \newpage

% Front cover
\hphantom{2em}\vfill\begin{center}{\Large\bfseries\headerfont Aida's Eximious Cantraps}\end{center}\vfill \newpage

And finally this code arranges the source pdf pages into a printable grimoire:

\documentclass[letterpaper,landscape]{article}
\usepackage[margin=0pt]{geometry}
\usepackage{graphicx}

\begin{document}

\includegraphics[page=4,angle=180,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=3,angle=180,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=2,angle=180,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=1,angle=180,width=.24\paperwidth]{source.pdf}\\
\includegraphics[page=5,angle=0,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=6,angle=0,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=7,angle=0,width=.24\paperwidth]{source.pdf}\hfill
\includegraphics[page=8,angle=0,width=.24\paperwidth]{source.pdf}\hfill

For both the source and printable documents, new grimoires can be easily appended by iterating the code chunks above.

The convergence of tiny page size + janky fonts + obscure/made-up vocabulary really threw LaTeX's word spacing/hyphenation algorithm for a loop and I had quite a few issues with 'overfull hbox' and words poking into the right margin. I fixed most of these issues by disabling the microtype package, defining specific hyphenation schemes for the babel package, e.g. \babelhyphenation[english]{discombob-ulator}, and adding \raggedright to problematic areas.


I had a lot of fun matching (extremely tacky) free fonts & public domain illustrations to each grimoire and playing around with the title layout. For grimoires referencing real-world occultism from the early modern period (like Clavicula Salomonis and A Compendium of Catalytic Nuptials), I used fonts like IM Fell English and Chapbook. Others I gave a more sci-fantasy magitech vibe with fonts like Republika. And of course for dark magic tomes like Codex Solis Nigri I had to use an obnoxious blackletter font. It's eclectic, but I hope it conveys the impression that these are distinct esoteric tomes with their own history rather than interchangeable fragments of a menu of character-building options. Over time, I intend to embellish them with marginalia, coffee stains, etc.

In terms of game balance, I'm thinking of giving all mages free copies of both volumes of Aida's Eximious Cantraps, since they contain mostly lower-level lateral-thinking utility spells like Grease, Knock, Push/Pull, and Shrink.

A pdf of all the grimoires I've made so far can be viewed here. Feel free to use, print, remix etc. for your own campaign.


  1. AFAIK this is how 90% of GMs handle it regardless of edition.

  2. As in games like Knave and Cairn where magic is inventory-based.

  3. Traverse Fantasy recently posted about this but in this case credit is due to the Ref in the White Box campaign I'm in who make some extremely handy little rule reference handouts in this style.

  4. There's definitely room for two spells per page, but I'd rather have the extra room for notes or clarified descriptions.

#DIY #LaTeX #archons-and-armigers