The Simplest Neovim Markdown Setup

I am not one who en­joys com­plex­ity. I am also some­one who likes to make their own tools.

As a stu­dent, I write a lot. That in­cludes notes, pa­pers, and doc­u­men­ta­tion for my wide va­ri­ety of pro­jects.

A lot of classes re­quest to sub­mit as­sign­ments as ei­ther PDF, HTML or .docx. For a while, I sub­mit­ted PDF’s. I had a whole or­ches­trated setup.

I would write every­thing in Neovim, save it, and KNAP would ren­der it us­ing Pandoc. Finally, it would be ren­dered to my screen us­ing Sioyek.

This worked fine, I guess, but it was far from per­fect.

  1. It was slow. Each edit I made in Markdown could take as many as 10 sec­onds to show up in Sioyek.
  2. It was­n’t in­ter­est­ing. While I made mod­i­fi­ca­tions to my Pandoc set­tings, my PDFs still looked like every other pdflatex doc­u­ment ever made.
  3. I could­n’t make my doc­u­ments in­ter­ac­tive if I wanted to.

Markdown was de­signed to be turned into HTML, I rea­soned. So why not just do that?

A screenshot of Tatum at work

That’s why I cre­ated Tatum. It does one thing, re­ally well. Point it at a Markdown file, and it will run a tiny web server to ren­der the re­sult­ing HTML to. If the file changes, a WebSocket con­nec­tion tells the browser to re­fresh.

Tatum ren­ders in mil­lisec­onds and cre­ates beau­ti­ful pages with KaTeX\KaTeX, Simple.css and highlight.js. I can em­bed in­ter­ac­tive HTML, CSS and JavaScript el­e­ments di­rectly into my Markdown to get the in­ter­ac­tiv­ity and aes­thet­ics I de­sire.

Once I’m done work­ing, I just run tatum render <file.md> and I get a sin­gle file (images and all) that I can sub­mit for my as­sign­ments.

Tatum is­n’t for you to use. Feel free to poke around at how it works, or even fork it and make your own mod­i­fi­ca­tions. It fits my use case per­fectly.