Files
Latex-Vorlagen/Latex-Resourcen/my-resume.cls
KonnosPB d59f47a981 Add new LaTeX templates for CV, letters, and envelopes
- 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.
2025-06-26 22:35:46 +02:00

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