AltaCV LaTeX template

The AltaCV LaTeX template is LianTze Lim's two column CV class for a modern academic or industry resume with a photo, skill ratings and a publication list.

First page of the AltaCV template

Open in LaTeX.to Download all files (zip)

Files:
sample.tex

Download sample.tex

% Modified for the LaTeX.to template catalogue, not the original file. The changes are listed in changes.txt.
%%%%%%%%%%%%%%%%%
% This is an sample CV template created using altacv.cls
% (v1.7.4, 30 July 2025) written by LianTze Lim ([email protected]). Compiles with pdfLaTeX, XeLaTeX and LuaLaTeX.
%
%% 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.
%%%%%%%%%%%%%%%%

%% Use the "normalphoto" option if you want a normal photo instead of cropped to a circle
% \documentclass[10pt,a4paper,withhyper,normalphoto]{altacv}

\documentclass[10pt,a4paper,withhyper]{altacv}
%% AltaCV uses the fontawesome5 and simpleicons packages.
%% See http://texdoc.net/pkg/fontawesome5 and http://texdoc.net/pkg/simpleicons for full list of symbols.

% Change the page layout if you need to
\geometry{left=1.25cm,right=1.25cm,top=1.5cm,bottom=1.5cm,columnsep=1.2cm}

% The paracol package lets you typeset columns of text in parallel
\usepackage{paracol}

% Change the font if you want to, depending on whether
% you're using pdflatex or xelatex/lualatex
% WHEN COMPILING WITH XELATEX PLEASE USE
% xelatex -shell-escape -output-driver="xdvipdfmx -z 0" sample.tex
\iftutex
  % If using xelatex or lualatex:
  \setmainfont{Roboto Slab}
  \setsansfont{Lato}
  \renewcommand{\familydefault}{\sfdefault}
\else
  % If using pdflatex:
  \usepackage[rm]{roboto}
  \usepackage[defaultsans]{lato}
  % \usepackage{sourcesanspro}
  \renewcommand{\familydefault}{\sfdefault}
\fi

% Change the colours if you want to
\definecolor{SlateGrey}{HTML}{2E2E2E}
\definecolor{LightGrey}{HTML}{666666}
\definecolor{DarkPastelRed}{HTML}{450808}
\definecolor{PastelRed}{HTML}{8F0D0D}
\definecolor{GoldenEarth}{HTML}{E7D192}
\colorlet{name}{black}
\colorlet{tagline}{PastelRed}
\colorlet{heading}{DarkPastelRed}
\colorlet{headingrule}{GoldenEarth}
\colorlet{subheading}{PastelRed}
\colorlet{accent}{PastelRed}
\colorlet{emphasis}{SlateGrey}
\colorlet{body}{LightGrey}

% Change some fonts, if necessary
\renewcommand{\namefont}{\Huge\rmfamily\bfseries}
\renewcommand{\personalinfofont}{\footnotesize}
\renewcommand{\cvsectionfont}{\LARGE\rmfamily\bfseries}
\renewcommand{\cvsubsectionfont}{\large\bfseries}


% Change the bullets for itemize and rating marker
% for \cvskill if you want to
\renewcommand{\cvItemMarker}{{\small\textbullet}}
\renewcommand{\cvRatingMarker}{\faCircle}
% ...and the markers for the date/location for \cvevent
% \renewcommand{\cvDateMarker}{\faCalendar*[regular]}
% \renewcommand{\cvLocationMarker}{\faMapMarker*}


% If your CV/résumé is in a language other than English,
% then you probably want to change these so that when you
% copy-paste from the PDF or run pdftotext, the location
% and date marker icons for \cvevent will paste as correct
% translations. For example Spanish:
% \renewcommand{\locationname}{Ubicación}
% \renewcommand{\datename}{Fecha}


%% Use (and optionally edit if necessary) this .tex if you
%% want to use an author-year reference style like APA(6)
%% for your publication list
% \input{pubs-authoryear.cfg}

%% Use (and optionally edit if necessary) this .tex if you
%% want an originally numerical reference style like IEEE
%% for your publication list
\input{pubs-num.cfg}

%% sample.bib contains your publications
\addbibresource{sample.bib}

\begin{document}
\name{Your Name Here}
\tagline{Your Position or Tagline Here}
%% You can add multiple photos on the left or right
\photoR{2.8cm}{placeholder-photo}
% \photoL{2.5cm}{Yacht_High,Suitcase_High}

\personalinfo{%
  % Not all of these are required!
  \email{[email protected]}
  \phone{000-00-0000}
  \mailaddress{Åddrésş, Street, 00000 Cóuntry}
  \location{Location, COUNTRY}
  \homepage{www.homepage.com}
  % \twitter{@twitterhandle}
  \xtwitter{@x-handle}
  \linkedin{your_id}
  \github{your_id}
  \orcid{0000-0000-0000-0000}
  %% You can add your own arbitrary detail with
  %% \printinfo{symbol}{detail}[optional hyperlink prefix]
  % \printinfo{\faPaw}{Hey ho!}[https://example.com/]

  %% Or you can declare your own field with
  %% \NewInfoFiled{fieldname}{symbol}[optional hyperlink prefix] and use it:
  \NewInfoField{gitlab}{\faGitlab}[https://gitlab.com/]
  \gitlab{your_id}
  %%
  %% For services and platforms like Mastodon where there isn't a
  %% straightforward relation between the user ID/nickname and the hyperlink,
  %% you can use \printinfo directly e.g.
  % \printinfo{\faMastodon}{@username@instace}[https://instance.url/@username]
  %% But if you absolutely want to create new dedicated info fields for
  %% such platforms, then use \NewInfoField* with a star:
  \NewInfoField*{mastodon}{\faMastodon}
  %% then you can use \mastodon, with TWO arguments where the 2nd argument is
  %% the full hyperlink.
  \mastodon{@username@instance}{https://instance.url/@username}
}

\makecvheader
%% Depending on your tastes, you may want to make fonts of itemize environments slightly smaller
% \AtBeginEnvironment{itemize}{\small}

%% Set the left/right column width ratio to 6:4.
\columnratio{0.6}

% Start a 2-column paracol. Both the left and right columns will automatically
% break across pages if things get too long.
\begin{paracol}{2}
\cvsection{Experience}

\cvevent{Job Title 1}{Company 1}{Month 20XX -- Ongoing}{Location}
\begin{itemize}
\item Job description 1
\item Job description 2
\end{itemize}

\divider

\cvevent{Job Title 2}{Company 2}{Month 20XX -- Ongoing}{Location}
\begin{itemize}
\item Job description 1
\item Job description 2
\end{itemize}

\cvsection{Projects}

\cvevent{Project 1}{Funding agency/institution}{}{}
\begin{itemize}
\item Details
\end{itemize}

\divider

\cvevent{Project 2}{Funding agency/institution}{Project duration}{}
A short abstract would also work.

\medskip

\cvsection{A Day of My Life}

% Adapted from @Jake's answer from http://tex.stackexchange.com/a/82729/226
% \wheelchart{outer radius}{inner radius}{
% comma-separated list of value/text width/color/detail}
\wheelchart{1.5cm}{0.5cm}{%
  6/8em/accent!30/{Sleep,\\beautiful sleep},
  3/8em/accent!40/Hopeful novelist by night,
  8/8em/accent!60/Daytime job,
  2/10em/accent/Sports and relaxation,
  5/6em/accent!20/Spending time with family
}

% use ONLY \newpage if you want to force a page break for
% ONLY the current column
\newpage

\cvsection{Publications}

%% Specify your last name(s) and first name(s) as given in the .bib to automatically bold your own name in the publications list.
%% One caveat: You need to write \bibnamedelima where there's a space in your name for this to work properly; or write \bibnamedelimi if you use initials in the .bib
%% You can specify multiple names, especially if you have changed your name or if you need to highlight multiple authors.
\mynames{Lim/Lian\bibnamedelima Tze,
  Wong/Lian\bibnamedelima Tze,
  Lim/Tracy,
  Lim/L.\bibnamedelimi T.}
%% MAKE SURE THERE IS NO SPACE AFTER THE FINAL NAME IN YOUR \mynames LIST

\nocite{*}

\printbibliography[heading=pubtype,title={\printinfo{\faBook}{Books}},type=book]

\divider

\printbibliography[heading=pubtype,title={\printinfo{\faFile*[regular]}{Journal Articles}},type=article]

\divider

\printbibliography[heading=pubtype,title={\printinfo{\faUsers}{Conference Proceedings}},type=inproceedings]

%% Switch to the right column. This will now automatically move to the second
%% page if the content is too long.
\switchcolumn

\cvsection{My Life Philosophy}

\begin{quote}
``Something smart or heartfelt, preferably in one sentence.''
\end{quote}

\cvsection{Most Proud of}

\cvachievement{\faTrophy}{Fantastic Achievement}{and some details about it}

\divider

\cvachievement{\faHeartbeat}{Another achievement}{more details about it of course}

\divider

\cvachievement{\faHeartbeat}{Another achievement}{more details about it of course}

\cvsection{Strengths}

% Don't overuse these \cvtag boxes — they're just eye-candies and not essential. If something doesn't fit on a single line, it probably works better as part of an itemized list (probably inlined itemized list), or just as a comma-separated list of strengths.

\cvtag{Hard-working}
\cvtag{Eye for detail}\\
\cvtag{Motivator \& Leader}

\divider\smallskip

\cvtag{C++}
\cvtag{Embedded Systems}\\
\cvtag{Statistical Analysis}

\cvsection{Languages}

\cvskill{English}{5}
\divider

\cvskill{Spanish}{4}
\divider

\cvskill{German}{3.5} %% Supports X.5 values.

%% Yeah I didn't spend too much time making all the
%% spacing consistent... sorry. Use \smallskip, \medskip,
%% \bigskip, \vspace etc to make adjustments.
\medskip

\cvsection{Education}

\cvevent{Ph.D.\ in Your Discipline}{Your University}{Sept 2002 -- June 2006}{}
Thesis title: Wonderful Research

\divider

\cvevent{M.Sc.\ in Your Discipline}{Your University}{Sept 2001 -- June 2002}{}

\divider

\cvevent{B.Sc.\ in Your Discipline}{Stanford University}{Sept 1998 -- June 2001}{}

% \divider

\cvsection{Referees}

% \cvref{name}{email}{mailing address}
\cvref{Prof.\ Alpha Beta}{Institute}{[email protected]}
{Address Line 1\\Address Line 2}

\divider

\cvref{Prof.\ Gamma Delta}{Institute}{[email protected]}
{Address Line 1\\Address Line 2}


\end{paracol}


\end{document}
altacv.cls

Download altacv.cls

%%%%%%%%%%%%%%%%%
% This is altacv.cls (v1.7.4, 30 Jul 2025) written by
% LianTze Lim ([email protected]).
%
%% 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)
% - https://github.com/logological Remove redundant hyperref and typos (Apr 2021)

%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{altacv}[2025/07/30 AltaCV v1.7.4, yet another alternative class for a resume/curriculum vitae.]

%% v1.1: Optionally load academicons
%% v1.4: Nope, academicons is unnecessary; fontawesome5 has \faOrcid.
%% v1.7.3: Re backward compatibility we'll now load academicons automatically for \aiOrcid if ≤TL2019 i.e. if \faOrcid undefined
\DeclareOption{academicons}{\ClassWarning{altacv}{academicons option is now obsolete and unnecessary.}}
%% 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\@withhyperfalse
\DeclareOption{withhyper}{\@withhypertrue}
\ProcessOptions\relax

\LoadClass{extarticle}
\RequirePackage{etoolbox}
%% v1.7.4: use etoolbox toggles to fix accsupp ActualText bugs when withhyper enabled
\newtoggle{withhyper}\togglefalse{withhyper}
\if@withhyper\toggletrue{withhyper}\fi
% v1.7.3 Load xcolor early to avoid receiving `hyperref` option from pdfx package
\RequirePackage{xcolor}
%% v1.3.2 Hopefully this helps make the PDF
%% file more 'friendly' with copy-paste etc
\RequirePackage[a-1b]{pdfx}
\RequirePackage{accsupp}
%% v1.7.3 Avoid 'Token not allowed' when \\ used with accsupp
\pdfstringdefDisableCommands{
  \let\\\space
}
\RequirePackage{xparse}
\RequirePackage[margin=2cm]{geometry}
\RequirePackage[fixed]{fontawesome5}%[2020-01-15]

% 1.7.3 For backward compatibility
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2021-11-15}{}{\RequirePackage{scrlfile}}

% v1.7.2 Add simpleicons to provide X icon
% v1.7.3 But first check if the package files exist
\IfFileExists{simpleiconsglyphs-pdftex.tex}{\RequirePackage{simpleicons}}{}

% v1.7.3 Use iftex for easier access to \iftutex
\RequirePackage{iftex}
% ...but still check for backward compatibility
\ifundef{\iftutex}{%
  \newif\iftutex
  \ifxetex\tutextrue
  \else
    \ifluatex\tutextrue\else\tutexfalse\fi
  \fi
}{}
\iftutex 
  \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

\if@raggedtwoe
  \RequirePackage[newcommands]{ragged2e}
\fi

% 1.7.3 For backward compatibility re hooks management
\iftoggle{withhyper}{%
\IfFormatAtLeastTF{2020-10-01}{%
  \AddToHook{begindocument/before}{\hypersetup{hidelinks}\urlstyle{same}}
}{%
  \AtBeginDocument{\hypersetup{hidelinks}\urlstyle{same}}
}}{}

\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}
% Renamed or added v1.7
\newcommand{\cvItemMarker}{{\small\textbullet}}
\newcommand{\cvRatingMarker}{\faCircle}
\let\itemmarker\cvItemMarker      % for backward compatibility
\let\ratingmarker\cvRatingMarker  % for backward compatibility
\newcommand{\cvDateMarker}{\faCalendar[regular]}
\newcommand{\cvLocationMarker}{\faMapMarker}
\newcommand{\locationname}{Location}
\newcommand{\datename}{Date}

\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=\cvItemMarker}
\RequirePackage{graphicx}
\RequirePackage{trimclip}
\RequirePackage{dashrule}
\RequirePackage{multirow,tabularx}
\RequirePackage{changepage}

\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 \utffriendlydetokenize to avoid breaking unicode
%% v1.6: Use accsupp so that when copying/pasting the icon from PDF to a text
%%       file, the icon name is pasted
%% v1.7: Some tweaks/corrections so that accsupp is for icons only
%% v1.7.1: Bugfix to support some symbol commands e.g. academicons commands 
\ExplSyntaxOn
\NewDocumentCommand{\printinfo}{o m m o}{%
  \IfNoValueTF{#4}{%
    \mbox{\textcolor{accent}%
    {\BeginAccSupp{method=escape,ActualText={\IfNoValueTF{#1}{\detokenize{#2}}{#1}:\space}}\normalfont #2\EndAccSupp{}}%
    ~\utffriendlydetokenize{#3}\hspace{2em}}%
  }{% v1.7.4: fix accsupp ActualText bugs when withhyper enabled
    \iftoggle{withhyper}{%
      \mbox{\textcolor{accent}%
      {\BeginAccSupp{method=escape,ActualText={\IfNoValueTF{#1}{\detokenize{#2}}{#1}:\space}}\normalfont #2\EndAccSupp{}}%
      ~%
      \BeginAccSupp{method=escape,ActualText={#4}}%
      \href{#4}{\utffriendlydetokenize{#3}}%
      \EndAccSupp{}%
      \hspace{2em}}%
     }{%
       \ClassWarning{Please specify [withhyper] option to enable hyperlinks. Printing out full hyperlink prefix #1 for now.}%
      \mbox{\textcolor{accent}
      {\BeginAccSupp{method=escape,ActualText={\IfNoValueTF{#1}{\detokenize{#2}}{#1}:\space}}\normalfont #2\EndAccSupp{}}%
      ~{\utffriendlydetokenize{#4}}\hspace{2em}}%
    }%
  }%
}%


%% v1.3: Exploring convenient creation of fields
%% v1.6: Add starred mode to create \printinfo with full URL
\NewDocumentCommand{\NewInfoField}{s m m o}{%
  \IfBooleanF{#1}{
    \IfNoValueF{#4}{\csdef{#2 hyperprefix}{#4}}%
  }
  \csdef{#2 symbol}{#3}
  \IfBooleanTF{#1}
    { \csdef{#2}##1##2{%
        \IfNoValueTF {##2}
          {\printinfo[#2]{\csuse{#2 symbol}}{##1}}%
          {\printinfo[#2]{\csuse{#2 symbol}}{##1}[##2]}%
      }%
    }
    { \csdef{#2}##1{%
        \IfNoValueTF {#4}
          {\printinfo[#2]{\csuse{#2 symbol}}{##1}}%
          {\printinfo[#2]{\csuse{#2 symbol}}{##1}[\csuse{#2 hyperprefix}##1]}%
      }%
    }
}
\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/]
% v1.7.2 twitter.com is now X.com; v1.7.3 but only use the new icon if it's been defined
\ifcsdef{simpleicon@xicon}
 {\NewInfoField{xtwitter}{\raisebox{-0.2ex}{\scalebox{0.95}{\simpleicon{x}}}\,}[https://x.com/]}
 {\let\xtwitter\twitter%
  \pretocmd{\xtwitter}{\ClassWarning{altacv}{You tried to use \string\xtwitter, but the new X icon isn't available. Please ensure you have updated the `simpleicons' package. Falling back to \string\twitter\space icon for now}}{}{}%
 }
\NewInfoField{linkedin}{\faLinkedin}[https://linkedin.com/in/]
\NewInfoField{github}{\faGithub}[https://github.com/]
% v1.7.3 Backward compatibility for ORCiD icon
\ifdef{\faOrcid}{
  \NewInfoField{orcid}{\faOrcid}[https://orcid.org/]
}{\iftutex
    \RequirePackage{academicons}
    \NewInfoField{orcid}{\aiOrcid\space}[https://orcid.org/]
  \else
    \ClassWarning{altacv}{ORCID icon for \string\orcid\space unavailable in pdflatex. Please compile with XeLaTeX or LuaLaTeX; or upgrade your LaTeX distribution and packages}
    \NewInfoField{orcid}{\fbox{O?}\space}[https://orcid.org/]
  \fi
}
\NewInfoField{location}{\cvLocationMarker}

% 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][]{%
  \nointerlineskip\bigskip%  %% bugfix in v1.6.2
  \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
% v1.7: adds accsupp ActualText for location and date markers
\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]%
      {\BeginAccSupp{method=pdfstringdef,ActualText={\datename:}}\cvDateMarker\EndAccSupp{}%
      ~#3}%
    }}%
  \ifstrequal{#4}{}{}{%
    {\small\makebox[0.5\linewidth][l]%
      {\BeginAccSupp{method=pdfstringdef,ActualText={\locationname:}}\cvLocationMarker\EndAccSupp{}%
        ~#4}%
    }}\par
  \medskip\normalsize
}

% v1.7: adds accsupp for the icon as well
\newcommand{\cvachievement}[3]{%
  \begin{tabularx}{\linewidth}{@{}p{2em} @{\hspace{1ex}} >{\raggedright\arraybackslash}X@{}}
  \multirow{2}{*}{\Large\color{accent}\BeginAccSupp{method=escape,ActualText={#1: }}#1\EndAccSupp{}} & \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};
}

% v1.6: Use accsupp so that the actual numeric value is copied/pasted
%       and also support 0.5, 1.5, 2.5, 3.5, 4.5
\newcommand{\cvskill}[2]{%
  \textcolor{emphasis}{\textbf{#1}}\hfill
  \BeginAccSupp{method=plain,ActualText={#2}}
  \foreach \x in {1,...,5}{%
    \ifdimequal{\x pt - #2 pt}{0.5pt}%
    {\clipbox*{0pt -0.25ex {.5\width} {\totalheight}}{\color{accent}\cvRatingMarker}%
     \clipbox*{{.5\width} -0.25ex {\width} {\totalheight}}{\color{body!30}\cvRatingMarker}}
    {\ifdimgreater{\x bp}{#2 bp}{\color{body!30}}{\color{accent}}\cvRatingMarker}%
  }\EndAccSupp{}\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
            % v1.6: Use accsupp so that the numeric number is copied/pasted too
            \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]{\BeginAccSupp{method=pdfstringdef,ActualText={\name: \value}}\name\EndAccSupp{}};
            % 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}}

% v1.5 Move biblatex-related code to separate .cfg file
% so that it's easier to change and customise the style for
% publication lists

% 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}}}

% v1.6.5 But provide for ability to highlight names in publication list
\RequirePackage{pgffor}
\def\my@namelist{}
\newcommand{\mynames}[1]{\def\my@namelist{#1}}
\newtoggle{boldname}
% v1.7.3 For backward compatibility re hooks management
\IfFormatAtLeastTF{2021-11-15}{%
  \AddToHook{package/biblatex/after}{%
    \typeout{OK AddToHook biblatex after works}
    \altacv@makeboldnames
  }%
}{%
  \AfterPackage{biblatex}{%
    \typeout{OK AfterPackage biblatex after works}
    \altacv@makeboldnames
  }%
}

\newcommand{\altacv@makeboldnames}{%
  \renewcommand*{\mkbibnamefamily}[1]{%
    \global\togglefalse{boldname}%
    \foreach \my@fname / \my@gname in \my@namelist {%
      \ifboolexpr{ test {\ifdefstrequal{\namepartfamily}{\my@fname}}
                   and
                   test {\ifdefstrequal{\namepartgiven}{\my@gname}}}
        {\global\toggletrue{boldname}}{}%
    }%
    \iftoggle{boldname}{\textbf{##1}}{##1}%
  }%
  % v1.7.4 will handle "von" "van" etc prefixes and "Jr" etc suffixes too
  \let\mkbibnamegiven\mkbibnamefamily%
  \let\mkbibnameprefix\mkbibnamefamily%
  \let\mkbibnamesuffix\mkbibnamefamily%
}

% 1.7.3 Backward compatibility for hooks management
\IfFormatAtLeastTF{2020-10-01}{%
  \AddToHook{begindocument/before}{%
    \pagestyle{empty}%
    \color{body}%
    \raggedright%
  }
}{%
  \AtBeginDocument{%
    \pagestyle{empty}%
    \color{body}%
    \raggedright%
  }
}
pubs-num.cfg

Download pubs-num.cfg

\usepackage[backend=biber,style=ieee,sorting=ydnt,defernumbers=true]{biblatex}
%% For removing numbering entirely when using a numeric style
\setlength{\bibhang}{1.25em}
\DeclareFieldFormat{labelnumberwidth}{\makebox[\bibhang][l]{\itemmarker}}
\setlength{\biblabelsep}{0pt}
\defbibheading{pubtype}{\cvsubsection{#1}}
\renewcommand{\bibsetup}{\vspace*{-\baselineskip}}
\AtEveryBibitem{%
  \iffieldundef{doi}{}{\clearfield{url}}%
}
pubs-authoryear.cfg

Download pubs-authoryear.cfg

% When using APA6 if you need more author names to be listed
% because you're e.g. the 12th author, add apamaxprtauth=12
\usepackage[backend=biber,style=apa6,sorting=ydnt]{biblatex}
\defbibheading{pubtype}{\cvsubsection{#1}}
\renewcommand{\bibsetup}{\vspace*{-\baselineskip}}
\AtEveryBibitem{%
  \makebox[\bibhang][l]{\itemmarker}%
  \iffieldundef{doi}{}{\clearfield{url}}%
}
\setlength{\bibitemsep}{0.25\baselineskip}
\setlength{\bibhang}{1.25em}
sample.bib

Download sample.bib

@article{lim:else:2011,
  title = {A Study into Fireside Story-Telling},
  journal = {Journal of Carrying On},
  volume = {7},
  author = {Lim, Lian Tze and Someone, Else and Other, Author},
  year = {2008}
}

@article{wong:else:2011,
  title = {A Non-Existant Paper},
  journal = {Journal of Carrying On},
  volume = {12},
  author = {Wong, Lian Tze and Someone, Else},
  year = {2011}
}

@book{else:lim:2010,
  title = {A Fictional Research},
  author = {Someone, Else and Lim, Tracy},
  year = {2010},
  address = {Somewhere, Some Place}
}

@inproceedings{else:lim.init:2010,
  title = {Another Paper Something Something},
  booktitle = {Proceedings of the 72nd AmaZing Conference},
  author = {Someone, Else and Lim, L. T.},
  year = {2013},
  address = {Far Far Away}
}
placeholder-photo.png

Download placeholder-photo.png

LICENSE.md

Download LICENSE.md

This work 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 2005/12/01 or later.

This work has the LPPL maintenance status `maintained'.

The Current Maintainer of this work is LianTze Lim
changes.txt

Download changes.txt

Changes made for LaTeX.to to the AltaCV template

Template page: https://latex.to/templates/github/altacv/
Repository:    https://github.com/liantze/AltaCV
Commit:        91373530c55843533a4de12a29d28896f9b14c0d
Author:        LianTze Lim
License:       LPPL 1.3c, see LICENSE.md

Changes from the original (a/) to this copy (b/):

--- a/sample.tex
+++ b/sample.tex
@@ -1,3 +1,4 @@
+% Modified for the LaTeX.to template catalogue, not the original file. The changes are listed in changes.txt.
 %%%%%%%%%%%%%%%%%
 % This is an sample CV template created using altacv.cls
 % (v1.7.4, 30 July 2025) written by LianTze Lim ([email protected]). Compiles with pdfLaTeX, XeLaTeX and LuaLaTeX.
@@ -98,7 +99,7 @@
 \name{Your Name Here}
 \tagline{Your Position or Tagline Here}
 %% You can add multiple photos on the left or right
-\photoR{2.8cm}{Globe_High}
+\photoR{2.8cm}{placeholder-photo}
 % \photoL{2.5cm}{Yacht_High,Suitcase_High}
 
 \personalinfo{%

Why each change was made, in the order of the diff:

- sample.tex: the first line is added. The LaTeX Project Public License asks a
  changed file to say that it was changed and to point to the list of its
  changes, which is this file.
- sample.tex: the photo line names placeholder-photo.png, a stand-in of our
  own for the Globe_High icon, which is not shipped here. Use it freely, or
  put your photo (a JPG or a PNG) beside sample.tex and use its name in that
  line.

How to use this template

Everything runs in your browser: nothing to install, no login, no compile timeout.

How to add your photo

The gray silhouette in the header is placeholder-photo.png, a stand-in that is yours to replace.

How to continue on a second page

Users ask why \newpage moves only half of the page and how to get a block across the full width of page 2.

How to change the width of the columns

One line splits the page between the two columns, and users ask how to change the ratio and which side a section is on.

How to change the font size

The class is built on extarticle, so one option scales all the text and three lines size the name, the headings and the contact line.

More templates: Awesome CV, billryan resume, sb2nov resume, Deedy Resume, latexcv, Jake's Resume, McDowell CV, moderncv and all templates.