Markdown FTW 8. August 2012
I finally switched to Markdown or rather Pandoc for my presentations, writings, and even for my blog.
Editing in vim
There is a nice vim bundle for pandoc users at https://github.com/vim-pandoc/vim-pandoc.
The only thing that has nerved me was that using the predefined :Pandoc… commands did not write the file automatically. But this one was really easy to fix. I am using F5
to produce an HTML file and F6
for PDF generation:
au FileType pandoc map <F5> :w<CR>:PandocHtml<CR><ESC>
au FileType pandoc imap <F5> <esc><F5>a
au FileType pandoc map <F6> :w<CR>:PandocPdf<CR><ESC>
au FileType pandoc imap <F6> <esc><F6>a
BTW, my vim configuration can be found at https://github.com/obcode/dotfiles.
Editing elsewhere
A really nice sort of WYSIWYG editor is Mou. Two drawbacks:
- It’s available only for Max OS X.
- It is, of course, not aware of any pandoc extension.
But it’s very useful for editing blog posts like this one for http://telegr.am/.
On my Android phone I am using DroidEdit with which it is possible to edit files directly in Dropbox.
Makefiles
Growing up — w.r.t. my computer science life — as a FreeBSD ports committer I am using Makefiles in a lot of places.
My simplest setup for generating HTML and PDF using pandoc is the following Makefile snippet:
%.html: %.txt
pandoc -s -S -o $(subst .txt,.html,$<) $<
%.pdf: %.txt
pandoc -S -o --toc $(subst .txt,.pdf,$<) $<
Apologies for using GNU Make instead of BSD Make :-)
-s
means “generate a standalone file”, which is the default when generating a PDF-S
means “generate typographically correct output” and stands for smart-o
is used to specify an output file instead of printing to stdout
--toc
generates a table of contents. I usually like to have a TOC in my PDFs but not in my plain HTML files
Pandoc is smart enough to recognize the output format from the output file extension. Therefore it is not necessary to specify the format using -t
.
BTW, I am using .txt
instead of .md
or .markdown
or … because this way people who are not aware of Markdown, like some of my students, are able to open these files with a simple text editor and are not asked for a special application which can handle Markdown files.
Usually, I add all
and clean
targets like so:
HTML_FILES= filename1.html filename2.html
PDF_FILES= filename1.pdf filename2.pdf
all: all_html all_pdf
all_html: $(HTML_FILES)
all_pdf: $(PDF_FILES)
clean:
rm -f $(HTML_FILES) $(PDF_FILES)
Presentations
As stated before, I am using Pandoc now for all my presentations. Before that I have been using LaTeX with the beamer documentclass. Now I am generating Slidy slideshows by just adding -t slidy
to the line generating HTML like so
pandoc -t slidy -s -S -o filename.html filename.txt
If you want to be able to use the resulting presentation offline you can use the --self-contained
flag. Furthermore, it is possible to customize almost everything for your own needs by specifying a custom CSS file, a special header file and so forth. I have already thought about it, but currently I am using plain slidy.