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


6.8 \@startsection, composer les rubriques.

Synopsis :

\@startsection{nom}{niveau}{retrait}{avant}{après}{style}

Utilisé pour aider à redéfinir le comportement des commandes de rubricage telles que \section ou \subsection.

Notez que le paquetage titlesec rend la manipulation du rubricage plus facile. De plus, bien que la plupart des exigences concernant les commandes de rubricage peuvent être remplies avec \@startsection, ce n’est pas le cas de certaines d’entre elles. Par exemple, dans les classes LaTeX standardes book et report, les commandes \chapter et \report ne sont pas construites de cette manière. Pour fabriquer une telle commande, il est possible d’utiliser la commande \secdef.

Techniquement, la commande \@startsection a la forme suivante :

\@startsection{nom}
  {niveau}
  {retrait}
  {avant}
  {après}
  {style}*[titretdm]{titre}

de sorte que faire :

\renewcommand{\section}{\@startsection{nom}
  {niveau}
  {retrait}
  {avant}
  {après}
  {style}}

redéfinit \section en gardant sa forme standarde d’appel \section*[titretdm]{titre} (dans laquelle on rappelle que l’étoile * est optionnelle). Voir Sectioning. Ceci implique que quand vous écrivez une commande comme \renewcommand{\section}{...}, le \@startsection{...} doit venir en dernier dans la définition. Voir les exemples ci-dessous.

nom

Nom du compteur utilisé pour numéroter les titres de rubrique. Ce compteur doit être défini séparément. Ceux qui sont utilisés le plus communément sont section, subsection, ou paragraph. Bien que dans ces cas-là le nom du compteur soit identique à celui de la commande elle-même, utiliser le même nom n’est pas obligatoire.

Alors \thename affiche le numéro de titre, et \namemark sert aux en-têtes de page. Voir le troisième exemple plus bas.

niveau

Entier donnant la profondeur de la commande de rubricage. Voir Sectioning, pour une liste des numéros standards de niveaux.

Si niveau est inférieur ou égal à la valeur du compteur secnumdepth, alors les titres pour cette commande de rubricage sont numérotés (voir Sectioning/secnumdepth). Par exemple : dans un article, si secnumdepth vaut 1, alors une commande \section{Introduction} produira en sortie une chaîne du type « 1 Introduction », alors que \subsection{Historique} produira en sortie une chaîne sans numéro de préfixe : « Historique ».

Si niveau est inférieur ou égal à la valeur du compteur tocdepth, alors la table des matières aura un article pour cette rubrique. Par exemple, dans un article, si tocdepth vaut 1, la table des matières listera les sections, mais pas les subsections.

retrait

Une longueur donnant le renfoncement de toutes les lignes du titre par rapport à la marge de gauche. Pour un renfoncement nul, utilisez 0pt. Une valeur négative telle que -1em cause un débord du titre dans la marge de gauche.

avant

Longueur dont la valeur absolue est la longueur de l’espace vertical inséré avant le titre de la rubrique. Cet espacement est ignoré si la rubrique commence au début d’une page. Si ce nombre est négatif, alors le premier paragraphe suivant le titre n’est pas renfoncé, s’il est positif ou nul il l’est. (Notez que l’opposé de 1pt plus 2pt minus 3pt est -1pt plus -2pt minus -3pt).

Par exemple si avant vaut -3.5ex plus -1ex minus -0.2ex alors pour commencer la nouvelle rubrique, LaTeX ajoute environ 3,5 fois la hauteur d’une lettre x en espace vertical, et le premier paragraphe de la rubrique n’est pas renfoncé. Utiliser une longueur élastique, c.-à-d. comprenant plus et minus, est une bonne pratique ici car cela donne à LaTeX plus de latitude lors de la fabrication de la page (voir Lengths).

La quantité totale d’espace vertical entre la ligne de base de la ligne précédant cette rubrique et la ligne de base du titre de la rubrique est la somme du \parskip dans la police du corps de texte, du \baselineskip de la police du titre, et de la valeur absolue de l’argument avant. Cet espace est typiquement élastique de sorte à pouvoir se dilater ou se contracter. (Si la rubrique commence en début d’une page de sorte que cet espace soit ignoré, alors la ligne de base du titre correspond à la ligne de base qu’aurait la première ligne de texte sur cette page si celle-ci commençait par du texte).

après

Longueur. Lorsque après est positif ou nul, il s’agit de l’espace vertical à insérer après le titre de la rubrique. Lorsque elle est négative, alors le titre fait corps avec le paragraphe le suivant immédiatement. Dans ce cas la valeur absolue de la longueur donne l’espace horizontal entre la fin du titre et le début du paragraphe suivant. (Notez que l’opposé de 1pt plus 2pt minus 3pt est -1pt plus -2pt minus -3pt).

Comme c’est le cas avec avant, utiliser une longueur élastique avec des composantes plus et minus est une bonne pratique ici puisque elle donne à LaTeX plus de latitude pour assembler la page.

Si après est positif ou nul, la quantité totale d’espace vertical entre la ligne de base du titre de la rubrique et la ligne de base de la première ligne du paragraphe suivant est la somme du \parskip de la police du titre, de \baselineskip de la police du corps de texte, et de la valeur de après. Cet espace est typiquement élastique de sorte qu’il puisse se dilater ou se contracter. (Notez que, du fait que le signe d’après contrôle que le titre soit indépendant du texte qui le suit ou faisant corps avec lui, vous ne pouvez pas utiliser un après négatif pour annuler une partie du \parskip).

style

Contrôle le style du titre : voir les exemples plus bas. Les commandes typiquement utilisées ici sont \centering, \raggedright, \normalfont, \hrule, ou \newpage. La dernière commande au sein de style peut être une commande prenant un argument, telle que \MakeUppercase ou \fbox. Le titre de la rubrique est passé en argument à cette commande. Par exemple régler style à \bfseries\MakeUppercase a pour effet de produire des titres gras et en capitales.

Voici les réglages par défaut de LaTeX pour les trois premiers niveaux de rubricage qui sont définis par \@startsection, pour les classes article, book, et report.

Quelques exemples suivent. Ils vont soit au sein d’un fichier de paquetage ou de classe, soit dans le préambule d’un document LaTeX. Si vous les mettez dans le préambule, elle doivent être entre une commande \makeatletter et une commande \makeatother. (Le message d’erreur You can't use `\spacefactor' in vertical mode. est le plus probable lorsque on oublie de faire cela). Voir \makeatletter & \makeatother.

L’exemple ci-dessous centre les titres de section et les met en gros caractères gras. Il le fait avec \renewcommand parce que les classes standardes de LaTeX ont déjà une commande \section de définie. Pour la même raison il ne définit ni un compteur section, ni les commandes \thesection et \l@section.

\renewcommand\section{%
  \@startsection{section}% nom.
  {1}% niveau.
  {0pt}% retrait.
  {-3.5ex plus -1ex minus -.2ex}% avant.
  {2.3ex plus.2ex}% après.
  {\centering\normalfont\Large\bfseries}}% style.

L’exemple ci-dessous met les titres de subsection en petites capitales, et leur fait faire corps avec le paragraphe suivant.

\renewcommand\subsection{%
  \@startsection{subsection}%  nom.
    {2}% niveau.
    {0em}% retrait.
    {-1ex plus 0.1ex minus -0.05ex}% avant.
    {-1em plus 0.2em}% après.
    {\scshape}% style.
  }

Les exemples précédents redéfinissaient les commandes de titre de rubriques existantes. L’exemple suivant définit une nouvelle commande, illustrant la nécessité d’un compteur et de macros pour son affichage.

\setcounter{secnumdepth}{6}% affiche les compteurs justqu'à ce niveau
\newcounter{subsubparagraph}[subparagraph]% compteur pour la
                                          % numérotation
\renewcommand{\thesubsubparagraph}%
   {\thesubparagraph.\@arabic\c@subsubparagraph}% comment afficher
                                                % la numérotation
\newcommand{\subsubparagraph}{\@startsection
                         {subsubparagraph}%
                         {6}%
                         {0em}%
                         {\baselineskip}%
                         {0.5\baselineskip}%
                         {\normalfont\normalsize}}
\newcommand*\l@subsubparagraph%
  {\@dottedtocline{6}{10em}{5em}}% pour la table des matières
\newcommand{\subsubparagraphmark}[1]{}% pour les en-têtes de page

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