summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/europasscv/europasscv.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/europasscv/europasscv.cls')
-rw-r--r--macros/latex/contrib/europasscv/europasscv.cls186
1 files changed, 138 insertions, 48 deletions
diff --git a/macros/latex/contrib/europasscv/europasscv.cls b/macros/latex/contrib/europasscv/europasscv.cls
index c0687d6b66..0105745655 100644
--- a/macros/latex/contrib/europasscv/europasscv.cls
+++ b/macros/latex/contrib/europasscv/europasscv.cls
@@ -2,13 +2,14 @@
%
% Europass curriculum vitae class
% Author: Giacomo Mazzamuto
-% based on the europecv class by Nicola Vitacolonna (http://ctan.org/pkg/europecv)
+% based on the europecv class by Nicola Vitacolonna (https://ctan.org/pkg/europecv)
+% cover letter based on coverletter2013.cls by Roberto Leinardi (https://github.com/leinardi/europecv2013)
% This material is subject to the LaTeX Project Public License Version 1.3.
% See http://www.latex-project.org/lppl.txt
% for the details of that license
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{europasscv}[2019/01/14 The new Europass curriculum vitae class]
+\ProvidesClass{europasscv}[2020-10-31 The Europass curriculum vitae class (2013 version)]
\newcommand\ecv@utf[1]{#1}
@@ -21,7 +22,7 @@
% Set language
\DeclareOption{english}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_en.def}{}{%
+ \InputIfFileExists{def/europasscv_en.def}{}{%
\ClassError{europasscv}{English definition file 'europasscv_en.def' not found}%
{The file should be inside the europasscv folder.\MessageBreak
Try to re-install the europasscv class.}}%
@@ -29,154 +30,151 @@
}
\DeclareOption{italian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_it.def}{}{%
+ \InputIfFileExists{def/europasscv_it.def}{}{%
\ClassWarningNoLine{europasscv}{Italian definition file 'europasscv_it.def' not found}}%
}%
}
\DeclareOption{spanish}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_es.def}{}{%
+ \InputIfFileExists{def/europasscv_es.def}{}{%
\ClassWarningNoLine{europasscv}{Spanish definition file 'europasscv_es.def' not found}}%
}%
}
\DeclareOption{french}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_fr.def}{}{%
+ \InputIfFileExists{def/europasscv_fr.def}{}{%
\ClassWarningNoLine{europasscv}{French definition file 'europasscv_fr.def' not found}}%
}%
}
\DeclareOption{danish}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_da.def}{}{%
+ \InputIfFileExists{def/europasscv_da.def}{}{%
\ClassWarningNoLine{europasscv}{Danish definition file 'europasscv_da.def' not found}}%
}%
}
\DeclareOption{german}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_de.def}{}{%
+ \InputIfFileExists{def/europasscv_de.def}{}{%
\ClassWarningNoLine{europasscv}{German definition file 'europasscv_de.def' not found}}%
}%
}
\DeclareOption{finnish}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_fi.def}{}{%
+ \InputIfFileExists{def/europasscv_fi.def}{}{%
\ClassWarningNoLine{europasscv}{Finnish definition file 'europasscv_fi.def' not found}}%
}%
}
\DeclareOption{portuges}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_pt.def}{}{%
+ \InputIfFileExists{def/europasscv_pt.def}{}{%
\ClassWarningNoLine{europasscv}{Portuguese definition file 'europasscv_pt.def' not found}}%
}%
}
\DeclareOption{portuguese}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_pt.def}{}{%
+ \InputIfFileExists{def/europasscv_pt.def}{}{%
\ClassWarningNoLine{europasscv}{Portuguese definition file 'europasscv_pt.def' not found}}%
}%
}
\DeclareOption{swedish}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_sv.def}{}{%
+ \InputIfFileExists{def/europasscv_sv.def}{}{%
\ClassWarningNoLine{europasscv}{Swedish definition file 'europasscv_sv.def' not found}}%
}%
}
\DeclareOption{norsk}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_nb.def}{}{%
+ \InputIfFileExists{def/europasscv_nb.def}{}{%
\ClassWarningNoLine{europasscv}{Norwegian (Bokmål) definition file 'europasscv_nb.def' not found}}%
}%
}
\DeclareOption{dutch}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_nl.def}{}{%
+ \InputIfFileExists{def/europasscv_nl.def}{}{%
\ClassWarningNoLine{europasscv}{Dutch definition file 'europasscv_nl.def' not found}}%
}%
}
\DeclareOption{catalan}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_ca.def}{}{%
+ \InputIfFileExists{def/europasscv_ca.def}{}{%
\ClassWarningNoLine{europasscv}{Catalan definition file 'europasscv_ca.def' not found}}%
}%
}
\DeclareOption{polish}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_pl.def}{}{%
+ \InputIfFileExists{def/europasscv_pl.def}{}{%
\ClassWarningNoLine{europasscv}{Polish definition file 'europasscv_pl.def' not found}}%
}%
}
\DeclareOption{hungarian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_hu.def}{}{%
+ \InputIfFileExists{def/europasscv_hu.def}{}{%
\ClassWarningNoLine{europasscv}{Hungarian definition file 'europasscv_hu.def' not found}}%
- \ecvpage{\thepage\ifx\@empty\ecv@totpages.\else\ecv@totpages\fi~\ecv@pagekey}
- \def\ecv@lfoot{%
- \footnotesize\textrm{\ecv@page~- \textrm{\ecv@footername} \ecv@cvofkey}}%
}%
}
\DeclareOption{estonian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_et.def}{}{%
+ \InputIfFileExists{def/europasscv_et.def}{}{%
\ClassWarningNoLine{europasscv}{Estonian definition file 'europasscv_et.def' not found}}%
}%
}
\DeclareOption{icelandic}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_is.def}{}{%
+ \InputIfFileExists{def/europasscv_is.def}{}{%
\ClassWarningNoLine{europasscv}{Icelandic definition file 'europasscv_is.def' not found}}%
}%
}
\DeclareOption{lithuanian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_lt.def}{}{%
+ \InputIfFileExists{def/europasscv_lt.def}{}{%
\ClassWarningNoLine{europasscv}{Lithuanian definition file 'europasscv_lt.def' not found}}%
}%
}
\DeclareOption{czech}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_cs.def}{}{%
+ \InputIfFileExists{def/europasscv_cs.def}{}{%
\ClassWarningNoLine{europasscv}{Czech definition file 'europasscv_cs.def' not found}}%
}%
}
\DeclareOption{slovak}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_sk.def}{}{%
+ \InputIfFileExists{def/europasscv_sk.def}{}{%
\ClassWarningNoLine{europasscv}{Slovak definition file 'europasscv_sk.def' not found}}%
}%
}
\DeclareOption{latvian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_lv.def}{}{%
+ \InputIfFileExists{def/europasscv_lv.def}{}{%
\ClassWarningNoLine{europasscv}{Latvian definition file 'europasscv_lv.def' not found}}%
}%
}
\DeclareOption{slovenian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_sl.def}{}{%
+ \InputIfFileExists{def/europasscv_sl.def}{}{%
\ClassWarningNoLine{europasscv}{Slovenian definition file 'europasscv_sl.def' not found}}%
}%
}
\DeclareOption{romanian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_ro.def}{}{%
+ \InputIfFileExists{def/europasscv_ro.def}{}{%
\ClassWarningNoLine{europasscv}{Romanian definition file 'europasscv_ro.def' not found}}%
}%
}
\DeclareOption{maltese}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_mt.def}{}{%
+ \InputIfFileExists{def/europasscv_mt.def}{}{%
\ClassWarningNoLine{europasscv}{Maltese definition file 'europasscv_mt.def' not found}}%
}%
}
\DeclareOption{bulgarian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_bg.def}{}{%
+ \InputIfFileExists{def/europasscv_bg.def}{}{%
\ClassWarningNoLine{europasscv}{Bulgarian definition file 'europasscv_bg.def' not found}}%
}%
}
\DeclareOption{greek}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_el.def}{}{%
+ \InputIfFileExists{def/europasscv_el.def}{}{%
\ClassWarningNoLine{europasscv}{Greek definition file 'europasscv_el.def' not found}}%
\ifPDFTeX
\PackageError{europasscv}{Please run XeLaTeX or LuaLaTeX for greek language support}{}
@@ -185,16 +183,22 @@
}
\DeclareOption{galician}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_gl.def}{}{%
+ \InputIfFileExists{def/europasscv_gl.def}{}{%
\ClassWarningNoLine{europasscv}{Galician definition file 'europasscv_gl.def' not found}}%
}%
}
\DeclareOption{serbian}{%
\AtEndOfPackage{%
- \InputIfFileExists{europasscv_sr.def}{}{%
+ \InputIfFileExists{def/europasscv_sr.def}{}{%
\ClassWarningNoLine{europasscv}{Serbian definition file 'europasscv_sr.def' not found}}%
}%
}
+\DeclareOption{turkish}{%
+ \AtEndOfPackage{%
+ \InputIfFileExists{def/europasscv_tr.def}{}{%
+ \ClassWarningNoLine{europasscv}{Turkish definition file 'europasscv_tr.def' not found}}%
+ }%
+}
\DeclareOption{narrow}{
\def\ecv@narrow{}
@@ -269,6 +273,8 @@
\RequirePackage{xparse}
\RequirePackage{substr}
\RequirePackage{keyval}
+\RequirePackage{xstring}
+\RequirePackage{xifthen}
\if@ecvdebug \RequirePackage{showframe} \fi
@@ -290,7 +296,7 @@
% Right Footnote to be shown on every page
\newcommand\ecvfootnote[1]{\def\ecv@cfoot{#1}}
-\ecvfootnote{\textcopyright~\ecv@europeanunionkey, 2002 -- \the\year\ | http://europass.cedefop.europa.eu }
+\ecvfootnote{\textcopyright~\ecv@europeanunionkey, 2002 -- \the\year\ | https://europass.cedefop.europa.eu }
\AtBeginDocument{%
@@ -352,9 +358,9 @@
\fi % End \if@ecvnodocument
} % End \AtBeginDocument
-\renewcommand{\labelitemi}{\normalfont\bfseries \textendash}
+\renewcommand{\labelitemi}{\textendash}
\renewcommand{\labelitemii}{\textbullet}
-\renewcommand{\labelitemiii}{\normalfont\bfseries \textendash}
+\renewcommand{\labelitemiii}{\textendash}
\renewcommand{\labelitemiv}{\textbullet}
\newcommand*{\ecvfirstname}[1]{\def\ecv@firstname{#1}} % Deprecated
@@ -376,6 +382,7 @@
\newcommand*{\ecvfax}[1]{\def\ecv@fax{#1}}
\newcommand*{\ecvemail}[1]{\def\ecv@email{#1}}
\newcommand*{\ecvhomepage}[1]{\def\ecv@homepage{#1}}
+\newcommand*{\ecvgitpage}[1]{\def\ecv@gitpage{#1}}
\newcommand*{\ecvgithubpage}[1]{\def\ecv@githubpage{#1}}
\newcommand*{\ecvgitlabpage}[1]{\def\ecv@gitlabpage{#1}}
\newcommand*{\ecvlinkedinpage}[1]{\def\ecv@linkedinpage{#1}}
@@ -421,6 +428,7 @@
\ecvfax{}
\ecvemail{}
\ecvhomepage{}
+\ecvgitpage{}
\ecvgithubpage{}
\ecvgitlabpage{}
\ecvlinkedinpage{}
@@ -448,11 +456,20 @@
\next
}
+% substitute underscores in links with \_
+% https://tex.stackexchange.com/a/282707
+\newcommand{\makesub}[1]{%
+ \saveexpandmode\noexpandarg
+ \StrSubstitute{#1}{_}{\_}[\tempsub]%
+ \restoreexpandmode
+}
+
\newif\if@processlinks@converttoemail
\def\convertstring#1{\if@processlinks@converttoemail \toemail{#1} \else \tourl{#1} \fi}
\newcommand{\tourl}[1]{%
\IfSubStringInString{://}{#1}{\def\temp{#1}}{\def\temp{http://#1}}%
-\setul{.5pt}{.4pt}\href{\temp}{\ul{\mbox{#1}}}%
+\makesub{#1}%
+\setul{.5pt}{.4pt}\href{\temp}{\ul{\mbox{\tempsub}}}%
}
\def\toemail#1{\setul{.5pt}{.4pt}\href{mailto:#1}{\ul{\mbox{#1}}}}
@@ -490,15 +507,15 @@
\raggedright
{\ecvLargenormalstyle{\ecv@name}} \newline
\ifx\@empty\ecv@address\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{address_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@address} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/address_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@address} \newline
\fi
\ifx\@empty\ecv@mobile\else
\@ecvphoneispresenttrue
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{mobile_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@mobile} \quad
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/mobile_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@mobile} \quad
\fi
\ifx\@empty\ecv@telephone\else
\@ecvphoneispresenttrue
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{telephone_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@telephone} \quad
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/telephone_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@telephone} \quad
\fi
\ifx\@empty\ecv@workphone\else
\@ecvphoneispresenttrue
@@ -511,7 +528,7 @@
\fi
\fi
\fi
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{work_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@workphone}
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/work_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@workphone}
\fi
\if@ecvphoneispresent
\newline
@@ -521,26 +538,29 @@
\fi
\ifx\@empty\ecv@email\else
\@processlinks@converttoemailtrue
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{mail_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@email}} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/mail_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@email}} \newline
\@processlinks@converttoemailfalse
\fi
\ifx\@empty\ecv@homepage\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{website_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@homepage}} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/website_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@homepage}} \newline
+ \fi
+ \ifx\@empty\ecv@gitpage\else
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/git_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@gitpage}} \newline
\fi
\ifx\@empty\ecv@githubpage\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{github_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@githubpage}} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/github_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@githubpage}} \newline
\fi
\ifx\@empty\ecv@gitlabpage\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{gitlab_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@gitlabpage}} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/gitlab_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@gitlabpage}} \newline
\fi
\ifx\@empty\ecv@linkedinpage\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{linkedin_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@linkedinpage}} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/linkedin_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@linkedinpage}} \newline
\fi
\ifx\@empty\ecv@orcid\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{orcid_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont\if@ecvorcidlabel\ecvhighlight{ORCID}~\fi\if@ecvorcidlink\setulcolor{\ecv@textcolor}\setul{.5pt}{.4pt}\href{https://orcid.org/\ecv@orcid}{\ul{\mbox{\ecv@orcid}}}\else\ecv@orcid\fi} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/orcid_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont\if@ecvorcidlabel\ecvhighlight{ORCID}~\fi\if@ecvorcidlink\setulcolor{\ecv@textcolor}\setul{.5pt}{.4pt}\href{https://orcid.org/\ecv@orcid}{\ul{\mbox{\ecv@orcid}}}\else\ecv@orcid\fi} \newline
\fi
\ifx\@empty\ecv@im\else
- \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{im_europass_icon.pdf}} \hspace{0.2mm}{\fontseries{m}\selectfont \ecv@im} \newline
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/im_europass_icon.pdf}} \hspace{0.2mm}{\fontseries{m}\selectfont \ecv@im} \newline
\fi
\ifx\@empty\ecv@gender\else
\fontseries{m}\selectfont \ecvhighlight{\if@ecvpineedspipe ~| \fi \ecv@genderkey} \ecv@gender \@ecvpineedspipetrue
@@ -909,3 +929,73 @@
\definecolor{ecvhighlightcellcolor}{HTML}{ebebeb}
\definecolor{ecvlanglinkcolor}{HTML}{000080}
\definecolor{ecvtextcolor}{HTML}{3e3a38}
+
+% cover letter
+\providecommand{\eclpersonalinfo}[1][0pt]{%
+\clearpage
+\begin{huge}\ecv@name\end{huge}\par\bigskip
+\ifx\@empty\ecv@address
+\else
+ \includegraphics[width=0.4cm]{icons/address_europass_icon.pdf}\ecv@address\par\smallskip
+\fi
+\ifx\@empty\ecv@mobile
+\else
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/mobile_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@mobile}\quad
+ \ifx\@empty\ecv@telephone
+ \else
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/telephone_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \ecv@mobile}\quad
+ \fi
+\fi
+\ifx\@empty\ecv@email
+\else
+ \@processlinks@converttoemailtrue
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/mail_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@email}} \quad
+ \@processlinks@converttoemailfalse
+\fi
+\ifx\@empty\ecv@linkedinpage
+\else
+ \raisebox{-2\lineskip}{\includegraphics[width=0.4cm]{icons/linkedin_europass_icon.pdf}}\hspace{0.2mm} {\fontseries{m}\selectfont \processlinks{\ecv@linkedinpage}}\quad
+\fi
+\par\vspace{5pt}
+\textcolor{ecvrulecolor}{\hrulefill}\par\vspace{#1}
+}
+
+% Text bullet
+% \newcommand{\eclbullet}{\raisebox{.35ex}[0cm][0cm]{\tiny\textbullet}}
+
+% Icon size
+\newlength\ecl@iconwidth
+\newcommand*{\eclIconwidth}[1]{\setlength\ecl@iconwidth{#1}}
+\eclIconwidth{4.2mm}
+
+\newcommand\ecladdressee[5][10pt]{%
+\begin{flushright}
+#2\par
+#3\par
+#4\par
+#5\par
+\vspace{#1}
+\end{flushright}}
+
+\newcommand\eclcitydatesubject[4][0pt]{%
+#2, #3\par
+#4\vspace{#1}\par\bigskip}
+
+\newcommand\eclopeningsalutation[2][0pt]{%
+#2,\vspace{#1}\par\bigskip}
+
+\newcommand\eclmaincontent[4][0pt]{%
+#2\par
+#3\par
+#4\vspace{#1}\par\bigskip}
+
+\newcommand\eclclosingsalutation[2][0pt]{%
+\par\bigskip#2,\vspace{#1}\par\bigskip}
+
+\NewDocumentCommand{\eclsignature}{O{}O{\ecv@name}}{%
+\hspace{0.4\textwidth}#2\par
+\hspace{0.4\textwidth}\ifthenelse{\isempty{#1}}{}{\includegraphics{#1}\par}%
+}
+
+\newcommand\eclitem[2][0pt]{%
+#2\vspace{#1}\par}