% ReadAnyBook Compact Cheat Sheet Template
% Ultra-dense layout for maximum information per page

\documentclass[8pt,a4paper]{extarticle}

%% ============================================================
%% PACKAGES
%% ============================================================

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage[
    a4paper,
    top=0.8cm,
    bottom=0.8cm,
    left=0.8cm,
    right=0.8cm
]{geometry}

\usepackage{multicol}
\usepackage{amsmath,amssymb}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{titlesec}
\usepackage{enumitem}

% Minimize spacing
\usepackage{parskip}
\setlength{\parskip}{0.3ex}
\setlength{\parindent}{0pt}

%% ============================================================
%% COLORS
%% ============================================================

\definecolor{seccolor}{RGB}{0,60,120}
\definecolor{subcolor}{RGB}{0,90,150}
\definecolor{codebg}{RGB}{250,250,250}

%% ============================================================
%% COMPACT SECTION FORMATTING
%% ============================================================

\titleformat{\section}
    {\normalfont\normalsize\bfseries\color{seccolor}}
    {\thesection}{0.5em}{}

\titleformat{\subsection}
    {\normalfont\small\bfseries\color{subcolor}}
    {\thesubsection}{0.4em}{}

\titlespacing*{\section}{0pt}{1.5ex}{0.5ex}
\titlespacing*{\subsection}{0pt}{1ex}{0.3ex}

%% ============================================================
%% COMPACT LISTS
%% ============================================================

\setlist{noitemsep, topsep=1pt, leftmargin=1.2em, parsep=0pt}

%% ============================================================
%% CODE
%% ============================================================

\lstset{
    basicstyle=\ttfamily\tiny,
    backgroundcolor=\color{codebg},
    breaklines=true,
    frame=single,
    framesep=1pt,
    xleftmargin=2pt,
    xrightmargin=2pt,
    aboveskip=0.3em,
    belowskip=0.3em,
}

%% ============================================================
%% CUSTOM COMMANDS
%% ============================================================

\newcommand{\concept}[2]{\textbf{#1}: #2}
\newcommand{\formula}[1]{\colorbox{codebg}{$#1$}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\E}{\mathbb{E}}

%% ============================================================
%% HEADER
%% ============================================================

\pagestyle{plain}

%% ============================================================
%% DOCUMENT
%% ============================================================

\begin{document}

% Compact title
\begin{center}
{\large\bfseries\color{seccolor} {{ title }} }
\hfill {\tiny\today}
\end{center}
\vspace{-0.5em}
\hrule
\vspace{0.5em}

\begin{multicols}{ {{ columns | default(3) }} }
\raggedcolumns

%% CONCEPTS
{% if concepts %}
\section*{Concepts}
{% for c in concepts %}
\textbf{ {{ c.name }} }{% if c.definition %}: {{ c.definition }}{% endif %}
{% endfor %}
{% endif %}

%% FORMULAS
{% if formulas %}
\section*{Formulas}
{% for f in formulas %}
{% if f.name %}\textbf{ {{ f.name }} }: {% endif %}${{ f.latex }}$
{% if f.context %}{\tiny {{ f.context }} }{% endif %}
{% endfor %}
{% endif %}

%% ALGORITHMS
{% if algorithms %}
\section*{Algorithms}
{% for a in algorithms %}
\textbf{ {{ a.name }} }{% if a.time_complexity %} $O({{ a.time_complexity }})${% endif %}
{% if a.pseudocode %}
\begin{lstlisting}
{{ a.pseudocode }}
\end{lstlisting}
{% endif %}
{% endfor %}
{% endif %}

%% MODELS
{% if models %}
\section*{Models}
{% for m in models %}
\textbf{ {{ m.name }} }{% if m.objective %}: {{ m.objective }}{% endif %}
{% endfor %}
{% endif %}

\end{multicols}

\end{document}
