Like most people, the presentation software I grew up with was Microsoft PowerPoint. It’s reasonably simple to use, but I never actually liked using it. In fact, I don’t really like using WYSIWYG editors in general: sooner or later, the tend to fuck up the underlying formatting, over which you have no direct control because it is abstracted away.

Perhaps unsurprisingly, for typesetting documents, this contempt for WYSIWYG has led me towards \(\LaTeX\). I’m a big fan of its declarative markup language and separation of content and style. It’s WYSIWYM.

Since I’ve migrated to GNU/Linux on all my machines, I actually don’t use MS Office at all; I can’t even run it if I wanted to. But I also don’t really use LibreOffice a lot. I sometimes use LO Calc for quick-and-dirty stuff or when it’s simply better suited than using Python with the usual suspects (Numpy, Pandas, Matplotlib), but I do not really have a use case for LO Writer anymore. Quick notes go in plain text (or Markdown, which is just a tiny step up from plain text), and stuff I actually want to typeset goes in LaTeX.

Regarding LO Impress, I’m sorry to say it has all the (WYSIWYG) drawbacks that PowerPoint also has, and some other annoyances to boot.

Beamer

Of course, I’ve tried Beamer. Although the default themes are all a bit… dated, there exist some clean, modern themes for it like Metropolis. Indeed, you can make some really nice, professional slides with Beamer and Metropolis.

But, as much as I’d like it not to be true, I have to say that LaTeX just isn’t really suited for making presentation slides. Typesetting documents is one thing, and obviously the thing where (La)TeX really shines, but presentation slides are a bit different in a couple of ways and have different needs. For example:

  • Unlike documents, there is no single (top-to-bottom) axis along you want things laid out. I tend to keep my slides rather simple, but even then I often use columns, or otherwise would like elements evenly spaced out (vertically or horizontally). LaTeX does not easily accomodate this.
    • A specific example of this is that Beamer uses implicit \vfills at the top and bottom of your slides, making it very cumbersome to push some content to the very bottom of the slide without resorting to minipages or other hacks.
  • Verbosity. LaTeX’s syntax for common features in slides is often way too verbose.
    • For example, to create two columns, you’d need to do:
      \begin{columns}
        \begin{column}{width=0.5\textwidth}
            column 1
        \end{column}
        \begin{column}{width=0.5\textwidth}
            column 2
        \end{column}
      \end{columns}
      

      That’s a lot of typing.

    • I also use lists a lot, often nested ones (like this one). The default syntax in LaTeX for that is way too verbose, as it boils down to doing something like this:
      \begin{itemize}
        \item Parent
        \begin{itemize}
            \item Child
        \end{itemize}
      \end{itemize}
      

      There is easylist, which allows you to do this:

      \begin{easylist}
        & Parent
        && Child
      \end{easylist}
      

      Quite an improvement, yet still not as clean as e.g. Markdown. Worse yet, when used with beamer it requires the [fragile] option which makes errors incomprehensible and slows down compilation significantly.

In the end, making slides in Beamer means constantly having to fumble-and-recompile to get my content aligned the way I want for me. It also doesn’t help that compilation is slow and can take (tens of) seconds, especially if you use XeLaTeX (which you probably want if you want to use nice OTF typefaces). It’s a tedious and not very enjoyable experience, even though I still prefer it over using LO Impress.

Marp

Enter Marp. Marp (Markdown Presentation Ecosystem) is a quite young system for making slides in Markdown. Styling is done with CSS, which makes it quite easy to create or modify themes. It primarily targets HTML (with Bespoke.js), but can also export to PDF or PPTX.

Slides in HTML

I first tried the PDF output because that was what I was used to, but HTML actually has some big pros:

  • You can include everything you can include in HTML: GIFs, videos, you name it.
  • Bespoke.js (the presentation framework used) supports stuff like a presenter view in a separate window with presenter notes and a timer, and transitions

And of course, it is basically just as portable as PDF because the only software you need is a web browser (as opposed to a PDF viewer).

In my opinion, the lack of support for videos is one of the biggest drawbacks of using PDF for slides. When I used Beamer I’ve worked around it by using pdfpc’s (non-standardised) video embedding feature, but this of course requires pdfpc and thus is not very portable. Using HTML instead of PDF solves this issue very nicely.

Syntax

However, what I like most about Marp is that it uses Markdown as a markup language, which I think is very suited for things like slides. To come back to our list example:

- Parent
  - Child

That’s a lot neater, isn’t it?

For columns, we need a bit of extra CSS but it’s possible:

<div class="columns">
    <div>

        column 1

    </div>
    <div>

        column 2

    </div>
</div>

Still not perfect, but better than Beamer’s columns syntax.

Moreover:

  • Compilation is much quicker
  • It’s very easy to modify or create styles if you know a bit of CSS

Although Marp is not nearly as popular (yet) as Beamer is, there are some third-party themes for it already. I like the (Metropolis-inspired) Plato.

I would not call it perfect; it would be nice if commonly used features like columns and centering were supported in ‘native’ syntax rather than divs with custom styling, but it’s a start.

For now, I’m going to continue giving Marp a try and I hope it will grow into the ideal presentation tool.