CV et lettres

Le CV est l'un des très rares documents dont le lecteur juge la typographie avant d'en avoir lu une ligne. Et pourtant, la raison de le composer en LaTeX n'est pas la beauté du résultat : c'est que le CV de l'an dernier se compile encore cette année, et que chaque adaptation à un employeur subsiste sous forme de diff git. C'est aussi le coin de LaTeX où les conseils trouvés en ligne vieillissent le plus vite : plusieurs classes régulièrement citées comme « le choix standard » ne figurent pas du tout dans TeX Live 2024, et l'une de celles qui y figurent produit une erreur dès la première compilation. Cette page ne recense que ce qui fonctionne réellement sur TeX Live 2024, vérifié avec kpsewhich et par de vraies compilations. La seconde moitié traite des lettres : la classe standard letter, scrlttr2 de KOMA-Script et la pratique épistolaire japonaise.

Quelles classes de CV livre TeX Live 2024 — et lesquelles manquent

Réponse courte : moderncv, europecv, europasscv, currvita, komacv et limecv figurent bien dans TeX Live 2024, mais altacv et awesome-cv — les deux noms que citent le plus souvent les billets de blog et les présentations de modèles Overleaf — en sont absents. En local, \documentclass{altacv} s'arrête sur ! LaTeX Error: File 'altacv.cls' not found. (formulation identique pour awesome-cv). Tous deux sont diffusés depuis GitHub et la galerie de modèles d'Overleaf, pas depuis le CTAN : les utiliser suppose de récupérer le dépôt et de poser le .cls à côté de son propre fichier. C'est le premier piège que rencontre quiconque veut recompiler chez lui un CV construit sur Overleaf. Lancez kpsewhich altacv.cls : si rien ne s'affiche, la classe n'est pas installée.

Classe / packageDans TeX Live 2024Ce qu'elle apporte
moderncvoui (v2.3.1)cinq styles, sept couleurs, CV et lettre de motivation dans une seule classe
europecvoui (avec contournement)la mise en page Europass de l'UE ; libellés pour 29 langues
europasscvouila révision Europass de 2013 ; son README indique que les mises en page de 2020 ne sont pas implémentées
currvitaouiun package, pas une classe : ajoute les environnements cv et cvlist à article
komacvoui (v1.1.2)l'apparence de moderncv reconstruite sur KOMA-Script
limecvoui (v0.1.12)une mise en page moderne avec colonne latérale — la réponse à altacv la plus proche dans la distribution
altacvnondiffusé via GitHub / Overleaf ; kpsewhich altacv.cls ne renvoie rien
awesome-cvnonde même ; on obtient ! LaTeX Error: File 'awesome-cv.cls' not found.

Utiliser moderncv : \moderncvstyle et \cventry

moderncv repose sur une seule idée : fixer l'apparence en deux lignes, puis n'écrire que de la structure. \moderncvstyle{...} choisit l'une des cinq mises en page (casual [par défaut], classic, banking, oldstyle, fancy) et \moderncvcolor{...} l'une des sept couleurs (blue, black, burgundy, green, grey, orange, purple, red). La compilation des cinq styles avec pdfLaTeX contre la v2.3.1 fournie par TeX Live 2024 n'a produit aucune erreur. La commande de base est \cventry{years}{title}{institution}{location}{grade}{description}, six arguments dont un {} vide fait simplement disparaître la colonne. Les entrées d'une ligne passent par \cvitem{header}{text}, deux côte à côte par \cvdoubleitem, les puces par \cvlistitem. La structure est le document ; le style n'est qu'une enveloppe — c'est pourquoi remplacer casual par banking pour un autre employeur ne touche pas un seul caractère du contenu.

latex
\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{casual}   % casual | classic | banking | oldstyle | fancy
\moderncvcolor{blue}
\usepackage[scale=0.75]{geometry}

\name{Taro}{Yamada}
\title{Software Engineer}
\address{1-1 Chiyoda}{Tokyo}{Japan}
\phone[mobile]{+81~90~0000~0000}
\email{[email protected]}

\begin{document}
\makecvtitle

\section{Experience}
% {years}{title}{institution}{location}{grade}{description}
\cventry{2020--2024}{Engineer}{ABC Inc.}{Tokyo}{}{Web development.}
\cvitem{Skills}{LaTeX, C, Python}
\end{document}

moderncv est-il abandonné ? Son propre README répond

« Abandonné » n'est vrai qu'à moitié, et le README.md livré dans TeX Live 2024 précise laquelle : cette distribution est un fork dont le but est de maintenir moderncv au sein du CTAN, l'amont étant mort depuis 2016. L'auteur d'origine est Xavier Danaux ; l'entrée du CHANGELOG pour la v2.1.0 (21 janvier 2021) note « maintainer change: now team maintained », point de départ de la reprise par des bénévoles. TeX Live 2024 embarque la v2.3.1, datée du 21 février 2022. La formulation exacte n'est donc pas « mort » mais « orphelin en 2016, adopté en 2021 » — et la classe se compile sans erreur sur TeX Live 2024. Les services \social ajoutés et le passage à fontawesome5 sont eux aussi l'œuvre de cette équipe.

La classe porte cependant les marques d'un package repris. moderncv n'a pas de manuel : le README.md indique franchement qu'« en attendant qu'un vrai manuel soit écrit », il faut lire template.tex (le moderncv_userguide.pdf fourni porte toujours une date de janvier 2021). Et le répertoire de documentation contient tel quel un fichier nommé KNOWN_BUGS, qui recense entre autres l'espace superflu autour de la bibliographie dans le style fancy, le lonely \item--perhaps a missing list environment obtenu avec bibentry, et l'interaction entre le CJK et fancyhdr. Si votre CV doit comporter une liste de publications, lire ce seul fichier avant d'adopter la classe est la recherche la plus rentable possible. texdoc -l moderncv en donne l'emplacement.

Corriger le Sorting rule for 'begindocument' hook applied too late. d'europecv

Le correctif tient en une ligne : charger soi-même \usepackage{hyperref} (ou bookmark) dans le préambule, et l'erreur disparaît. La cause est dans la classe. europecv.cls charge hyperref depuis \AtBeginDocument{...\RequirePackage{hyperref}...}, c'est-à-dire alors que \begin{document} s'exécute déjà. Le nameref.sty qu'apporte hyperref exécute \DeclareHookRule{begindocument}{showkeys}{before}{nameref}, mais le crochet begindocument a déjà démarré : le noyau LaTeX signale alors ! LaTeX hooks Error: Sorting rule for 'begindocument' hook applied too late. Charger hyperref plus tôt soi-même fait arriver nameref à un moment où sa règle de crochet compte encore.

latex
% europecv on TeX Live 2024: the class loads hyperref inside \AtBeginDocument,
% so nameref's hook rule arrives too late. Load hyperref yourself first.
\documentclass[a4paper,helvetica]{europecv}
\usepackage{graphicx}   % europecv calls \includegraphics but does not load it
\usepackage{hyperref}   % <- this line removes the "hook applied too late" error
\ecvname{Yamada, Taro}
\ecvemail{[email protected]}
\begin{document}
\begin{europecv}
  \ecvpersonalinfo
  \ecvsection{Work experience}
  \ecvitem{2020--2024}{Engineer, ABC Inc., Tokyo}
\end{europecv}
\end{document}

Qu'il s'agisse d'un défaut de la classe et non d'une erreur de débutant se vérifie avec l'exemple livré par europecv : passez doc/latex/europecv/examples/minimal.tex — le fichier minimal officiel — dans pdfLaTeX et vous obtenez la même erreur. templates/cv_template_en.tex, en revanche, se compile proprement, et la seule différence pertinente est qu'il écrit \usepackage{bookmark}, lequel tire hyperref en premier. Notez aussi que europecv.cls appelle \includegraphics sans charger graphicx lui-même : logo et drapeau activés, vous récoltez en prime ! Undefined control sequence. \draweuropasslogo. Ajoutez \usepackage{graphicx} ou passez l'option de classe nologo.

Sur le format Europass lui-même, ne confondez pas les deux classes aux noms voisins. europecv met en œuvre la lignée du format européen commun lancé en 2002 et embarque des fichiers de libellés pour 29 langues, de ecvbg.def à ecvsv.def. europasscv met en œuvre la mise en page de la révision de 2013, et son README porte toujours l'avertissement selon lequel « pour l'instant, cette classe n'implémente pas les nouvelles mises en page europass lancées en 2020 ». L'UE révise son modèle : quand une candidature réclame « un CV au format Europass », la première démarche utile est de savoir de quelle édition il s'agit.

La classe standard letter : plusieurs destinataires depuis un seul fichier

Le véritable atout de la classe letter est que l'on obtient autant de lettres que l'on écrit d'environnements letter. L'expéditeur (\address) et la signature (\signature) s'écrivent une seule fois dans le préambule ; il suffit ensuite d'empiler des \begin{letter}{destinataire} pour que chaque bloc produise sa propre lettre, sur sa propre page, du même expéditeur. Dix lettres de recommandation, ou le même avis à trente entreprises, sortent d'un unique fichier. À l'intérieur, trois parties seulement : \opening{formule d'appel}, le corps, et \closing{formule de politesse}. La date est insérée automatiquement par \today ; \encl{...} s'imprime en encl:, \cc{...} en cc:, et \ps{...} place un post-scriptum sous la signature. Deux lettres en entrée, deux pages en sortie : cela se vérifie en compilant.

latex
\documentclass[11pt]{letter}
\address{Taro Yamada\\1-1 Chiyoda\\Tokyo 100-0001}
\signature{Taro Yamada}
\begin{document}

\begin{letter}{Hiring Manager\\ABC Inc.\\Osaka}
  \opening{Dear Hiring Manager,}
  I am writing to apply for the position.
  \closing{Sincerely,}
  \encl{CV, transcript}   % prints as "encl:"
  \cc{Personnel}          % prints as "cc:"
  \ps{P.S. Available from April.}
\end{letter}

% a second letter, same sender, second page
\begin{letter}{Second Recipient\\XYZ Ltd.}
  \opening{Dear Sir or Madam,}
  A second letter from the same source file.
  \closing{Yours faithfully,}
\end{letter}

\end{document}

scrlttr2 et scrletter : marques de pli et enveloppes à fenêtre

Ce qui sépare décisivement scrlttr2 de la classe letter ordinaire, c'est qu'elle s'occupe aussi de plier la feuille et de la glisser dans l'enveloppe. Elle imprime de fins filets aux emplacements de pliage (foldmarks) et place le bloc adresse de façon à apparaître dans la fenêtre. Tout ce réglage est extrait dans des fichiers .lco — letter class options — chargés par \LoadLetterOption{DIN}. KOMA-Script fournit DIN, DIN5008A, DIN5008B, DINmtext, NF (France), SN et SNleft (Suisse), UScommercial9 et UScommercial9DW, plus visualize, qui imprime la géométrie pour la rendre visible. Tout se configure par des variables de la forme \setkomavar{fromname}{...}, ce qui sépare complètement les valeurs de la présentation. Réémettre la même lettre pour une autre norme d'enveloppe ne change qu'une ligne : le \LoadLetterOption.

L'autre chose à connaître est scrletter : non pas une classe mais un package, qui permet de placer un environnement letter au milieu d'un document scrartcl ou scrbook. Une lettre d'accompagnement en annexe d'un rapport, ou un mot à la fin d'un contrat, n'a plus besoin de devenir un second document. De fait, un fichier \documentclass{scrartcl} complété par \usepackage{scrletter}, avec un \begin{letter}{...} juste après un \section{...}, se compile tel quel. scrlttr2 et scrletter utilisent les mêmes variables et les mêmes .lco : rien à réapprendre.

latex
\documentclass[fontsize=11pt,foldmarks=true,parskip=half]{scrlttr2}
\LoadLetterOption{DIN}          % or NipponEL, KakuLL, UScommercial9, SN, NF ...
\setkomavar{fromname}{Taro Yamada}
\setkomavar{fromaddress}{1-1 Chiyoda\\Tokyo 100-0001}
\setkomavar{signature}{Taro Yamada}
\setkomavar{subject}{Application for the advertised position}
\setkomavar{place}{Tokyo}
\begin{document}
\begin{letter}{Hiring Manager\\ABC Inc.\\Osaka}
  \opening{Dear Hiring Manager,}
  I am writing to apply for the position.
  \closing{Sincerely,}
  \encl{CV\\Transcript}
\end{letter}
\end{document}

Existe-t-il une classe de lettre japonaise ? \挨拶 et les .lco d'enveloppes Nippon

Il n'existe aucune classe de lettre japonaise dédiée dans TeX Live 2024. Chercher *letter*.cls donne scrlttr2, g-brief, dinbrief, akletter et d'autres classes occidentales, mais rien pour la correspondance japonaise. Il y a néanmoins deux réponses pratiques. La première concerne l'enveloppe : KOMA-Script fournit des .lco taillés pour les enveloppes japonaisesNipponEL, NipponEH, NipponLL, NipponLH et NipponRL couvrent les formats Chou et You 3 et 4, et KakuLL le format Kaku A4 (fenêtres de 90×45 mm ou 90×55 mm). Ce support existe depuis KOMA-Script 2.97e, et un chapitre en annexe du manuel, rédigé par Gernot Hassenpflug, l'explique jusqu'à la différence entre les papiers des séries A et B du JIS.

Fichier .lcoEnveloppeTaille de fenêtre
DINenveloppes DIN européennes (point de départ habituel)
NipponELChou / You tailles 3 et 490 × 45 mm
NipponEHidem, avec une fenêtre plus haute90 × 55 mm
NipponRLChou / You avec fenêtre placée à droite90 × 45 mm
KakuLLKaku A490 × 45 mm
visualizepas une norme d'enveloppe : imprime la géométrie pour la vérifier

L'autre réponse concerne l'ouverture de la lettre. okumacro.sty — le recueil de macros de Haruhiko Okumura, livré avec jsclasses dans TeX Live — définit une commande dont le nom s'écrit en japonais, \挨拶 (« salutation ») : l'écrire seule produit 拝啓 suivi de la formule saisonnière correspondant au mois en cours. L'implémentation est un simple \ifcase\month à douze branches : depuis janvier, 厳寒, 春寒, 早春, 陽春, 新緑, 向暑, 猛暑, 残暑, 初秋, 仲秋, 晩秋, 初冬, refermé par の候,ますますご清栄のこととお喜び申し上げます。 Compilé en août avec upLaTeX, cela imprime bel et bien 拝啓 残暑の候,ますますご清栄のこととお喜び申し上げます。 Qu'une séquence de contrôle puisse s'écrire en japonais est une particularité de la famille pTeX — la preuve que le japonais y est traité comme une langue et non comme de simples données de caractères.

latex
% Japanese letter opening: okumacro defines a Japanese-named command that
% emits the salutation plus the seasonal formula for the current \month.
% Build with:  uplatex jl.tex && dvipdfmx jl.dvi
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{okumacro}
\begin{document}
\挨拶

このたびは大変お世話になりました。

\hfill 敬具
\end{document}

En pratique : laquelle choisir et que garder dans git

Le choix est le plus souvent dicté par les exigences de dépôt. Si Europass est imposé, ce sera europecv ou europasscv (après avoir vérifié quelle édition est attendue). S'il faut un rirekisho japonais avec ses cadres de type JIS, mieux vaut le construire en tabular qu'avec une classe de CV : toutes les classes de CV présupposent le curriculum occidental en liste et s'accordent mal à un formulaire à cases nom, photo et sceau. Pour un CV anglophone ordinaire, moderncv ; pour un rendu à deux colonnes plus actuel, limecv ; pour qui vit déjà dans KOMA-Script, komacv. Et quel que soit le choix, n'oubliez pas d'écrire la lettre de motivation dans la même classe. moderncv fournit \recipient, \opening, \makelettertitle, \makeletterclosing et \enclosure, si bien que titres, caractères et couleurs concordent d'un document à l'autre. Deux feuillets issus de deux modèles différents se remarquent en général dès qu'on les pose côte à côte.

  • Gardez les différences par employeur dans des fichiers séparés, pas dans des branches : un cv-body.tex commun que chaque cv-entreprise-a.tex se contente d'\input ne laisse qu'un seul endroit à mettre à jour.
  • Embarquez la classe et le modèle dans le dépôt. Tout ce qui n'est pas dans la distribution — altacv, par exemple — est précisément ce qui piégera votre vous futur dans trois ans.
  • Utilisez un nom de sortie explicite plutôt que le \jobname du moment. Une pièce jointe nommée main.pdf se perd dans le dossier de téléchargements du destinataire.
  • Vérifiez les métadonnées du PDF. Le nom d'auteur et le titre que montre pdfinfo voyagent avec le fichier jusqu'au recruteur.
  • Testez une lettre japonaise jusqu'à l'impression et au pliage. Pour une enveloppe à fenêtre, l'option visualize de scrlttr2 imprime la géométrie afin que vous la contrôliez.

Pour finir, où LaTeX l'emporte réellement ici. Un CV est un document de design : sur la seule apparence, il ne battra ni InDesign ni un modèle Canva. L'avantage de LaTeX est ailleurs : un .tex d'il y a cinq ans produit encore aujourd'hui le même PDF, la réécriture faite pour chaque employeur se lit comme un git diff, et une liste de publications se génère depuis un .bib. Autrement dit, il permet de traiter le CV comme un actif que l'on entretient plutôt que comme une pièce réalisée une fois pour toutes. C'est précisément pourquoi, au moment de choisir une classe, la première chose à vérifier n'est pas son allure mais si elle se compilera encore dans trois ans : l'existence avec kpsewhich, la santé avec une vraie compilation, dans cet ordre.