Le package xspace^{∗}

David Carlisle (traduction française : Jean-Pierre Drucbert Jean-Pierre.Drucbert@onecert.fr)

1997/10/13

Résumé \xspace se place à la fin d’une macro utilisée généralement pour du texte. Elle ajoute une espace à moins que la macro ne soit suivie d’un caractère de ponctuation particulier.

1 Introduction

   Quand on tape \newcommand{\gb}{Great Britain\xspace}, on obtient :
\gb is a very nice place to live.

Great Britain is a very nice place to live.

\gb, a small island off the coast of France.

Great Britain, a small island off the coast of France.

\xspace évite à l’utilisateur d’avoir à taper \␣ ou {} après la plupart des occurrences d’un nom de macro dans le texte. Cependant si l’une de ces constructions suit \xspace, celui-ci n’ajoute pas une espace. Il est ainsi facile d’ajouter \xspace à la fin d’une macro existante sans devoir faire trop de modifications dans le document.

\xspace peut prendre quelquefois une mauvaise décision et ajouter une espace alors qu’elle n’est pas nécessaire. Dans ce cas, faire suivre la macro d’un {} aura pour effet de supprimer l’espace.

Notez que ce package doit être chargé après tout package de langue (ou autre) qui rend ’actifs’ les caractères de ponctuation.

2 Les macros

1 ⟨∗package⟩

\xspace \xspace effectue juste une vérification et appelle \@xspace.

 2 \DeclareRobustCommand\xspace{\futurelet\@let@token\@xspace}

\@xspace Si le caractère qui suit est un de ceux que l’on trouve dans une liste spéciale, ne fait rien, sinon ajoute une espace. Si vous utilisez souvent un caractère de ponctuation particulier, ajoutez une ligne appropriée (ne pas oublier d’ajouter un \fi à la fin !).

 3 \def\@xspace{%
 4 \ifx\@let@token\bgroup\else

∗Cette version a le numéro v1.06. La dernière révision date du 1997/10/13.

 5 \ifx\@let@token\egroup\else
 6 \ifx\@let@token\/\else
 7 \ifx\@let@token\ \else
 8 \ifx\@let@token~\else
 9 \ifx\@let@token.\else
10 \ifx\@let@token!\else
11 \ifx\@let@token,\else
12 \ifx\@let@token:\else
13 \ifx\@let@token;\else
14 \ifx\@let@token?\else
15 \ifx\@let@token/\else
16 \ifx\@let@token'\else
17 \ifx\@let@token)\else
18 \ifx\@let@token-\else
19 \ifx\@let@token\@xobeysp\else
20 \ifx\@let@token\space\else
21 \ifx\@let@token\@sptoken\else
22 \space

La première fois que j’ai écrit cela, il y avait une demi-douzaine de \fi à cet endroit, et j’ai pensé que c’était suffisamment moche comme ça.

23 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

24 ⟨/package⟩