summaryrefslogtreecommitdiff
path: root/altacv.cls
diff options
context:
space:
mode:
Diffstat (limited to 'altacv.cls')
-rw-r--r--altacv.cls421
1 files changed, 421 insertions, 0 deletions
diff --git a/altacv.cls b/altacv.cls
new file mode 100644
index 0000000..e8caec1
--- /dev/null
+++ b/altacv.cls
@@ -0,0 +1,421 @@
+%%%%%%%%%%%%%%%%%
+% This is altacv.cls (v1.3.3, 31 October 2020) written by
+% LianTze Lim (liantze@gmail.com).
+%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%%
+% Contributions:
+% - https://github.com/akreuzer Added ragged2e option (5 Nov 2018)
+% - https://github.com/stefanogermano Fixed bad boxes and undefined font shape (July 2018)
+% - https://github.com/foohyfooh Fixed blank spaces in \cvevent and bad link in README.md (June 2018)
+
+%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{altacv}[2020/05/17 AltaCV v1.3.3, yet another alternative class for a resume/curriculum vitae.]
+
+%% v1.1: Optionally load academicons
+\newif\if@academicons
+\DeclareOption{academicons}{\@academiconstrue}
+%% v1.1.3: Choice of round/square photo
+\newif\if@normalphoto
+\DeclareOption{normalphoto}{\@normalphototrue}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}}
+\newif\if@raggedtwoe
+\DeclareOption{ragged2e}{\@raggedtwoetrue}
+%% v1.3: load hyperref for clickable hyperlinks
+\newif\if@withhyper
+\DeclareOption{withhyper}{\@withhypertrue}
+\ProcessOptions\relax
+
+\LoadClass{article}
+%% v1.3.2 Hopefully this helps make the PDF
+%% file more 'friendly' with copy-paste etc
+\RequirePackage[a-1b]{pdfx}
+%% v1.3.3 Temporary fix for pdfx and biblatex incompatibility
+%% (Thanks to @badetitou for highlighting this issue)
+%% https://github.com/plk/biblatex/issues/1044
+%% Will be removed when fix is released in biblatex 3.16
+\catcode30=12
+\RequirePackage[margin=2cm]{geometry}
+\RequirePackage[fixed]{fontawesome5}
+\RequirePackage{ifxetex,ifluatex}
+\RequirePackage{scrlfile}
+\RequirePackage{xparse}
+
+%% v1.1.5: added for convenience
+\newif\ifxetexorluatex
+\ifxetex
+ \xetexorluatextrue
+\else
+ \ifluatex
+ \xetexorluatextrue
+ \else
+ \xetexorluatexfalse
+ \fi
+\fi
+
+\ifxetexorluatex
+ \RequirePackage{fontspec}
+\else
+ %% v1.3.2 attempts to make ligatures
+ %% copy-paste as normal characters
+ \RequirePackage{cmap}
+ \RequirePackage[utf8]{inputenc}
+ \RequirePackage[T1]{fontenc}
+ \input{glyphtounicode}
+ \pdfglyphtounicode{f_f}{FB00}
+ \pdfglyphtounicode{f_f_i}{FB03}
+ \pdfglyphtounicode{f_f_l}{FB04}
+ \pdfglyphtounicode{f_i}{FB01}
+ \pdfgentounicode=1
+\fi
+
+%% v1.1: Optionally load academicons
+%% v1.1.5: Handle different versions of academicons
+\if@academicons
+ \ifxetexorluatex
+ \RequirePackage{fontspec}
+ %% academicons in TL2018 doesn't require
+ %% Academicons to be installed in OS fonts
+ %% so can be loaded directly
+ \@ifl@t@r\fmtversion{2018/04/01}{%
+ \RequirePackage{academicons}
+ }{%
+ % TL2017
+ \@ifl@t@r\fmtversion{2017/04/01}{%
+ \@ifpackagelater{academicons}{2018/03/01}{%
+ \RequirePackage{academicons}
+ }{%
+ \let\ori@newfontfamily\newfontfamily%
+ \renewcommand{\newfontfamily}[2]{}
+ \RequirePackage{academicons}
+ \let\newfontfamily\ori@newfontfamily
+ \newfontfamily{\AI}{academicons.ttf}
+ }
+ }{% TL2016 requires the package to be loaded before
+ % the version can be checked. Only added because
+ % Overleaf v1 still runs TL2016; will be removed
+ % when v1 is completely retired.
+ \let\ori@newfontfamily\newfontfamily%
+ \renewcommand{\newfontfamily}[2]{}
+ \RequirePackage{academicons}
+ \let\newfontfamily\ori@newfontfamily
+ \newfontfamily{\AI}{academicons.ttf}
+ }
+ }
+ \else
+ \ClassError{AltaCV}{academicons unsupported by latex or pdflatex. Please compile with xelatex or lualatex}{Please compile with xelatex or lualatex to use the academicons option}
+ \fi
+\fi
+
+\if@raggedtwoe
+ \RequirePackage[newcommands]{ragged2e}
+\fi
+
+\if@withhyper
+ \AtBeginDocument{%
+ \RequirePackage{hyperref}
+ \hypersetup{hidelinks}
+ \urlstyle{same}
+ }
+\fi
+
+\RequirePackage{xcolor}
+
+\colorlet{accent}{blue!70!black}
+\colorlet{emphasis}{black}
+\colorlet{heading}{black}
+\colorlet{headingrule}{black}
+\colorlet{subheading}{emphasis}
+\colorlet{body}{black!80!white}
+\colorlet{name}{heading}
+\colorlet{tagline}{accent}
+\newcommand{\itemmarker}{{\small\textbullet}}
+\newcommand{\ratingmarker}{\faCircle}
+
+\RequirePackage{tikz}
+\usetikzlibrary{arrows}
+\RequirePackage[skins]{tcolorbox}
+\RequirePackage[inline]{enumitem}
+\setlist{leftmargin=*,labelsep=0.5em,nosep,itemsep=0.25\baselineskip,after=\vspace{0.25\baselineskip}}
+\setlist[itemize]{label=\itemmarker}
+\RequirePackage{graphicx}
+\RequirePackage{etoolbox}
+\RequirePackage{dashrule}
+\RequirePackage{multirow,tabularx}
+\RequirePackage{changepage}
+% \RequirePackage{marginfix}
+
+\setlength{\parindent}{0pt}
+\newcommand{\divider}{\textcolor{body!30}{\hdashrule{\linewidth}{0.6pt}{0.5ex}}\medskip}
+
+\newenvironment{fullwidth}{%
+ \begin{adjustwidth}{}{\dimexpr-\marginparwidth-\marginparsep\relax}}
+ {\end{adjustwidth}}
+
+%% v1.3.1 \detokenize will break UTF-8 in pdflatex
+%% Using alternative from https://tex.stackexchange.com/a/530911/226
+\newcommand{\utffriendlydetokenize}[1]{%
+\scantokens{%
+ \catcode`\_=12%
+% \catcode`\^=12%
+% \catcode`\{=12%
+% \catcode`\}=12%
+ \catcode`\&=12%
+ \catcode`\$=12%
+ \catcode`\#=12%
+ \catcode`\~=12%
+% \catcode`\\=12%
+ {#1}%
+}%
+}
+%% v1.3: Incorporating hyperlinks
+%% v1.3.1: using \unfriendlydetokenize to avoid
+%% breaking unicode
+\ExplSyntaxOn
+\NewDocumentCommand{\printinfo}{m m o}{%
+ \IfNoValueTF{#3}{%
+ \mbox{\textcolor{accent}{\normalfont #1}~\utffriendlydetokenize{#2}\hspace{2em}}%
+ }{%
+ \if@withhyper%
+ \mbox{\textcolor{accent}{\normalfont #1}~
+ \href{#3}{\utffriendlydetokenize{#2}}\hspace{2em}}
+ \else%
+ \ClassWarning{Please specify [withhyper] option to enable hyperlinks. Printing out full hyperlink prefix #1 for now.}%
+ \mbox{\textcolor{accent}{\normalfont #1}~{\utffriendlydetokenize{#3#2}}\hspace{2em}}%
+ \fi%
+ }%
+}%
+
+%% v1.3: Exploring convenient creation of fields
+\NewDocumentCommand{\NewInfoField}{m m o}{%
+ \IfNoValueF{#3}{\csdef{#1 hyperprefix}{#3}}%
+ \csdef{#1 symbol}{#2}%
+ \csdef{#1}##1{%
+ \if@withhyper
+ \IfNoValueTF {#3}
+ {\printinfo{\csuse{#1 symbol}}{##1}}%
+ {\printinfo{\csuse{#1 symbol}}{##1}[\csuse{#1 hyperprefix}##1]}%
+ \else
+ \printinfo{\csuse{#1 symbol}}{##1}%
+ \fi%
+ }
+}
+\ExplSyntaxOff
+
+\newcommand{\name}[1]{\def\@name{#1}}
+\newcommand{\tagline}[1]{\def\@tagline{#1}}
+\newcommand{\personalinfo}[1]{\def\@personalinfo{#1}}
+\NewInfoField{email}{\faAt}[mailto:]
+\NewInfoField{mailaddress}{\faEnvelope}
+\NewInfoField{phone}{\faPhone}[tel:]
+\NewInfoField{homepage}{\faGlobe}[https://]
+\NewInfoField{twitter}{\faTwitter}[https://twitter.com/]
+\NewInfoField{linkedin}{\faLinkedin}[https://linkedin.com/in/]
+\NewInfoField{github}{\faGithub}[https://github.com/]
+\NewInfoField{orcid}{\aiOrcid}[https://orcid.org/]
+\NewInfoField{location}{\faMapMarker}
+
+% v1.2: Support for multiple photos
+\newlength{\altacv@photos@width}
+\newlength{\altacv@photo@diam@left}
+\newlength{\altacv@photo@diam@right}
+\def\altacv@left@photos{}
+\def\altacv@right@photos{}
+
+\newcommand{\@makeaphoto}[2]{%
+ \begin{minipage}{#1}%
+ \if@normalphoto
+ \includegraphics[width=\linewidth]{#2}
+ \else
+ \tikz\path[fill overzoom image={#2}]circle[radius=0.5\linewidth];
+ \fi%
+ \end{minipage}%
+}
+
+\newcommand{\altacv@add@photo@left}[1]{%
+ \appto{\altacv@left@photos}{%
+ \@makeaphoto{\altacv@photo@diam@left}{#1}\hspace{1ex}%
+ }%
+ \addtolength{\altacv@photos@width}{\altacv@photo@diam@left}%
+ \addtolength{\altacv@photos@width}{1ex}%
+}
+\newcommand{\altacv@add@photo@right}[1]{%
+ \appto{\altacv@right@photos}{%
+ \@makeaphoto{\altacv@photo@diam@right}{#1}\hspace{1ex}%
+ }%
+ \addtolength{\altacv@photos@width}{\altacv@photo@diam@right}%
+ \addtolength{\altacv@photos@width}{1ex}%
+}
+\newcommand{\photoL}[2]{%
+ \setlength{\altacv@photo@diam@left}{#1}%
+ \forcsvlist{\altacv@add@photo@left}{#2}%
+}
+\newcommand{\photoR}[2]{%
+ \setlength{\altacv@photo@diam@right}{#1}%
+ \forcsvlist{\altacv@add@photo@right}{#2}%
+}
+\let\photo\photoR
+
+\newcommand{\namefont}{\Huge\bfseries}
+\newcommand{\taglinefont}{\large\bfseries}
+\newcommand{\personalinfofont}{\footnotesize\bfseries}
+\newcommand{\cvsectionfont}{\LARGE\bfseries}
+\newcommand{\cvsubsectionfont}{\large\bfseries}
+
+\newcommand{\makecvheader}{%
+ \begingroup
+ \altacv@left@photos\hfill%
+ \begin{minipage}{\dimexpr\linewidth-\altacv@photos@width}%
+ \raggedright%
+ {\namefont\color{name}\MakeUppercase{\@name}\par}
+ \medskip
+ {\taglinefont\color{tagline}\@tagline\par}
+ \medskip
+ {\personalinfofont\@personalinfo\par}
+ \end{minipage}\hfill%
+ \altacv@right@photos\par%
+ \endgroup\medskip
+}
+
+\renewenvironment{quote}{\color{accent}\itshape\large}{\par}
+
+\newcommand{\cvsection}[2][]{%
+ \bigskip%
+ \ifstrequal{#1}{}{}{\marginpar{\vspace*{\dimexpr1pt-\baselineskip}\raggedright\input{#1}}}%
+ {\color{heading}\cvsectionfont\MakeUppercase{#2}}\\[-1ex]%
+ {\color{headingrule}\rule{\linewidth}{2pt}\par}\medskip
+}
+
+\newcommand{\cvsubsection}[1]{%
+ \smallskip%
+ {\color{subheading}\cvsubsectionfont{#1}\par}\medskip
+}
+
+% v1.1.4: fixes inconsistent font size
+\newcommand{\cvevent}[4]{%
+ {\large\color{emphasis}#1\par}
+ \smallskip\normalsize
+ \ifstrequal{#2}{}{}{
+ \textbf{\color{accent}#2}\par
+ \smallskip}
+ \ifstrequal{#3}{}{}{{\small\makebox[0.5\linewidth][l]{\faCalendar~#3}}}%
+ \ifstrequal{#4}{}{}{{\small\makebox[0.5\linewidth][l]{\faMapMarker~#4}}}\par
+ \medskip\normalsize
+}
+
+\newcommand{\cvachievement}[3]{%
+ \begin{tabularx}{\linewidth}{@{}p{2em} @{\hspace{1ex}} >{\raggedright\arraybackslash}X@{}}
+ \multirow{2}{*}{\Large\color{accent}#1} & \bfseries\textcolor{emphasis}{#2}\\
+ & #3
+ \end{tabularx}%
+ \smallskip
+}
+
+\newcommand{\cvtag}[1]{%
+ \tikz[baseline]\node[anchor=base,draw=body!30,rounded corners,inner xsep=1ex,inner ysep =0.75ex,text height=1.5ex,text depth=.25ex]{#1};
+}
+
+\newcommand{\cvskill}[2]{%
+\textcolor{emphasis}{\textbf{#1}}\hfill
+\foreach \x in {1,...,5}{%
+ \space{\ifnumgreater{\x}{#2}{\color{body!30}}{\color{accent}}\ratingmarker}}\par%
+}
+
+% Adapted from @Jake's answer at http://tex.stackexchange.com/a/82729/226
+\newcommand{\wheelchart}[4][0]{%
+ \begingroup\centering
+ \def\innerradius{#3}%
+ \def\outerradius{#2}%
+ % Calculate total
+ \pgfmathsetmacro{\totalnum}{0}%
+ \foreach \value/\colour/\name in {#4} {%
+ \pgfmathparse{\value+\totalnum}%
+ \global\let\totalnum=\pgfmathresult%
+ }%
+ \begin{tikzpicture}
+
+ % Calculate the thickness and the middle line of the wheel
+ \pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
+ \pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}
+ \pgfmathsetmacro{\totalrot}{-90 + #1}
+
+ % Rotate so we start from the top
+ \begin{scope}[rotate=\totalrot]
+
+ % Loop through each value set. \cumnum keeps track of where we are in the wheel
+ \pgfmathsetmacro{\cumnum}{0}
+ \foreach \value/\width/\colour/\name in {#4} {
+ \pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}
+
+ % Calculate the percent value
+ \pgfmathsetmacro{\percentage}{\value/\totalnum*100}
+ % Calculate the mid angle of the colour segments to place the labels
+ \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}
+
+ % This is necessary for the labels to align nicely
+ \pgfmathparse{
+ (-\midangle>180?"west":"east")
+ } \edef\textanchor{\pgfmathresult}
+ \pgfmathparse{
+ (-\midangle>180?"flush left":"flush right")
+ } \edef\textalign{\pgfmathresult}
+ \pgfmathsetmacro\labelshiftdir{1-2*(-\midangle<180)}
+
+ % Draw the color segments. Somehow, the \midrow units got lost, so we add 'pt' at the end. Not nice...
+ \filldraw[draw=white,fill=\colour] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
+ (-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;
+
+ % Draw the data labels
+ \draw [*-,thin,emphasis] node [append after command={(\midangle:\midradius pt) -- (\midangle:\outerradius + 1ex) -- (\tikzlastnode)}] at (\midangle:\outerradius + 1ex) [xshift=\labelshiftdir*0.5cm,inner sep=1ex, outer sep=0pt, text width=\width,anchor=\textanchor,align=\textalign,font=\small,text=body]{\name};
+ % Set the old cumulated angle to the new value
+ \global\let\cumnum=\newcumnum
+ }
+ \end{scope}
+% \draw[gray] (0,0) circle (\outerradius) circle (\innerradius);
+ \end{tikzpicture}\par
+ \endgroup
+}
+
+\newcommand{\cvref}[3]{%
+ \smallskip
+ \textcolor{emphasis}{\textbf{#1}}\par
+ \begin{description}[font=\color{accent},style=multiline,leftmargin=1.35em,align=left]
+ \item[\small\normalfont\emailsymbol] #2
+ \item[\small\normalfont\mailaddresssymbol] #3
+ \end{description}
+% \medskip
+}
+
+\newenvironment{cvcolumn}[1]{\begin{minipage}[t]{#1}\raggedright}{\end{minipage}}
+
+\RequirePackage[backend=biber,style=authoryear,sorting=ydnt]{biblatex}
+%% For removing numbering entirely when using a numeric style
+% \setlength{\bibhang}{1em}
+% \DeclareFieldFormat{labelnumberwidth}{\makebox[\bibhang][l]{\itemmarker}}
+% \setlength{\biblabelsep}{0pt}
+\defbibheading{pubtype}{\cvsubsection{#1}}
+\renewcommand{\bibsetup}{\vspace*{-\baselineskip}}
+\AtEveryBibitem{\makebox[\bibhang][l]{\itemmarker}}
+\setlength{\bibitemsep}{0.25\baselineskip}
+
+% v1.1.2: make it easier to add a sidebar aligned with top of next page
+\RequirePackage{afterpage}
+\newcommand{\addsidebar}[2][]{\marginpar{%
+ \ifstrequal{#1}{}{}{\vspace*{#1}}%
+ \input{#2}}%
+}
+\newcommand{\addnextpagesidebar}[2][]{\afterpage{\addsidebar[#1]{#2}}}
+
+\AtBeginDocument{%
+ \pagestyle{empty}
+ \color{body}
+ \raggedright
+}