mirror of https://github.com/eyhc1/rendercv.git
engineeringresumes: finish the theme
This commit is contained in:
parent
93aa4dfdde
commit
3f3740bc05
|
@ -1,11 +1,2 @@
|
||||||
((* if not is_first_entry *))
|
$\vcenter{\hbox{\small$\bullet$}}$ \hspace{3pt} <<entry.bullet>>
|
||||||
\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
|
|
||||||
|
|
||||||
|
|
|
@ -1 +1,15 @@
|
||||||
\textbf{<<entry.institution>>} -- \textit{((* if entry.degree *))<<entry.degree>> in ((* endif *))<<entry.area>>((* if entry.location))} \hfill XXXX
|
((* if not is_first_entry *))
|
||||||
|
\vspace{8pt}
|
||||||
|
((* endif *))
|
||||||
|
|
||||||
|
\textbf{<<entry.institution>>}, ((* if entry.degree *))<<entry.degree>> in ((* endif *))<<entry.area>>((* if entry.location *)) -- <<entry.location>>((* endif *)) \hfill <<entry.date_string>>
|
||||||
|
|
||||||
|
((* for item in entry.highlights *))
|
||||||
|
((* if loop.first *))
|
||||||
|
\begin{highlights}
|
||||||
|
((* endif *))
|
||||||
|
\item <<item>>
|
||||||
|
((* if loop.last *))
|
||||||
|
\end{highlights}
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
|
@ -1,10 +1,15 @@
|
||||||
\cventry{
|
((* if not is_first_entry *))
|
||||||
((*- if design.show_only_years *))<<-entry.date_string_only_years->>((* else *))<<-entry.date_string->>((* endif -*))
|
\vspace{8pt}
|
||||||
}{\textbf{<<entry.company>>}}{
|
((* endif *))
|
||||||
<<-entry.position->>
|
|
||||||
}{
|
\textbf{<<entry.position>>}, <<entry.company>>((* if entry.location*)) -- <<entry.location>>((* endif *)) \hfill <<entry.date_string>>
|
||||||
<<-entry.location->>
|
|
||||||
}{}{}
|
|
||||||
((* for item in entry.highlights *))
|
((* for item in entry.highlights *))
|
||||||
\cvlistitem{<<item>>}
|
((* if loop.first *))
|
||||||
|
\begin{highlights}
|
||||||
|
((* endif *))
|
||||||
|
\item <<item>>
|
||||||
|
((* if loop.last *))
|
||||||
|
\end{highlights}
|
||||||
|
((* endif *))
|
||||||
((* endfor *))
|
((* endfor *))
|
|
@ -1,11 +1,48 @@
|
||||||
((* if cv.name is not none *))
|
((* if design.show_last_updated_date *))
|
||||||
\maketitle
|
\placelastupdatedtext
|
||||||
((* endif *))
|
((* endif *))
|
||||||
|
((* if cv.name is not none *))
|
||||||
|
\begin{header}
|
||||||
|
\fontsize{<<design.header_font_size>>}{<<design.header_font_size>>}
|
||||||
|
\textbf{<<cv.name>>}
|
||||||
|
|
||||||
|
\vspace{<<design.margins.header.vertical_between_name_and_connections>>}
|
||||||
|
|
||||||
% save the original href command in a new command:
|
\normalsize
|
||||||
\let\hrefWithoutArrow\href
|
((* if cv.phone *))
|
||||||
% new command for external links:
|
\mbox{\hrefWithoutArrow{<<cv.phone|replace("-","")>>}{\color{black}{\footnotesize\faPhone*}\hspace*{0.13cm}<<cv.phone|replace("tel:", "")|replace("-"," ")>>}}
|
||||||
\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\mbox{\color{color1} #2 \raisebox{.15ex}{\footnotesize \faExternalLink*}}}}
|
\hspace*{<<design.margins.header.horizontal_between_connections>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.email *))
|
||||||
|
\mbox{\hrefWithoutArrow{mailto:<<cv.email>>}{\color{black}{\small\faEnvelope[regular]}\hspace*{0.13cm}<<cv.email|escape_latex_characters>>}}
|
||||||
|
\hspace*{<<design.margins.header.horizontal_between_connections>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.location *))
|
||||||
|
\mbox{{\small\faMapMarker*}\hspace*{0.13cm}<<cv.location>>}
|
||||||
|
\hspace*{<<design.margins.header.horizontal_between_connections>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.website *))
|
||||||
|
\mbox{\hrefWithoutArrow{<<cv.website>>}{\color{black}{\small\faLink}\hspace*{0.13cm}<<cv.website|replace("https://","")|reverse|replace("/", "", 1)|reverse>>}}
|
||||||
|
\hspace*{<<design.margins.header.horizontal_between_connections>>}
|
||||||
|
((* endif *))
|
||||||
|
((*
|
||||||
|
set icon_dictionary = {
|
||||||
|
"LinkedIn": "\\faLinkedinIn",
|
||||||
|
"GitHub": "\\faGithub",
|
||||||
|
"Instagram": "\\faInstagram",
|
||||||
|
"Mastodon": "\\faMastodon",
|
||||||
|
"Orcid": "\\faOrcid",
|
||||||
|
}
|
||||||
|
*))
|
||||||
|
((* if cv.social_networks *))
|
||||||
|
((* for network in cv.social_networks *))
|
||||||
|
((* if network.network in icon_dictionary *))
|
||||||
|
\mbox{\hrefWithoutArrow{<<network.url>>}{\color{black}{\small<<icon_dictionary[network.network]>>}\hspace*{0.13cm}<<network.username>>}}
|
||||||
|
\hspace*{<<design.margins.header.horizontal_between_connections>>}
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
||||||
|
((* endif *))
|
||||||
|
\end{header}
|
||||||
|
|
||||||
\hypersetup{pdftitle={<<cv.name>>'s CV}}
|
\vspace{<<design.margins.header.bottom>>}
|
||||||
|
((* endif *))
|
|
@ -1,10 +1,15 @@
|
||||||
\cventry{
|
((* if not is_first_entry *))
|
||||||
((*- if design.show_only_years *))<<-entry.date_string_only_years->>((* else *))<<-entry.date_string->>((* endif -*))
|
\vspace{8pt}
|
||||||
}{
|
((* endif *))
|
||||||
<<-entry.name->>
|
|
||||||
}{
|
\textbf{<<entry.name>>}((* if entry.location *)) -- <<entry.location>>((* endif *)) \hfill <<entry.date_string>>
|
||||||
<<-entry.location->>
|
|
||||||
}{}{}{}
|
|
||||||
((* for item in entry.highlights *))
|
((* for item in entry.highlights *))
|
||||||
\cvlistitem{<<item>>}
|
((* if loop.first *))
|
||||||
|
\begin{highlights}
|
||||||
|
((* endif *))
|
||||||
|
\item <<item>>
|
||||||
|
((* if loop.last *))
|
||||||
|
\end{highlights}
|
||||||
|
((* endif *))
|
||||||
((* endfor *))
|
((* endfor *))
|
|
@ -1,2 +1,3 @@
|
||||||
|
|
||||||
\textbf{<<entry.label>>:} <<entry.details>>
|
\textbf{<<entry.label>>:} <<entry.details>>
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
\usepackage{calc} % for calculating lengths
|
\usepackage{calc} % for calculating lengths
|
||||||
\usepackage{bookmark} % for bookmarks
|
\usepackage{bookmark} % for bookmarks
|
||||||
\usepackage{lastpage} % for getting the total number of pages
|
\usepackage{lastpage} % for getting the total number of pages
|
||||||
\usepackage{charter} % for using charter font
|
% \usepackage{charter} % for using charter font
|
||||||
\usepackage{ifthen}
|
\usepackage{ifthen}
|
||||||
|
|
||||||
% Some settings:
|
% Some settings:
|
||||||
|
@ -68,18 +68,17 @@
|
||||||
\newenvironment{highlights}{
|
\newenvironment{highlights}{
|
||||||
\begin{itemize}[
|
\begin{itemize}[
|
||||||
topsep=0pt,
|
topsep=0pt,
|
||||||
parsep=<<design.margins.highlights_area.vertical_between_bullet_points>>,
|
|
||||||
partopsep=0pt,
|
partopsep=0pt,
|
||||||
itemsep=0pt,
|
itemsep=0pt,
|
||||||
after=\vspace{-1\baselineskip},
|
% after=\vspace{-1\baselineskip},
|
||||||
leftmargin=<<design.margins.highlights_area.left>> + 3pt
|
leftmargin=10pt
|
||||||
]
|
]
|
||||||
}{
|
}{
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
} % new environment for highlights
|
} % new environment for highlights
|
||||||
|
|
||||||
\newenvironment{header}{
|
\newenvironment{header}{
|
||||||
\setlength{\topsep}{0pt}\par\kern\topsep\centering\color{primaryColor}\linespread{1.5}
|
\setlength{\topsep}{0pt}\par\kern\topsep\centering\linespread{1.5}
|
||||||
}{
|
}{
|
||||||
\par\kern\topsep
|
\par\kern\topsep
|
||||||
} % new environment for the header
|
} % new environment for the header
|
||||||
|
@ -87,7 +86,7 @@
|
||||||
\newcommand{\placelastupdatedtext}{% \placetextbox{<horizontal pos>}{<vertical pos>}{<stuff>}
|
\newcommand{\placelastupdatedtext}{% \placetextbox{<horizontal pos>}{<vertical pos>}{<stuff>}
|
||||||
\AddToShipoutPictureFG*{% Add <stuff> to current page foreground
|
\AddToShipoutPictureFG*{% Add <stuff> to current page foreground
|
||||||
\put(
|
\put(
|
||||||
\LenToUnit{\paperwidth-<<design.margins.page.right>>-<<design.margins.entry_area.left_and_right>>+0.05cm},
|
\LenToUnit{\paperwidth-<<design.margins.page.right>>+0.05cm},
|
||||||
\LenToUnit{\paperheight-<<design.margins.page.top|divide_length_by(2)>>}
|
\LenToUnit{\paperheight-<<design.margins.page.top|divide_length_by(2)>>}
|
||||||
){\vtop{{\null}\makebox[0pt][c]{
|
){\vtop{{\null}\makebox[0pt][c]{
|
||||||
\small\color{gray}\textit{Last updated in <<today>>}\hspace{\widthof{Last updated in <<today>>}}
|
\small\color{gray}\textit{Last updated in <<today>>}\hspace{\widthof{Last updated in <<today>>}}
|
||||||
|
|
|
@ -1,8 +1,17 @@
|
||||||
\cventry{
|
((* if not is_first_entry *))
|
||||||
<<-entry.date_string->>
|
\vspace{8pt}
|
||||||
}{\textbf{<<entry.title>>}}{
|
((* endif *))
|
||||||
<<-entry.journal->>
|
|
||||||
}{
|
\textbf{<<entry.title>>} -- <<entry.date_string>>
|
||||||
((*- if entry.doi != "" -*))\href{<<entry.doi_url>>}{<<entry.doi>>}((*- endif -*))
|
\begin{highlights}
|
||||||
}{}{}
|
\item <<entry.authors|map("make_it_nolinebreak")|join(", ")>>
|
||||||
\cvline{}{\small <<entry.authors|map("make_it_nolinebreak")|join(", ")>>}
|
((*- if entry.doi != "" and entry.journal != "" *)) \item ((* endif -*))
|
||||||
|
((*- if entry.doi != "" -*))
|
||||||
|
\href{<<entry.doi_url>>}{<<entry.doi>>}
|
||||||
|
((*- endif -*))
|
||||||
|
((*- if entry.doi != "" and entry.journal != "" *)) (((* endif -*))
|
||||||
|
((*- if entry.journal != "" -*))
|
||||||
|
<<entry.journal>>
|
||||||
|
((*- endif -*))
|
||||||
|
((*- if entry.doi != "" and entry.journal != "" *)))((* endif -*))
|
||||||
|
\end{highlights}
|
||||||
|
|
|
@ -1 +1,6 @@
|
||||||
\cvline{}{<<entry>>}
|
((* if not is_first_entry *))
|
||||||
|
\vspace{8pt}
|
||||||
|
((* endif *))
|
||||||
|
|
||||||
|
<<entry>>
|
||||||
|
|
||||||
|
|
|
@ -1,80 +1,35 @@
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
from typing import ClassVar as NotUsedInput
|
||||||
|
|
||||||
import pydantic
|
import pydantic
|
||||||
|
|
||||||
from .. import LaTeXDimension
|
from .. import ThemeOptions, LaTeXDimension
|
||||||
|
from .. import Margins as MarginsBase
|
||||||
|
|
||||||
|
|
||||||
class ModerncvThemeOptions(pydantic.BaseModel):
|
class Margins(MarginsBase):
|
||||||
"""This class is the data model of the theme options for the moderncv theme."""
|
"""This class is a data model for the margins."""
|
||||||
|
|
||||||
model_config = pydantic.ConfigDict(extra="forbid")
|
entry_area: NotUsedInput
|
||||||
|
highlights_area: NotUsedInput
|
||||||
|
|
||||||
theme: Literal["moderncv"]
|
|
||||||
font_size: Literal["10pt", "11pt", "12pt"] = pydantic.Field(
|
class EngineeringresumesThemeOptions(ThemeOptions):
|
||||||
default="10pt",
|
"""This class is the data model of the theme options for the engineeringresumes
|
||||||
title="Font Size",
|
theme.
|
||||||
description='The font size of the CV. The default value is "10pt".',
|
"""
|
||||||
examples=["10pt", "11pt", "12pt"],
|
|
||||||
)
|
theme: Literal["engineeringresumes"]
|
||||||
page_size: Literal["a4paper", "letterpaper"] = pydantic.Field(
|
header_font_size: LaTeXDimension = pydantic.Field(
|
||||||
default="letterpaper",
|
default="25 pt",
|
||||||
title="Page Size",
|
title="Header Font 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=(
|
description=(
|
||||||
"The scale of the content with respect to the page size. The default value"
|
"The font size of the header (the name of the person). The default value is"
|
||||||
' is "0.75".'
|
" 25 pt."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
show_only_years: bool = pydantic.Field(
|
margins: Margins = pydantic.Field(
|
||||||
default=False,
|
default=Margins(),
|
||||||
title="Show Only Years",
|
title="Margins",
|
||||||
description=(
|
description="Page, section title, entry field, and highlights field margins.",
|
||||||
'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