Compare commits

..

5 commits

Author SHA1 Message Date
LLdaniel
8f6ef0e729
changes gendersymbol to pronounsymbol, adds missing emphasis to doc, removes tab in moderncvheadi.sty 2026-09-22 20:13:16 +02:00
LLdaniel
45e7d7f26e
support pronouns in other styles as well 2026-08-09 22:45:38 +02:00
LLdaniel
91f15a1cf9
use gendericon with the correct color 2026-08-09 22:45:03 +02:00
LLdaniel
282cb09675
correct compilation issue: change request of the previous PR #249 2026-08-09 21:00:44 +02:00
Mazunki Hoksaas
9e16e08831
Add support for including pronouns in header (#249)
* Add support for including pronouns in header

* Provide documentation and changelog for pronouns

pending render of manual/moderncv_userguide.pdf

* <automated> build of user guide

---------

Co-authored-by: daniel <Daniel.adlkofer@freenet.de>
2026-08-09 20:48:25 +02:00
20 changed files with 68 additions and 87 deletions

View file

@ -1,10 +1,5 @@
version next
- Upgrade to Fontawesome 7 (#270)
- Fix "Underfull \hbox (badness 10000)" warning in banking \subsection dotted
rules by adding \hss glue as in \dotfill (#307)
- Update "circle" option to allow for half-filled circles in skill matrix (#309)
- Fix "Arithmetic overflow" in cvcolumns when every column sets a width (#311)
- Treat a \cventry description containing only whitespace as empty (#312)
version 2.6.1 (24 Jun 2026)
- Allow the customisation of the contemporary style (#297)
@ -52,6 +47,7 @@ version 2.5.1 (31 Jan 2026)
- Add contemporary CV header style to cover letter, which also makes icons
visible (#186)
- Fix minor horizontal spacing issue in 'contemporary' style header
- Added optional support for specifying pronouns (#249)
version 2.4.2 (01 Feb 2025)

Binary file not shown.

View file

@ -97,7 +97,7 @@
emph={
cvitem, cventry, cvdoubleentry, cvdoubleitem, cvtripleitem, cvlistitem, cvlistdoubleitem, cvcolumns, moderncvstyle, moderncvcolor,
cvskill, cvskilllegend, cvskillplainlegend, cvskillhead, cvskillentry, nopagenumbers,
name, born, address, email, link, social, phone, homepage, extrainfo, photo, quote, section, subsection, setlength, NewDocumentCommand, definecolor, colorlet, cvitemwithcomment,
name, born, pronouns, gendericon, address, email, link, social, phone, homepage, extrainfo, photo, quote, section, subsection, setlength, NewDocumentCommand, definecolor, colorlet, cvitemwithcomment,
recipient, subject, opening, closing, signature, postscript, enclosure, makelettertitle, makeletterclosing, httplink, httpslink, emaillink
},
emphstyle={\color{cvblue}},
@ -106,7 +106,7 @@
addresssymbol, mobilephonesymbol, fixedphonesymbol, faxphonesymbol, emailsymbol, homepagesymbol, linkedinsocialsymbol,
xingsocialsymbol, twittersocialsymbol, githubsocialsymbol, gitlabsocialsymbol, mastodonsocialsymbol, codebergsocialsymbol, discordsocialsymbol, twitchsocialsymbol, youtubesocialsymbol, tiktoksocialsymbol, instagramsocialsymbol, soundcloudsocialsymbol, steamsocialsymbol, xboxsocialsymbol, playstationsocialsymbol, battlenetsocialsymbol, simplexsocialsymbol, threemasocialsymbol,
stackoverflowsocialsymbol, bitbucketsocialsymbol, skypesocialsymbol, orcidsocialsymbol, researchgatesocialsymbol, arxivsocialsymbol, inspiresocialsymbol,
researcheridsocialsymbol, telegramsocialsymbol, whatsappsocialsymbol, signalsocialsymbol, matrixsocialsymbol, googlescholarsocialsymbol, cvstretchability, bornsymbol
researcheridsocialsymbol, telegramsocialsymbol, whatsappsocialsymbol, signalsocialsymbol, matrixsocialsymbol, googlescholarsocialsymbol, cvstretchability, bornsymbol, pronounsymbol
},
emphstyle={[2]\color{cvblue!60!cvgrey}\bfseries},
literate={{é}{{\'e}}1},
@ -237,8 +237,7 @@ where at most one value for each option can be passed to the document class:
\code{legalpaper}, \code{executivepaper}, \code{landscape} \\
\textbf{\code{font family}:} & \code{sans}, \code{roman} \\
\textbf{\code{font size}:} & \code{10pt}, \code{11pt} (default), \code{12pt} \\
\textbf{\code{draft/final}:} & \code{draft}, \code{final} (default) \\
\textbf{\code{skill level symbol}:} & \code{circle}, \code{square} (default)
\textbf{\code{draft/final}:} & \code{draft}, \code{final} (default)
\end{tabular}
\subsubsection*{Choosing a \texttt{moderncv} style and color}
@ -300,6 +299,18 @@ A command for a birth date.
\born{<birth date>}
\end{lstlisting}
\paragraph{\code{\\pronouns}}
A command for your pronouns.
\begin{lstlisting}
\pronouns{<pronouns>}
\end{lstlisting}
\paragraph{\code{\\gendericon}}
A command for the icon used for your gender.
\begin{lstlisting}
\gendericon{<icon>}
\end{lstlisting}
\paragraph{\code{\\address}}
A command for a three-lined street address.
\begin{lstlisting}
@ -513,9 +524,7 @@ The required argument must be a number from 0 to 5.
\begin{lstlisting}
\cvskill{<0-5>}
\end{lstlisting}
This command can be used outside of the skill matrix, too.
If the option \code{square} (default) is passed when loading the document class, the skill level will be represented by filled and empty squares. If the option \code{circle} is passed, half-integer values ($0.5$, $1.5$, \emph{etc}) are allowed and the skill level will be represented by filled, half-filled and empty circles.
This command can be used outside of the skill matrix, too.
\paragraph{\code{\\cvskilllegend}}
A command for a legend for the skill matrix.
@ -556,7 +565,7 @@ Takes five optional arguments: post-padding width, level, skill label, years of
\paragraph{\code{\\cvskillentry}}
A command for an entry in the skill matrix.
Takes five required arguments: skill category, skill level, skill name, years of experience and a comment.
Takes five required arguments: skill category, skill level (0 to 5), skill name, years of experience and a comment.
Takes a single optional argument for the post-padding width.
\begin{lstlisting}
\cvskillentry*[<post-padding>]{<skill category>}{<0-5>}
@ -564,7 +573,6 @@ Takes a single optional argument for the post-padding width.
\end{lstlisting}
An optional asterisk toggles the inclusion of a dashed line.
\code{<post-padding>} must be a valid length like \code{1em} or \code{1ex}.
Skill level ranges from 0 to 5 with integer steps when using document class option \code{square}; or half-integer steps when using option \code{circle}.
How to make length adjustments to the skill matrix will be explained in section \ref{section:length:skillmatrix}.
@ -819,6 +827,7 @@ Currently \Moderncv supports the following commands as \code{<\\symbolcommand>}:
\item \code{\\battlenetsocialsymbol}
\item \code{\\mediumsocialsymbol}
\item \code{\\bornsymbol}
\item \code{\\pronounsymbol}
\item \code{\\arxivsocialsymbol}
\item \code{\\inspiresocialsymbol}
\item \code{\\simplexsocialsymbol}

View file

@ -224,6 +224,14 @@
% usage: \title{<title>}
\renewcommand*{\title}[1]{\def\@title{#1}}
% defines one's preferred pronouns (optional)
% usage: \pronouns{<pronouns>}
\newcommand*{\pronouns}[1]{\def\@pronouns{#1}}
% defines one's preferred gender icon (optional)
% usage: \gendericon{<gendericon>}
\newcommand*{\gendericon}[1]{\def\@gendericon{#1}}
% defines one's address (optional)
% usage: \address{<street>}{<city>}{<country>}
% where the <city> and <country> arguments can be omitted or provided empty
@ -361,6 +369,7 @@
\newcommand*{\listitemsymbol} {\labelitemi~}
\newcommand*{\addresssymbol} {}
\newcommand*{\bornsymbol} {}
\newcommand*{\pronounsymbol} {}
\newcommand*{\mobilephonesymbol} {}
\newcommand*{\fixedphonesymbol} {}
\newcommand*{\faxphonesymbol} {}
@ -676,9 +685,7 @@
% compute the width of each cvcolumn, considering a spacing of \separatorcolumnwidth and the columns with set width
\ifnum\thecvcolumnscounter>0%
\setlength{\cvcolumnswidth}{\maincolumnwidth-\value{cvcolumnscounter}\separatorcolumnwidth+\separatorcolumnwidth}%
% only share the remaining width if some columns have no explicit width, to avoid a division by zero ("Arithmetic overflow") when all have one
\ifnum\value{cvcolumnsautowidthcounter}>0%
\setlength{\cvcolumnautowidth}{\cvcolumnswidth*\ratio{\cvcolumnsautowidth}{\cvcolumnsdummywidth}/\value{cvcolumnsautowidthcounter}}\fi\fi%
\setlength{\cvcolumnautowidth}{\cvcolumnswidth*\ratio{\cvcolumnsautowidth}{\cvcolumnsdummywidth}/\value{cvcolumnsautowidthcounter}}\fi%
% pre-aggregate the tabular definition, heading and content (required before creating the tabular, as the tabular environment doesn't like loops --- probably because "&" generates a \endgroup)
% - the tabular definition is the aggregation of the different "\cvcolumn<i>@def" (by default "p{\cvcolumnautowidth}"), separated by "@{\hspace*{\separatorcolumnwidth}}"
% - the tabular heading is the aggregation of the different "\cvcolumn<i>@head", separated by "&"

View file

@ -132,7 +132,7 @@
\ifthenelse{\equal{#5}{}}{}{, #5}%
\ifthenelse{\equal{#6}{}}{}{, #6}%
\strut%
\ifblank{#7}{\@tempswatrue}{\@tempswafalse}\if@tempswa%
\ifx&#7&%
\else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}}
\@initializebox{\cvitemwithcommentbox}

View file

@ -139,13 +139,13 @@
\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{\hss\scriptsize.\hss}\hfill\kern0pt}}\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}
\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{\hss\scriptsize.\hss}\hfill\kern0pt}}\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}}
\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{\hss\scriptsize.\hss}\hfill\kern0pt}}\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}}
\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
@ -190,7 +190,7 @@
{{\bfseries #4} & {\bfseries #5}\\}%
{\itshape #3\ifstrempty{#6}{}{, #6}} & {\itshape #2}\\%
\end{tabular*}%
\ifblank{#7}{\@tempswatrue}{\@tempswafalse}\if@tempswa%
\ifx&#7&%
\else{\\%
\begin{minipage}{\maincolumnwidth}%
\small#7%

View file

@ -129,7 +129,7 @@
.\strut}%
\usebox{\cventryyearbox}%
\end{minipage}\strut%
\ifblank{#7}{\@tempswatrue}{\@tempswafalse}\if@tempswa%
\ifx&#7&%
\else{%
\newline{}%
\strut%

View file

@ -159,7 +159,7 @@
\ifthenelse{\equal{#6}{}}{}{, #6}%
.\strut}%
\usebox{\cventryyearbox}}%
\ifblank{#7}{\@tempswatrue}{\@tempswafalse}\if@tempswa%
\ifx&#7&%
\else%
\vspace*{-4pt}%
\cvitem[#1]{}{\small#7}\fi}

View file

@ -138,7 +138,7 @@
\ifthenelse{\equal{#5}{}}{}{, #5}%
\ifthenelse{\equal{#6}{}}{}{, #6}%
\strut%
\ifblank{#7}{\@tempswatrue}{\@tempswafalse}\if@tempswa%
\ifx&#7&%
\else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}}
\@initializebox{\cvitemwithcommentbox}

View file

@ -86,6 +86,7 @@
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtofoot[~--~]{\@addresscountry}}%
\flushfoot\@firstfootelementtrue\\}%
\ifthenelse{\isundefined{\@born}}{}{\addtofoot{\bornsymbol\@born}\flushfoot\@firstfootelementtrue\\}%
\ifthenelse{\isundefined{\@pronouns}}{}{\addtofoot{\pronounsymbol\@pronouns}\flushfoot\@firstfootelementtrue\\}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtofoot{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtofoot{\emailsymbol\emaillink{\@email}}}%

View file

@ -86,6 +86,7 @@
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
\ifthenelse{\isundefined{\@born}}{}{\makenewline\bornsymbol\@born}%
\ifthenelse{\isundefined{\@pronouns}}{}{\makenewline\pronounsymbol\@pronouns}%
\phonesdetails% needs to be pre-rendered as loops and tabulars seem to conflict
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
\ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol%

View file

@ -141,6 +141,7 @@
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
\flushmakeheaddetails\@firstmakeheaddetailselementtrue\\\null}%
\ifthenelse{\isundefined{\@born}}{}{\addtomakeheaddetails{\bornsymbol\@born}}%
\ifthenelse{\isundefined{\@pronouns}}{}{\addtomakeheaddetails{\pronounsymbol\@pronouns}}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%

View file

@ -94,6 +94,7 @@
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
\flushmakeheaddetails\@firstmakeheaddetailselementtrue\\}%
\ifthenelse{\isundefined{\@born}}{}{\addtomakeheaddetails{\bornsymbol\@born}}%
\ifthenelse{\isundefined{\@pronouns}}{}{\addtomakeheaddetails{\pronounsymbol\@pronouns}}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%

View file

@ -110,6 +110,7 @@
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
\ifthenelse{\isundefined{\@born}}{}{\makenewline\hbox to 1.0em{\bornsymbol}~\@born}%
\ifthenelse{\isundefined{\@pronouns}}{}{\makenewline\hbox to 1.0em{\pronounsymbol}~\@pronouns}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\hbox to 1.0em{\csname\collectionloopkey phonesymbol\endcsname}~\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\hbox to 1.0em{\emailsymbol}~\emaillink{\@email}}%

View file

@ -82,6 +82,7 @@
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and \addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
\ifthenelse{\isundefined{\@born}}{}{\makenewline\bornsymbol~\@born}%
\ifthenelse{\isundefined{\@pronouns}}{}{\makenewline\pronounsymbol~\@pronouns}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\makenewline\csname\collectionloopkey phonesymbol\endcsname~\collectionloopitem}%
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol~\emaillink{\@email}}%

View file

@ -115,6 +115,7 @@
\ifthenelse{\equal{\@addresscountry}{}}{}{\addtomakeheaddetails[~--~]{\@addresscountry}}%
\flushmakeheaddetails\@firstmakeheaddetailselementtrue\\\null}%
\ifthenelse{\isundefined{\@born}}{}{\addtomakeheaddetails{\bornsymbol\@born}}%
\ifthenelse{\isundefined{\@pronouns}}{}{\addtomakeheaddetails{\pronounsymbol\@pronouns}}%
\collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number
\addtomakeheaddetails{\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}%
\ifthenelse{\isundefined{\@email}}{}{\addtomakeheaddetails{\emailsymbol\emaillink{\@email}}}%

View file

@ -98,6 +98,7 @@
\ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty
\ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}%
\ifthenelse{\isundefined{\@born}}{}{\makenewline\bornsymbol\@born}%
\ifthenelse{\isundefined{\@pronouns}}{}{\makenewline\pronounsymbol\@pronouns}%
\phonesdetails% needs to be pre-rendered as loops and tabulars seem to conflict
\ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}%
\ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}%

View file

@ -55,6 +55,7 @@
\providecolor{playstation}{named}{default-socialicon-color}
\providecolor{battlenet}{named}{default-socialicon-color}
\providecolor{born}{named}{default-socialicon-color}
\providecolor{gender}{named}{default-socialicon-color}
\providecolor{signal}{named}{default-socialicon-color}
\providecolor{medium}{named}{default-socialicon-color}
@ -104,8 +105,10 @@
% \renewcommand*{\arxivsocialsymbol} {{\color{arxiv}{\small\faIcon{arxiv}}}~}
% No inspire icon in fontawesome6 (v6.7.2-3) or fontawesome7 (v7.1.0-1)
% \renewcommand*{\inspiresocialsymbol} {{\color{inspire}{\small\faIcon{inspire}}}~}
\def\@gendericon{\faNeuter}
\renewcommand*{\pronounsymbol} {{\color{gender}\small\@gendericon}~}
\renewcommand*{\bornsymbol} {{\color{born}\raisebox{.5ex}{\tiny\faIcon{asterisk}}}~} % alternative: \faIcon{baby-carriage}
\renewcommand*{\mediumsocialsymbol} {{\color{medium}\small\faIcon{medium}}~}
\renewcommand*{\mediumsocialsymbol} {{\color{medium}\small\faIcon{medium}}~}
\endinput

View file

@ -219,7 +219,6 @@
\DeclareOption{moderncvbodyv}{\@moderncvbodyifalse\@moderncvbodyiifalse\@moderncvbodyiiifalse\@moderncvbodyivfalse\@moderncvbodyvtrue}
% If option `circle` is specified, use circles instead of small rectangles for rating skills
% This option also allows for half-filled circles
\@initializeif{\if@cvskillcircle}\@cvskillcirclefalse
\DeclareOption{circle}{\@cvskillcircletrue}
@ -238,72 +237,33 @@
% %-------------------------------------------------------------------------------
% % \cvskill command
% %-------------------------------------------------------------------------------
% The code for the Skilllevel illustration with the little boxes (or circles).
% The code for the Skilllevel illustration with the little boxes.
% This is idea stolen from the limecv package, see https://github.com/opieters/limecv.git
\@initializelength{\cvSkill@ShapeSize}
\if@cvskillcircle%
\setlength{\cvSkill@ShapeSize}{.8ex}%
\newcommand*\cvSkill@FullCircle[1][\cvSkill@ShapeSize]{%
\tikz\filldraw[skillmatrixfullcolor] (0,0) circle (#1);%
}
\newcommand*\cvSkill@HalfCircle[1][\cvSkill@ShapeSize]{%
\tikz{%
\fill[skillmatrixfullcolor] (0,0) -- (90:#1) arc (90:270:#1) -- cycle;%
\fill[skillmatrixemptycolor] (0,0) -- (-90:#1) arc (-90:90:#1) -- cycle;%
}%
}
\newcommand*\cvSkill@EmptyCircle[1][\cvSkill@ShapeSize]{%
\tikz\filldraw[skillmatrixemptycolor] (0,0) circle (#1);%
}
\setlength{\cvSkill@ShapeSize}{.7ex}%
\def\cvSkill@Shape#1{\tikz\filldraw[#1] (0, 0) circle (\cvSkill@ShapeSize);}
\else
\setlength{\cvSkill@ShapeSize}{1.2ex}
\def\cvSkill@Shape#1{\tikz\filldraw[#1] (0, 0) rectangle (\cvSkill@ShapeSize, \cvSkill@ShapeSize);}
\fi
\newcount\my@repeat@count
\DeclareDocumentCommand{\cvskill}{m}{%
% Illustrate skill level with little colored boxes.
% By default five skill levels are predefined.
% Option "circle" replaces the boxes by circles
%
% Input:
% integer between 0 and 5
% Example usage:
% \cvskill{3} gives 3 filled boxes or circles and 2 empty
% \cvskill{3.5} gives 3 and a half filled circles and 1 and a half empty (only with option "circle")
\begingroup
\if@cvskillcircle%
\pgfmathtruncatemacro{\full}{floor(#1)}% number of full circles
\pgfmathparse{(#1-\full) > 0.01 ? 1 : 0}%
\let\half\pgfmathresult% number of half circles
\pgfmathtruncatemacro{\empty}{5-\full-\half}% number of empty circles
\ifnum\full>0%
\foreach \z in {1,...,\full}%
{\cvSkill@FullCircle\,}%
\fi%
\ifnum\pgfmathresult=1%
{\cvSkill@HalfCircle\,}%
\fi%
\ifnum\empty>0%
\foreach \z in {1,...,\empty}%
{\cvSkill@EmptyCircle\,}%
\fi%
\else
% Only full boxes
\newcount\my@repeat@count
\my@repeat@count=\z@
\@whilenum\my@repeat@count<#1\do{%
\cvSkill@Shape{skillmatrixfullcolor}%
\advance\my@repeat@count\@ne\,%
}%
\my@repeat@count=\numexpr5-\z@\relax
\@whilenum\my@repeat@count>#1\do{%
\cvSkill@Shape{skillmatrixemptycolor}%
\advance\my@repeat@count\m@ne\,%
}%
\fi
\endgroup
% \cvskill{3}
\begingroup
\my@repeat@count=\z@
\@whilenum\my@repeat@count<#1\do{\cvSkill@Shape{skillmatrixfullcolor}\advance%
\my@repeat@count\@ne\,}%
\my@repeat@count=\numexpr5-\z@\relax
\@whilenum\my@repeat@count>#1\do{\cvSkill@Shape{skillmatrixemptycolor}\advance%
\my@repeat@count\m@ne\,}%
\endgroup
}% end \cvskill
% %-------------------------------------------------------------------------------

View file

@ -6,7 +6,7 @@
% available at http://www.latex-project.org/lppl/.
\documentclass[11pt,a4paper,sans]{moderncv} % possible options include font size ('10pt', '11pt' (default) and '12pt'), paper size ('a4paper' (default), 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape'), font family ('sans' and 'roman'), draft state ('draft', 'final' (default)) and skill level symbol ('circle', 'square' (default))
\documentclass[11pt,a4paper,sans]{moderncv} % possible options include font size ('10pt', '11pt' and '12pt'), paper size ('a4paper', 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape') and font family ('sans' and 'roman')
\moderncvcolor{cerulean} % color options 'black', 'blue' (default), 'burgundy', 'green', 'grey', 'orange', 'purple' and 'red'; for contemporary style use 'cerulean'
% moderncv themes
@ -56,6 +56,8 @@
\name{John}{Doe}
\title{Résumé title} % optional, remove / comment the line if not wanted
\born{4 July 1776} % optional, remove / comment the line if not wanted
\pronouns{they/them} % optional, remove / comment the line if not wanted
\gendericon{\faNeuter} % optional, remove / comment the line if not wanted
\address{street and number}{postcode city}{country}% optional, remove / comment the line if not wanted; the "postcode city" and "country" arguments can be omitted or provided empty
\phone[mobile]{+1~(234)~567~890} % optional, remove / comment the line if not wanted; the optional "type" of the phone can be "mobile" (default), "fixed" or "fax"
\phone[fixed]{+2~(345)~678~901}
@ -200,7 +202,7 @@ Detailed achievements:
% \setcvskilllegendcolumns[\widthof{``Legend''}][0.45]
% \setcvskilllegendcolumns[0ex][0.46]% this is useful for the banking style
%% Add a legend if you are using \cvskill{<0-5>} command or \cvskillentry
%% Add a legend if you are using \cvskill{<1-5>} command or \cvskillentry
%% Usage \cvskilllegend[*][<post_padding>][<first_level>][<second_level>][<third_level>][<fourth_level>][<fifth_level>]{<name>}
% \cvskilllegend % insert default legend without lines
\cvskilllegend*[1em]{}% adjust post spacing
@ -227,13 +229,9 @@ Detailed achievements:
\cvskillentry{}{2}{Lilypond}{14}{So much sheet music! Man, I'm the best!}
\cvskillentry{}{3}{\LaTeX}{14}{Clearly I rock at \LaTeX}
\cvskillentry*{OS:}{3}{Linux}{2}{I only use Archlinux btw}% notice the use of the starred command and the optional
%\cvskillentry{}{4.5}{AmigaOS}{20}{I've been developing games most of my life}% Half-integer skill level possible when using document class option 'circle' (default in contemporary style)
\cvskillentry*[1em]{Methods}{4}{SCRUM}{8}{SCRUM master for 5 years}
% \cvskill{<0-5>} command
\cvitem{\textbackslash{cvskill}:}{Skills can be visually expressed outside the skill matrix by the \textbackslash{cvskill} command, e.g.
\cvskill{2}
%\cvskill{3.5} half-integer skill levels are possible only when using document class option 'circle' (default in contemporary style)
}
%% \cvskill{<0-5>} command
% \cvitem{\textbackslash{cvskill}:}{Skills can be visually expressed by the \textbackslash{cvskill} command, e.g. \cvskill{2}}
\section{Interests}
\cvitem{hobby 1}{Description}