Justin Bossard

Gestion de mon CV

Pour la gestion de mon CV, je me suis fixé les critères suivants :

Le tout en centralisant les informations, pour éviter des incohérences entre versions.

J’ai donc séparé mon CV en plusieurs fichiers :

Avec trois sorties :

  1. cv.pdf : mon CV complet
  2. cv-min.pdf : mon CV public (sans photo, adresse, numéro de téléphone)
  3. $(BLOG)/cv.md : une version compatible Goldmark1, sans informations, qui se retrouve ici

Les en-têtes

Ils contiennent toutes les métadonnées nécessaires à chaque sortie. J’y ai également rajouté la première ligne du corps de chaque version, puisqu’elle n’est pas commune.

header-blog.md

1---
2title: 'Curriculum Vitæ'
3menu: main
4weight: 10
5---
6
7[[Version PDF](cv.pdf)] : *aucune information personnelle n'y est présente, vous pouvez [me contacter](../contact/) pour un CV complet.*
8
9***

Ce fichier contient le nécessaire pour une page avec Hugo, ainsi qu’une mention quant à la version PDF.

header-pdf.md

 1---
 2author-meta: Justin Bossard
 3title-meta: Curriculum Vitæ de Justin Bossard
 4date-meta: 20250911
 5keywords:
 6- CV
 7- ingénieur
 8- informatique
 9- étudiant
10papersize: a4
11fontfamily: FiraMono
12fontsize: 10pt
13geometry: margin=6.5mm
14pagestyle: empty
15urlcolor: blue
16lang: fr-FR
17header-includes:
18- \renewcommand*\familydefault{\ttdefault}
19- \usepackage[fixed]{fontawesome5}
20- \usepackage{titlesec}
21- \titleformat{\subsection}[block]{\filcenter\normalfont\large\bfseries}{}{0pt}{}
22---
23
24# \centering Justin Bossard

Les informations

Je ne veux pas rendre publiques certaines données personnelles. Le reste des informations est commun aux deux versions.

Ainsi, éditer à la main infos.md et infos-min.md si, par exemple, je change de courriel, n’est pas très élégant. J’ai donc opté pour la solution suivante :

Le corps du CV

Le reste est dans cv.md.

J’utilise FontAwesome avec LaTeX (e.g. \faIcon{globe}) pour avoir de jolies icônes en PDF. Je réfléchis à une solution pour les intégrer aussi en HTML avec un filtre Lua et cet article.

J’utilise columns.lua pour les doubles colonnes2, le reste est écrit en Markdown (avec beaucoup de listes de définitions).

Makefile

Une fois qu’on a tout ça, on fait un Makefile, avec toutes les recettes qu’il faut, en utilisant Pandoc :

 1.PHONY: all
 2
 3PANDOC=pandoc
 4PYTHON=python
 5
 6BLOG=~/website/content/cv
 7OUTPUT=./output
 8
 9all: $(OUTPUT)/cv.pdf $(OUTPUT)/cv-min.pdf $(BLOG)/index.md
10
11$(OUTPUT)/cv.pdf: cv.md header-pdf.md infos.md
12	$(PANDOC) --lua-filter columns.lua header-pdf.md infos.md cv.md -o $@
13
14$(OUTPUT)/cv-min.pdf: cv.md header-pdf.md infos-min.md
15	$(PANDOC) --lua-filter columns.lua header-pdf.md infos-min.md cv.md -o $@
16	cp $(OUTPUT)/cv-min.pdf $(BLOG)/cv.pdf
17
18$(BLOG)/index.md: cv.md header-blog.md
19	$(PANDOC) --standalone --lua-filter columns.lua header-blog.md cv.md -o $@ -t markdown_strict+definition_lists+yaml_metadata_block
20
21infos.md infos-min.md: gen-infos.py infos.yaml
22	$(PYTHON) gen-infos.py

Pour la conversion en $(BLOG)/cv.md, j’utilise le format markdown_strict, avec en extension les listes de définitions et les en-têtes YAML, tous deux compatibles avec la convention Goldmark.


Conclusion

Et voilà ! Ce système me permet d’avoir un CV centralisé et exportable dans différents formats, sans duplication d’informations.


  1. J’entends par compatible sans syntaxe LaTeX, tant dans l’en-tête que le corps. ↩︎

  2. Au lieu d’un environnement multicol, pour garder une syntaxe la plus simple possible ↩︎

#Pandoc #Cv #Divers