Pourquoi y a-t-il tant de « % » dans le code des macros ?#

  • De façon générale, un saut de ligne est considéré comme une espace, y compris dans la définition d’une commande. Regardez ici avant le point :

\documentclass{article}
\usepackage{lmodern}
\pagestyle{empty}

\begin{document}
\large
\newcommand{\gras}[1]{
  \textbf{#1}
}

Je mets du texte en \gras{gras}.
\end{document}

Pour éviter l’apparition de ces espaces en trop, on pourrait bien sûr écrire le code de la commande sur une seule ligne :

\documentclass{article}
\usepackage{lmodern}
\pagestyle{empty}

\begin{document}
\large
\newcommand{\gras}[1]{\textbf{#1}}

Je mets du texte en \gras{gras}.
\end{document}

mais ça deviendrait vite illisible pour une commande plus complexe. Pour pouvoir proprement découper et indenter le code, on préfère souvent mettre les sauts de ligne en commentaire, en les précédant par le caractère pourcent (%) :

\documentclass{article}
\usepackage{lmodern}
\pagestyle{empty}

\begin{document}
\large
\newcommand{\gras}[1]{%
  \textbf{#1}%
}

Je mets du texte en \gras{gras}.
\end{document}

Notez que les espaces en début de ligne sont ignorées dans tous les cas, et peuvent donc être librement ajoutées pour mettre en évidence la structure du code.

Note

Ce caractère % peut être omis à la fin de certaines lignes, parce qu’elles se terminent par un nom de commande. Or toutes les espaces après un nom de commande sont ignorées.

Inversement, les espaces après certains mots-clefs les nombres et les unités (pt, cm…) sont importantes pour que le moteur puisse les distinguer du mot suivant. Dans ce cas, le signe % peut poser problème (explication détaillée en anglais ici).

Autre cas: on a parfois besoin de terminer une ligne par une espace, notamment si la ligne se termine par \ (antislash-espace). Dans ce cas, le caractère pourcent garantit que l’espace finale sera interprétée par et en même temps vue par les humains :

\show\
\show\ %