La 317ème section

Bonjour à tous.

Je me bats pour décaler le titre des sections vers la droite.
En effet, passés le chapitre 10 et la section 10, le titre des sections entrent en collision avec la numérotation dans la table des matières et dans la minitoc.

Je me suis pris pour un sioux avec mon

\let\oldsection\section
\renewcommand{\section}[1]{\oldsection{\hspace{.75mm} #1}}

mais là, c'est les

\section*

qui morflent : Une étoile à la place du titre, c'est pauvre.

Quelqu'un aurait-il une solution à mon pébé, autre que de rajouter à la main deux cent vingt huit fois \hspace{.75mm} dans les deux cent vingt huit sections planquées dans quarante-douze fichiers différents ?

Merci pour vos contributions.

e.v.
Personne n'a raison contre un enfant qui pleure.


Réponses

  • Bonjour,

    Peut-être avec ceci :
    \let\oldsection\section
    \makeatletter
    \renewcommand{\section}{\@ifnextchar*{\ev@section@}{\ev@section}}
    \def\ev@section#1{\oldsection{\hspace{.75mm} #1}}
    \def\ev@section@#1#2{\oldsection*{\hspace{.75mm} #2}}
    \makeatother
    
  • En deux mots : Gé - nial !

    Merci, merci, merci beaucoup !

    amicalement,

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • Bonsoir,

    C'est malin, mais ça risque de faire un peu bizarre si un titre de section s'étale sur plus d'une ligne dans la table des matières. En lisant le LaTeX Companion (vers la page 50 dans la 2e édition en anglais), on peut apprendre comment est construite la table des matières. Ensuite, on peut ouvrir le fichier .cls correspondant à la classe utilisée (article.cls, report.cls, book.cls...) et recopier les définitions pour les modifier légèrement. Par exemple, si je prends la classe article.cls et que je décide d'ajouter 0.5em à la largeur réservée pour le numéro de section dans la table des matières (ce qui permet d'afficher correctement des numéros de sections à 3 chiffres), cela donne ceci à placer dans le préambule, par exemple avant le \begin{document} :
    \makeatletter
    \renewcommand*\l@section[2]{%
      \ifnum \c@tocdepth >\z@
        \addpenalty\@secpenalty
        \addvspace{1.0em \@plus\p@}%
        \setlength\@tempdima{2.0em}%
        \begingroup
          \parindent \z@ \rightskip \@pnumwidth
          \parfillskip -\@pnumwidth
          \leavevmode \bfseries
          \advance\leftskip\@tempdima
          \hskip -\leftskip
          #1\nobreak\hfil
          \nobreak\hb@xt@\@pnumwidth{\hss #2%
                                     \kern-\p@\kern\p@}\par
        \endgroup
      \fi}
    \renewcommand*\l@subsection{\@dottedtocline{2}{2.0em}{2.3em}}
    \renewcommand*\l@subsubsection{\@dottedtocline{3}{4.3em}{3.2em}}
    \renewcommand*\l@paragraph{\@dottedtocline{4}{7.5em}{4.1em}}
    \renewcommand*\l@subparagraph{\@dottedtocline{5}{10.5em}{5em}}
    \makeatother
    
    (tu peux voir les nombres que j'ai changés en comparant à article.cls).

    (Bon, en vrai, le LaTeX Companion explique \@dottedtocline et comment sont appelés les \l@machin, mais pas \l@section qui est un peu plus compliqué que les autres. Pas hyper compliqué si on a lu un peu le TeXbook et réalisé que \hb@xt@ est une coquetterie LaTeX représentant « \hbox to ». Le \kern-\p@\kern\p@ est assez sioux mais un peu expliqué dans source2e ; il évite la protrusion à droite du numéro de page, ce qui est cohérent avec les niveaux inférieurs implémentés avec \@dottedtocline, qui lui-même inhibe la protrusion à droite du numéro de page pour éviter de se retrouver, dans certaines lignes, avec un point en trop dans les pointillés qui précèdent le numéro de page.)

    Aucune idée si ça marche avec minitoc.
  • Je n'ai pas testé, mais a priori, une solution moins artisanale consisterait à utiliser \setlength{\cftsecnumwidth}{longueur} avec le package tocloft (voir doc. de \cftXnumwidth
    page 9 dans le manuel dudit package daté du 31 août 2017).

    Pour voir les valeurs possibles pour le X (part, chap, sec, subsec, subsubsec, etc.), chercher la phrase “In the following I will use X to stand for the following” dans la doc. (page 9 pour la version susmentionnée).
  • Merci Brian pour tes efforts.

    Toutefois, je m'en tiendrai à la solution Audeo - que je remercie encore - on ne change pas un bricolage qui marche.

    J'espère que tu te rends compte que tu parles Navajo à un Bulgare.

    Toutefois sache que je reste admiratif devant ton érudition.

    amicalement,

    e.v.

    [ Le jour où - suite à des malversations de ma part - le zinzin va s'écrouler, je reviendrai la queue basse vers tes solutions, si toutefois je n'ai pas oublié où ça se trouve. ]
    Personne n'a raison contre un enfant qui pleure.


  • Merci pour le compliment, sache en retour que je me suis poilé plus d'une fois en lisant tes messages à la Audiard. ;-)

    Non que la perspective de te voir revenir la queue entre les jambes ne soit alléchante, mais je vais quand même tenter quelques mots en bulgare :
    \documentclass[a4paper,12pt,french]{article}
    \usepackage{lmodern}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{babel}
    \usepackage{textcomp}
    \usepackage{tocloft}
    
    \setlength{\cftsecnumwidth}{3.0em}
    \setlength{\cftsubsecnumwidth}{3.5em}
    \setlength{\cftsubsubsecnumwidth}{3.5em}
    
    \begin{document}
    \tableofcontents
    
    Pouet.
    
    \section{Section très très très très très très très très très très très très très très très très très très très longue}
    
    Bla.
    
    \subsection{Sub très très très très très très très très très très très très
    très longue}
    
    Bla bla.
    
    \subsubsection{Subsub très très très très très très très très très très très très très très longue}
    
    Bla bla bla.
    \end{document}
    
    Cet exemple montre comment ajuster la largeur dévolue aux numéros de section, sous-section et sous-sous-section (même la 317) dans la table des matières avec tocloft.

    Si tu persistes avec la méthode aimablement proposée ci-dessus, je ne te promets pas les flammes de l'enfer, mais sache qu'en plus d'un non-alignement en cas de titre multiligne, tu t'exposes à une apparition de l'espace ajoutée dans les en-têtes (s'il y en a, par exemple avec les paramètres par défaut de la classe book) ainsi que dans le corps du texte, comme illustré dans la capture ci-jointe, obtenue avec un \hspace{10.75mm} un tantinet m'as-tu-vu, pour l'exemple.85024
Connectez-vous ou Inscrivez-vous pour répondre.