Le package appendix^{∗}^{†}

Peter Wilson Catholic University of America^{‡}

          Maintenant à peter.r.wilson@boeing.com

1998/11/29

Résumé Ce package offre quelques possibilités relatives aux appendices. Il est conçu pour fonctionner avec les cinq classes L^{A}TEX standard book, report, article, proc et ltxdoc. Les résultats avec d’autres classes peuvent être problématiques. Ce package n’a pas été testé avec d’autres packages qui modifient les définitions des commandes de sectionnement.

Table des matières

1 Introduction 1

2 Le package appendix 2

3 Le code du package 3

1 Introduction

Dans les classes standard, la commande \appendix fait les choses suivantes :

– Pour les classes avec chapitres :

– remet à zéro les compteurs chapter et section.

     – force \@chapapp à \appendixname.

– redéfinit \thechapter à produire une numérotation alphabétique des ap-

pendices.

– Pour les autres classes :

– Remet à zéro les compteurs de section et de sous-section.

– Redéfinit \thesection pour produire une numérotation alphabétique des

appendices. Le package appendix offre des possibilités supplémentaires pour les appendices. Des portions du package ont été développés en tant que partie d’une classe

et d’un ensemble de packages pour la composition de documents au standard ISO [Wil96]. Ce manuel est réalisé conformément aux conventions de l’utilitaire L^{A}TEX docstrip qui permet l’extraction automatique du fichier source contenant les macros L^{A}TEX [GMS94].

∗Traduit de l’anglais par Jean-Pierre Drucbert (drucbert@onecert.fr).

†Ce fichier est la version v1.0, modifié le 1998/11/29.

‡Ce travail a été à l’origine exécuté en tant que chercheur invité au National Institute of Standards and Technology.

La section 2 décrit l’utilisation du package et le code source du package est détaillé dans la section 3.

2 Le package appendix

Ce package offre quelques commandes qui peuvent être utilisées en plus de la commande \appendix. Il fournit aussi un environnement qui peut être utilisé à la place de la commande \appendix. Cet environnement offre quelques action supplémentaires par rapport à la simple commande \appendix. Nous allons présenter d’abord les nouvelles commandes puis le nouvel environnement.

\appendixpage La commande \appendixpage composera un en-tête dans le style d’un entête de \part pour la classe. Le texte de l’en-tête est donné par la valeur de

\appendixpagename.

\addappheadtotoc La commande \addappheadtotoc insérera un en-tête général dans la table des matières (ToC , table of contents). Le texte est donnée par la valeur de \appendixtocname. Si elle est utilisée, cette commande doit être placée avant le premier appendice, car elle est censée introduire les titres des appendices dans la ToC .

Les commandes ci-dessus peuvent être utilisée en conjonction avec la commande traditionnelle \appendix, qu’elles doivent suivre immédiatement. Par exemple :

 \appendix
 \addappheadtotoc
 \appendixpage

\appendixname La commande \appendixname est définie dans les classes qui définissent des

\appendixtocname
\appendixpagename

chapitres. Elle est fournie dans ce package que la classe l’ait définie ou non. Sa valeur par défaut est « Appendix ». La valeur par défaut de \appendixtocname et \appendixpagename est « Appendices ». Ces noms peuvent êtres changés via

\renewcommand. Par exemple,
 \renewcommand{\appendixtocname}{List of appendices}

appendices L’environnement appendices peut être utilisé à la place de la commande \appendix. Il offre davantage de fonctionnalité qu’il n’est possible d’avoir avec des

combinaisons de commandes \appendix, \addappheadtotoc et \appendixpage.

Les fonctions de l’environnement appendices sont accessibles via des options du package, qui sont :

– toc Met un en-tête (par exemple « Appendices ») dans la table des matières (ToC ) avant de lister les appendices (en appelant la commande

     \addappheadtotoc.) ;

– page Met un titre (par exemple « Appendices ») dans le document au point où l’environnement appendices a commencé (en appelant la commande

     \appendixpage.) ;

– title Ajoute un nom (par exemple « Appendix ») avant chaque titre d’appendice dans le corps du document. Le nom est donné par la valeur de \appendixname. Notez que c’est le comportement par défaut dans les classes qui ont des chapitres ; – titletoc Ajoute un nom (par exemple, « Appendice ») avant chaque appendice

listé dans la ToC . Le nom est donné par la valeur de \appendixname ;

– header Ajoute un nom (par exemple « Appendix ») avant chaque appendice dans les en-têtes de page. Le nom est donné par la valeur de \appendixname. Notez que c’est le comportement par défaut pour les classes qui ont des chapitres.

Selon les options particulières du package qui sont choisies et la classe de document, l’environnement appendices peut changer la définition d’éléments des commandes de sectionnement (par exemple \chapter ou \section). Ceci peut être un problème si l’environnement est utilisé en conjonction avec un autre package qui modifie ces commandes. Si c’est le cas, il vous faut examiner le code de l’environnement appendices et faire les modifications nécessaires à celui ou ceux des autres packages (dans votre propre version de ce ou ces packages). Les modifications effectuées sur les commandes de sectionnement sont éliminées à la fin de l’environnement appendices.

3 Le code du package

On annonce le nom et la version du package, qui nécessite L^{A}TEX 2ε et le package ifthen.

1 ⟨∗usc⟩

 2 \NeedsTeXFormat{LaTeX2e}
 3 \ProvidesPackage{appendix}[1998/11/29 v1.0 extra appendix facilities]
 4 \RequirePackage{ifthen}

Dans l’optique d’éviter les conflits de noms avec d’autres packages, chaque nom interne inclut les caractères @pp.

\if@knownclass@pp \if@chapter@pp Ceci est utilisé lorsque nous avons besoin de décider quel style d’appendices est utilisé dans le document. On suppose que la classe est article (ou ses dérivés).

 5 \newif\if@chapter@pp\@chapter@ppfalse
 6 \newif\if@knownclass@pp\@knownclass@ppfalse

On teste la classe actuelle.

 7 \@ifclassloaded{book}{\@chapter@pptrue\@knownclass@pptrue}{}
 8 \@ifclassloaded{report}{\@chapter@pptrue\@knownclass@pptrue}{}
 9 \@ifclassloaded{article}{\@knownclass@pptrue}{}
10 \@ifclassloaded{proc}{\@knownclass@pptrue}{}
11 \@ifclassloaded{ltxdoc}{\@knownclass@pptrue}{}
\if@dotoc@pp \if@dotitle@pp \if@dotitletoc@pp \if@dohead@pp \if@dopage@pp Un ensemble de booléens pour les options. Par défaut, l’environnement appendices

ne fait rien de plus que la commande \appendix à moins que une ou plusieurs options ait été modifiée.

12 \newif\if@dotoc@pp\@dotoc@ppfalse
13 \newif\if@dotitle@pp\@dotitle@ppfalse
14 \newif\if@dotitletoc@pp\@dotitletoc@ppfalse
15 \newif\if@dohead@pp\@dohead@ppfalse
16 \newif\if@dopage@pp\@dopage@ppfalse

Maintenant, nous pouvons nous occuper des options.

17 \DeclareOption{toc}{\@dotoc@pptrue}
18 \DeclareOption{title}{\@dotitle@pptrue}
19 \DeclareOption{titletoc}{\@dotitletoc@pptrue}

20 \DeclareOption{header}{\@dohead@pptrue}
21 \DeclareOption{page}{\@dopage@pptrue}

On traite les options maintenant.

22 \ProcessOptions\relax

Provoque une alerte si la classe n’est pas reconnue. Utilise le style chapitre si \chapter est défini, sinon utilise le style section.

23 \if@knownclass@pp\else
24 \PackageWarning{appendix}%
25  {I don't recognize the class but I'll do my best}
26 \ifx\chapter\undefined\else\@chapter@pptrue\fi
27 \fi
\appendixname \appendixtocname \appendixpagename Ces commandes contiennent les noms qui vont être utilisés. \appendixname peut

être déjà défini dans la classe. Les autres sont nouveaux.

28 \providecommand{\appendixname}{Appendix}
29 \newcommand{\appendixtocname}{Appendices}
30 \newcommand{\appendixpagename}{Appendices}

\if@openright Nous avons besoin de ceci. Ceci est défini dans les classes de type book et pas dans celles de type article.

31 % \ifx\if@openright\undefined
32 %   \newif\if@openright
33 % \fi

\appendixpage La commande pour composer une page annonçant le début des appendices. Cela est basé sur la définition de \part (soit à partir de la classe book ou de la classe article). Notez que cela ne crée pas d’entrée dans la ToC .

34 \newcommand{\appendixpage}{%
35 \if@chapter@pp \@chap@pppage \else \@sec@pppage \fi

36 }

\@chap@pppage Crée une page d’appendice en style chapitre. Copie du code de \part à partir de la classe book, mais on utilise \appendixpagename comme titre.

37 \newcommand{\@chap@pppage}{%
38 \if@openright\cleardoublepage\else\clearpage\fi
39 \thispagestyle{plain}%
40 \if@twocolumn\onecolumn\@tempswatrue\else\@tempswafalse\fi
41 \null\vfil
42 \markboth{}{}%
43 {\centering
44 \interlinepenalty \@M
45 \normalfont
46 \Huge \bfseries \appendixpagename\par}%

Dans la classe book, la commande \part se termine par l’appel à \@endpart. Cela pose deux problèmes ici : (1) \@endpart n’est pas défini dans la classe article et (2) cela ajoute une page blanche qui n’est pas très esthétique si l’option openany est utilisée. Donc, le code est décrit ici :

47 \vfil\newpage
48 \if@twoside
49  \if@openright
50  \null
51  \thispagestyle{empty}%

52  \newpage
53  \fi
54 \fi
55 \if@tempswa
56  \twocolumn
57 \fi

58 }

\@sec@pppage Copie du code de la commande \part à partir de la classe article, mais on utilise

\appendixpagename comme titre.
59 \newcommand{\@sec@pppage}{%
60 \par
61 \addvspace{4ex}%
62 \@afterindentfalse
63 {\parindent \z@ \raggedright
64 \interlinepenalty \@M
65 \normalfont
66 \huge \bfseries \appendixpagename%
67 \markboth{}{}\par}%
68 \nobreak
69 \vskip 3ex
70 \@afterheading

71 }

\addappheadtotoc Cette commande ajoute une ligne « appendice » à la ToC . Le style est le même que pour la « Liste des figures » dans tocbibind, i.e. comme un en-tête de chapitre ou de section.

72 \newcommand{\addappheadtotoc}{%
73 \if@chapter@pp
74  \addcontentsline{toc}{chapter}{\appendixtocname}
75 \else
76  \addcontentsline{toc}{section}{\appendixtocname}
77 \fi

78 }

\@resets@pp Réinitialisation des compteurs de structure et des noms appropriés. Cela fait exactement la même chose que la commande \appendix standard.

79 \newcommand{\@resets@pp}{
80 \par
81 \setcounter{section}{0}
82 \if@chapter@pp
83  \setcounter{chapter}{0}
84  \renewcommand\@chapapp{\appendixname}
85  \renewcommand\thechapter{\@Alph\c@chapter}
86 \else
87  \setcounter{subsection}{0}
88  \renewcommand\thesection{\@Alph\c@section}
89 \fi

90 }

appendices Ceci est le cœur du package. on commence par les réinitialisations faites par la commande \appendix. Ensuite on s’occupe des options faciles avant de passer aux difficultés : les redéfinitions.

91 \newenvironment{appendices}{%

92 \@resets@pp
93 \if@dotoc@pp \addappheadtotoc \fi
94 \if@dopage@pp \appendixpage \fi

Il y a une seule autre option se rapportant au style chapitre, on s’en occupe maintenant et on laisse la voie libre pour faire le style section. Pour l’option titletoc, on redéfinit la commande \addcontentsline.

95 \if@chapter@pp
96  \if@dotitletoc@pp \@redotocentry@pp{chapter} \fi
97 \else

Le reste du code est spécifique au style section. Tant que l’on y est, nous pouvons aussi bien finir de traiter l’option titletoc.

98  \if@dotitletoc@pp \@redotocentry@pp{section} \fi

Le code suivant implémente l’option header en créant une version spéciale de

\sectionmark.
99  \if@dohead@pp
100  \def\sectionmark##1{%
101  \if@twoside
102  \markboth{\@formatsecmark@pp{##1}}{}
103  \else
104  \markright{\@formatsecmark@pp{##1}}{}
105  \fi}
106  \fi

Le code suivant implémente l’option title en rusant avec la commande \@seccntformat^{1}.

107  \if@dotitle@pp
108  \def\sectionname{\appendixname}
109  \def\@seccntformat##1{\@ifundefined{##1name}{}{\csname ##1name\endcsname\ }%
110  \csname the##1\endcsname\quad}
111  \fi
112 \fi}{}
\@formatsecmark@pp Formate l’en-tête pour redéfinir \sectionmark.
113 \newcommand{\@formatsecmark@pp}[1]{%
114 \MakeUppercase{\appendixname\space
115  \ifnum \c@secnumdepth >\z@
116  \thesection\quad
117  \fi
118  #1}}

\@redotocentry@pp Pour implémenter l’option titletoc, on redéfinit la commande \addcontentsline qui est utilisée pour ajouter des entrées dans la ToC . \@redotocentry@pp{⟨sect⟩} réalise la redéfinition, avec ⟨sect⟩ le nom de l’en-tête particulier (i.e. soit le chapitre soit la section).

119 \newcommand{\@redotocentry@pp}[1]{%

Enregistre la définition originelle de \addcontentsline, puis commence la redéfinition.

120 \let\oldacl@pp=\addcontentsline
121 \def\addcontentsline##1##2##3{%
122  \ifthenelse{\equal{##1}{toc}}{%

1d’après une contribution de Donald Arsenau dans compt.text.tex le 13 août 1998.

Ajout au fichier ToC , donc contrôle de la commande de sectionnement.

123  \ifthenelse{\equal{##2}{#1}}{%

La commande de sectionnement est la même que celle passée en argument à \@redotocentry@pp, on continue alors la redéfinition.

124  \addtocontents{##1}{\protect\contentsline{##2}%
125  {\appendixname\space ##3}{\thepage}}}%

L’en-tête était différent de l’argument : la redéfinition n’est pas nécessaire, on appelle donc la commande \addcontentsline originale.

126  {\oldacl@pp{##1}{##2}{##3}}}%

On ajoute à un fichier qui n’est pas la ToC : aucune redéfinition n’est requise, on appelle donc la commande \addcontentsline originale.

127  {\oldacl@pp{##1}{##2}{##3}}}}

La fin de ce package.

128 ⟨/usc⟩

Références

[GMS94] Michel Goossens, Frank Mittelbach, and Alexander Samarin. The L^{A}TEX Companion. Addison-Wesley Publishing Company, 1994.

[Wil96] Peter R. Wilson. L^{A}TEX for standards : The L^{A}TEX package files user manual. NIST Report NISTIR, June 1996.

Index

Numbers written in italic refer to the page where the corresponding entry is described, the ones underlined to the code line of the definition, the rest to the code lines where the entry is used.

Symbols

\@Alph . . . . . . . . . 85, 88

\@afterheading . . . . 70
\@afterindentfalse . 62
\@chap@pppage . . . 35, \underline{37}

\@chapapp . . . . . . . . 84

\@chapter@ppfalse . . 5
\@chapter@pptrue 7, 8, 26
\@dohead@ppfalse . . 15
\@dohead@pptrue . . . 20
\@dopage@ppfalse . . 16
\@dopage@pptrue . . . 21
\@dotitle@ppfalse . 13
\@dotitle@pptrue . . 18
\@dotitletoc@ppfalse 14
\@dotitletoc@pptrue 19
\@dotoc@ppfalse . . . 12
\@dotoc@pptrue . . . . 17

                          \@formatsecmark@pp .

…. 102, 104, \underline{113}

                          \@ifclassloaded . . 7–11
                          \@ifundefined . . . . . 109
                          \@knownclass@ppfalse 6
                          \@knownclass@pptrue

. . . . . . . . . . 7–11

                          \@redotocentry@pp .

. . . . . . 96, 98, \underline{119}

                          \@resets@pp . . . . . \underline{79}, 92
                          \@sec@pppage . . . . 35, \underline{59}
                          \@seccntformat . . . . 109

\␣ . . . . . . . . . . . . . . 109

A

                          \addappheadtotoc . .

. . . . . . . 2, \underline{72}, 93

                                                   \addcontentsline . .

. . 74, 76, 120, 121

                                                   \addtocontents . . . . 124
                                                   appendices (environ-

ment) . . . . . 2, \underline{91}

                                                   \appendixname . . . 2,

\underline{28}, 84, 108, 114, 125

                                                   \appendixpage . 2, \underline{34}, 94
                                                   \appendixpagename .

. . . . . 2, \underline{28}, 46, 66

                                                   \appendixtocname . .

. . . . . 2, \underline{28}, 74, 76

C

                                                   \c@chapter . . . . . . . 85
                                                   \c@secnumdepth . . . . 115
                                                   \c@section . . . . . . . 88
                                                   \centering . . . . . . . 43

\chapter . . . . . . . . . 26

                                                   \cleardoublepage . . 38

\clearpage . . . . . . . 38
\contentsline . . . . . 124

\csname . . . . . . 109, 110

E

\endcsname . . . 109, 110

environments :

   appendices . . . . 2, \underline{91}

\equal . . . . . . . 122, 123

H

\Huge . . . . . . . . . . . . 46 \huge . . . . . . . . . . . . 66

I

\if@chapter@pp . . . .

. . \underline{5}, 35, 73, 82, 95

\if@dohead@pp . . . \underline{12}, 99
\if@dopage@pp . . . \underline{12}, 94
\if@dotitle@pp . \underline{12}, 107
\if@dotitletoc@pp .

. . . . . . . \underline{12}, 96, 98

                          \if@dotoc@pp . . . . \underline{12}, 93
                          \if@knownclass@pp   \underline{5}, 23
                          \if@openright  \underline{31}, 38, 49
                          \if@twocolumn . . . . . 40
                          \if@twoside . . . . 48, 101
                          \ifthenelse . . . 122, 123
                          \interlinepenalty 44, 64

M

                          \MakeUppercase . . . . 114

N \newif … 5, 6, 12–16, 32

                          \normalfont . . . . . 45, 65

O \oldacl@pp 120, 126, 127

                          \onecolumn . . . . . . . 40

P

                          \PackageWarning . . . 24

                                                   \parindent . . . . . . . 63
                                                   \providecommand . . . 28
                                                   \ProvidesPackage . . . 3

Q \quad . . . . . . . . 110, 116

R

                                                   \RequirePackage . . . . 4

S

                                                   \sectionmark . . . . . . 100
                                                   \sectionname . . . . . . 108

T

                                                   \thechapter . . . . . . . 85

\thepage . . . . . . . . . 125

                                                   \thesection . . . . 88, 116
                                                   \thispagestyle . . 39, 51
                                                   \twocolumn . . . . . . . 56