Files
MARTINI_THESIS/DEIThesis.cls
Marco Martini 02bf8a92b1 clone
2025-11-11 16:50:27 +01:00

527 lines
10 KiB
TeX

% -------------------------------------------------------------------
% @LaTeX-class-file{
% filename = "DEIThesis.cls",
% codetable = "ISO/ASCII",
% keywords = "LaTeX, UniPD, Padua, Thesis, DEI",
% docstring = "Class for a DEI thesis."
% --------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{DEIThesis}[DEI Thesis Class]
% -- GENERAL SETUP --
% type
\LoadClass[12pt, a4paper, twoside, openright]{book}
% page geometry
\RequirePackage[
headheight=2cm,
top=3.5cm,
bottom=3.5cm,
footskip=1.5cm,
footnotesep=1cm,
twoside,
a4paper
]{geometry}
% export in PDF/X, PDF/A, etc...
\RequirePackage{etoolbox}
\RequirePackage{colorprofiles}
\RequirePackage[a-2b,mathxmp]{pdfx}[\today]
% language, font and encodings
\RequirePackage{newpxtext,newpxmath}
\RequirePackage[T1]{fontenc}
\RequirePackage[english]{babel}
% -- USEFUL PACKAGES --
% spacings (\onehalfsize, \doublesize)
\RequirePackage{setspace}
% indent first line of paragraph
\RequirePackage{indentfirst}
% captions
\RequirePackage{caption}
\RequirePackage{subcaption}
% footnotes
\RequirePackage{footnote}
\RequirePackage[bottom]{footmisc}
% mathematics
\RequirePackage{amsmath}
% links
\RequirePackage{hyperref}
\RequirePackage{url}
% colors
\RequirePackage{color}
% graphics
\RequirePackage{graphicx}
% algoritms
\RequirePackage{algorithm}
\RequirePackage{algorithmic}
% code snippets
\RequirePackage{listings}
% plots, drawings etc...
\RequirePackage{tikz}
\usetikzlibrary{shapes.geometric, arrows.meta}
% references
\RequirePackage[autostyle]{csquotes}
\RequirePackage[backend=biber]{biblatex}
\addbibresource{references.bib}
\RequirePackage{tabularx}
% -- DEFINITIONS --
% university
\def\university#1{\gdef\@university{#1}}
% master name
\def\mastername#1{\gdef\@mastername{#1}}
% academic Year
\def\academicYear#1{\gdef\@academicYear{#1}}
% student ID
\def\studentId#1{\gdef\@studentId{#1}}
% advisor
\def\advisor#1{\gdef\@advisor{#1}}
% co-advisor (if one)
\def\coadvisor#1{\gdef\@coadvisor{#1}}
\def\coadvisorsUniversity#1{\gdef\@coadvisorsUniversity{#1}}
% university of Padova color
\definecolor{UniPDColor}{RGB}{155, 0, 20}
% -- LINKS SETUP --
% set all links to black color
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\usepackage{enumitem}
% -- ITEMS AND ENUMARATIONS --
% reduce spacing for items and enumerations
% \let\saveditemize=\itemize
% \let\savedenditemize=\enditemize
% \renewenvironment{itemize}
% {\begin{spacing}{0.5}\saveditemize}
% {\savedenditemize\end{spacing}}
% \let\savedenumerate=\enumerate
% \let\savedendenumerate=\endenumerate
% \renewenvironment{enumerate}
% {\begin{spacing}{0.5}\savedenumerate}
% {\savedendenumerate\end{spacing}}
% controllo indentazione enumerazioni
\setlist[itemize,1]{leftmargin=1em}
\setlist[enumerate,1]{leftmargin=1em}
% italic for quotes
\let\savedquote\quote
\let\endsavedquote\endquote
\renewenvironment{quote}
{\itshape\savedquote}
{\endsavedquote}
% -- HEADERS AND FOOTERS --
% custom headers and footers
\RequirePackage{fancyhdr}
% custom title style
\RequirePackage{titlesec}
% remove headers and footers in blank pages
\RequirePackage{scrextend}
% box for titles
\RequirePackage{adjustbox}
% style for chapters
\titleformat{\chapter}[display]
{\Huge\filleft}
{
\minsizebox{!}{70pt}{\colorbox{UniPDColor}{\color{white} \thechapter}}
}
{1.2ex}
{}
% style for sections
\titleformat{\section}[hang]
{\Large}
{
\colorbox{UniPDColor}{\color{white} \thesection}
}
{1ex}
{\scshape}
% style for subsections
\titleformat{\subsection}[hang]
{\large}
{
\colorbox{UniPDColor}{\color{white} \thesubsection}
}
{1ex}
{\scshape}
% style for subsubsections
\titleformat{\subsubsection}[hang]
{\normalsize}
{}
{0ex}
{\bfseries\scshape}
% remove line headers
\renewcommand{\headrulewidth}{0ex}
% style for headers and footers
\newcommand{\setfancyhf} {
\fancyhf{}
\fancyhead[RO]{{\footnotesize\leftmark}}
\fancyhead[LE]{{\footnotesize\rightmark}}
\fancyfoot[RE, LO]{}
\fancyfoot[C]{\thepage}
}
% -- FRONTMATTER --
\renewcommand{\frontmatter} {
% set roman page numbering
\pagenumbering{roman}
% set page style
\pagestyle{fancy}
% create cover
\maketitle
% reset fancy headers
\setfancyhf
% set head witdth
\setlength{\headwidth}{\textwidth}
% custom titles
\renewcommand{\listfigurename}{List of Figures}
\renewcommand{\listtablename}{List of Tables}
\renewcommand{\listalgorithmname}{List of Algorithms}
\renewcommand{\lstlistingname}{Code} % Caption name of code snippets
\renewcommand{\lstlistlistingname}{List of Code Snippets}
\def\listacronymname{List of Acronyms}
\def\abstractname{Abstract}
\def\abstractnameit{Sommario}
\renewcommand{\bibname}{References}
\def\acknowledgmentsname{Acknowledgments}
% insert dedication page
\dedicationpage
% insert abstract
\abstractpage
% insert table of contents
\tableofcontents
\cleardoublepage
% insert list of figures
\phantomsection
\setcounter{page}{11}
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
\cleardoublepage
% insert list of tables
\phantomsection
\setcounter{page}{13}
\addcontentsline{toc}{chapter}{\listtablename}
\listoftables
\cleardoublepage
% insert list of algorithms
% \phantomsection
% \setcounter{page}{15}
% \addcontentsline{toc}{chapter}{\listalgorithmname}
% \listofalgorithms
% insert list of code snippets
\phantomsection
\setcounter{page}{17}
\addcontentsline{toc}{chapter}{\lstlistlistingname}
\lstlistoflistings
\cleardoublepage
% insert list of abbreviations/acronyms
\setcounter{page}{19}
\acronyms
}
% -- TITLE/COVER --
% insert watermark
\RequirePackage{watermark}
\renewcommand{\maketitle} {
%set custom geometry
\newgeometry{
top=1.5cm,
bottom=2cm,
inner=2cm,
outer=2cm,
headheight=3.5cm,
includehead,
includefoot,
}
% set head witdth
\setlength{\headwidth}{\textwidth}
% set watermark
\thiswatermark{
\centering
\put(-380,-700) {
\includegraphics[width=1.4\linewidth]{res/unipdbg}
}
}
% set academic year in footer
\cfoot{\normalsize\textsc{Academic Year \\ \@academicYear}}
% set brands in header
\lhead{
\includegraphics[height=3cm]{res/ltunipd}
}
\rhead{
\includegraphics[height=3cm]{res/dei}
}
% content
\begin{center}
% master name
\null \vspace{\stretch{2}}
\normalsize\textsc{
Master Thesis in \@mastername
} \\
% title
\vspace{3ex}
\LARGE\textbf{\@title} \\
\vspace{\stretch{3}}
% authors, advisors etc...
\doublespacing
\begin{flushleft}
\small
\textsc{Master Candidate} \hfill \textsc{Supervisor} \\
\large{\textbf{\@author}} \hfill \large{\textbf{\@advisor}} \\
\small
\textbf{Student ID \@studentId} \hfill \textbf{\@university} \\
% insert co-advisor if not empty
\ifx\@coadvisor\empty \else
\hfill \\
\hfill \textsc{Co-supervisor} \\
\hfill \large{\textbf{\@coadvisor}} \\
\small
\hfill \textbf{\@coadvisorsUniversity} \\
\fi
\end{flushleft}
\vspace{\stretch{1}} \null
\end{center}
% restore defaults
\cleardoublepage
\restoregeometry
\onehalfspacing
}
% -- DEDICATION --
\newcommand{\dedicationpage} {
% set empty style for this page (no headers and footers)
\thispagestyle{empty}
\phantomsection
\null \vspace{\stretch{1}}
\begin{flushright}
\input{frontmatter/dedication}
\end{flushright}
\vspace{\stretch{4}} \null
% insert pages for alignment
\cleardoublepage
}
% -- ACRONYMS/ABBREVIATIONS --
\RequirePackage{acronym}
% custom style for acronyms
\newcommand{\acronyms}{
\phantomsection
\addcontentsline{toc}{chapter}{\listacronymname}
\chapter*{\listacronymname}
\input{frontmatter/glossary}
\cleardoublepage
}
% -- ABSTRACT --
\newenvironment{abstract}[1][en] {
% get argument (en/it)
\def\it{it}
\def\arg{#1}
\null \vfill
\begin{center}
\bfseries
% set title in english or italian
\ifx\arg\it
\abstractnameit
\else
\abstractname
\fi
\end{center}
} {
\vfill \null
}
\newcommand{\abstractpage} {
% set empty style for this page (no headers and footers)
\thispagestyle{empty}
% english version
\input{frontmatter/abstract}
% italian version
\cleardoublepage
\thispagestyle{empty}
\input{frontmatter/sommario}
}
% -- MAIN MATTER --
\renewcommand{\mainmatter} {
\cleardoublepage
% reset page counter
\setcounter{page}{1}
% set arabic page numbering
\pagenumbering{arabic}
% reset chapter counter
\setcounter{chapter}{0}
}
% -- BACKMATTER --
\renewcommand{\backmatter}{
\cleardoublepage
\phantomsection
% add references
\addcontentsline{toc}{chapter}{\bibname}
\printbibliography
\cleardoublepage
\phantomsection
% add acknowledgments
\addcontentsline{toc}{chapter}{\acknowledgmentsname}
\acknowledgments
}
% -- ACKNOWLEDGMENTS --
\newcommand{\acknowledgments} {
\phantomsection
\chapter*{\acknowledgmentsname}
\input{frontmatter/thanks}
}
% -- CODE SNIPPETS --
% Colors for code snippets highlights
\definecolor{commentsColor}{RGB}{36, 161, 156}
\definecolor{numColor}{RGB}{71, 96, 114}
\definecolor{stringColor}{RGB}{205, 63, 62}
\definecolor{kwColor}{RGB}{248, 6, 204}
\definecolor{bgCodeColor}{RGB}{255, 249, 249}
% Style of code snippets
\lstdefinestyle{codeSnippet} {
backgroundcolor=\color{bgCodeColor},
commentstyle=\color{commentsColor},
keywordstyle=\color{kwColor},
numberstyle=\tiny\color{numColor},
stringstyle=\color{stringColor},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2
}
\lstset{style=codeSnippet}