Home page Page perso

latex_updates

Turn two LaTeX manuscript versions into a tracked-changes PDF in one command. Additions in blue · deletions in orange with wavy strikethrough.

Transformez deux versions d'un manuscrit LaTeX en PDF avec suivi des modifications, en une seule commande. Ajouts en bleu · suppressions en orange barré.

Python ≥ 3.10 latexdiff A&A · AASTeX · MNRAS MIT License Licence MIT
added text looks like this le texte ajouté apparaît ainsi removed text looks like this le texte supprimé apparaît ainsi

What problem does this solve?Quel problème cet outil résout-il ?

When resubmitting a journal article after referee comments, most journals ask you to provide a version with tracked changes so reviewers can immediately see what changed. Creating that document by hand is tedious and error-prone.

Lors de la resoumission d'un article après les commentaires du rapporteur, la plupart des revues exigent une version avec suivi des modifications pour que le lecteur puisse identifier immédiatement ce qui a changé. Produire ce document manuellement est fastidieux et source d'erreurs.

latex_updates automates the entire pipeline: it cleans your source files, runs latexdiff with journal-appropriate settings, injects consistent colour definitions, and compiles the PDF — all with one command. The result is a professional tracked-changes document where every addition is highlighted in blue and every deletion is shown in orange with a wavy strikethrough.

latex_updates automatise l'ensemble du processus : nettoyage des fichiers sources, exécution de latexdiff avec les réglages adaptés à la revue, injection des définitions de couleurs, et compilation du PDF — le tout en une seule commande. Le résultat est un document professionnel où chaque ajout est mis en évidence en bleu et chaque suppression apparaît en orange barré d'une vague.

A one-line toggle in the output file lets you switch between the referee version (showing all deletions) and a clean resubmission copy (deletions hidden) without re-running anything.

Une bascule en une ligne dans le fichier généré permet de passer de la version annotée (pour le rapporteur) à une copie propre (pour la resoumission) sans relancer la commande.

InstallationInstallation

After installation the latex_updates command is available anywhere in your terminal — no need to be in the script directory or activate an environment.
Après l'installation, la commande latex_updates est disponible partout dans votre terminal — inutile d'être dans le répertoire du script ou d'activer un environnement particulier.

1 — Install the Python package1 — Installer le paquet Python

# Recommended: install directly from GitHub
$ pip install git+https://github.com/eartigau/latex-updates.git

# Alternative: clone and install locally
$ git clone https://github.com/eartigau/latex-updates.git
$ pip install ./latex-updates
# Recommandé : installer directement depuis GitHub
$ pip install git+https://github.com/eartigau/latex-updates.git

# Alternative : cloner et installer localement
$ git clone https://github.com/eartigau/latex-updates.git
$ pip install ./latex-updates

2 — Install latexdiff2 — Installer latexdiff

latexdiff is the underlying word-level diff engine. Install it once for your system:

latexdiff est le moteur de comparaison mot à mot utilisé en interne. Installez-le une fois pour votre système :

# macOS
$ brew install latexdiff

# Debian / Ubuntu
$ sudo apt install latexdiff

# TeX Live (any platform)
$ tlmgr install latexdiff
# macOS
$ brew install latexdiff

# Debian / Ubuntu
$ sudo apt install latexdiff

# TeX Live (toutes plateformes)
$ tlmgr install latexdiff

3 — pdflatex (optional)3 — pdflatex (facultatif)

pdflatex is needed only for automatic PDF compilation. If it is absent, latex_updates still produces the .tex diff file and prints the command to compile it manually. pdflatex comes with any standard TeX distribution (TeX Live, MiKTeX, MacTeX).

pdflatex est nécessaire uniquement pour la compilation automatique du PDF. En son absence, latex_updates produit quand même le fichier .tex et affiche la commande pour le compiler manuellement. pdflatex fait partie de toute distribution TeX standard (TeX Live, MiKTeX, MacTeX).

If your manuscript uses A&A style (\documentclass{aa}), latex_updates will automatically search for aa.cls on your system and use it. If it is not found in your TeX path, install it with tlmgr install aa (TeX Live) or sudo apt install texlive-publishers (Debian/Ubuntu).

Si votre manuscrit utilise le style A&A (\documentclass{aa}), latex_updates cherche automatiquement aa.cls sur votre système. S'il n'est pas dans le chemin TeX, installez-le avec tlmgr install aa (TeX Live) ou sudo apt install texlive-publishers (Debian/Ubuntu).

Quick startDémarrage rapide

The repository includes two demo manuscripts so you can try the tool immediately after cloning:

Le dépôt inclut deux manuscrits de démonstration pour tester l'outil immédiatement après le clonage :

$ git clone https://github.com/eartigau/latex-updates.git
$ latex_updates latex-updates/demo/demo_old.tex \
               latex-updates/demo/demo_new.tex

latex_updates: generating diff between
  old: demo/demo_old.tex
  new: demo/demo_new.tex

  Cleaning demo_old.tex ...
  Cleaning demo_new.tex ...
  Running latexdiff...
  Inserting colour definitions and toggle...

  Diff source → demo/diff_demo_new.tex
  Compiling PDF (2 passes)...
  Diff PDF    → demo/diff_demo_new.pdf

Done.
$ git clone https://github.com/eartigau/latex-updates.git
$ latex_updates latex-updates/demo/demo_old.tex \
               latex-updates/demo/demo_new.tex

latex_updates: generating diff between
  old: demo/demo_old.tex
  new: demo/demo_new.tex

  Cleaning demo_old.tex ...
  Cleaning demo_new.tex ...
  Running latexdiff...
  Inserting colour definitions and toggle...

  Diff source → demo/diff_demo_new.tex
  Compiling PDF (2 passes)...
  Diff PDF    → demo/diff_demo_new.pdf

Done.

Open demo/diff_demo_new.pdf to see the tracked-changes output.

Ouvrez demo/diff_demo_new.pdf pour voir le résultat.

UsageUtilisation

latex_updates OLD.tex NEW.tex [options]
latex_updates ANCIEN.tex NOUVEAU.tex [options]
Argument / optionArgument / optionDescriptionDescription
OLD.texANCIEN.tex Previous version of the manuscript (submitted version)Version précédente du manuscrit (version soumise)
NEW.texNOUVEAU.tex Revised version of the manuscript (post-referee version)Version révisée du manuscrit (après les commentaires du rapporteur)
-o FILE-o FICHIER / --output FILE--output FICHIER Custom output filename.
Default: diff_<NEW>.tex in the same directory as the inputs.
Nom personnalisé pour le fichier de sortie.
Par défaut : diff_<NOUVEAU>.tex dans le même répertoire.
--no-compile Produce the .tex diff file only; skip pdflatex compilation.Produire uniquement le fichier .tex ; ne pas lancer pdflatex.

ExamplesExemples

# Typical use — produces diff_v2_paper.tex + diff_v2_paper.pdf
$ latex_updates v1_paper.tex v2_paper.tex

# Name the output for sending to a referee
$ latex_updates old.tex new.tex -o changes_for_referee.tex

# Generate the .tex only, compile later by hand
$ latex_updates old.tex new.tex --no-compile
$ pdflatex diff_new.tex
# Usage courant — produit diff_v2_papier.tex + diff_v2_papier.pdf
$ latex_updates v1_papier.tex v2_papier.tex

# Nom de sortie personnalisé (pour envoyer au rapporteur)
$ latex_updates ancien.tex nouveau.tex -o modifications_rapporteur.tex

# Générer le .tex uniquement, compiler manuellement ensuite
$ latex_updates ancien.tex nouveau.tex --no-compile
$ pdflatex diff_nouveau.tex

Show or hide deleted textAfficher ou masquer le texte supprimé

Every generated .tex file contains a toggle near the top. Edit one word and recompile — no other changes needed:

Chaque fichier .tex généré contient une bascule près du début. Modifiez un mot et recompilez — aucune autre modification n'est nécessaire :

Show deleted text — default, for the referee response letter

Afficher le texte supprimé — par défaut, pour la lettre de réponse au rapporteur

\newif\ifshowdel
\showdeltrue   % deleted text appears in orange with wavy strikethrough% texte supprimé en orange avec barre ondulée

Hide deleted text — clean copy for the resubmission itself

Masquer le texte supprimé — copie propre pour la resoumission elle-même

\newif\ifshowdel
\showdelfalse  % deleted text is completely invisible% texte supprimé complètement invisible

This means the same .tex file produces two different documents depending on that one flag — handy when you need both the annotated version for the referee and a clean version for the journal submission system.

Le même fichier .tex produit ainsi deux documents distincts selon ce seul indicateur — pratique lorsqu'on a besoin à la fois de la version annotée pour le rapporteur et d'une version propre pour le système de soumission de la revue.

Journal supportSupport des revues scientifiques

latex_updates reads the \documentclass line of your manuscript and automatically applies the right latexdiff options for that journal. No flags, no configuration files.

latex_updates lit la ligne \documentclass de votre manuscrit et applique automatiquement les bonnes options latexdiff pour cette revue. Aucun argument supplémentaire, aucun fichier de configuration.

JournalRevueDetected classClasse détectéeWhat is handled automaticallyCe qui est géré automatiquement
Astronomy & Astrophysics (A&A) \documentclass{aa} A&A's \abstract command takes five arguments (context · aims · methods · results · conclusions). Standard latexdiff would break on this; latex_updates treats it as a block-level command so deleted abstracts compile cleanly. \subtitle and section headings are excluded from word-level diffing. La commande \abstract d'A&A prend cinq arguments (contexte · objectifs · méthodes · résultats · conclusions). latexdiff standard échoue sur cette syntaxe ; latex_updates la traite comme un bloc entier pour que les résumés supprimés compilent correctement. \subtitle et les titres de sections sont exclus de la comparaison mot à mot.
AASTeX (ApJ, AJ, ApJL, PASP) \documentclass{aastex63} etc. Author-metadata commands (\affiliation, \correspondingauthor, \email, \received, …) are excluded from word-level diffing; they contain structured arguments that latexdiff cannot safely split. Les commandes de métadonnées d'auteur (\affiliation, \correspondingauthor, \email, \received, …) sont exclues de la comparaison mot à mot ; leurs arguments structurés ne peuvent pas être découpés sans risque par latexdiff.
Monthly Notices of the RAS (MNRAS) \documentclass{mnras} Uses a standard abstract environment — no special handling needed.Utilise un environnement abstract standard — aucun traitement particulier nécessaire.
Any other classToute autre classe Generic mode: standard latexdiff with math-mode protection.Mode générique : latexdiff standard avec protection des environnements mathématiques.

Missing your journal? Open an issue — adding a profile is a few lines of Python.

Votre revue n'est pas dans la liste ? Ouvrez une issue — ajouter un profil ne demande que quelques lignes de Python.

How it worksFonctionnement

1

Clean the old fileNettoyer l'ancien fichier

Strip {\bf …} and \textbf{…} markup that was manually added during earlier revision rounds to highlight changes.

Supprimer les balises {\bf …} et \textbf{…} ajoutées manuellement lors des rondes de révision précédentes.

2

Clean the new fileNettoyer le nouveau fichier

Remove leftover bare { } groups and normalise LaTeX spacing commands that confuse latexdiff's parser.

Éliminer les groupes { } nus résiduels et normaliser les commandes d'espacement qui perturbent l'analyseur de latexdiff.

3

Run latexdiffLancer latexdiff

Word-level diff with math-mode protection and journal-specific options applied automatically.

Comparaison mot à mot avec protection des environnements mathématiques et options adaptées à la revue appliquées automatiquement.

4

Inject colour & toggleInjecter les couleurs

Blue additions, orange wavy-strikethrough deletions, and a \showdel flag — inserted before \begin{document}.

Ajouts en bleu, suppressions en orange barré d'une vague, et l'indicateur \showdel — insérés avant \begin{document}.

5

Compile PDFCompiler le PDF

Two pdflatex passes resolve cross-references and generate the final PDF automatically.

Deux passes pdflatex résolvent les références croisées et génèrent le PDF final automatiquement.

Colour legendRéférence des couleurs

The referee's comments were off-topic and revealed a stunning misunderstanding of the entire field remarkably insightful and reflect a rare depth of expertise. We have reluctantly enthusiastically addressed this collection of non-sequiturs each illuminating suggestion, and the manuscript is essentially unchanged profoundly transformed for the better as a result.
Les commentaires du rapporteur étaient hors sujet et témoignaient d'une incompréhension totale du domaine d'une perspicacité remarquable et reflétaient une expertise rare. Nous avons à contrecœur avec enthousiasme répondu à cette collection d'absurdités chacune de ces suggestions éclairées, et le manuscrit en est pratiquement inchangé profondément transformé et sublimé.

Blue = added text  ·  Orange strikethrough = removed text Bleu = texte ajouté  ·  Orange barré = texte supprimé

Demo manuscriptsManuscrits de démonstration

The demo/ folder contains two versions of a short mock paper (On the Statistically Suspicious Helpfulness of Artificial Minds) written to exercise as many diff scenarios as possible in a compact document.

Le dossier demo/ contient deux versions d'un court article fictif (On the Statistically Suspicious Helpfulness of Artificial Minds) rédigé pour couvrir un maximum de scénarios de différence dans un document compact.

FileFichierWhat it containsContenu
demo/demo_old.tex Original submission: 3 authors · title · abstract with inline math · 4 sections · numbered list (3 items) · table with 4 data rows · bibliography Soumission initiale : 3 auteurs · titre · résumé avec math en ligne · 4 sections · liste numérotée (3 items) · tableau à 4 lignes · bibliographie
demo/demo_new.tex Revised version: 4th author added · title reworded · abstract numbers updated · 4th list item added · extra table row · new subsection · full new Discussion section · extended bibliography Version révisée : 4e auteur ajouté · titre reformulé · chiffres du résumé mis à jour · 4e item dans la liste · ligne supplémentaire dans le tableau · nouvelle sous-section · section Discussion entièrement nouvelle · bibliographie étendue

Together the two files cover the most common revision scenarios: inline text edits, math value changes, structural additions (new author, list item, table row, whole section) — making them a practical smoke-test for any LaTeX diff workflow.

Ensemble, les deux fichiers couvrent les scénarios de révision les plus courants : modifications de texte en ligne, changements de valeurs mathématiques, ajouts structurels (nouvel auteur, item, ligne de tableau, section entière) — constituant un test complet pour tout flux de travail de diff LaTeX.

Four-panel comparison showing the original manuscript, revised manuscript, tracked-changes output with blue additions and orange wavy-strikethrough deletions, and the clean resubmission copy
View on GitHub → Voir sur GitHub →