Frise chronologique avec LaTeX

Les concours externes ITA du CNRS sont ouverts pour cette année. C’est en passant l’un de ces concours l’année dernière que j’ai commencé à travailler à mon poste actuel, la passation du concours est donc encore un événement récent pour moi.

Je ne vais pas ici donner de conseils pour la constitution du dossier ou la préparation du concours à proprement parler, mais je voudrais vous montrer une méthode qui peut être efficace pour présenter un parcours professionnel et/ou de formation, sous forme de frise chronologique avec LaTeX. Je l’ai moi-même utilisée dans le diaporama accompagnant ma présentation orale lors de l’audition pour le concours.

Le code ne sera pas intégralement reproduit ici, vous pouvez retrouver le code complet et commenté sur Overleaf. Vous pouvez également visualiser le fichier de sortie compilé, même sans distribution LaTeX sur votre ordinateur.

Le diaporama que j’ai utilisé pendant mon audition était écrit en LaTeX (Beamer), donc quand j’ai voulu y intégrer une frise chronologique, plutôt que d’insérer une image j’ai cherché un moyen de l’écrire en LaTeX également.

Pourquoi une frise chronologique ?

J’avais prévu quelques diapos “texte” pour présenter mes formations et expériences professionnelles, dans ce cas quel intérêt d’ajouter une frise ? Ce n’est pas forcément pertinent pour tout le monde, voici quelques raisons pour lesquelles j’ai choisi de le faire :

  • La période globale à représenter était courte (2016 à 2019).
  • Sur cette période d’un peu moins de 4 ans, j’ai eu plusieurs activités : études, stages, emplois, parfois en même temps (j’ai notamment été simultanément été étudiant et ingénieur pour la même université).
  • Comme mon CV faisait déjà partie de mon dossier de candidature et que le temps imparti pour la présentation orale est à respecter strictement, je suis passé très vite sur les diapos présentant mon parcours sous forme de texte et j’ai plutôt utilisé cette représentation visuelle pour rappeler mes expériences antérieures.
  • Au final, cette représentation était plus efficace pour expliciter en très peu de temps mes différentes activités et leur temporalité.

Selon les besoins, ce type de frise peut aussi servir à représenter d’autres informations chronologiques, par exemple différentes étapes de planification ou de réalisation d’un projet (ce pour quoi la librairie est initialement prévue, d’ailleurs).

Créer l’image avec LaTeX

La création de la frise chronologique va reposer sur l’utilisation du package tikz, avec la librairie timeline créée par Claudio Fiandrino (téléchargeable ici)1.

Aperçu du fichier de sortie

Voici à quoi ressemble la fiche chronologique, telle qu’obtenue en compilant ce fichier :

Pour le fichier d’exemple j’ai utilisé le type de document \documentclass{standalone} mais cette image peut bien sûr être intégrée à tout type de document LaTeX.

Déclarer la timeline

Le code correspondant à la construction de la frise est à placer dans un environnement tikzpicture et se base sur 3 unités : timeline, phase et milestone.

Il faut d’abord déclarer la timeline, afin de générer la bande noire comportant les repères temporels. Comme indiqué précédemment cette représentation graphique est plutôt conçue pour la gestion de projet, et son unité temporelle par défaut est la semaine (week).

Pour représenter des années, ou plus généralement avoir autre chose que Week X comme unité de temps, il faut d’abord utiliser l’option timespan à l’ouverture de l’environnement tikzpicture. Celle-ci va permettre de remplacer l’étiquette Week par une autre chaîne de caractères, à indiquer sans guillemets. En l’occurrence, rien :

\begin{tikzpicture}[timespan={}]

Je ne les ai pas utilisées ici, mais il existe aussi des options permettant de modifier l’aspect de la frise, telles que timeline width ou timeline height (voir ces explications rédigées par l’auteur de la librairie).

Pour remplacer la seconde partie de l’étiquette Week X, à savoir la valeur X qui s’incrémente à chaque étape, il faut spécifier custom interval=true en déclarant la timeline. Ici, pour numéroter de 2016 à 2019 :

\timeline[custom interval=true]{2016,...,2019}

Le code pour afficher la frise chronologique dans le document ressemble maintenant à ceci :

\begin{tikzpicture}[timespan={}]
  \timeline[custom interval=true]{2016,...,2019}
\end{tikzpicture}

Si on le compile, voici ce qu’on obtient :

Configurer les phases

Il est maintenant temps d’ajouter les phases, c’est-à-dire les périodes représentées par des cercles. L’ensemble de ces phases est à insérer dans un environnement phases (\begin{phases}), dans lequel chaque phase est déclarée et paramétrée avec la commande \phase.

Voici comment se présente la déclaration d’une phase (il s’agit du plus grand cercle vert, étiqueté Master FLE sur le fichier exemple) :

\phase{between week=1 and 2 in 0.6, involvement degree=8cm, phase color=green!50!black}

Il y a 3 arguments à donner, correspondant respectivement à la position du cercle (ou plus précisément, de son centre), sa taille et sa couleur.

La position est à donner relativement à la timeline déclarée précédemment : il faut indiquer où doit se trouver le centre du cercle sur l’intervalle entre deux unités de temps. Même si vous avez renommé les étiquettes apparaissant sur la timeline, leur identifiant reste week dans le code.

Par exemple ici, comme je veux représenter une période correspondant à peu près aux années universitaires 2015-2016 et 2017-2018, je place le centre du cercle entre 2016 et 2017. Ce sont les deux premières années apparaissant sur ma frise, soit week 1 et week 2 : j’indique donc between week=1 and 2. Il reste maintenant à indiquer à quel endroit de ce segment placer le centre du cercle, ce qui se fait sous forme d’un chiffre entre 0 et 1 représentant la distance entre les deux bornes. Ici between week=1 and 2 in 0.6 permet de placer le centre du cercle à 60% de la distance entre 2016 et 2017 sur la frise.

Le choix de la taille du cercle se fait simplement en indiquant la taille souhaitée en centimètres (ici involvement degree=8cm). Ce n’est pas évident de se représenter à quoi correspond cette taille sur l’image. Il me semble que la meilleure solution reste de tâtonner pour avoir une taille raisonnable par rapport à ce qu’on veut représenter, puis réajuster éventuellement une fois que toutes les phases ont été déclarées pour que les dimensions des différents cercles soient cohérentes.

Ne reste plus qu’à indiquer la couleur avec phase color. Dans le fichier exemple j’ai utilisé des couleurs par défaut (green pour les études, blue pour les emplois, red pour les stages). J’ai juste assombri le vert qui était très vif, avec green!50!black plutôt que green.

À ce stade le code se présente comme ceci :

\begin{tikzpicture}[timespan={}]
  \timeline[custom interval=true]{2016,...,2019}
   \begin{phases}
     \phase{between week=1 and 2 in 0.6, involvement degree=8cm,phase color=green!50!black}
   \end{phases}
\end{tikzpicture}

Et produit l’image suivante lorsqu’on le compile :

La même opération est à répéter pour chaque cercle qu’on souhaite faire apparaître sur la frise. Chaque phase reçoit automatiquement un identifiant de forme phase-XX est un entier correspondant à la place de la phase dans l’ordre de déclaration. Attention, il s’agit bien de l’ordre de déclaration des phases dans le code et non de leur ordre chronologique sur la frise.

Ajouter les milestones

Vous avez probablement remarqué que la déclaration des phases ne permet pas d’étiqueter les cercles : c’est ce à quoi servent les milestones.

Les milestones sont à déclarer individuellement avec la commande \addmilestone. Dans l’exemple j’ai groupé les \addmilestone dans des environnements scope, ce qui est facultatif mais utile lorsque plusieurs milestones ont un paramètre commun :

\begin{scope}{text options={above}}

Il y a ici deux groupes : les étiquettes qui apparaissent au-dessus de la frise (text options={above}), et celles qui apparaissent en-dessous (text options={below}).

La syntaxe de la commande \addmilestone est la suivante :

\addmilestone{at=phase-3.90,direction=90:2cm,text={Tuteur}}

Cette syntaxe fonctionne également hors de l’environnement scope. La position par défaut de l’étiquette sera calculée en fonction de la valeur renseignée pour direction. Pour contrôler son placement sans utiliser l’environnement scope, \addmilestone peut recevoir directement l’option text options.

La commande \addmilestone prend trois arguments, correspondant au point de départ de la flèche (sous forme d’un petit cercle noir), à la direction de la flèche et au texte de l’étiquette.

Le point de départ est à renseigner relativement à une phase déclarée précédemment : il faut donner l’identifiant de la phase, ainsi qu’une valeur comprise entre 0 et 360. Cette valeur correspond à un angle, selon lequel le point de départ sera placé le long du cercle correspondant à la phase. Le point correspondant à la valeur 0 (ou 360) est l’extrémité droite du diamètre horizontal du cercle représentant la phase, et la rotation autour du cercle se fait en sens anti-horaire.

Donc at=phase-3.90 place le point de départ d’une flèche sur la phase portant l’identifiant phase-32, à un angle de 90 degrés, soit “au sommet” du cercle.

La direction de la flèche fonctionne avec le même calcul d’angle, auquel on accole la valeur en centimètres de la longueur de flèche souhaitée. direction=90:2cm va produire une flèche d’une longueur de deux centimètres, orientée vers le haut (perpendiculairement au diamètre horizontal du cercle).

Pour compléter la frise et obtenir cette image, il suffit maintenant de répéter l’opération jusqu’à ce que chaque cercle soit étiqueté.

Si vous voulez créer une frise temporelle semblable à celle-ci sans réécrire tout le code, n’hésitez pas à copier le code que j’ai déposé sur Overleaf. La librairie timeline (développée par Claudio Fiandrino) est téléchargeable sur Git et dispose d’une page de documentation.

Citer ce billet : “Frise chronologique avec LaTeX”, par Alexander Delaporte. Publié sur Tekipaki le 12/06/2020. Lien : https://tekipaki.hypotheses.org/393.
  1. Dans le fichier que j’ai mis à disposition sur Overleaf, la librairie est intégrée pour permettre la compilation du document : il s’agit d’une copie non modifiée du fichier contenant le code de la librairie (version 0.3b du 25 février 2019). []
  2. C’est-à-dire, non pas la troisième phase chronologiquement mais la troisième phase déclarée dans le code, indépendamment de sa position sur la frise. Dans le fichier disponible sur Overleaf, phase-3 est le premier cercle bleu, étiqueté Tuteur. []

Auteur/autrice : Alexander Delaporte

Ingénieur d'études au Centre de recherches linguistiques sur l'Asie Orientale

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Rechercher dans OpenEdition Search

Vous allez être redirigé vers OpenEdition Search