fix issue #69: compensating wrong (sub)section spacing with negative vspace

This commit is contained in:
LLdaniel 2024-03-25 23:17:46 +01:00
commit d88a8cf436

View file

@ -44,6 +44,8 @@
\@initializelength{\separatorcolumnwidth} \setlength{\separatorcolumnwidth}{0.025\textwidth} \@initializelength{\separatorcolumnwidth} \setlength{\separatorcolumnwidth}{0.025\textwidth}
\@initializelength{\separatorrulewidth} \setlength{\separatorrulewidth}{1.2\p@}% \@initializelength{\separatorrulewidth} \setlength{\separatorrulewidth}{1.2\p@}%
\@initializelength{\maincolumnwidth} \@initializelength{\maincolumnwidth}
\@initializelength{\multilinecompensationlength}
\@initializelength{\thissectionwidth}
% used by \cvdoubleitem % used by \cvdoubleitem
\@initializelength{\doubleitemcolumnwidth} \@initializelength{\doubleitemcolumnwidth}
% used by \cvlistitem % used by \cvlistitem
@ -54,6 +56,9 @@
\@initializelength{\listdoubleitemcolumnwidth} \@initializelength{\listdoubleitemcolumnwidth}
%\@initializelength{\listdoubleitemmaincolumnwidth} %\@initializelength{\listdoubleitemmaincolumnwidth}
% numbers
% used by \calculatecompensation
\@initializecommand{\numoflines}{0}
% commands % commands
\@initializecommand{\recomputecvbodylengths}{% \@initializecommand{\recomputecvbodylengths}{%
% body lengths % body lengths
@ -67,12 +72,21 @@
% regular lengths % regular lengths
\setlength{\parskip}{0\p@}} \setlength{\parskip}{0\p@}}
\newcommand{\calculatecompensation}[1]{%
% calculate the number of lines used by sections and subsections
\settowidth{\thissectionwidth}{#1}%
\renewcommand{\numoflines}{\numexpr\thissectionwidth/\hintscolumnwidth\relax}%
\setlength{\multilinecompensationlength}{\dimexpr\hintscolumnwidth*\numoflines\relax}%
}
\@initializeif{\if@aftersection}\@aftersectionfalse% \@initializeif{\if@aftersection}\@aftersectionfalse%
\RenewDocumentCommand{\section}{sm}{% \RenewDocumentCommand{\section}{sm}{%
\addvspace{2.5ex}% \addvspace{2.5ex}%
\phantomsection{}% reset the anchor for hyperrefs \phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{section}{#2}% \addcontentsline{toc}{section}{#2}%
\noindent\rlap{\@cvitem{\raggedleft\sectionstyle{#2}}{}}% \calculatecompensation{\sectionstyle{#2}}% calculate the vspace compensation for current section
\noindent\rlap{\@cvitem{\raggedleft\sectionstyle{#2}\ifthenelse{\multilinecompensationlength<2}{}{\vspace{-\multilinecompensationlength}}}{}}%
%\noindent\rlap{\@cvitem{\raggedleft\sectionstyle{#2}}{}}%
\nobreak\@afterheading\@aftersectiontrue\ignorespaces} \nobreak\@afterheading\@aftersectiontrue\ignorespaces}
%\@initializeif{\if@aftersubsection}\@aftersubsectionfalse% %\@initializeif{\if@aftersubsection}\@aftersubsectionfalse%
@ -83,7 +97,8 @@
\par\ignorespaces\fi% \par\ignorespaces\fi%
\phantomsection{}% reset the anchor for hyperrefs \phantomsection{}% reset the anchor for hyperrefs
\addcontentsline{toc}{subsection}{#2}% \addcontentsline{toc}{subsection}{#2}%
\noindent\rlap{\@cvitem{\if@aftersection\else\@moderncvstrut{4pt}{24pt}\fi\raggedleft\subsectionstyle{#2}}{}}% \calculatecompensation{\subsectionstyle{#2}}% calculate the vspace compensation for current section
\noindent\rlap{\@cvitem{\if@aftersection\else\@moderncvstrut{4pt}{24pt}\fi\raggedleft\subsectionstyle{#2}\ifthenelse{\multilinecompensationlength<2}{}{\vspace{-\multilinecompensationlength}}}{}}%
\nobreak\@afterheading\@aftersectiontrue\ignorespaces} \nobreak\@afterheading\@aftersectiontrue\ignorespaces}
\renewcommand*{\cvitem}[3][.5ex]{% \renewcommand*{\cvitem}[3][.5ex]{%