moderncv/moderncvbodyiii.sty

235 lines
10 KiB
TeX

%% start of file `moderncvbodyiii.sty'.
%% Copyright 2006-2015 Xavier Danaux (xdanaux@gmail.com), 2020-2024 moderncv maintainers (github.com/moderncv).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.
%-------------------------------------------------------------------------------
% identification
%-------------------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{moderncvbodyiii}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 3]
% rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules"
\@initializeif{\if@fullrules}\@fullrulesfalse
\DeclareOption{fullrules} {\@fullrulestrue\@shortrulesfalse\@mixedrulesfalse\@norulesfalse}
\@initializeif{\if@shortrules}\@shortrulesfalse
\DeclareOption{shortrules}{\@fullrulesfalse\@shortrulestrue\@mixedrulesfalse\@norulesfalse}
\@initializeif{\if@mixedrules}\@mixedrulesfalse
\DeclareOption{mixedrules}{\@fullrulesfalse\@shortrulesfalse\@mixedrulestrue\@norulesfalse}
\@initializeif{\if@norules}\@norulesfalse
\DeclareOption{norules} {\@fullrulesfalse\@shortrulesfalse\@mixedrulesfalse\@norulestrue}
% section alignment options: "left" (default), "center" or "right"
\@initializeif{\if@left}\@leftfalse
\DeclareOption{left} {\@lefttrue\@centerfalse\@rightfalse}
\@initializeif{\if@center}\@centerfalse
\DeclareOption{center} {\@leftfalse\@centertrue\@rightfalse}
\@initializeif{\if@right}\@rightfalse
\DeclareOption{right} {\@leftfalse\@centerfalse\@righttrue}
\DeclareOption*{}% avoid choking on unknown options
\ExecuteOptions{mixedrules,left}
\ProcessOptions*\relax% \ProcessOptions* processes the options in the order provided (i.e., with the later ones possibly overriding the former ones), while \ProcessOptions processes them in the order of the package
%-------------------------------------------------------------------------------
% required packages
%-------------------------------------------------------------------------------
% provides the commands for the skillmatrix as well as the command
% \recompute@cvskillmatrix@lengths
\RequirePackage[moderncvbodyiii]{moderncvskillmatrix}
%-------------------------------------------------------------------------------
% overall body definition
%-------------------------------------------------------------------------------
% fonts
\renewcommand*{\sectionfont}{%
\if@norules%
\Large\bfseries\scshape%
\else%
\Large\bfseries\upshape\fi}
\renewcommand*{\subsectionfont}{%
\if@norules%
\large\mdseries\itshape%
\else%
\large\upshape\fontseries{sb}\selectfont\fi}
\renewcommand*{\hintfont}{\bfseries}
% styles
\renewcommand*{\sectionstyle}[1]{{%
\if@center\centering\else%
\if@right\raggedleft\fi\fi%
\sectionfont\textcolor{sectioncolor}{#1}%
\if@shortrules\else%
\par\fi}}
\renewcommand*{\subsectionstyle}[1]{{%
\if@center\centering\else%
\if@right\raggedleft\fi\fi%
\subsectionfont\textcolor{subsectioncolor}{#1}%
\if@shortrules\else\if@mixedrules\else%
\par\fi\fi}}
\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{hintstylecolor}{#1}}}
%-------------------------------------------------------------------------------
% resume body definition
%-------------------------------------------------------------------------------
% lengths
% used by \cvitem (and all children command)
\@initializelength{\hintscolumnwidth} \setlength{\hintscolumnwidth}{0.3\textwidth}
\@initializelength{\separatorcolumnwidth} \setlength{\separatorcolumnwidth}{0.025\textwidth}
\@initializelength{\maincolumnwidth}
% used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth}
% used by \cvtripleitem
\@initializelength{\tripleitemcolumnwidth}
% used by \cvlistitem
\@initializelength{\listitemsymbolwidth} \settowidth{\listitemsymbolwidth}{\listitemsymbol}
\@initializelength{\listitemcolumnwidth}
% used by \cvlistdoubleitem
\@initializelength{\listdoubleitemcolumnwidth}
\@initializelength{\listitemsymbolspace} \setlength{\listitemsymbolspace}{0pt}
% commands
\renewcommand*{\recomputecvbodylengths}{%
% body lengths
\setlength{\maincolumnwidth}{\textwidth-\leftskip-\rightskip}%
\setlength{\listitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}%
\setlength{\doubleitemcolumnwidth}{\maincolumnwidth-\separatorcolumnwidth}%
\setlength{\doubleitemcolumnwidth}{0.5\doubleitemcolumnwidth}%
\setlength{\tripleitemcolumnwidth}{\maincolumnwidth-2\separatorcolumnwidth}%
\setlength{\tripleitemcolumnwidth}{0.33\tripleitemcolumnwidth}%
\setlength{\listdoubleitemcolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}%
\setlength{\listdoubleitemcolumnwidth}{0.5\listdoubleitemcolumnwidth}%
\recompute@cvskillmatrix@lengths
% regular lengths
\setlength{\parskip}{0\p@}}
\RenewDocumentCommand{\section}{sm}{%
\par\addvspace{2.5ex}%
\phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{section}{#2}%
\if@left\else\if@fullrules\else\if@mixedrules\else%
\sectionrule\fi\fi\fi%
\strut\sectionstyle{#2}%
\if@fullrules%
\sectionrule%
\else\if@mixedrules%
\sectionrule%
\else\if@right\else%
\sectionrule\fi\fi\fi%
\par\nobreak\addvspace{1ex}\@afterheading}
\RenewDocumentCommand{\subsection}{sm}{%
\par\addvspace{1ex}%
\phantomsection{}%
\addcontentsline{toc}{subsection}{#2}%
\if@left\else\if@fullrules\else%
\subsectionrule\fi\fi%
\strut\subsectionstyle{#2}%
\if@fullrules%
\subsectionrule%
\else\if@right\else%
\subsectionrule\fi\fi%
\par\nobreak\addvspace{0.5ex}\@afterheading}
\newcommand*{\sectionrule}{}
\newcommand*{\subsectionrule}{}
\if@fullrules%
\renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
\renewcommand*{\subsectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}
\if@shortrules%
\renewcommand*{\sectionrule}{\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
\renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@mixedrules%
\renewcommand*{\sectionrule}{\par\nobreak\vspace*{-.7\baselineskip}\leavevmode{\color{bodyrulecolor}\leaders\hbox{\rule{1pt}{0.4pt}}\hfill\kern0pt}}
\renewcommand*{\subsectionrule}{\leavevmode{\color{bodyrulecolor}\xleaders\hbox to 0.35em{\scriptsize.}\hfill}}\fi% different subsectionrules will not be perfectly aligned, but remaining space at the end of the fill will be distributed evenly between leaders, so it will be barely visible}}
\if@norules%
\renewcommand*{\sectionrule}{}
\renewcommand*{\subsectionrule}{}\fi
\renewcommand*{\cvitem}[3][.25em]{%
\ifstrempty{#2}{}{\hintstyle{#2}: }{#3}%
\par\addvspace{#1}}
\renewcommand*{\cvdoubleitem}[5][.25em]{%
\begin{minipage}[t]{\doubleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\doubleitemcolumnwidth}\ifstrempty{#4}{}{\hintstyle{#4}: }#5\end{minipage}%
\par\addvspace{#1}}
\renewcommand*{\cvtripleitem}[7][.1em]{%
\begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#2}: #3\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\tripleitemcolumnwidth}\hintstyle{#4}: #5\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\tripleitemcolumnwidth}\ifstrempty{#6}{}{\hintstyle{#6}: }#7\end{minipage}%
\par\addvspace{#1}}
\renewcommand*{\cvlistitem}[2][.25em]{%
\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\par\addvspace{#1}}
\renewcommand*{\cvlistdoubleitem}[3][.25em]{%
\cvitem[#1]{}{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#2\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\ifstrempty{#3}%
{}%
{\listitemsymbol\hspace{\listitemsymbolspace}\begin{minipage}[t]{\listdoubleitemcolumnwidth-\listitemsymbolspace}#3\end{minipage}}}}
\renewcommand*{\cventry}[7][.25em]{
\begin{tabular*}{\maincolumnwidth}{l@{\extracolsep{\fill}}r}%
% skip the company name and location line if both are empty, allowing one to show multiple roles within the same company without repeating it
\ifboolexpr{%
test {\ifstrempty{#4}}
and
test {\ifstrempty{#5}}}%
{}%
{{\bfseries #4} & {\bfseries #5}\\}%
{\itshape #3\ifstrempty{#6}{}{, #6}} & {\itshape #2}\\%
\end{tabular*}%
\ifx&#7&%
\else{\\%
\begin{minipage}{\maincolumnwidth}%
\small#7%
\end{minipage}}\fi%
\par\addvspace{#1}}
\@initializebox{\cvitemwithcommentmainbox}
\@initializelength{\cvitemwithcommentmainlength}
\@initializelength{\cvitemwithcommentcommentlength}
\renewcommand*{\cvitemwithcomment}[4][.25em]{%
\savebox{\cvitemwithcommentmainbox}{\ifstrempty{#2}{}{\hintstyle{#2}: }#3}%
\setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}%
\setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}%
\begin{minipage}[t]{\cvitemwithcommentmainlength}\usebox{\cvitemwithcommentmainbox}\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}%
\par\addvspace{#1}}
%-------------------------------------------------------------------------------
% letter style definition
%-------------------------------------------------------------------------------
% commands
\renewcommand*{\recomputeletterbodylengths}{%
\recomputecvbodylengths%
\setlength{\parskip}{6\p@}}
\renewcommand*{\makeletterclosing}{%
\@closing\ifthenelse{\isundefined{\@signature}}{\\[3em]}{\\[1em]}% shrink space when signature is set
\ifthenelse{\isundefined{\@signature}}{}{{\@signature\\}}
{\bfseries\@firstname~\@lastname}%
\ifthenelse{\isundefined{\@enclosure}}{}{%
\\%
\vfil%
{\color{letterclosingcolor}\itshape\enclname: \@enclosure}}%
\vfil}
\endinput
%% end of file `moderncvbodyiii.sty'.