moved files to project root and renamed them
This commit is contained in:
3592
CV_Pedro_Cabral.pdf
Normal file
3592
CV_Pedro_Cabral.pdf
Normal file
File diff suppressed because one or more lines are too long
24
CV_Pedro_Cabral.tex
Normal file
24
CV_Pedro_Cabral.tex
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
\documentclass{custom-cv}
|
||||||
|
|
||||||
|
\usepackage{fontawesome6} % for icons
|
||||||
|
|
||||||
|
% \cvdebugtrue
|
||||||
|
|
||||||
|
\setcvtitle{Pedro Miguel \textbf{Pessoa Cabral}}
|
||||||
|
\setcvauthor{\faMobile\quad +49-(0)-176-57909188 \quad \faEnvelope\quad \href{mailto:pmpcabral@gmail.com}{pmpcabral@posteo.de}}
|
||||||
|
\setcvphoto{me_m_8x8_4x.jpg} % Try commenting this out to see layout adapt
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\maketitle
|
||||||
|
|
||||||
|
\section{Languages}
|
||||||
|
\cvitem{Portuguese}{First Language}{}
|
||||||
|
\cvitem{German}{Fluent}{}
|
||||||
|
\cvitem{English}{Fluent}{}
|
||||||
|
\cvitem{Spanish}{Good}{}
|
||||||
|
\cvitem{French}{Basic}{}
|
||||||
|
|
||||||
|
\section{Experience}
|
||||||
|
\cventry{2017 -- Present}{Software Developer}{HR4YOU AG}{PHP, JavaScript, SQL}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
189
custom-cv.cls
Normal file
189
custom-cv.cls
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
% =========================
|
||||||
|
% custom-cv.cls (2025-08-13)
|
||||||
|
% =========================
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesClass{custom-cv}[2025/08/13 Custom CV class]
|
||||||
|
|
||||||
|
% Base class
|
||||||
|
\LoadClass[11pt,a4paper]{article}
|
||||||
|
|
||||||
|
% Packages
|
||||||
|
\RequirePackage[a4paper,margin=1in]{geometry}
|
||||||
|
\RequirePackage{xcolor}
|
||||||
|
\RequirePackage{graphicx}
|
||||||
|
\RequirePackage{tikz}
|
||||||
|
\RequirePackage{titlesec}
|
||||||
|
\RequirePackage{enumitem}
|
||||||
|
\RequirePackage{hyperref}
|
||||||
|
\RequirePackage{draftwatermark}
|
||||||
|
\RequirePackage{fontspec}
|
||||||
|
\RequirePackage{pgf} % for watermark autoscale
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Fonts (with fallback)
|
||||||
|
% ---------------------------
|
||||||
|
\IfFontExistsTF{Helvetica Neue}{
|
||||||
|
\setmainfont{Helvetica Neue}
|
||||||
|
}{
|
||||||
|
\IfFontExistsTF{TeX Gyre Heros}{\setmainfont{TeX Gyre Heros}}{\setmainfont{Latin Modern Roman}}
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Colors
|
||||||
|
% ---------------------------
|
||||||
|
\definecolor{cvblue}{HTML}{1A4E8A}
|
||||||
|
|
||||||
|
% Debug colors & borders
|
||||||
|
\definecolor{debugtext}{HTML}{E0F7FA}
|
||||||
|
\definecolor{debugtextborder}{HTML}{0D47A1}
|
||||||
|
\definecolor{debugphoto}{HTML}{FFEBEE}
|
||||||
|
\definecolor{debugphotoborder}{HTML}{B71C1C}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Debug flag & helpers
|
||||||
|
% ---------------------------
|
||||||
|
\newif\ifcvdebug
|
||||||
|
\cvdebugfalse
|
||||||
|
|
||||||
|
\newcommand{\debugboxtext}[1]{%
|
||||||
|
\ifcvdebug
|
||||||
|
\fcolorbox{debugtextborder}{debugtext}{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#1}}%
|
||||||
|
\else
|
||||||
|
#1%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\debugboxphoto}[1]{%
|
||||||
|
\ifcvdebug
|
||||||
|
\fcolorbox{debugphotoborder}{debugphoto}{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#1}}%
|
||||||
|
\else
|
||||||
|
#1%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% CV storage + setters
|
||||||
|
% ---------------------------
|
||||||
|
\newcommand{\cvtitle}{} % main title (name)
|
||||||
|
\newcommand{\cvauthor}{} % contact line
|
||||||
|
\newcommand{\cvphoto}{} % photo path
|
||||||
|
|
||||||
|
\newcommand{\setcvtitle}[1]{\renewcommand{\cvtitle}{#1}}
|
||||||
|
\newcommand{\setcvauthor}[1]{\renewcommand{\cvauthor}{#1}}
|
||||||
|
\newcommand{\setcvphoto}[1]{\renewcommand{\cvphoto}{#1}}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Robust "is empty?" test (trim spaces)
|
||||||
|
% ---------------------------
|
||||||
|
\makeatletter
|
||||||
|
\newcommand{\IfNotEmpty}[3]{%
|
||||||
|
\edef\cv@tmp{\zap@space\detokenize{#1} \@empty}%
|
||||||
|
\ifx\cv@tmp\@empty
|
||||||
|
#3%
|
||||||
|
\else
|
||||||
|
#2%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Hyperlinks & lists
|
||||||
|
% ---------------------------
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks=true,
|
||||||
|
urlcolor=cvblue,
|
||||||
|
linkcolor=cvblue
|
||||||
|
}
|
||||||
|
\setlength{\parskip}{0.4em}
|
||||||
|
\setlist[itemize]{noitemsep,topsep=0pt}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Section formatting
|
||||||
|
% ---------------------------
|
||||||
|
\titleformat{\section}
|
||||||
|
{\large\bfseries\color{cvblue}}
|
||||||
|
{}{0em}
|
||||||
|
{\debugboxtext}
|
||||||
|
[\titlerule]
|
||||||
|
|
||||||
|
\titleformat{\subsection}
|
||||||
|
{\normalsize\bfseries\color{cvblue}}
|
||||||
|
{}{0em}
|
||||||
|
{}
|
||||||
|
|
||||||
|
\setcounter{secnumdepth}{0}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% CV content commands
|
||||||
|
% ---------------------------
|
||||||
|
\newcommand{\cvitem}[2]{%
|
||||||
|
\debugboxtext{%
|
||||||
|
\noindent\textbf{#1:} #2
|
||||||
|
}\par
|
||||||
|
}
|
||||||
|
|
||||||
|
% \cventry{Title}{Date/Place}{Subtitle/Role}{Details}
|
||||||
|
\newcommand{\cventry}[4]{%
|
||||||
|
\debugboxtext{%
|
||||||
|
\noindent\textbf{#2} \hfill {\small #1}\\
|
||||||
|
\IfNotEmpty{#3}{\textit{#3}\par}{}%
|
||||||
|
#4%
|
||||||
|
}\par\vspace{0.8em}
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% maketitle with adaptive layout
|
||||||
|
% ---------------------------
|
||||||
|
\renewcommand{\maketitle}{%
|
||||||
|
\IfNotEmpty{\cvtitle}{%
|
||||||
|
\begin{center}
|
||||||
|
\IfNotEmpty{\cvphoto}{%
|
||||||
|
% Text + Photo
|
||||||
|
\begin{minipage}[c]{0.75\textwidth}
|
||||||
|
\debugboxtext{%
|
||||||
|
{\LARGE \textbf{\cvtitle}}%
|
||||||
|
\IfNotEmpty{\cvauthor}{\\[0.5em]\cvauthor}{}%
|
||||||
|
}
|
||||||
|
\end{minipage}%
|
||||||
|
\hfill
|
||||||
|
\begin{minipage}[c]{0.23\textwidth}
|
||||||
|
\debugboxphoto{%
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\clip (0,0) circle (1.75cm);
|
||||||
|
\node at (0,0) {\includegraphics[height=3.5cm]{\cvphoto}};
|
||||||
|
\end{tikzpicture}
|
||||||
|
}
|
||||||
|
\end{minipage}
|
||||||
|
}{%
|
||||||
|
% No photo: full-width text
|
||||||
|
\begin{minipage}[c]{\textwidth}
|
||||||
|
\debugboxtext{%
|
||||||
|
{\LARGE \textbf{\cvtitle}}%
|
||||||
|
\IfNotEmpty{\cvauthor}{\\[0.5em]\cvauthor}{}%
|
||||||
|
}
|
||||||
|
\end{minipage}
|
||||||
|
}%
|
||||||
|
\end{center}
|
||||||
|
\vspace{1em}
|
||||||
|
}{}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% ---------------------------
|
||||||
|
% Watermark (auto-scale)
|
||||||
|
% ---------------------------
|
||||||
|
\newlength{\cvWatermarkWidth}
|
||||||
|
\newcommand{\cvsetwatermark}{%
|
||||||
|
\ifcvdebug
|
||||||
|
\SetWatermarkText{DEBUG MODE}%
|
||||||
|
{%
|
||||||
|
\fontsize{5cm}{5cm}\selectfont
|
||||||
|
\settowidth{\cvWatermarkWidth}{DEBUG MODE}%
|
||||||
|
}%
|
||||||
|
\pgfmathsetmacro{\cvScale}{min(\paperwidth,\paperheight)/\cvWatermarkWidth*0.9}%
|
||||||
|
\SetWatermarkScale{\cvScale}%
|
||||||
|
\SetWatermarkColor[gray]{0.85}%
|
||||||
|
\else
|
||||||
|
\SetWatermarkText{}%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
\AtBeginDocument{\cvsetwatermark}
|
||||||
Reference in New Issue
Block a user