retro-pdf
Convert markdown documents to professional, retro LaTeX-style PDFs with academic formatting, clickable TOC, and proper citations.
Best use case
retro-pdf is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Convert markdown documents to professional, retro LaTeX-style PDFs with academic formatting, clickable TOC, and proper citations.
Teams using retro-pdf should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/retro-pdf/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How retro-pdf Compares
| Feature / Agent | retro-pdf | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Convert markdown documents to professional, retro LaTeX-style PDFs with academic formatting, clickable TOC, and proper citations.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Retro LaTeX-Style PDF Generation
Convert markdown documents to professional, retro LaTeX-style PDFs with academic formatting.
## Features
- **LaTeX/Academic styling** - Libre Baskerville font (similar to Computer Modern), tight paragraph spacing
- **Clickable Table of Contents** - Auto-generated TOC with anchor links to all sections
- **Geek Corner / Example Corner boxes** - Open-ended table style with horizontal rules (title separated from content by thin line)
- **Academic tables** - Horizontal rules only, italic headers, no vertical borders
- **Full references section** - Proper citations with clickable URLs
- **No headers/footers** - Clean pages without date/time stamps
## Usage
When the user asks to convert a markdown document to a retro/LaTeX-style PDF, follow this process:
### Step 1: Create the HTML Template
Create an HTML file with this exact structure and styling:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{DOCUMENT_TITLE}}</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=swap');
body {
font-family: 'Libre Baskerville', 'Computer Modern', Georgia, serif;
font-size: 10.5pt;
line-height: 1.35;
max-width: 680px;
margin: 40px auto;
padding: 0 20px;
color: #000;
background: #fff;
}
h1 {
font-size: 16pt;
font-weight: bold;
text-align: center;
margin-bottom: 6px;
line-height: 1.2;
}
.subtitle {
text-align: center;
font-style: italic;
font-size: 9.5pt;
margin-bottom: 20px;
color: #000;
}
h2 {
font-size: 12pt;
font-weight: bold;
margin-top: 18px;
margin-bottom: 8px;
}
h3 {
font-size: 10.5pt;
font-weight: bold;
margin-top: 14px;
margin-bottom: 6px;
}
h4 {
font-size: 10.5pt;
font-weight: bold;
font-style: italic;
margin-top: 12px;
margin-bottom: 5px;
}
p {
margin-bottom: 6px;
text-align: justify;
text-justify: inter-word;
}
ul, ol {
margin: 4px 0 6px 20px;
padding: 0;
}
li {
margin-bottom: 2px;
}
/* Table of Contents */
.toc {
margin: 20px 0 30px 0;
}
.toc-title {
font-weight: bold;
font-size: 11pt;
margin-bottom: 10px;
}
.toc ul {
list-style: none;
margin: 0;
padding: 0;
}
.toc li {
margin-bottom: 3px;
}
.toc a {
color: #000;
text-decoration: none;
}
.toc a:hover {
text-decoration: underline;
}
.toc .toc-h2 {
margin-left: 0;
}
.toc .toc-h3 {
margin-left: 15px;
font-size: 9.5pt;
}
/* Geek Corner / Example Corner - open table style like LaTeX */
.geek-corner {
margin: 14px 0;
padding: 0;
}
.geek-corner-top {
border-top: 1.5px solid #000;
padding-top: 8px;
padding-bottom: 6px;
border-bottom: 1px solid #000;
}
.geek-corner-bottom {
border-bottom: 1.5px solid #000;
padding-top: 6px;
padding-bottom: 8px;
}
.geek-corner-title {
font-weight: bold;
}
.geek-corner-content {
font-style: italic;
}
blockquote {
margin: 10px 0 10px 0;
padding: 0 0 0 20px;
font-style: italic;
}
code {
font-family: "Courier New", Courier, monospace;
font-size: 9.5pt;
}
/* Tables - open style with horizontal rules only */
table {
width: 100%;
border-collapse: collapse;
margin: 12px 0;
font-size: 10pt;
}
th {
border-top: 1.5px solid #000;
border-bottom: 1px solid #000;
padding: 6px 8px;
text-align: left;
font-weight: normal;
font-style: italic;
}
td {
padding: 5px 8px;
border-bottom: 1px solid #000;
vertical-align: top;
}
tr:last-child td {
border-bottom: 1.5px solid #000;
}
hr {
border: none;
border-top: 1px solid #000;
margin: 20px 0;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
.footnote {
font-size: 8.5pt;
margin-top: 30px;
padding-top: 10px;
border-top: 1px solid #000;
}
.footnote a {
color: #000;
word-break: break-all;
}
sup {
font-size: 7pt;
}
sup a {
color: #000;
text-decoration: none;
}
.key-takeaway {
margin: 10px 0;
}
.key-takeaway strong {
font-weight: bold;
}
@media print {
body {
margin: 0;
padding: 15px;
font-size: 10pt;
}
@page {
margin: 1.8cm;
size: A4;
}
a {
color: #000;
}
}
</style>
</head>
<body>
<!-- CONTENT GOES HERE -->
</body>
</html>
```
### Step 2: Structure the Content
#### Title and Subtitle
```html
<h1>Document Title</h1>
<p class="subtitle">Subtitle or tagline in italics</p>
<hr>
```
#### Table of Contents
```html
<div class="toc">
<div class="toc-title">Contents</div>
<ul>
<li class="toc-h2"><a href="#sec1">1. Section Title</a></li>
<li class="toc-h3"><a href="#sec1-1">1.1 Subsection Title</a></li>
<!-- ... more entries ... -->
<li class="toc-h2"><a href="#references">References</a></li>
</ul>
</div>
<hr>
```
#### Section Headings (with anchor IDs)
```html
<h2 id="sec1">1. Section Title</h2>
<h3 id="sec1-1">1.1 Subsection Title</h3>
<h4>Step 1: Sub-subsection (italic)</h4>
```
#### Geek Corner / Example Corner Box
```html
<div class="geek-corner">
<div class="geek-corner-top">
<span class="geek-corner-title">Geek Corner: Title Here</span>
</div>
<div class="geek-corner-bottom">
<span class="geek-corner-content">"The witty or insightful quote goes here in italics."</span>
</div>
</div>
```
#### Tables (Academic Style)
```html
<table>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
</tr>
</table>
```
#### Footnote References (in text)
```html
<sup><a href="#ref1">[1]</a></sup>
```
#### References Section
```html
<hr>
<h2 id="references">References</h2>
<div class="footnote" style="border-top: none; margin-top: 10px; padding-top: 0;">
<p id="ref1"><strong>[1]</strong> Author, Name. "Article Title." Publication (Year). <a href="https://url.com" target="_blank">https://url.com</a> - Brief description.</p>
<p id="ref2"><strong>[2]</strong> ...</p>
</div>
```
#### Key Takeaway
```html
<p class="key-takeaway"><strong>Key Takeaway:</strong> Important summary text here.</p>
```
### Step 3: Generate the PDF
Use Chrome headless to generate the PDF without headers/footers:
```bash
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--headless \
--disable-gpu \
--print-to-pdf="/path/to/output.pdf" \
--print-to-pdf-no-header \
--no-pdf-header-footer \
"file:///path/to/input.html"
```
On Linux:
```bash
google-chrome --headless --disable-gpu --print-to-pdf="/path/to/output.pdf" --print-to-pdf-no-header --no-pdf-header-footer "file:///path/to/input.html"
```
## Style Guidelines
1. **Paragraphs**: Keep text dense and justified. Collapse bullet points into flowing prose where appropriate.
2. **Geek Corner**: Use for witty asides, technical insights, or memorable quotes. Always include:
- A catchy title (e.g., "Geek Corner: Amdahl's Law, App Edition")
- Italic content in quotes
3. **Tables**: Use sparingly for data comparisons. Always use the open style (horizontal rules only).
4. **References**: Always include full citations with:
- Author name
- Article/document title in quotes
- Publication/source and year
- Full clickable URL
- Brief description of what the reference covers
5. **Spacing**: Keep tight - 6px paragraph margins, 1.35 line height.Related Skills
workflow
Guide through structured delivery workflow with plan, implement, validate phases
webapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
validate
Verify implementation against specifications
ui-ux-pro-max
UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, Astro, Nuxt, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.
tui-style-guide
TUI style guide for consistent terminal interface design
token-usage
Show Claude Code token usage across sessions — daily, weekly, per-project, and per-session breakdowns. Parses {{HOME_TOOL_DIR}}/projects/**/*.jsonl for consumption data. Use when the user asks about token usage, costs, how many tokens were used, session statistics, or wants a usage report.
tmux-status
Show status of all tmux sessions including dev environments, spawned agents, and running processes
tmux-monitor
Monitor and report status of all tmux sessions including dev environments, spawned agents, and running processes. Uses tmuxwatch for enhanced visibility.
tmux-message
Reliable peer-to-peer message delivery to other Claude Code instances via tmux send-keys. Use as a fallback when claude-peers MCP send_message fails to surface in the receiver's inbox (delivered server-side but receiver never picks it up — observed behaviour). Also use when sending a directive to a known Claude Code TUI session by tmux session name or fuzzy hint, or when injecting a multi-line directive into a peer's prompt and submitting it. Trigger phrases — "claude-peers fallback", "tmux send-keys", "send to peer via tmux", "inject directive", "deliver to nanoclaw/hermes peer", "peer message". Tmux-only — won't reach peers running outside tmux.
test-driven-development
Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.
test-ainb
Run tests for the ainb (agents-in-a-box) Rust workspace via a 5-layer strategy — unit, insta snapshot, mock-plugin compositing, real-plugin spawn, vhs recording. Wraps cargo + insta + vhs into one CLI. Use when Stevie says "/test-ainb", "test ainb", "run ainb tests", "snapshot <component>", "regenerate vhs tapes", or any phrasing about validating ainb test layers. The skill autodetects which ainb-tui worktree the cwd sits in and dispatches to scripts/run.sh.
sync-learnings
Sync user-level agent config changes back to toolkit repository (works for Claude, Codex, Copilot)