% scale \newcommand\cvscale{1} % font \newcommand\cvfont{ppl} \newcommand\cvheadertitlefontscale{2.25} \newcommand\cvheadersubtitlefontscale{1.5} \newcommand\cvsectionfontscale{1.75} \newcommand\cvnamefontscale{1.25} \newcommand\cvdescriptionfontscale{1} % margin \newcommand\cvheadermargin{5} \newcommand\cvtopmargin{10} \newcommand\cvbottommargin{10} \newcommand\cvleftmargin{20} \newcommand\cvrightmargin{10} % header \newcommand\cvavatarradius{25} \newcommand\cvavatarborderwidth{1} \newcommand\cvheaderoffset{5} % timelline \newcommand\cvtimelineoffset{12} \newcommand\cvtimelinewidth{0.5} % miain \newcommand\cvmainspace{3} \newcommand\cvmainbubbleradius{6} \newcommand\cvmainbubbleborderwidth{1} % event \newcommand\cveventdatewidth{20} \newcommand\cveventbubbleradius{2.75} \newcommand\cveventbubbleborderwidth{1} % sidebar \newcommand\cvsidebarspace{3} \newcommand\cvsidebarbubbleradius{6} \newcommand\cvsidebarbubbleborderwidth{1} \newcommand\cvsidebaroffset{2} \newcommand\cvseparatorscale{1} % column \newcommand\cvcolumnratio{0.4} \newcommand\cvspacebetweencolumns{12} % color \usepackage{xcolor} \definecolor{cvcolor}{RGB}{20, 20, 20} \definecolor{cviconcolor}{RGB}{255, 255, 255} \definecolor{cvbordercolor}{RGB}{255, 255, 255} \definecolor{cvavatarbordercolor}{RGB}{255, 255, 255} \definecolor{cvtimelinecolor}{RGB}{0, 0, 0} \definecolor{cvlightcolor}{RGB}{245, 245, 245} % rescale \usepackage{fp} \FPeval{\cvavatarradius}{\cvscale*\cvavatarradius} \FPeval{\cvavatarborderwidth}{\cvscale*\cvavatarborderwidth} \FPeval{\cvmainspace}{\cvscale*\cvmainspace} \FPeval{\cvmainbubbleradius}{\cvscale*\cvmainbubbleradius} \FPeval{\cvmainbubbleborderwidth}{\cvscale*\cvmainbubbleborderwidth} \FPeval{\cveventdatewidth}{\cvscale*\cveventdatewidth} \FPeval{\cveventbubbleradius}{\cvscale*\cveventbubbleradius} \FPeval{\cveventbubbleborderwidth}{\cvscale*\cveventbubbleborderwidth} \FPeval{\cvsidebarspace}{\cvscale*\cvsidebarspace} \FPeval{\cvsidebarbubbleradius}{\cvscale*\cvsidebarbubbleradius} \FPeval{\cvsidebarbubbleborderwidth}{\cvscale*\cvsidebarbubbleborderwidth} \FPeval{\cvseparatorscale}{\cvscale*\cvseparatorscale} %settings] \newcommand\packagename{bubblecv} \usepackage[a4paper]{geometry} \geometry{top=\cvtopmargin mm, bottom=\cvbottommargin mm, left=\cvleftmargin mm, right=\cvrightmargin mm} \setlength{\topskip}{0mm} \setlength{\parindent}{0mm} \pagenumbering{gobble} \usepackage{enumitem} \setlist[itemize]{noitemsep, nolistsep, leftmargin=*} \usepackage[utf8]{inputenc} \usepackage{xparse} \usepackage{ifthen} \usepackage{tabularx} \usepackage{hyperref} \usepackage{paracol} \setlength{\columnsep}{\cvspacebetweencolumns mm} \newcommand\iscvsidebar{0} \usepackage{relsize} \usepackage{fontawesome} \DeclareFontFamily{U}{fontawesomeOne}{} \DeclareFontShape{U}{fontawesomeOne}{m}{n}{<-> FontAwesome--fontawesomeone}{} \DeclareRobustCommand\FAone{\fontencoding{U}\fontfamily{fontawesomeOne}\selectfont} %---------------------------------------------------------------------------------------- % TIMELINE %---------------------------------------------------------------------------------------- \usepackage{silence} \WarningsOff[everypage] % disable warning about problems with background package \usepackage{background} \SetBgScale{1} \SetBgAngle{0} \SetBgColor{cvtimelinecolor} \SetBgContents{\rule{\cvtimelinewidth mm}{\textheight}} \SetBgHshift{\dimexpr(\cvtimelineoffset mm - 105 mm)} \newcommand{\timelinespace}{\the\numexpr\cvleftmargin - \cvtimelineoffset\relax} \setlength{\skip\footins}{0.25\baselineskip} % Convert RGB to decode array. % Parameter 1: RGB color. % Parameter 2: Variable to which the array will be assigned. \newcommand{\rgbtoarray}[2]{% \extractcolorspecs{#1}\ParseResultModel\ParseResultColor% \convertcolorspec\ParseResultModel\ParseResultColor{rgb}\ParseRgb% \let#2\@empty% \@for\ParseValue:=\ParseRgb\do{% \edef#2{% #2% \ifx#2\@empty% \else% \space% \fi% \ParseValue\space 1% }% }% }% % Draw a circle with the image inside. % Parameter 1 (optional): Path to image resource. % Parameter 2 (optional): Image scale. % Parameter 3 (optional): Image color in RGB. % Parameter 4: Circle radius in millimeters. % Parameter 5: Circle border width in millimeters. % Parameter 6: Circle background color in RGB. % Parameter 7: Circle border color in RGB. \NewDocumentCommand{\drawcircle}{O{} O{1} O{} m m m m}{% \ifthenelse{\equal{#3}{}}{}{% \rgbtoarray{#3}\customdecodearray% }{}% \begin{tikzpicture}% \draw[% draw=#7, fill=#6, line width=#5mm,% path picture={% \ifthenelse{\equal{#1}{}}{}{% \node at (path picture bounding box.center){% \ifthenelse{\equal{#3}{}}{% \includegraphics[% width=#2\dimexpr#4mm\relax,% height=#2\dimexpr#4mm\relax]{#1}% }{% \includegraphics[% width=#2\dimexpr#4mm\relax,% height=#2\dimexpr#4mm\relax,% decodearray={\customdecodearray}]{#1}% }% };% }% }% ] (0,0) circle (\dimexpr#4mm-#5mm/2\relax);% \end{tikzpicture}% }% % Main CV function that prepares the entire layout. % Parameter 1 (optional): Path to avatar resource. % Parameter 2 (optional): Avatar scale. % Parameter 3 (optional): Avatar color in RGB. % Parameter 4: Name. % Parameter 5: Description. \NewDocumentEnvironment{cv}{O{} O{2} O{} m m m}{% \relscale{\cvscale}% \fontfamily{\cvfont}% \vspace*{\cvheadermargin mm}% \vspace*{-\cvtopmargin mm}% \hspace{-\timelinespace mm}% \hspace{-\cvavatarradius mm}% \begin{minipage}{\dimexpr(\cvavatarradius mm + \cvavatarradius mm)}% \protect\ifthenelse{\equal{#1}{}}% {\drawcircle{\cvavatarradius} {\cvavatarborderwidth} {cvcolor} {cvavatarbordercolor}}% {\drawcircle[resources/#1][#2][#3]{\cvavatarradius} {\cvavatarborderwidth} {cvcolor} {cvavatarbordercolor}}% \end{minipage}% \hspace{\cvheaderoffset mm}% \begin{minipage}{\dimexpr(\linewidth + \timelinespace mm - \cvavatarradius mm - \cvheaderoffset mm)}% \textscale{\cvheadertitlefontscale}{#4}% \cvseparator[3]% \textscale{\cvheadersubtitlefontscale}{#5}% \cvseparator[1]% #6% Affichage du texte du 6ème paramètre \end{minipage}% \columnratio{\cvcolumnratio}% \begin{paracol}{2}% }{% \end{paracol}% }% % Groups events, items and skills inside one block. % Parameter 1 (optional): Path to icon resource. % Parameter 2 (optional): Icon scale. % Parameter 3 (optional): Icon color in RGB. % Parameter 4: Section title. \NewDocumentCommand{\cvsection}{O{} O{1} O{cviconcolor} m}{% \ifthenelse{\equal{\iscvsidebar}{1}}{% \vspace{\cvsidebarspace mm}% \hspace{-\cvsidebarbubbleradius mm}% \begin{minipage}{\dimexpr(\cvsidebarbubbleradius mm + \cvsidebarbubbleradius mm)}% \protect\ifthenelse{\equal{#1}{}}% {\drawcircle{\cvsidebarbubbleradius} {\cvsidebarbubbleborderwidth} {cvcolor} {cvbordercolor}}% {\drawcircle[resources/#1][#2][#3]{\cvsidebarbubbleradius} {\cvsidebarbubbleborderwidth} {cvcolor} {cvbordercolor}}% \end{minipage}% \hspace{\cvsidebaroffset mm}% \begin{minipage}{\dimexpr(\linewidth - \cvsidebarbubbleradius mm - \cvsidebaroffset mm)}% \textscale{\cvsectionfontscale}{\textbf{#4}}% \end{minipage}% \cvseparator% }{% \vspace{\cvmainspace mm}% \hspace{-\timelinespace mm}% \hspace{-\cvmainbubbleradius mm}% \begin{minipage}{\dimexpr(\cvmainbubbleradius mm + \cvmainbubbleradius mm)}% \ifthenelse{\equal{#1}{}}% {\protect\drawcircle{\cvmainbubbleradius} {\cvmainbubbleborderwidth} {cvcolor} {cvbordercolor}}% {\protect\drawcircle[resources/#1][#2][#3]{\cvmainbubbleradius} {\cvmainbubbleborderwidth} {cvcolor} {cvbordercolor}}% \end{minipage}% \hspace{\dimexpr(\timelinespace mm - \cvmainbubbleradius mm)}% \begin{minipage}{\linewidth}% \textscale{\cvsectionfontscale}{\textbf{#4}}% \end{minipage}% \cvseparator% }% }% % Contains information about the event. % Parameter 1 (optional): Start date of the event. % Parameter 2 (optional): End date of the event. % Parameter 3: Content. \NewDocumentEnvironment{cvevent}{O{} O{} +b}{% \ifthenelse{\equal{\iscvsidebar}{1}}{% \hspace{-\cveventbubbleradius mm}% \hspace{-\timelinespace mm}% \begin{minipage}[t]{\cveventdatewidth mm}% \begin{flushright}% \textbf{#1}\par% \ifthenelse{\equal{#2}{}}{}{% \textbf{\,#2}% }% \end{flushright}% \end{minipage}% \begin{minipage}{\dimexpr(\cveventbubbleradius mm + \cveventbubbleradius mm)}% \protect\drawcircle{\cveventbubbleradius} {\cveventbubbleborderwidth} {cvcolor} {cvbordercolor}% \end{minipage}% \hspace{\dimexpr(\timelinespace mm - \cveventbubbleradius mm)}% \begin{minipage}[t]{\dimexpr(\linewidth - \cveventdatewidth mm)}% #3% \end{minipage}% \par% }{% \PackageError{\packagename}{The cvevent can be used only in the sidebar column}{}% }% }{} % Vertical space between paragraphs. % Parameter 1 (optional): Space size in millimeters. \NewDocumentCommand{\cvseparator}{O{1}}{\vspace{#1\dimexpr\cvseparatorscale mm\relax}\par} % The title of the event header. % Parameter 1: Event title. \newcommand{\cvname}[1]{\textscale{\cvnamefontscale}{\textbf{#1}}\cvseparator} % The description of the event header. % Parameter 1: Event description. \newcommand{\cvdescription}[1]{\textscale{\cvdescriptionfontscale}{\textit{\textbf{#1}}}\cvseparator[2]} % Switches the main column to the sidebar. \newcommand{\cvsidebar}[0]{% \ifthenelse{\equal{\iscvsidebar}{0}}{% \switchcolumn% \renewcommand{\iscvsidebar}{1}% }{% \PackageError{\packagename} {The cvsidebar can be used only once}{}% }% }% % List item with a label. % Parameter 1 (optional): Icon name from fontawesome package. % Parameter 2 (optional): Icon size in milimeters. % Parameter 3: Content. \NewDocumentEnvironment{cvitem}{O{Circle} O{2.5} +b}{% \ifthenelse{\equal{\iscvsidebar}{0}}{% \begin{minipage}{\cvscale\dimexpr#2mm\relax}% \makebox(0, 0){\textcolor{cvcolor} {\fontsize{\cvscale\dimexpr#2mm\relax} {\cvscale\dimexpr#2mm\relax}\csname fa#1\endcsname}}% \end{minipage}% \hspace{\cvsidebaroffset mm}% \begin{minipage} {\dimexpr(\linewidth - \cvsidebaroffset mm - \cvscale\dimexpr#2mm\relax)}% #3% \end{minipage}% \par% }{% \PackageError{\packagename} {The cvitem can be used only in the main content column}{}% }% }{} % List item with an icon and text aligned to the right of the picture. % Parameter 1 (optional): Icon name from fontawesome package. % Parameter 2 (optional): Text content. \NewDocumentEnvironment{qright}{O{Circle} O{}}{% \ifthenelse{\equal{\iscvsidebar}{0}}{% \begin{minipage}[c][\dimexpr0.5\linewidth][c]{0.5\linewidth}% \centering \makebox(0, 0){\textcolor{cvcolor} {\textscale{\cvnamefontscale} {\csname fa#1\endcsname}}}% \end{minipage}% \begin{minipage}[c][\dimexpr0.5\linewidth][c]{0.5\linewidth}% \raggedleft \textscale{\cvnamefontscale}{#2} % \end{minipage}% }{% \PackageError{\packagename} {The qright environment can be used only in the main content column}{}% }% \par % }{} % List item with an icon and text aligned to the right of the picture. % Parameter 1 (optional): Icon name from fontawesome package. % Parameter 2 (optional): Text content. \NewDocumentEnvironment{qrleft}{O{Circle} O{}}{% \ifthenelse{\equal{\iscvsidebar}{0}}{% \begin{minipage}[c][\dimexpr0.5\linewidth][c]{0.5\linewidth}% \raggedleft \textscale{\cvnamefontscale}{#2} % Apply the font scale of cvent \end{minipage}% \begin{minipage}[c][\dimexpr0.5\linewidth][c]{0.5\linewidth}% \centering \makebox(0, 0){\textcolor{cvcolor} {\textscale{\cvnamefontscale} {\csname fa#1\endcsname}}}% \end{minipage}% }{% \PackageError{\packagename} {The qrleft environment can be used only in the main content column}{}% }% \par % }{} % Renders a progress-bar to indicate a certain skill in percent. % Parameter 1: Name of skill. % Parameter 2: Skill level. % Parameter 3: Percent of the progress-bar in range [0, 1]. \newcommand{\cvskill}[3]{% \ifthenelse{\equal{\iscvsidebar}{0}}{% \begin{tabularx}{\linewidth}{>{\raggedright\arraybackslash}X>{\raggedleft\arraybackslash}X}% \textcolor{black}{\textbf{#1}} & \textcolor{cvcolor}{#2}% \end{tabularx}% \begin{tikzpicture}[scale=1,rounded corners=\cvscale*0.5mm,very thin]% \fill [cvlightcolor] (0,0) rectangle (\linewidth, 0.15*\cvscale);% \fill [cvcolor] (0,0) rectangle (#3\linewidth, 0.15*\cvscale);% \end{tikzpicture}% \cvseparator[2]% }{% \PackageError{\packagename} {The cvskill can only be used in the main content}{}% }% }