diff --git a/rendercv/themes/engineeringresumes/BulletEntry.j2.tex b/rendercv/themes/engineeringresumes/BulletEntry.j2.tex new file mode 100644 index 0000000..a142e02 --- /dev/null +++ b/rendercv/themes/engineeringresumes/BulletEntry.j2.tex @@ -0,0 +1,11 @@ +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) +\begingroup((* if design.text_alignment == "left-aligned" *))\raggedright((* endif *)) +\leftskip=<> +\advance\csname @rightskip\endcsname <> +\advance\rightskip <> + +\textbullet \hspace{3pt} <> +\par\endgroup + diff --git a/rendercv/themes/engineeringresumes/EducationEntry.j2.tex b/rendercv/themes/engineeringresumes/EducationEntry.j2.tex new file mode 100644 index 0000000..3fbec78 --- /dev/null +++ b/rendercv/themes/engineeringresumes/EducationEntry.j2.tex @@ -0,0 +1 @@ +\textbf{<>} -- \textit{((* if entry.degree *))<> in ((* endif *))<>((* if entry.location))} \hfill XXXX \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/ExperienceEntry.j2.tex b/rendercv/themes/engineeringresumes/ExperienceEntry.j2.tex new file mode 100644 index 0000000..7a49fe6 --- /dev/null +++ b/rendercv/themes/engineeringresumes/ExperienceEntry.j2.tex @@ -0,0 +1,10 @@ +\cventry{ + ((*- if design.show_only_years *))<<-entry.date_string_only_years->>((* else *))<<-entry.date_string->>((* endif -*)) +}{\textbf{<>}}{ + <<-entry.position->> +}{ + <<-entry.location->> +}{}{} +((* for item in entry.highlights *)) +\cvlistitem{<>} +((* endfor *)) \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/Header.j2.tex b/rendercv/themes/engineeringresumes/Header.j2.tex new file mode 100644 index 0000000..4d9b9b3 --- /dev/null +++ b/rendercv/themes/engineeringresumes/Header.j2.tex @@ -0,0 +1,11 @@ +((* if cv.name is not none *)) +\maketitle +((* endif *)) + + +% save the original href command in a new command: +\let\hrefWithoutArrow\href + % new command for external links: +\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\mbox{\color{color1} #2 \raisebox{.15ex}{\footnotesize \faExternalLink*}}}} + +\hypersetup{pdftitle={<>'s CV}} \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/NormalEntry.j2.tex b/rendercv/themes/engineeringresumes/NormalEntry.j2.tex new file mode 100644 index 0000000..4b2b18f --- /dev/null +++ b/rendercv/themes/engineeringresumes/NormalEntry.j2.tex @@ -0,0 +1,10 @@ +\cventry{ + ((*- if design.show_only_years *))<<-entry.date_string_only_years->>((* else *))<<-entry.date_string->>((* endif -*)) +}{ + <<-entry.name->> +}{ + <<-entry.location->> +}{}{}{} +((* for item in entry.highlights *)) +\cvlistitem{<>} +((* endfor *)) \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/OneLineEntry.j2.tex b/rendercv/themes/engineeringresumes/OneLineEntry.j2.tex new file mode 100644 index 0000000..189bf4e --- /dev/null +++ b/rendercv/themes/engineeringresumes/OneLineEntry.j2.tex @@ -0,0 +1,2 @@ +\textbf{<>:} <> + diff --git a/rendercv/themes/engineeringresumes/Preamble.j2.tex b/rendercv/themes/engineeringresumes/Preamble.j2.tex new file mode 100644 index 0000000..ed3545e --- /dev/null +++ b/rendercv/themes/engineeringresumes/Preamble.j2.tex @@ -0,0 +1,105 @@ +\documentclass[<>, <>]{article} + +% Packages: +\usepackage[ + ignoreheadfoot, % set margins without considering header and footer + top=<>, % seperation between body and page edge from the top + bottom=<>, % seperation between body and page edge from the bottom + left=<>, % seperation between body and page edge from the left + right=<>, % seperation between body and page edge from the right + footskip=<>, % seperation between body and footer + % showframe % for debugging + ]{geometry} % for adjusting page geometry +\usepackage{titlesec} % for customizing section titles +\usepackage[dvipsnames]{xcolor} % for coloring text +\definecolor{primaryColor}{RGB}{<>} % define primary color +\usepackage{enumitem} % for customizing lists +\usepackage{fontawesome5} % for using icons +\usepackage{amsmath} % for math +\usepackage[ + pdftitle={<>'s CV}, + pdfauthor={<>}, + colorlinks=true, + urlcolor=primaryColor +]{hyperref} % for links, metadata and bookmarks +\usepackage[pscoord]{eso-pic} % for floating text on the page +\usepackage{calc} % for calculating lengths +\usepackage{bookmark} % for bookmarks +\usepackage{lastpage} % for getting the total number of pages +\usepackage{charter} % for using charter font +\usepackage{ifthen} + +% Some settings: +\pagestyle{empty} % no header or footer +\setcounter{secnumdepth}{0} % no section numbering +\setlength{\parindent}{0pt} % no indentation +\setlength{\topskip}{0pt} % no top skip +((* if design.disable_page_numbering *)) +\pagenumbering{gobble} % no page numbering +((* else *)) +((* set page_numbering_style_placeholders = { + "NAME": cv.name, + "PAGE_NUMBER": "\\thepage{}", + "TOTAL_PAGES": "\pageref*{LastPage}" +} *)) +\makeatletter +\let\ps@customFooterStyle\ps@plain % Copy the plain style to customFooterStyle +\patchcmd{\ps@customFooterStyle}{\thepage}{ + \color{gray}\textit{\small <>} +}{}{} % replace number by desired string +\makeatother +\pagestyle{customFooterStyle} +((* endif *)) + +\titleformat{\section}{\bfseries\large}{}{0pt}{}[\vspace{1pt}\titlerule] + +\titlespacing{\section}{ + % left space: + 0pt + }{ + % top space: + <> + }{ + % bottom space: + <> + } % section title spacing + + \renewcommand\labelitemi{$\vcenter{\hbox{\small$\bullet$}}$} +\newenvironment{highlights}{ + \begin{itemize}[ + topsep=0pt, + parsep=<>, + partopsep=0pt, + itemsep=0pt, + after=\vspace{-1\baselineskip}, + leftmargin=<> + 3pt + ] + }{ + \end{itemize} + } % new environment for highlights + +\newenvironment{header}{ + \setlength{\topsep}{0pt}\par\kern\topsep\centering\color{primaryColor}\linespread{1.5} + }{ + \par\kern\topsep + } % new environment for the header + +\newcommand{\placelastupdatedtext}{% \placetextbox{}{}{} + \AddToShipoutPictureFG*{% Add to current page foreground + \put( + \LenToUnit{\paperwidth-<>-<>+0.05cm}, + \LenToUnit{\paperheight-<>} + ){\vtop{{\null}\makebox[0pt][c]{ + \small\color{gray}\textit{Last updated in <>}\hspace{\widthof{Last updated in <>}} + }}}% + }% +}% + +% save the original href command in a new command: +\let\hrefWithoutArrow\href + % new command for external links: +\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\mbox{\ifthenelse{\equal{#2}{}}{ }{#2 }\raisebox{.15ex}{\footnotesize \faExternalLink*}}}} + +% Ensure that generate pdf is machine readable/ATS parsable +\input{glyphtounicode} +\pdfgentounicode=1 \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/PublicationEntry.j2.tex b/rendercv/themes/engineeringresumes/PublicationEntry.j2.tex new file mode 100644 index 0000000..90ba510 --- /dev/null +++ b/rendercv/themes/engineeringresumes/PublicationEntry.j2.tex @@ -0,0 +1,8 @@ +\cventry{ + <<-entry.date_string->> +}{\textbf{<>}}{ + <<-entry.journal->> +}{ +((*- if entry.doi != "" -*))\href{<>}{<>}((*- endif -*)) +}{}{} +\cvline{}{\small <>} \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/SectionBeginning.j2.tex b/rendercv/themes/engineeringresumes/SectionBeginning.j2.tex new file mode 100644 index 0000000..b72afb4 --- /dev/null +++ b/rendercv/themes/engineeringresumes/SectionBeginning.j2.tex @@ -0,0 +1 @@ +\section{<>} \ No newline at end of file diff --git a/rendercv/themes/engineeringresumes/SectionEnding.j2.tex b/rendercv/themes/engineeringresumes/SectionEnding.j2.tex new file mode 100644 index 0000000..e69de29 diff --git a/rendercv/themes/engineeringresumes/TextEntry.j2.tex b/rendercv/themes/engineeringresumes/TextEntry.j2.tex new file mode 100644 index 0000000..5dd00e8 --- /dev/null +++ b/rendercv/themes/engineeringresumes/TextEntry.j2.tex @@ -0,0 +1 @@ +\cvline{}{<>} diff --git a/rendercv/themes/engineeringresumes/__init__.py b/rendercv/themes/engineeringresumes/__init__.py new file mode 100644 index 0000000..f0fa8ec --- /dev/null +++ b/rendercv/themes/engineeringresumes/__init__.py @@ -0,0 +1,80 @@ +from typing import Literal + +import pydantic + +from .. import LaTeXDimension + + +class ModerncvThemeOptions(pydantic.BaseModel): + """This class is the data model of the theme options for the moderncv theme.""" + + model_config = pydantic.ConfigDict(extra="forbid") + + theme: Literal["moderncv"] + font_size: Literal["10pt", "11pt", "12pt"] = pydantic.Field( + default="10pt", + title="Font Size", + description='The font size of the CV. The default value is "10pt".', + examples=["10pt", "11pt", "12pt"], + ) + page_size: Literal["a4paper", "letterpaper"] = pydantic.Field( + default="letterpaper", + title="Page Size", + description='The page size of the CV. The default value is "letterpaper".', + examples=["a4paper", "letterpaper"], + ) + color: ( + Literal["blue"] + | Literal["black"] + | Literal["burgundy"] + | Literal["green"] + | Literal["grey"] + | Literal["orange"] + | Literal["purple"] + | Literal["red"] + ) = pydantic.Field( + default="blue", + validate_default=True, + title="Primary Color", + description='The primary color of the CV. The default value is "blue".', + examples=[ + "blue", + "black", + "burgundy", + "green", + "grey", + "orange", + "purple", + "red", + ], + ) + date_width: LaTeXDimension = pydantic.Field( + default="3.8 cm", + validate_default=True, + title="Date and Location Column Width", + description='The width of the date column. The default value is "3.8 cm".', + ) + content_scale: float = pydantic.Field( + default=0.75, + title="Content Scale", + description=( + "The scale of the content with respect to the page size. The default value" + ' is "0.75".' + ), + ) + show_only_years: bool = pydantic.Field( + default=False, + title="Show Only Years", + description=( + 'If "True", only the years will be shown in the date column. The default' + ' value is "False".' + ), + ) + disable_page_numbers: bool = pydantic.Field( + default=False, + title="Disable Page Numbers", + description=( + 'If "True", the page numbers will be disabled. The default value is' + ' "False".' + ), + )