mirror of https://github.com/eyhc1/rendercv.git
finalize sb2nov theme
This commit is contained in:
parent
0a4583dce0
commit
945a33a176
|
@ -0,0 +1,12 @@
|
||||||
|
\resumeSubheading
|
||||||
|
{<<entry.institution>>}{<<entry.location>>}
|
||||||
|
{((* if entry.degree *))<<entry.degree>> in ((* endif *))<<entry.area>>}{<<entry.date_string>>}
|
||||||
|
((* for item in entry.highlights *))
|
||||||
|
((* if loop.first *))
|
||||||
|
\resumeItemListStart
|
||||||
|
((* endif *))
|
||||||
|
\resumeItem{}{<<item>>}
|
||||||
|
((* if loop.last *))
|
||||||
|
\resumeItemListEnd
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
|
@ -0,0 +1,12 @@
|
||||||
|
\resumeSubheading
|
||||||
|
{<<entry.company>>}{<<entry.location>>}
|
||||||
|
{<<entry.position>>}{<<entry.date_string>>}
|
||||||
|
((* for item in entry.highlights *))
|
||||||
|
((* if loop.first *))
|
||||||
|
\resumeItemListStart
|
||||||
|
((* endif *))
|
||||||
|
\resumeItem{}{<<item>>}
|
||||||
|
((* if loop.last *))
|
||||||
|
\resumeItemListEnd
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
|
@ -0,0 +1,42 @@
|
||||||
|
\begin{center}
|
||||||
|
\textbf{\Huge \scshape <<cv.name>>} \\ \vspace{3pt}
|
||||||
|
\small
|
||||||
|
|
||||||
|
((* if cv.phone *))
|
||||||
|
\mbox{\href{<<cv.phone|replace("-","")>>}{{\footnotesize\faPhone*}\hspace{4pt}<<cv.phone|replace("tel:", "")|replace("-"," ")>>}}
|
||||||
|
\hspace{<<design.space_between_connection_objects>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.email *))
|
||||||
|
\mbox{\href{mailto:<<cv.email>>}{{\small\faEnvelope[regular]}\hspace{4pt}<<cv.email>>}}
|
||||||
|
\hspace{<<design.space_between_connection_objects>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.location *))
|
||||||
|
\mbox{{\small\faMapMarker*}\hspace{4pt}<<cv.location>>}
|
||||||
|
\hspace{<<design.space_between_connection_objects>>}
|
||||||
|
((* endif *))
|
||||||
|
((* if cv.website *))
|
||||||
|
\mbox{\href{<<cv.website>>}{{\small\faLink}\hspace{4pt}<<cv.website|replace("https://","")|reverse|replace("/", "", 1)|reverse>>}}
|
||||||
|
\hspace{<<design.space_between_connection_objects>>}
|
||||||
|
((* endif *))
|
||||||
|
((*
|
||||||
|
set icon_dictionary = {
|
||||||
|
"LinkedIn": "\\faLinkedinIn",
|
||||||
|
"GitHub": "\\faGithub",
|
||||||
|
"Instagram": "\\faInstagram",
|
||||||
|
"Mastodon": "\\faMastodon",
|
||||||
|
}
|
||||||
|
*))
|
||||||
|
((* if cv.social_networks *))
|
||||||
|
((* for network in cv.social_networks *))
|
||||||
|
((* if network.network in icon_dictionary *))
|
||||||
|
\mbox{\href{<<network.url>>}{{\small<<icon_dictionary[network.network]>>}\hspace{4pt}<<network.username>>}}
|
||||||
|
\hspace{<<design.space_between_connection_objects>>}
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
||||||
|
((* endif *))
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
% save the original href command in a new command:
|
||||||
|
\let\hrefWithoutArrow\href
|
||||||
|
% new command for external links:
|
||||||
|
\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\mbox{#2 \raisebox{.15ex}{\footnotesize \faExternalLink*}}}}
|
|
@ -0,0 +1,11 @@
|
||||||
|
\resumeNormalSubheading
|
||||||
|
{<<entry.name>>}{((* if entry.date_string == "" *))<<entry.location>>((* else *))<<entry.date_string>>((* endif *))}
|
||||||
|
((* for item in entry.highlights *))
|
||||||
|
((* if loop.first *))
|
||||||
|
\resumeItemListStart
|
||||||
|
((* endif *))
|
||||||
|
\resumeItem{}{<<item>>}
|
||||||
|
((* if loop.last *))
|
||||||
|
\resumeItemListEnd
|
||||||
|
((* endif *))
|
||||||
|
((* endfor *))
|
|
@ -0,0 +1,2 @@
|
||||||
|
\resumeSubItem{<<entry.name>>}
|
||||||
|
{<<entry.details>>}
|
|
@ -17,6 +17,9 @@
|
||||||
\usepackage{fancyhdr}
|
\usepackage{fancyhdr}
|
||||||
\usepackage[english]{babel}
|
\usepackage[english]{babel}
|
||||||
\usepackage{tabularx}
|
\usepackage{tabularx}
|
||||||
|
\usepackage{ifthen}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage{fontawesome5}
|
||||||
\input{glyphtounicode}
|
\input{glyphtounicode}
|
||||||
|
|
||||||
\pagestyle{fancy}
|
\pagestyle{fancy}
|
||||||
|
@ -46,34 +49,40 @@
|
||||||
% Ensure that generate pdf is machine readable/ATS parsable
|
% Ensure that generate pdf is machine readable/ATS parsable
|
||||||
\pdfgentounicode=1
|
\pdfgentounicode=1
|
||||||
|
|
||||||
|
\setlist{rightmargin=5pt}
|
||||||
|
|
||||||
|
\newcolumntype{R}[1]{
|
||||||
|
>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}
|
||||||
|
} % right-aligned fixed width column type
|
||||||
|
|
||||||
%-------------------------
|
%-------------------------
|
||||||
% Custom commands
|
% Custom commands
|
||||||
\newcommand{\resumeItem}[2]{
|
\newcommand{\resumeItem}[2]{
|
||||||
\item\small{
|
\item\small{
|
||||||
\textbf{#1}{: #2 \vspace{-2pt}}
|
\ifthenelse{\equal{#1}{}}{#2 \vspace{-2pt}}{\textbf{#1}{: #2 \vspace{-2pt}}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
% Just in case someone needs a heading that does not need to be in a list
|
% Just in case someone needs a heading that does not need to be in a list
|
||||||
\newcommand{\resumeHeading}[4]{
|
|
||||||
\begin{tabular*}{0.99\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
||||||
\textbf{#1} & #2 \\
|
|
||||||
\textit{\small#3} & \textit{\small #4} \\
|
|
||||||
\end{tabular*}\vspace{-5pt}
|
|
||||||
}
|
|
||||||
|
|
||||||
\newcommand{\resumeSubheading}[4]{
|
\newcommand{\resumeSubheading}[4]{
|
||||||
\vspace{-1pt}\item
|
\vspace{-1pt}\item
|
||||||
\begin{tabular*}{0.97\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
\begin{tabularx}{0.97\textwidth}[t]{X R{4.1cm}}
|
||||||
\textbf{#1} & #2 \\
|
\textbf{#1} & \textit{\small\ifthenelse{\equal{#2}{}}{#4}{#2}} \\
|
||||||
\textit{\small#3} & \textit{\small #4} \\
|
\textit{\small#3} & \textit{\small\ifthenelse{\equal{#2}{}}{}{#4}} \\
|
||||||
\end{tabular*}\vspace{-5pt}
|
\end{tabularx}\vspace{-5pt}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\resumeNormalSubheading}[2]{
|
||||||
|
\vspace{-1pt}\item
|
||||||
|
\begin{tabularx}{0.97\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
||||||
|
\textbf{#1} & \textit{\small #2}
|
||||||
|
\end{tabularx}\vspace{-5pt}
|
||||||
}
|
}
|
||||||
|
|
||||||
\newcommand{\resumeSubSubheading}[2]{
|
\newcommand{\resumeSubSubheading}[2]{
|
||||||
\begin{tabular*}{0.97\textwidth}{l@{\extracolsep{\fill}}r}
|
\begin{tabularx}{0.97\textwidth}{l@{\extracolsep{\fill}}r}
|
||||||
\textit{\small#1} & \textit{\small #2} \\
|
\textit{\small#1} & \textit{\small #2} \\
|
||||||
\end{tabular*}\vspace{-5pt}
|
\end{tabularx}\vspace{-5pt}
|
||||||
}
|
}
|
||||||
|
|
||||||
\newcommand{\resumeSubItem}[2]{\resumeItem{#1}{#2}\vspace{-4pt}}
|
\newcommand{\resumeSubItem}[2]{\resumeItem{#1}{#2}\vspace{-4pt}}
|
||||||
|
@ -83,4 +92,4 @@
|
||||||
\newcommand{\resumeSubHeadingListStart}{\begin{itemize}[leftmargin=*]}
|
\newcommand{\resumeSubHeadingListStart}{\begin{itemize}[leftmargin=*]}
|
||||||
\newcommand{\resumeSubHeadingListEnd}{\end{itemize}}
|
\newcommand{\resumeSubHeadingListEnd}{\end{itemize}}
|
||||||
\newcommand{\resumeItemListStart}{\begin{itemize}}
|
\newcommand{\resumeItemListStart}{\begin{itemize}}
|
||||||
\newcommand{\resumeItemListEnd}{\end{itemize}\vspace{-5pt}}
|
\newcommand{\resumeItemListEnd}{\end{itemize}\vspace{-5pt}}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
\resumeSubheading
|
||||||
|
{<<entry.title>>}{<<entry.date_string>>}
|
||||||
|
{\href{<<entry.doi_url>>}{<<entry.doi>>}}{}
|
||||||
|
\resumeItemListStart
|
||||||
|
\resumeItem{}{<<entry.authors|map("abbreviate_name")|map("make_it_nolinebreak")|join(", ")|make_it_bold(cv.name|abbreviate_name)|make_it_italic(cv.name|abbreviate_name)>>}
|
||||||
|
\resumeItemListEnd
|
|
@ -0,0 +1,2 @@
|
||||||
|
\section{<<section_title>>}
|
||||||
|
\resumeSubHeadingListStart
|
|
@ -0,0 +1 @@
|
||||||
|
\resumeSubHeadingListEnd
|
|
@ -0,0 +1 @@
|
||||||
|
\resumeSubItem{}{<<entry>>}
|
|
@ -17,70 +17,59 @@ class Sb2novThemeOptions(pydantic.BaseModel):
|
||||||
model_config = pydantic.ConfigDict(extra="forbid")
|
model_config = pydantic.ConfigDict(extra="forbid")
|
||||||
|
|
||||||
theme: Literal["sb2nov"]
|
theme: Literal["sb2nov"]
|
||||||
|
|
||||||
font_size: Literal["10pt", "11pt", "12pt"] = pydantic.Field(
|
font_size: Literal["10pt", "11pt", "12pt"] = pydantic.Field(
|
||||||
default="10pt",
|
default="10pt",
|
||||||
title="Font Size",
|
title="Font Size",
|
||||||
description='The font size of the CV. The default value is "10pt".',
|
description="The font size of the CV. It can be 10pt, 11pt, or 12pt.",
|
||||||
examples=["10pt", "11pt", "12pt"],
|
|
||||||
)
|
)
|
||||||
page_size: Literal["a4paper", "letterpaper"] = pydantic.Field(
|
page_size: Literal["a4paper", "letterpaper"] = pydantic.Field(
|
||||||
default="a4paper",
|
default="a4paper",
|
||||||
title="Page Size",
|
title="Page Size",
|
||||||
description='The page size of the CV. The default value is "a4paper".',
|
description="The page size of the CV. It can be a4paper or letterpaper.",
|
||||||
examples=["a4paper", "letterpaper"],
|
|
||||||
)
|
)
|
||||||
color: (
|
disable_page_numbering: bool = pydantic.Field(
|
||||||
Literal["blue"]
|
default=False,
|
||||||
| Literal["black"]
|
title="Disable Page Numbering",
|
||||||
| Literal["burgundy"]
|
description=(
|
||||||
| Literal["green"]
|
"If this option is set to true, then the page numbering will be disabled."
|
||||||
| 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(
|
date_and_location_width: LaTeXDimension = pydantic.Field(
|
||||||
default="3.8 cm",
|
default="4.1 cm",
|
||||||
validate_default=True,
|
|
||||||
title="Date and Location Column Width",
|
title="Date and Location Column Width",
|
||||||
description='The width of the date column. The default value is "3.8 cm".',
|
description="The width of the date and location column.",
|
||||||
)
|
)
|
||||||
content_scale: float = pydantic.Field(
|
space_between_connection_objects: LaTeXDimension = pydantic.Field(
|
||||||
default=0.75,
|
default="0.5 cm",
|
||||||
title="Content Scale",
|
title="Space Between Connection Objects",
|
||||||
description=(
|
description=(
|
||||||
"The scale of the content with respect to the page size. The default value"
|
"The space between the connection objects (like phone, email, and website)."
|
||||||
' is "0.75".'
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
show_only_years: bool = pydantic.Field(
|
text_alignment: Literal["left-aligned", "justified"] = pydantic.Field(
|
||||||
default=False,
|
default="left-aligned",
|
||||||
title="Show Only Years",
|
title="Text Alignment",
|
||||||
|
description="The alignment of the text.",
|
||||||
|
)
|
||||||
|
show_timespan_in: list[str] = pydantic.Field(
|
||||||
|
default=[],
|
||||||
|
title="Show Time Span in These Sections",
|
||||||
description=(
|
description=(
|
||||||
'If "True", only the years will be shown in the date column. The default'
|
"The time span will be shown in the date and location column in these"
|
||||||
' value is "False".'
|
" sections. The input should be a list of strings."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
disable_page_numbers: bool = pydantic.Field(
|
show_last_updated_date: bool = pydantic.Field(
|
||||||
default=False,
|
default=True,
|
||||||
title="Disable Page Numbers",
|
title="Show Last Updated Date",
|
||||||
description=(
|
description=(
|
||||||
'If "True", the page numbers will be disabled. The default value is'
|
"If this option is set to true, then the last updated date will be shown"
|
||||||
' "False".'
|
" in the header."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
header_font_size: LaTeXDimension = pydantic.Field(
|
||||||
|
default="30 pt",
|
||||||
|
title="Header Font Size",
|
||||||
|
description="The font size of the header (the name of the person).",
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue