Pandoc Reference

January 29, 2026 ยท View on GitHub

Pandoc is a universal document converter that can convert between numerous markup formats, including Markdown, HTML, LaTeX, Word, and many more.

Installation

Windows

# Using Chocolatey
choco install pandoc

# Using Scoop
scoop install pandoc

# Or download installer from https://pandoc.org/installing.html

macOS

# Using Homebrew
brew install pandoc

Linux

# Debian/Ubuntu
sudo apt-get install pandoc

# Fedora
sudo dnf install pandoc

# Or download from https://pandoc.org/installing.html

Basic Usage

Convert Markdown to HTML

# Basic conversion
pandoc input.md -o output.html

# Standalone document with headers
pandoc input.md -s -o output.html

# With custom CSS
pandoc input.md -s --css=style.css -o output.html

Convert to Other Formats

# To PDF (requires LaTeX)
pandoc input.md -s -o output.pdf

# To Word
pandoc input.md -s -o output.docx

# To LaTeX
pandoc input.md -s -o output.tex

# To EPUB
pandoc input.md -s -o output.epub

Convert from Other Formats

# HTML to Markdown
pandoc -f html -t markdown input.html -o output.md

# Word to Markdown
pandoc input.docx -o output.md

# LaTeX to HTML
pandoc -f latex -t html input.tex -o output.html

Common Options

OptionDescription
-f, --from <format>Input format
-t, --to <format>Output format
-s, --standaloneProduce standalone document
-o, --output <file>Output file
--tocInclude table of contents
--toc-depth <n>TOC depth (default: 3)
-N, --number-sectionsNumber section headings
--css <url>Link to CSS stylesheet
--template <file>Use custom template
--metadata <key>=<value>Set metadata
--mathmlUse MathML for math
--mathjaxUse MathJax for math
-V, --variable <key>=<value>Set template variable

Markdown Extensions

Pandoc supports many markdown extensions:

# Enable specific extensions
pandoc -f markdown+emoji+footnotes input.md -o output.html

# Disable specific extensions
pandoc -f markdown-pipe_tables input.md -o output.html

# Use strict markdown
pandoc -f markdown_strict input.md -o output.html

Common Extensions

ExtensionDescription
pipe_tablesPipe tables (default on)
footnotesFootnote support
emojiEmoji shortcodes
smartSmart quotes and dashes
task_listsTask list checkboxes
strikeoutStrikethrough text
superscriptSuperscript text
subscriptSubscript text
raw_htmlRaw HTML passthrough

Templates

Using Built-in Templates

# View default template
pandoc -D html

# Use custom template
pandoc --template=mytemplate.html input.md -o output.html

Template Variables

<!DOCTYPE html>
<html>
<head>
  <title>$title$</title>
  $for(css)$
  <link rel="stylesheet" href="$css$">
  $endfor$
</head>
<body>
$body$
</body>
</html>

YAML Metadata

Include metadata in your markdown files:

---
title: My Document
author: John Doe
date: 2025-01-28
abstract: |
  This is the abstract.
---

# Introduction

Document content here...

Filters

Using Lua Filters

pandoc --lua-filter=filter.lua input.md -o output.html

Example Lua filter (filter.lua):

function Header(el)
  if el.level == 1 then
    el.classes:insert("main-title")
  end
  return el
end

Using Pandoc Filters

pandoc --filter pandoc-citeproc input.md -o output.html

Batch Conversion

Bash Script

#!/bin/bash
for file in *.md; do
  pandoc "$file" -s -o "${file%.md}.html"
done

PowerShell Script

Get-ChildItem -Filter *.md | ForEach-Object {
  $output = $_.BaseName + ".html"
  pandoc $_.Name -s -o $output
}

Resources