How toUse Pandoc to convert a Markdown to a PDF and ePUB

If you ever need to convert a Markdown file to a PDF and ePUB, Pandoc is a great CLI tool to help you do it.

Installation

First you will have to install it, on Mac you can do it with Brew

brew install pandoc

To generate a PDF, you will also need to install mactext, also with Brew, which has the engines used by Pandoc to generate PDFs.

brew install mactex

Generate PDF

To generate a PDF from a Markdown file, you can use the following command:

pandoc file.md -f markdown -t pdf -s -o file.pdf \
	--metadata title="Title of the Document" \
	--metadata author="Author" \
	--metadata language="en" \
	--metadata rights="Any copyright message" \
	--metadata date="`date +'%Y-%m-%d'`" \
	--toc

This will take the file.md and generate a file.pdf with the metadata and a table of contents.

Generate ePUB

To generate an ePUB from a Markdown file, you can use the following command:

pandoc file.md -f markdown -t epub -s -o file.epub \
	--metadata title="Title of the Document" \
	--metadata author="Author" \
	--metadata language="en" \
	--metadata rights="Any copyright message" \
	--metadata date="`date +'%Y-%m-%d'`" \
	--epub-title-page=false \
	--toc

This will take the file.md and generate a file.epub with the metadata and a table of contents, you can then open this ePUB file on any reader, like Apple Books.

Use Makefile to automate

You can also create a Makefile to automate the process, here is an example:

all: pdf epub

pdf:
	pandoc $(file).md -f markdown -t pdf -s -o $(file).pdf \
		--metadata title="$(title)" \
		--metadata author="Your Name" \
		--metadata language="en" \
		--metadata rights="@2025 by Your Name, All Rights Reserved" \
		--metadata date="`date +'%Y-%m-%d'`" \
		--toc

epub:
	pandoc $(file).md -f markdown -t epub -s -o $(file).epub \
		--metadata title="$(title)" \
		--metadata author="Your Name" \
		--metadata language="en" \
		--metadata rights="@2025 by Your Name, All Rights Reserved" \
		--metadata date="`date +'%Y-%m-%d'`" \
		--epub-title-page=false \
		--toc

Now you can run this command to generate both PDF and ePUB:

make all file=your-file title="Your Title"

And you will have both files generated.