Greg’s blog
  • Home
  • Blog
  • About

Table of Contents

  • Why a New Template?
  • Meet ministate v3.0

Building a No‑Fluff Report Template in LaTeX

LaTeX
Author

Gregor Cerar

Published

2025-05-07

Modified

2025-05-16

Abstract

On a few occasions, I had to write a LaTeX/PDF report or documentation on what I was doing. I often got annoyed with TeX templates, which had lots of wasted whitespace around the title and edges of the document. So, I created a template that improves density, flexibility, and clarity.

Why a New Template?

  1. Dense (less fluff) — Every square centimeter should serve the reader. Tighter vertical spacing and compact headings keep the narrative flowing.
  2. Optional titles — Some documents benefit from title; others (like a few‑paragraph conclusion) do not. The template should let me toggle them off with a single flag.
  3. Flexible — Today, I might need a one‑pager. Tomorrow, a 20‑page appendix. Layout decisions (margins, font, color) should be parameterized — not hard‑wired.

Existing classes like article or even IEEEtran come close but still force in essential baggage (abstract blocks, keywords, etc.). Then I stumbled upon the elegant ministate class. So I adapted it.

Meet ministate v3.0

ministate.cls
\ProvidesClass{ministate}[2023/03/29 v3.0 Minimalist statement class]
\LoadClass[11pt,a4paper]{article}

\usepackage[utf8]{inputenc} % from 2018, UTF-8 is default in LaTeX
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{microtype}

\usepackage[margin=0.8in]{geometry}
\usepackage{parskip}
\usepackage{fancyhdr}

\setlength{\headheight}{15.2pt}
\pagestyle{fancy}
\fancyhf{} % Clear all header and footer fields

%--------------------------------------------------%
%    Title, HeaderTitle, Author, HeaderAuthor,     %
%                 Custom Date                      %
%--------------------------------------------------%

\let\oldtitle\title
\let\oldauthor\author
\let\olddate\date

\def\@headertitle{}
\def\@headerauthor{}
\def\@headerdate{}

% Redefine the \title and \author commands
\renewcommand{\title}[1]{%
    \oldtitle{#1}%
    \ifx\@headertitle\@empty%
        \relax\def\@headertitle{#1}%
    \fi%
}
\renewcommand{\author}[1]{%
    \oldauthor{#1}%
    \ifx\@headerauthor\@empty%
        \relax\def\@headerauthor{#1}%
    \fi%
}

\renewcommand{\date}[1]{%
    \olddate{#1}%
    \ifx\@headerdate\@empty%
        \relax\def\@headerdate{#1}%
    \fi%
}

% Commands for explicitly setting the header title and header author
\newcommand{\headertitle}[1]{\def\@headertitle{#1}}
\newcommand{\headerauthor}[1]{\def\@headerauthor{#1}}





\fancypagestyle{ministate}{%
  \fancyhf{}% clear everything
  \fancyhead[L]{\textbf{\@headertitle}\ifx\@headerdate\@empty\else\ (\@headerdate)\fi}%
  \fancyhead[R]{\textbf{\@headerauthor}}%
  \fancyfoot[C]{\thepage}%
}

\pagestyle{ministate}

% Apply header settings including the custom date
%\fancyhead[L]{\textbf{\@headertitle}\ifx\@headerdate\@empty\else\ (\@headerdate)\fi} % Title (Custom Date)
%\fancyhead[R]{\textbf{\@headerauthor}} % Author

%\fancyfoot{} % Override existing foot numbering
%\fancyfoot[C]{\thepage} % Page number at center of footer


%--------------------------------------------------%
%                   Document Body                  %
%--------------------------------------------------%

% Usage:
% \title{Your Title Here}
% \author{Author Name}
% \headertitle{Your Header Title Here} - For custom header title
% \headerauthor{Your Header Author Here} - For custom header author
% \date{Custom Date or Empty String} - To change or remove the date

% Comment this block if we don't want header on the first page
\usepackage{etoolbox}   % load before you patch anything
\makeatletter
\patchcmd{\maketitle}%          the command to patch
  {\thispagestyle{plain}}%      code to replace
  {\thispagestyle{ministate}}%  replacement
  {}{}                          % ← success / failure actions (empty)
\makeatother


\makeatletter
\def\@maketitle{%
  \newpage
  \begin{center}%
    \let\footnote\thanks
    {\LARGE \@title\par}%
    \vskip 0.2em%
    {\large\begin{tabular}[t]{c}\@author\end{tabular}\par}%
    \vskip 0.2em%
    {\large \@date}\vskip 0.2em% % Commented out to remove the date
  \end{center}%
  \par
}%
\makeatother

The content of example.tex file:

example.tex
\documentclass[11pt,a4paper,nonatbib]{./ministate}

% (optional) bibliography
%\usepackage[backend=biber,style=ieee,autocite=plain,sorting=none]{biblatex}
%\addbibresource{biblio.bib}
\usepackage[sfdefault]{atkinson}
\usepackage{fontawesome}

\usepackage{hyperref}
\usepackage{url}

\usepackage[english]{babel}
\usepackage[autostyle,english=british]{csquotes}

% (optional) prevent breaking words
\usepackage[none]{hyphenat}
\interdisplaylinepenalty=10000

% lorem ipsum generator
\usepackage{kantlipsum}


% ministate settings
\title{The Summary of Lorem Ipsum}
\headertitle{The Shorter Title}  % (optional) will use \title if not used

\author{Johnny English, PhD}
\headerauthor{Johnny E., PhD} % (optional) will use \author if not used

\date{May 7, 2025}

\begin{document}

\maketitle

\kant

%\clearpage
%\printbibliography[title={Osebna bibliografija}]

\end{document}

Outcome

Below, I embedded the outcome PDF of the above code samples …

Reuse

CC BY-NC-SA 4.0
 

© Copyright 2021, Gregor Cerar