ResultsMotivated.com

Defending my Master's Thesis using org-present

<2023-04-03>

I am a graduate student and recently I had to defend my master's thesis. For those unaware, a thesis defense is (in theory) a presentation about my thesis in front of a committee of professors who afterward decide whether I am worthy of graduating or not. In practice, most of the work was done by that point and I was basically a shoo-in. It was sort of high stakes, but not really.

I decided to make the slide deck for my defense in Emacs using the package org-present. The reason I chose to do this was primarily for the memes. Most people would have used PowerPoint, LibreOffice, Beamer or another perfectly good tool that is less liable to break, but I just couldn't pass on an opportunity to fool around with Emacs.

A more serious reason that I decided to use org-present for my thesis defense is because I saw it as an opportunity to do some "field testing" for the org-present package. I wanted to see for myself whether org-present was any good or not. So, not only was I giving a presentation about a research project, making my slide deck itself was also a research project.

Here is the configuration that I used.

(use-package visual-fill-column
  :ensure t
  :custom
  (visual-fill-column-width 110)
  (visual-fill-column-center-text t))

(defun nate/pretty-article-on ()
    "Good for `org-mode' (sometimes), elfeed articles, walls-of-prose, etc."
    (interactive)
    (visual-line-mode 1)
    (visual-fill-column-mode 1)
    (display-line-numbers-mode 0)
    ;; Force window to update margins
    (set-window-buffer nil (current-buffer)))

(defun nate/pretty-article-off ()
    "Good for `org-mode' (sometimes), elfeed articles, walls-of-prose, etc."
    (interactive)
    (visual-fill-column-mode 0)
    (visual-line-mode 0)
    (display-line-numbers-mode 1)
    ;; Force window to update margins
    (set-window-buffer nil (current-buffer)))


(use-package org-present
  :ensure t
  :init
  ;; Note: to exit org-present, use `org-present-quit' (C-c C-q) not
  ;; `org-present-end' (which goes to the last slide)
  ;; TODO: Add a check so that this only can be called in org mode
  (add-hook 'org-present-mode-hook (lambda ()
                                     ;;(goto-char (point-min))
                                     (org-present-big)
                                     (nate/pretty-article-on)
                                     ;; turn off tab bar mode and menu bar mode
                                     (tab-bar-mode 0)
                                     (menu-bar-mode 0)
                                     (org--latex-preview-region (point-min) (point-max))
                                     (org-display-inline-images)
                                     (org-present-hide-cursor)
                                     (flyspell-mode 0)
                                     (flycheck-mode 0)
                                     ))

  (add-hook 'org-present-mode-quit-hook (lambda ()
                                          (nate/pretty-article-off)
                                          (org-present-small)
                                          (tab-bar-mode 1)
                                          (menu-bar-mode 1)
                                          (org-remove-inline-images)
                                          (org-present-show-cursor)
                                          (org-clear-latex-preview (point-min) (point-max))

                                          (flyspell-mode 1)
                                          (flyspell-buffer)
                                          (flycheck-mode 1)

                                          )))

As you can see, there is a lot of code here. Getting org-present to behave was far from a trivial task. To be honest, there is a risk involved in using this for a presentation because so much of it is customized. Again, the only way to gain confidence in something like this is through dog-fooding.

Notice that this configuration is tailored specifically for my personal Emacs set-up. For other configurations, it will likely need to be tweaked.


Keywords: emacs

Modified: 2024-09-10 10:09:58 EDT

Emacs 29.1.50 (Org mode 9.7.6)