8.5 KiB
Pandoc Templates Guide
How to use and customize Pandoc document templates.
Available Templates
1. academic-paper.yaml
Purpose: Academic papers with citations Features:
- Bibliography support
- Citation style (CSL)
- Standard academic formatting
- Table of contents
Best for: Research papers, essays, academic assignments
2. thesis-report.yaml
Purpose: Thesis and long-form reports Features:
- Custom title page
- Supervisor/institution fields
- List of figures/tables
- Chapter-based structure
- Declaration section
Best for: Final year projects, dissertations, technical reports
3. presentation-beamer.yaml
Purpose: PDF presentations via LaTeX Beamer Features:
- Slide themes
- Code highlighting
- Incremental reveals
- Speaker notes
Best for: Academic presentations, lectures, conferences
4. presentation-revealjs.yaml
Purpose: Web-based presentations Features:
- Modern web slides
- Transitions and animations
- Two-column layouts
- Background images
- Fragment animations
Best for: Web presentations, online seminars, interactive slides
5. article-simple.yaml
Purpose: Quick, minimal documents Features:
- Basic metadata only
- Fast compilation
- Minimal configuration
Best for: Quick notes, simple documents, drafts
6. defaults-pdf.yaml
Purpose: Reusable defaults file Features:
- Consistent settings across documents
- Project-wide configuration
- Override-able options
Best for: Multi-document projects, team collaboration
7. references.bib
Purpose: BibTeX bibliography template Features:
- Example entries for all common types
- Field reference guide
- Formatting instructions
Best for: Citation management, bibliography creation
Using Templates
Method 1: Copy to New File
PLUGIN_DIR="~/.claude/marketplaces/cadrianmae-claude-marketplace/plugins/pandoc"
cp "$PLUGIN_DIR/skills/pandoc/assets/templates/academic-paper.yaml" paper.md
Method 2: User Command
/pandoc:template academic-paper paper.md
Method 3: View Then Create
# View template first
/pandoc:template academic-paper
# Then create when ready
/pandoc:template academic-paper paper.md
Customizing Templates
1. Edit Metadata Fields
Replace placeholder values:
title: "Your Paper Title" # Change this
author: "Your Name" # Change this
date: "November 2024" # Change this
2. Add Custom Fields
# Add to existing frontmatter
student-id: "C21348423"
module: "COMP4060"
supervisor: "Dr. Smith"
3. Modify Formatting
# Change document appearance
fontsize: 11pt # Was 12pt
geometry: margin=1.5in # Was 1in
linestretch: 2.0 # Was 1.5 (now double-spaced)
4. Bibliography Settings
# Change citation style
csl: apa.csl # Was harvard.csl
# Add multiple bibliography files
bibliography:
- references.bib
- additional.bib
5. LaTeX Customization
header-includes: |
\usepackage{graphicx}
\usepackage{custom-package}
\newcommand{\mycommand}{text}
Creating Custom Templates
Step 1: Start from Existing
PLUGIN_DIR="~/.claude/marketplaces/cadrianmae-claude-marketplace/plugins/pandoc"
# Copy closest match
cp "$PLUGIN_DIR/skills/pandoc/assets/templates/academic-paper.yaml" my-template.yaml
Step 2: Customize Frontmatter
Edit my-template.yaml:
---
# Your custom fields
title: "Template Title"
custom-field: "Custom Value"
# Your formatting preferences
documentclass: report
fontsize: 12pt
geometry: "left=1.5in, right=1in"
linestretch: 1.5
# Your packages
header-includes: |
\usepackage{custom}
---
# Template Content
Your template content here.
Step 3: Save for Reuse
# Save in project
mkdir -p .pandoc/templates/
mv my-template.yaml .pandoc/templates/
# Use it
cp .pandoc/templates/my-template.yaml new-document.md
Template Inheritance
Using Defaults Files
Create base configuration:
.pandoc/base.yaml:
from: markdown
to: pdf
pdf-engine: pdflatex
metadata:
lang: en-GB
fontsize: 12pt
geometry: margin=1in
Use in document:
pandoc document.md --defaults=.pandoc/base.yaml -o output.pdf
Layered Defaults
Base settings:
# .pandoc/base.yaml
metadata:
fontsize: 12pt
lang: en-GB
Citation settings:
# .pandoc/citations.yaml
citeproc: true
metadata:
link-citations: true
Combine:
pandoc doc.md \
--defaults=.pandoc/base.yaml \
--defaults=.pandoc/citations.yaml \
-o output.pdf
Project Templates
Academic Project Structure
project/
├── .pandoc/
│ ├── defaults.yaml # Project-wide settings
│ ├── templates/
│ │ ├── chapter.yaml # Chapter template
│ │ └── appendix.yaml # Appendix template
│ └── filters/
│ └── custom.lua # Custom filters
├── chapters/
│ ├── chapter1.md
│ ├── chapter2.md
│ └── chapter3.md
├── references.bib
├── harvard.csl
└── Makefile
Makefile for Project
# Variables
PANDOC = pandoc
DEFAULTS = .pandoc/defaults.yaml
CHAPTERS = chapters/*.md
OUTPUT = thesis.pdf
# Main targets
all: $(OUTPUT)
$(OUTPUT): $(CHAPTERS) references.bib
$(PANDOC) $(CHAPTERS) \
--defaults=$(DEFAULTS) \
-o $(OUTPUT)
# Individual chapters
chapter%.pdf: chapters/chapter%.md
$(PANDOC) $< \
--defaults=$(DEFAULTS) \
-o $@
# Clean
clean:
rm -f *.pdf
# Help
help:
@echo "Available targets:"
@echo " all - Build complete thesis"
@echo " chapter%.pdf - Build individual chapter"
@echo " clean - Remove generated PDFs"
.PHONY: all clean help
Usage:
make # Build thesis
make chapter1.pdf # Build chapter 1 only
make clean # Remove PDFs
Template Best Practices
1. Use Placeholders
title: "Document Title" # Clear what to change
author: "Author Name" # Not "TODO" or "FILL IN"
date: "Date" # Simple placeholder
2. Include Comments
documentclass: report # Options: article, report, book
fontsize: 12pt # Options: 10pt, 11pt, 12pt
geometry: margin=1in # Or: margin=2cm, left=1.5in
3. Provide Examples
# Single author
author: "Author Name"
# Multiple authors
# author:
# - "First Author"
# - "Second Author"
4. Set Sensible Defaults
lang: en-GB # British English
fontsize: 12pt # Standard academic
geometry: margin=1in # Standard margins
linestretch: 1.5 # Standard spacing
5. Document Requirements
# Required files for this template:
# - references.bib (bibliography)
# - harvard.csl (citation style)
# - logo.png (if using custom title page)
Troubleshooting Templates
Template Won't Convert
Check:
- YAML syntax (spaces not tabs)
- Required files exist
- Field names spelled correctly
- Values properly quoted
Validate:
PLUGIN_DIR="~/.claude/marketplaces/cadrianmae-claude-marketplace/plugins/pandoc"
python3 "$PLUGIN_DIR/skills/pandoc/scripts/validate.py" template.md
Custom Fields Not Working
Some fields are LaTeX-specific:
# Works in PDF
geometry: margin=1in
# Doesn't work in HTML/DOCX
# Use CSS for HTML instead
Bibliography Issues
Ensure:
bibliography: references.bib # File exists
csl: harvard.csl # File exists
Then convert with:
pandoc doc.md -o doc.pdf --citeproc
Advanced Customization
Custom LaTeX Template
Create template.tex:
\documentclass{$documentclass$}
% Packages
$for(header-includes)$
$header-includes$
$endfor$
\title{$title$}
\author{$author$}
\date{$date$}
\begin{document}
\maketitle
$body$
\end{document}
Use template:
pandoc doc.md -o doc.pdf --template=template.tex
Conditional Content
# In frontmatter
draft: true
<!-- In document -->
$if(draft)$
**DRAFT VERSION**
$endif$
Variables in Content
Frontmatter:
institution: "University Name"
Content:
This research was conducted at $institution$.
Resources
- Pandoc Templates: https://pandoc.org/MANUAL.html#templates
- Template Variables: https://pandoc.org/MANUAL.html#variables
- LaTeX Templates: https://www.latextemplates.com/
- CSL Styles: https://github.com/citation-style-language/styles