mirror of https://github.com/eyhc1/rendercv.git
engineeringresumes: start working on a new theme
This commit is contained in:
parent
9f3bc2e922
commit
d0840f2da6
|
@ -0,0 +1,11 @@
|
||||||
|
((* if not is_first_entry *))
|
||||||
|
\vspace{<<design.margins.entry_area.vertical_between>>}
|
||||||
|
((* endif *))
|
||||||
|
\begingroup((* if design.text_alignment == "left-aligned" *))\raggedright((* endif *))
|
||||||
|
\leftskip=<<design.margins.entry_area.left_and_right>>
|
||||||
|
\advance\csname @rightskip\endcsname <<design.margins.entry_area.left_and_right>>
|
||||||
|
\advance\rightskip <<design.margins.entry_area.left_and_right>>
|
||||||
|
|
||||||
|
\textbullet \hspace{3pt} <<entry.bullet>>
|
||||||
|
\par\endgroup
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
\textbf{<<entry.institution>>} -- \textit{((* if entry.degree *))<<entry.degree>> in ((* endif *))<<entry.area>>((* if entry.location))} \hfill XXXX
|
|
@ -0,0 +1,10 @@
|
||||||
|
\cventry{
|
||||||
|
((*- if design.show_only_years *))<<-entry.date_string_only_years->>((* else *))<<-entry.date_string->>((* endif -*))
|
||||||
|
}{\textbf{<<entry.company>>}}{
|
||||||
|
<<-entry.position->>
|
||||||
|
}{
|
||||||
|
<<-entry.location->>
|
||||||
|
}{}{}
|
||||||
|
((* for item in entry.highlights *))
|
||||||
|
\cvlistitem{<<item>>}
|
||||||
|
((* endfor *))
|
|
@ -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={<<cv.name>>'s CV}}
|
|
@ -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{<<item>>}
|
||||||
|
((* endfor *))
|
|
@ -0,0 +1,2 @@
|
||||||
|
\textbf{<<entry.label>>:} <<entry.details>>
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
\documentclass[<<design.font_size>>, <<design.page_size>>]{article}
|
||||||
|
|
||||||
|
% Packages:
|
||||||
|
\usepackage[
|
||||||
|
ignoreheadfoot, % set margins without considering header and footer
|
||||||
|
top=<<design.margins.page.top>>, % seperation between body and page edge from the top
|
||||||
|
bottom=<<design.margins.page.bottom>>, % seperation between body and page edge from the bottom
|
||||||
|
left=<<design.margins.page.left>>, % seperation between body and page edge from the left
|
||||||
|
right=<<design.margins.page.right>>, % seperation between body and page edge from the right
|
||||||
|
footskip=<<design.margins.page.bottom|divide_length_by(2)>>, % 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}{<<design.color.as_rgb_tuple()|join(", ")>>} % define primary color
|
||||||
|
\usepackage{enumitem} % for customizing lists
|
||||||
|
\usepackage{fontawesome5} % for using icons
|
||||||
|
\usepackage{amsmath} % for math
|
||||||
|
\usepackage[
|
||||||
|
pdftitle={<<cv.name>>'s CV},
|
||||||
|
pdfauthor={<<cv.name>>},
|
||||||
|
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 <<design.page_numbering_style|replace_placeholders_with_actual_values(page_numbering_style_placeholders)>>}
|
||||||
|
}{}{} % replace number by desired string
|
||||||
|
\makeatother
|
||||||
|
\pagestyle{customFooterStyle}
|
||||||
|
((* endif *))
|
||||||
|
|
||||||
|
\titleformat{\section}{\bfseries\large}{}{0pt}{}[\vspace{1pt}\titlerule]
|
||||||
|
|
||||||
|
\titlespacing{\section}{
|
||||||
|
% left space:
|
||||||
|
0pt
|
||||||
|
}{
|
||||||
|
% top space:
|
||||||
|
<<design.margins.section_title.top>>
|
||||||
|
}{
|
||||||
|
% bottom space:
|
||||||
|
<<design.margins.section_title.bottom>>
|
||||||
|
} % section title spacing
|
||||||
|
|
||||||
|
\renewcommand\labelitemi{$\vcenter{\hbox{\small$\bullet$}}$}
|
||||||
|
\newenvironment{highlights}{
|
||||||
|
\begin{itemize}[
|
||||||
|
topsep=0pt,
|
||||||
|
parsep=<<design.margins.highlights_area.vertical_between_bullet_points>>,
|
||||||
|
partopsep=0pt,
|
||||||
|
itemsep=0pt,
|
||||||
|
after=\vspace{-1\baselineskip},
|
||||||
|
leftmargin=<<design.margins.highlights_area.left>> + 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{<horizontal pos>}{<vertical pos>}{<stuff>}
|
||||||
|
\AddToShipoutPictureFG*{% Add <stuff> to current page foreground
|
||||||
|
\put(
|
||||||
|
\LenToUnit{\paperwidth-<<design.margins.page.right>>-<<design.margins.entry_area.left_and_right>>+0.05cm},
|
||||||
|
\LenToUnit{\paperheight-<<design.margins.page.top|divide_length_by(2)>>}
|
||||||
|
){\vtop{{\null}\makebox[0pt][c]{
|
||||||
|
\small\color{gray}\textit{Last updated in <<today>>}\hspace{\widthof{Last updated in <<today>>}}
|
||||||
|
}}}%
|
||||||
|
}%
|
||||||
|
}%
|
||||||
|
|
||||||
|
% 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
|
|
@ -0,0 +1,8 @@
|
||||||
|
\cventry{
|
||||||
|
<<-entry.date_string->>
|
||||||
|
}{\textbf{<<entry.title>>}}{
|
||||||
|
<<-entry.journal->>
|
||||||
|
}{
|
||||||
|
((*- if entry.doi != "" -*))\href{<<entry.doi_url>>}{<<entry.doi>>}((*- endif -*))
|
||||||
|
}{}{}
|
||||||
|
\cvline{}{\small <<entry.authors|map("make_it_nolinebreak")|join(", ")>>}
|
|
@ -0,0 +1 @@
|
||||||
|
\section{<<section_title>>}
|
|
@ -0,0 +1 @@
|
||||||
|
\cvline{}{<<entry>>}
|
|
@ -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".'
|
||||||
|
),
|
||||||
|
)
|
Loading…
Reference in New Issue