I switched recently to Neovim as a full-time text editor. This means that I no longer have access to Emacs Org mode natively. Of course, I still have Emacs on my machine — otherwise, I wouldn’t be able to handle Org file without resorting to Pandoc (which doesn’t handle Babel code chunks, unfortunately). This is just that I want to avoid opening Emacs just to export an Org file to a PDF or HTML document. Hopefully, it’s quite easy to call Emacs from the command line and ask it to compile Org files on the go.
Over the past few months, I wrote some custom templates for PDF and HTML exports, namely the Tufte $\LaTeX$ handout and a hand crafted HTML template that I discussed in previous posts. I know I could write in Markdown and use Pandoc, but I don’t want to forget all those Org files that I wrote in the last two years or so. Moreover, I still believe that the Org specs are better than the Markdown ones, especially because the latter are not really ones.
Here is a simple shell script that takes care of this:
#!/usr/bin/env sh
OPT=$1
FILE=$2
case $OPT in
-pdf)
emacs --batch -l /home/chl/org/org-babel.el --eval "(progn (find-file \"$FILE\") (org-latex-export-to-pdf))"
;;
-html)
rc="$(grep '#+BIBLIOGRAPHY' $FILE)"
[ -z $rc ] && echo "\033[1mNo valid bibliography found.\033[0m"
emacs --batch -l /home/chl/org/org-babel.el --eval "(progn (find-file \"$FILE\") (org-html-export-to-html))"
;;
*)
echo "Unknown export format."
;;
esac
Basically, it allows to compile an Org file and to produce either a PDF or HTML file, based on the flag passed when invoking the command. Of note, for HTML documents it relies on ox-bibtex
, while PDFs are produced using the standard toolchain (biblatex with bibtex backend and pdflatex, but it is not difficult to use biber and lualatex instead). With that in place, I can now regenerate my previous documents without even opening Emacs, which is great after all. I know that the vim-orgmode plugin can take care of this as well, but as you see it is not very difficult to write your own backend for that purpose. I keep my custom settings in the file org-babel.el
, which remains available on Github in my “org” repository, in case you’re interested.