Generate PDF and Epub files using Pandoc

David CarrDavid Carr
2 min read

I write my books using Markdown. Using a tool called Pandoc you can convert Markdown files into PDF's and Epub files. Lets take a look at the commands.

Install Pandoc with Homebrew

brew install pandoc

Converte a .md file to .pdf aka generate a PDF

pandoc demo.md --pdf-engine=xelatex -o demo.pdf

Note when generating a PDF the option --pdf-engine is required.

The syntax is pandoc followed by the source file add any options with the -- flag. Set the output location and filename with the -o flag.

if you encoutner this error:

pandoc: /Library/TeX/texbin/pdflatex: createProcess: posix_spawnp: illegal operation (Inappropriate ioctl for device)

It means xelatex is not installed on the machine.

To install xelatex:

brew tap homebrew/cask
brew install basictex
eval "$(/usr/libexec/path_helper)"
sudo tlmgr update --self
sudo tlmgr install texliveonfly
sudo tlmgr install xelatex
sudo tlmgr install adjustbox
sudo tlmgr install tcolorbox
sudo tlmgr install collectbox
sudo tlmgr install ucs
sudo tlmgr install environ
sudo tlmgr install trimspaces
sudo tlmgr install titling
sudo tlmgr install enumitem
sudo tlmgr install rsfs

Running the command again:

pandoc demo.md --pdf-engine=xelatex -o demo.pdf

You may see:

[WARNING] Missing character: There is no ├ (U+251C) (U+251C) in font [lmmono10-regular]:!

You can either install a font that supports the symbols, often caused by emoji's for example ✓

Once the above has been corrected you will be able to generate PDF from Markdown files using:

pandoc demo.md --pdf-engine=xelatex -o demo.pdf

To add a table of contents use the option --toc in the command

Make PDF:

pandoc demo.md --pdf-engine=xelatex --toc -o demo.pdf

Make Epub:

pandoc demo.md --toc -o demo.epub

Front Matter

When working with PDF/Markdown you can specify YAML tags in the markdown to set the book title, author and event the cover image with working with EPUB

This should be at the top of the file, it will not be printed.

---
title: Demo Book
creator:
- role: author
  text: David Carr
cover-image: cover.jpg
---

Write a book

Here is a basic markdown file; this has chapters designated by # (h1) sub headings can be added by using ## (h2)

---
title: Demo Book
creator:
- role: author
  text: David Carr
cover-image: cover.jpg
---

# Chapter 1

An example chapter.....

# Chapter 2

This is super basic

## Sub chapter that belongs to chapter 2

>Markdown is awesome!

# Chapter 3

Convert this to a PDF or Epub file to produce:

ebook

0
Subscribe to my newsletter

Read articles from David Carr directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

David Carr
David Carr

Blogger at http://dcblog.dev.