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
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
% 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
#!/bin/bash
# Test template before adopting
# 1. Clone/download template
git clone https://github.com/user/latex-template
cd latex-template
# 2. Check structure
find . -name "*.tex" -o -name "*.cls" -o -name "*.sty" | head -20
# 3. Test compilation
pdflatex example/example.tex
if [ $? -eq 0 ]; then
echo "Template compiles successfully"
else
echo "Compilation failed - check dependencies"
fi
# 4. Review output
open example/example.pdf # macOS
# xdg-open example/example.pdf # Linux
Customizing Templates
Basic Customization
% 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
}
% Deeper customization techniques
% Override template commands
\let\oldtitle\title
\renewcommand{\title}[1]{%
\oldtitle{\MakeUppercase{#1}}%
}
% Modify environments
\let\oldabstract\abstract
\let\endoldabstract\endabstract
\renewenvironment{abstract}{%
\begin{center}
\textbf{ABSTRACT}
\end{center}
\oldabstract
}{%
\endoldabstract
}
% Hook into template internals
\makeatletter
\renewcommand{\@maketitle}{%
% Custom title page layout
\begin{center}
{\LARGE \@title \par}
\vskip 2em
{\large \@author \par}
\vskip 1em
{\@date \par}
\end{center}
}
\makeatother
Package-based Templates
% 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}
% Common template packages
% Academic papers
\usepackage{acmart} % ACM articles
\usepackage{IEEEtran} % IEEE transactions
\usepackage{elsarticle} % Elsevier journals
\usepackage{revtex4-2} % Physics journals
% Presentations
\usepackage{beamer} % Presentations
\usepackage{beamerposter} % Posters
% Books/Reports
\usepackage{memoir} % Flexible book class
\usepackage{scrbook} % KOMA-Script book
\usepackage{tufte-latex} % Tufte-style layouts
% CVs/Resumes
\usepackage{moderncv} % Modern CV
\usepackage{europecv} % European CV format
\usepackage{curve} % Another CV class
Creating Your Own Templates
Template Structure
% 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}
% main-template.tex - Modular approach
\documentclass{article}
% Load template components
\input{template-config/packages}
\input{template-config/settings}
\input{template-config/commands}
\input{template-config/environments}
\begin{document}
\input{template-parts/titlepage}
\input{template-parts/abstract}
\tableofcontents
\listoffigures
\listoftables
% User content sections
\input{sections/introduction}
\input{sections/methodology}
\input{sections/results}
\input{sections/conclusion}
\bibliographystyle{plain}
\bibliography{references}
\appendix
\input{appendices/appendix-a}
\end{document}
Custom Document Class
% 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
% Using the custom class
\documentclass[draft]{myclass}
\title{Research Paper}
\author{Jane Doe}
\institution{University Name}
\department{Computer Science}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
This paper presents...
\end{abstract}
\section{Introduction}
Our custom class provides...
\begin{theorem}
Let $X$ be a...
\end{theorem}
\end{document}
Style Package Creation
% 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
% Using the custom style
\documentclass{article}
\usepackage[colorful]{mystyle}
\begin{document}
\section{Introduction}
This document uses our \highlight{custom style}.
\begin{mybox}{Important Note}
This is a custom colored box environment.
\end{mybox}
Key concepts:
\begin{mylist}
\item First \keyword{concept}
\item Second \keyword{idea}
\item Third \keyword{principle}
\end{mylist}
\end{document}
Template Distribution
Packaging Templates
#!/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
Method 3: Using LaTeX Cloud Studio
Upload as custom template in your workspace.
Usage
\documentclass{my-template}
\begin{document}
Your content here
\end{document}
Options
draft - Enable draft modefinal - Final version (default)twoside - Two-sided printingExamples
See the
examples/ directory for complete examples.License
This template is released under the MIT License.
EOF
Create ZIP archive
zip -r PROJECT−VERSION.zip $PROJECT/
echo “Template package created: PROJECT−VERSION.zip”
```latex template-documentation.tex
% template-doc.tex - User documentation
\documentclass{ltxdoc}
\usepackage{hyperref}
\title{The \textsf{my-template} Package}
\author{Your Name}
\date{Version 1.0.0 \\ \today}
\begin{document}
\maketitle
\begin{abstract}
This package provides a customizable template for academic documents with support for multiple layouts and styles.
\end{abstract}
\tableofcontents
\section{Introduction}
The \textsf{my-template} package simplifies document creation...
\section{Installation}
\subsection{Requirements}
\begin{itemize}
\item \LaTeX{} distribution (TeX Live 2020+)
\item Required packages: \texttt{geometry}, \texttt{graphicx}
\end{itemize}
\subsection{Installation Methods}
\begin{enumerate}
\item Local installation...
\item System-wide installation...
\end{enumerate}
\section{Usage}
\subsection{Basic Usage}
\begin{verbatim}
\documentclass{my-template}
\title{Your Title}
\author{Your Name}
\begin{document}
\maketitle
Your content...
\end{document}
\end{verbatim}
\subsection{Options}
\begin{description}
\item[\texttt{draft}] Enable draft mode
\item[\texttt{twoside}] Two-sided layout
\end{description}
\section{Customization}
\subsection{Colors}
Define custom colors:
\begin{verbatim}
\definecolor{mycolor}{RGB}{100,150,200}
\setmaincolor{mycolor}
\end{verbatim}
\section{Examples}
Complete examples are provided in the \texttt{examples/} directory.
\end{document}
Sharing Templates
- GitHub
- CTAN
- Institutional
# .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
# 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
% 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
% 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
% Example using professional-template
\documentclass{professional-template}
\title{Professional Document Template}
\subtitle{A Complete Example}
\author{John Doe}
\email{john.doe@example.com}
\institution{Example University}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
This document demonstrates the features of our professional template, including custom title pages, formatted sections, and special environments. The template is designed for academic and professional documents.
\end{abstract}
\tableofcontents
\newpage
\section{Introduction}
This template provides a clean, professional layout suitable for various document types.
\begin{highlight}
Key features include automatic formatting, custom environments, and consistent styling throughout the document.
\end{highlight}
\section{Usage}
Simply use the document class and fill in your content:
\begin{verbatim}
\documentclass{professional-template}
\title{Your Title}
\author{Your Name}
\begin{document}
\maketitle
Your content here...
\end{document}
\end{verbatim}
\section{Conclusion}
This template streamlines document creation while maintaining professional appearance.
\end{document}
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.
