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

dimanche 10 août 2014, mise à jour samedi 21 février 2015, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Cet article est obsolète. Soit qu’il existe une manière plus « moderne » de procéder, soit que j’ai trouvé une autre méthode plus appropriée.
Voyez plutôt la nouvelle version : Fabriquer un exemplier.

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 %.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Acheter XeLaTeX appliqué aux sciences humaines

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

J’ai reçu en 2018 le prix DANTE e.V pour mon travail autour de LaTeX, en particulier autour de reledmac et reledpar.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul