Un petit peu d’esthétique

Bonsoir,
Alors, c'est une question qu'un ami m'a posé, et pour laquelle je sais pas la réponse, mon ami veut faire un sorte d'un rectangle au début du chapitre dans lequel il écrira le nom du chapitre et tous, ci joint un exemple.

ce qui est encadré en bleu85428

Réponses

  • Bonjour,

    Ton ami peut faire quelque chose comme cela :
    \documentclass[a4paper,11pt,french]{book}
    \usepackage{lmodern}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{babel}
    \usepackage{textcomp}
    \usepackage{etoolbox}
    \usepackage[explicit]{titlesec}
    \usepackage{calc}
    
    \usepackage{tikz}
    \usetikzlibrary{babel}
    \usetikzlibrary{backgrounds}
    \usetikzlibrary{calc}
    
    % Indique si on travaille sur un \chapter ou un \chapter*
    \newtoggle{chapDecoIsNumberedChap}
    
    % Commande « de haut niveau » pour la déco du numéro de chapitre : deux
    % déclinaisons (version étoilée, version non étoilée).
    \makeatletter
    \newcommand*{\chapDecoFrame}{%
      \@ifstar{%
        \togglefalse{chapDecoIsNumberedChap}%
        \@chapDecoFrame\@nil         % pas de numéro de chapitre en argument
      }{%
        \toggletrue{chapDecoIsNumberedChap}%
        \@chapDecoFrame
      }%
    }
    
    % #1 : truc à encadrer (numéro de chapitre) si chapDecoIsNumberedChap est
    % vrai ; sinon, #1 n'est pas utilisé.
    \newcommand*{\@chapDecoFrame}[1]{%
      % Décommenter les deux lignes suivantes pour visualiser la hauteur de la
      % boîte produite :
      %   \hbox to \linewidth{\hss\hbox to 1.1\linewidth{\hrulefill}\hss}
      %   \nointerlineskip
      %
      % On s'assure que les dimensions ne dépendent pas du numéro de chapitre
      % et ne vont pas varier au cas où TikZ changerait les règles par rapport à
      % la largeur de ligne (\pgflinewidth).
      \hbox to \linewidth{%
        \hss
        \chapterNumberFont \strut\smash{\@chapDecoTikzPicture{#1}}%
        \hss}%
    }
    
    % Largeur de la ligne utilisée pour le cadre autour de « Chapitre XX » :
    % \chapDecoRuleWidth  <--- définie plus loin, avec les autres paramètres
    
    % #1 : truc à encadrer (numéro de chapitre) si chapDecoIsNumberedChap est
    % vrai ; sinon, #1 n'est pas utilisé.
    \newcommand*{\@chapDecoTikzPicture}[1]{%
      \begin{tikzpicture}[baseline=(chapter number.base)]
        \iftoggle{chapDecoIsNumberedChap}{% cas de \chapter
          % Le mot « Chapitre »
          \node[inner sep=0, outer sep=0,
                font=\chapterLabelFont, anchor=base west, fill=white]
            (label) at (0,0)
            {\chaptername \kern 1em \hphantom{\chapterNumberFont \thechapter}};
    
          % Le numéro de chapitre
          %
          % Sans le \strut ou \vrule, le tracé du chiffre 1 dépasse la zone
          % remplie par le 'fill' (bizarre). Celle-ci s'arrête bien à l'ordonnée
          % de l'ancre 'north', en revanche.
          \node[inner sep=0, outer sep=0, font=\chapterNumberFont, anchor=base east,
                fill=white]
            (chapter number) at (label.base east)
            {\chapterNumberFont
             % Décommentez ça si vous voulez que le haut du cadre commence plus
             % haut par rapport au numéro du chapitre.
             %   \vrule width 0pt height \ht\strutbox \relax
             %
             % On peut aussi remplacer ce \vrule width 0pt height \ht\strutbox par
             % \strut, mais le remplissage va alors plus loin en profondeur. Comme
             % \@chapDecoFrame fait en sorte que ni la hauteur ni la profondeur de
             % la boîte créée ne dépendent du numéro de chapitre, on est de toute
             % façon tranquille.
             \thechapter};
        }{% cas de \chapter*. On utilise la hauteur du chiffre 1.
          \node[inner sep=0, outer sep=0, font=\chapterNumberFont, anchor=base west]
            (chapter number) at (0,0)
            {\chapterNumberFont
             % Voir commentaires ci-dessus
             %   \vrule width 0pt height \ht\strutbox \relax
             \vphantom{1}};
        }
    
        % Le cadre (cf.
        % <https://tex.stackexchange.com/questions/58292/a-line-of-length-textwidth-in-tikz>...)
        \begin{scope}[on background layer]
          \draw[line width=\chapDecoRuleWidth]
            let \p1=($(chapter number.north)$) in
            (0.5\pgflinewidth, 0.5\pgflinewidth) rectangle
            (\linewidth - 0.5\pgflinewidth, \y1 - 0.5\pgflinewidth);
        \end{scope}
      \end{tikzpicture}%
    }
    \makeatother
    
    % ****************************************************************************
    % *                       Configuration de 'titlesec'                        *
    % ****************************************************************************
    
    \newcommand*{\chapterTitleFont}{%
      \fontsize{24.88}{29.856}\usefont{T1}{lmss}{bx}{n}%
    }
    \newcommand*{\chapterLabelFont}{%
      \fontsize{14}{16.8}\usefont{T1}{lmss}{bx}{n}%
    }
    \newcommand*{\chapterNumberFont}{%
      \fontsize{42}{50.4}\usefont{T1}{lmss}{bx}{n}%
    }
    % Le cadre au-dessus du titre de chapitre comporte un \strut de taille définie
    % par \chapterNumberFont, donc il y a déjà un peu d'espace.
    \newcommand*{\spaceBeforeChapterFrame}{0pt}
    \newcommand*{\spaceAfterChapterFrame}{0pt}
    \newcommand*{\spaceAfterChapterTitle}{60pt plus 1pt minus 1pt}
    % Largeur de la ligne utilisée pour le cadre autour de « Chapitre XX »
    \newcommand*{\chapDecoRuleWidth}{1pt}
    
    % Pour \chapter
    \titleformat{\chapter}[display]
      {}{\chapDecoFrame{\thechapter}}{\spaceAfterChapterFrame}{\chapterTitleFont #1}
    
    % Pour \chapter*
    \titleformat{name=\chapter, numberless}[display]
      {}{\chapDecoFrame*}{\spaceAfterChapterFrame}{\chapterTitleFont #1}
    
    \titlespacing{\chapter}{0pt}{\spaceBeforeChapterFrame}{\spaceAfterChapterTitle}
    
    
    \begin{document}
      \chapter{Titre du chapitre un}
    
      Pouet pouet. Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
      bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
      bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.
    
      \setcounter{chapter}{25}%
      \chapter{Titre du chapitre vingt-six}
    
      Bla bla.
    
      \chapter*{Titre du chapitre sans numéro}
    
      Terminé.
    \end{document}
    

    Edit : essentiellement, ajout de
    \titlespacing{\chapter}{0pt}{\spaceBeforeChapterFrame}{\spaceAfterChapterTitle}
    
    85458
    85460
    85462
  • @Brian Merci infiniment!!!
Connectez-vous ou Inscrivez-vous pour répondre.