Awesome-CV/awesome-cv.cls

821 lines
30 KiB
OpenEdge ABL
Raw Normal View History

2015-05-07 11:25:13 +00:00
%% Start of file `awesome-cv.cls'.
2015-12-10 00:51:13 +00:00
% Awesome CV Class File
%
% This class has been downloaded from:
% https://github.com/posquit0/Awesome-CV
%
% Author:
% Claud D. Park <posquit0.bj@gmail.com>
% http://www.posquit0.com
%
% Notes:
% 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex).
% 2) It has been written in such a way that under most circumstances you
2015-12-10 00:51:13 +00:00
% should not need to edit it.
%
% Class license:
% LPPL v1.3c (http://www.latex-project.org/lppl)
2015-05-07 11:25:13 +00:00
%
%-------------------------------------------------------------------------------
% Identification
%-------------------------------------------------------------------------------
\ProvidesClass{awesome-cv}[2017/02/05 v1.6.1 Awesome Curriculum Vitae Class]
2015-05-07 11:25:13 +00:00
\NeedsTeXFormat{LaTeX2e}
%-------------------------------------------------------------------------------
% Class options
%
% (need to be done before the external package loading, for example because
% we need \paperwidth, \paperheight and \@ptsize to be defined before loading
% geometry and fancyhdr)
%-------------------------------------------------------------------------------
% Options for draft or final
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\DeclareOption{final}{\setlength\overfullrule{0pt}}
% Inherit options of article
2016-01-08 14:46:10 +00:00
\DeclareOption*{%
2015-05-07 11:25:13 +00:00
\PassOptionsToClass{\CurrentOption}{article}
}
\ProcessOptions\relax
\LoadClass{article}
%-------------------------------------------------------------------------------
% 3rd party packages
%-------------------------------------------------------------------------------
% Needed to make fixed length table
\RequirePackage{array}
% Needed to handle list environment
\RequirePackage{enumitem}
% Needed to handle text alignment
\RequirePackage{ragged2e}
% Needed to configure page layout
\RequirePackage{geometry}
% Needed to make header & footer efficiently
2015-05-07 11:25:13 +00:00
\RequirePackage{fancyhdr}
% Needed to manage colors
\RequirePackage{xcolor}
% Needed to use \ifxetex-\else-\fi statement
\RequirePackage{ifxetex}
% Needed to use \if-\then-\else statement
2015-11-19 06:47:07 +00:00
\RequirePackage{xifthen}
% Needed to strip chars from telephone number
\RequirePackage{xstring}
2015-11-19 04:50:51 +00:00
% Needed to use a toolbox of programming tools
\RequirePackage{etoolbox}
2015-12-14 06:59:20 +00:00
% Needed to change line spacing in specific environment
\RequirePackage{setspace}
2015-05-07 11:25:13 +00:00
% Needed to manage fonts
2016-01-08 14:46:10 +00:00
\RequirePackage[quiet]{fontspec}
% To support LaTeX quoting style
\defaultfontfeatures{Ligatures=TeX}
2015-05-07 11:25:13 +00:00
% Needed to manage math fonts
\RequirePackage{unicode-math}
2015-05-07 11:25:13 +00:00
% Needed to use icons from font-awesome
2018-10-04 11:06:39 +00:00
\RequirePackage{fontawesome5}
\RequirePackage{roboto}
2016-11-24 12:34:09 +00:00
\RequirePackage[default,opentype]{sourcesanspro}
2016-11-24 12:48:33 +00:00
% Needed for the photo ID
\RequirePackage[skins]{tcolorbox}
2015-05-07 11:25:13 +00:00
% Needed to deal a paragraphs
\RequirePackage{parskip}
% Needed to deal hyperlink
\RequirePackage[hidelinks,unicode,pdfpagelabels=false]{hyperref}
2016-01-08 14:46:10 +00:00
\hypersetup{%
2015-05-07 11:25:13 +00:00
pdftitle={},
pdfauthor={},
pdfsubject={},
pdfkeywords={}
2015-05-07 11:25:13 +00:00
}
% Solves issues Warning: File `cv.out' has changed
\RequirePackage{bookmark}
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Configuration for directory locations
%-------------------------------------------------------------------------------
% Configure an optional directory location for fonts(default: 'fonts/')
% Not required anymore but left in place for backward compatability.
2015-05-07 11:25:13 +00:00
\newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}}
%-------------------------------------------------------------------------------
% Configuration for layout
%-------------------------------------------------------------------------------
%% Page Layout
% Configure page margins with geometry
2015-11-03 01:19:12 +00:00
\geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm}
2015-05-07 11:25:13 +00:00
%% Header & Footer
% Set offset to each header and footer
2015-05-07 11:25:13 +00:00
\fancyhfoffset{0em}
% Remove head rule
\renewcommand{\headrulewidth}{0pt}
% Clear all header & footer fields
\fancyhf{}
% Enable if you want to make header or footer using fancyhdr
\pagestyle{fancy}
%-------------------------------------------------------------------------------
% Configuration for colors
%-------------------------------------------------------------------------------
% Gray-scale colors
\definecolor{white}{HTML}{FFFFFF}
\definecolor{black}{HTML}{000000}
\definecolor{darkgray}{HTML}{333333}
\definecolor{gray}{HTML}{5D5D5D}
\definecolor{lightgray}{HTML}{999999}
% Basic colors
\definecolor{green}{HTML}{C2E15F}
\definecolor{orange}{HTML}{FDA333}
\definecolor{purple}{HTML}{D3A4F9}
\definecolor{red}{HTML}{FB4485}
\definecolor{blue}{HTML}{6CE0F1}
2015-11-19 02:34:38 +00:00
% Text colors
\definecolor{darktext}{HTML}{414141}
\colorlet{text}{darkgray}
\colorlet{graytext}{gray}
\colorlet{lighttext}{lightgray}
\colorlet{sectiondivider}{gray}
2015-05-07 11:25:13 +00:00
% Awesome colors
2015-05-15 10:53:39 +00:00
\definecolor{awesome-emerald}{HTML}{00A388}
\definecolor{awesome-skyblue}{HTML}{0395DE}
2015-05-07 11:25:13 +00:00
\definecolor{awesome-red}{HTML}{DC3522}
2015-05-15 10:53:39 +00:00
\definecolor{awesome-pink}{HTML}{EF4089}
\definecolor{awesome-orange}{HTML}{FF6138}
\definecolor{awesome-nephritis}{HTML}{27AE60}
\definecolor{awesome-concrete}{HTML}{95A5A6}
\definecolor{awesome-darknight}{HTML}{131A28}
2015-05-07 11:25:13 +00:00
\colorlet{awesome}{awesome-red}
% Boolean value to switch section color highlighting
\newbool{acvSectionColorHighlight}
\setbool{acvSectionColorHighlight}{true}
2015-05-07 11:25:13 +00:00
% Awesome section color
\def\@sectioncolor#1#2#3{%
\ifbool{acvSectionColorHighlight}{{\color{awesome}#1#2#3}}{#1#2#3}%
2015-05-07 11:25:13 +00:00
}
%-------------------------------------------------------------------------------
% Configuration for fonts
%-------------------------------------------------------------------------------
\newcommand*{\headerfont}{\roboto}
\newcommand*{\headerfontlight}{\robotolight}
2016-11-24 12:34:09 +00:00
\newcommand*{\footerfont}{\sourcesanspro}
\newcommand*{\bodyfont}{\sourcesanspro}
\newcommand*{\bodyfontlight}{\sourcesansprolight}
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Configuration for styles
%-------------------------------------------------------------------------------
% Configure styles for each CV elements
% For fundamental structures
2015-11-19 02:34:38 +00:00
\newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}}
\newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}}
2015-11-21 05:29:45 +00:00
\newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}}
2015-11-19 02:34:38 +00:00
\newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}}
\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}}
2015-11-25 03:25:54 +00:00
\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}}
2015-11-19 02:34:38 +00:00
\newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}}
\newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}}
\newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}}
\newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}}
2015-05-07 11:25:13 +00:00
% For elements of entry
2015-11-19 02:34:38 +00:00
\newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
\newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}}
\newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}}
2015-11-06 11:23:40 +00:00
\newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}}
2015-11-19 02:34:38 +00:00
\newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}}
2015-05-07 11:25:13 +00:00
% For elements of subentry
2015-11-19 02:34:38 +00:00
\newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}}
\newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}}
\newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}}
2015-11-06 11:23:40 +00:00
\newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}}
2015-11-19 02:34:38 +00:00
\newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}}
2015-05-07 11:25:13 +00:00
% For elements of honor
2015-11-19 02:34:38 +00:00
\newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}}
\newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
\newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}}
2015-11-06 11:23:40 +00:00
\newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}}
2015-05-07 11:25:13 +00:00
2015-11-19 02:34:38 +00:00
% For elements of skill
\newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}}
2015-12-13 10:09:19 +00:00
% For elements of the cover letter
\newcommand*{\lettersectionstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}}
2015-12-14 06:59:20 +00:00
\newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}}
\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}}
\newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}}
\newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}}
\newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
\newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}}
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Commands for personal information
%-------------------------------------------------------------------------------
2016-11-24 12:48:33 +00:00
% Define photo ID
2016-12-02 21:29:14 +00:00
% Usage: \photo[circle|rectangle,edge|noedge,left|right]{<path-to-image>}
\newcommand{\photo}[2][circle,edge,left]{%
\def\@photo{#2}
\@for\tmp:=#1\do{%
\ifthenelse{\equal{\tmp}{circle} \or \equal{\tmp}{rectangle}}%
{\let\@photoshape\tmp}{}%
\ifthenelse{\equal{\tmp}{edge} \or \equal{\tmp}{noedge}}%
{\let\@photoedge\tmp}{}%
\ifthenelse{\equal{\tmp}{left} \or \equal{\tmp}{right}}%
{\let\@photoalign\tmp}{}%
}%
}
\def\@photoshape{circle}
\def\@photoedge{edge}
\def\@photoalign{left}
2016-11-24 12:48:33 +00:00
2015-05-07 11:25:13 +00:00
% Define writer's name
% Usage: \name{<firstname>}{<lastname>}
% Usage: \firstname{<firstname>}
% Usage: \lastname{<lastname>}
% Usage: \familyname{<familyname>}
\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}}
\newcommand*{\firstname}[1]{\def\@firstname{#1}}
\newcommand*{\lastname}[1]{\def\@lastname{#1}}
\newcommand*{\familyname}[1]{\def\@lastname{#1}}
\def\@familyname{\@lastname}
% Define writer's address
% Usage: \address{<address>}
\newcommand*{\address}[1]{\def\@address{#1}}
% Define writer's position
2019-02-18 15:12:11 +00:00
% Usage: \position{<position>}
2015-05-07 11:25:13 +00:00
\newcommand*{\position}[1]{\def\@position{#1}}
% Defines writer's mobile (optional)
% Usage: \mobile{<mobile number>}
\newcommand*{\mobile}[1]
{
\def\@mobile{#1}
\def\@teluri{tel:\@mobile}
2023-07-27 22:06:27 +00:00
% Strip unwanted characters
\StrDel{\@teluri}{ }[\@teluri]%
\StrDel{\@teluri}{-}[\@teluri]%
\StrDel{\@teluri}{(}[\@teluri]%
\StrDel{\@teluri}{)}[\@teluri]%
}
2015-05-07 11:25:13 +00:00
% Defines writer's email (optional)
2019-02-27 05:42:22 +00:00
% Usage: \email{<email address>}
2015-05-07 11:25:13 +00:00
\newcommand*{\email}[1]{\def\@email{#1}}
% Defines writer's date of birth (optional)
% Usage: \dateofbirth{<date>}
\newcommand*{\dateofbirth}[1]{\def\@dateofbirth{#1}}
2015-05-07 11:25:13 +00:00
% Defines writer's homepage (optional)
% Usage: \homepage{<url>}
\newcommand*{\homepage}[1]{\def\@homepage{#1}}
% Defines writer's github (optional)
% Usage: \github{<github-nick>}
\newcommand*{\github}[1]{\def\@github{#1}}
2016-12-03 06:49:31 +00:00
% Defines writer's gitlab (optional)
% Usage: \gitlab{<gitlab-nick>}
\newcommand*{\gitlab}[1]{\def\@gitlab{#1}}
% Defines writer's bitbucket (optional)
% Usage: \bitbucket{<bitbucket-nick>}
\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}}
2015-12-09 13:56:22 +00:00
% Defines writer's stackoverflow profile (optional)
% Usage: \stackoverflow{<so userid>}{<so username>}
% e.g.https://stackoverflow.com/users/123456/sam-smith
% would be \stackoverflow{123456}{sam-smith}
\newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}}
% Defines writer's linked-in (optional)
% Usage: \linkedin{<linked-in-nick>}
\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>}
\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)
% Usage: \skype{<skype account>}
\newcommand*{\skype}[1]{\def\@skype{#1}}
% Defines writer's reddit (optional)
% Usage: \reddit{<reddit account>}
\newcommand*{\reddit}[1]{\def\@reddit{#1}}
% Defines writer's xing (optional)
% Usage: \xing{<xing name>}
\newcommand*{\xing}[1]{\def\@xing{#1}}
% Defines writer's medium profile (optional)
% Usage: \medium{<medium account>}
\newcommand*{\medium}[1]{\def\@medium{#1}}
2021-12-18 19:37:43 +00:00
% Defines writer's kaggle (optional)
% Usage: \kaggle{<kaggle handle>}
\newcommand*{\kaggle}[1]{\def\@kaggle{#1}}
2023-09-06 19:48:11 +00:00
% Defines writer's Hackerrank (optional)
% Usage: \hackerrank{<Hackerrank profile name>}
\newcommand*{\hackerrank}[1]{\def\@hackerrank{#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}}
2015-05-07 11:25:13 +00:00
% Defines writer's quote (optional)
% Usage: \quote{<quote>}
\renewcommand*{\quote}[1]{\def\@quote{#1}}
2015-12-14 06:59:20 +00:00
% Defines recipient's information (cover letter only)
% Usage: \recipient{<recipient name>}{<recipient address>}
% Usage: \recipientname{<recipient name>}
% Usage: \recipientaddress{<recipient address>}
\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}}
\newcommand*{\recipientname}[1]{\def\@recipientname{#1}}
\newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}}
% Defines the title for letter (cover letter only, optional)
% Usage: \lettertitle{<title>}
\newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}}
% Defines the date for letter (cover letter only)
% Usage: \letterdate{<date>}
\newcommand*{\letterdate}[1]{\def\@letterdate{#1}}
% Defines a message of opening for letter (cover letter only)
% Usage: \letteropening{<message>}
\newcommand*{\letteropening}[1]{\def\@letteropening{#1}}
% Defines a message of closing for letter (cover letter only)
% Usage: \letterclosing{<message>}
\newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}}
% Defines an enclosure for letter (cover letter only, optional)
% Usage: \letterenclosure[<enclosure name>]{<enclosure>}
\newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}}
2016-01-08 14:46:10 +00:00
\newcommand*{\letterenclosure}[2][]{%
2015-12-14 06:59:20 +00:00
% if an optional argument is provided, use it to redefine \enclname
\ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}}
\def\@letterenclosure{#2}
}
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Commands for extra
%-------------------------------------------------------------------------------
2016-01-30 09:35:09 +00:00
%% Define helper macros a user can change easily
% Header
2016-01-08 14:46:10 +00:00
\newcommand{\acvHeaderNameDelim}{\space}
\newcommand{\acvHeaderAfterNameSkip}{.4mm}
\newcommand{\acvHeaderAfterPositionSkip}{.4mm}
\newcommand{\acvHeaderAfterAddressSkip}{-.5mm}
\newcommand{\acvHeaderIconSep}{\space}
\newcommand{\acvHeaderSocialSep}{\quad\textbar\quad}
\newcommand{\acvHeaderAfterSocialSkip}{6mm}
\newcommand{\acvHeaderAfterQuoteSkip}{5mm}
2016-01-30 09:35:09 +00:00
% Others
\newcommand{\acvSectionTopSkip}{3mm}
\newcommand{\acvSectionContentTopSkip}{2.5mm}
2016-01-30 09:35:09 +00:00
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Commands for utilities
%-------------------------------------------------------------------------------
% Use to align an element of tabular table
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
% Use to draw horizontal line with specific thickness
2015-05-07 11:25:13 +00:00
\def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@}
2015-11-19 06:47:07 +00:00
% Use to execute conditional statements by checking empty string
\newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}}
2015-11-06 11:23:40 +00:00
2015-05-07 11:25:13 +00:00
%-------------------------------------------------------------------------------
% Commands for elements of CV structure
%-------------------------------------------------------------------------------
% Define a header for CV
% Usage: \makecvheader
\newcommand*{\makecvheader}[1][C]{%
2016-12-02 21:29:14 +00:00
\newcommand*{\drawphoto}{%
\ifthenelse{\isundefined{\@photo}}{}{%
\newlength{\photodim}
\ifthenelse{\equal{\@photoshape}{circle}}%
{\setlength{\photodim}{1.3cm}}%
{\setlength{\photodim}{1.8cm}}%
\ifthenelse{\equal{\@photoedge}{edge}}%
{\def\@photoborder{darkgray}}%
{\def\@photoborder{none}}%
\begin{tikzpicture}%
\node[\@photoshape, draw=\@photoborder, line width=0.3mm, inner sep=\photodim, fill overzoom image=\@photo] () {};
\end{tikzpicture}
}%
}
2016-11-24 12:48:33 +00:00
\newlength{\headertextwidth}
2016-12-02 21:29:14 +00:00
\newlength{\headerphotowidth}
\ifthenelse{\isundefined{\@photo}}{
2016-11-24 12:48:33 +00:00
\setlength{\headertextwidth}{\textwidth}
2016-12-02 21:29:14 +00:00
\setlength{\headerphotowidth}{0cm}
2016-11-24 12:48:33 +00:00
}{%
2016-12-02 21:29:14 +00:00
\setlength{\headertextwidth}{0.76\textwidth}
\setlength{\headerphotowidth}{0.24\textwidth}
2016-11-24 12:48:33 +00:00
}%
2016-12-02 21:29:14 +00:00
\begin{minipage}[c]{\headerphotowidth}%
\ifthenelse{\equal{\@photoalign}{left}}{\raggedright\drawphoto}{}
\end{minipage}
2016-11-24 12:48:33 +00:00
\begin{minipage}[c]{\headertextwidth}
\ifthenelse{\equal{#1}{L}}{\raggedright}{\ifthenelse{\equal{#1}{R}}{\raggedleft}{\centering}}
2016-01-08 14:46:10 +00:00
\headerfirstnamestyle{\@firstname}\headerlastnamestyle{{}\acvHeaderNameDelim\@lastname}%
\\[\acvHeaderAfterNameSkip]%
\ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\[\acvHeaderAfterPositionSkip]}}%
\ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\[\acvHeaderAfterAddressSkip]}}%
2016-01-04 14:08:46 +00:00
\headersocialstyle{%
\newbool{isstart}%
\setbool{isstart}{true}%
\ifthenelse{\isundefined{\@mobile}}%
{}%
{%
\href{\@teluri}{\faMobile\acvHeaderIconSep\@mobile}%
2016-01-04 14:08:46 +00:00
\setbool{isstart}{false}%
}%
\ifthenelse{\isundefined{\@email}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@dateofbirth}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
% \mbox prevents wrapping of elements%
\mbox{\faBirthdayCake\acvHeaderIconSep\@dateofbirth}%
}%
2016-01-04 14:08:46 +00:00
\ifthenelse{\isundefined{\@homepage}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@github}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\href{https://github.com/\@github}{\faGithubSquare\acvHeaderIconSep\@github}%
2016-01-04 14:08:46 +00:00
}%
2016-12-03 06:49:31 +00:00
\ifthenelse{\isundefined{\@gitlab}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\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}%
}%
2016-01-04 14:08:46 +00:00
\ifthenelse{\isundefined{\@stackoverflowid}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@linkedin}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2018-10-04 11:06:39 +00:00
\href{https://www.linkedin.com/in/\@linkedin}{\faLinkedin\acvHeaderIconSep\@linkedin}%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@orcid}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://orcid.org/\@orcid}{\faOrcid\acvHeaderIconSep\@orcid}%
}%
2016-01-04 14:08:46 +00:00
\ifthenelse{\isundefined{\@twitter}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@mastodonname}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://\@mastodoninstance/@\@mastodonname}{\faMastodon\acvHeaderIconSep\@mastodonname}%
}%
2016-01-04 14:08:46 +00:00
\ifthenelse{\isundefined{\@skype}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2016-01-08 14:46:10 +00:00
\faSkype\acvHeaderIconSep\@skype%
2016-01-04 14:08:46 +00:00
}%
\ifthenelse{\isundefined{\@reddit}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\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}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing}
}%
\ifthenelse{\isundefined{\@medium}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
2019-01-11 09:33:46 +00:00
\href{https://medium.com/@\@medium}{\faMedium\acvHeaderIconSep\@medium}%
}%
2021-12-18 19:37:43 +00:00
\ifthenelse{\isundefined{\@kaggle}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://kaggle.com/\@kaggle}{\faKaggle\acvHeaderIconSep\@kaggle}%
}%
2023-09-06 19:48:11 +00:00
\ifthenelse{\isundefined{\@hackerrank}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://www.hackerrank.com/\@hackerrank}{\faHackerrank\acvHeaderIconSep\@hackerrank}%
}%
\ifthenelse{\isundefined{\@googlescholarid}}%
{}%
{%
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\href{https://scholar.google.com/citations?user=\@googlescholarid}{\faGraduationCap\acvHeaderIconSep\@googlescholarname}%
}%
\ifthenelse{\isundefined{\@extrainfo}}%
{}%
{%
2016-02-24 02:59:13 +00:00
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
\@extrainfo%
}%
2016-01-08 14:46:10 +00:00
} \\[\acvHeaderAfterSocialSkip]%
2016-01-04 14:08:46 +00:00
\ifthenelse{\isundefined{\@quote}}%
{}%
2016-01-08 14:46:10 +00:00
{\headerquotestyle{\@quote\\}\vspace{\acvHeaderAfterQuoteSkip}}%
2016-11-24 12:48:33 +00:00
\end{minipage}%
2016-12-02 21:29:14 +00:00
\begin{minipage}[c]{\headerphotowidth}%
\ifthenelse{\equal{\@photoalign}{right}}{\raggedleft\drawphoto}{}
\end{minipage}
2015-05-07 11:25:13 +00:00
}
% Define a footer for CV
% Usage: \makecvfooter{<left>}{<center>}{<right>}
2016-01-08 14:46:10 +00:00
\newcommand*{\makecvfooter}[3]{%
2015-05-07 11:25:13 +00:00
\fancyfoot{}
2016-01-08 14:46:10 +00:00
\fancyfoot[L]{\footerstyle{#1}}
\fancyfoot[C]{\footerstyle{#2}}
\fancyfoot[R]{\footerstyle{#3}}
2015-05-07 11:25:13 +00:00
}
% Define a section for CV
% Usage: \cvsection{<section-title>}
2016-01-08 14:46:10 +00:00
\newcommand{\cvsection}[1]{%
2016-01-30 09:35:09 +00:00
\vspace{\acvSectionTopSkip}
2015-05-07 11:25:13 +00:00
\sectionstyle{#1}
2016-01-30 09:35:09 +00:00
\phantomsection
\color{sectiondivider}\vhrulefill{0.9pt}
2015-05-07 11:25:13 +00:00
}
% Define a subsection for CV
% Usage: \cvsubsection{<subsection-title>}
2016-01-08 14:46:10 +00:00
\newcommand{\cvsubsection}[1]{%
\vspace{\acvSectionContentTopSkip}
\vspace{-3mm}
2015-05-07 11:25:13 +00:00
\subsectionstyle{#1}
2016-01-30 09:35:09 +00:00
\phantomsection
2015-05-07 11:25:13 +00:00
}
% Define a paragraph for CV
2016-01-08 14:46:10 +00:00
\newenvironment{cvparagraph}{%
\vspace{\acvSectionContentTopSkip}
\vspace{-3mm}
\paragraphstyle
2016-01-08 14:46:10 +00:00
}{%
\par
\vspace{2mm}
}
2015-05-07 11:25:13 +00:00
% Define an environment for cventry
2016-01-08 14:46:10 +00:00
\newenvironment{cventries}{%
\vspace{\acvSectionContentTopSkip}
2015-05-07 11:25:13 +00:00
\begin{center}
2016-01-08 14:46:10 +00:00
}{%
2015-05-07 11:25:13 +00:00
\end{center}
}
% Define an entry of cv information
% Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>}
2016-01-08 14:46:10 +00:00
\newcommand*{\cventry}[5]{%
2016-01-30 09:35:09 +00:00
\vspace{-2.0mm}
2015-05-07 11:25:13 +00:00
\setlength\tabcolsep{0pt}
\setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}}
2015-11-19 06:47:07 +00:00
\ifempty{#2#3}
{\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
{\entrytitlestyle{#2} & \entrylocationstyle{#3} \\
\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
\ifstrempty{#5}
{}
{\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \\}
2016-01-30 09:35:09 +00:00
\end{tabular*}%
2015-05-07 11:25:13 +00:00
}
% Define an environment for cvsubentry
2016-01-08 14:46:10 +00:00
\newenvironment{cvsubentries}{%
2015-05-07 11:25:13 +00:00
\begin{center}
2016-01-08 14:46:10 +00:00
}{%
2015-05-07 11:25:13 +00:00
\end{center}
}
% Define a subentry of cv information
% Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>}
2016-01-08 14:46:10 +00:00
\newcommand*{\cvsubentry}[4]{%
2015-05-07 11:25:13 +00:00
\setlength\tabcolsep{0pt}
\setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}}
2015-05-07 11:25:13 +00:00
\setlength\leftskip{0.2cm}
\subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}}
{\subentrydatestyle{#3}}{}
2015-05-07 11:25:13 +00:00
\ifthenelse{\equal{#1}{}}
{}
{\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\}
\ifthenelse{\equal{#4}{}}
{}
{\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\}
\end{tabular*}
}
% Define an environment for cvhonor
2016-01-08 14:46:10 +00:00
\newenvironment{cvhonors}{%
\vspace{\acvSectionContentTopSkip}
\vspace{-2mm}
2015-05-07 11:25:13 +00:00
\begin{center}
\setlength\tabcolsep{0pt}
\setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{\textwidth - 4.0cm} R{2.5cm}}
2016-01-08 14:46:10 +00:00
}{%
2015-05-07 11:25:13 +00:00
\end{tabular*}
\end{center}
}
% Define a line of cv information(honor, award or something else)
% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>}
2016-01-08 14:46:10 +00:00
\newcommand*{\cvhonor}[4]{%
\honordatestyle{#4} & \honorpositionstyle{#1}\ifempty{#2}{}{,} \honortitlestyle{#2} & \honorlocationstyle{#3} \\
2015-05-07 11:25:13 +00:00
}
2015-11-19 02:34:38 +00:00
% Define an environment for cvskill
2016-01-08 14:46:10 +00:00
\newenvironment{cvskills}{%
\vspace{\acvSectionContentTopSkip}
\vspace{-2.0mm}
2015-11-19 02:34:38 +00:00
\begin{center}
\setlength\tabcolsep{1ex}
\setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{\textwidth * \real{0.9}}}
2016-01-08 14:46:10 +00:00
}{%
2015-11-19 02:34:38 +00:00
\end{tabular*}
\end{center}
}
% Define a line of cv information(skill)
% Usage: \cvskill{<type>}{<skillset>}
2016-01-08 14:46:10 +00:00
\newcommand*{\cvskill}[2]{%
\skilltypestyle{#1} & \skillsetstyle{#2} \\
2015-11-19 02:34:38 +00:00
}
2015-05-07 11:25:13 +00:00
% Define an environment for cvitems(for cventry)
2016-01-08 14:46:10 +00:00
\newenvironment{cvitems}{%
2016-01-30 09:35:09 +00:00
\vspace{-4.0mm}
2015-05-07 11:25:13 +00:00
\begin{justify}
\begin{itemize}[leftmargin=2ex, nosep, noitemsep, label=]
\setlength\itemsep{0pt}
\setlength\parskip{0pt}
\setlength\parsep{0pt}
\renewcommand{\labelitemi}{\hspace{0.2em}\textbullet\hspace{0.2em}}
}{%
\end{itemize}
2015-05-07 11:25:13 +00:00
\end{justify}
2016-01-30 09:35:09 +00:00
\vspace{-4.0mm}
}
2015-12-13 10:09:19 +00:00
% Define an environment for cvsubitems (Same as the above but without retaking vertical space)
\newenvironment{cvsubitems}{%
\begin{justify}
\begin{itemize}[leftmargin=2ex, nosep, noitemsep, label=]
\setlength\itemsep{0pt}
\setlength\parskip{0pt}
\setlength\parsep{0pt}
\renewcommand{\labelitemi}{\hspace{0.2em}\textbullet\hspace{0.2em}}
\renewcommand{\labelitemii}{\hspace{0.2em}\textopenbullet\hspace{0.2em}}
\renewcommand{\labelitemiii}{\hspace{0.2em}\textasteriskcentered\hspace{0.2em}}
}{%
\end{itemize}
\end{justify}
}
2015-12-13 10:09:19 +00:00
%-------------------------------------------------------------------------------
% Commands for elements of Cover Letter
%-------------------------------------------------------------------------------
% Define an environment for cvletter
2016-01-08 14:46:10 +00:00
\newenvironment{cvletter}{%
2015-12-14 06:59:20 +00:00
\lettertextstyle
2016-01-08 14:46:10 +00:00
}{%
2015-12-13 10:09:19 +00:00
}
% Define a section for the cover letter
% Usage: \lettersection{<section-title>}
2016-01-08 14:46:10 +00:00
\newcommand{\lettersection}[1]{%
2015-12-14 06:59:20 +00:00
\par\addvspace{2.5ex}
\phantomsection{}
\lettersectionstyle{#1}
\color{sectiondivider}\vhrulefill{0.9pt}
2015-12-14 06:59:20 +00:00
\par\nobreak\addvspace{0.4ex}
\lettertextstyle
2015-12-14 06:59:20 +00:00
}
% Define a title of the cover letter
% Usage: \makelettertitle
2016-01-08 14:46:10 +00:00
\newcommand*{\makelettertitle}{%
2015-12-14 06:59:20 +00:00
\vspace{8.4mm}
2015-12-13 10:09:19 +00:00
\setlength\tabcolsep{0pt}
\setlength{\extrarowheight}{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}}
2015-12-14 06:59:20 +00:00
\recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate}
2015-12-13 10:09:19 +00:00
\end{tabular*}
2015-12-14 06:59:20 +00:00
\begin{singlespace}
\recipientaddressstyle{\@recipientaddress} \\\\
\end{singlespace}
\ifthenelse{\isundefined{\@lettertitle}}
{}
{\lettertitlestyle{\@lettertitle} \\}
\lettertextstyle{\@letteropening}
2015-12-14 06:59:20 +00:00
}
% Define a closing of the cover letter
% Usage: \makeletterclosing
2016-01-08 14:46:10 +00:00
\newcommand*{\makeletterclosing}{%
2015-12-14 06:59:20 +00:00
\vspace{3.4mm}
\lettertextstyle{\@letterclosing} \\\\
\letternamestyle{\@firstname\ \@lastname}
2015-12-14 06:59:20 +00:00
\ifthenelse{\isundefined{\@letterenclosure}}
{\\}
2016-01-08 14:46:10 +00:00
{%
2015-12-14 06:59:20 +00:00
\\\\\\
\letterenclosurestyle{\@letterenclname: \@letterenclosure} \\
2015-12-14 06:59:20 +00:00
}
2015-12-13 10:09:19 +00:00
}