resume.tex/tex/mycv.cls
2023-07-29 13:08:45 +02:00

395 lines
13 KiB
TeX
Executable File

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MyCV
% LaTeX Class
% Version 1.0 (13/06/22)
%
% Authors:
% Samuel ORTION
% From spidercv (@ROMAINPC@github.com)
%
% License:
% The MIT License (see included LICENSE file)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycv}[03/01/2022]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}} % Pass through any options to the base class
\ProcessOptions\relax % Process given options
\LoadClass{extarticle} % Load the base class
%----------------------------------------------------------------------------------------
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
%----------------------------------------------------------------------------------------
\setlength{\parindent}{0mm} % Suppress paragraph indentation
\usepackage[hidelinks]{hyperref} % Required for links but hide the default boxes around links
\usepackage{lipsum}
\pagestyle{empty} % No headers or footers
\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
\usepackage{fontawesome} % fontawesome
\usepackage{ifthen}
%----------------------------------------------------------------------------------------
% COLORS
%----------------------------------------------------------------------------------------
\usepackage[dvipsnames]{xcolor}
\definecolor{Black}{HTML}{212121}
\definecolor{White}{HTML}{FFFFFF}
\definecolor{GreenArmy}{HTML}{252e25}
\definecolor{GreenIT}{HTML}{4caf50}
%%%%% color macros, use it at the beginning of your cv to quickly use the enterprise colors (Pro HRD tips)
\newcommand{\DefineColorMacros}[5]{% COLORS : TextSide / TextMain / HighLight / Background /Other
\def\ColorTextSide{#1}
\def\ColorTextMain{#2}
\def\ColorHighlight{#3}
\def\ColorBackground{#4}
\def\ColorOther{#5}
\color{\ColorTextMain} % Default text color
}
\DefineColorMacros{White}{Black}{GreenIT}{Black}{GreenArmy}
%----------------------------------------------------------------------------------------
% Printable mode
%----------------------------------------------------------------------------------------
\newcommand{\PrintableMode}{
\def\PM{} % PM command used in if statements
\def\ColorTextSide{\ColorTextMain} % Use same text color everywhere
}
%----------------------------------------------------------------------------------------
% FONTS
%----------------------------------------------------------------------------------------
% \usepackage[utf8]{inputenc} % Required for inputting international characters
% \usepackage[T1]{fontenc} % Output font encoding for international characters
% \usepackage{roboto}
\usepackage[scaled]{helvet}
\renewcommand*\familydefault{\sfdefault} % Force the sans-serif version of any font used
%----------------------------------------------------------------------------------------
% GEOMETRIE
%----------------------------------------------------------------------------------------
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{calc,positioning,backgrounds,matrix}
\newlength\margin
\setlength\margin{0.5cm}
\usepackage[margin=\margin,noheadfoot,a4paper]{geometry}
\newlength\sidewidth
\setlength\sidewidth{0.35\paperwidth-2\margin}
\newlength\mainwidth
\setlength\mainwidth{\paperwidth-4\margin-\sidewidth}
\newlength\anglesize
\setlength\anglesize{0.7cm}
\newlength\topheight
\setlength\topheight{\sidewidth}
\newlength\profilesize
\setlength\profilesize{0.7\topheight}
%----------------------------------------------------------------------------------------
% MAIN SECTIONS
%----------------------------------------------------------------------------------------
\usepackage{ragged2e}
\usepackage[absolute,overlay]{textpos} % option needed to use absolute positionning and to have text on front
\newenvironment{SideBar}[2]
{% Background color, Text color
\begin{tikzpicture}[remember picture,overlay]% put text anywhere
\ifx\PM\undefined % side and top background
\fill[fill=#1, shift={(current page.north west)}]
\else
\draw[draw=#1, shift={(current page.north west)}, very thick]
\fi
(0,-\paperheight) --
(0,-\anglesize) --
(\anglesize,0) --
(\paperwidth,0) --
(\paperwidth,-\topheight-2\margin) --
(\sidewidth+2\margin+\anglesize,-\topheight-2\margin) --
(\sidewidth+2\margin,-\topheight-2\margin-\anglesize) --
(\sidewidth+2\margin,-\paperheight) --
cycle;
\draw [draw=#1, shift={(current page.north west)}, very thick]
(\paperwidth-0.5\margin,-\topheight-3\margin) --
(\paperwidth-0.5\margin,-\paperheight+0.5\margin+0.5\anglesize) --
(\paperwidth-0.5\margin-0.5\anglesize,-\paperheight+0.5\margin) --
(\sidewidth+3\margin,-\paperheight+0.5\margin);
\end{tikzpicture}%
%%%%%%%%%%%%%
% \TPmargin{}{}
\begin{textblock*}{\sidewidth}(\margin,\topheight + 3\margin -0.4cm)
\begin{center}
\color{#2}
% Please use vspace to verticaly align manually your content
}
{
\end{center}
\end{textblock*}
}
\newenvironment{TopBar}[1]{ % Text color
\begin{textblock*}{\mainwidth}(\sidewidth+3\margin,\margin-0.4cm)
\begin{center}
\color{#1}
}{
\end{center}
\end{textblock*}
}
\newenvironment{MainPart}{
\begin{textblock*}{\mainwidth}(\sidewidth+3\margin,\topheight + 3\margin-0.4cm)
\begin{center}
}{
\end{center}
\end{textblock*}
}
\usetikzlibrary{shapes,decorations}
%%%%%%% Picture
\newcommand{\DefineProfile}[3]% Background color, Highlight color, Img path
{
\begin{tikzpicture}[remember picture,overlay]
\node [rectangle, draw=#2, rounded corners=0.5mm, very thick,
shift={(current page.north west)}, xshift=\anglesize, yshift=-\anglesize,
](s1){};
\node [rectangle, draw=#2, rounded corners=0.5mm, very thick,
shift={(current page.north west)}, xshift=(\sidewidth+2\margin), yshift=-(\sidewidth+2\margin),
](s2){};
\draw [draw=#2, very thick]
(s1) -- (s2);
%%%%%%%%%%%%%%%
\node[
shift={(current page.north west)},
xshift=(\sidewidth+2\margin)/2,
yshift=-(\sidewidth+2\margin)/2,
chamfered rectangle, draw=#2, very thick,
minimum size=\profilesize,
fill=#1,
path picture={
\node at (path picture bounding box.center){
\includegraphics[height=\profilesize]{#3}
};
}]
{};
\end{tikzpicture}
}
%----------------------------------------------------------------------------------------
% COMMANDS AND ENVIRONMENTS
%----------------------------------------------------------------------------------------
%%%%%%% Top bar
%%% Name
\newcommand{\Name}[4]% Highlight color, Name, Profession, Age
{
{\HUGE{\textbf{\color{#1}#2}}\\[0.5cm]
\Large{#3}
\hfill
\Large{#4}}
}
%%%%%%%%% Side bar
%%% Spider chart
\usepackage{xparse}
\newcounter{spidercount}
\ExplSyntaxOn
\NewDocumentCommand{\newList}{m}
{
\seq_new:c { l_kees_list_#1_seq }
}
\NewDocumentCommand{\addToList}{mm}
{
\seq_put_right:cn { l_kees_list_#1_seq } { #2 }
}
\NewDocumentCommand{\getFromList}{mm}
{
\seq_item:cn { l_kees_list_#1_seq } { #2 }
}
\ExplSyntaxOff
\newList{skilllist}
\newList{masterlist}
\newcommand{\addSkill}[2]{ % Skill label, Strenght
\stepcounter{spidercount}
\addToList{skilllist}{#1}
\addToList{masterlist}{#2}
}
\newcounter{var}
\newenvironment{SpiderDiagram}[2]{ % Axes color, Highlight color
\def\n{\thespidercount}
\def\N{5}
\def\nC{#1}
\def\hC{#2}
\vspace*{0.15cm}
}{
\begin{tikzpicture}[scale=0.35]
\foreach \x in{1,2,...,\n}{
\setcounter{var}{360/\n*\x}
\ifthenelse{\thevar = 180 \OR \thevar = 360}{
\draw [draw=\nC, very thick] (0,0)--(\thevar:\N) node
[shift=(\thevar-145:-15pt),
color=\hC] {\small\getFromList{skilllist}{\x}}
}
{
\draw [draw=\nC, very thick] (0,0)--(\thevar:\N) node
[shift=(\thevar:10pt),
color=\hC] {\small\getFromList{skilllist}{\x}}
}
;
}
\newcounter{temp}
\newcounter{tempbis}
\foreach[count=\x] \y in{2,3,...,\n}{
\setcounter{temp}{\getFromList{masterlist}{\x}}
\setcounter{tempbis}{\getFromList{masterlist}{\y}}
\draw [draw=\hC, very thick]
(360/\n*\x:\thetemp) -- (360/\n*\x+360/\n:\thetempbis);
}
\setcounter{temp}{\getFromList{masterlist}{\n}}
\setcounter{tempbis}{\getFromList{masterlist}{1}}
\draw [draw=\hC, very thick]
(360:\thetemp) -- (360+360/\n:\thetempbis);
\end{tikzpicture}
}
%%%%%%%%%%%%%% Main part
%%%%%% Section title
\newcommand{\MainTitleBis}[4]{%Background color, Highlight color, Left text, Right text
\begin{tikzpicture}[baseline]
\node[draw=#2,rounded corners,fill=#1,inner sep=3pt, very thick, anchor=west]
at (0,0) (box1)
{\textbf{\Large\color{#2}#3}};
\node[draw=#2,rounded corners,fill=#1,inner sep=3pt, very thick, anchor=east]
at (\textwidth,0) (square)
{\textbf{\Large\color{#2}#4}};
\draw [very thick, draw=#2, inner sep=0pt] (box1) -- (square);
\end{tikzpicture}\\
}
\newcommand{\MainTitle}[3]{%Background color, Highlight color, Title text
\begin{tikzpicture}[baseline]
\node[draw=#2,rounded corners,fill=#1,inner sep=3pt, very thick, anchor=west]
at (0,0) (box1)
{\textbf{\Large\color{#2}#3}};
\node at (\textwidth,0) [rectangle, draw=#2,rounded corners=0.5mm,fill=#1, anchor=east, very thick] (square) {};
\draw [very thick, draw=#2, inner sep=0pt] (box1) -- (square);
\end{tikzpicture}\\
}
\def\hrulefill{\leavevmode\leaders\hrule height 0.35mm\hfill\kern\z@} % ~ very thick
%%%%%%% Experience
\newcommand{\Experience}[5]{%Highlight color, Ttile, Left subtitle, Right subtitle, Description
\begin{flushleft}
\large{\textbf{#2\hfill{\small\color{#1}#4}}}\\\vspace{-.4ex}
\small{{\color{#1}\hrulefill}
\hspace{1ex}\raisebox{-.4ex}{\color{Black}\textbf{#3}}
}\\
\normalsize{#5}% Description
\end{flushleft}
}
%%%%%% Common tools
%%% Text separators
\newcommand{\TextSeparator}[2]% Highlight color, Text
{
\noindent\makebox[\linewidth]{{\color{#1}\hrulefill}
\hspace{1ex}\raisebox{-.4ex}{\textbf{\large{#2}}}
\hspace{1ex}{\color{#1}\hrulefill}}
}
\newcommand{\TextSeparatorBis}[3]% Highlight color, Left text, Right text
{
\noindent\makebox[\linewidth]{\raisebox{-.4ex}{\textbf{\large{#2}}}\hspace{1ex}
{\color{#1}\hrulefill}
\hspace{1ex}\raisebox{-.4ex}{\textbf{\large{#3}}}}
}
\newcommand{\SimpleSeparator}[1]% Highlight color
{
\noindent\makebox[\linewidth]{
{\color{#1}\hrulefill}}
}
%%% ItemList
\usepackage{enumerate}
\newenvironment{ItemList}[1] % Bullet color
{ \renewcommand{\descriptionlabel}[1]{
\def\temp{##1}\ifx\temp\empty
\hspace\labelsep{\textbf{\color{#1}\tiny\faSquare}}% Default bullet
\else
\hspace\labelsep{\textbf{\color{#1}##1}}
\fi
}%
\begin{description}}
{\end{description}}
%%% DoubleColumns
\newenvironment{DoubleColumns}{
%%%%%%%%% Use this command to split
\newcommand{\nextcolumn}{\end{center}\end{minipage}\hfill\begin{minipage}[t]{0.5\textwidth-0.5\margin}\begin{center}}
\begin{minipage}[t]{0.5\textwidth-0.5\margin}
\begin{center}
}{
\end{center}
\end{minipage}\\\vspace*{0.15cm}
}
%%% TripleColumns
\newenvironment{TripleColumns}{
%%%%%%%%% Use this command to split
\newcommand{\nextcolumn}{\end{center}\end{minipage}\hfill\begin{minipage}[t]{0.3333\textwidth-0.5\margin}\begin{center}}
\begin{minipage}[t]{0.3333\textwidth-0.5\margin}
\begin{center}
}{
\end{center}
\end{minipage}\\\vspace*{0.15cm}
}
%%% Label
\newcommand{\Label}[2]{% Highlight color, Text
\tikz[baseline]\node[anchor=base,draw=#1,rounded corners,inner xsep=1ex,inner ysep =0.75ex,text height=1.5ex,text depth=.25ex, thick]{#2};
}
%%% Skill Gauges
\newenvironment{SkillGauges}[1]{% Highlight color
\def\highlightColor{\color{#1}}
\begin{tabular}{l l}
}{
\end{tabular}
}
\newcommand{\addGauge}[3][\faSquareO]{% Optional fa symbol | Text | Number of symbols
#2 & \foreach \i in{1,...,#3}{\highlightColor#1\space} \\
}
%% Implements tooltip
\fboxrule=0pt