How to present using Org-mode in Emacs

You can do pretty much everything in Emacs, so why not give presentations too? Org-mode is an extensible outliner and Swiss Army knife for the Emacs text editor. Because it’s a great way to organize information, people have written a number of packages for presenting information from Org.

Here are some options for preparing and giving presentations using Org-mode, along with some guidance on what to use when. It may be a good idea to browse through the examples and create a small test presentation using the systems that catch your eye. If you choose your system before drafting your presentation, that can save you a lot of time, since the approaches differ in terms of the code you’ll need to add to your Org file.

Presenting outside Emacs

Do you need to distribute your presentation to non-Emacs users, or do you want to minimize the risk of getting your Emacs configuration confused? You can export your presentation to a number of formats.

Export to Beamer (LaTeX) and generate a PDF: Use this if you need to distribute your presentation as a PDF. You will need to install LaTeX, which could be a bit heavy-weight. Beamer is a slide package for LaTeX, and Org can export an outline to LaTeX code. Check out Writing Beamer presentations in Org-mode for sample screenshots and a tutorial.

Export to HTML and use S5: Light-weight browser-based slideshows are becoming more popular. They can be distributed as ZIPs or .tar.gz, or uploaded to web servers. See the section in the Org tutorials for Non-Beamer Presentations: S5. Here are some sample presentations.

Presenting within Emacs

Presenting within Emacs allows you to edit your presentation, execute code, or do all sorts of other interesting things. And it doesn’t have to be plain text – Org allows you to include inline images. (Microsoft Windows users may need to install additional libraries – see StackOverflow for tips.)

There are several ways to present from Org-mode. They tend to differ on:

  • the markup you need to add to your slides
  • the keyboard shortcuts to help you navigate between slides

so you can choose the one you feel the most comfortable with.

Org-present is simple and defines very few keyboard shortcuts: left for previous slide, right for next slide, C-c C-= or C-c C– to adjust text size, and C-q to quit. This makes it easy to edit your presentation as you go along. You’ll need to edit your ~/.emacs file to include some code. See the documentation in org-present.el for details.

EPresent is a bit more complex. It supports converting LaTeX into images, so you can embed pretty equations. The epresent keybindings include “n” for next and “p” for previous, so don’t use this if you’re planning to edit your presentation on the fly.

Org-presie takes a different approach by showing the outline instead of focusing on just one slide. When you press SPC, the previous headline’s content is hidden, and the next one’s content is expanded. It’s good for always giving people a sense of where they are in your presentation.

And then sometimes you may want to write your own. For my presentation at Emacs Conference 2013, I wanted to be able to:

  • allow me to indicate various headings as slides so that I can organize an outline of slides (why should they all have to be top-level?),
  • for each slide
    • automatically execute pre-written Emacs Lisp code (for animations and demonstrations!), OR
    • display images that fit the full height or width of the window, OR
    • display text if I don’t specify code or images
  • and have globally-set keyboard shortcuts so that I can go forward, backward, or re-do a slide no matter where I am in Emacs (and with AutoHotkey, even when I’m in a non-Emacs window)

You can find my code at https://gist.github.com/sachac/5278905

Emacs and Org-mode are wonderfully customizable, so you can probably build something that works just the way you want to work. Enjoy!

3 Pingbacks/Trackbacks

18 responses to “How to present using Org-mode in Emacs”

  1. Hualet says:

    Why not share some pictures?

    1. sachac says:

      You can click on the links above to find sample presentations.

  2. obergix says:

    With org-mode, you may even export the same set of slides as an “article” too, almost simultaneously, for instance for a teacher “manual” + lecture slides (including presenter notes). See my attempt at it in : http://www-public.telecom-sudparis.eu/~berger_o/weblog/2013/04/11/slides-manual-programs-generated-from-single-org-mode-source/

  3. Benton says:

    Always good food for thought in your postings, Sacha. I did a quick presentation to the folks I work with at a team meeting a while back; just used straight org-mode, since I wasn’t too worried about fancying it up. That’s how I inadvertently learned emacs can display images in-line. One guy later remarked that he’d done a double-take when he realized what happened, otherwise, it worked so smoothly no one else even picked up on it, I don’t think.

    One trick I’ve taken a real shine to is adding this snippet at the bottom of emacs files (not just dot-org files) that are meant to be read-often/modify-seldom or that would be a nuisance if I were to accidently change — like a presentation or password lists —

    Local variables:
    buffer-read-only t
    End:

    1. sachac says:

      That’s awesome. =) It’s amazing how many stories are along the lines of “That’s how I inadvertently learned emacs can…” ;)

      That local variable is interesting and cross-platform – saves you from fiddling with chmod and permissions, and easy to toggle in case you really need to edit something. Thanks for sharing!

      Speaking of password lists, do you use the automatic encryption/decryption support?

      1. Benton says:

        Haven’t yet. I’ve been using another encrypt solution, but it’s a little heavy-weight and not so convenient as this sounds like it might be, so should give it a look-see. Thanks.

  4. Benton says:

    Ack, typo in the emacs snippet. Needs to have a ‘:’ after the variable.

    Local variables:
    buffer-read-only: t
    End:

  5. Olivier Berger says:

    I have played with the =orgmode-slideshow= solution for non-beamer presentations, which wraps the HTML export with only minimal changes, as an alternative to S5 and I find it great, so far.

    By commenting out some code, it allows to customize some keys behaviour in the JS so that up and down still scroll up/down the slide contents, which allows big bullet lists in slides ;-)

    See the docs at http://orgmode.org/worg/org-tutorials/non-beamer-presentations.html#sec-5

    I have used org-beamer a lot until now, but I think the HTML export + JS + CSS will be a useful option too.

  6. gnumonk says:

    You can try epresenter in org mode, Its too good, I am using this from long.

  7. xfq says:

    Looks good. And without Org, we can also use outline-presentation-mode, which is a minor mode for outline-mode.

  8. Nehal Singhal says:

    this is very informative ma`am..especially for a novice like me..i use org-mode and have a little experience with org-babel.. i did not know about org-present.. :P

  9. tucasp says:

    Hello. In search on how to avoid some steps, and present directly from inside emacs, I found your article!
    Got the org-presie, and did some modifications to it:
    – arrow keys to go forward and backward (right and left keys)
    – combined with ESC go top-level topics each time
    – the structure it follows is *ANY* level topic, not only top-level topics
    – toggle to the PRES minor mode, or org-mode, when in PRESS mode, change the face scale to bigger.
    – Still *very* simple tool.
    If anyone is interested, can get the code at
    https://github.com/tucasp/org-presie

  10. Daniel Szmulewicz says:

    org-reveal is quite nice too. https://github.com/yjwen/org-reveal

  11. Fabio Arciniegas says:

    museslidy is a very simple way to create presentations with emacs as well. http://museslidy.net

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>