From 867761fc49c4971608223a74d6c2ed288b4c87a5 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 19 Jan 2021 19:43:33 +0100 Subject: [PATCH] introduce \setcvskillcolumns to adjust the cvskill matrix columns --- moderncvskillmatrix.sty | 106 ++++++++++++++++++++++++++-------------- template.tex | 8 +-- 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/moderncvskillmatrix.sty b/moderncvskillmatrix.sty index 42f98e6..431be66 100644 --- a/moderncvskillmatrix.sty +++ b/moderncvskillmatrix.sty @@ -75,6 +75,7 @@ \@initializelength{\skillmatrix@commentwidth} \@initializelength{\skillmatrix@commentpadding} \@initializelength{\skillmatrix@hintscolumnwidth} +\@initializelength{\skillmatrix@bodylength} \@initializelength{\skilllegend@hintscolumnwidth} % \separatorrulewidth is defined in moderncvbodyv.sty and we need to % define it to not throw an error in the other cases @@ -96,10 +97,11 @@ \setlength{\skilllegend@hintscolumnwidth}{\hintscolumnwidth} \setlength{\cvskill@width}{\widthof{\cvSkill{5}}} \setlength{\cvskill@experiencewidth}{\widthof{``Jahre''}} - \setlength{\skillmatrix@columnwidth}{0.45\maincolumnwidth}% + \setlength{\skillmatrix@bodylength}{\maincolumnwidth} + \setlength{\skillmatrix@columnwidth}{0.45\skillmatrix@bodylength}% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} - \setlength{\skillmatrix@commentwidth}{\maincolumnwidth-\skillmatrix@columnwidth-\skillmatrix@commentpadding}% - \setlength{\cvskilllegend@descriptorwidth}{0.5\maincolumnwidth-\cvskill@width-\skillmatrix@commentpadding} + \setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-\skillmatrix@commentpadding}% + \setlength{\cvskilllegend@descriptorwidth}{0.5\skillmatrix@bodylength-\cvskill@width-\skillmatrix@commentpadding} } \fi @@ -111,7 +113,6 @@ \setlength{\skilllegend@hintscolumnwidth}{\skillmatrix@hintscolumnwidth}% \setlength{\cvskill@width}{\widthof{\cvSkill{5}}} \setlength{\cvskill@experiencewidth}{\widthof{``Jahre''}} - \@initializelength{\skillmatrix@bodylength} \setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\separatorcolumnwidth} \setlength{\skillmatrix@columnwidth}{0.45\skillmatrix@bodylength}% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} @@ -128,7 +129,6 @@ \setlength{\skilllegend@hintscolumnwidth}{0ex}%\skillmatrix@hintscolumnwidth \setlength{\cvskill@width}{\widthof{\cvSkill{5}}} \setlength{\cvskill@experiencewidth}{\widthof{``Jahre''}} - \@initializelength{\skillmatrix@bodylength} \setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\separatorcolumnwidth} \setlength{\skillmatrix@columnwidth}{0.45\skillmatrix@bodylength}% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} @@ -144,7 +144,6 @@ \setlength{\skilllegend@hintscolumnwidth}{\skillmatrix@hintscolumnwidth} \setlength{\cvskill@width}{\widthof{\cvSkill{5}}} \setlength{\cvskill@experiencewidth}{\widthof{``Jahre''}} - \@initializelength{\skillmatrix@bodylength} \setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\skillmatrix@commentpadding}%\skillmatrix@hintscolumnwidth \setlength{\skillmatrix@columnwidth}{0.45\skillmatrix@bodylength}% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} @@ -153,49 +152,82 @@ } \fi -% command to adjust the width of the first colum of the skillmatrix -% and the colum 3rd (Skill) column. It takes two optional arguments. -% \skillMatrixColumnWidth[][], where is a length smaller than -% \textwidth and 0 < < 1 is a factor influencing the width of the skill column, -% aka \skillmatrix@columnwidth -\DeclareDocumentCommand{\skillMatrixColumnWidth}{+O{} +O{}}{}% -\RenewDocumentCommand{\skillMatrixColumnWidth}{+O{\skillmatrix@hintscolumnwidth} +O{0.45}}{ - \def\arg@new@hintscolumnwidth{#1}% - \def\arg@new@bodyLengthFactor{#2}% - % Check for empty arguments. Defaults are given. Thus a call of \skillMatrixColumnWidth +% command to adjust the width of the first colum of the skillmatrix, +% the colum 3rd (Skill) column as well as the Experience column (Years). +% It takes three optional arguments. +% \setcvskillcolumns[][][], where is a length smaller than +% \textwidth and 0 < < 1 is a factor influencing the width of the skill column, % aka \skillmatrix@columnwidth +% and is a width smaller than \textwidth resetting the width (\cvskill@experiencewidth) of the years column. +\DeclareDocumentCommand{\setcvskillcolumns}{+O{} +O{} +O{}}{}% +\RenewDocumentCommand{\setcvskillcolumns}{+O{\skillmatrix@hintscolumnwidth} +O{0.45} +O{\cvskill@experiencewidth}}{% + \def\arg@new@hintscolumnwidth{#1}% <-- all these terminal % signs are necessary for the fancy style to not show weird spaces!!! + \def\arg@new@bodyLengthFactor{#2}% + \def\arg@new@experienceWidth{#3}% + % Check for empty arguments. Defaults are given. Thus a call of \setcvskillcolumns % without any arguments leads to nonempty arguments \arg@new@hintscolumnwidth and % \def\arg@new@bodyLengthFactor{#2}. However, we need to take care of calls like - % \skillMatrixColumnWidth[], \skillMatrixColumnWidth[][] or even - % \skillMatrixColumnWidth[][] \skillMatrixColumnWidth[][] + % \setcvskillcolumns[], \setcvskillcolumns[][], \setcvskillcolumns[][][] or even + % \setcvskillcolumns[][], \setcvskillcolumns[][] \setcvskillcolumns[][][] \ifdefempty{\arg@new@hintscolumnwidth}{% - % Case \skillMatrixColumnWidth[], \skillMatrixColumnWidth[][] or \skillMatrixColumnWidth[][] - \ifdefempty{\arg@new@bodyLengthFactor}{ - % Case \skillMatrixColumnWidth[][] do nothing here and use default - % \skillmatrix@columnwidth + % Case \setcvskillcolumns[], \setcvskillcolumns[][] or \setcvskillcolumns[][] + \ifdefempty{\arg@new@bodyLengthFactor}{% + % Case \setcvskillcolumns[][] do nothing here and check if third argument is empty + \ifdefempty{\arg@new@experienceWidth}{% + % Case \setcvskillcolumns[][][] do nothing here + }{% + % Case \setcvskillcolumns[][][]. reset \cvskill@experiencewidth and + % \cvskill@descriptorwidth accordingly + \setlength{\cvskill@experiencewidth}{\arg@new@experienceWidth}% + \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% + }% }{% - % Case \skillMatrixColumnWidth[][] + % Case \setcvskillcolumns[][], \setcvskillcolumns[][][] \setlength{\skillmatrix@columnwidth}{\arg@new@bodyLengthFactor\skillmatrix@bodylength}% - } - % Case \skillMatrixColumnWidth[] and recalculate lengths affected by the change - \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} - \setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-\skillmatrix@commentpadding}% + \ifdefempty{\arg@new@experienceWidth}{% + % Case \setcvskillcolumns[][][] do nothing here + }{% + % Case \setcvskillcolumns[][][]. reset \cvskill@experiencewidth and + % \cvskill@descriptorwidth accordingly + \setlength{\cvskill@experiencewidth}{\arg@new@experienceWidth}% + \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% + }% + \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% + \setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-\skillmatrix@commentpadding}% + }% + % Case \setcvskillcolumns[] nothing needs to be done here recalculate lengths affected by the change }{% - % Case \skillMatrixColumnWidth, \skillMatrixColumnWidth[], \skillMatrixColumnWidth[][] - % or \skillMatrixColumnWidth[][] + % Case \setcvskillcolumns, \setcvskillcolumns[], \setcvskillcolumns[][] + % or \setcvskillcolumns[][] \setlength{\skillmatrix@hintscolumnwidth}{\arg@new@hintscolumnwidth}% - \setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\separatorcolumnwidth} + \setlength{\skillmatrix@bodylength}{\maincolumnwidth-\skillmatrix@hintscolumnwidth-\separatorcolumnwidth}% % in case second argument is given but left empty use default - \ifdefempty{\arg@new@bodyLengthFactor}{ - % Case \skillMatrixColumnWidth[][] do nothing here and use default - % \skillmatrix@columnwidth + \ifdefempty{\arg@new@bodyLengthFactor}{% + % Case \setcvskillcolumns[][] do nothing here and use default + % \skillmatrix@columnwidth and check third argument + \ifdefempty{\arg@new@experienceWidth}{% + % Case \setcvskillcolumns[][][] do nothing here + }{% + % Case \setcvskillcolumns[][][]. reset \cvskill@experiencewidth and + % \cvskill@descriptorwidth accordingly + \setlength{\cvskill@experiencewidth}{\arg@new@experienceWidth}% +% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% + }% }{% - % Case \skillMatrixColumnWidth, \skillMatrixColumnWidth[], \skillMatrixColumnWidth[][] + % Case \setcvskillcolumns, \setcvskillcolumns[], \setcvskillcolumns[][] \setlength{\skillmatrix@columnwidth}{\arg@new@bodyLengthFactor\skillmatrix@bodylength}% - } - \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth} + \ifdefempty{\arg@new@experienceWidth}{% + % Case \setcvskillcolumns[][][] do nothing here + }{% + % Case \setcvskillcolumns[][][]. reset \cvskill@experiencewidth and + % \cvskill@descriptorwidth accordingly + \setlength{\cvskill@experiencewidth}{\arg@new@experienceWidth}% +% \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% + }% + }% + \setlength{\cvskill@descriptorwidth}{\skillmatrix@columnwidth-\cvskill@width-\cvskill@experiencewidth}% \setlength{\skillmatrix@commentwidth}{\skillmatrix@bodylength-\skillmatrix@columnwidth-\skillmatrix@commentpadding}% }% -} +}% % %------------------------------------------------------------------------------- % % \cvSkillMatrixLegend diff --git a/template.tex b/template.tex index 87179d4..021ffb7 100644 --- a/template.tex +++ b/template.tex @@ -9,7 +9,7 @@ \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') % moderncv themes -\moderncvstyle{banking} % style options are 'casual' (default), 'classic', 'banking', 'oldstyle' and 'fancy' +\moderncvstyle{classic} % style options are 'casual' (default), 'classic', 'banking', 'oldstyle' and 'fancy' \moderncvcolor{blue} % color options 'black', 'blue' (default), 'burgundy', 'green', 'grey', 'orange', 'purple' and 'red' %\renewcommand{\familydefault}{\sfdefault} % to set the default font; use '\sfdefault' for the default sans serif font, '\rmdefault' for the default roman one, or any tex font name %\nopagenumbers{} % uncomment to suppress automatic page numbering for CVs longer than one page @@ -110,9 +110,11 @@ Detailed achievements:% \cvitemwithcomment{Language 3}{Skill level}{Comment} \section{Computer skills} -\skillMatrixColumnWidth[3em][] +\setcvskillcolumns[][0.45][\widthof{``Year''}]% +% \setcvskillcolumns[\widthof{``Languag''}][0.48][] +% \setcvskillcolumns[\widthof{``Languag''}]% % % Add a legend if you are usng \cvSkill{<1-5>} commant -\cvSkillMatrixLegend*[1em]{} %Optional add a Legend descriptor or a star for dashed lines. +\cvSkillMatrixLegend*[1em]{}% %Optional add a Legend descriptor or a star for dashed lines. % \cvSkillMatrixLegend*{Legend} \cvdoubleitem{Languages}{\cvSkill{1}, Bash, 2 years}{category 4}{XXX, YYY, ZZZ} \cvdoubleitem{category 2}{XXX, YYY, ZZZ}{category 5}{XXX, YYY, ZZZ}