pandoc
Universal document conversion with Pandoc. Use when converting between document formats (Markdown, DOCX, HTML, LaTeX, PDF, EPUB, PPTX, reveal.js, CSV, RST, Org), generating polished deliverables from
SKILL.mdagents/skills/pandoc/SKILL.md
GitHubPandoc Skill
Universal document converter — transforms content between 40+ formats while preserving structure, metadata, and styling.
When to Use
- Convert Markdown → DOCX, PDF, HTML, EPUB, PPTX, or slides
- Convert DOCX/HTML → Markdown (for ingestion into repos or KBs)
- Batch-convert multiple files in one pass
- Generate professional reports with custom templates
- Build reveal.js slide decks from Markdown
- Extract structured content from HTML or EPUB
- Apply Lua filters for custom transformations (citation rewriting, heading renumbering, metadata injection)
- Produce camera-ready LaTeX or PDF from Markdown drafts
Core Commands
# Markdown → Word
pandoc input.md -o output.docx
# Markdown → PDF (requires LaTeX engine)
pandoc input.md -o output.pdf --pdf-engine=lualatex
# Markdown → PDF (no LaTeX — use HTML intermediate)
pandoc input.md -t html5 -o output.pdf --pdf-engine=wkhtmltopdf
# Markdown → reveal.js slides
pandoc slides.md -t revealjs -s -o slides.html
# Markdown → PowerPoint
pandoc input.md -o output.pptx
# Markdown → EPUB
pandoc input.md --metadata title="My Book" -o output.epub
# Word → Markdown (for repo ingestion)
pandoc input.docx -t markdown -o output.md
# HTML → Markdown
pandoc input.html -t markdown -o output.md
# CSV → HTML table
pandoc input.csv -f csv -t html -o table.html
# With custom template
pandoc input.md --template=template.tex -o output.pdf
# With Lua filter
pandoc input.md --lua-filter=filter.lua -o output.docx
# Batch convert (all .md in directory)
for f in *.md; do pandoc "$f" -o "${f%.md}.docx"; done
Workflow
- Identify source and target formats — determine the conversion path.
- Check if extras are needed:
- PDF output → needs a LaTeX engine (
lualatex,xelatex) orwkhtmltopdf - Styled DOCX → use
--reference-doc=reference.docx - Slides → choose
revealjs(HTML) orpptx(PowerPoint) - Citations → use
--citeprocwith a.bibfile
- PDF output → needs a LaTeX engine (
- Run the conversion — use the simplest command that achieves the goal.
- Verify output:
- For DOCX/PPTX: open or use the
doc/pptxskill for visual QA - For PDF: use the
pdfskill to render pages and inspect - For HTML: open in browser or use
agent-browserskill
- For DOCX/PPTX: open or use the
- Iterate — adjust metadata, templates, or filters as needed.
- Clean up — remove intermediate files.
Key Options
| Flag | Purpose |
|---|---|
-f FORMAT |
Input format (auto-detected from extension if omitted) |
-t FORMAT |
Output format (auto-detected from extension if omitted) |
-s / --standalone |
Produce complete document (not fragment) |
--template=FILE |
Custom template for output |
--reference-doc=FILE |
Style reference for DOCX/PPTX output |
--pdf-engine=ENGINE |
PDF engine: lualatex, xelatex, wkhtmltopdf, weasyprint |
--toc |
Generate table of contents |
--number-sections |
Number headings |
--metadata KEY=VAL |
Set metadata (title, author, date) |
--lua-filter=FILE |
Apply Lua filter for custom transforms |
--citeproc |
Process citations from bibliography |
--bibliography=FILE |
BibTeX/CSL JSON bibliography |
--highlight-style=STYLE |
Code syntax highlighting theme |
--columns=N |
Line wrap width for plain text output |
--wrap=none |
No line wrapping (useful for Markdown output) |
--extract-media=DIR |
Extract images to directory |
YAML Metadata Block
Place at the top of Markdown files for rich output:
---
title: "Document Title"
author: "Author Name"
date: 2026-05-16
abstract: "Brief summary"
lang: en
toc: true
number-sections: true
geometry: margin=1in
fontsize: 12pt
---
Lua Filters (Advanced)
Pandoc supports Lua scripting for custom transformations. Save as .lua:
-- uppercase-headings.lua — capitalize all headings
function Header(el)
el.content = pandoc.walk_inline(el.content, {
Str = function(s) return pandoc.Str(s.text:upper()) end
})
return el
end
Use with: pandoc input.md --lua-filter=uppercase-headings.lua -o output.docx
Temp and Output Conventions
- Intermediate files:
tmp/pandoc/— delete when done - Final deliverables:
output/pandoc/or alongside source file - Templates: store in
~/.pandoc/templates/or project-localtemplates/ - Lua filters: store in
~/.pandoc/filters/or project-localfilters/
Dependencies
Pandoc is installed via the system package manager (brew install pandoc on macOS, apt install pandoc on Linux).
For PDF output, one of:
# LaTeX (full — large install ~4GB)
brew install --cask mactex
# LaTeX (minimal — recommended)
brew install basictex
# then: sudo tlmgr install collection-fontsrecommended
# No LaTeX alternative
brew install wkhtmltopdf
# or: pip install weasyprint
Format Quick Reference
| Input | Best Output Targets |
|---|---|
| Markdown | docx, pdf, html, epub, pptx, revealjs, latex |
| DOCX | markdown, html, plain |
| HTML | markdown, docx, epub, pdf |
| LaTeX | pdf, html, docx |
| CSV | html (tables), markdown |
| EPUB | markdown, html, docx |
| Org-mode | markdown, html, docx, pdf |
| RST | markdown, html, docx, pdf |
Integration with Other Skills
- doc/docx skill — use pandoc to generate DOCX, then
docskill for visual QA - pdf skill — use pandoc for PDF generation, then
pdfskill to render and verify - pptx skill — use pandoc for slide generation, then
pptxskill for refinement - deep-research — convert research outputs to polished deliverables
- hyperframes — convert Markdown scripts to HTML for video compositions