Alors, je vais essayer de détailler la démarche le plus possible. On va partir d'un ECM simple pour arriver au résultat escompté :
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
| % !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\documentclass[a4paper, french, 12pt, oneside]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\usepackage{lipsum}
\usepackage{babel}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Premier}
\lipsum[13]
\chapter{Second}
\lipsum[13]
\appendix
\chapter{Première}
\lipsum[11]
\chapter{Seconde}
\lipsum[11]
\end{document} |
À partir de maintenant, les choses Techniques vont commencer ! Âmes sensibles s'abstenir !
On va déjà commencer par modifier la commande de création de la table des matière pour que les annexes n'apparaissent pas dedans. Ça va se faire grâce aux fichiers temporaires. Lors de la création de la table des matières, elle lit un fichier .toc. On va donc s'arranger pour placer les annexes dans un fichier .toa (table of appendices). Cette macro va prendre un argument optionnel, "toa". À défaut, ce sera "toc".
1 2 3 4 5 6 7 8 9 10
| \renewcommand\tableofcontents[1][toc]{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter{\contentsname}% on en profite pour faire apparaitre la toc dans la toc
\@starttoc{#1}%
\if@restonecol\twocolumn\fi
} |
Ensuite il faut créer une commande qui se comporte comme \chapter et qui va venir se substituer à cette dernière après l'appel de \appendix.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| \def\@appendix[#1]#2{
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toa}{chapter}% modification
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toa}{chapter}{#1}% modification
\fi
\else
\addcontentsline{toa}{chapter}{#1}% modification
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi
} |
On arrive à la fin du gros morceau, la modification de la macro \appendix pour qu'elle prenne en compte nos modifications :
1 2 3 4 5 6 7 8 9
| \def\appendix{
\global\let\@chapter\@appendix% on remplace \@chapter par \@appendix
\par\setcounter{chapter}{0}%
\setcounter{section}{0}%
\gdef\@chapapp{\appendixname}%
\gdef\thechapter{\@Alph\c@chapter}%
\gdef\contentsname{Table des annexes}% on en profite pour faire des ajustements cosmetiques
\tableofcontents[toa]% affichage de la toa
} |
À partir de maintenant, le code est fonctionnel. Il reste encore quelques petites choses à modifier pour arriver à ce qu'on veut.
Déjà le titre de chaque annexes : \chapter{titre1} produit "ANNEXE A" puis sur la ligne d'en dessous "titre1". Je voudrais tout sur la même ligne : " ANNEXE A : titre1"
Sans doute un \renewcommand sur le \chapter à faire mais je n'ai pas trouvé comment.
Pour ça, on va faire comme pour \@chapter, on va utiliser \appendix pour modifier la macro et obtenir ce qu'on veut. Cette macro va copier \@makechapterhead.
1 2 3 4 5 6 7 8 9 10 11 12
| \def\@makeappendixhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \@chapapp\space \thechapter\space:
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@}%
} |
Et il faut adapter la macro \appendix par la même occasion pour y ajouter le code suivant :
\global\let\@makechapterhead\@makeappendixhead% on remplace \@makechapterhead par \@makeappendixhead
Je voudrais une ligne avec "Annexes" en style \chapter (ca c'est bon) puis des lignes avec "A : titre1", "B : titre2", ... en style \section et non pas \chapter.
Pour ça on va devoir faire en sorte qu'à partir de \appendix, la macro \l@chapter se comporte comme \l@section
\def\l@appendix#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
Puis l'ajout dans la macro \appendix :
\global\let\l@chapter\l@appendix% on remplace \l@chapter par \l@appendix
Au final, voici le code que l'on obtient ainsi que le résultat de toutes ces modifications :
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
| % !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\documentclass[a4paper, french, 12pt, oneside]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\usepackage{lipsum}
\usepackage{babel}
\makeatletter
% modification de la toc pour faire pouvoir spécifier le fichier à lire
\renewcommand\tableofcontents[1][toc]{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname}
\addcontentsline{toc}{chapter}{\contentsname}% on en profite pour faire apparaitre la toc dans la toc
\@starttoc{#1}%
\if@restonecol\twocolumn\fi
}
% création d'une macro se comportant comme \chapter qui va se substituer
% à cette dernière lors de l'appel d'\appendix
\def\@appendix[#1]#2{
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toa}{chapter}%
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toa}{chapter}{#1}%
\fi
\else
\addcontentsline{toa}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi
}
% création d'une macro identique à \@makechapterhead pour modifier
% l'apparence des titres des annexes
\def\@makeappendixhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \@chapapp\space \thechapter\space:
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@}%
}
% creation d'une macro \l@appendix qui va remplacer \l@chapter
\def\l@appendix#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
% modification de la commande \appendix pour qu'elle déporte
% les annexes dans le fichier toa
\def\appendix{
\global\let\@chapter\@appendix% on remplace \@chapter par \@appendix
\global\let\@makechapterhead\@makeappendixhead% on remplace \@makechapterhead par \@makeappendixhead
\global\let\l@chapter\l@appendix% on remplace \l@chapter par \l@appendix
\par\setcounter{chapter}{0}%
\setcounter{section}{0}%
\gdef\@chapapp{\appendixname}%
\gdef\thechapter{\@Alph\c@chapter}%
\gdef\contentsname{Table des annexes}% on en profite pour faire des ajustements cosmetiques
\tableofcontents[toa]% affichage de la toa
}
\makeatother
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Premier}
\lipsum[13]
\chapter{Second}
\lipsum[13]
\appendix
\chapter{Première}
\lipsum[11]
\chapter{Seconde}
\lipsum[11]
\end{document} |
test.pdf
Il reste encore quelques problèmes qui peuvent apparaitre, par exemple si tu utilises l'extension hyperref. Si tu charges l'extension avant les modifications, ces dernières vont interférer avec hyperref et l'empécher de fonctionner. Pour résoudre ça, il suffit de charger l'extension après les modifications.
Voilà J'ai essayé de répondre le plus possible à tes besoins, j'espère que j'y suis arrivé
Partager