| name | latex |
| description | Generate LaTeX documents (or convert markdown to LaTeX) with professional typography. Optionally compile to PDF. |
| allowed-tools | Read, Write, Bash(pdflatex:*), Bash(xelatex:*), Bash(lualatex:*), Bash(latexmk:*), Bash(biber:*), Bash(bibtex:*), Bash(which:*), Bash(uname:*) |
LaTeX Document Creator
Create beautifully formatted LaTeX documents from any input source (markdown files, plain text, structured data, or user instructions). Produce professional-quality typeset output following modern LaTeX best practices.
Workflow
- Analyze input - Read the source material, identify structure (headings, lists, tables, figures, math, code, citations)
- Determine document class - Select appropriate class based on content type and length
- Generate LaTeX - Produce a complete
.tex file with proper preamble and body
- Compile to PDF (if requested) - Detect platform and compile using
latexmk
If the user provides additional formatting instructions, apply them. User instructions override defaults below.
Document Class Selection
| Content Type | Class | When |
|---|
| Short documents, articles, memos | scrartcl | No chapters needed |
| Reports, theses, long documents | scrreprt | Chapter-level structure |
| Books, manuals | scrbook | Front/back matter, parts |
| Presentations | beamer | Slides |
Use KOMA-Script classes (scrartcl, scrreprt, scrbook) over standard classes for superior typography defaults and built-in customization.
Standard Preamble
Organize the preamble in this order. Include only packages the document actually needs.
\documentclass[a4paper, 11pt]{scrartcl}
% --- Typography ---
\usepackage[T1]{fontenc}
\usepackage{lmodern} % Clean, professional font
\usepackage{microtype} % ESSENTIAL: character protrusion + font expansion
% --- Math (include only if document has math) ---
\usepackage{mathtools} % Superset of amsmath with fixes
\usepackage{amssymb}
% --- Layout ---
\usepackage{geometry}
% --- Tables & Figures ---
\usepackage{booktabs} % Professional table rules
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
% --- Lists ---
\usepackage{enumitem}
% --- Language & Quotes ---
\usepackage[english]{babel}
\usepackage{csquotes}
% --- Colors ---
\usepackage{xcolor}
% --- Code Listings (include only if document has code) ---
\usepackage{listings}
% --- Units (include only if document has quantities) ---
\usepackage{siunitx}
% --- Links & References (load near-last) ---
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue!70!black,
citecolor=green!50!black,
urlcolor=blue!70!black,
}
\usepackage{cleveref} % MUST be after hyperref
Package Notes
microtype is non-negotiable for professional output - always include it
mathtools loads amsmath automatically; never load both
cleveref must load after hyperref
hyperref should load near-last
- For bibliography: use
biblatex with biber backend, not legacy bibtex/natbib
Typography Rules
Fonts
- Default:
lmodern (Latin Modern) - clean, professional, widely available
- Alternative serif:
libertinus, newtxtext/newtxmath (Times-like)
- For system fonts (Unicode): switch to LuaLaTeX with
fontspec
Spacing and Punctuation
- En-dash for ranges:
2020--2025 renders as 2020–2025
- Em-dash for breaks:
word---word renders as word—word
- Non-breaking space (
~) before \cite, \cref, and between numbers and units
- Thin space before differentials:
\int f(x) \, dx
- Use
\enquote{} from csquotes for quotation marks, never manual quote characters
- Use
\emph{} instead of \textit{} - semantic emphasis that adapts to context
- Use
\dots for ellipses, never three periods
Sentence Spacing
- After abbreviations (not ending a sentence):
e.g.\ this, i.e.\ that
- After a capital letter ending a sentence:
NASA\@. The next sentence
Formatting Standards
Tables
- Always use
booktabs: \toprule, \midrule, \bottomrule
- Never use vertical rules (
|) or \hline
- Place table captions above the table
- Place figure captions below the figure
Figures
- Use
\centering inside floats, not \begin{center}
- Default float placement:
[htbp]
- Reference all figures in text before they appear
Cross-References
- Use
\cref{} from cleveref - automatically produces "Figure 1", "Table 2", etc.
- Label prefixes:
fig:, tab:, sec:, eq:, lst:
- Place
\label immediately after \caption or \section
Lists
- Use
enumitem for customization
- Avoid nesting deeper than 3 levels - restructure content instead
Common Pitfalls to Avoid
- Never use
$$...$$ for display math - use \[...\] or equation environment
- Never use
\\ for paragraph breaks - use a blank line
- Never use
\begin{center} inside floats - use \centering
- Never place
\label before \caption - produces wrong reference numbers
- Never hardcode reference numbers - always use
\cref{}
- Never use bare function names in math - use
\sin, \log, or \DeclareMathOperator
- Escape special characters:
#, %, $, &, _, {, }
Markdown-to-LaTeX Conversion
When converting from markdown, apply these mappings:
| Markdown | LaTeX |
|---|
# Heading | \section{Heading} |
## Heading | \subsection{Heading} |
### Heading | \subsubsection{Heading} |
**bold** | \textbf{bold} |
*italic* | \emph{italic} |
`code` | \texttt{code} |
> blockquote | \begin{quote}...\end{quote} |
- item | \begin{itemize}\item ...\end{itemize} |
1. item | \begin{enumerate}\item ...\end{enumerate} |
[text](url) | \href{url}{text} |
 | \begin{figure}...\includegraphics{path}...\end{figure} |
```lang ``` | \begin{lstlisting}[language=lang]...\end{lstlisting} |
--- (horizontal rule) | \bigskip\noindent\rule{\textwidth}{0.4pt}\bigskip |
| Tables | \begin{tabular} with booktabs rules |
$math$ | $math$ (same) |
$$math$$ | \[math\] |
Conversion Guidelines
- Infer document title from the first
# heading or filename
- Infer
\author and \date if present in the source, otherwise omit
- Preserve the semantic structure - do not flatten or over-nest headings
- Convert markdown tables to
booktabs-styled tabular environments
- Escape all LaTeX special characters in text content
- For documents with chapters, promote heading levels (
# → \chapter, ## → \section)
Compiling to PDF
When the user requests PDF output, detect the platform and compile.
Engine Selection
| Engine | Command | Use When |
|---|
| pdfLaTeX | latexmk -pdf | Default. ASCII/Latin content, standard fonts, fastest compilation |
| XeLaTeX | latexmk -xelatex | System fonts via fontspec, native Unicode |
| LuaLaTeX | latexmk -lualatex | System fonts + Lua scripting, no memory limits |
Using latexmk (Preferred)
latexmk automatically runs the correct number of passes for cross-references, bibliographies, and indices. Always prefer it over manual multi-pass compilation.
latexmk -pdf document.tex
latexmk -xelatex document.tex
latexmk -lualatex document.tex
latexmk -c document.tex
Manual Compilation (When latexmk Is Unavailable)
pdflatex document.tex && pdflatex document.tex
pdflatex document.tex && biber document && pdflatex document.tex && pdflatex document.tex
Platform-Specific Installation
If LaTeX tools are not installed or compilation fails due to missing packages, read the appropriate platform guide for installation instructions:
- Ubuntu/Debian: Read
references/pdf-compilation-ubuntu.md
- macOS: Read
references/pdf-compilation-macos.md
Detect the platform with uname -s (Linux or Darwin).
Package installation requires system permissions — present the installation command to the user and let them confirm before running sudo or brew commands.