Accueil > Trucs et astuces > Redéfinir en partie le style des titres

Redéfinir en partie le style des titres

Un exemple d’intervention possible de l’utilisateur sur la maquette

mardi 16 juillet 2024, par Michel Bovani

Toutes les versions de cet article : [English] [français]

En ce qui concerne la structuration des documents générés, tango innove assez peu par rapport aux classes standard. Tango possède une option PubliClass qui peut prendre deux valeurs : article (par défaut) ou book. Le principe adopté dans tango est qu’un document conçu pour la version article toit pouvoir être compilé quasiment tel quel avec l’option PubliClass=book. Cela a une influence, toutefois très limitée, sur les commandes de sectionnement.

  • La commande \part est désactivée si l’on utilise l’option PubliClass=article, mais la vérité est que très peu de personnes utilisent cette commande dans la classe article.
  • Les commandes \chapter et \chapter* n’existent pas dans la version article, mais il existe en revanche des commandes \tgotitle et \tgotitle* qui permettent de saisir des titres de premier niveau composés en haut de page dans la version article.
  • Dans la version book ces commandes existent également, mais deviennent des alias des commandes \chapter et \chapter*.

En revanche le style des différents niveaux de titres proposé par tango diffère fortement de ce que l’on trouve dans les classes standard. Cet article se propose de montrer comment il est possible de modifier le comportement de tango non pour revenir aux classes standard (dans ce cas, il suffirait de ne pas utiliser tango), mais pour obtenir des variantes à partir du comportement prédéfini par la classe.

Un exemple de cahier des charges pour une redéfinition de certains niveaux de titres

Nous allons proposer une modification du style des titres de chapitre (commande \chapter) et des paragraphes de premier niveau (commande \section). Noter que dans cette page, tout ce qui est code peut être copié-collé. Nous nous intéressons donc essentiellement à la version book.

Voici ce que nous souhaitons obtenir :

  • Concernant les titres de chapitres, nous voulons qu’ils soient composés contre la marge droite, le titre d’abord et le numéro du chapitre ensuite (c’est donc la situation symétrique de ce qui existe par défaut). Nous souhaitons également abandonner la couleur : les titres et les numéros de chapitre seront composés en noir, séparés toutefois par un filet vertical de couleur.
  • Concernant les titres de paragraphes de premier niveau, c’est plus simple : nous souhaitons simplement renoncer aux capitales ; le titre sera composé en bas de casse, dans un corps toutefois un peu plus grand qu’il ne l’est actuellement.

On trouvera à la fin de cet article un exemple à télécharger qui illustre ce cahier des charges.

La situation existante

La classe tango fait appel par la définition des titres au package titlesec (Javier Bezos). Si l’on souhaite comprendre ce qui va suivre, il est donc indispensable de lire la documentation de ce package, ou du moins ce qui concerne la commande \titleformat, qui est l’une des deux seules commandes de titlesec utilisées par la classe tango. Bien évidemment les gens très pressés peuvent sauter directement à la fin de l’article, où une exemple prêt à compiler est fourni.

Si l’on veut voir l’usage que fait la classe tango de ces commandes, il convient d’ouvrir le fichier de classe tango.cls et de les y rechercher. Ce fichier peut être récupéré sur la page CTAN de tango ou directement dans le texmf de votre installation (sur texlive, voir texmf-dist/tex/lualatex/tango).

Modification de la commande définissant les titres de paragraphes de premier niveau

Nous avons donc trouvé ceci dans le fichier tango.cls

\titleformat{\section}{\color{ColorOne}\sffamily%
\addfontfeature{RawFeature=-onum}%
\fontseries{b}\selectfont\large}{\thesection}{1em}
{\uppercase}%

Nous renonçons aux lettres capitales : nous laisserons donc vide le dernier argument. Nous voulons un corps plus grand : nous remplaçons donc \large par \Large. La commande \addfontfeature{RawFeature=-onum} permet de forcer les chiffres capitales (voir la documentation du package fontspec) même si l’utilisateur a demandé des chiffres bas de casse : c’est logique avec un titre en capitales, mais cela ne s’impose plus si ce titre repasse en bas de casse. Enfin, le corps plus grand nous assure déjà un bon contraste de graisse en semi-gras, le gras est exagéré : on replace donc \fontseries{b} par \fontseries{sb}. Le reste est inchangé et nous obtenons ainsi :

\titleformat{\section}{\color{ColorOne}\sffamily%
\fontseries{sb}\selectfont\Large}{\thesection}{1em}{}%

Modification du style des titres de chapitres

Ce qui concerne les titres de chapitres est essentiellement défini par :

\titleformat{name=\chapter}[block]
{\filright\color{ColorOne}%
\fontspec{\TgoChapterTitleFont}%
\addfontfeature{RawFeature=-onum}\huge}
{}{0em}{\TgoChapterBox}
%%%
\titleformat{name=\chapter,numberless}[block]%
{\filright\color{ColorOne}
\fontspec{\TgoChapterTitleFont}%
\addfontfeature{RawFeature=-onum}\huge}
{}{0em}{}

Il existe deux appels à \titleformat car il est ici nécessaire de distinguer les cas de \chapter et de \chapter* (pour un format de type block, c’est assez fréquent). On voit également qu’il est fait appel à deux commandes définies par tango :

  1. \TgoChapterTitleFont : il s’agit de la commande permettant de définir la fonte utilisée pour les titres. La définition se trouve au tout début de la classe :
    \newcommand\TgoChapterTitleFont{RobotoCondensedBold}
    Dans la mesure où nous passons de la couleur au noir, nous limiterons ici aussi la montée en contraste en nous passant du gras :
    \renewcommand\TgoChapterTitleFont{RobotoCondensed}
    Mais dans la mesure où cette commande est interne à tango, il me semble de bonne politique de définir une nouvelle commande et de s’en servir plutôt que de redéfinir \TgoChapterTitleFont. Noter que, traditionnellement, la survie des commandes internes (avec des majuscules dans leur nom) n’est pas garantie au fil des versions successives :
    \newcommand\mychapterfont{RobotoCondensed}
  2. \TgoChapterBox On utilise ici le dernier argument de \titleformat pour améliorer la définition de la boîte contenant le titre — il s’agit en fait d’une suggestion (bienvenue) du LaTeX Companion, Third Edition. Cette commande n’est utilisée que pour la version non étoilée de \chapter.

En pratique, notre nouvelle version du style des titres de chapitres étant un peu plus compliquées que l’ancienne, nous utiliserons deux commandes telles que \TgoChapterBox :

  • \mychapterbox associée à \chapter et
  • \mychapterboxstarred associée à \chapter*.

Nous aurons donc

\titleformat{name=\chapter}[block]
{\filleft\addfontfeature{RawFeature=-onum}\huge}
{}{0em}{\mychapterbox}
\titleformat{name=\chapter,numberless}[block]{\filleft%
\addfontfeature{RawFeature=-onum}\huge}%
{}{0em}{\mychapterboxstarred}

Où l’on voit que l’appel à la fonte des titres a disparu : il a été nécessaire de la reléguer aux commandes \mychapterbox et \mychapterboxstarred (pour des raisons que je ne m’explique toujours pas).

Et pour finir voici la définition de ces deux dernières commandes :

\newcommand\mychapterboxstarred[1]{%
\sffamily\parbox{0.85\textwidth}
{\fontspec{\mychapterfont}\filleft#1}%
}%
\newcommand\mychapterbox[1]{%
\sffamily\parbox{0.65\textwidth}
{\fontspec{\mychapterfont}\filleft#1}%
\addfontfeature{RawFeature=-onum}
\fontseries{b}\selectfont\HUGE\hspace{15pt}%
{\color{ColorOne}\rule[-29pt]{3pt}{72pt}}\hspace{14pt}%
\raisebox{-11.5pt}{\thechapter}%
}%

Ce qui nous fournit l’exemple complet suivant :

% !TEX TS-program = LuaLaTeX
\documentclass[french,ColorTheme=Red,PubliClass=book,
FontSize=11pt]{tango}
%
\titleformat{\section}{\color{ColorOne}\sffamily
\fontseries{sb}\selectfont\Large}{\thesection}{1em}{}%
%
\newcommand\mychapterfont{RobotoCondensed}

\newcommand\mychapterboxstarred[1]{%
\sffamily\parbox{0.85\textwidth}
{\fontspec{\mychapterfont}\filleft#1}%
}%
\newcommand\mychapterbox[1]{%
\sffamily\parbox{0.65\textwidth}
{\fontspec{\mychapterfont}\filleft#1}%
\addfontfeature{RawFeature=-onum}
\fontseries{b}\selectfont\HUGE\hspace{15pt}%
{\color{ColorOne}\rule[-29pt]{3pt}{72pt}}\hspace{14pt}%
\raisebox{-11.5pt}{\thechapter}%
}%
%
\titleformat{name=\chapter}[block]
{\filleft\addfontfeature{RawFeature=-onum}\huge}
{}{0em}{\mychapterbox}
\titleformat{name=\chapter,numberless}[block]{\filleft%
\addfontfeature{RawFeature=-onum}\huge}%
{}{0em}{\mychapterboxstarred}
%%%%
\begin{document}
\chapter{Chapitre chapitre chapitre 
chapitre chapitre chapitre}
\section{Section section section}
\subsection{Subsection subsection subsection}
\end{document}%