\chapter{Cosmétique}

\begin{epigraphe}{Le Cantique des cantiques Ct \textbf{7} 10}
  Je me dis: Je monterai sur le palmier, J'en saisirai les rameaux !\\
  Que tes seins soient comme les grappes de la vigne,\\
  Le parfum de ton souffle comme celui des pommes,\\
  Et ta bouche comme un vin excellent qui coule aisément pour mon bien-aimé,\\ 
  Et glisse sur les lèvres de ceux qui s'endorment !
\end{epigraphe}


\begin{introchap}{L'idée générale} de ce chapitre, laissant présager
  des macros parfumées, est de présenter les outils standard de
  \LaTeX{} qui ont été personnalisés pour produire certaines parties
  du document. Ces personnalisations s'entendent à plusieurs niveaux :
  en utilisant des options de packages (par exemple pour les en-têtes
  de page), ou parfois en « mettant le nez » dans la définition des
  macros, comme pour l'allure des chapitres et des sections, ou en
  modifiant plus en profondeur ces macros comme dans le cas de la
  minitable des matières.  Une partie du chapitre est consacrée aux
  outils que l'on peut mettre au point à partir du package
  \ltxpack{fancyvrb}. Enfin un combat en règle contre les guillemets
  français est mené en guise de clôture de ce chapitre.
\end{introchap}

\section{Allure de l'index}
\label{sec-cosmetique-allure-index}

Pour changer l'allure de l'index, il faut comprendre que lorsqu'on
tape fébrilement avec ses petits doigts la commande :
\begin{unixcom}
  makeindex ¢marg«document»
\end{unixcom}
on génère alors un fichier \marg{document}\texttt{.ind} contenant
quelque chose ressemblant à :
\begin{ltxcode}
  \begin{theindex}ø\ccomment{préambule}ø
    
  \item Cosmic debris, 12,34
    
  \indexspace ø\ccomment{espace inter-groupe}ø
    
  \item Debra kadabra, 23 ø\ccomment{entrée, séparateur, page}ø
    
  \end{theindex} ø\ccomment{postambule}ø
\end{ltxcode}
En réalité, ce code est généré à partir d'entités génériques ayant des
valeurs prédéfinies et pouvant être modifiées. Pour s'en
convaincre, il suffit de savoir que le programme \soft{makeindex} peut
générer un fichier \texttt{.ind} contenant autre chose que du code
\LaTeX{}. Pour comprendre cette affaire d'entités génériques, on
pourrait décrire le travail de \soft{makeindex} comme suit :
\begin{enumerate}
\item Écrire le préambule à partir de la valeur de l'entité
  \texttt{preamble} ;
\item Pour chaque entrée du fichier \texttt{.idx}:
  \begin{enumerate}
  \item écrire le contenu de l'entité \texttt{item\_0} ;
  \item écrire l'entrée (« Cosmic debries » dans l'exemple précédent) ;
  \item écrire le séparateur (valeur de l'entité \texttt{delim\_0}) ;
  \item écrire le numéro de  page
  \end{enumerate}
\item À chaque fin de groupe (lors d'un changement de lettre) écrire le contenu
  de l'entité \texttt{group\_skip} ;
\item Écrire le postambule à partir de la valeur de \texttt{postamble}.
\end{enumerate}
Les valeurs des entités auxquelles il est fait allusion sont par
défaut les suivantes :
\begin{center}
  \begin{tabular}{|>{\ttfamily}l|l|}
    \hline
    preamble  & \verb+"\\begin{theindex}\n"+\\
    item\_0  & \verb+"\n  \\item"+\\
    delim\_0 & \verb+", "+\\
    group\_skip & \verb+"\n\n  \\indexspace\n"+\\
    postamble & \verb+"\n\n\\end{theindex}\n"+\\
    \hline
  \end{tabular}
\end{center}
Ces valeurs peuvent être modifiées par l'intermédiaire d'un fichier de
style auquel on met généralement l'extension~\texttt{.ist} et que l'on
utilisera lors de l'appel à \soft{makeindex} de la manière suivante :
\begin{unixcom}
  makeindex -s ¢marg«style».ist ¢marg«document»  
\end{unixcom}
Ainsi pour produire l'index de ce document, nous avons dans un premier temps
redéfini les séparateurs de niveau~1 et~2 :
\begin{verbatim}
  delim_0 " \\dotfill \ "
  delim_1 " \\dotfill \ "
\end{verbatim}
on remplace donc la virgule qui sépare par défaut l'entrée d'index et
son numéro de page par des points de suspension. Ensuite, en lisant
scrupuleusement la documentation \soft{makeindex}\footnote{Voir
  également le nota qui suit pour les références bibliographiques
  utiles.}, on apprend qu'écrire :
\begin{verbatim}
  headings_flag 1
\end{verbatim}
est la manière polie de demander à \soft{makeindex} de produire entre
les groupes d'entrées la lettre correspondant au groupe.  Cette lettre
sera (en majuscule) et encadrée par les contenus respectifs des
entités \texttt{heading\_prefix} et \texttt{heading\_suffix}. Qu'à
cela ne tienne, pour produire nos jolies boîtes ombrées, nous écrivons
dans le fichier de style :
\begin{verbatim}
  heading_prefix "{\\large\\sffamily\\bfseries\\shadowbox{"
  heading_suffix "}\\hfill}\\nopagebreak\n"
\end{verbatim}
\sautdepage
Ce qui vous l'avez compris, produira par exemple pour la lettre « c » :
\begin{ltxexemple}
  {\large\sffamily\bfseries%
    \shadowbox{C}\hfil}\nopagebreak
\end{ltxexemple}
Cette commande sera précédée par le contenu de \texttt{group\_skip} qui,
nous l'avons dit un peu plus haut, vaut par défaut
\ltxcom{indexspace}. Nous avons après quelques mois de
recherche\footnote{Je plaisante, juste quelques semai... minutes
  veux-je dire.},
déniché la définition de cette commande dans \ltxfile{book.cls} et
l'avons modifiée pour augmenter légèrement l'espace entre les groupes :
\begin{ltxcode}
  \renewcommand\indexspace{%
    \par \vskip 20pt plus5pt minus3pt\relax}
\end{ltxcode}

\begin{note}
  Ce paragraphe ne donne bien évidemment qu'un aperçu très succinct
  des fonctionnalités proposées par \soft{makeindex}. Outre les
  informations que l'on peut trouver dans le \LaTeX{} companion, la
  page de manuel de cet utilitaire dans un environnement Debian
  donne une liste exhaustive des entités génériques que l'on peut
  définir.  Un fichier nommé \ltxfile{ind.dvi} écrit par P.
  {\rmfamily\textsc{Chen}} et M.  A.  {\rmfamily\textsc{Harrinson}}
  constitue également  un bon point de départ pour la personnalisation de
  l'index.
\end{note}

\section{Allures des titres}

Nous proposons ici d'exposer la manière dont on a modifié l'allure des
titres standard (partie, chapitre, section, etc.) de \LaTeX{}.

\subsection{Numérotation dans la table des matières}

\index{table des matières!numérotation}
\index{table des matières!profondeur}
\index{titre!numérotation}

Avant toute chose il faut savoir qu'on peut agir sur la table des
matières à l'aide de deux compteurs :
\begin{enumerate}
\item \ltxcounter{secnumdepth} (\anglais{section numbering depth})
  stipulant la profondeur de la numérotation des titres dans le
  document ;
\item \ltxcounter{tocdepth} (\anglais{tab le of contents depth})
  définissant quel est le niveau (ou profondeur) de titre maxi dans la
  table des matières.
\end{enumerate}
Pour utiliser ces deux compteurs, il faut en outre avoir connaissance
de la manière dont \LaTeX{} associe une profondeur à chaque titre. Et
bien réjouissez-vous, le tableau suivant vous fournit cette
information  :
\begin{center}
  \begin{tabular}{|c|r|c|r|}
    \hline
    Titre & profondeur & Titre & profondeur\\
    \hline
    \texttt{part} & -1 & & \\
    \texttt{chapter}    & 0 & \texttt{subsubsection} & 3\\
    \texttt{section}    & 1 & \texttt{paragraph}     & 4\\
    \texttt{subsection} & 2 & \texttt{subparagraph}  & 5\\
    \hline
  \end{tabular}
\end{center}
Ainsi, affecter la valeur 1 à \ltxcounter{secnumdepth} et la valeur~2
à \ltxcounter{tocdepth} numérotera les titres jusqu'aux
\ltxcom{section}s et insérera dans la table des matières, tous les
titres jusqu'aux \ltxcom{subsection}s...

\subsection{Sections et niveaux inférieurs}

Dans le fichier \ltxfile{book.cls} du système \TeX{}, on trouve le code
suivant\footnote{Légèrement simplifié...} :
\lstset{language=TeX}
\begin{ltxcode}
  \newcommand{\section}{%
    \@startsection%
    {section}% nom du titre
    {1}% niveau de titre
    {0pt}% indentation
    {-3.5ex plus -1ex minus -.2ex}% espace vertical avant
    {2.3ex  plus.2ex}% espace vertical après
    {\normalfont\Large\bfseries}} % allure du titre
\end{ltxcode}
Ce code permet de définir comment sera produit le titre d'une
section. On constate que la commande \ltxcom{section} fait appel à
la commande \ltxcom{@startsection}, cette dernière attendant six arguments :
\begin{itemize}
\item le nom du titre : \texttt{section}, \texttt{subsection},
  etc.
\item son niveau : 1 pour \texttt{section}, 2 pour
  \texttt{subsection}, 3 pour \texttt{subsubsection}, etc.
\item son indentation ;
\item le blanc vertical avant le titre ;
\item le blanc vertical après le titre ;
\item un ensemble de \emph{déclarations} pour formater le titre lui-même.
\end{itemize}
On pourra donc noter que la mise en page par défaut de \LaTeX{} pour
les sections dans la classe \ltxcls{book} est la suivante :
\begin{itemize}
\item pas d'indentation (\texttt{0pt})
\item espace avant le titre de \texttt{3.5ex} avec un tolérance de
  plus \texttt{-1ex} et moins \texttt{-.2ex} ;
\item espace après le titre de \texttt{2.3ex} avec une tolérance de
  plus \texttt{.2ex} ; on pourra noter que si l'espace est négatif, le
  paragraphe commence juste après le titre, et non sur un nouveau
  paragraphe ;
\item les titres sont en gros et en gras dans la fonte « normale ».
\end{itemize}

Pour définir l'allure des sections de ce document, nous avons
introduit trois longueurs pour l'indentation de \texttt{section}s,
\texttt{subsection}s et \texttt{subsubsection}s :
\begin{ltxcode}
  \newlength{\sectiontitleindent}
  \newlength{\subsectiontitleindent}
  \newlength{\subsubsectiontitleindent}
\end{ltxcode}
Ces longueurs ont pour valeur :
\begin{ltxcode}
  \setlength{\sectiontitleindent}{-1cm}
  \setlength{\subsectiontitleindent}{-.5cm}
  \setlength{\subsubsectiontitleindent}{-.25cm}
\end{ltxcode}
D'autre part, nous avons défini une fonte particulière pour les
titres, définie comme suit :
\begin{ltxcode}
  \newcommand{\sectionfont}{%
    \fontencoding{\encodingdefault}%
    \fontfamily{pag}%
    \fontseries{bc}%
    \fontshape{n}%
    \selectfont}
\end{ltxcode}
Cette commande permet de sélectionner la fonte PostScript Avant-Garde
en gras condensé (cf.~\vref{sec-outillage-fontes}). Finalement, pour
définir l'allure de nos sections on utilisera :
\begin{ltxcode}
  \renewcommand{\section}{%
    \@startsection%
    {section}%
    {1}%
    {\sectiontitleindent}%
    {-3.5ex plus -1ex minus -.2ex}%
    {2.3ex plus.2ex}%
    {\sectionfont\Large}}
\end{ltxcode}
Des commandes équivalentes ont été écrites pour les titres de niveaux
inférieurs. 

%Voici un exemple d'utilisation de cette commande :
%\subsection{}


\subsection{Chapitres}
\label{sec-epilogue-chapitres}

C'est en fouillant dans le fichier \ltxfile{book.cls} qu'on peut
trouver des informations sur la manière dont \LaTeX{} produit les
en-têtes de chapitres.

\subsubsection{Principe}

Dans le fichier \ltxfile{book.cls}, on trouve la commande :
\begin{ltxcode}
  \newcommand{\chapter}{%
    ...
    \thispagestyle{plain}%
    ...
    \secdef\@chapter\@schapter} % la ligne qui nous intéresse
\end{ltxcode}
La commande \ltxcom{chapter} fait donc elle-même appel à deux commandes
distinctes :
\begin{enumerate}
\makeatletter
\item \ltxcom{@chapter} pour les titres de chapitre qui sont numérotés ;
\item \ltxcom{@schapter} pour les titres de chapitre non numérotés
  (\texttt{s} pour \emph{star} ou étoile faisant référence à la
  commande \ltxcom{chapter*}).  \makeatother
\end{enumerate}
En cherchant vaillamment la définition de ces deux commandes (toujours
dans le fichier \ltxfile{book.cls}), on trouve quelque chose du genre
:
\begin{ltxcode}
  \def\@chapter[#1]#2{% 
    ...
    \refstepcounter{chapter}%
    % message sur le terminal :
    \typeout{\@chapapp\space\thechapter.}
    \addcontentsline{toc}{chapter}% ajout du titre dans la toc
    ...
    \if@twocolumn
    ...
    \else% le cas d'un document à une colonne
    \@makechapterhead{#2}% la ligne qui nous intéresse
    \fi}
\end{ltxcode}
ce qui nous met sur la voie... en effet
\verb+\@makechapterhead+ (qu'on peut traduire littéralement par «
faire l'en-tête de chapitre ») est celle qu'il va nous falloir
redéfinir pour changer l'allure des en-têtes. Une recherche
supplémentaire nous met également sur la piste de la commande
\verb+\@makeschapterhead+ produisant l'en-tête d'un chapitre non
numéroté. Ces deux commandes attendent un argument qui est le titre du
chapitre.

\subsubsection{Petits outils nécessaires}

Nous avons défini un environnement \ltxenv{cadrechap} dont le propos
est simplement d'élargir la marge de droite de deux centimètres :
\begin{ltxcode}
  \newenvironment{cadrechap}%
  {\begin{list}{}{%
        \setlength{\leftmargin}{0pt}%
        \setlength{\rightmargin}{-2cm}% on se met au large
        \setlength{\itemindent}{0pt}%
        \setlength{\labelsep}{0pt}%
      }\item}%
  {\end{list}}
\end{ltxcode}
Il sera également fait usage du booléen \verb+@mainmatter+ permettant
de savoir si on se trouve dans la partie « centrale » du document.
C'est le cas lorsque la commande \ltxcom{mainmatter} a été appelée
(cf.  \vref{sec-science-diviser}).


\subsubsection{En-tête des chapitres à proprement parler}

%
% version framabook
%
\ifframabookversion%
\newcommand{\boite}[1]{%
  {\setlength{\fboxrule}{.2pt}%
    \setlength{\fboxsep}{-\fboxrule}%
    \fbox{#1}}}
\DeclareFixedFont{\fnumfont}{T1}{phv}{b}{n}{32pt}
\DeclareFixedFont{\fnomfont}{T1}{phv}{b}{n}{12pt}
\DeclareFixedFont{\ftitrefont}{T1}{phv}{b}{n}{16pt}
\newcommand{\fairechapitre}[1]{%
  \noindent\begin{minipage}{\linewidth}%
      \boite{\begin{minipage}[t][3cm][c]{.75\textwidth}%
          \centering%
          minipage\\pour\\le\\mini\\sommaire
        \end{minipage}}%
      \boite{\begin{minipage}[t]{.25\textwidth}
          \begin{flushright}
            {\fnomfont\chaptername}\\[.5cm]
            {\fnumfont\thechapter}
          \end{flushright}
        \end{minipage}}
    \end{minipage}\par
  \begin{flushright}\ftitrefont#1\end{flushright}}
Pour ce manuel la commande qui produit l'en-tête du
chapitre a été définie comme un assemblage de deux minipages :
\begin{enumerate}
\item sur la gauche une boîte minipage dont la hauteur est imposée
  pour y mettre le mini-sommaire (cf.
  \S~\vref{sec-cosmetique-mini-tdm}) ;
\item sur la droite une boîte contenant le mot « Chapitre » et son
  numéro
\end{enumerate}
\fairechapitre{Le titre du chapitre} Le squelette pour réaliser un tel
assemblage de boîte est le suivant :
\begin{ltxcode}
  \begin{cadrechap}
    \begin{minipage}[t][6cm][t]{0.75\linewidth}
      % insertion ici du mini-sommaire
    \end{minipage}
    \begin{minipage}[t]{0.25\linewidth}
      % insertion ici du n° de chapitre
    \end{minipage}
    \begin{flushright}
      % insertion ici du titre du chapitre
    \end{flushright}
  \end{cadrechap}
\end{ltxcode}
Il est sans doute utile de noter ici que la boîte de gauche (celle qui
reçoit la mini table des matières) a une hauteur imposée ce qui permet
de produire les en-têtes de chapitres de manière identique quel que
soit le nombre de sections de chapitres (et donc quelle que soit la
hauteur de la mini table des matières). Pour finir, il reste à définir
des fontes pour les différents éléments. Pour ce manuel ont été
définies :
\begin{ltxcode}
  % numéro du chapitre
  \DeclareFixedFont{\chapnumfont}{T1}{phv}{b}{n}{80pt}
  % pour le mot « Chapitre »
  \DeclareFixedFont{\chapchapfont}{T1}{phv}{b}{n}{16pt}
  % pour le titre
  \DeclareFixedFont{\chaptitfont}{T1}{phv}{b}{n}{24.88pt}
\end{ltxcode}
D'ailleurs :
\begin{ltxexemple}
  {\chapnumfont 8}
  {\chaptitfont Oula !}
\end{ltxexemple}
\else%
%
% version guide-local
%
Pour ce manuel, nous avons redéfini la commande
\verb+\@makechapterhead+ comme suit :
\begin{ltxcode}
  \renewcommand{\@makechapterhead}[1]{% 
    \begin{cadrechap}
      \if@mainmatter
      {\chapnumfont\thechapter}\hfill{\chapfont#1}
      \else
      \mbox{}\hfill{\chapfont#1}
      \fi
    \end{cadrechap}
    \vspace{1cm}}
\end{ltxcode}
Par conséquent, si on est dans le « \ltxcom{mainmatter} » :
\begin{itemize}
\item on affiche le numéro du chapitre (\ltxcom{thechapter}) dans une
  fonte particulière (\ltxcom{chapnumfont}) ;
\item on insère un ressort horizontal (\ltxcom{hfill}) ;
\item on affiche le titre du chapitre (\verb+#1+) dans une police
  particulière (\ltxcom{chapfont}).
\end{itemize}
Si on n'est pas dans la partie centrale, on n'affiche pas de numéro de
chapitre, mais juste le titre poussé à droite.  Les commandes
permettant de mettre en évidence le numéro du chapitre et son titre
sont respectivement :
\begin{ltxcode}
  \DeclareFixedFont{\chapnumfont}{T1}{phv}{bc}{n}{80pt}
  \DeclareFixedFont{\chapfont}{T1}{phv}{b}{n}{24.88pt}
\end{ltxcode}
Finalement, si on écrit :
\begin{ltxcode}
  \begin{cadrechap}
    {\chapnumfont7}\hfill{\chapfont Le titre de la mort qui tue} 
  \end{cadrechap}
\end{ltxcode}
On obtient :
\begin{cadrechap}
  {\chapnumfont7}\hfill{\chapfont Le titre de la mort qui tue} 
\end{cadrechap}
\fi


\subsection{Parties}

Dans le fichier \ltxfile{book.cls} on trouve la définition de la
commande \ltxcom{part} :
\begin{ltxcode}
\newcommand\part{%
   \cleardoublepage
  \thispagestyle{plain}
  [...]
  \null\vfil
  \secdef\@part\@spart}
\end{ltxcode}
qui nous informe qu'à l'instar des chapitres, la commande
\ltxcom{part} fait appel à deux commandes distinctes pour produire les
parties numérotées et non numérotées (grâce à un appel aux commandes
\verb+\@part+ et \verb+\@spart+ respectivement). Dans un premier temps
nous avons imposé que le style de page pour les débuts de partie soit
vide (c'est-à-dire sans numéro de page ni en-tête etc.), nous avons
donc écrit :
\begin{ltxcode}
  \newcommand\part{%
    \cleardoublepage
    \thispagestyle{empty}% à la place de plain par défaut
    [...]
    \null\vfil% un boîte vide et un ressort vertical
    \secdef\@part\@spart}
\end{ltxcode}
On peut ensuite examiner la définition de la commande \verb+\@part+ qui produit la page de partie :
\begin{ltxcode}
  \def\@part[#1]#2{%
    [...]
    {\centering % centrage
      [...]
      \huge\bfseries \partname\nobreakspace\thepart
       \par
       \vskip 20\pt
      [...]
     \Huge \bfseries #2\par}%
    \@endpart}
\end{ltxcode}
En examinant ce code on constate que la page de partie est constituée
d'une ligne en gros caractères gras, du nom « Partie » suivie du
numéro de la partie\footnote{En réalité, après avoir enclenché le
  package \ltxpack{babel} et l'option \texttt{french} ces deux
  commandes sont redéfinies pour produire quelque chose du style : «
  Première partie »} :
\begin{ltxcode}
  \huge\bfseries \partname\nobreakspace\thepart  
\end{ltxcode}
suivie 20 points plus bas du titre de la partie (contenu dans
l'argument~\verb+#2+).  Pour ce manuel, nous avons redéfini la
commande \verb+\@part+ comme suit :
\begin{ltxcode}
  \def\@part[#1]#2{%
    [...]
    {\centering
     \interlinepenalty \@M
     \normalfont
     [...]
     \partnumfont \thepart % juste le numéro de la partie
     \par
     \vskip 50\p@% 50 point au lieu de 20...
     \partfont #2\par}% le titre avec une fonte personnalisée
    \@endpart}
\end{ltxcode}
Pour garder une homogénéité avec les en-têtes de chapitres on a défini
les commandes de fontes comme suit :
\begin{ltxcode}
  \newcommand{\partfont}{%
    \fontencoding{\encodingdefault}\fontfamily{phv}%
    \fontseries{bc}\fontshape{n}%
    \fontsize{32}{34}%
    \selectfont}
  \DeclareFixedFont{\partnumfont}{T1}{phv}{bc}{n}{80}%
\end{ltxcode}

\begin{nota}
  On notera également que la commande \verb+\@part+ se termine par l'appel
  à une autre commande : \verb+\@endpart+. En examinant le fichier
  \ltxfile{book.cls} on pourra se rendre compte que cette dernière
  permet de s'opposer au ressort vertical de la commande
  \ltxcom{part} et de sauter une page blanche...
\end{nota}


\section{Géométrie}
\label{sec-geometrie}

Les différentes dimensions de chaque page de ce document ont été
définies à l'aide du package \ltxpack{geometry} et de la
commande :
\begin{ltxcode}
\geometry{%
  a4paper,
  body={150mm,250mm},
  left=25mm,top=25mm,
  headheight=7mm,headsep=4mm,
  marginparsep=4mm,
  marginparwidth=27mm}
\end{ltxcode}
qui définit respectivement  (voir aussi figure~\vref{fig-geometry}) :
\begin{itemize}
\item un corps de texte faisant 150 mm de largeur par 250 mm ;
\item le positionnement du corps du texte dans la page, à 25 mm du
  bord gauche du papier, et 25 mm du bord supérieur du papier ;
\item la hauteur de l'en-tête (7mm) et l'espace entre l'en-tête et le
  texte lui-même (4 mm) ;
\item la taille du papier : standard A4 ;
\item la largeur de la marge pour les notes de marges (2.7 cm).
\end{itemize}
\begin{figure}[htbp]
  \centering
  \includegraphics[width=\ifframabookversion.9\else.7\fi\textwidth]{geometry}
  \caption{Quelques unes des dimensions pour définir la géométrie d'un
    document.}
  \label{fig-geometry}
\end{figure}

De manière générale, comme le montre la figure~\vref{fig-geometry}, le
package \ltxpack{geometry} permet de définir un certain nombre de
dimensions que l'on peut passer soit en option à la commande
\ltxcom{usepackage} soit à l'aide de la commande \ltxcom{geometry}.
\begin{description}
\item[Dimension du papier] :
  \begin{itemize}
  \item \verb+a4paper+, \verb+a5paper+, etc. pour utiliser un format de
    papier prédéfini,
  \item \verb+paperwidth=+=\marg{dim} et \verb+paperheight=+\marg{dim}
    pour spécifier une dimension de papier libre, par exemple pour un
    document qui sera massicoté.
  \end{itemize}
\item[Texte] :
  \begin{itemize}
  \item soit avec : \verb+body={+\marg{largeur}\verb+,+\marg{hauteur}\verb+}+
  \item soit avec : \verb+width=+\marg{largeur} et
    \verb+height=+\marg{hauteur}.
  \item le texte est positionné à l'intérieur de la page par rapport à
    un point de référence spécifié avec \verb+top=+\marg{pos\_vert} et
    \verb+left=+\marg{pos\_horiz}
  \end{itemize}
\item[Haut et bas de page] :
  \begin{itemize}
  \item la hauteur de la surface réservée à l'en-tête peut être définie à
    l'aide de la formule magique \verb+headheight=+\marg{hauteur} et
    sa position par rapport au corps du texte à l'aide de
    \verb+headsep=+\marg{espace}.
  \item la position du pied de page peut être imposée avec la longueur
    \verb+footskip=+\marg{espace} qui définit l'espace entre le bas du
    corps du texte et la première ligne du contenu du pied de page.
  \end{itemize}
\item[Note de marge] : dans le même esprit la largeur et la position
  de la surface réservée aux notes de marge peuvent être définies
  grâce aux deux longeurs 
  \verb+marginparwidth=+\marg{largeur} et 
  \verb+marginparsep=+\marg{espace}.
\end{description}

\begin{note}
  Dans le package \ltxpack{geometry} les dimensions concernant
  l'en-tête, le pied de page et la zone pour les notes de marge, sont
  par défaut comptabilisées \emph{en plus} du corps du texte. Des
  options permettent d'inclure l'une ou l'intégralité de ces
  dimensions dans le corps du texte pour le calcul, en disant par
  exemple : « je veux que la largeur soit de 10 centimètres, notes de
  marge comprises. » (voir la documentation du package pour les
  détails).
\end{note}

\section{En-tête et pied de page}
\label{sec-cosmetique-entete-pieddepage}
Les zones au-dessus et en dessous du corps du texte appelées en-tête et
pied de page peuvent être personnalisées à l'aide du package
\ltxpack{fancyhdr}. Le principe de base est simple\footnote{Vous ne
  serez sans doute pas tout à fait d'accord avec le terme « simple »
  après avoir  lu la suite...}, il suffit d'utiliser la commande :
\begin{ltxcode}
  \pagestyle{fancy}
\end{ltxcode}
pour spécifier qu'on veut utiliser des en-têtes et des pieds de page définis
grâce au package \ltxpack{fancyhdr}. Par défaut le package produit des
traits horizontaux en  dessous de l'en-tête et au-dessus du pied de
page dont les épaisseurs sont définies par 
\ltxcom{footrulewidth} et \ltxcom{headrulewidth}. On peut ensuite
utiliser les commandes :
\begin{itemize}
\item \ltxcom{fancyhead} pour définir l'en-tête ;
\item \ltxcom{fancyfoot} pour définir le pied de page ;
%\item \ltxcom{fancyhf} pour définir les deux en même temps
\end{itemize}
Ces deux commandes attendent un argument optionnel constitué
d'une ou deux séquences des caractères suivants :
\begin{itemize}
\item \verb+E+ ou \verb+O+ pour spécifier la parité de la page
  (paire=\anglais{even}, impaire=\anglais{odd}) ;
\item \verb+R+, \verb+L+, \verb+C+ pour spécifier où l'on veut
  produire l'information : respectivement à droite, à gauche ou au
  centre ;
\end{itemize}
Voici un exemple :
\begin{ltxcode}
  \fancyhf{} % on efface tout et on recommence
  % EN TÊTE :
  % initiales à droite sur page paire, à gauche sur page impaire :
  \fancyhead[RE,LO]{VL}
  % numéro de page au centre :
  \fancyhead[C]{\thepage}
  % numéro de section à droite sur page impaire,
  % à gauche sur page paire :
  \fancyhead[LE,RO]{\thesection}
  % PIED DE PAGE :
  % une image à droite sur page impaire, à gauche sur page paire :
  \fancyfoot[RO,LE]{\includegraphics[height=4ex]{punch}}
  % titre à gauche sur page impaire, à droite sur page paire :
  \fancyfoot[LO,RE]{%
    Tout ce que vous avez toujours voulu savoir sur \LaTeX{}}
  % épaisseur des traits
  \renewcommand{\footrulewidth}{3pt}
\end{ltxcode}

\fancyhf{} 
\fancyhead[RE,LO]{VL}
\fancyhead[C]{\thepage}
\fancyhead[LE,RO]{\thesection}
\fancyfoot[RO,LE]{\includegraphics[height=4ex]{punch}}
\fancyfoot[LO,RE]{ Tout ce que vous avez toujours voulu savoir sur \LaTeX{}}
\renewcommand{\footrulewidth}{3pt}


\subsection{Cas de la première page des chapitres}

Dans la classe \ltxcls{book}, \LaTeX{} fait automatiquement appel au
style \verb+plain+ pour les premières pages de chapitre. Pour demander
au package \ltxpack{fancyhdr} de définir un style particulier pour ces
pages, on écrit :
\begin{ltxcode}
  % le cas de la première page d'un chapitre
  \fancypagestyle{plain}{%
    \fancyhf{}%  on efface tout
    \fancyfoot[C]{\thepage}% numéro en bas de la page
    % on efface tous les traits
    \renewcommand{\headrulewidth}{0pt}%
    \renewcommand{\footrulewidth}{0pt}}
\end{ltxcode}
Vérifiez maintenant que les pages \pageref{chap-base},
\pageref{chap-savoir}, \pageref{chap-maths}, \pageref{chap-graphix},
etc. ont ce style...

\subsection{Pages vierges avant le début d'un chapitre}

Dans la classe \ltxcls{book} en mode recto-verso (c'est le cas de ce
document), \LaTeX{} commence par défaut un chapitre sur une page
impaire ---~appelée dans le jargon typographique la « belle page ». Pour
ce faire \LaTeX{} fait appel dans différentes commandes internes, à la
commande \ltxcom{cleardoublepage} qui permet d'insérer si nécessaire
une page blanche avant le début du chapitre. Cette page reçoit par
défaut le style des en-têtes et pieds en cours. Dans le manuel que vous
avez sous les yeux, nous avons imposé un style « vide » à ces pages en
modifiant la définition de la commande \ltxcom{cleardoublepage} du
fichier \ltxfile{latex.ltx} :
\begin{ltxcode}
  \renewcommand{\cleardoublepage}{% redéfinition de la commande 
    \clearpage\ifodd\c@page\else
    \hbox{}
    \vspace*{\fill}
    \thispagestyle{empty}% ligne ajoutée 
    \newpage
    \fi}
\end{ltxcode}
Feuilletez le manuel et cherchez si les pages vierges avant le début
des chapitres sont bien vides...

\subsection{Mécanisme de marqueurs}

Vous aurez sans doute remarqué que dans ce manuel, les en-têtes des
pages contiennent des informations qui dépendent du contexte. Sont en
effet insérés sur les pages paires (page de gauche) le titre du
chapitre, et sur les pages impaires (page de droite) le titre de la
dernière section de la page. Il est possible de produire ce genre
d'en-têtes car \LaTeX{} dispose d'un mécanisme de \emph{marqueurs} que
nous allons tenter d'expliquer ici.
\begin{nota}
  Il n'est pas inutile de préciser maintenant que lorsque \TeX{} et
  \LaTeX{} produisent une page, ils vont garnir l'en-tête et le pied en
  fonction d'information collectées le long de la page en question.
  La production de l'en-tête et du pied est donc postérieure à la
  composition de la page.
\end{nota}

\subsubsection{Les commandes \ltxcom{markboth} et \ltxcom{markright}}

Soient les commandes :
\begin{ltxcode}
  \markboth{ø\marg[g]{texte}ø}{ø\marg[d]{texte}ø}
\end{ltxcode}
ou :
\begin{ltxcode}
  \markright{ø\marg{texte}ø}  
\end{ltxcode}
Nous allons imaginer que les arguments \marg[x]{texte} sont stockés
dans une pile et une file.  Dans cet ordre d'idée :
\begin{itemize}
\item \ltxcom{markboth} empile \marg[g]{texte}, et
  stocke \marg[d]{texte} dans la file ;
\item \ltxcom{markright} stocke  \marg{texte} dans la file.
\end{itemize}
Ces deux commandes de « marquage » peuvent être appelées plusieurs
fois ou jamais, sur une même page. Les données de la pile et de la
file seront exploitées au moment de générer les en-têtes et pieds de
page, lorsque \TeX{} achève la mise en forme de la page, et ceci grâce
aux commandes :
\begin{itemize}
\item \ltxcom{leftmark} renvoie le sommet de la pile, c'est-à-dire
  \marg[g]{texte} du \emph{dernier appel} à \ltxcom{markboth} ;
\item \ltxcom{rightmark} renvoie le début de la file, c'est-à-dire
  \marg[d]{texte} du \emph{premier appel} à \ltxcom{markboth} ou
  \marg{texte} du \emph{premier appel} à \ltxcom{markright}.
\end{itemize}
\begin{nota}
  Une petite subtilité au sujet de la « file » que nous présentons ici
  : tant qu'aucune commande de « marquage » n'ajoute de données au
  cours d'une page, la file contiendra \emph{la dernière information
    insérée} dans les pages précédentes. La « file » est vidée dès
  qu'une commande \ltxcom{markboth} ou \ltxcom{markright} survient.
\end{nota}
Un autre moyen de comprendre ce mécanisme de marqueurs pourrait être
de dire :
\begin{itemize}
\item \ltxcom{leftmark} contient la dernière information que
  j'ai insérée sur la pile (à l'aide du premier argument de
  \ltxcom{markboth}) ;
\item \ltxcom{rightmark} contient la première information de la « file
  », si on en a mis une sur cette page, ou la dernière qui a
  été enfilé (à l'aide du deuxième argument de \ltxcom{markboth} ou de
  l'argument de \ltxcom{markright}.
\end{itemize}
\begin{note}
  Il peut être utile de
  savoir que l'auteur a utilisé ces commandes pour la production d'un
  trombinoscope composé de plusieurs dizaines de noms et photos par
  page. L'idée était d'exploiter le mécanisme de marquage pour faire
  apparaître dans l'en-tête le premier et le dernier nom de la page,
  comme dans un dictionnaire. Il suffit pour cela d'appeler pour
  chaque personne (nom et photo) la commande :
  \begin{ltxcode}
    \markboth{ø\marg{nom du gugusse}ø}{ø\marg{nom du gugusse}ø}
  \end{ltxcode}\continuenota
  puis d'insérer dans les en-têtes la commande \ltxcom{rightmark} sur
  les pages de gauche (impaires) et \ltxcom{leftmark} sur les pages de
  droite (paires)...
\end{note}

\subsubsection{Interactions avec les commandes de paragraphe}

À chaque début de chapitre, de section, de sous-section, etc. une
commande interne de \LaTeX{} fait appel aux commandes de marquages
présentées au paragraphe précédent, pour stocker des informations
susceptibles d'enrichir l'en-tête ou le pied de page. Ces commandes se
nomment :
\begin{itemize}
\item \ltxcom{chaptermark} pour les chapitres ;
\item \ltxcom{sectionmark} pour les sections ;
\item ...
\end{itemize}
elles attendent un argument qui contient le titre du chapitre ou du
paragraphe. Dans ce manuel, les deux commandes précédentes ont été
définies comme suit :
\begin{ltxcode}
  %  #1 contient le titre de la section
  \renewcommand{\sectionmark}[1]{%
    \markright{\sectionfont\thesection\ #1}}
  % #2 contient le titre du chapitre
  \renewcommand{\chaptermark}[1]{%
    \markboth{\sectionfont#1}{}}
\end{ltxcode}
Puis :
\begin{ltxcode}
  \fancyhead[LE,RO]{\thepage}
  \fancyhead[LO]{\rightmark}
  \fancyhead[RE]{\leftmark}
\end{ltxcode}
Par conséquent :
\begin{itemize}
\item à droite des pages paires, on trouve (\ltxcom{leftmark}) le
  dernier titre de chapitre rencontré ;
\item à gauche des pages impaires, on trouve (\ltxcom{rightmark}) le
  numéro et le titre de la première \ltxcom{section} de cette page, ou le
  numéro et le titre de la dernière \ltxcom{section} rencontrée...
\end{itemize}
Si vous ne me croyez pas voyez par vous-même le haut de cette page.

%
% on montre le contenu de \rightmark et \leftmark 
%
\fancyhf{}
\fancyhead[LE]{\ongletpaire\bfseries\thepage}
\fancyhead[RO]{\bfseries\thepage\ongletimpaire}
\fancyhead[LO]{\texttt{\textbackslash rightmark} vaut \rightmark{} et leftmark vaut \leftmark}
\fancyhead[RE]{\texttt{\textbackslash rightmark} vaut \rightmark{} et leftmark vaut \leftmark}
\renewcommand{\footrulewidth}{0pt}



\subsection{Organisation du document}
\label{sec-cosmetique-entete-pieddepage-backfrontmatter}

Il est nécessaire de savoir que dans un document tel que celui que
vous lisez, il existe trois parties qui sont reconnues par \LaTeX{} :
le \emph{front matter}, le \emph{main matter} et le \emph{back matter}
désignant respectivement le début du document (comportant généralement
la préface et le sommaire), la partie principale, et la partie
clôturant le document (comportant généralement la table des matières,
le ou les index, la ou les bibliographies, le glossaire, etc). On doit alors
explicitement écrire un document \LaTeX{} comme suit :
\begin{ltxcode}
  \documentclass{ø\marg{classe du document}ø}
  \begin{document}
  \frontmatter % introduction
  [...]
  \mainmatter % partie principale
  [...]
  \backmatter % pour clore le document
  [...]
  \end{document}
\end{ltxcode}

Nous verrons dans la suite de ce chapitre que nous serons amenés à
modifier les trois commandes permettant de passer d'une partie à une
autre. Pour l'instant, il faut savoir que la classe \ltxcls{book}
définit un booléen :
\begin{ltxcode}
  \newif\if@mainmatter 
\end{ltxcode}
utilisé par défaut dans \LaTeX{} pour savoir si on se trouve dans le «
main matter » ou pas. Nous avons en outre défini pour notre document
un autre booléen :
\begin{ltxcode}
  \newif\if@frontmatter 
\end{ltxcode}
qui nous permettra d'effectuer des traitements particuliers lorsqu'on
sera dans la partie introductive du document. Les trois commandes
délimitant les trois parties sont définies par :
\begin{ltxcode}
  \renewcommand\frontmatter{%
    \cleardoublepage
    \@frontmattertrue
    \@mainmatterfalse
    \pagenumbering{roman}% numérotation en romain
  }
  \renewcommand\mainmatter{%
    \cleardoublepage
    \@mainmattertrue
    \@frontmatterfalse
    \pagenumbering{arabic}% numérotation en chiffres arabes
  }
  \renewcommand\backmatter{%
    \cleardoublepage
    \@frontmatterfalse
    \@mainmatterfalse
  }
\end{ltxcode}
En farfouillant dans le code de \LaTeX{} on peut comprendre que
la commande \ltxcom{pagenumbering}, permettant de changer la
numérotation, réinitialise le compteur de page à~1.

%
% on remet tous commme c'était avant
%
\fancyhf{}
\fancyhead[LE]{\ongletpaire\bfseries\thepage}
\fancyhead[RO]{\bfseries\thepage\ongletimpaire}
\fancyhead[LO]{\bfseries\rightmark}
\fancyhead[RE]{\bfseries\leftmark}
\renewcommand{\footrulewidth}{0pt}


\subsection{Numéroter l'introduction en roman « petites capitales »}

Votre serviteur a tenu à ce que les pages de l'introduction soient
numérotées en chiffres romains et petites capitales. On ne peut
malheureusement pas écrire :
\begin{ltxcode}
  \renewcommand{\thepage}{\textsc{\roman{page}}}
\end{ltxcode}
Puisque cela provoque une incompatibilité avec la gestion de l'index.
L'idée retenue est de procéder comme suit :
\begin{enumerate}
\item utiliser la numérotation en chiffre romain minuscule ; 
\item dans le pied de page afficher \verb+\textsc{\thepage}+ ;
\item modifier la commande \verb+\index+ pour que les numéros de pages
  s'affiche en petites capitales.
\end{enumerate}
D'où dans la définition de \ltxcom{frontmatter} on ajoutera :
\begin{ltxcode}
  \let\indexORI\index% sauvegarde de la définition initiale
  \renewcommand{\index}[1]{\indexORI{##1|textsc}}
  \fancyfoot{}
  \fancyhead[LE,RO]{\textsc{\thepage}}
\end{ltxcode}
Et dans la définition de \ltxcom{mainmatter} :
\begin{ltxcode}
  \let\index\indexORI% pour revenir à la définition initiale
\end{ltxcode}

Pour être parfaitement rigoureux on va modifier l'allure des premières
pages de chapitre :
\begin{ltxcode}
  \fancypagestyle{plain}{%
    \fancyhf{}
    \if@frontmatter% introduction
       \fancyfoot[C]{\textsc{\thepage}}
    \else
       \fancyfoot[C]{\thepage}
    \fi
  \renewcommand{\headrulewidth}{0pt}
  \renewcommand{\footrulewidth}{0pt}}
\makeatother
\end{ltxcode}


\subsection{Index, bibliographie et table des matières}

Dans la classe \ltxcls{book}, deux environnements sont définis :
\begin{itemize}
\item \ltxenv{thebibliography} permettant de produire la bibliographie ;
\item \ltxenv{theindex} pour produire l'index ;
\end{itemize}
et la commande :
\begin{itemize}
\item \ltxcom{tableofcontents} pour produire la table des matières.
\end{itemize}
Ces environnements et cette commande sont conçus pour produire des
en-têtes avec le numéro de la page et le nom du chapitre en majuscules
à savoir \ltxcom{bibname}, \ltxcom{indexname} et
\ltxcom{contentsname}. Voici par exemple un extrait de
\ltxcom{tableofcontents} :
\begin{ltxcode}
  \newcommand\tableofcontents{%
    [...]
    \chapter*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}%
          {\MakeUppercase\contentsname}}%
    \@starttoc{toc}%
    [...]
    }
\end{ltxcode}
J'ai souhaité que dans ce manuel les en-têtes ne soient pas en
majuscules. Deux solutions sont possibles :
\begin{enumerate}
\item utiliser la commande \ltxcom{nouppercase} du package
  \ltxpack{fancyhdr} et écrire dans la définition de
  \ltxcom{backmatter} :
  \begin{ltxcode}
    % en-tête en minuscule :
    \fancyhead[LO]{\nouppercase\rightmark}
    \fancyhead[RE]{\nouppercase\leftmark}% 
  \end{ltxcode}
\item recopier la définition de la macro \ltxcom{tableofcontents}
  provenant de \ltxfile{book.cls}, et la modifier pour supprimer les
  commandes \ltxcom{MakeUppercase}. Faire la même chose pour l'index
  et la bibliographie.
\end{enumerate}
Dans ce document, c'est la deuxième solution qui a été adoptée. On en
a également profité pour insérer l'index et la bibliographie dans la
table des matières, ce qui n'est pas le comportement par défaut de
\LaTeX{} et de la classe \ltxcls{book}. Nous avons donc pour
l'environnement \ltxenv{theindex} :
\begin{ltxcode}
  \renewenvironment{theindex}
  {%
    [...]
    % insertion dans la table des matières
    \addcontentsline{toc}{chapter}{\indexname}
    % suppression de \MakeUppercase
    \@mkboth{\indexname}{\indexname}
    \thispagestyle{plain}
    [...]
  {\if@restonecol\onecolumn\else\clearpage\fi}

\end{ltxcode}




\section{Environnements « verbatim »}

Les packages \ltxpack{fancyvrb} et \ltxpack{listings} ont tous deux la
particularité de produire du texte avec des caractères spéciaux. Le
premier permet de produire des environnements de
type \texttt{verbatim} avec beaucoup plus de souplesse. Il permet
notamment de personnaliser d'éventuelles bordures, les marges, et
surtout on peut « s'échapper vers \LaTeX{} » au beau milieu de
l'environnement, ou comme disent les anglophones : \emph{to escape to
  \LaTeX{}}. En d'autres termes, bien qu'étant dans un environnement
où les caractères~\verb+\+, \verb+{+ et~\verb+}+ sont sans effet, il
est malgré tout possible de faire appel à des commandes \LaTeX{}.

Le second (\ltxpack{listings}) a pour objectif de produire des
extraits de langage de programmation. Il propose également parmi un
grand nombre de fonctionalités, la possibilité de s'échapper vers
\LaTeX{}. Nous vous proposons donc ici de découvrir ces deux
environements à l'aide d'exemples « en grandeur nature » utilisés dans
ce manuel.



\subsection{Digression vers les caractères...}
\label{sec-cosmetique-digression-catcode}

Il peut ne pas être inutile\footnote{Les français sont parait-il des
  spécialistes de la litote. Mais ne nous égarons pas...} de faire ici
une petite digression sur la manière dont \TeX{} mange et digère les
caractères qu'on lui fournit. Il faut savoir que les caractères
peuvent entrer dans seize catégories différentes. Chaque caractère
peut n'appartenir qu'à une catégorie à la fois. Chacune de ces
catégories permet de basculer \TeX{} vers un traitement particulier.
Par exemple lorsque le caractère~\verb+\+ est rencontré, \TeX{} va
lire les caractères qui suivent pour connaître le nom de la commande
(ou \emph{séquence de contrôle}), lorsqu'il rencontre le
caractère~\verb+{+, \TeX{} va ouvrir un nouveau groupe, lorsque que le
  caractère~\verb+%+
  est lu, \TeX{} va ignorer les caractères jusqu'à la fin de la ligne,
  c'est-à-dire jusqu'à ce qu'il rencontre un caractère catégorisé «
  fin de ligne », etc. Parmi les catégories reconnues par \TeX{} :
\begin{description}
\item[Catégorie 0] caractère de contrôle (\verb+\+ dans \LaTeX{}) ;
\item[Catégorie 1] début de groupe (\verb+{+ dans \LaTeX{}) ;
\item[Catégorie 2] fin de groupe (\verb+}+ dans \LaTeX{}) ;
\item[Catégorie 11] lettre ;
\item[Catégorie 14] commentaire (\verb+%+ dans \LaTeX{}) ;
\end{description}
On peut alors s'amuser ---~même si cela est assez « dangereux »~--- à
changer le contenu de chaque catégorie. Dans l'exemple ci-dessous, on
a transformé les caractères~\verb+\+, \verb+{+et~\verb+}+ en lettres,
et on a décidé que les caractères~\verb+/+, \verb+(+ et~\verb+)+
appartiendraient respectivement aux catégories : caractère de
contrôle, début de groupe et fin de groupe. Le caractère \verb+#+ a
également été changé de catégorie, c'est désormais un caractère de
commentaire.


\begin{ltxexemple}
  { \catcode`\/=0 \catcode`\(=1 
    \catcode`\)=2 \catcode`\#=14
    \catcode`\{=11 \catcode`\}=11 
    \catcode`\\=11
    # ça on devrait pas le voir...
    \bidule{truc muche} /textbf(en gras)
    )\par
    on retourne dans le monde \LaTeX{}...
\end{ltxexemple}
En outre, il est intéressant de savoir que \TeX{} peut rendre actifs
certains caractères (qui entrent alors dans la catégorie~13). Ces
caractères peuvent alors être définis comme des commandes voici un
exemple idiot :
\begin{ltxexemple}
  \catcode`\+=13
  \newcommand{+}{plus}
  3 + 4 = 7
\end{ltxexemple}
Dans cet exemple on a rendu « actif » le caractère~\verb/+/, puis on
l'a défini comme une commande. Vous noterez qu'ici on a pu créer une
commande que l'on utilise sans faire appel au caractère~\verb+\+.
\begin{note}
  Il peut être utile de savoir que lorsqu'on charge le package
  \ltxpack{babel} et l'extension française, les caractères de
  ponctuations double sont également rendus actifs notamment pour
  empêcher la césure avant ceux-ci.  En outre le caractère \verb+~+
  est dans la catégorie des caractères actifs dans \LaTeX{}. On peut
  d'ailleurs voir sa définition dans une session \LaTeX{} interactive
  :
  \begin{monverbatim}
    *\show~
    > ~=macro:
    ->\nobreakspace {}.
    <*> \show~
  \end{monverbatim}
\end{note}



\subsection{Environnements maison basés sur \ltxpack{fancyvrb}}

Les environnements du type de \ltxenv{verbatim} ont pour but de
changer l'appartenance des caractères à leur catégorie respective. En
outre, le package \ltxpack{fancyvrb} permet de définir quels
caractères permettent de repasser le contrôle à \LaTeX{}. Dans ce
document, l'environnement \ltxenv{unixcom} a été défini comme suit :
\begin{ltxcode}
  \DefineVerbatimEnvironment{unixcom}{Verbatim}{%
    commandchars=¢«»,
    frame=single, framerule=.4pt, framesep=1.5mm,
    gobble=2,
    xleftmargin=15pt}
\end{ltxcode}
Cet environnement est donc de type \ltxenv{verbatim} mais dans lequel
on peut « exé\-cu\-ter » des commandes \LaTeX{} à l'aide des
caractères~\verb+¢+ de catégorie~0, \verb+«+ de catégorie~1 et
\verb+»+ de catégorie~2 ---~on peut bien évidemment choisir n'importe
quel caractère pour ce faire. Il faut cependant garder à l'esprit que
ceux-ci doivent être à la fois lisibles pour l'utilisateur et peu
utilisés à d'autres fins que de repasser le contrôle à \LaTeX{}.


\begin{ltxexempleenv}
\begin{ltxexempleinput}
  Pour afficher le contenu d'une variable :
  \begin{unixcom}
    echo ${¢marg«nom variable»}
  \end{unixcom}
\end{ltxexempleinput}
\begin{ltxexempleoutput}
  Pour afficher le contenu d'une variable :
  \begin{unixcom}
    echo ${¢marg«nom variable»}
  \end{unixcom}
\end{ltxexempleoutput}
\end{ltxexempleenv}
La commande \voir{sec-jouets-marg}{\ltxcom{marg}} permet de produire
son argument entre chevrons simples et en penché.  Les autres
paramètres de la commande
\ltxcom{DefineVerbatimEnvironment} ont pour but de préciser
l'allure de la bordure (paramètres \texttt{frame...}), la marge de
gauche (paramètre \texttt{xleftmargin}) et le fait que les premiers
caractères de chaque ligne seront systématiquement ignorés
(\texttt{gobble}). Comme le montre la documentation du package
\ltxpack{fancyvrb} beaucoup d'autres options sont disponibles.

Un autre environnement de ce genre a été créé pour saisir les
commandes d'\soft{Emacs} dans l'annexe consacrée à Auc\TeX{}.
L'environnement en question (baptisé \ltxenv{emacscom}) a été créé
comme suit :
\begin{ltxcode}
  \DefineVerbatimEnvironment{emacscom}{Verbatim}{%
  commandchars=¢«»,
  frame=leftline, framerule=1mm,  framesep=2mm,
  gobble=2, xleftmargin=15pt}
\end{ltxcode}
qui donne par exemple :
\begin{ltxexemple}
    Pour jouer à Tetris dans \soft{Emacs} :
    \begin{emacscom}
      M-x tetris
    \end{emacscom}
\end{ltxexemple}

\subsection{Environnements pour  langages de programmation}

Le package \ltxpack{listings} reconnaît la syntaxe d'un grand nombre
de langage de programmation. Une manière simple d'utiliser ce package
consiste à créer son propre environnement à l'aide d'une commande
analogue à \ltxcom{newenvironment} :
\begin{ltxcode}
  \lstnewenvironment{C}{\lstset{language=C}}{}
\end{ltxcode}
\lstnewenvironment{C}{%
  \lstset{language=C}}{}
On pourra alors simplement écrire :
\begin{ltxexemple}
  \begin{C}
    /* hello world en C */
    int main()
    {
      printf("Hello !\n");
      return 0;
    }
  \end{C}
\end{ltxexemple}
Bien évidemment une foultitude d'options de configuration permet
d'adapter cet environement à vos besoins. Le plus simple et le plus
efficace est sans doute de lire la documenation accompagnant le
package. À titre d'exemple, il faut savoir que l'on peut changer la
mise en évidence des mots réservés et des commentaires du langage
considéré. Ainsi, en écrivant :
\begin{ltxcode}
  \lstnewenvironment{Cbis}{%
    \lstset{language=C,
      basicstyle=\rmfamily\slshape,
      commentstyle=\rmfamily\upshape,}}{}
\end{ltxcode}
\lstnewenvironment{Cbis}{%
  \lstset{language=C,
    basicstyle=\rmfamily\slshape,
    commentstyle=\rmfamily\upshape,}}{}%
\framanouvellepage On aura :
\begin{ltxexemple}
  \begin{Cbis}
    /* hello world en C */
    int main()
    {
      printf("Salut !\n");
      return 0;
    }
  \end{Cbis}
\end{ltxexemple}
Et puisqu'il est question des caractères spéciaux et de
l'\emph{échappement vers \LaTeX{}}, il faut savoir qu'à l'instar de
\ltxpack{fancyvrb}, le package \ltxpack{listings} permet de spécifier
un caractère permettant cet échappement. Ainsi :
\begin{ltxcode}
  \lstnewenvironment{Cter}{%
    \lstset{language=C, escapechar=@}}{}
\end{ltxcode}
Permet d'insérer des commandes \LaTeX{} dans le listing :
\lstnewenvironment{Cter}{\lstset{language=C, escapechar=@}}{}%
\begin{ltxexemple}
  \begin{Cter}
    int main()
    {
      printf("Hi !\n");
      return @\fbox{code de retour}@;
    }
  \end{Cter}
\end{ltxexemple}


\section{About those so called ``french guillemets''}

Un des plaisirs de la typographie française est sans aucun doute
l'utilisation de ces merveilleux guillemets « à la française
»...\footnote{On notera d'ailleurs que la mode qui consiste
  aujourd'hui à faire subir à ses majeurs et index des mouvements
  d'oreilles de lapin, pendant qu'on parle pour dire « entre
  guillemets » sans le dire, est clairement empruntée aux américains.
  Je propose donc ici publiquement que l'on se force à utiliser plutôt
  l'index et le pouce pour faire ce geste, il faudra par contre se
  munir de deux autres bras pour être en mesure d'imiter les deux
  chevrons~`\og' et~`\fg', ou peut-être qu'un habile
  tortillage de quatre doigts d'une main peut donner un résultat...}
Cependant le package \ltxpack{babel} ne gère pas la césure
correctement s'il on saisit dans un document :
\begin{ltxcode}
  \begin{minipage}{ø\ifframabookversion3.7cm\else5cm\fiø}
    Cette courte phrase dans une boîte a pour unique 
    but de montrer que ces symboles ne se comportent 
    pas comme de « gentils » guillemets.
  \end{minipage}
\end{ltxcode}
on aura la minipage suivante : \hspace{1cm}
\newcommand{\symbog}{\symbol{19}}
\newcommand{\symbfg}{\symbol{20}}
\let«\symbog
\let»\symbfg
\begin{minipage}{\ifframabookversion3.7cm\else5cm\fi}
  Cette courte phrase a pour unique but de montrer que ces petits
  symboles ne se comportent pas comme de « gentils » guillemets.
\end{minipage}
\let»=\fermerguillemets \let«=\ouvrerguillemets 
%»

\medskip Ce qui est pour le moins gênant... Il est bien sûr possible
de saisir ces guillemets avec les commandes \ltxcom{og} et \ltxcom{fg}
fournies par le package \ltxpack{babel}, mais cela est au goût de
votre serviteur trop contraignant dans la mesure où ce caractère est
directement accessible depuis le clavier\footnote{Alt-Gr-z et
  Alt-Gr-x.}. Il existe une solution ---~qui avait été adoptée par le
package \ltxpack{french}~--- palliant le problème de la césure qui
consiste à rendre \voir{sec-cosmetique-digression-catcode}{actifs} les
caractères~`«' et~`»'. Nous avons donc écrit :
\begin{ltxcode}
  \catcode`\«=13
  \catcode`\»=13
\end{ltxcode}
puis défini les deux commandes suivantes :
\begin{ltxcode}
  \newcommand{\fermerguillemets}{%
    \unskip\kern.15em\symbol{20}}
  \newcommand{\ouvrerguillemets}{%
    \symbol{19}\ignorespaces\kern.15em}
\end{ltxcode}
On notera l'utilisation de la commande \TeX{} \ltxcom{kern} permettant
d'insérer un blanc insécable d'une longueur donnée, de la commande
\voir{sec-outillage-pourcents-unskip}{\ltxcom{unskip}} et enfin de la
commande \ltxcom{symbol} qui insère ici les 19\ieme{} et 20\ieme{}
caractères de la fonte courante :
\begin{ltxexemple}
  \setcounter{car}{1}
  \whiledo{\value{car}<64}{%
    \symbol{\value{car}}$_{\thecar}$
    \stepcounter{car}}
\end{ltxexemple}
Enfin, on a affecté aux caractères les deux commandes précédentes :
\begin{ltxcode}
  \let»=\fermerguillemets
  \let«=\ouvrerguillemets
\end{ltxcode} 
%»
\begin{notahack}
  Cette façon de faire a trois inconvénients mineurs que je suis bien
  incapable de résoudre aujourd'hui. Tout d'abord, les moteurs sachant
  gérer le codage Utf~8 et permettant à \TeX{} de rendre actif le
  caractère \verb+«+ (alors codé sur 2 octets), sont aujourd'hui peu
  répandus et j'avoue humblement que je ne les ai pas encore testés.
  Par conséquent la manipulation proposée ici est limitée aux codages
  utilisant 1 octet par caractère .  Ensuite on ne peut utiliser ces
  guillemets dans un titre au risque d'avoir des artéfacts dans les «
  signets/\anglais{bookmarks} » d'un fichier pdf.  Enfin, ces
  guillemets ne fonctionnent pas avec l'environnement
  \ltxenv{ltxexemple} défini à la fin du chapitre suivant. Un drame
  quoi !
\end{notahack}


\section{Une boîte pour le mini-sommaire}
\label{sec-cosmetique-mini-tdm}

Le package \ltxpack{mini-toc} permet ---~comme son nom l'indique~--- de
produire des « minitables des matières » que l'on peut insérer dans
un document à un endroit donné, généralement en début de chapitre.
Après avoir utilisé l'ordre \ltxcom{dominitoc} dans le préambule, on
fait ensuite appel à la commande \ltxcom{minitoc} pour insérer cette
minitable des matières à l'endroit voulu. La documentation du package
explique tout cela en détail et présente notamment les différents
styles que l'on peut utiliser. Pour ce manuel, j'ai trouvé l'idée
d'une table des matières en début de chapitre séduisante, mais les
styles proposés par le package ne me convenaient pas. En fait je
souhaitais pouvoir mettre les titres de sections dans un boîte comme
ceci :
\begin{center}
  \titlebox{Sommaire}{%
    \begin{minipage}{0.5\linewidth}
      \begin{flushleft}
        \bfseries
        x.1 Le premier titre\\
        x.2 Le deuxième titre\\
        x.3 etc.
      \end{flushleft}
    \end{minipage}}
\end{center}
C'est-à-dire une boîte avec un titre ---~ici le titre est « Sommaire ».
À ma connaissance, \LaTeX{} ne propose pas de telles boîtes et suite à
une question posée sur les forums de discussions, une bonne âme ---~en
l'occurrence Benjamin \textsc{Bayart}~--- me propose un code \TeX{}
répondant au cahier des charges. Je vous propose dans ce paragraphe,
une version\footnote{Tout à fait discutable et limitée dans ses
  fonctionnalités comme tout « logiciel » pondu par un bricoleur...}
\LaTeX{} d'une boîte avec titre...


\subsection{L'interface de la commande}

Plusieurs solutions sont possibles pour créer une telle commande. En
s'inspirant de l'interface des boîtes de \LaTeX{}, on peut créer une
macro dont la syntaxe d'utilisation serait :
\begin{ltxexemple}
     \titlebox{\footnotesize Un titre}{%
       Le contenu de la boîte}
\end{ltxexemple}
ou encore :
\begin{ltxexemple}
     \setlength{\fboxsep}{5pt}
     \setlength{\fboxrule}{2pt}
     \titlebox{Un autre titre}{%
       \begin{minipage}{3cm}\begin{center}
           truc\\ muche
         \end{center}\end{minipage}}
\end{ltxexemple}



\subsection{Quand même un peu de \TeX{}}

La primitive de \TeX{} \ltxcom{leaders} permet de remplir un espace
élastique avec ce qui vous passe par la tête. Sa syntaxe :
\begin{ltxcode}
  \leadersø\marg{ce qui vous chante}\marg{espace}ø
\end{ltxcode}
permet donc de remplir l'\marg{espace} avec \marg{ce qui vous
  chante}. Par exemple :
\begin{ltxexemple}
  \framebox[3cm]{%
    \leaders\hbox{o}\hfill}
\end{ltxexemple}
La primitive \ltxcom{hbox} de \TeX{} (utilisée par \ltxcom{mbox} et
\ltxcom{makebox}) permet de créer des boîtes horizontales :
\begin{ltxexemple}
  \framebox[3cm]{%
    \leaders\hbox to 3pt{o}\hfill}
\end{ltxexemple}
Les \ltxcom{leaders} peuvent également être utilisés en combinaison
avec la primitive \ltxcom{hrule} de \TeX{} permettant de dessiner des
traits :
\begin{ltxexemple}
  \framebox[3cm]{%
    \leaders\hrule height 4pt\hfill}
\end{ltxexemple}
Ici, le ressort \ltxcom{hfill} s'étire les trois centimètres de la
\ltxcom{framebox} et est rempli par un trait de hauteur quatre points.
\begin{ltxexemple}
  \framebox[3cm]{%
    \leaders\hbox to5pt{%
      \leaders\hrule width1pt\hfill%
      \kern2pt}\hfill}
\end{ltxexemple}
Dans l'exemple ci-dessus, l'espace de trois centimètres est rempli par
des boites de cinq points de large, contenant chacunes d'elles des
\ltxcom{leaders} comme dans l'exemple précédent, et un blanc de deux
points de large.  Avec \TeX{}, on peut régler la
\voir{sec-longelast}{raideur} du ressort de la manière suivante :
\begin{ltxexemple}
  \framebox[4cm]{%
    \hskip0pt plus 2fill X%
    \hskip0pt plus 3fill}
\end{ltxexemple}
La dimension :
\begin{ltxcode}
  \hskip 0pt plus ø\marg{n}øfill
\end{ltxcode}
permet  de définir une longueur élastique de raideur relative~$n$.
Dans l'exemple précédent la lettre `X' se trouve donc au
\mafraction{2}{5} de la boîte... En utilisant ce type de blanc
élastique et des \ltxcom{leaders}, on peut définir la commande suivante :
\begin{ltxcode}
  \newcommand{\traitressort}[2][1]{%
    \leaders\hrule height#2\hskip0pt plus #1fill\relax}
\end{ltxcode}
pouvant être par exemple utilisée comme suit :
\begin{ltxexemple}
  \framebox[4cm]{%
    \traitressort[2]{2ex}X%
    \traitressort{2pt}}
\end{ltxexemple}
on a donc dans la boîte de cinq centimètres :
\begin{itemize}
\item un blanc élastique de raideur~2, rempli d'un trait de quatre
  points de hauteur ;
\item la lettre X ;
\item un blanc élastique de raideur 1, rempli d'un trait de deux
  points de hauteur.
\end{itemize}
Nous allons bien entendu nous servir de cette commande pour la
suite...

\subsection{Conception de la boîte}

Pour concevoir la boîte à proprement parler, nous allons créer trois
\ltxcom{parbox} comme suit :
\begin{center}
\fbox{\parbox{3pt}{%
    \rule{0pt}{1.215cm}%
    \rule{3pt}{1.025cm}}}%
\parbox[][1.5cm][c]{4cm}{%
    \begin{flushleft}
      \framebox[4cm]{%
        \traitressort{3pt}
        \raisebox{-.23ex}{titre}
        \traitressort[4]{3pt}}\\\nointerlineskip
      \framebox[4cm]{contenu}\\\nointerlineskip
      \framebox[4cm]{\traitressort{3pt}}
    \end{flushleft}}%
\fbox{\parbox{3pt}{%
    \rule{0pt}{1.215cm}%
    \rule{3pt}{1.025cm}}}
\end{center}
Il y a :
\begin{itemize}
\item deux \ltxcom{parbox}s pour contenir les deux traits verticaux à
  droite et à gauche ;
\item une \ltxcom{parbox} pour le centre, contenant le trait du haut
  interrompu par le titre, le contenu, et en bas un trait horizontal.
\end{itemize}
Nous allons voir maintenant comment on peut construire ces trois
boîtes et les positionner les unes par rapport aux
autres.


\subsection{Le code}
\label{sec-cosmetique-myminitoc-code}

Nous allons avoir besoin d'une boîte pour stocker la \ltxcom{parbox}
centrale :
\begin{ltxcode}
  \newsavebox{\boitetitre}
\end{ltxcode}
et de deux dimensions :
\begin{ltxcode}
  \newlength{\largeurboitetitre}
  \newlength{\hauteurboitetitre}
\end{ltxcode}
qui portent un nom suffisamment explicite et par conséquent me
dispense ainsi de faire des phrases alambiquées expliquant la
signification de telle ou telle variable. La première tâche que l'on
va demander à la commande \ltxcom{titlebox} est de stocker son contenu
et de le mesurer :
\begin{ltxcode}
  \newcommand{\titlebox}[2]{%
    \begin{lrbox}{\boitetitre}% stockage du contenu
      \kern\fboxsep#2\kern\fboxsep
    \end{lrbox}
    % mesure de la largeur de la parbox centrale
    \settowidth{\largeurboitetitre}{\usebox{\boitetitre}}%
    % mesure de la hauteur de la parbox centrale
    \settoheight{\hauteurboitetitre}{\usebox{\boitetitre}}%
    \settodepth{\tempdim}{\usebox{\boitetitre}}%
    \addtolength{\hauteurboitetitre}{%
      \tempdim+2\fboxrule+2\fboxsep}%
    ... }
\end{ltxcode}
\ltxcom{kern} est une commande \TeX{} permettant d'insérer un blanc
insécable, ici de largeur \ltxlen{fboxsep}. Notez que pour mesurer la
hauteur totale on a recours à une longueur temporaire qui nous permet
de faire la somme de la hauteur (\anglais{height}) et la profondeur
(\anglais{depth}). On ajoute ensuite à cette hauteur totale deux fois
l'épaisseur du trait et deux fois l'espace \ltxlen{fboxsep}. Vous vous
souvenez sans doute que les dimensions \ltxlen{fboxrule} et
\ltxlen{fboxsep} définissent respectivement l'épaisseur du trait et
l'espace entre la bordure et le contenu d'une
\voir{sec-boitesimple}{boîte simple.} Par conséquent, on a :
\begin{itemize}
\item \ltxlen{largeurboitetitre} correspond à la largeur de la
  \ltxcom{parbox} centrale augmentée de deux fois \ltxlen{fboxsep} ;
\item \ltxlen{hauteurboitetitre} correspond à la hauteur totale
  augmentée de l'espace occupée par les deux traits horizontaux :
  2\verb/(\fboxsep+\fboxrule)/.
\end{itemize}
On peut donc construire une première version de la commande :
\newcommand{\titleboxI}[2]{%
  \begin{lrbox}{\boitetitre}% stockage du contenu
    \kern\fboxsep#2\kern\fboxsep
  \end{lrbox}
  % mesure de la largeur de la parbox centrale
  \settowidth{\largeurboitetitre}{\usebox{\boitetitre}}%
  % mesure de la hauteur de la parbox centrale
  \settoheight{\hauteurboitetitre}{\usebox{\boitetitre}}%
  \settodepth{\tempdim}{\usebox{\boitetitre}}%
  \addtolength{\hauteurboitetitre}{\tempdim+2\fboxrule+2\fboxsep}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}%
  \parbox{\largeurboitetitre}{%
    \begin{flushleft}
      \usebox{\boitetitre}
    \end{flushleft}}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}}
\begin{ltxcode}
  \newcommand{\titleboxI}[2]{%
    ...
    \parbox{\fboxrule}{% le trait de gauche
      \rule{\fboxrule}{\hauteurboitetitre}}%
    \parbox{\largeurboitetitre}{% la boîte centrale
      \begin{flushleft}
        \usebox{\boitetitre}
      \end{flushleft}}%
    \parbox{\fboxrule}{% le trait de droite
      \rule{\fboxrule}{\hauteurboitetitre}}}}
\end{ltxcode}
Ce qui donnera pour l'instant :
\begin{ltxexemple}
  \titleboxI{titre}{Bidule truc muche}

  \titleboxI{encore}{%
    \parbox{4cm}{truc\\bidule\\machin}}
\end{ltxexemple}
Il reste donc à modifier le contenu de la \ltxcom{parbox} centrale
pour ajouter les deux traits horizontaux, celui du bas, et celui du
haut coupé par le titre. L'idée est d'entasser trois boîtes : 
\begin{enumerate}
\item une boîte contenant le titre et des « traits ressorts » :
\item la boîte stockant le contenu (\verb+\boitetitre+) ;
\item un trait de largeur \ltxlen{largeurboitetitre}.
\end{enumerate}
Voici une première approche :
\begin{ltxcode}
  \newcommand{\titleboxII}[2]{%
    ...
    \parbox{\largeurboitetitre}{% la boîte centrale
      \begin{flushleft}
        \makebox[\largeurboitetitre]{%
          \traitressort{\fboxrule}#1%
          \traitressort[5]{\fboxrule}}\\
        \usebox{\boitetitre}\\
        \rule{\largeurboitetitre}{\fboxrule}
      \end{flushleft}}  
    ...}
\end{ltxcode}
\newcommand{\titleboxII}[2]{%
  \begin{lrbox}{\boitetitre}% stockage du contenu
    \kern\fboxsep#2\kern\fboxsep
  \end{lrbox}
  % mesure de la largeur de la parbox centrale
  \settowidth{\largeurboitetitre}{\usebox{\boitetitre}}%
  % mesure de la hauteur de la parbox centrale
  \settoheight{\hauteurboitetitre}{\usebox{\boitetitre}}%
  \settodepth{\tempdim}{\usebox{\boitetitre}}%
  \addtolength{\hauteurboitetitre}{\tempdim+2\fboxrule+2\fboxsep}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}%
  \parbox{\largeurboitetitre}{%
    \begin{flushleft}
      \makebox[\largeurboitetitre]{%
        \traitressort{\fboxrule}#1\traitressort[5]{\fboxrule}}\\
      \usebox{\boitetitre}\\
      \rule{\largeurboitetitre}{\fboxrule}
    \end{flushleft}}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}}
qui donnera :
\begin{ltxexemple}
  \titleboxII{titre}{Bidule truc muche}

  \titleboxII{encore}{%
    \parbox{4cm}{truc\\machin}}
\end{ltxexemple}
On dirait que c'est pas « tout à fait ça ». Il faudrait penser à faire
en sorte que la commande \verb+\\+ effectue un saut vertical
équivalent à la dimension \ltxlen{fboxsep}. On en profite au passage
pour faire subir au titre une translation verticale vers le bas :
\enlargethispage{1cm}
\begin{ltxcode}
  \newcommand{\titleboxIII}[2]{%
    ...
    \parbox{\largeurboitetitre}{% la boîte centrale
      \begin{flushleft}
        \makebox[\largeurboitetitre]{%
          \traitressort{\fboxrule}%
          \raisebox{-.5ex}[0pt][0pt]{#1}%
          \traitressort[5]{\fboxrule}}\\[\fboxsep]
        \usebox{\boitetitre}\\[\fboxsep]
        \rule{\largeurboitetitre}{\fboxrule}
      \end{flushleft}}  
    ...}
\end{ltxcode}
\newcommand{\titleboxIII}[2]{%
  \begin{lrbox}{\boitetitre}% stockage du contenu
    \kern\fboxsep#2\kern\fboxsep
  \end{lrbox}
  % mesure de la largeur de la parbox centrale
  \settowidth{\largeurboitetitre}{\usebox{\boitetitre}}%
  % mesure de la hauteur de la parbox centrale
  \settoheight{\hauteurboitetitre}{\usebox{\boitetitre}}%
  \settodepth{\tempdim}{\usebox{\boitetitre}}%
  \addtolength{\hauteurboitetitre}{\tempdim+2\fboxrule+2\fboxsep}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}%
  \parbox{\largeurboitetitre}{%
    \begin{flushleft}
      \makebox[\largeurboitetitre]{%
        \traitressort{\fboxrule}%
        \raisebox{-.5ex}[0pt][0pt]{#1}%
        \traitressort[5]{\fboxrule}}\\[\fboxsep]
      \usebox{\boitetitre}\\[\fboxsep]
      \rule{\largeurboitetitre}{\fboxrule}
    \end{flushleft}}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}}
ce qui donnera :
\begin{ltxexemple}
  \titleboxIII{titre}{Bidule truc muche}

  \titleboxIII{encore}{%
    \parbox{4cm}{truc\\machin}}
\end{ltxexemple}
On dirait que ça n'a pas arrangé grand chose... Il faut savoir que
lorsque \TeX{} entasse des boîtes en mode vertical, il insère de lui
même des espaces entres ces boîtes de manière à ce que les lignes soit
espacées de la longueur \ltxlen{baselineskip}. On trouve dans le
\TeX{}book, à la page~79 du chapitre traitant des \emph{glues} :
\begin{unecitation}[Donald \textsc{Knuth} in the \emph{\TeX book} \cite{texbook}]
  Exception : no interline glue is inserted before or after a rule
  box. You can also inhibit interline glue by saying
  \verb+\nointerlineskip+ between two boxes.
\end{unecitation}
L'ordre \ltxcom{nointerlineskip} résout donc le problème :
\begin{ltxcode}
  \newcommand{\titleboxIV}[2]{%
    ...
    \parbox{\largeurboitetitre}{% la boîte centrale
      \begin{flushleft}
        \makebox[\largeurboitetitre]{%
          \traitressort{\fboxrule}%
          \raisebox{-.5ex}[0pt][0pt]{#1}%
          \traitressort[5]{\fboxrule}}\\[\fboxsep]
        \nointerlineskip
        \usebox{\boitetitre}\\[\fboxsep]\nointerlineskip
        \rule{\largeurboitetitre}{\fboxrule}
      \end{flushleft}}  
    ...}
\end{ltxcode}
\newcommand{\titleboxIV}[2]{%
  \begin{lrbox}{\boitetitre}% stockage du contenu
    \kern\fboxsep#2\kern\fboxsep
  \end{lrbox}
  % mesure de la largeur de la parbox centrale
  \settowidth{\largeurboitetitre}{\usebox{\boitetitre}}%
  % mesure de la hauteur de la parbox centrale
  \settoheight{\hauteurboitetitre}{\usebox{\boitetitre}}%
  \settodepth{\tempdim}{\usebox{\boitetitre}}%
  \addtolength{\hauteurboitetitre}{\tempdim+2\fboxrule+2\fboxsep}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}%
  \parbox{\largeurboitetitre}{%
    \begin{flushleft}
      \makebox[\largeurboitetitre]{%
        \traitressort{\fboxrule}%
        \raisebox{-.5ex}[0pt][0pt]{#1}%
        \traitressort[5]{\fboxrule}}\\[\fboxsep]\nointerlineskip
      \usebox{\boitetitre}\\[\fboxsep]\nointerlineskip
      \rule{\largeurboitetitre}{\fboxrule}
    \end{flushleft}}%
  \parbox{\fboxrule}{%
    \rule{\fboxrule}{\hauteurboitetitre}}}
\enlargethispage{2cm}
ce qui donnera :
\begin{ltxexemple}
     \titleboxIV{titre}{Bidule truc muche}

     \titleboxIV{encore}{%
       \parbox{4cm}{truc\\machin}}
\end{ltxexemple}
Ce qui répond au cahier des charges. \framanouvellepage

\begin{note}
  D'autres améliorations ---~laissées en guise d'exercice~--- pourraient être
  apportées à cette commande. On pourra par exemple définir un
  argument optionnel permettant de régler l'abaissement du titre (on a
  mis ici \verb+-0.5ex+ en dur). Il est également possible de régler le
  rapport des traits entourant le titre. Enfin, il est tout à fait
  envisageable de régler l'espace autour du titre (ici il n'y en a
  pas).
\end{note}


\subsection{Utilisation avec package \ltxpack{minitoc}}

L'utilisation de la commande \ltxcom{titlebox} précédemment définie,
dans le package \ltxpack{minitoc} se fait simplement en revêtant le
chapeau de monsieur \textsc{Poirot}. En inspectant à la loupe  le
fichier de style, on trouve la définition d'une commande nommée
\verb+\minitoc@+. J'ai simplement recopié le code de cette macro et
inséré un appel à la merveilleuse commande \ltxcom{titlebox}.




%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../framabook"
%%% End: 
