diff --git a/dwcv/_extension.yml b/dwcv/_extension.yml new file mode 100644 index 0000000..0855684 --- /dev/null +++ b/dwcv/_extension.yml @@ -0,0 +1,14 @@ +title: dwcv +author: Ming Su +version: 1.1.0 +quarto-required: ">=1.3.0" +contributes: + formats: + pdf: + filters: + - styles.lua + - para.lua + template-partials: + - partials/biblio.tex + template: template.tex + diff --git a/dwcv/para.lua b/dwcv/para.lua new file mode 100644 index 0000000..4e59f29 --- /dev/null +++ b/dwcv/para.lua @@ -0,0 +1,5 @@ +Para = function(para) + table.insert(para.content, 1, pandoc.RawInline('tex', "\\cvtext{%\n")) + table.insert(para.content, pandoc.RawInline('tex', "}\n")) + return para +end diff --git a/dwcv/partials/biblio.tex b/dwcv/partials/biblio.tex new file mode 100644 index 0000000..f5629c7 --- /dev/null +++ b/dwcv/partials/biblio.tex @@ -0,0 +1,5 @@ +$if(bibliography)$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ +$endif$ \ No newline at end of file diff --git a/dwcv/styles.lua b/dwcv/styles.lua new file mode 100644 index 0000000..c91e866 --- /dev/null +++ b/dwcv/styles.lua @@ -0,0 +1,4 @@ +function Header(el) + local cv = pandoc.RawInline('latex', '\\cvsection{' .. pandoc.utils.stringify(el.content) .. '} \\vspace{4pt}') + return cv +end diff --git a/dwcv/template.tex b/dwcv/template.tex new file mode 100644 index 0000000..ea1b1f2 --- /dev/null +++ b/dwcv/template.tex @@ -0,0 +1,583 @@ + +%-----------------------------------------------------------------------------------------------------------------------------------------------% +% The MIT License (MIT) +% +% Copyright (c) 2019 Jan Küster +% +% Permission is hereby granted, free of charge, to any person obtaining a copy +% of this software and associated documentation files (the "Software"), to deal +% in the Software without restriction, including without limitation the rights +% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +% copies of the Software, and to permit persons to whom the Software is +% furnished to do so, subject to the following conditions: +% +% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +% THE SOFTWARE. +% +% +%-----------------------------------------------------------------------------------------------------------------------------------------------% + + +%============================================================================% +% +% DOCUMENT DEFINITION +% +%============================================================================% + +\documentclass[10pt,A4,english]{article} + + +%---------------------------------------------------------------------------------------- +% ENCODING +%---------------------------------------------------------------------------------------- + +% we use utf8 since we want to build from any machine +\usepackage[utf8]{inputenc} +\usepackage[USenglish]{isodate} +\usepackage{fancyhdr} +% \usepackage[numbers]{natbib} + +%---------------------------------------------------------------------------------------- +% LOGIC +%---------------------------------------------------------------------------------------- + +% provides \isempty test +\usepackage{xstring, xifthen} +\usepackage{enumitem} +\usepackage[english]{babel} +\usepackage{blindtext} +\usepackage{pdfpages} +\usepackage{changepage} +%---------------------------------------------------------------------------------------- +% FONT BASICS +%---------------------------------------------------------------------------------------- + +% some tex-live fonts - choose your own +\usepackage[default]{$cvfont$} + +% set font default +\renewcommand*\familydefault{\sfdefault} +\usepackage[T1]{fontenc} + +% more font size definitions +\usepackage{moresize} + +%---------------------------------------------------------------------------------------- +% FONT AWESOME ICONS +%---------------------------------------------------------------------------------------- + +% include the fontawesome icon set +\usepackage{fontawesome5} + +% use to vertically center content +% credits to: http://tex.stackexchange.com/questions/7219/how-to-vertically-center-two-images-next-to-each-other +\newcommand{\vcenteredinclude}[1]{\begingroup +\setbox0=\hbox{\includegraphics{#1}}% +\parbox{\wd0}{\box0}\endgroup} +\newcommand{\tab}[1]{\hspace{.2\textwidth}\rlap{#1}} +% use to vertically center content +% credits to: http://tex.stackexchange.com/questions/7219/how-to-vertically-center-two-images-next-to-each-other +\newcommand*{\vcenteredhbox}[1]{\begingroup +\setbox0=\hbox{#1}\parbox{\wd0}{\box0}\endgroup} + +% icon shortcut +\newcommand{\icon}[2] { + \makebox(#2, #2){\textcolor{maincol}{\textcolor{maincol}{\faIcon{#1}}}} +} + + +% icon with text shortcut +\newcommand{\icontext}[3]{ + \vcenteredhbox{\icon{#1}{#2}} \hspace{2pt} \parbox{0.9\mpwidth}{\textcolor{black}{#3}} +} + +% icon with website url +\newcommand{\iconhref}[4]{ + \vcenteredhbox{\icon{#1}{#2}} \hspace{2pt} \href{#4}{\textcolor{black}{#3}} +} + +% icon with email link +\newcommand{\iconemail}[5]{ + \vcenteredhbox{\icon{#1}{#2}{#5}} \hspace{2pt} \href{mailto:#4}{\textcolor{#5}{#3}} +} + +%---------------------------------------------------------------------------------------- +% PAGE LAYOUT DEFINITIONS +%---------------------------------------------------------------------------------------- + +% page outer frames (debug-only) +% \usepackage{showframe} + +% we use paracol to display breakable two columns +\usepackage{paracol} +\usepackage{tikzpagenodes} +\usetikzlibrary{calc} +\usepackage{lmodern} +\usepackage{multicol} +\usepackage{lipsum} +\usepackage{atbegshi} +% define page styles using geometry +\usepackage[a4paper]{geometry} + +% remove all possible margins +\geometry{top=1cm, bottom=1cm, left=1cm, right=1cm} + +\usepackage{fancyhdr} +\pagestyle{empty} + +% space between header and content +% \setlength{\headheight}{0pt} + +% indentation is zero +\setlength{\parindent}{0mm} + +%---------------------------------------------------------------------------------------- +% TABLE /ARRAY DEFINITIONS +%---------------------------------------------------------------------------------------- + +% extended aligning of tabular cells +\usepackage{array} + +% custom column right-align with fixed width +% use like p{size} but via x{size} +\newcolumntype{x}[1]{% +>{\raggedleft\hspace{0pt}}p{#1}}% + + +%---------------------------------------------------------------------------------------- +% GRAPHICS DEFINITIONS +%---------------------------------------------------------------------------------------- + +%for header image +\usepackage{graphicx} + +% use this for floating figures +% \usepackage{wrapfig} +% \usepackage{float} +% \floatstyle{boxed} +% \restylefloat{figure} + +%for drawing graphics +\usepackage{tikz} +\usepackage{ragged2e} +\usetikzlibrary{shapes, backgrounds,mindmap, trees} + +%---------------------------------------------------------------------------------------- +% Bibliography +%---------------------------------------------------------------------------------------- +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newlength{\cslentryspacingunit} % times entry-spacing +\setlength{\cslentryspacingunit}{\parskip} +\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing + {% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \let\oldpar\par + \def\par{\hangindent=\cslhangindent\oldpar} + \fi + % set entry spacing + \setlength{\parskip}{#2\cslentryspacingunit} + }% + {} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ + +$if(biblio-config)$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +%---------------------------------------------------------------------------------------- +% Color DEFINITIONS +%---------------------------------------------------------------------------------------- +\usepackage{transparent} +\usepackage{color} + +% primary color +\definecolor{maincol}{HTML}{$cvcolor.main$} + +% accent color, secondary +% \definecolor{accentcol}{RGB}{ 250, 150, 10 } + +% dark color +\definecolor{darkcol}{RGB}{ 70, 70, 70 } + +% light color +\definecolor{lightcol}{RGB}{245,245,245} + +\definecolor{accentcol}{HTML}{$cvcolor.accent$} + + + +% Package for links, must be the last package used +\usepackage[hidelinks]{hyperref} + +% returns minipage width minus two times \fboxsep +% to keep padding included in width calculations +% can also be used for other boxes / environments +\newcommand{\mpwidth}{\linewidth-\fboxsep-\fboxsep} + + + +%============================================================================% +% +% CV COMMANDS +% +%============================================================================% + +%---------------------------------------------------------------------------------------- +% CV LIST +%---------------------------------------------------------------------------------------- + +% renders a standard latex list but abstracts away the environment definition (begin/end) +\newcommand{\cvlist}[1] { + \begin{itemize}{#1}\end{itemize} +} + +%---------------------------------------------------------------------------------------- +% CV TEXT +%---------------------------------------------------------------------------------------- + +% base class to wrap any text based stuff here. Renders like a paragraph. +% Allows complex commands to be passed, too. +% param 1: *any +\newcommand{\cvtext}[1] { + \begin{tabular*}{1\mpwidth}{p{0.98\mpwidth}} + \parbox{1\mpwidth}{#1} + \end{tabular*} +} +\newcommand{\cvtextsmall}[1] { + \begin{tabular*}{0.8\mpwidth}{p{0.8\mpwidth}} + \parbox{0.8\mpwidth}{#1} + \end{tabular*} +} +%---------------------------------------------------------------------------------------- +% CV SECTION +%---------------------------------------------------------------------------------------- + +% Renders a a CV section headline with a nice underline in main color. +% param 1: section title +\newlength{\barw} +\newcommand{\cvsection}[1] { + \vspace{14pt} + \settowidth{\barw}{\textbf{\LARGE #1}} + \cvtext{ + \textbf{\LARGE{\textcolor{darkcol}{#1}}}\\[-4pt] + \textcolor{accentcol}{ \rule{\barw}{1.5pt} } \\ + } +} + +\newcommand{\cvsubsection}[1] { + \vspace{14pt} + \settowidth{\barw}{\textbf{\Large #1}} + \cvtext{ + \textbf{\Large{\textcolor{darkcol}{#1}}}\\[-4pt] + \textcolor{accentcol}{ \rule{\barw}{1.5pt} } \\ + } +} + +\newcommand{\cvheadline}[1] { + \vspace{16pt} + \cvtext{ + \textbf{\Huge{\textcolor{accentcol}{#1}}}\\[-4pt] + + } +} + +\newcommand{\cvsubheadline}[1] { + \vspace{16pt} + \cvtext{ + \textbf{\huge{\textcolor{darkcol}{#1}}}\\[-4pt] + + } +} +%---------------------------------------------------------------------------------------- +% META KEYWorDS +%---------------------------------------------------------------------------------------- + +% Renders a progress-bar to indicate a certain skill in percent. +% param 1: name of the skill / tech / etc. +% param 2: level (for example in years) +% param 3: percent, values range from 0 to 1 +\newcommand{\cvkeywords}[3] { + \begin{tabular*}{1\mpwidth}{p{0.72\mpwidth} r} + \textcolor{black}{\textbf{#1}} & \textcolor{maincol}{#2}\\ + \end{tabular*}% + + \hspace{4pt} + \begin{tikzpicture}[scale=1,rounded corners=2pt,very thin] + \fill [lightcol] (0,0) rectangle (1\mpwidth, 0.15); + \fill [accentcol] (0,0) rectangle (#3\mpwidth, 0.15); + \end{tikzpicture}% +} + +%---------------------------------------------------------------------------------------- +% META SKILL +%---------------------------------------------------------------------------------------- + +% Renders a progress-bar to indicate a certain skill in percent. +% param 1: name of the skill / tech / etc. +% param 2: level (for example in years) +% param 3: percent, values range from 0 to 1 +\newcommand{\cvskill}[3] { + \begin{tabular*}{1\mpwidth}{p{0.72\mpwidth} r} + \textcolor{black}{\textbf{#1}} & \textcolor{maincol}{#2}\\ + \end{tabular*}% + + \hspace{4pt} + \begin{tikzpicture}[scale=1,rounded corners=2pt,very thin] + \fill [lightcol] (0,0) rectangle (1\mpwidth, 0.15); + \fill [accentcol] (0,0) rectangle (#3\mpwidth, 0.15); + \end{tikzpicture}% +} + + +%---------------------------------------------------------------------------------------- +% CV EVENT +%---------------------------------------------------------------------------------------- + +% Renders a table and a paragraph (cvtext) wrapped in a parbox (to ensure minimum content +% is glued together when a pagebreak appears). +% Additional Information can be passed in text or list form (or other environments). +% the work you did +% param 1: time-frame i.e. Sep 14 - Jan 15 etc. +% param 2: event name (job position etc.) +% param 3: Customer, Employer, Industry +% param 4: Short description +% param 5: work done (optional) +% param 6: technologies include (optional) +% param 7: achievements (optional) +\newcommand{\cvevent}[4] { + + % we wrap this part in a parbox, so title and description are not separated on a pagebreak + % if you need more control on page breaks, remove the parbox + \parbox{\mpwidth}{ + \begin{tabular*}{1\mpwidth}{p{0.66\mpwidth} r} + \textcolor{black}{\textbf{#2}} & \colorbox{accentcol}{\makebox[0.32\mpwidth]{\textcolor{white}{\textbf{#1}}}} \\ + \textcolor{maincol}{#3} & \\ + \end{tabular*}\\[1pt] + + \ifthenelse{\isempty{#4}}{}{ + \cvtext{#4}\\ + } + } + \vspace{14pt} +} + +\newcommand{\cvproj}[4] { + + % we wrap this part in a parbox, so title and description are not separated on a pagebreak + % if you need more control on page breaks, remove the parbox + \parbox{\mpwidth}{ + \begin{tabular*}{1\mpwidth}{p{0.66\mpwidth} r} + \textcolor{black}{\textbf{#2, #4}} & \colorbox{accentcol}{\makebox[0.32\mpwidth]{\textcolor{white}{\textbf{#1}}}} \\ + \textcolor{maincol}{#3} & \\ + \end{tabular*} + + } + \vspace{14pt} +} +\newcommand{\cvaward}[4] { + + % we wrap this part in a parbox, so title and description are not separated on a pagebreak + % if you need more control on page breaks, remove the parbox + \parbox{\mpwidth}{ + \begin{tabular*}{1\mpwidth}{p{0.66\mpwidth} r} + \textcolor{black}{\textbf{#2, #4}} & \colorbox{accentcol}{\makebox[0.32\mpwidth]{\textcolor{white}{\textbf{#1}}}} \\ + \textcolor{maincol}{#3} & \\ + \end{tabular*} + + } + \vspace{14pt} +} + +%---------------------------------------------------------------------------------------- +% CV META EVENT +%---------------------------------------------------------------------------------------- + +% Renders a CV event on the sidebar +% param 1: title +% param 2: subtitle (optional) +% param 3: customer, employer, etc,. (optional) +% param 4: info text (optional) +\newcommand{\cvmetaevent}[4] { + \textcolor{maincol} { \cvtext{\textbf{\begin{flushleft}#1\end{flushleft}}}} + + \ifthenelse{\isempty{#2}}{}{ + \textcolor{black} {\cvtext{\textbf{#2}} } + } + + \ifthenelse{\isempty{#3}}{}{ + \cvtext{{ \textcolor{maincol} {#3} }}\\ + } + + \cvtext{#4}\\[14pt] +} + +%--------------------------------------------------------------------------------------- +% QR CODE +%---------------------------------------------------------------------------------------- + +% Renders a qrcode image (centered, relative to the parentwidth) +% param 1: percent width, from 0 to 1 +\newcommand{\cvqrcode}[1] { + \begin{center} + \includegraphics[width={#1}\mpwidth]{qrcode} + \end{center} +} + + +% HEADER AND FOOOTER +%==================================== +\newcommand\Header[1]{% +\begin{tikzpicture}[remember picture,overlay] +\fill[accentcol] + (current page.north west) -- (current page.north east) -- + ([yshift=50pt]current page.north east|-current page text area.north east) -- + ([yshift=50pt,xshift=-3cm]current page.north|-current page text area.north) -- + ([yshift=10pt,xshift=-5cm]current page.north|-current page text area.north) -- + ([yshift=10pt]current page.north west|-current page text area.north west) -- cycle; +\node[font=\sffamily\bfseries\color{white},anchor=west, + xshift=0.7cm,yshift=-0.32cm] at (current page.north west) + {\fontsize{12}{12}\selectfont {#1}}; +\end{tikzpicture}% +} + +\newcommand\Footer[1]{% +\begin{tikzpicture}[remember picture,overlay] +\fill[lightcol] + (current page.south east) -- (current page.south west) -- + ([yshift=-80pt]current page.south east|-current page text area.south east) -- + ([yshift=-80pt,xshift=-6cm]current page.south|-current page text area.south) -- + ([xshift=-2.5cm,yshift=-10pt]current page.south|-current page text area.south) -- + ([yshift=-10pt]current page.south east|-current page text area.south east) -- cycle; +\node[yshift=0.32cm,xshift=9cm] at (current page.south) {\fontsize{10}{10}\selectfont \textbf{\thepage}}; +\end{tikzpicture}% +} + + +%===================================== +%============================================================================% +% +% +% +% DOCUMENT CONTENT +% +% +% +%============================================================================% +\begin{document} + +\columnratio{0.31} +\setlength{\columnsep}{2.2em} +\setlength{\columnseprule}{4pt} +\colseprulecolor{white} + + +% LEBENSLAUF HIERE +\AtBeginShipoutFirst{\Header{CV}\Footer{1}} +\AtBeginShipout{\AtBeginShipoutAddToBox{\Header{CV}\Footer{2}}} + +\newpage + +\colseprulecolor{lightcol} +\columnratio{0.31} +\setlength{\columnsep}{2.2em} +\setlength{\columnseprule}{4pt} +\begin{paracol}{2} + \begin{leftcolumn} + %--------------------------------------------------------------------------------------- + % META IMAGE + %---------------------------------------------------------------------------------------- + $if(sidebar.image)$ + \includegraphics[width=\linewidth]{$sidebar.image$} + $endif$ + \fcolorbox{white}{white}{\begin{minipage}[c][1.5cm][c]{1\mpwidth} + \Large{\textbf{\textcolor{maincol}{$author$ ($jobtitle$)}}} \\[2pt] + \Large{ \textbf{\textcolor{maincol}{@$institute$}}} + \end{minipage}}\\[4pt] + + + $if(sidebar.area)$ + \cvsection{Research Area} + + \large{$sidebar.area$} \\[2pt] + $endif$ + + %--------------------------------------------------------------------------------------- + % META SKILLS + %---------------------------------------------------------------------------------------- + $for(sidebar.bullets)$ + \icontext{caret-right}{12}{$it$}\\[6pt] + $endfor$ + + $for(sidebar.sections)$ + + \cvsection{$sidebar.sections.name$} + + $for(sidebar.sections.items)$ + $if(sidebar.sections.items.exp)$ + \cvskill{$sidebar.sections.items.text$}{$sidebar.sections.items.exp.text$}{$sidebar.sections.items.exp.num$} \\[10pt] + $elseif(sidebar.sections.items.inst)$ + \cvmetaevent{$sidebar.sections.items.time$}{$sidebar.sections.items.text$}{$sidebar.sections.items.inst$}{$sidebar.sections.items.details$} + $elseif(sidebar.sections.items.href)$ + \iconhref{$sidebar.sections.items.icon$}{16}{$sidebar.sections.items.text$}{$sidebar.sections.items.href$}\\[6pt] + $elseif(sidebar.sections.items.icon)$ + \icontext{$sidebar.sections.items.icon$}{16}{$sidebar.sections.items.text$}\\[6pt] + $else$ + \icontext{caret-right}{12}{$it$}\\[6pt] + $endif$ + $endfor$ + $endfor$ + + \cvsection{Welcome} + + $if(sidebar.recruitmentad)$ + \textcolor{maincol}{$sidebar.recruitmentad$}\\[6pt] + $endif$ + + $if(sidebar.contact)$ + \includegraphics[width=0.9\linewidth]{$sidebar.contact$} + $endif$ + + $if(sidebar.wechat)$ + \includegraphics[width=0.9\linewidth]{$sidebar.wechat$} + $endif$ + + + \cvtext{Updated on $sidebar.updatetime$.} + + \end{leftcolumn} + + \begin{rightcolumn} + $body$ + $biblio.tex()$ + \end{rightcolumn} +\end{paracol} + + +\end{document} diff --git a/dwinst/cover1.pdf b/dwinst/cover1.pdf new file mode 100644 index 0000000..9111c08 Binary files /dev/null and b/dwinst/cover1.pdf differ diff --git a/dwinst/cover2.pdf b/dwinst/cover2.pdf new file mode 100644 index 0000000..7b8b2a1 Binary files /dev/null and b/dwinst/cover2.pdf differ diff --git a/dwinst/cover3.pdf b/dwinst/cover3.pdf new file mode 100644 index 0000000..4bc55bf Binary files /dev/null and b/dwinst/cover3.pdf differ diff --git a/dwinst/cover4.pdf b/dwinst/cover4.pdf new file mode 100644 index 0000000..2eaf27f Binary files /dev/null and b/dwinst/cover4.pdf differ diff --git a/dwinst/covers.pdf b/dwinst/covers.pdf new file mode 100644 index 0000000..845d1f0 Binary files /dev/null and b/dwinst/covers.pdf differ diff --git a/dwinst/signms.pdf b/dwinst/signms.pdf new file mode 100644 index 0000000..8b9afc3 Binary files /dev/null and b/dwinst/signms.pdf differ diff --git a/dwinst/signmy.pdf b/dwinst/signmy.pdf new file mode 100644 index 0000000..cbf0425 Binary files /dev/null and b/dwinst/signmy.pdf differ