📖 Le Workflow LaTeX du Polyglotte Paresseux

Joachim Coline | 14 oct. 2026 min de lecture

Maintenir un projet LaTeX dans plusieurs langues peut ĂȘtre une corvĂ©e. Dans cet article, je prĂ©sente une simple astuce pour vous faciliter la tĂąche.

Le problĂšme

Vous est-il dĂ©jĂ  arrivĂ© d’ouvrir un document LaTeX et de devoir le traduire dans une ou plusieurs langues? Puis de fixer le fichier .tex avec le sentiment dĂ©sagrĂ©able que vous allez devoir gĂ©rer deux ou trois versions du mĂȘme document en parallĂšle?

Si c’est le cas, vous connaissez la douleur. Une formule est modifiĂ©e dans le texte source? Il faut maintenant la corriger dans la traduction. Une section est restructurĂ©e? Il faut recommencer. Une illustration est ajoutĂ©e? Il faut dupliquer l’environnement, traduire la lĂ©gende et ne pas oublier quelle version Ă©tait modifiĂ©e en dernier. Multipliez tout cela par chaque langue, et un simple document se transforme peu Ă  peu en un vĂ©ritable projet de maintenance.

Le problĂšme sous-jacent rĂ©side dans la violation du principe “Don’t Repeat Yourself” (DRY). Un document LaTeX doit constituer une source unique de vĂ©ritĂ©. DĂšs que le fichier est dupliquĂ© pour le traduire, deux sources de vĂ©ritĂ© sont créées et finiront par diverger dĂšs la premiĂšre modification. L’existence mĂȘme de plusieurs sources de vĂ©ritĂ© est Ă  l’origine de toutes les difficultĂ©s.

Solutions existantes

La traduction d’un projet LaTeX n’est pas un problùme nouveau. Il existe plusieurs options:

  • Les packages translator et glossaries permettent de dĂ©finir un ensemble de termes ou d’entrĂ©es de glossaire dont l’affichage varie en fonction de la langue babel active. Cependant, ils ne sont pas destinĂ©s Ă  traduire un projet dans son intĂ©gralitĂ©, mais uniquement des termes spĂ©cifiques.
  • Le projet po4a est un outil qui extrait les chaĂźnes traduisibles de votre fichier .tex pour les placer dans un catalogue .po (une simple liste « texte source - texte traduit »). Un traducteur remplit ce catalogue avec les traductions, puis une nouvelle exĂ©cution de po4a gĂ©nĂšre un fichier .tex traduit. Bien que cette approche semble prometteuse, elle nĂ©cessite tout de mĂȘme de gĂ©rer un catalogue sĂ©parĂ© en plus du fichier source, ainsi que la chaĂźne d’outils po4a elle-mĂȘme. C’est une mise en oeuvre fort complexe par rapport Ă  la tĂąche rĂ©elle.
  • Vous pouvez demander Ă  un Large Language Model (LLM) d’effectuer la traduction Ă  votre place. À court terme, cela permet d’économiser l’effort initial, et le rĂ©sultat obtenu constitue un premier jet tout Ă  fait correct. À long terme cependant, la gestion ne sera pas simple :
    • le rĂ©sultat reste un fichier dupliquĂ©, ce qui signifie que chaque modification future devra ĂȘtre effectuĂ©e deux fois et synchronisĂ©e,
    • les rĂ©sultats des LLM ne sont pas dĂ©terministes ; vous ne pouvez donc pas relancer la traduction, comparer deux exĂ©cutions, ni vous assurer qu’une modification mineure en anglais ne réécrira pas silencieusement sa contrepartie traduite.
  • Peut-ĂȘtre y a-t-il une solution existante que j’aurais ratĂ©e?

Je ne suis pas satisfait de ces différentes options car soit

  • elles introduisent de nouveaux fichiers,
  • elles nĂ©cessitent des outils supplĂ©mentaires (en plus du projet LaTeX lui-mĂȘme), ou alors
  • elles ne rĂ©solvent que partiellement le problĂšme.

Pourquoi ne pas traduire directement le projet Ă  l’intĂ©rieur du fichier .tex existant?

La mĂ©thode: un seul fichier, n’importe quelle langue, aucune dĂ©pendance

Le principe de la mĂ©thode proposĂ©e est que les textes originaux et traduits coexistent (dans le mĂȘme fichier), et que c’est vous qui dĂ©cidez lequel compiler.

Pour y parvenir, l’astuce consiste Ă  dĂ©finir une nouvelle commande pour chaque langue dĂšs le tout dĂ©but de votre projet:

\newcommand\en[1]{} % commande pour l'anglais
\newcommand\fr[1]{} % commande pour le français
\newcommand\nl[1]{} % commande pour le néerlandais
% etc.

puis de les utiliser partout oĂč une traduction est nĂ©cessaire, par exemple :

% ...
\section{\en{Tutorial}\fr{Tutoriel}\nl{Handleiding}}
\en{Welcome!}\fr{Bienvenue!}\nl{Welkom!}
% ...

Pour compiler le projet dans une langue spécifique, insérez #1 dans la commande de votre choix et laissez les autres champs vides, par exemple:

\newcommand\en[1]{}
\newcommand\fr[1]{#1} % le projet sera compilé en français
\newcommand\nl[1]{} 

Dans cet exemple, tout le code situé dans les commandes \en{} et \nl{} sera ignoré par le compilateur. Seul le code situé en dehors de ces commandes et dans les commandes \fr{} sera pris en compte. Le résultat sera un document entiÚrement en français.

La mĂȘme rĂšgle s’appliquera si une autre langue est sĂ©lectionnĂ©e.

Conseils

  • La traduction de textes nĂ©cessite une attention particuliĂšre en matiĂšre de modifications. Bien que la mĂ©thode proposĂ©e permette de comparer facilement le texte traduit et le texte original, elle ne permet pas de suivre les modifications. Il peut donc s’avĂ©rer difficile de modifier un texte dĂ©jĂ  traduit. C’est pourquoi je recommande d’utiliser un systĂšme de contrĂŽle de version (VCS) tel que git. Bien que cela ne soit pas indispensable, cela vous fera gagner beaucoup de temps, en particulier pour les gros projets.
  • Ne traduisez votre projet qu’une fois que vous avez terminĂ© de modifier la version originale. Sinon, vous perdrez du temps Ă  traduire du texte qui sera modifiĂ©, voire supprimĂ© par la suite.
  • Certains packages LaTeX dĂ©pendent de la langue. Vous pouvez utiliser la mĂȘme astuce pour les importer dans une langue ou une autre, par exemple:
% ...
\en{
\usepackage[english]{babel}
}
\fr{
\usepackage[french]{babel}
}
\nl{
\usepackage[dutch]{babel}
}
% ...

La mĂȘme astuce s’applique pour les ressources utilisĂ©es dans les figures, par exemple:

% ...
\begin{figure}[h]
\centering
\includegraphics{\en{EN.png}\fr{FR.png}\nl{NL.png}}
\caption{\en{Example}\fr{Exemple}\nl{Voorbeeld}}
\label{fig:example}
\end{figure}
% ...
  • Du code qui est commun Ă  toutes les langues n’a pas besoin d’ĂȘtre enveloppĂ© dans une commande de langue, comme par exemple l’environnement figure ci-dessus.

Travaux futurs

Pour faciliter encore davantage le travail de traduction, par exemple lors de l’ajout d’une nouvelle langue, ce serait bien de disposer d’un outil permettant de gĂ©nĂ©rer automatiquement les nouvelles commandes au sein d’un projet dĂ©jĂ  traduit. Un LLM pourrait sans doute s’en charger, mais oĂč est le plaisir si on leur confie tout ? 😜

Merci d’avoir lu. J’espĂšre que cet article vous aura Ă©tĂ© utile.