- Created a CV template (My-CV-Briefvorlage.tex) with sections for contact information, skills, work history, education, and publications. - Added a standard letter template (Standard-Briefumschlag.tex) for formal correspondence. - Introduced a simple letter template (Standard-Briefvorlage-Schlicht.tex) with customizable sender information. - Developed a detailed letter template (Standard-Briefvorlage.tex) with personal data fields and a structured layout. - Included a class option file (brief-absender.lco) for customizing sender details in letters. - Added a package (tkzexample.sty) for enhanced code examples and graphics in LaTeX documents.
602 lines
20 KiB
TeX
602 lines
20 KiB
TeX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% my-resume.cls
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% A class to do stuff.
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% CLASS OPTIONS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesClass{my-resume}[2020/11/17 my-resume v0.1, my own resume/CV class.]
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% CLASS OPTIONS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% option to have a single sided document, i.e. the highlight bar is always left
|
|
% or have a two sided document where the highlight bar is alternating, i.e. always on the same edge of the paper
|
|
\RequirePackage{ifthen}
|
|
\newboolean{@singleordouble}
|
|
\setboolean{@singleordouble}{true}
|
|
\DeclareOption{singlesided}{\setboolean{@singleordouble}{true}}
|
|
\DeclareOption{doublesided}{\setboolean{@singleordouble}{false}}
|
|
|
|
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
|
\ProcessOptions*
|
|
|
|
\ifthenelse{\boolean{@singleordouble}}
|
|
{\PassOptionsToClass{oneside}{scrartcl}}
|
|
{\PassOptionsToClass{twoside}{scrartcl}}
|
|
|
|
\LoadClass{scrartcl}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% REQUIRED PACKAGES
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% \RequirePackage[utf8]{inputenc}
|
|
\RequirePackage[T1]{fontenc}
|
|
\RequirePackage{tikz}
|
|
\usetikzlibrary{arrows}
|
|
\RequirePackage[skins]{tcolorbox} % somehow required for tikz to work at all
|
|
\RequirePackage{graphicx}
|
|
\RequirePackage{xcolor}
|
|
\RequirePackage{fontawesome}
|
|
\RequirePackage{academicons}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% FILTER IRRELEVANT WARNINGS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\RequirePackage{silence}
|
|
|
|
% The page header is deliberately disabled in my-resume, so the warning by scrlayer-scrpage is invalid.
|
|
\WarningFilter{scrlayer-scrpage}{Very small head height detected!}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% DEFINE GEOMETRY
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newlength\highlightwidth
|
|
\newlength\headerheight
|
|
\newlength\marginleft
|
|
\newlength\marginright
|
|
\newlength\margintop
|
|
\newlength\marginbottom
|
|
|
|
% default sizes, margins, ...
|
|
\setlength\highlightwidth{8cm}
|
|
\setlength\headerheight{6cm}
|
|
\setlength\marginleft{1cm}
|
|
\setlength\marginright{\marginleft}
|
|
\setlength\margintop{1cm}
|
|
\setlength\marginbottom{1cm}
|
|
|
|
\RequirePackage[bindingoffset=0cm,nomarginpar,noheadfoot]{geometry}
|
|
\geometry{left=\marginleft,right=\marginright,top=\margintop,bottom=\marginbottom}
|
|
|
|
% \setlength{\voffset}{\dimexpr -1in+\margintop}
|
|
% \setlength{\topmargin}{0cm}
|
|
|
|
% minipage has an annoying af indent that must be removed
|
|
\setlength{\parindent}{0pt}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% COLORS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\RequirePackage{xcolor}
|
|
|
|
% Gray-scale colors
|
|
\definecolor{white}{HTML}{FFFFFF}
|
|
\definecolor{black}{HTML}{000000}
|
|
\definecolor{darkgray}{HTML}{333333}
|
|
\definecolor{mediumgray}{HTML}{444444}
|
|
\definecolor{gray}{HTML}{5D5D5D}
|
|
% Basic colors
|
|
\definecolor{green}{HTML}{C2E15F}
|
|
\definecolor{orange}{HTML}{FDA333}
|
|
\definecolor{purple}{HTML}{D3A4F9}
|
|
\definecolor{red}{HTML}{FB4485}
|
|
\definecolor{blue}{HTML}{6CE0F1}
|
|
% Text colors
|
|
\definecolor{darktext}{HTML}{414141}
|
|
\colorlet{text}{darkgray}
|
|
\colorlet{graytext}{gray}
|
|
% Awesome colors
|
|
\definecolor{awesome-emerald}{HTML}{00A388}
|
|
\definecolor{awesome-skyblue}{HTML}{0395DE}
|
|
\definecolor{awesome-red}{HTML}{DC3522}
|
|
\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}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% COLORED BARS
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\RequirePackage{xpatch}
|
|
\RequirePackage{scrlayer-scrpage}
|
|
|
|
% declare new page style using layers
|
|
\DeclareNewPageStyleByLayers{headerhighlightmain}{%
|
|
highlightbar.even,%
|
|
highlightbar.odd,%
|
|
header.bg
|
|
}
|
|
\DeclareNewPageStyleByLayers{highlightmain}{%
|
|
highlightbar.even,%
|
|
highlightbar.odd
|
|
}
|
|
\DeclareNewPageStyleByLayers{headermain}{%
|
|
header.bg
|
|
}
|
|
|
|
% define the layer for the highlight bar on odd pages
|
|
\DeclareNewLayer[
|
|
background,
|
|
oddpage,
|
|
innermargin,
|
|
width=\highlightwidth,
|
|
contents={\color{highlightbarcolor}\rule{\layerwidth}{\layerheight}}
|
|
]{highlightbar.odd}
|
|
|
|
% clone highlight bar form odd pages to even pages
|
|
% on same side for digital format
|
|
\newcommand*\highlightbarsingle{%
|
|
\DeclareNewLayer[
|
|
background,
|
|
evenpage,
|
|
outermargin,
|
|
width=\highlightwidth,
|
|
contents={\color{highlightbarcolor}\rule{\layerwidth}{\layerheight}}
|
|
]{highlightbar.even}
|
|
}
|
|
|
|
% clone highlight bar from odd pages to even pages
|
|
% on opposite sides for prints
|
|
\newcommand*\highlightbardouble{%
|
|
\DeclareNewLayer[
|
|
clone=highlightbar.odd,
|
|
evenpage,
|
|
align=r,
|
|
hoffset=\paperwidth
|
|
]{highlightbar.even}
|
|
}
|
|
|
|
% use the correct version of the highlight bar on even pages
|
|
% single for single, double for double
|
|
\ifthenelse{
|
|
\boolean{@singleordouble}
|
|
}{%
|
|
\DeclareNewLayer[
|
|
background,
|
|
evenpage,
|
|
outermargin,
|
|
width=\highlightwidth,
|
|
contents={\color{highlightbarcolor}\rule{\layerwidth}{\layerheight}}
|
|
]{highlightbar.even}
|
|
}{%
|
|
\DeclareNewLayer[
|
|
clone=highlightbar.odd,
|
|
evenpage,
|
|
align=r,
|
|
hoffset=\paperwidth
|
|
]{highlightbar.even}
|
|
}
|
|
|
|
% define the layer for the header
|
|
\DeclareNewLayer[
|
|
background,
|
|
topmargin,
|
|
addheight=\headerheight,
|
|
contents={\color{headerbarcolor}\rule{\layerwidth}{\layerheight}}
|
|
]{header.bg}
|
|
|
|
% % add the layers to page style plain
|
|
% \ForEachLayerOfPageStyle*{headerhighlightmain}{%
|
|
% \AddLayersToPageStyle{plain.scrheadings}{#1}%
|
|
% }
|
|
|
|
% remove anything that might be there (page number) from header and footer
|
|
\lehead[]{}
|
|
\cehead[]{}
|
|
\rehead[]{}
|
|
\lohead[]{}
|
|
\cohead[]{}
|
|
\rohead[]{}
|
|
\lefoot[]{}
|
|
\cefoot[]{}
|
|
\refoot[]{}
|
|
\lofoot[]{}
|
|
\cofoot[]{}
|
|
\rofoot[]{}
|
|
|
|
% convenience functions to enable/disable header or highlightbar
|
|
% TBD
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% HEADER
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% variables for name, tag line and photo setup
|
|
\newcommand{\name}[1]{\def\@name{#1}}
|
|
\newcommand{\tagline}[1]{\def\@tagline{#1}}
|
|
\newcommand{\photo}[3][]{\def\@photo{#2}\def\@photodiameter{#3}\def\@photoformat{#1}}
|
|
|
|
% try to align the top of the written out name with the top of the photo
|
|
% it is impossible to get the actual height of a line to determine the offset between line top and charachter top
|
|
% therefore use a bad workaround by setting the line height to 1.5 times the character height
|
|
\newlength{\@namefontheight}
|
|
\newlength{\@namelineheight}
|
|
\settoheight{\@namefontheight}{\Huge\bfseries\MakeUppercase{A}}
|
|
\setlength\@namelineheight{1.5\@namefontheight}
|
|
|
|
% assemble the header
|
|
\newcommand{\makeheader}{% header bar is a minipage
|
|
\begin{minipage}[t][\headerheight]{\textwidth}%
|
|
% \vspace{-1em}
|
|
\vspace{\dimexpr \@namefontheight-\@namelineheight} % align top of name and photo
|
|
% create two minipages for header text and photo if photo is given
|
|
\ifdef{\@photodiameter}{
|
|
\begin{minipage}[t]{\dimexpr \textwidth-\@photodiameter} % to top align name and photo add [t] here
|
|
\vspace{0cm}%
|
|
}{}
|
|
% print the header text
|
|
\begin{minipage}[t][2em]{\linewidth}
|
|
{\Huge\bfseries\color{headerfontcolor}\MakeUppercase{\@name}\par}
|
|
\end{minipage}%
|
|
\vfill%
|
|
\begin{minipage}[b][\dimexpr \headerheight-2em-\marginbottom]{\linewidth}%
|
|
{\large\bfseries\color{headerfontcolor}\@tagline\par}
|
|
\end{minipage}%
|
|
% finish the minipages for text and photo if photo is given
|
|
\ifdef{\@photodiameter}{%
|
|
\end{minipage}\hfil%
|
|
\begin{minipage}[t]{\@photodiameter} % to top align name and photo add [t] here
|
|
\vspace{0cm}
|
|
% format as square or round
|
|
\ifthenelse{\equal{\@photoformat}{square}}{%
|
|
\includegraphics[width=\linewidth]{\@photo}%
|
|
}{%
|
|
\tikz\path[fill overzoom image={\@photo}]circle[radius=0.5\linewidth];
|
|
}
|
|
\end{minipage}%
|
|
}{}
|
|
\end{minipage}%
|
|
}
|
|
|
|
\newcommand{\emptyheader}{%
|
|
\vspace*{\dimexpr \headerheight+0.5em}
|
|
}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% BODY
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% contact info
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\infofield}[2]{\mbox{\makebox[5mm]{\textcolor{accent}{\normalsize #1}}\hspace{0.5em}#2}\vspace{0.2em}\newline}
|
|
\newcommand{\email}[1]{\infofield{\faEnvelope}{\href{mailto:#1}{#1}}}
|
|
\newcommand{\address}[1]{\infofield{\faAt}{#1}}
|
|
\newcommand{\location}[1]{\infofield{\faMapMarker}{#1}}
|
|
\newcommand{\phone}[1]{\infofield{\faPhone}{#1}}
|
|
\newcommand{\homepage}[2]{\infofield{\faHome}{\href{#2}{#1}}}
|
|
\newcommand{\linkedin}[2]{\infofield{\faLinkedin}{\href{#2}{#1}}}
|
|
\newcommand{\github}[2]{\infofield{\faGithub}{\href{#2}{#1}}}
|
|
\newcommand{\orcid}[2]{\infofield{\aiOrcid}{\href{#2}{#1}}}
|
|
\newcommand{\ads}[2]{\infofield{\aiADS}{\href{#2}{#1}}}
|
|
|
|
|
|
% highlight bar
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\highlightbar}[1]{%
|
|
\def\@highlightbar{%
|
|
\begin{minipage}[t]{\dimexpr \highlightwidth-\marginleft-\marginright}%
|
|
#1%
|
|
\end{minipage}%
|
|
}
|
|
}
|
|
|
|
% main bar
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\mainbar}[1]{%
|
|
\def\@mainbar{%
|
|
\begin{minipage}[t]{\dimexpr \textwidth-\highlightwidth}%
|
|
#1%
|
|
\end{minipage}%
|
|
}
|
|
}
|
|
|
|
% make body with highlight bar and main bar
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\newcommand{\makebody}{%
|
|
\ifthenelse{\boolean{@singleordouble}}
|
|
{% if single layout, the highlight bar is always left
|
|
\@highlightbar
|
|
\hspace{\dimexpr \marginleft+\marginright}%
|
|
\@mainbar
|
|
}{% if double layout, the highlight bar alternates
|
|
\ifthispageodd{% if the page is odd, the highlight bar is on the left (as is for single layout)
|
|
\@highlightbar
|
|
\hspace{\dimexpr \marginleft+\marginright}%
|
|
\@mainbar
|
|
}{% if the page is even, the highlight bar is on the right
|
|
\@mainbar
|
|
\hspace{\dimexpr \marginleft+\marginright}%
|
|
\@highlightbar
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% SECTIONS, SUBSECTIONS, AND MORE
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% redefine section in caps, bold and with rule below
|
|
\renewcommand{\section}[2][]{%
|
|
\bigskip%
|
|
% \ifstrequal{#1}{}{}{\marginpar{\vspace*{\dimexpr 1pt-\baselineskip}\raggedright\input{#1}}}%
|
|
\ifstrequal{#1}{}{}{\large \makebox[5mm][c]{#1}\hspace{0.5em}}
|
|
{\color{heading}\Large\bfseries\MakeUppercase{#2}}\\[-1ex]%
|
|
{\color{heading}\rule{\linewidth}{1.0pt}\par}\smallskip
|
|
}
|
|
|
|
% redefine subsection as bold
|
|
\renewcommand{\subsection}[1]{%
|
|
\smallskip%
|
|
{\color{emphasis}\large\bfseries{#1}\par}\medskip
|
|
}
|
|
|
|
% format job/school list
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% set length of date/place column versus position column in fraction of linewidth before linewidth gets redefined in minipages
|
|
\newlength{\jobdateplacelength}
|
|
\newlength{\jobpositionlength}
|
|
\setlength{\jobdateplacelength}{0.4\linewidth}
|
|
\setlength{\jobpositionlength}{0.6\linewidth}
|
|
\newcommand{\job}[4]{%
|
|
\begin{minipage}[t]{\jobdateplacelength}% minipage for left column with date/place
|
|
\footnotesize
|
|
\begin{minipage}[t]{3mm}% wrap marker in minipage to allow multi-line dates
|
|
\makebox[3mm][c]{\faCalendar}
|
|
\end{minipage}%
|
|
\hspace{0.5em}%
|
|
\begin{minipage}[t]{\dimexpr \jobdateplacelength-3mm-0.5em}% wrap date in minipage to allow multi-line dates
|
|
#1
|
|
\end{minipage}%
|
|
\par
|
|
\vspace{0.1em}
|
|
\begin{minipage}[t]{3mm}% wrap marker in minipage to allow multi-line places
|
|
\makebox[3mm][c]{\faMapMarker}
|
|
\end{minipage}%
|
|
\hspace{0.5em}%
|
|
\begin{minipage}[t]{\dimexpr \jobdateplacelength-3mm-0.5em}% wrap place in minipage to allow multi-line places
|
|
#2
|
|
\end{minipage}%
|
|
\end{minipage}%
|
|
\begin{minipage}[t]{\jobpositionlength}% minipage for position
|
|
{\large \color{emphasis} #3}
|
|
\end{minipage}%
|
|
\ifstrequal{#4}{}{}{\par \vspace{0.1em} \footnotesize #4}
|
|
\par\normalsize
|
|
\vspace{0.5em}
|
|
}
|
|
|
|
|
|
% skill with 5 dot bar chart
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\skill}[2]{%
|
|
\textcolor{emphasis}{\textbf{#1}}\hfill
|
|
\foreach \x in {1,...,5}{%
|
|
\space{\ifnumgreater{\x}{#2}{\color{gray}}{\color{accent}}\faCircle}}\par%
|
|
}
|
|
|
|
% skill without any charts
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\simpleskill}[1]{%
|
|
\textcolor{emphasis}{\textbf{#1}}\par%
|
|
}
|
|
|
|
% sectioning of skills
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\skillsection}[1]{%
|
|
\textit{\color{accent}#1}\par
|
|
}
|
|
|
|
% tag (framed word or phrase)
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% adapted from AltaCV: https://github.com/liantze/AltaCV
|
|
\newcommand{\tag}[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};
|
|
}
|
|
|
|
% wheel chart
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% adapted from AltaCV: https://github.com/liantze/AltaCV
|
|
\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
|
|
}
|
|
|
|
% publication
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand*{\ADS}[1]{\textcolor{awesome-skyblue}{\href{#1}{ADS}}}
|
|
\newcommand*{\arXiv}[1]{\textcolor{awesome-skyblue}{\href{#1}{arXiv}}}
|
|
|
|
\newlength{\pubdatelength}
|
|
\newlength{\pubjournallength}
|
|
\newlength{\publinklength}
|
|
|
|
% Spacings work erratically. Setting a highlight bar or not redefines \linewidth in a weird way which breaks the spacing and introduces line breaks. I have no idea what exactly causes this problem.
|
|
|
|
% helper function to set spacings that work empirically
|
|
\newcommand{\pubdefaultspacing}{%
|
|
\setlength{\pubdatelength}{0.15\linewidth}
|
|
\setlength{\pubjournallength}{0.65\linewidth}
|
|
\setlength{\publinklength}{0.20\linewidth}
|
|
}
|
|
|
|
% helper function to force the publication to use the full width in normal page styles without highlight bar or header
|
|
\newcommand{\pubforcefullwidth}{%
|
|
\setlength{\pubdatelength}{0.1\textwidth}
|
|
\setlength{\pubjournallength}{0.8\textwidth}
|
|
\setlength{\publinklength}{0.1\textwidth}
|
|
}
|
|
|
|
% \pubforcefullwidth
|
|
\pubdefaultspacing
|
|
|
|
\newcommand{\publication}[5]{%
|
|
{\normalsize \color{emphasis}#1\par}
|
|
\vspace{0.1em}%
|
|
\begin{minipage}[t]{3mm}%
|
|
\makebox[3mm][c]{\footnotesize \faGroup}
|
|
\end{minipage}%
|
|
\hspace{0.5em}%
|
|
\begin{minipage}[t]{\dimexpr \linewidth-3mm-0.5em}%
|
|
{\footnotesize #2\par}
|
|
\end{minipage}%
|
|
\par%
|
|
\vspace{0.25em}%
|
|
\ifstrequal{#4}{}{%
|
|
\begin{minipage}[t]{\dimexpr \pubdatelength+\pubjournallength-1.0em}%
|
|
\footnotesize \makebox[3mm][c]{\faCalendar} \hspace{0.25em} #3
|
|
\end{minipage}%
|
|
}{%
|
|
\begin{minipage}[t]{\dimexpr \pubdatelength-1.0em}%
|
|
\footnotesize \makebox[3mm][c]{\faCalendar} \hspace{0.25em} #3
|
|
\end{minipage}%
|
|
}%
|
|
\hspace{1.0em}
|
|
\begin{minipage}[t]{\dimexpr \pubjournallength-1.0em}%
|
|
\ifstrequal{#4}{}{}{%
|
|
\begin{minipage}[t]{3mm}%
|
|
\makebox[3mm][c]{\footnotesize \faBook}
|
|
\end{minipage}%
|
|
\hspace{0.5em}%
|
|
\begin{minipage}[t]{\dimexpr \linewidth-3mm-0.25em}%
|
|
{\footnotesize #4\par}
|
|
\end{minipage}%
|
|
}%
|
|
\end{minipage}%
|
|
\hspace{1.0em}
|
|
\begin{minipage}[t]{\publinklength}%
|
|
\ifstrequal{#5}{}{}{%
|
|
\footnotesize \makebox[3mm][c]{\faChain} \hspace{0.25em} #5\par
|
|
}%
|
|
\end{minipage}%
|
|
\par\normalsize
|
|
\vspace{1.0em}
|
|
}
|
|
|
|
% achievement
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\achievement}[1]{%
|
|
\begin{minipage}[t]{3mm}%
|
|
\makebox[3mm][c]{\footnotesize \faTrophy}
|
|
\end{minipage}%
|
|
\hspace{0.5em}%
|
|
\begin{minipage}[t]{\dimexpr \textwidth-0.5em-3mm}%
|
|
{\normalsize #1\par}
|
|
\end{minipage}%
|
|
\par
|
|
\vspace{0.5em}
|
|
}
|
|
|
|
% lists
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\RequirePackage{enumitem}
|
|
\setlist[itemize]{noitemsep, topsep=0pt, leftmargin=1em}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% FINAL FORMATTING
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\pagestyle{headerhighlightmain}
|
|
\RequirePackage{hyperref}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% THE END
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|