Suivant: , Précédent: , Monter: Environments   [Table des matières][Index]


8.21 tabbing

Synopsis :

\begin{tabbing}
lgn1col1 \= lgn1col2 ... \\
lgn2col1 \> lgn2col2 ... \\
...
\end{tabbing}

L’environnement tabbing fournit une technique pour aligner du texte en colonnes. Il fonctionne en réglant des taquets et en tabulant jusqu’à eux à la façon dont on le faisait avec une machine à écrire ordinaire.

L’environnement tabbing est peu utilisé, car en général, pour formater du code informatique on utilise un environnement verbatim (voir verbatim). À noter également, pour mettre en vedette la syntaxe, les paquetages algorithm2e pour du pseudo-code, et fancyvrb, listings ou minted pour du vrai code. Et pour faire un tableau, on préfère les environnements tabular (voir tabular) ou array (voir array) pour un petit tableau qu’on met dans un flottant table (voir table) et l’environnement longtable fourni par le paquetage longtable pour un tableau pouvant être coupé sur plusieurs pages.

La description suivante n’est donc fournie que être complet.

Dans l’exemple suivant la première ligne sert à régler les taquets à des largeurs explicites, elle se termine par une commande \kill (décrite plus bas) :

\begin{tabbing}
\hspace{3cm}\=\hspace{2.5cm}\=\kill
Navire                \>Armement        \>Année   \\
\textit{Sophie}       \>14              \>1800    \\
\textit{Polychrest}   \>24              \>1803    \\
\textit{Lively}       \>38              \>1804    \\
\textit{Surprise}     \>28              \>1805    \\
\end{tabbing}

Le résultat ressemble à cela :

NavireArmementAnnée
Sophie141800
Polychrest241803
Lively381804
Surprise281805

L’environnement tabbing se distingue de tabular notamment parce qu’avec tabbing l’utilisateur est obligé de régler la position des taquets, et le contenu des colonnes est toujours composé en mode LR et s’étend sur la colonne suivante s’il est plus large que la colonne courante, alors qu’avec tabular, l’utilisateur peut selon le spécificateur de colonne, soit composer le contenu des cellules en mode LR et laisser LaTeX déterminer la largeur de colonne automatiquement pour que le contenu ne sorte jamais de la colonne, soit fixer la largeur et composer le contenu des cellules dans une parbox. Une autre différence est que tabular permet de faire des filets, notamment de border les colonnes par des filets verticaux, et d’avoir un espace \tabcolsep entre le contenu et la bordure de colonne. Une autre distinction est que un tabbing peut être coupé sur plusieurs pages, alors que tabular génère une boîte, l’environnement longtable du paquetage longtable étant préféré à tabbing pour les longs tableaux.

Finalement, alors que tabular peut être utilisé dans n’importe quel mode, tabbing ne peut être utilisé qu’en mode paragraphe, et il démarre un nouveau paragraphe.

De plus, comme l’illustre l’exemple donné plus haut, il n’est pas nécessaire d’utiliser la forme étoilée de la commande \hspace au début d’une ligne tabulée. La marge de droite de l’environnement tabbing est la fin de ligne, de sorte que la largeur de l’environnement est \linewidth.

L’environnement tabbing contient une suite de lignes tabulées, la première ligne tabulée commence immédiatement après \begin{tabbing} et chaque ligne se termine par \\ ou \kill. Il est possible d’omettre le \\ pour la dernière ligne et de terminer juste par \end{tabbing}.

L’environnement tabbing a un motif courant de taquets de tabulation qui est une séquence de n taquets, avec n > 0, numérotés 0, 1, etc. Ceci crée n colonnes correspondantes. Le taquet № 0 est toujours la marge de gauche définie par l’environnement englobant. Le taquet numéro i est réglé quand on lui assigne une position horizontale sur la page avec la commande \=. Le taquet numéro i ne peut être réglé que si les autres taquets 0, …, i-1 ont déjà été réglés.

L’un des taquets du motif courant ayant été réglé comme le taquet courant, par défaut tout texte composé par la suite au sein de l’environnement tabbing est composé en drapeau droit avec le fer à gauche sur ce taquet, c’est à dire qu’il est aligné à gauche dans la colonne courante. La composition est faite en mode LR.

Par ailleurs l’environnement tabbing a un taquet de début de ligne courant. Par défaut, immédiatement après \begin{tabbing} c’est le taquet № 0, et on peut le changer pour les lignes suivantes avec les commandes \+ et \-. Au début de chaque ligne tabulée, le taquet courant est initialement égal au taquet de début de ligne courant. Lorsque le motif de taquets est modifié par une commande \=, alors le taquet de début de ligne redevient le taquet № 0 à partir de la ligne suivante, à moins qu’une commande \+ le change de nouveau avant le changement de ligne par \\ ou \kill. La commande \pushtabs sauvegarde non seulement les positions de taquets, mais aussi le taquet de début de ligne, et inversement \poptabs le restaure.

La marge de droite de l’environnement tabbing est la fin de ligne, c.-à-d. que la largeur de l’environnement est de longueur \linewidth. Il n’y a pas par défaut de taquet correspondant à la marge de droite, même s’il serait possible avec un peu de calcul d’en définir un à cette position (voir exemples ci-après).

En ce qui concerne la marge de gauche, ou autrement dit le taquet № 0, contrairement à l’environnement tabular, il n’est pas nécessaire de mettre un \noindent devant \begin{tabbing} pour éviter un renfoncement : un environnement tabbing commence toujours un nouveau paragraphe sans renfoncement. De plus il est inutile d’étoiler une commande \hspace en début de ligne tabulée pour que l’espace soit pris en compte.

Normalement, au sein du motif de taquets de tabulation, l’ordre des taquets correspond à des positions allant de gauche à droite. Il est cependant possible de positionner n’importe quel taquet, hormis le taquet № 0 à n’importe quelle position en utilisant des espacements négatifs ou nuls. En réalité, le fait de ne pas pouvoir changer la position du taquet № 0 n’est pas restrictif, car on peut utiliser à la place comme taquet de début de ligne le taquet № 1 grâce à la commande \+. Ainsi dans l’exemple ci-dessous, alors qu’on a le même contenu de l’environnement tabbing que dans l’exemple précédent, la première et la troisième colonne ont été interverties en changeant uniquement le motif de taquets dans la première ligne se terminant en \kill.

\begin{tabbing}
\hspace{5.5cm}\=\hspace{-2.5cm}\=\hspace{-3cm}\=\+\kill
Navire              \>Armement         \>Année    \\
\textit{Sophie}     \>14               \>1800    \\
\textit{Polychrest} \>24               \>1803    \\
\textit{Lively}     \>38               \>1804    \\
\textit{Surprise}   \>28               \>1805    \\
\end{tabbing}

Le résultat ressemble donc à cela :

AnnéeArmementNavire
180014Sophie
180324Polychrest
180438Lively
180528Surprise

Les commandes suivantes peuvent être utilisées au sein d’un environnement tabbing :

\\ (tabbing)

Finit une ligne tabulée et la compose. Après cette commande une nouvelle ligne tabulée commence, et donc le taquet courant redevient le taquet courant de début de ligne.

\= (tabbing)

Règle le prochain taquet à la position courante, et fait de lui le taquet courant. Si le taquet courant est le taquet № n, alors une commande \= règle la position du taquet № n+1 et fait de lui le taquet courant. Si on avait déjà au moins n+2 taquets, ceci redéfinit la position du taquet № n+1. Sinon, le nombre de taquets dans le motif courant était à ce moment (n+1), c’est à dire que dernier des taquets en numéro d’ordre était le № n, alors la commande \= en définissant le taquet № n+1, porte le nombre de taquets de n+1 à n+2.

La position des taquets peut être définie avec plus de liberté que ce qui se passait avec un machine à écrire ordinaire. En effet il est possible de définir à la même position deux taquets de № n et № m distincts, voire de faire en sorte que les taquets № n et № m, avec n<m, soient à des positions telles que le taquet № m soit avant le taquet № n.

\> (tabbing)

Change le taquet courant au taquet suivant dans l’ordre logique, c.-à-d. si le taquet courant est le taquet № n, alors, en supposant qu’il y ait au moins n+2 taquets définis, on passe au taquet № n+1, sinon cette commande provoque une erreur.

\<

Change le taquet courant au taquet précédent dans l’ordre logique. Cette commande ne peut être utilisée qu’au début d’une ligne tabulée, et que lorsque le taquet de début de ligne courant est le taquet № n avec n>0. Le taquet courant devient alors le taquet № n-1.

Il est en fait possible d’avoir m commandes \< consécutives à condition que mn, le taquet courant devient alors le taquet № (n-m). Si par contre m>n, alors la n+1 commande \< provoque une erreur.

Il est possible, même si c’est absurde, d’avoir ensuite des commandes \> qui défont ce qu’on fait les commandes \<. Ainsi en supposant qu’au début d’une ligne tabulée le taquet de début de ligne courant soit le taquet № 2, faire commencer la ligne par \<\<\>\> n’a aucun effet. Par contre, \<\<\<\>\>\> provoquera une erreur, parce que la troisième commande \< est illicite. Dans les mêmes conditions faire \<\>\<\> provoque également une erreur, car la seconde commande \< n’est pas consécutive de la première, elle n’est donc pas, au sens où on l’entend, utilisée en début de ligne.

\+

Change le taquet de début de ligne courant au taquet suivant dans l’ordre logique pour la ligne tabulée suivante, et toutes celles qui suivent tant qu’une autre commande ne vient pas le modifier. La notion de taquet suivant dans l’ordre logique suit le même principe que pour la commande \>, c’est à dire que s’il n’y a que n+1 taquets définis, et que le taquet de début de ligne courant est le taquet № n, alors cette commande provoque une erreur. La commande \+ peut être invoquée n’importe où dans la ligne tabulée, et on peut avoir plusieurs commandes \+ au sein de la même ligne, du moment que pour chacune d’elle un nombre suffisant de taquets est déjà défini. Par exemple le code suivant provoque une erreur parce que bien qu’à la fin de la première ligne on ait trois taquets définis, au moment où la commande \+ est invoquée le nombre de taquets définis ne vaut que 1, on ne peut donc pas passer du taquet № 0 au taquet № 1 :

\begin{tabbing}
Vive \+\=la \=France\\
Vive \>la\>République\\
\end{tabbing}

En revanche le code suivant fonctionne, car lorsque la commande \+ est passée on a trois taquets définis, les taquets № 0 à 2, on peut donc passer du taquet № 0 au taquet № 1.

\begin{tabbing}
Vive \=la \=France\+\\
Vive \>la\>République\\
\end{tabbing}

C’est pourquoi l’usage est que la ou les commandes \+ sont toujours invoquées juste avant la fin de ligne \\ ou \kill.

Il est possible, même si cela est absurde, d’avoir sur la même ligne à la fois des commandes \+ et \- s’annulant l’une l’autre, du moment qu’aucune d’elle ne fasse passer sur un taquet non défini.

\-

Change le taquet de début de ligne courant au taquet précédent dans l’ordre logique pour la ligne tabulée suivante, et toutes celles qui suivent tant qu’une autre commande ne vient pas le modifier. C’est à dire que si le taquet de début de ligne courant est le taquet № n, et qu’on a m commandes \- avec mn, alors le taquet de début de ligne courant de la ligne suivante devient le taquet № n-m. Par contre, si m>n, alors la (n+1)ième commande \+ provoque une erreur.

\' (tabbing)

Déplace tout ce que vous avez tapé jusqu’alors dans la colonne courante, c.-à-d. tout ce qui suit la plus récente commande \>, \<, \', \\, ou \kill, aligné à droite dans la colonne précédente, le fer à droite étant espacé du taquet courant d’une longueur \tabbingsep. Voir aussi \`.

\` (tabbing)

Vous permet de placer du texte justifié à droite en face de n’importe quel taquet, y compris le taquet 0. Les commandes \` et \' alignent toutes deux le texte à droite, toutefois elles se distinguent fortement par deux aspects :

\a (tabbing)

Dans un environnement tabbing, les commandes \=, \' et \` ne produisent pas d’accents comme d’habitude (voir Accents). À leur place, on utilise les commandes \a=, \a' et \a`.

\kill

Règles les taquets sans produire de texte. Fonctionne tout comme \\ à ceci près que la ligne courante est jetée au lieu de produire une sortie. L’effet de toute commande \=, \+ ou \- dans cette ligne demeure en vigueur.

\poptabs

Restaure les positions de taquets et le taquet de début de ligne sauvegardés par le dernier \pushtabs.

\pushtabs

Sauvegarde dans une pile dédiée à cet effet le motif courant de taquets de tabulation ainsi que le taquet de début de ligne. C’est utile pour changer temporairement les positions de taquets au milieu d’un environnement tabbing. Après un \pushtabs, on a un nouveau motif vierge, c.-à-d. ne contenant qu’un seul taquet, le taquet № 0 à la position de début de ligne. Pour toute commande \pushtabs il doit y avoir une commande \poptabs avant la fin de l’environnement, c’est à dire que la pile doit être explicitement vidée avant le end{tabbing}.

\tabbingsep

Distance du texte déplacé par \' à la gauche du taquet courant.

Il est à noter que les espaces en début de ligne, où après \=, \> ou \< sont gobés, qu’il s’agisse d’espaces produits par la macro \space ou par le caractère espace. Par contre l’espace produit par la le caractère de contrôle espace (, c.-à-d. une controblique suivie d’un caractère espace) n’est pas gobé.

Cet exemple compose une fonction en Pascal dans un format traditionnel :

{\ttfamily
\begin{tabbing}
function \= fact(n : integer) : integer;\+\\
            begin \=\+\\
                  if \= n $>$ 1 then\+\\
                        fact := n * fact(n-1)\-\\
                  else\+\\
                        fact := 1;\-\-\\
            end;\\
\end{tabbing}}

Le résultat ressemble à cela :

function fact(n : integer) : integer;
         begin
               if n > 1 then
                  fact := n * fact(n-1);
               else
                  fact := 1;
         end;

Voici un autre exemple où le taquet № 2 est entre le taquet № 0 et le taquet № 1 :

{\ttfamily
\begin{tabbing}
  12\=34\=\kill
  12345678\=9\\
  1\>2\>3\\
\end{tabbing}}

Le résultat ressemble à cela :

123456789
1   3   2

Voici un exemple où les taquets № 0 et № 1 sont confondus, ainsi que les taquets № 2 et № 3, ce qui permet de superposer le texte aux taquets impairs sur celui au taquets pairs, par exemple pour souligner ou barrer comme avec une machine à écrire, en superposant un caractère _ ou un caractère -. Évidemment ce n’est qu’une illustration de la flexibilité des taquets, et non une méthode convenable pour souligner ou barrer un mot, d’une part parce que tabbing en soi commençant un nouveau paragraphe ne permet pas d’agir sur un seul mot, et d’autre part, parce que le paquetage soul fait cela beaucoup mieux.

{\ttfamily
\begin{tabbing}
  \=souligne  \=\=\kill
  soulign\a'e\>
  \_{}\_{}\_{}\_{}\_{}\_{}\_{}\_{}\>
  barr\a'e\>{--}{--}{--}{--}{--}{--}\\
\end{tabbing}}

Finalement, voici un exemple où on a placé le taquet № 5 décalé d’une longueur \tabbingsep à droite de la marge de droite.

{\ttfamily
\begin{tabbing}
\hspace{1cm}\=\hspace{1cm}\=\hspace{1cm}\=\hspace{1cm}\=
   \hspace{\dimexpr\linewidth-4cm+\tabbingsep}\=\kill
1\>2\>X\'3\>4\>5\>\a`a gauche de de la marge de droite
   avec \textbackslash'\'\\
1\>2\>X\'3\>4\>5\`\a`a gauche de de la marge de droite
   avec \textbackslash`\\
\end{tabbing}}

Le résultat ressemble à cela :

1    2  X 3    4    5            à gauche de la marge de droite avec \'
1    2  X 3    4    5            à gauche de la marge de droite avec \`

Suivant: , Précédent: , Monter: Environments   [Table des matières][Index]