mirror of
https://github.com/moderncv/moderncv.git
synced 2026-02-06 10:05:19 +01:00
80 lines
3 KiB
TeX
80 lines
3 KiB
TeX
%% start of file `moderncvverticaltimeline.sty'.
|
|
%% Copyright 2023 Javier Lopez-Gomez (javier.lopez.gomez@proton.me), 2024-2026 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{moderncvverticaltimeline}[2026-01-31 v2.5.1 modern curriculum vitae vertical timeline]
|
|
|
|
|
|
%-------------------------------------------------------------------------------
|
|
% required packages
|
|
%-------------------------------------------------------------------------------
|
|
\RequirePackage{tikz}
|
|
\usetikzlibrary{babel}
|
|
|
|
%-------------------------------------------------------------------------------
|
|
% vertical timeline implementation
|
|
%-------------------------------------------------------------------------------
|
|
\tikzset{
|
|
tl_milestone/.style={circle,inner sep=1.5pt,draw=color0!20,label={west:#1}},
|
|
tl_link/.style={thick,densely dotted,color0!20},
|
|
}
|
|
|
|
\newcounter{tl@chainidx}\setcounter{tl@chainidx}{0}
|
|
\newcounter{tl@nodeidx}\setcounter{tl@nodeidx}{0}
|
|
|
|
% Mark the end of the current chain; any `\tl@milestone` issued afterward will be on a new timeline.
|
|
\def\tl@resetchain{%
|
|
\stepcounter{tl@chainidx}%
|
|
\setcounter{tl@nodeidx}{0}%
|
|
}
|
|
|
|
% Create a node in the current timeline and link it to the previous node; if the previous milestone
|
|
% is on the last shipped out page, draw a line that extends until the top margin. The argument is laid out as a label (default left).
|
|
\def\tl@milestone#1{%
|
|
\edef\@tl@prev{tl-\thetl@chainidx-\thetl@nodeidx}%
|
|
\stepcounter{tl@nodeidx}%
|
|
\edef\@tl@this{tl-\thetl@chainidx-\thetl@nodeidx}%
|
|
\tikz[remember picture,overlay] {
|
|
\node[tl_milestone={#1}] (\@tl@this) {};
|
|
\ifnum\thetl@nodeidx>1
|
|
\pgfpointdiff{\pgfpointanchor{\@tl@prev}{center}}{\pgfpointanchor{\@tl@this}{center}}
|
|
\ifnum\pgf@y>0
|
|
\draw[tl_link] (\@tl@this) -- ([yshift=-1em] \@tl@this |- current page.north);
|
|
\else
|
|
\draw[tl_link] (\@tl@this) -- (\@tl@prev);
|
|
\fi
|
|
\fi
|
|
}
|
|
}
|
|
|
|
\AddToHook{shipout/background}{%
|
|
% If there are follow-up milestones in the current timeline, draw a line that extends until the bottom margin
|
|
\edef\@tl@prev{tl-\thetl@chainidx-\number\numexpr\thetl@nodeidx-1}%
|
|
\edef\@tl@this{tl-\thetl@chainidx-\thetl@nodeidx}%
|
|
\tikz[remember picture,overlay] {
|
|
\ifnum\thetl@nodeidx>1
|
|
\pgfpointdiff{\pgfpointanchor{\@tl@prev}{center}}{\pgfpointanchor{\@tl@this}{center}}
|
|
\ifnum\pgf@y>0
|
|
\draw[tl_link] (\@tl@prev) -- ([yshift=1em] \@tl@prev |- current page.south);
|
|
\fi
|
|
\fi
|
|
}
|
|
}
|
|
|
|
\AtEndDocument{\tl@resetchain}
|
|
|
|
\let\@old@section=\section%
|
|
\RenewDocumentCommand{\section}{sm}{\tl@resetchain\@old@section{#1}}
|
|
|
|
\endinput
|
|
|
|
|
|
%% end of file `moderncvverticaltimeline.sty'.
|