Prerequisites: Basic LaTeX knowledge
Time to complete: 25-30 minutes
Difficulty: Intermediate
What you’ll learn: Template sources, customization, creation, package development, and distribution
Time to complete: 25-30 minutes
Difficulty: Intermediate
What you’ll learn: Template sources, customization, creation, package development, and distribution
Understanding LaTeX Templates
What Makes a Good Template?
Well-Structured
Clear organization with logical sections and includes
Documented
Comments explaining usage and customization options
Flexible
Easy to adapt for different use cases
Complete
Includes all necessary packages and settings
Template Components
Copy
template/
├── main.tex # Main template file
├── template.cls # Custom class (optional)
├── template.sty # Style package (optional)
├── README.md # Documentation
├── example/ # Example usage
│ ├── example.tex
│ ├── example.pdf
│ └── figures/
├── lib/ # Supporting files
│ ├── commands.tex # Custom commands
│ ├── environments.tex # Custom environments
│ └── packages.tex # Package imports
└── assets/ # Logos, images
Finding Templates
Quality Template Sources
- LaTeX Cloud Studio
- CTAN
- University Templates
- Community
Built-in template gallery with:
- Academic papers
- Presentations
- CVs and resumes
- Books and reports
- Posters
- Letters
Comprehensive TeX Archive Network
- Official packages
- Document classes
- Quality assured
- Well documented
Many universities provide:
- Thesis templates
- Dissertation formats
- Department styles
- Branding guidelines
GitHub/GitLab
- Open source templates
- Version controlled
- Community maintained
- Issue tracking
Evaluating Templates
Copy
% Check these aspects before using a template
% 1. License - Can you use/modify it?
% Look for LICENSE file or header comments
% 2. Dependencies - What packages are required?
\usepackage{required-package} % Is this available?
% 3. Compatibility - Does it work with your setup?
\documentclass{template-class} % Does this compile?
% 4. Customization - How flexible is it?
\settemplateoption{key}{value} % Are options documented?
% 5. Maintenance - Is it actively maintained?
% Check last update date and issue tracker
Customizing Templates
Basic Customization
Copy
% Most templates provide customization options
% 1. Document metadata
\title{Your Document Title}
\author{Your Name}
\date{\today}
\institution{Your University}
% 2. Style options
\documentclass[
12pt, % Font size
letterpaper, % Paper size
twoside, % Two-sided printing
draft % Draft mode
]{template-class}
% 3. Color schemes
\definecolor{primary}{RGB}{0, 51, 102}
\definecolor{secondary}{RGB}{255, 128, 0}
\setbeamercolor{title}{fg=primary}
% 4. Fonts
\usepackage{libertine} % Change main font
\usepackage[libertine]{newtxmath} % Matching math font
% 5. Layout adjustments
\geometry{
margin=1in,
headheight=15pt
}
Package-based Templates
Copy
% Article class with custom options
\documentclass[journal]{IEEEtran}
% Options: conference, journal, technote, peerreview
% Beamer with themes
\documentclass{beamer}
\usetheme{Madrid}
\usecolortheme{beaver}
\usefonttheme{professionalfonts}
% Memoir class flexibility
\documentclass[
11pt,
oneside,
article, % Article mode
extrafontsizes
]{memoir}
% KOMA-Script customization
\documentclass[
paper=a4,
fontsize=11pt,
DIV=12, % Type area calculation
BCOR=10mm, % Binding correction
parskip=half % Paragraph spacing
]{scrartcl}
Creating Your Own Templates
Template Structure
Copy
% my-template.tex - Basic article template
\documentclass[11pt, a4paper]{article}
% ====================================
% PACKAGES
% ====================================
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[margin=1in]{geometry}
\usepackage{graphicx}
\usepackage{hyperref}
% ====================================
% CUSTOM COMMANDS
% ====================================
\newcommand{\projectname}[1]{\def\@projectname{#1}}
\newcommand{\supervisor}[1]{\def\@supervisor{#1}}
% ====================================
% DOCUMENT SETTINGS
% ====================================
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=green,
urlcolor=red
}
% ====================================
% TITLE PAGE REDEFINITION
% ====================================
\makeatletter
\renewcommand{\maketitle}{%
\begin{titlepage}
\centering
\vspace*{2cm}
{\Huge\bfseries \@title \par}
\vspace{1cm}
{\Large Project: \@projectname \par}
\vspace{2cm}
{\Large\itshape \@author \par}
\vspace{0.5cm}
{\large Supervisor: \@supervisor \par}
\vfill
{\large \@date \par}
\end{titlepage}
}
\makeatother
% ====================================
% BEGIN DOCUMENT
% ====================================
\begin{document}
% User fills these
\title{Your Title Here}
\author{Your Name}
\projectname{Project Name}
\supervisor{Dr. Supervisor}
\date{\today}
\maketitle
\begin{abstract}
Your abstract here...
\end{abstract}
\tableofcontents
\newpage
\section{Introduction}
Start writing here...
\end{document}
Custom Document Class
Copy
% myclass.cls - Custom document class
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2024/01/01 My Custom Class]
% Base class
\LoadClass[11pt, a4paper]{article}
% Required packages
\RequirePackage[margin=1in]{geometry}
\RequirePackage{graphicx}
\RequirePackage{hyperref}
\RequirePackage{fancyhdr}
% Class options
\DeclareOption{draft}{
\PassOptionsToClass{draft}{article}
\AtEndOfClass{\usepackage[disable]{todonotes}}
}
\DeclareOption{final}{
\PassOptionsToClass{final}{article}
}
\ProcessOptions\relax
% Custom commands
\newcommand{\institution}[1]{\gdef\@institution{#1}}
\newcommand{\department}[1]{\gdef\@department{#1}}
% Headers and footers
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\@title}
\fancyhead[R]{\@author}
\fancyfoot[C]{\thepage}
% Title page
\renewcommand{\maketitle}{%
\begin{titlepage}
\centering
\vspace*{1cm}
\includegraphics[width=0.3\textwidth]{logo}\par
\vspace{1cm}
{\scshape\LARGE \@institution \par}
\vspace{0.5cm}
{\scshape\Large \@department \par}
\vspace{2cm}
{\huge\bfseries \@title \par}
\vspace{2cm}
{\Large\itshape \@author \par}
\vfill
{\large \@date \par}
\end{titlepage}
}
% Theorem environments
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\endinput
Style Package Creation
Copy
% mystyle.sty - Reusable style package
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mystyle}[2024/01/01 My Style Package]
% Package options
\newif\if@colorful
\DeclareOption{colorful}{\@colorfultrue}
\DeclareOption{plain}{\@colorfulfalse}
\ProcessOptions\relax
% Dependencies
\RequirePackage{xcolor}
\RequirePackage{tikz}
\RequirePackage{tcolorbox}
% Color definitions
\if@colorful
\definecolor{primary}{RGB}{0, 102, 204}
\definecolor{secondary}{RGB}{255, 128, 0}
\definecolor{accent}{RGB}{0, 153, 0}
\else
\definecolor{primary}{gray}{0.2}
\definecolor{secondary}{gray}{0.4}
\definecolor{accent}{gray}{0.6}
\fi
% Custom box environment
\newtcolorbox{mybox}[2][]{
colback=primary!5!white,
colframe=primary!75!black,
title=#2,
#1
}
% Section formatting
\RequirePackage{titlesec}
\titleformat{\section}
{\normalfont\Large\bfseries\color{primary}}
{\thesection}{1em}{}
% Custom commands
\newcommand{\highlight}[1]{%
\textcolor{accent}{\textbf{#1}}%
}
\newcommand{\keyword}[1]{%
\textcolor{secondary}{\textit{#1}}%
}
% Custom list environment
\newenvironment{mylist}{%
\begin{itemize}
\setlength{\itemsep}{0.5em}
\renewcommand{\labelitemi}{%
\textcolor{primary}{\textbullet}%
}
}{%
\end{itemize}
}
\endinput
Template Distribution
Packaging Templates
Copy
#!/bin/bash
# Package template for distribution
PROJECT="my-latex-template"
VERSION="1.0.0"
# Create directory structure
mkdir -p $PROJECT/{doc,examples,src}
# Copy template files
cp template.cls $PROJECT/src/
cp template.sty $PROJECT/src/
cp -r examples/* $PROJECT/examples/
# Create documentation
cat > $PROJECT/README.md << 'EOF'
# My LaTeX Template
## Installation
### Method 1: Local Installation
Place files in your LaTeX project directory.
### Method 2: System Installation
```bash
mkdir -p ~/texmf/tex/latex/my-template
cp src/* ~/texmf/tex/latex/my-template/
texhash ~/texmf
Sharing Templates
- GitHub
- CTAN
- Institutional
Copy
# .github/workflows/release.yml
name: Release Template
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build documentation
run: |
pdflatex template-doc.tex
pdflatex template-doc.tex
- name: Create release package
run: |
./create-package.sh
- name: Create Release
uses: actions/create-release@v1
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
files: |
template-*.zip
template-doc.pdf
Copy
# Prepare for CTAN submission
# 1. Follow CTAN guidelines
# 2. Create proper directory structure
# 3. Include comprehensive documentation
# 4. Test on multiple systems
# 5. Submit via https://ctan.org/upload
Copy
% Share within organization
% 1. Internal Git repository
% 2. Shared network drive
% 3. Template gallery
% 4. Documentation wiki
Template Best Practices
Design Principles
Template design checklist:
- Clear documentation with examples
- Sensible defaults
- Minimal dependencies
- Error handling
- Backward compatibility
- Semantic commands
- Consistent naming
- Modular structure
- Version tracking
- License included
Common Mistakes
Avoid these template pitfalls:
- Hard-coded values - Use commands/options
- Absolute paths - Always relative
- Missing dependencies - Document requirements
- No examples - Include working examples
- Poor documentation - Explain everything
- Breaking changes - Maintain compatibility
- Complex setup - Keep it simple
Complete Template Example
Copy
% professional-template.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{professional-template}[2024/01/01 v1.0]
% Class options
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}
% Essential packages
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{geometry}
\RequirePackage{fancyhdr}
\RequirePackage{graphicx}
\RequirePackage{hyperref}
\RequirePackage{xcolor}
% Layout
\geometry{
paper=a4paper,
margin=1in,
headheight=14pt
}
% Colors
\definecolor{themecolor}{RGB}{0, 102, 204}
\definecolor{lightgray}{gray}{0.95}
% Headers and footers
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\@title}
\fancyhead[R]{\small\@author}
\fancyfoot[C]{\small Page \thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
% Custom commands
\newcommand{\subtitle}[1]{\gdef\@subtitle{#1}}
\newcommand{\institution}[1]{\gdef\@institution{#1}}
\newcommand{\email}[1]{\gdef\@email{#1}}
% Title page
\renewcommand{\maketitle}{%
\thispagestyle{empty}
\begin{center}
\vspace*{2cm}
{\Huge\bfseries\color{themecolor} \@title \par}
\ifdef{\@subtitle}{
\vspace{0.5cm}
{\Large \@subtitle \par}
}{}
\vspace{2cm}
{\Large \@author \par}
\ifdef{\@email}{
\vspace{0.3cm}
{\normalsize \href{mailto:\@email}{\@email} \par}
}{}
\ifdef{\@institution}{
\vspace{0.5cm}
{\large \@institution \par}
}{}
\vfill
{\large \@date \par}
\end{center}
\newpage
\setcounter{page}{1}
}
% Abstract formatting
\renewenvironment{abstract}{%
\begin{center}
\begin{minipage}{0.9\textwidth}
\rule{\textwidth}{0.4pt}
\vspace{0.2cm}
{\large\bfseries Abstract}
\vspace{0.3cm}
}{%
\vspace{0.2cm}
\rule{\textwidth}{0.4pt}
\end{minipage}
\end{center}
\vspace{1cm}
}
% Section formatting
\RequirePackage{titlesec}
\titleformat{\section}
{\normalfont\Large\bfseries\color{themecolor}}
{\thesection}{1em}{}
\titleformat{\subsection}
{\normalfont\large\bfseries}
{\thesubsection}{1em}{}
% Custom environments
\RequirePackage{tcolorbox}
\newtcolorbox{highlight}{
colback=lightgray,
colframe=themecolor,
boxrule=1pt,
arc=2mm,
left=5mm,
right=5mm,
top=3mm,
bottom=3mm
}
\endinput
Next Steps
Continue improving your LaTeX workflow:Fixing Errors
Debug template issues
Large Documents
Templates for books/theses
Collaboration
Share templates with teams
Research Papers
Academic paper templates
Pro tip: Start with existing templates and gradually customize them to your needs. Once you have a working template you like, version control it and document any customizations for future reference.
