summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/readablecv/ReadableCV.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/readablecv/ReadableCV.cls')
-rw-r--r--macros/latex/contrib/readablecv/ReadableCV.cls560
1 files changed, 560 insertions, 0 deletions
diff --git a/macros/latex/contrib/readablecv/ReadableCV.cls b/macros/latex/contrib/readablecv/ReadableCV.cls
new file mode 100644
index 0000000000..db6197592d
--- /dev/null
+++ b/macros/latex/contrib/readablecv/ReadableCV.cls
@@ -0,0 +1,560 @@
+%% ReadableCV
+%% Copyright 2020 Philip Stone
+%
+% 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 Philip Stone
+%
+% This work consists of the files ReadableCV.cls and ReadableCV.tex
+
+\def\ClassDate{2020/05/14}
+\def\ClassVersion{2.0}
+\ProvidesClass{ReadableCV}[\ClassDate ReadableCV \ClassVersion class written by Philip Stone]
+
+\LoadClass[10pt, a4paper, onecolumn, oneside, notitlepage]{article}
+\NeedsTeXFormat{LaTeX2e}
+
+%set up PDF metadata
+\usepackage{hyperref}
+
+% Set up paper size and language
+\RequirePackage[a4paper, total={7in, 10in}]{geometry}
+\RequirePackage{titlesec}
+\RequirePackage[nodayofweek]{datetime}
+
+% Allow use of multiple columns
+\RequirePackage{multicol}
+
+% Support for graphics, fonts and colour
+\RequirePackage{marvosym}
+\RequirePackage{graphicx}
+\RequirePackage[x11names]{xcolor}
+\RequirePackage[sfdefault,thin]{roboto}
+\RequirePackage[T1]{fontenc}
+
+\pagestyle{empty}
+\setlength{\parindent}{0em}
+
+% Allow use of if statements
+\RequirePackage{etoolbox}
+\RequirePackage{xstring}
+
+
+% Set up whether sections align to the left or right
+\def\SectionAlignment{flushleft}
+
+\newcommand{\setSectionAlignment}[1]{
+ \IfEqCase{#1}{
+ {left}{\def\SectionAlignment{flushleft}}
+ {right}{\def\SectionAlignment{flushright}}
+ }
+}
+
+% Displays section title or heading
+\newcommand{\newHeading}[2]{
+ \begin{\SectionAlignment}
+% \vspace{\baselineskip}
+ \bigskip
+ \textcolor{\HeadingColour}{\textbf{\Large{#1}}}
+ \smallskip
+ \hrule
+% \vspace{\baselineskip}
+ \end{\SectionAlignment}
+}
+
+% Define page colour
+% Uses X11names
+\def\PageColour{white}
+\newcommand{\setPageColour}[1]{
+ \def\PageColour{#1}
+ \pagecolor{\PageColour}
+}
+
+% Define left or right aligned header
+% Can be either 'left' or 'right'
+\def\HeaderAlignment{flushright}
+% Create command to change header alignment
+\newcommand{\setHeaderAlignment}[1]{
+ \IfEqCase{#1}{
+ {left}{\def\HeaderAlignment{flushleft}}
+ {right}{\def\HeaderAlignment{flushright}}
+ }
+}
+
+% Define default colour of headings
+% Uses X11names
+\def\HeadingColour{SlateGray3}
+% Create command to change header colour
+\newcommand{\setHeadingColours}[1]{
+ \def\HeadingColour{#1}
+}
+
+\def\rcvname{}
+\def\rcvjobtitle{}
+\def\rcvmobileno{}
+\def\rcvhomeno{}
+\def\rcvemailaddr{}
+\def\rcvwebaddr{}
+
+\newcommand{\HeaderText}{
+
+ \begin{minipage}{1.0\linewidth}
+ \begin{\HeaderAlignment}
+ \textcolor{\HeadingColour}{\textbf{\Huge{\rcvname}}}\\
+ \vspace{-0.3em}
+ \LARGE{\rcvjobtitle}\\
+
+ \smallskip
+ \ifdefempty{\rcvmobileno}%
+ {
+ %if mobile number not defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ % mobile and home numbers not defined
+ }
+ {
+ %mobile number not defined, home number is
+ \normalsize{\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}
+ }
+ }
+ {
+ %if mobile number defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ %if mobile number defined, home number not defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\\}
+ }
+ {
+ %if home number and mobile number defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\ {\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}}
+ }
+ }
+
+ \ifdefempty{\rcvemailaddr}%
+ {
+ \ifdefempty{\rcvwebaddr}%
+ {
+ % email and web not defined
+ }
+ {
+ %email not defined, web is
+ \normalsize{\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}
+ }
+ }
+ {
+ %if email defined
+ \ifdefempty{\rcvwebaddr}%
+ {
+ %if email defined, web not defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\\}
+ }
+ {
+ %if email and web defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\ {\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}}
+ }
+ }
+ \end{\HeaderAlignment}
+ \end{minipage}
+}
+
+\newcommand{\HeaderRightContact}{
+ % Name and jobtitle on the left. Contact details on the right.
+
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushleft}
+ \textcolor{\HeadingColour}{\textbf{\Huge{\rcvname}}}\\
+ \vspace{-0.3em}
+ \LARGE{\rcvjobtitle}\\
+ \end{flushleft}
+ \end{minipage}
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushright}
+ \ifdefempty{\rcvmobileno}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\\}}
+ \ifdefempty{\rcvhomeno}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}}
+ \ifdefempty{\rcvemailaddr}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\\}}
+ \ifdefempty{\rcvwebaddr}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}}
+ \end{flushright}
+ \end{minipage}
+}
+
+\newcommand{\HeaderLeftContact}{
+ % Name and jobtitle on the right. Contact details on the left.
+
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushleft}
+ \ifdefempty{\rcvmobileno}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\\}}
+ \ifdefempty{\rcvhomeno}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}}
+ \ifdefempty{\rcvemailaddr}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\\}}
+ \ifdefempty{\rcvwebaddr}
+ {}
+ {\normalsize{\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}}
+ \end{flushleft}
+ \end{minipage}
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushright}
+ \textcolor{\HeadingColour}{\textbf{\Huge{\rcvname}}}\\
+ \vspace{-0.3em}
+ \LARGE{\rcvjobtitle}\\
+ \end{flushright}
+ \end{minipage}
+
+}
+
+\newcommand{\HeaderTextOppo}{
+ \IfEqCase{\HeaderAlignment}{
+ {flushleft}{\HeaderRightContact}
+ {flushright}{\HeaderLeftContact}
+ }
+}
+
+\newcommand{\HeaderLeftImage}{
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushleft}
+ \includegraphics[width=2.5cm,height=2.5cm,keepaspectratio]{\rcvimageloc}
+ \end{flushleft}
+ \end{minipage}
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushright}
+ \textcolor{\HeadingColour}{\textbf{\Huge{\rcvname}}}\\
+ \vspace{-0.3em}
+ \LARGE{\rcvjobtitle}\\
+
+ \smallskip
+ \ifdefempty{\rcvmobileno}%
+ {
+ %if mobile number not defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ % mobile and home numbers not defined
+ }
+ {
+ %mobile number not defined, home number is
+ \normalsize{\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}
+ }
+ }
+ {
+ %if mobile number defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ %if mobile number defined, home number not defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\\}
+ }
+ {
+ %if home number and mobile number defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\ {\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}}
+ }
+ }
+
+ \ifdefempty{\rcvemailaddr}%
+ {
+ \ifdefempty{\rcvwebaddr}%
+ {
+ % email and web not defined
+ }
+ {
+ %email not defined, web is
+ \normalsize{\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}
+ }
+ }
+ {
+ %if email defined
+ \ifdefempty{\rcvwebaddr}%
+ {
+ %if email defined, web not defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\\}
+ }
+ {
+ %if email and web defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\ {\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}}
+ }
+ }
+ \end{flushright}
+ \end{minipage}
+}
+
+\newcommand{\HeaderRightImage}{
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushleft}
+ \textcolor{\HeadingColour}{\textbf{\Huge{\rcvname}}}\\
+ \vspace{-0.3em}
+ \LARGE{\rcvjobtitle}\\
+
+ \smallskip
+ \ifdefempty{\rcvmobileno}%
+ {
+ %if mobile number not defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ % mobile and home numbers not defined
+ }
+ {
+ %mobile number not defined, home number is
+ \normalsize{\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}
+ }
+ }
+ {
+ %if mobile number defined
+ \ifdefempty{\rcvhomeno}%
+ {
+ %if mobile number defined, home number not defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\\}
+ }
+ {
+ %if home number and mobile number defined
+ \normalsize{\textcolor{\HeadingColour}{\Mobilefone}\ \rcvmobileno\ {\textcolor{\HeadingColour}{\Telefon}\ \rcvhomeno\\}}
+ }
+ }
+
+ \ifdefempty{\rcvemailaddr}%
+ {
+ \ifdefempty{\rcvwebaddr}%
+ {
+ % email and web not defined
+ }
+ {
+ %email not defined, web is
+ \normalsize{\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}
+ }
+ }
+ {
+ %if email defined
+ \ifdefempty{\rcvwebaddr}%
+ {
+ %if email defined, web not defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\\}
+ }
+ {
+ %if email and web defined
+ \normalsize{\textcolor{\HeadingColour}{\Letter}\ \rcvemailaddr\ {\textcolor{\HeadingColour}{\Mundus}\ \rcvwebaddr\\}}
+ }
+ }
+ \end{flushleft}
+ \end{minipage}
+ \begin{minipage}{0.5\linewidth}
+ \begin{flushright}
+ \includegraphics[width=2.5cm,height=2.5cm,keepaspectratio]{\rcvimageloc}
+ \end{flushright}
+ \end{minipage}
+}
+
+% Define image use
+\newtoggle{useImage}
+\def\rcvimageloc{}
+
+% Set up use of image
+\newcommand{\setImage}[1]{
+ \IfEq {#1}{}{
+ \togglefalse{useImage}
+ \def\rcvimageloc{}
+ }
+ {
+ \toggletrue{useImage}
+ \def\rcvimageloc{#1}
+ }
+}
+
+\def\contactloc{below}
+
+\newcommand{\setContactLocation}[1]{
+ \IfEqCase{#1}{
+ {below}{\def\contactloc{below}}
+ {opposite}{\def\contactloc{opposite}}
+ }
+}
+
+\newcommand{\setYourName}[1]{\def\rcvname{#1}}
+\newcommand{\setYourJobTitle}[1]{\def\rcvjobtitle{#1}}
+\newcommand{\setYourMobileNo}[1]{\def\rcvmobileno{#1}}
+\newcommand{\setYourHomeNo}[1]{\def\rcvhomeno{#1}}
+\newcommand{\setYourEmailAddr}[1]{\def\rcvemailaddr{#1}}
+\newcommand{\setYourWebAddr}[1]{\def\rcvwebaddr{#1}}
+
+% Display header
+\newcommand{\showHeader}{
+
+ \hypersetup
+ {
+ pdftitle = {CV for \rcvname},
+ pdfauthor = {\rcvname},
+ pdfsubject = {CV for \rcvname},
+ pdfkeywords = {CV, curriculum, vitae, resume, \rcvname, \rcvjobtitle},
+ pdfproducer = {ReadableCV \ClassVersion\ template written by Philip Stone}
+ }
+
+ \iftoggle{useImage}%
+ {
+ % Image present
+ \IfEqCase{\HeaderAlignment}{
+ {flushleft}{\HeaderRightImage}
+ {flushright}{\HeaderLeftImage}
+ }
+ }
+ {
+ % Image not present
+ \IfEqCase{\contactloc}{
+ {below}{\HeaderText}
+ {opposite}{\HeaderTextOppo}
+ }
+ }
+
+ \vspace{\baselineskip}
+}
+
+\newcommand{\addSkills}[9]{
+ \def\sone{#1}
+ \def\stwo{#2}
+ \def\sthree{#3}
+ \def\sfour{#4}
+ \def\sfive{#5}
+ \def\ssix{#6}
+ \def\sseven{#7}
+ \def\seight{#8}
+ \def\snine{#9}
+
+ \begin{multicols}{3}
+ \begin{itemize}
+ \ifdefempty{\sone}{}{\item \sone}
+ \ifdefempty{\stwo}{}{\item \stwo}
+ \ifdefempty{\sthree}{}{\item \sthree}
+ \ifdefempty{\sfour}{}{\item \sfour}
+ \ifdefempty{\sfive}{}{\item \sfive}
+ \ifdefempty{\ssix}{}{\item \ssix}
+ \ifdefempty{\sseven}{}{\item \sseven}
+ \ifdefempty{\seight}{}{\item \seight}
+ \ifdefempty{\snine}{}{\item \snine}
+ \end{itemize}
+ \end{multicols}
+}
+
+% Set up whether job title or company printed first
+\newtoggle{jobfirst}
+\toggletrue{jobfirst}
+
+\newcommand{\setJobCompanyOrder}[1]{
+ \IfEqCase{#1}{
+ {JobFirst}{\toggletrue{jobfirst}}
+ {CompanyFirst}{\togglefalse{jobfirst}}
+ }
+}
+
+\newcommand{\newRole}[4]{
+ % This displays the whole of the role information
+ % including dates [1], job title [2],
+ % company name [3] and role summary [4]
+
+ \iftoggle{jobfirst}{
+ % Display job before company
+ \begin{tabular}{@{}p{3cm} l}
+ \textbf{#1} & \textbf{#2}\\
+ & \textbf{#3}\\
+ \end{tabular}
+ }
+ {
+ % Display company before job
+ \begin{tabular}{@{}p{3cm} l}
+ \textbf{#1} & \textbf{#3}\\
+ & \textbf{#2}\\
+ \end{tabular}
+ }
+
+ \vspace{\baselineskip}
+ \textit{Role outline} \par \par \hspace{2em}#4 \bigskip
+}
+
+\newcommand{\roleAchievements}[5]{
+ % Adds up to five achievements in an itemized list
+ \textit{Key achievements} \par \par
+
+ \def\aone{#1}
+ \def\atwo{#2}
+ \def\athree{#3}
+ \def\afour{#4}
+ \def\afive{#5}
+
+ \begin{itemize}
+ \ifdefempty{\aone}{}{\item \aone}
+ \ifdefempty{\atwo}{}{\item \atwo}
+ \ifdefempty{\athree}{}{\item \athree}
+ \ifdefempty{\afour}{}{\item \afour}
+ \ifdefempty{\afive}{}{\item \afive}
+ \end{itemize}
+
+ \bigskip
+}
+
+\newcommand{\newCourse}[4]{
+% Allows the display of a new course. Arguments are
+% [1] date, [2] course title, [3] awarding body.
+% If JobFirst set then course title will be first
+% If CompanyFirst set then awarding body will be first
+
+ \iftoggle{jobfirst}{
+ % Display job before company
+ \begin{tabular}{@{}p{3cm} l}
+ \textbf{#1} & \textbf{#2} (#3)\\
+ \end{tabular}
+}
+{
+ % Display company before job
+ \begin{tabular}{@{}p{3cm} l}
+ \textbf{#1} & \textbf{#3} (#2)\\
+ \end{tabular}
+}
+}
+
+% Recipients address
+\def\recpname{}
+\def\recpjobtitle{}
+\def\recproad{}
+\def\recptown{}
+\def\recpcity{}
+\def\recppostcode{}
+
+\newcommand{\setRecpName}[1]{\def\recpname{#1}}
+\newcommand{\setRecpJobTitle}[1]{\def\recpjobtitle{#1}}
+\newcommand{\setRecpRoad}[1]{\def\recproad{#1}}
+\newcommand{\setRecpTown}[1]{\def\recptown{#1}}
+\newcommand{\setRecpCity}[1]{\def\recpcity{#1}}
+\newcommand{\setRecpPostcode}[1]{\def\recppostcode{#1}}
+
+\newcommand{\makeLetter}{
+ \begin{flushright}
+ \today
+ \end{flushright}
+
+ \bigskip \bigskip
+
+ \recpname \\
+ \ifdefempty{\recpjobtitle}{}{\recpjobtitle \\}
+ \recproad \\ \recptown \\ \recpcity \\ \recppostcode
+
+ \bigskip
+
+}
+
+% Finish letter image of signature and your name
+\newcommand{\closeletter}[1]{%
+ \includegraphics{#1}\\ \bigskip \rcvname
+} \ No newline at end of file