Making of my PhD Thesis Generator

On June 15, I received my PhD in the Arts from the University of Antwerp / ARIA. My research was about the impact of generative design tools. I researched how generative design tools (specifically NodeBox) affect the quality and creativity of designers, and whether they were more efficient and self-reliant.

A PhD in the arts lies somewhere between scientific research and artistic practice. It is at times both, and at other times neither. One day you'll be performing A/B tests on users, the other days you're knee-deep in artistic projects. I wanted to represent this battle between two sides in the thesis as well. In line with the message of the PhD I didn't simply want to create a thesis, but a thesis generator: a system that could generate endless variations of the thesis (keeping the content intact but dynamically generating the design).

I've opted to created "the slider": an interactive element that allows you to choose for yourself whether you want an artistic or scientific thesis. The design is adapted to match, and every design will be unique.

Go generate your own thesis

PhD thesis generator screenshot

Some designs evolve over multiple pages, gradually changing background elements from page to page. Flipping through the thesis results in interesting animations:

I had a selection of these theses printed. Each design used different font sizes and margins, meaning layouts had to be recalculated, taking typesetting issues like widows and orphans into account. The total number of pages varied between 140 and 180, meaning that the thickness of the book varied as well. I added routines to calculate the width of the spine and generate different-sized book covers based on those calculations.

A number of printed variations

The text of the thesis was written in Workflowy. It was imported automatically and converted to Markdown. The thesis generator was built in Go. It doesn't use any additional packages apart from the Go standard library. This means that every single byte of the PDF is generated by my own software. Here are some of the aspects that were implemented, from high-level to low-level:

  • Web Server
  • Style interpolation
  • Workflowy import
  • Automatic figure generation (from inline NB1-style Python code)
  • Markdown parsing
  • Text layout (justification)
  • Layout calculation
  • Dynamic background generation
  • Automatic TOC and bibliography generation
  • Separate cover / body generation
  • Font parsing (to determine widths, taking kerning into account)
  • Color handling (HSL / RGB calculations)
  • PDF object generation (pages, outlines, font and image embedding)
  • PDF primitives (dictionaries, arrays, xrefs, ...)

The low-level PDF handling and layout and typesetting calculations might be interesting as a library to release in the future. In addition, higher-level concepts like style interpolation might be interesting as well; currently they are connected to the thesis.

Go generate your own thesis