Accueil > LaTeX > Package > Un hook de pre-commit pour s’assurer d’ajouter des % en fin de ligne

Un hook de pre-commit pour s’assurer d’ajouter des % en fin de ligne

dimanche 10 août 2014, par Maïeul

Lorsqu’on crée une commande LaTeX, il est quasi-obligatoire de mettre un "%" à la fin de chaque ligne pour éviter les espaces indésirables.

Si vous versionnez votre code avec [?Git], il est possible de vérifier automatiquement la présence de ces %, grâce à un hook de pre-commit. Le hook empêchant l’ajout de ligne sans ce %.

Pourquoi mettre des % en fin de ligne à la fin des commandes ?

En TeX, les fins de lignes sont considérés comme des simples espaces. Ce qui pose problème si on fait tenir un commande sur plusieurs lignes.

Prenons par exemple la commande suivante, relativement simple :

\newcommand{\nom}[1]{
  \index{#1}
  \textbf{#1}
}

Si on l’appelle ainsi,

La pensée de \nom{Tertullien} a changé au cours des temps.

On constate des espaces indésirables avant et après "Tertullien" (souligné pour les besoins de la démonstration) :

La pensée de _Tertullien_ a changé au cours des temps.

Pour éviter cela, il faut insérer un % à la fin de chaque ligne :

\newcommand{\nom}[1]{%
  \index{#1}%
  \textbf{#1}%
}

Ce qui éviter d’avoir des espaces indésirables

La pensée de Tertullien a changé au cours des temps.

Un hook de pre-commit

Un "hook", au sens Git, est un script, écrit dans un language quelconque (perl, python, bash) qui est exécuté lorsque certains actions git ont lieu, dans le cas qui nous intéresse, juste avant un commit.

Le script peut envoyer des informations sur le Terminal, il peut modifier des fichers, il peut aussi faire échouer une action de Git, par exemple le commit.

J’ai donc créé un hook qui vérifie, sur les fichiers de .cls (définition de classe), .sty (définition de package), .dtx (documentation de package et de classe, .bbx, .lbx, .cbx (styles biblatex), qu’il n’y a pas, lors d’un commit, de lignes modifiés finissant sans %, à l’exception des lignes vides.

Le hook ne fonctionne pas sur les .tex car les fonctions devraient être définies dans des .sty, et qu’il ne faudrait pas forcer les % en fin de ligne dans les .tex, comme le prouve l’exemple suivant :

Ce serait une mauvaise%
idée.

Pour faire fonctionner le hook :

Hook de pre-commit
Dernière version stable. Licence GPL 3.

-* le télécharger

  • Le déplacer dans le dossier invisible .git/hooks dans le dépôt git local.
  • Le renommer pre-commit.
  • Lui donner les droits d’éxecutions (chmod +x).

C’est tout !

Désormais, il vous sera impossible de commiter par erreur une ligne ne finissant pas par %.

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)