2026-06-17 10:40:40 +02:00

239 lines
7.8 KiB
TeX

%----------------------------------------------------------------------------------------
% THEMES
%----------------------------------------------------------------------------------------
\RequirePackage{etoolbox}
\RequirePackage{ifthen}
\RequirePackage{xifthen}
\newbool{langempty}
\newbool{proempty}
\newbool{perempty}
\newbool{altcont}
\newbool{reverse}
\newcommand{\theme}[1]{
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{bw}}}{%
\input{cv-themes/bw.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{gray}}}{%
\input{cv-themes/gray.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{minimal}}}{%
\input{cv-themes/minimal.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{blue}}}{%
\input{cv-themes/blue.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{beige}}}{%
\input{cv-themes/beige.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{coral}}}{%
\input{cv-themes/coral.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{framed}}}{%
\input{cv-themes/framed.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{onyx}}}{%
\booltrue{altcont}
\input{cv-themes/onyx.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{plain}}}{%
\booltrue{reverse}
\input{cv-themes/plain.tex}}{}
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{earth}}}{%
\booltrue{altcont}
\input{cv-themes/earth.tex}}{}
}
%----------------------------------------------------------------------------------------
% FONTS
%----------------------------------------------------------------------------------------
\RequirePackage[final]{microtype}
\RequirePackage{fontspec}
\setmainfont[Path= fonts/,
BoldFont = NunitoSans-SemiBold.ttf,
ItalicFont = NunitoSans-Italic.ttf]
{NunitoSans-Regular.ttf}
\setsansfont[Path= fonts/,
BoldFont = Archivo-SemiBold.ttf]
{Archivo-Regular.ttf}
%----------------------------------------------------------------------------------------
% PACKAGES
%----------------------------------------------------------------------------------------
\RequirePackage{tikz}
\usetikzlibrary{calc, positioning}
\RequirePackage{xcolor}
\RequirePackage{parskip}
\RequirePackage{setspace}
\RequirePackage{tabularx}
\RequirePackage{multirow}
\RequirePackage[fixed]{fontawesome5}
\RequirePackage{progressbar}
\RequirePackage[nobottomtitles]{titlesec}
\RequirePackage{graphicx}
\RequirePackage{enumitem}
\RequirePackage{fancyhdr}
\RequirePackage[most]{tcolorbox}
\RequirePackage{paracol}
\RequirePackage{booktabs}
\RequirePackage{adjustbox}
\setstretch{1.2}
%----------------------------------------------------------------------------------------
% MISC CONFIGURATIONS
%----------------------------------------------------------------------------------------
\pagestyle{empty}
\setlength{\parindent}{0pt} % Disable paragraph indentation
\setlength{\parskip}{6pt} % Space between paragraphs
\emergencystretch 3em
% Graphics directories
\graphicspath{{../images/}{images/}}
\newcommand{\begincols}{%
\ifboolexpr{bool{reverse}}{%
\begin{paracol}{2}
\switchcolumn[1]
}{%
\begin{paracol}{2}
}
}
\newcommand{\switchcols}{%
\ifboolexpr{bool{reverse}}{%
\switchcolumn[0]
}{%
\switchcolumn[1]
}
}
\newcommand{\fincols}{\end{paracol}}
%----------------------------------------------------------------------------------------
% COMMANDS
%----------------------------------------------------------------------------------------
% Custom commands for CV
\newcommand{\jobtitle}[1]{\renewcommand{\jobtitle}{#1}}
\newcommand{\name}[1]{\renewcommand{\name}{#1}}
\newcommand{\aboutdesc}[1]{\renewcommand{\aboutdesc}{#1}}
\newcommand{\location}[1]{\renewcommand{\location}{#1}}
\newcommand{\phone}[1]{\renewcommand{\phone}{#1}}
\newcommand{\mail}[1]{\renewcommand{\mail}{#1}}
\newcommand{\drivinglicenses}[1]{\renewcommand{\drivinglicenses}{#1}}
\newcommand{\github}[1]{\renewcommand{\github}{#1}}
\newcommand{\linkedin}[1]{\renewcommand{\linkedin}{#1}}
\newcommand{\dateofbirth}[1]{\renewcommand{\dateofbirth}{#1}}
\newcommand{\profilepic}[1]{\renewcommand{\profilepic}{#1}}
\newcommand{\makeabout}[1]{\ifthenelse{\equal{\aboutdesc}{}}{}{%
\subsection{#1}
\aboutdesc}}
\newcommand{\makedob}[1]{\ifthenelse{\equal{\dateofbirth}{}}{}{%
\ifboolexpr{bool {altcont}}{}{%
\subsection{#1}
\dateofbirth}}}
\newcommand{\makelicense}[1]{\ifthenelse{\equal{\drivinglicenses}{}}{}{%
\subsection{#1}
\drivinglicenses}}
\newcommand{\langcircles}{\ifboolexpr{bool {langempty}}{}{\langskills}}
\newcommand{\sitemtit}{\color{bodytext}\sffamily\MakeUppercase}
\newcommand{\sitemsub}{\color{bodytext}\normalfont\itshape}
% Icons
\newcommand{\phoneicon}{\small{\faPhone*}}
\newcommand{\locicon}{\faMapMarker*}
\newcommand{\mailicon}{\faEnvelope}
\newcommand{\githubicon}{\faGithub}
\newcommand{\linkedinicon}{\faLinkedin}
\newcommand{\calendaricon}{\faCalendar*}
% Table column types
\newcolumntype{Y}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{L}[1]{>{\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
% CEFR description
\newcommand{\cefrdesc}{
\renewcommand{\arraystretch}{1}{\footnotesize{%
\begin{tabular*}{\textwidth}{@{}p{\widthof{* }}@{}L{9cm}}
* & A1/A2: Basic, B1/B2: Independent, C1/C2: Proficient \\
& \href{https://europass.cedefop.europa.eu/resources/european-language-levels-cefr}{Common European Framework of Reference for Languages} \\
\end{tabular*}%
}}
}
% Language environments
\newenvironment{langs}{%
\renewcommand{\arraystretch}{1.4}
\begin{tabular*}{\textwidth}{@{}L{4cm}L{4cm}L{1cm}}
}{%
\end{tabular*}
}
\newcommand{\langsitem}[2]{%
\sitemtit{#1} & {#2} & \\
}
\newcommand{\langsitemmulti}[4]{%
\sitemtit{\multirow{3}{*}{#1}} & Understanding & {#2} \\
& Speaking & {#3} \\
& Writing & {#4} \\
}
% Contact table
\newcommand{\makecontact}[1]{%
\ifboolexpr{bool {altcont}}{}{%
\subsection{#1}
\renewcommand{\arraystretch}{1.2}
\begin{tabular}[t]{@{}Y{.1\columnwidth} @{\hskip 0.05\columnwidth}p{0.85\columnwidth}}
\ifthenelse{\equal{\location}{}}{}{\locicon & \location \\ }
\ifthenelse{\equal{\phone}{}}{}{\phoneicon & \phone \\ }
\ifthenelse{\equal{\mail}{}}{}{\mailicon & \href{mailto:\mail}{\mail} }
\ifthenelse{\equal{\linkedin}{}}{}{\\ \linkedinicon & \linkedin }
\ifthenelse{\equal{\github}{}}{}{\\ \githubicon & \github \\ }
\end{tabular}
}
}
% Environment for listing out work experience and education
\newenvironment{cvitem}[4]{%
{\color{bodytext}{\ifthenelse{\isempty{#1}}{}{\sitemtit{#1,}}} \sitemtit{#2}}\\
{\sitemsub{#3 | #4}}\par
{}
}
% Environment for listing out projects
\newenvironment{projitem}[2]{%
{\color{bodytext}{\ifthenelse{\isempty{#2}}{\sitemtit{#1}}{\sitemtit{#1 | #2}}}}\par
{}
}
% Bullet style and spacing
\setlist[itemize,1]{label={\color{bulletcolor}$\bullet$},parsep=6pt,labelindent=12pt}
\setlist[itemize,2]{label={\color{bulletcolor}$\bullet$},parsep=6pt,labelindent=12pt}
\setlist[itemize,3]{label={\color{bulletcolor}$\bullet$},parsep=6pt,labelindent=12pt}
% Command for drawing professional and personal skills
\newcommand\skillsbars[2]{%
\ifboolexpr{bool {proempty} or bool {perempty}}{}{%
\begin{minipage}[t]{.45\columnwidth}
\section{#1}
\proskills
\end{minipage}%
\hspace{.1\columnwidth}\begin{minipage}[t]{.45\columnwidth}
\section{#2}
\perskills
\end{minipage}
}
}
% Links
\RequirePackage[bookmarks=false, colorlinks]{hyperref}
\hypersetup{linkcolor=linkcolor, urlcolor=linkcolor}
\makeatletter
\def\Hy@href#{%
\addfontfeatures{Color=linkcolor}\hyper@normalise\href@
}
\makeatother