Update awesome-cv.cls

This commit is contained in:
2025-06-11 08:41:18 +02:00
parent f7138f4758
commit 0d42baa6a9

View File

@ -54,7 +54,7 @@
\RequirePackage{ragged2e} \RequirePackage{ragged2e}
% Needed to configure page layout % Needed to configure page layout
\RequirePackage{geometry} \RequirePackage{geometry}
% Needed to make header & footer effeciently % Needed to make header & footer efficiently
\RequirePackage{fancyhdr} \RequirePackage{fancyhdr}
% Needed to manage colors % Needed to manage colors
\RequirePackage{xcolor} \RequirePackage{xcolor}
@ -62,6 +62,8 @@
\RequirePackage{ifxetex} \RequirePackage{ifxetex}
% Needed to use \if-\then-\else statement % Needed to use \if-\then-\else statement
\RequirePackage{xifthen} \RequirePackage{xifthen}
% Needed to strip chars from telephone number
\RequirePackage{xstring}
% Needed to use a toolbox of programming tools % Needed to use a toolbox of programming tools
\RequirePackage{etoolbox} \RequirePackage{etoolbox}
% Needed to change line spacing in specific environment % Needed to change line spacing in specific environment
@ -73,30 +75,30 @@
% Needed to manage math fonts % Needed to manage math fonts
\RequirePackage{unicode-math} \RequirePackage{unicode-math}
% Needed to use icons from font-awesome % Needed to use icons from font-awesome
% (https://github.com/posquit0/latex-fontawesome) \RequirePackage{fontawesome5}
\RequirePackage{fontawesome} \RequirePackage{roboto}
\RequirePackage[default,opentype]{sourcesanspro} \RequirePackage[default,opentype]{sourcesanspro}
% Needed for the photo ID % Needed for the photo ID
\RequirePackage[skins]{tcolorbox} \RequirePackage[skins]{tcolorbox}
% Needed to deal a paragraphs % Needed to deal a paragraphs
\RequirePackage{parskip} \RequirePackage{parskip}
% Needed to deal hyperlink % Needed to deal hyperlink
\RequirePackage[hidelinks,unicode]{hyperref} \RequirePackage[hidelinks,unicode,pdfpagelabels=false]{hyperref}
\hypersetup{% \hypersetup{%
pdftitle={}, pdftitle={},
pdfauthor={}, pdfauthor={},
pdfsubject={}, pdfsubject={},
pdfkeywords={} pdfkeywords={}
} }
% Solves issues Warning: File `cv.out' has changed
\RequirePackage{bookmark}
%------------------------------------------------------------------------------- %-------------------------------------------------------------------------------
% Configuration for directory locations % Configuration for directory locations
%------------------------------------------------------------------------------- %-------------------------------------------------------------------------------
% Configure a directory location for fonts(default: 'fonts/') % Configure an optional directory location for fonts(default: 'fonts/')
% Not required anymore but left in place for backward compatability.
\newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} \newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}}
\fontdir
%------------------------------------------------------------------------------- %-------------------------------------------------------------------------------
% Configuration for layout % Configuration for layout
@ -136,6 +138,7 @@
\colorlet{text}{darkgray} \colorlet{text}{darkgray}
\colorlet{graytext}{gray} \colorlet{graytext}{gray}
\colorlet{lighttext}{lightgray} \colorlet{lighttext}{lightgray}
\colorlet{sectiondivider}{gray}
% Awesome colors % Awesome colors
\definecolor{awesome-emerald}{HTML}{00A388} \definecolor{awesome-emerald}{HTML}{00A388}
\definecolor{awesome-skyblue}{HTML}{0395DE} \definecolor{awesome-skyblue}{HTML}{0395DE}
@ -160,24 +163,8 @@
%------------------------------------------------------------------------------- %-------------------------------------------------------------------------------
% Configuration for fonts % Configuration for fonts
%------------------------------------------------------------------------------- %-------------------------------------------------------------------------------
\newcommand*{\headerfont}{\roboto}
% Set font for header (default is Roboto) \newcommand*{\headerfontlight}{\robotolight}
\newfontfamily\headerfont[
Path=\@fontdir,
UprightFont=*-Regular,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
]{Roboto}
\newfontfamily\headerfontlight[
Path=\@fontdir,
UprightFont=*-Thin,
ItalicFont=*-ThinItalic,
BoldFont=*-Medium,
BoldItalicFont=*-MediumItalic,
]{Roboto}
\newcommand*{\footerfont}{\sourcesanspro} \newcommand*{\footerfont}{\sourcesanspro}
\newcommand*{\bodyfont}{\sourcesanspro} \newcommand*{\bodyfont}{\sourcesanspro}
\newcommand*{\bodyfontlight}{\sourcesansprolight} \newcommand*{\bodyfontlight}{\sourcesansprolight}
@ -269,17 +256,30 @@
\newcommand*{\address}[1]{\def\@address{#1}} \newcommand*{\address}[1]{\def\@address{#1}}
% Define writer's position % Define writer's position
% Usage: \name{<position>} % Usage: \position{<position>}
\newcommand*{\position}[1]{\def\@position{#1}} \newcommand*{\position}[1]{\def\@position{#1}}
% Defines writer's mobile (optional) % Defines writer's mobile (optional)
% Usage: \mobile{<mobile number>} % Usage: \mobile{<mobile number>}
\newcommand*{\mobile}[1]{\def\@mobile{#1}} \newcommand*{\mobile}[1]
{
\def\@mobile{#1}
\def\@teluri{tel:\@mobile}
% Strip unwanted characters
\StrDel{\@teluri}{ }[\@teluri]%
\StrDel{\@teluri}{-}[\@teluri]%
\StrDel{\@teluri}{(}[\@teluri]%
\StrDel{\@teluri}{)}[\@teluri]%
}
% Defines writer's email (optional) % Defines writer's email (optional)
% Usage: \email{<email adress>} % Usage: \email{<email address>}
\newcommand*{\email}[1]{\def\@email{#1}} \newcommand*{\email}[1]{\def\@email{#1}}
% Defines writer's date of birth (optional)
% Usage: \dateofbirth{<date>}
\newcommand*{\dateofbirth}[1]{\def\@dateofbirth{#1}}
% Defines writer's homepage (optional) % Defines writer's homepage (optional)
% Usage: \homepage{<url>} % Usage: \homepage{<url>}
\newcommand*{\homepage}[1]{\def\@homepage{#1}} \newcommand*{\homepage}[1]{\def\@homepage{#1}}
@ -292,6 +292,10 @@
% Usage: \gitlab{<gitlab-nick>} % Usage: \gitlab{<gitlab-nick>}
\newcommand*{\gitlab}[1]{\def\@gitlab{#1}} \newcommand*{\gitlab}[1]{\def\@gitlab{#1}}
% Defines writer's bitbucket (optional)
% Usage: \bitbucket{<bitbucket-nick>}
\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}}
% Defines writer's stackoverflow profile (optional) % Defines writer's stackoverflow profile (optional)
% Usage: \stackoverflow{<so userid>}{<so username>} % Usage: \stackoverflow{<so userid>}{<so username>}
% e.g.https://stackoverflow.com/users/123456/sam-smith % e.g.https://stackoverflow.com/users/123456/sam-smith
@ -302,9 +306,22 @@
% Usage: \linkedin{<linked-in-nick>} % Usage: \linkedin{<linked-in-nick>}
\newcommand*{\linkedin}[1]{\def\@linkedin{#1}} \newcommand*{\linkedin}[1]{\def\@linkedin{#1}}
% Defines writer's orcid (optional)
% Usage: \orcid{<orcid-num>}
\newcommand*{\orcid}[1]{\def\@orcid{#1}}
% Defines writer's twitter (optional)
% Usage: \twitter{<twitter handle>} % Usage: \twitter{<twitter handle>}
\newcommand*{\twitter}[1]{\def\@twitter{#1}} \newcommand*{\twitter}[1]{\def\@twitter{#1}}
% Defines writer's Mastodon (optional)
% Usage: \mastodon{<instance>}{<mastodon-nick>}
\newcommand*{\mastodon}[2]{\def\@mastodoninstance{#1}\def\@mastodonname{#2}}
% Defines writer's resarchgate (optional)
% Usage: \researchgate{<researchgate-account>}
\newcommand*{\researchgate}[1]{\def\@researchgate{#1}}
% Defines writer's skype (optional) % Defines writer's skype (optional)
% Usage: \skype{<skype account>} % Usage: \skype{<skype account>}
\newcommand*{\skype}[1]{\def\@skype{#1}} \newcommand*{\skype}[1]{\def\@skype{#1}}
@ -317,9 +334,39 @@
% Usage: \xing{<xing name>} % Usage: \xing{<xing name>}
\newcommand*{\xing}[1]{\def\@xing{#1}} \newcommand*{\xing}[1]{\def\@xing{#1}}
% Defines writer's twitter (optional) % Defines writer's medium profile (optional)
% Defines writer's extra informations (optional) % Usage: \medium{<medium account>}
% Usage: \extrainfo{<extra informations>} \newcommand*{\medium}[1]{\def\@medium{#1}}
% Defines writer's kaggle (optional)
% Usage: \kaggle{<kaggle handle>}
\newcommand*{\kaggle}[1]{\def\@kaggle{#1}}
% Defines writer's Hackerrank (optional)
% Usage: \hackerrank{<Hackerrank profile name>}
\newcommand*{\hackerrank}[1]{\def\@hackerrank{#1}}
% Defines writer's Telegram (optional)
% Usage: \telegram{<Telegram username>}
\newcommand*{\telegram}[1]{\def\@telegram{#1}}
% Defines writer's google scholar profile (optional)
% Usage: \googlescholar{<googlescholar userid>}{<googlescholar username>}
% e.g.https://scholar.google.co.uk/citations?user=wpZDx1cAAAAJ
% would be \googlescholar{wpZDx1cAAAAJ}{Name-to-display-next-icon}
% If 'googlescholar-name' is not provided than it defaults to
% '\firstname \lastname'
\newcommand*{\googlescholar}[2]{%
\def\@googlescholarid{#1}%
\ifthenelse{\equal{#2}{}}{%
\def\@googlescholarname{\@firstname~\@lastname}%
}{%
\def\@googlescholarname{#2}%
}%
}
% Defines writer's extra information (optional)
% Usage: \extrainfo{<extra information>}
\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} \newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}}
% Defines writer's quote (optional) % Defines writer's quote (optional)
@ -438,7 +485,7 @@
\ifthenelse{\isundefined{\@mobile}}% \ifthenelse{\isundefined{\@mobile}}%
{}% {}%
{% {%
\faMobile\acvHeaderIconSep\@mobile% \href{\@teluri}{\faMobile\acvHeaderIconSep\@mobile}%
\setbool{isstart}{false}% \setbool{isstart}{false}%
}% }%
\ifthenelse{\isundefined{\@email}}% \ifthenelse{\isundefined{\@email}}%
@ -447,6 +494,13 @@
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}% \href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}%
}% }%
\ifthenelse{\isundefined{\@dateofbirth}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
% \mbox prevents wrapping of elements%
\mbox{\faBirthdayCake\acvHeaderIconSep\@dateofbirth}%
}%
\ifthenelse{\isundefined{\@homepage}}% \ifthenelse{\isundefined{\@homepage}}%
{}% {}%
{% {%
@ -465,6 +519,12 @@
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}%
}% }%
\ifthenelse{\isundefined{\@bitbucket}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://bitbucket.com/\@bitbucket}{\faBitbucket\acvHeaderIconSep\@bitbucket}%
}%
\ifthenelse{\isundefined{\@stackoverflowid}}% \ifthenelse{\isundefined{\@stackoverflowid}}%
{}% {}%
{% {%
@ -475,7 +535,13 @@
{}% {}%
{% {%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\acvHeaderIconSep\@linkedin}% \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedin\acvHeaderIconSep\@linkedin}%
}%
\ifthenelse{\isundefined{\@orcid}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://orcid.org/\@orcid}{\faOrcid\acvHeaderIconSep\@orcid}%
}% }%
\ifthenelse{\isundefined{\@twitter}}% \ifthenelse{\isundefined{\@twitter}}%
{}% {}%
@ -483,6 +549,12 @@
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}%
}% }%
\ifthenelse{\isundefined{\@mastodonname}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://\@mastodoninstance/@\@mastodonname}{\faMastodon\acvHeaderIconSep\@mastodonname}%
}%
\ifthenelse{\isundefined{\@skype}}% \ifthenelse{\isundefined{\@skype}}%
{}% {}%
{% {%
@ -495,12 +567,48 @@
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}%
}% }%
\ifthenelse{\isundefined{\@researchgate}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.researchgate.net/profile/\@researchgate}{\faResearchgate\acvHeaderIconSep\@researchgate}%
}%
\ifthenelse{\isundefined{\@xing}}% \ifthenelse{\isundefined{\@xing}}%
{}% {}%
{% {%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing}
}% }%
\ifthenelse{\isundefined{\@medium}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://medium.com/@\@medium}{\faMedium\acvHeaderIconSep\@medium}%
}%
\ifthenelse{\isundefined{\@kaggle}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://kaggle.com/\@kaggle}{\faKaggle\acvHeaderIconSep\@kaggle}%
}%
\ifthenelse{\isundefined{\@hackerrank}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.hackerrank.com/\@hackerrank}{\faHackerrank\acvHeaderIconSep\@hackerrank}%
}%
\ifthenelse{\isundefined{\@telegram}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://t.me/\@telegram}{\faTelegram\acvHeaderIconSep\@telegram}%
}%
\ifthenelse{\isundefined{\@googlescholarid}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://scholar.google.com/citations?user=\@googlescholarid}{\faGraduationCap\acvHeaderIconSep\@googlescholarname}%
}%
\ifthenelse{\isundefined{\@extrainfo}}% \ifthenelse{\isundefined{\@extrainfo}}%
{}% {}%
{% {%
@ -532,7 +640,7 @@
\vspace{\acvSectionTopSkip} \vspace{\acvSectionTopSkip}
\sectionstyle{#1} \sectionstyle{#1}
\phantomsection \phantomsection
\color{gray}\vhrulefill{0.9pt} \color{sectiondivider}\vhrulefill{0.9pt}
} }
% Define a subsection for CV % Define a subsection for CV
@ -564,7 +672,7 @@
% Define an entry of cv information % Define an entry of cv information
% Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} % Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>}
\newcommand*{\cventry}[5]{% \newcommand*{\cventry}[5]{%
\vspace{-2.0mm} \vspace{1.0mm}
\setlength\tabcolsep{0pt} \setlength\tabcolsep{0pt}
\setlength{\extrarowheight}{0pt} \setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}}
@ -572,7 +680,9 @@
{\entrypositionstyle{#1} & \entrydatestyle{#4} \\} {\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
{\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\
\entrypositionstyle{#1} & \entrydatestyle{#4} \\} \entrypositionstyle{#1} & \entrydatestyle{#4} \\}
\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \ifstrempty{#5}
{}
{\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \\}
\end{tabular*}% \end{tabular*}%
} }
@ -615,7 +725,7 @@
% Define a line of cv information(honor, award or something else) % Define a line of cv information(honor, award or something else)
% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} % Usage: \cvhonor{<position>}{<title>}{<location>}{<date>}
\newcommand*{\cvhonor}[4]{% \newcommand*{\cvhonor}[4]{%
\honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} \\ \honordatestyle{#4} & \honorpositionstyle{#1}\ifempty{#2}{}{,} \honortitlestyle{#2} & \honorlocationstyle{#3} \\
} }
% Define an environment for cvskill % Define an environment for cvskill
@ -665,8 +775,9 @@
\par\addvspace{2.5ex} \par\addvspace{2.5ex}
\phantomsection{} \phantomsection{}
\lettersectionstyle{#1} \lettersectionstyle{#1}
\color{gray}\vhrulefill{0.9pt} \color{sectiondivider}\vhrulefill{0.9pt}
\par\nobreak\addvspace{0.4ex} \par\nobreak\addvspace{0.4ex}
\lettertextstyle
} }
% Define a title of the cover letter % Define a title of the cover letter
@ -699,4 +810,4 @@
\\\\\\ \\\\\\
\letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\
} }
} }