summaryrefslogtreecommitdiff
path: root/info/translations/booktabs/fr/f-booktabs.dtx
blob: 555bdbb4881ee6007653ffd7bd4c7fb28684cb8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
% \iffalse meta comment
% File: booktabs.dtx Copyright (C) 1995 Simon Fear
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{booktabs}
%<package>         [1995/11/06 v1.00 publication quality tables]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{booktabs}
\usepackage[T1]{fontenc}       % ajouté par le traducteur
\usepackage[latin1]{inputenc}  % ajouté par le traducteur
\usepackage[frenchb]{babel}    % ajouté par le traducteur
	\title{Tableau de qualité pour la publication avec \LaTeX\thanks{Ce
	fichier est la version v1.00, dernière révision du 6 novembre
	1995.}\ \thanks{Traduit en fran\c{c}ais par Jean-Pierre Drucbert et
	Mathieu Goutelle le 2~mai~2001. Titre original <<~Publication quality
	tables in \LaTeX~>>.}}
 \author{Simon Fear\\University of Liverpool}
 \date{Printed \today}
 \MakeShortVerb{\=}
 \MakeShortVerb{\"}
\begin{document}
 \maketitle
 \DeleteShortVerb{\|}
 \DocInput{f-booktabs.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{319}
%
% \begin{abstract}
% Ce document décrit quelques commandes supplémentaires pour améliorer la
% qualité des tables en \LaTeX. Des conseils sont donnés ici pour dire ce
% qui constitue une <<~bonne\,\footnote{NdT : selon des règles
% d'esthétiques particulières, que Simon C. Fear préfère.}~>> table dans
% ce contexte.
% \end{abstract}
%
% \section{Introduction}
%
% Les commandes décrites ci-dessous doivent faciliter la production de
% tables telles qu'elles apparaissent (devraient apparaître) dans les
% livres et journaux scientifiques publiés. Ce qui distingue ces tables de
% celles que le \LaTeX{} normal est capable de produire est un espacement
% au dessus et au dessous des filets et des filets d'épaisseur variable.
% Ce qui les distingue encore plus des tables que beaucoup de gens
% produisent \emph{en fait} en utilisant \LaTeX{} est l'absence de filets
% verticaux et de filets doubles.
%
% Je dois faire une claire distinction entre ce que j'entends par une
% \emph{table formelle}, qui est un ensemble de valeurs et de labels dans
% des colonnes, et ce que j'appelle un \emph{tableau}, qui est le genre de
% choses présentées dans le manuel \LaTeX, et qui est de plus en plus
% commun comme sortie des systèmes de gestion ou de bases de données, avec
% en plus des icônes en abondance, et probablement de la couleur par
% dessus le marché. La mise en page d'un \emph{tableau} est déterminée
% (heureusement) de manière unique, étant donné un paquet de matériel que
% le concepteur essaie de combiner en une configuration significative.
% Mais la mise en page d'une \emph{table} a été définie littéralement
% depuis des siècles d'expérience et ne devrait être altérée que dans des
% circonstances vraiment extraordinaires.
%
% Pour illustrer mon propos, considérons ce tableau extrait du manuel
% \LaTeX{} (page~64 de l'ancienne édition):
%
% \begin{center}
% \begin{tabular}{||l|lr||} \hline
% gnats     & gram      & \$13.65 \\ \cline{2-3}
%           & each      & .01 \\ \hline
% gnu       & stuffed   & 92.50 \\ \cline{1-1} \cline{3-3}
% emu       &           & 33.33 \\ \hline
% armadillo & frozen    & 8.99 \\ \hline
% \end{tabular}
% \end{center}
%
% C'est un fatras d'informations qui est probablement présenté
% raisonnablement clairement ainsi (mais l'émeu est-il farci ou non?),
% Cependant, pour une table publiée, elle devrait certainement suivre les
% conseils donné plus bas sur cette page du manuel:
%
% \begin{center}
% \begin{tabular}{@{}llr@{}} \toprule
% \multicolumn{2}{c}{Item} \\ \cmidrule(r){1-2}
% Animal & Description & Price (\$)\\ \midrule
% Gnat  & per gram  & 13.65 \\
%       & each      & 0.01 \\
% Gnu   & stuffed   & 92.50 \\
% Emu   & stuffed   & 33.33 \\
% Armadillo & frozen & 8.99 \\ \bottomrule
% \end{tabular}
% \end{center}
%
% Vous pouvez notez que ceci en fait demande moins de travail pour mettre
% ceci en page sous forme de table formelle; nous n'avons plus à
% construire une nouvelle mise en page pour chaque table que nous faisons.
% Bien plus, nous pouvons être presque certains que les données ne
% pourront pas être mal lues (car le lecteur n'a pas à apprendre comment
% lire chacun parmi l'infinie variété des tableaux possibles).
%
% La table ci-dessus ne peut pas être produite en \LaTeX{} pur,
% malheureusement. Elle peut être mise en page comme elle devrait l'être,
% mais malgré tous nos efforts, l'utilisation de simples commandes
% =\hline= donne
%
% \begin{center}
% \begin{tabular}{@{}llr@{}} \hline
% \multicolumn{2}{c}{Item} \\ \cline{1-2}
% Animal & Description & Price (\$)\\ \hline
% Gnat  & per gram  & 13.65 \\
%       & each      & 0.01 \\
% Gnu   & stuffed   & 92.50 \\
% Emu   & stuffed   & 33.33 \\
% Armadillo & frozen & 8.99 \\ \hline
% \end{tabular}
% \end{center}
%
% Notez (si ce n'est pas déjà évident) qu'il n'y a pas assez d'espace
% entre la ligne du haut et le I majuscule de <<~Item~>>, et de même pour
% toutes les lignes: comparez avec la version précédente. De plus, les
% filets (c'est-à-dire les lignes) du haut et du bas dans la première
% version sont plus gras que le filet du milieu, qui à son tour est plus
% gras que le filet mineur en dessous de <<~Item~>>. Oui, je \emph{sais}
% que vous pouvez redéfinir =\doublerulesep= et ensuite utiliser
% =\hline\hline= pour obtenir quelque chose donnant presque le même
% effet, et vous pouvez utiliser des <<~struts~>> pour améliorer
% l'espacement. Mais ce sont des astuces et vous ne devriez pas avoir à
% vous soucier de telles choses. Le paquetage \texttt{booktabs} définit
% ses propres commandes pour que ces problèmes soient pris en compte
% automatiquement.
%
% En général, je voudrais dire que ce paquetage est sans intérêt pour ceux
% qui cherche une alternative à Pic\TeX{} pour traiter des tableaux
% sophistiqués. C'est plutôt un guide de style pour les auteurs d'articles
% et de livres scientifiques en ce qui concerne la mise en page des
% tables. Il n'est pas exagéré de dire que si vous ne pouvez pas créer une
% table en utilisant les commandes de ce paquetage, c'est que vous l'avez
% mal conçue.
%
% \subsection{Une note sur la terminologie}
%
% En typographie britannique, une <<~line~>> s'appelle toujours une
% <<~rule~>> (NdT : en typographie française, une <<~ligne~>> s'appelle
% toujours un <<~filet~>>). Peut-être en portant à confusion (pour des
% raisons historiques), l'<<~épaisseur~>> d'un filet est souvent appelée
% sa <<~largeur~>> (alors que n'importe qui d'autre l'appellerait sa
% <<~profondeur~>> ou <<~hauteur~>>, s'il pensait à un filet horizontal).
% Une <<~ligne noire épaisse~>> est appelée un <<~filet gras~>> (<<~heavy
% rule~>>). Cette terminologie (britannique) est utilisée dans la plupart
% des nouvelles commandes décrites ci-dessous. Au moins cela évite la
% confusion avec =\hline=.
%
% \subsection{La mise en page des tables formelles}
% Vous ne ferez pas de graves erreurs si vous vous rappelez à tout moment
% de deux simples commandements:
% \begin{enumerate}
%  \item Ne jamais, au grand jamais, utiliser de filets verticaux.
%  \item Ne jamais utiliser de filets doubles.
% \end{enumerate}
% Ces commandements peuvent sembler extrêmes mais en des années
% d'expérience je n'ai jamais trouvé un bon argument pour passer outre.
% Par exemple, si vous sentez que les informations dans la moitié gauche
% d'une table sont si différentes de celles de la droite qu'il faut les
% séparer par une ligne verticale, alors vous devriez plutôt utiliser deux
% tables. Le second commandement est très, très occasionnellement violé:
% j'ai travaillé pour un éditeur qui insistait pour placer un filet fin
% double au dessus d'une rangée de totaux. Mais ce n'aurait pas été mon
% choix.
%
% Il y a trois autres conseils que je pourrai citer ici car ils sont si peu
% connus en dehors des cercles des typographes et éditeurs professionnels:
% \begin{enumerate}
%      \item Placez les unités dans l'en-tête de la colonne (pas dans le corps de
%         la table).
%      \item Faites toujours précéder un point décimal (une virgule décimale en
%         français) par un chiffre; donc 0.1 (ou 0,1) et \emph{pas} simplement .1
%         (,1).
%      \item N'utilisez pas de signes <<~ditto~>> ou toute convention analogue
%         pour répéter une valeur précédente. Dans la plupart des cas, un blanc fait
%         aussi bien l'affaire. Sinon, répétez la valeur.
% \end{enumerate}
%
% Est-ce que c'est moi qui suis pédant? Ces derniers conseils sont de plus en
% plus souvent ignorés dans les travaux publiés. Pour moi, ceci montre
% simplement que la typographie est celle d'un amateur.
%
% De toute façon, que vous vouliez ou non suivre ces embellissements mineurs,
% si vous n'utilisez que les commandes suivantes dans vos tables formelles,
% votre lecteur sera reconnaissant. (Je répète que ces conseils ne sont pas
% seulement pour faire plaisir au pédant. Une structure de présentation
% améliorée commence par améliorer la pensée structurée).
%
% \section{Utilisation des nouvelles commandes}
%
% \DescribeMacro\toprule
% \DescribeMacro\midrule
% \DescribeMacro\bottomrule
% Dans les cas les plus simples une table commence par une =\toprule=, a une
% rangée simple d'en-têtes de colonnes, puis un filet de séparation appelé ici
% =\midrule=; après les colonnes de données nous terminons par une
% =\bottomrule=. La plupart des éditeurs de livres rendent les filets
% =\toprule= et =\bottomrule= plus gras (c'est-à-dire plus larges,
% ou plus sombres; c'est une question de notation) que le filet intermédiaire
% =\midrule=. Cependant, lorsque les tables sont en très petits
% caractères, il est parfois impossible de faire cette distinction, et de plus
% quelques journaux utilisent des filets qui sont tous de même épaisseur. Les
% commandes de filet de ce paquetage ont toutes une épaisseur par défaut qui
% peut être modifiée à l'intérieur du document (de préférence, mais pas
% obligatoirement, dans le préambule). Pour les filets du haut et du bas,
% c'est =\heavyrulewidth= et pour les filets intermédiaires c'est
% =\lightrulewidth= (ces commandes sont décrites complètement plus loin). Dans
% de très rares cas, vous pouvez utiliser les arguments optionnels des
% commandes de filet qui ont la syntaxe formelle suivante:
% \begin{quote}
%   "\toprule["\meta{largeur}"]" \\
%   "\midrule["\meta{largeur}"]" \\
%   "\bottomrule["\meta{largeur}"]"
% \end{quote}
% où \meta{largeur} est une dimension \TeX{} (par exemple 1pt, .4em, etc.).
%
% Toutes les commandes de filets décrites ici se placent immédiatement après
% la commande =\\= qui termine la rangée précédente (sauf bien sûr pour
% =\toprule=, qui se place juste après le début de l'environnement
% \texttt{tabular}); en d'autres termes, exactement là où le \LaTeX{} standard
% permet =\hline= ou =\cline=.
%
% \DescribeMacro\cmidrule
% Bien sûr plus souvent que nous le voudrions nous avons besoin d'un filet qui
% ne s'étend que sur certaines des colonnes, filet pour lequel nos utiliserons
% =\cmidrule= (analogue \`a la commande =\cline= de \LaTeX). En général, ce
% filet ne devrait pas recouvrir complètement les colonnes terminales, est
% ceci est en particulier le cas lorsque nous devons commencer une =\cmidrule=
% immédiatement après la fin d'une autre (les =\cline='s de \LaTeX{} se
% touchent si vous n'êtes pas extrêmement attentifs à =\extracolsep=). Donc
% vous voudrez en général utiliser les commandes optionnelles de
% raccourcissement (<<~trimming~>>), qui sont =(r)=, =(l)= et =(rl)= ou
% =(lr)=, qui indiquent si les extrémités droite et/ou gauche du filet doivent
% être rognées. Notez l'utilisation exceptionnelle de \emph{parenthèses} au
% lieu d'accolades ou de crochets pour cette commande, dont la syntaxe
% complète est
% \begin{quote}
%    "\cmidrule["\meta{largeur}"]("\meta{rognage}"){"$a$--$b$"}"
% \end{quote}
% où \meta{largeur} est encore une épaisseur optionnelle de filet (dont la valeur
% par défaut est ici =\cmidrulewidth=) et le dernier argument, qui n'est pas
% optionnel, donne les numéros des colonnes à englober.
%
% Un exemple d'utilisation de ces commandes est donné par le code utilisé pour
% produire l'exemple de table ci-dessus:
% \begin{verbatim}
% \begin{tabular}{@{}llr@{}} \toprule
% \multicolumn{2}{c}{Item} \\ \cmidrule(r){1-2}
% Animal & Description & Price (\$)\\ \midrule
% Gnat  & per gram  & 13.65 \\
%       & each      & 0.01 \\
% Gnu   & stuffed   & 92.50 \\
% Emu   & stuffed   & 33.33 \\
% Armadillo & frozen & 8.99 \\ \bottomrule
% \end{tabular}
% \end{verbatim}
%
% \DescribeMacro\addlinespace
% Occasionnellement nous désirons mettre un espacement supplémentaire entre
% certaines rangées d'une table; par exemple, avant la dernière rangée, si
% c'est un total (un espacement est ici préférable à une autre =\midrule=,
% selon mon opinion). Il suffit d'insérer
% \begin{quote}
%   "\addlinespace["\meta{largeur}"]"
% \end{quote}
% après le marqueur d'alignement =\\=. Il n'est pas mauvais de voir
% =\addlinespace= comme étant un filet blanc d'épaisseur \meta{largeur}.
% L'espacement par défaut est =\defaultaddspace= qui donne bien moins qu'un
% interligne complet (comme ce que vous obtiendriez en utilisant =\\ \\= à la
% fin de la ligne; ceci donne vraiment trop d'espace dans la plupart des cas).
%
% \section{Abus des nouvelles commandes}
% Il faut le reconnaître, cela ne marche pas tout seul, et il y a donc
% quelques conseils et des commandes supplémentaires pour les \TeX perts et
% les touche-à-tout.
%
% Les nouvelles commandes de filet ne sont pas garanties pour fonctionner avec
% =\hline= ou =\cline=, bien que celles-ci restent disponibles et inchangées.
% Je ne peut prévoir aucune raison pour vouloir les mélanger.
%
% Plus sérieusement, les filets engendrés par les nouvelles commandes ne sont
% pas garantis pour se connecter aux filets verticaux engendrés par des
% caractères =|= dans le préambule de la table. Ceci est une particularité
% (voir plus haut). Vous ne devriez pas utiliser de filets verticaux dans les
% tables, point final.
%
% \DescribeMacro\morecmidrules
% Si vous ne pouvez pas vous empêcher d'utiliser un filet double, même une
% construction aussi bizarre que =\toprule==\bottomrule==\midrule=
% fonctionnera sans provoquer de message d'erreur (tout comme vous pouviez
% utiliser une double =\hline=). Ces filets seront séparées de l'intervalle
% =\doublerulesep= du \LaTeX{} normal. Cependant si votre perversion va
% jusqu'à vouloir des =\cmidrule= doubles, vous aurez besoin de la commande
% supplémentaire =\morecmidrules= pour le faire correctement, car normalement
% deux commandes =\cmidrule= de suite est une construction parfaitement
% correcte demandant deux filets sur le même <<~filet de rangée~>>. Donc dans
% \begin{quote}
%   "\cmidrule{1-2}\cmidrule{1-2}"
% \end{quote}
% la seconde commande écrit un filet qui vient se placer exactement sur le
% premier; je suppose que vous vouliez
% \begin{quote}
%   "\cmidrule{1-2}\morecmidrules\cmidrule{1-2}"
% \end{quote}
% qui donne un filet double entre les colonne une et deux, séparés de
% =\cmidrulesep= (note: puisque qu'une =\cmidrule= donne un filet très fin, la
% valeur ordinaire =\doublerulesep= donnerait probablement un espacement trop
% grand). Il faut terminer une rangée complète de filets avant de mettre la
% commande =\morecmidrules=. Notez que =\morecmidrules= n'a aucun effet si
% elle ne suit pas immédiatement une =\cmidrule= (ie n'est donc pas une
% commande générale d'espacement).
%
% \DescribeMacro\specialrule
% Parler de ceci nous amène à l'abus de =\addlinespace= pour engendrer un
% espacement supplémentaire curieux entre des filets. Ne le faites pas (ce
% n'est cependant pas vraiment illégal). Utilisez plutôt
% \begin{quote}
%   "\specialrule{"\meta{largeur}"}{"\meta{espace au dessus}"}{"\meta{espace au dessous}"}"
% \end{quote}
% où il faut noter que les trois arguments sont obligatoires (je ne me suis
% pas soucié d'établir des valeurs par défaut). Si vous utilisez ceci
% fréquemment, vous n'avez pas compris le but et le contenu des conseils
% donnés plus haut. Note technique: aucun espacement n'est ajouté après un
% filet précédent, mais un filet suivant engendrera un espacement
% =\doublerulesep= au dessus de lui. Pourquoi lisez-vous cette section ?
%
% \section{Sommaire technique des commandes}
% Les nouvelles commandes de filets sont valides à l'intérieur de
% l'environnement \texttt{tabular} (et en fait aussi à l'intérieur de
% l'environnement \texttt{array} et de ses dérivés), dans toutes les versions
% de \LaTeX{} (vous devrez retirer la ligne
% \begin{quote}
%    "\ProvidesPackage{booktabs}"
% \end{quote}
% de =booktabs.sty= pour fonctionner sous \LaTeX{}2.09 et les versions
% antérieures), et entièrement compatible avec l'environnement \texttt{array}
% du paquetage \texttt{array} fourni avec \LaTeXe.
%
% Les commandes suivent la syntaxe de placement standard de =\hline=. Si des
% commandes de filets sont doublées, il est plus prudent de vérifier qu'il n'y
% a pas d'espace entre les commandes. (Dans de nombreux cas, l'oubli de cette
% règle de sécurité donnera le message étrange <<~=misplaced noalign{=~>>.)
% N'utilisez pas de filets doubles !
%
% Dans ce qui suit, un <<~filet~>> est l'une des commandes =\toprule=,
% =\midrule=, =\bottomrule=, =\cmidrule=, =\specialrule= ou =\addlinespace=.
% Notez en particulier la présence de la commande =\addlinespace= dans cette
% liste; et l'exclusion de =\hline= et =\cline=, qui donneront des résultats
% imprévisibles si vous les mélanger avec les premières.
%
% \begin{quote}
%   "\toprule["\meta{largeur}"]"
% \end{quote}
% Un filet de largeur \meta{largeur} (défaut =\heavyrulewidth=) avec
% =\belowrulesep= d'espacement vertical supplémentaire inséré en dessous de
% lui (sauf si il est suivi d'une autre commande de filet, auquel cas un
% espacement vertical =\doublerulesep= suit).
% \begin{quote}
%   "\midrule["\meta{largeur}"]"
% \end{quote}
% Un filet de largeur \meta{largeur} (défaut =\lightrulewidth=) avec un espacement
% =\aboverulesep= au dessus de lui (sauf si précédé d'un autre filet, auquel
% cas il en sera séparé de la quantité =\doublerulesep=) et avec un espacement
% =\belowrulesep= en dessous de lui (à moins qu'un autre filet suive).
% \begin{quote}
%   "\bottomrule["\meta{largeur}"]"
% \end{quote}
% Un filet de largeur \meta{largeur} (défaut =\heavyrulewidth=) avec un espacement
% =\aboverulesep= au dessus de lui (sauf s'il est précédé d'un autre filet,
% duquel il sera séparé de la quantité =\doublerulesep=) et avec un espacement
% =\belowrulesep= en dessous de lui (à moins qu'un autre filet le suive).
% L'espacement supplémentaire en dessous permet de laisser de l'espace pour
% des notes en bas de table.
% \begin{quote}
%   "\cmidrule["\meta{largeur}"]("\meta{rognage}"){"$a$--$b$"}"
% \end{quote}
% Un filet de largeur \meta{largeur} (défaut =\cmidrulewidth=) avec un espacement
% =\aboverulesep= au dessus de lui (sauf si il suit un autre =\cmidrule=,
% auquel cas il est sur le même alignement vertical; ou si il suit tout
% autre filet, séparé de =\doublerulesep=; ou si il suit =\morecmidrules=,
% séparé de =\cmidrulesep=), et avec l'espacement =\belowrulesep= en dessous
% de lui (à moins d'être suivi d'une autre =\cmidrule=, auquel cas le filet
% suivant est sur le même alignement vertical; ou si suivi de
% =\morecmdirules=, avec l'espacement =\cmidrulesep= en dessous).
%
% Le filet s'étend sur les colonnes $a$ à $b$. L'argument optionnel \meta{trim}
% qui se place entre parenthèses s'il est présent, peut être =r= pour rogner
% sur la droite, =l= pour rogner sur la gauche, ou les deux.
% \begin{quote}
%   "\addlinespace["\meta{largeur}"]"
% \end{quote}
% En fait considéré comme un filet de largeur nulle (donc invisible) sans
% espacement supplémentaire au dessus et un espacement \meta{largeur} (qui est par
% défaut =\defaultaddspace=) au dessous (si un autre filet suit, celui-ci sera
% séparé en plus de =\doublerulesep=). En pratique, n'utilisez cette commande
% que pour ajouter de l'espace entre des rangées dans le corps de la table.
% \begin{quote}
%   "\specialrule{"\meta{largeur}"}{"\meta{espace au dessus}"}{"\meta{espace au dessous}"}"
% \end{quote}
% Un filet de largeur \meta{largeur} (notez l'argument obligatoire) avec un
% \meta{espace au dessus} et un \meta{espace au dessous} (sauf si un autre filet
% suit, auquel cas la séparation sera encore augmentée de =\doublerulesep=).
% \begin{quote}
%   "\morecmidrules"
% \end{quote}
% Avertit \LaTeX{} qu'il faut commencer une nouvelle rangée de =\cmidrule=,
% séparée de la dernière par =\cmidrulesep=. N'a aucun effet en dehors de ce
% contexte.
%
% Les dimensions par défaut sont
% \begin{quote}
%   "\heavyrulewidth=.08em" \\
%   "\lightrulewidth=0.5em" \\
%   "\cmidrulewidth=0.3em" \\
%   "\belowrulesep=.65ex" \\
%   "\aboverulesep=.4ex" \\
%   "\defaultaddspace=.5em" \\
%   "\cmidrulekern=.25em"
% \end{quote}
% La dernière d'entre elles, =\cmidrulekern=, est la quantité dont une
% =\cmidrule= est rognée à chaque bout indiqué dans les options
% =()=. Dans la construction
% \begin{quote}
%   "\cmidrule(r){1-2}\cmidrule(l){3-4}"
% \end{quote}
% il y a un total de 0.5~em séparant les deux filets. Actuellement le seul
% moyen pour obtenir des effets spéciaux est de modifier comme il convient la
% valeur de =\cmidrulekern=; la valeur du raccourcissement n'est pas
% disponible sous forme d'argument dans le codage actuel de =\cmidrule=.
%
% L'usager peut modifier ces valeurs par défaut au vol en insérant simplement
% une commande exactement sous le format ci-dessus; la redéfinition restera
% effective pour le reste du document ou jusqu'à la prochaine redéfinition.
%
% \section{Support de \texttt{firsthline} et \texttt{lasthline}}
% Oui, d'une certaine manière, mais essentiellement non. Ceci ne s'applique
% pas en fait. Les commandes de ce paquetage ne sont pas faites pour faire de
% belles choses avec des boîtes; celles-ci sont des tableaux et non des
% tables. Vous ne voudrez jamais, jamais, placer une table formelle au milieu
% d'une ligne de texte.
%
% Cependant, si vous utilisez le paquetage \texttt{array}, les commandes ne
% sont pas altérées par le code présent (par exemple =\hline= et =\cline=
% restent actives).
%
% \section{Remerciements}
% Je\footnote{NdT : Simon Fear} suis grandement redevable bien sûr à DEK et
% Lamport ; l'argument optionnel et le code de =\cmidrule= notamment est
% copié et adapté de =latex.sty=. La documentation est massivement tirée de
% la description du package =dcolumn.dtx= de David Carlisle.
%
% Pour les tests et les encouragements...
%
% \StopEventually
%
% \section{Le code}
%
%   La version actuelle est définie au début du fichier par quelquechose
%   ressemblant à ça :
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{booktabs}
		  [\filedate\space version\fileversion]
%    \end{macrocode}
%
%   D'abord nous définissons les nouvelles dimensions décrites plus haut :
%    \begin{macrocode}
\newdimen\heavyrulewidth
\newdimen\lightrulewidth
\newdimen\cmidrulewidth
\newdimen\belowrulesep
\newdimen\aboverulesep
\newdimen\cmidrulesep
\newdimen\cmidrulekern
\newdimen\defaultaddspace
\heavyrulewidth=.08em
\lightrulewidth=.05em
\cmidrulewidth=.03em
\belowrulesep=.65ex
\aboverulesep=.4ex
\cmidrulesep=\doublerulesep
\cmidrulekern=.25em
\defaultaddspace=.5em
%    \end{macrocode}
%   et quelques compteurs internes, sans intérêt pour l'utilisateur :
%    \begin{macrocode}
\newcount\rulesflag
\newdimen\@cmidrulewidth
\newcount\@cmidla
\newcount\@cmidlb
\rulesflag=0
%    \end{macrocode}
%   qui seront décrits plus bas si besoin.
%
% \subsection{Filets en pleine largeur}
%
%   Nous plaçons le filet en pleine largeur dans un groupe =\noalign{}=, en
%   utilisant une grosse astuce ("\ifnum=0`}") pour faire croire à l'analyseur
%   que le nombre d'accolades est correct. L'accolade sera réellement
%   fermée après tout le traitement à la fin de la macro =\@endrule=.
%
% \begin{macro}{\toprule}
%    \begin{macrocode}
\def\toprule{\noalign{\ifnum0=`}\fi
	 \@ifnextchar[{\@toprule}{\@toprule[\heavyrulewidth]}}
%    \end{macrocode}
%   Cela tient compte de l'argument optionnel de =\toprule= : s'il y en a
%   un, il est passé à =\@toprule=, sinon l'appel est fait avec la taille
%   par défaut =\heavyrulewidth=.
%
%   Dans la suite, si =\rulesflag= a été défini (avec la valeur 1), nous
%   venons juste de créer un précédent filet qui avait été modifié
%   exceptionellement pour ne pas avoir un espacement normal après, donc
%   nous devons placer =\doublerulesep= avant ce =\toprule=; ensuite, nous
%   réinitialisons =\rulesflag= à zéro.
%   Note : nous ne pouvons pas juste ajouter toujours =\belowrulesep= après
%   un =\toprule=, parce que il pourrait y avoir un =\doublerulesep= entre
%   deux filets successifs. En revanche, nous pouvons interdire tout
%   simplement les files doubles !
%    \begin{macrocode}
\def\@toprule[#1]{\ifnum\rulesflag=1\vskip
	 \doublerulesep\global\rulesflag=0\fi
	 \hrule \@height#1\futurelet\@tempa\@endrule}
%    \end{macrocode}
%
%   À la troisième ligne au dessus, nous avons ajouter le filet et nous
%   appelons la routine de fin =\@endrules= avec =\@tempa= égal au
%   \emph{token} suivant le filet dans le document.
%    \begin{macrocode}
\def\@endrule{\ifx\@tempa\toprule\global\rulesflag=1%
	 \else\ifx\@tempa\midrule\global\rulesflag=1%
	 \else\ifx\@tempa\bottomrule\global\rulesflag=1%
	 \else\ifx\@tempa\cmidrule\global\rulesflag=1%
	 \else\ifx\@tempa\specialrule\global\rulesflag=1%
	 \else\ifx\@tempa\addlinespace\global\rulesflag=1%
	 \else\vskip \belowrulesep\fi\fi\fi\fi\fi\fi\ifnum0=`{\fi}}
%    \end{macrocode}
%   Ici, si la commande suivante est un autre filet ou un interligne (la
%   honte sur l'utilisateur !), nous avons initialisé =\rulesflag= à 1 sans
%   ajouter d'espace. Sinon, nous avons placé, après, l'espacement approrié.
% \end{macro}
%
% \begin{macro}{\midrule}
% \begin{macro}{\bottomrule}
%   Le code est presque le même que pour =\topriule=, sauf pour l'ajout de
%   l'espace suivant le filet.
%
%   Notons qu'en ce qui concerne la programmation, un =\bottomrule= est
%   simplement un =\midrule= large (mais l'utilisateur ne doit pas penser
%   de cette façon.
%    \begin{macrocode}
\def\midrule{\noalign{\ifnum0=`}\fi
	 \@ifnextchar[{\@midrule}{\@midrule[\lightrulewidth]}}
\def\@midrule[#1]{\ifnum\rulesflag=1\vskip
	 \doublerulesep\global\rulesflag=0
	 \else\vskip \aboverulesep\fi
	 \hrule \@height#1\futurelet\@tempa\@endrule}
\def\bottomrule{\noalign{\ifnum0=`}\fi
	 \@ifnextchar[{\@midrule}{\@midrule[\heavyrulewidth]}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\addlinespace}
%
%   Un =\addlinespace= est traité comme une ligne de largeur nulle, sans
%   espace avant et avec après l'espacement donné en argument (ou par
%   défaut). Notez que la ligne suivante sera ajouté après un espace
%   \emph{supplémentaire} de =\doublerulesep=. L'utilisateur n'est pas
%   encouragé à ajouter de l'espace avant/après les filets avec
%   =\addlinespace=. Si besoin, il devra utiliser =\specialrule=.
%    \begin{macrocode}
\def\addlinespace{\noalign{\ifnum0=`}\fi
	 \@ifnextchar[{\@addspace}{\@addspace[\defaultaddspace]}}
\def\@addspace[#1]{\ifnum\rulesflag=1\global\rulesflag=0\fi
	 \vskip #1\futurelet\@tempa\@endrule}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\specialrule}
%   Ceci est inclus avec une certaine appréhension puisque cela permet à
%   l'utilisateur de faire des choses stupides. Mais, un \emph{designer}
%   pourrait avoir besoin de ceci (ou d'une adaptation).
%
%   Notez qu'un =\toprule= suivant se comportera comme attendu (pas
%   d'espace supplémentaire avant), mais un =\midrule= ou un =\bottomrule=
%   ajoutera =\aboverulespace=, pendant que =\cmidrule= ajoutera
%   =\doublerulesep=. Pourquoi voudriez vous faire ceci de toute façon ?
%    \begin{macrocode}
\def\specialrule#1#2#3{\noalign{
	 \ifnum\rulesflag=1\global\rulesflag=0
	 \else\vskip #2\fi\hrule \@height#1\vskip #3}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Filets spéciaux}
%
% \begin{macro}{\cmidrule}
%    =\cmidrule= utilise =\rulesflag= d'une manière un peu différente. Il
%    est mis (ou laissé) à 1 si vous êtes au milieu d'une ligne de
%    =\cmidrule= ou si vous en commencez une nouvelle (avec
%    =\morecmidrules=). Sinon, si =\rulesflag= vaut zéro, nous faisons
%    précéder le filet par =\aboverulesep=.
%    \begin{macrocode}
\def\cmidrule{\noalign{\ifnum0=`}\fi
	 \@ifnextchar[{\@cmidrule}{\@cmidrule[\cmidrulewidth]}}
\def\@cmidrule[#1]{\@ifnextchar({\@@cmidrule[#1]}{\@@cmidrule[#1]()}}
\def\@@cmidrule[#1](#2)#3{\@@@cmidrule[#3]{#1}{#2}}
%    \end{macrocode}
%   Ce qui précède est du bidouillage pour initialiser les valeurs par défaut des
%   arguments optionnels manquants. Nous passons également à =\@@@cmidrule=
%   les arguments dans un ordre différent, c'est-à-dire =[a-b]=={largeur demandée}=
%   ={commandes de rognage}= (je ne parviens pas à me souvenir pourquoi j'ai
%   fait ça).
%    \begin{macrocode}
\def\@@@cmidrule[#1-#2]#3#4{\global\@cmidla#1\relax
	 \global\advance\@cmidla\m@ne
	 \ifnum\@cmidla>0\global\let\@gtempa\@cmidrulea\else
	 \global\let\@gtempa\@cmidruleb\fi
	 \global\@cmidlb#2\relax
	 \global\advance\@cmidlb-\@cmidla
%    \end{macrocode}
%   Cela a créé un un branchement conditionnel pour appeler la routine
%   appropriée, =\@cmidrulea= ou =\@cmidruleb=, selon que nous commençons
%   dans la première colonne ou non (quelle perte de temps !).
%    \begin{macrocode}
	 \global\@cmidrulewidth=#3
%    \end{macrocode}
%   Il s'agit soit de la valeur par défaut ou de la valeur passée en argument.
%
%   Maintenant, nous analysons les arguments (le cas échéant) :
%    \begin{macrocode}
	 \global\let\cmlkern@l\z@ \global\let\cmlkern@r\z@
	 \@tfor\@tempa :=#4\do{\global\expandafter\let
		  \csname cmlkern@\@tempa\endcsname\cmidrulekern}%
%    \end{macrocode}
%   Maintenant, il faut insérer l'espace au dessus si besoin, fermer le
%   =\noalign=, puis passer à la bonne routine de dessin du filet, définie plus
%   haut (=\let\@gtempa=) :
%    \begin{macrocode}
\ifnum\rulesflag=0\vskip \aboverulesep\fi\ifnum0=`{\fi}\@gtempa
%    \end{macrocode}
%   Maintenant, on ouvre un autre =\noalign= et on appelle la routine de
%   fin.
%    \begin{macrocode}
	 \noalign{\ifnum0=`}\fi\futurelet\@tempa\@xcmidrule}
%    \end{macrocode}
%
%   Ce code (appelé plus haut) dessine effectivement les filets :
%    \begin{macrocode}
\def\@cmidrulea{\multispan\@cmidla&\multispan\@cmidlb
	 \unskip\hskip \cmlkern@l\leaders\hrule \@height\@cmidrulewidth\hfill
	 \hskip \cmlkern@r\cr}
\def\@cmidruleb{\multispan\@cmidlb
	 \unskip\hskip \cmlkern@l\leaders\hrule \@height\@cmidrulewidth\hfill
	 \hskip \cmlkern@r\cr}
%    \end{macrocode}
%   Pour finir, la routine de fin. Si un autre =\cmidrule= suit, on supprime
%   l'espace vertical pour qu'il se chevauche et "\rulesflag=1" empêchera
%   d'ajouter de l'espace au dessus du suivant. Si =\morecimdrules= suit, on
%   ajoute =\cmidrulesep= (et on met encore =\rulesflag= à 1). Dans les autres
%   cas, il s'agit du dernier filet du groupe actuel et nous devons juste
%   ajouter l'espacement =\belowrulesep=.
%
%    Finalement, nous fermons le =\noalign=.
%    \begin{macrocode}
\def\@xcmidrule{\ifx\@tempa\cmidrule\vskip-\@cmidrulewidth
	 \global\rulesflag=1\else
	 \ifx\@tempa\morecmidrules\vskip \cmidrulesep
	 \global\rulesflag=1\else
	 \vskip \belowrulesep\global\rulesflag=0\fi\fi
	 \ifnum0=`{\fi}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\morecmidrules}
%   Il s'agit vraiment d'une fausse commande ; tout le travail a été fait plus
%   haut, dans la routine =\cmidrule=. Nous regardons un pas en avant pour voir
%   si un =\morecmidrules= suit l'actuel =\cmidrule=, et le cas échéant, on
%   active l'indicateur =\rulesflag=. Autrement, la commande =\morecmidrules=
%   en elle même ne fait rien.
%    \begin{macrocode}
\def\morecmidrules{\noalign{\relax}}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \Finale
%