Page 1 sur 1

[Résolu] Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 15:31
par evariste_G
Bonjour.

Quand on définit le titre d'un chapitre par :
Code: Tout sélectionner
\chapter{Mon titre\\et la suite}


l'inconvénient est que dans les en-têtes, le titre du chapitre tient sur deux lignes.
Existe-t-il un moyen de supprimer ce retour pour l'en-tête ?

Re: Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 16:23
par touhami
Bon jour. Voici deux solutions
Code: Tout sélectionner
\chapter[Mon titre et la suite]{Mon titre\\et la suite}

Pour supprimer le retour de la table des matières aussi.
Code: Tout sélectionner
\chapter{Mon titre\\et la suite}
\chaptermark{Mon titre et la suite}

pour supprimer le retour de l'en-tête.

Re: Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 16:44
par evariste_G
Merci pour ces solutions.
J'avais oublié cette possibilité.

Mais juste pour savoir... N'y a-t-il pas un moyen d'automatiser cela dans une classe par exemple ? (j'ai redéfini la commande \chapter avec titelsec et pour éviter d'écrire des options à la commande \chapter, voir d'ajouter la commande pour le sommaire, j'aurais aimé n'avoir qu'à écrire \chapter{blabla\\et blabla}).

Dans le pire des cas, j'utiliserai cela, mais bon...

Re: Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 19:04
par touhami
Je ne suis pas sûr, ça peut dépendre des extensions utilisées.
Pour un usage normale (*titlesec* ne change pas par défaut les chapitres, donc ça peut fonctionner) il suffit de redéfinir \\
Code: Tout sélectionner
\documentclass{book}
\usepackage{mwe}
\makeatletter 
\def\chaptermark#1{%
{\let\\\space% <----> cette ligne a été ajouté
      \markboth {\MakeUppercase{%
        \ifnum \c@secnumdepth >\m@ne
          \if@mainmatter
            \@chapapp\ \thechapter. \ %
          \fi
        \fi
        #1}}{}}}% <----> } a été ajouté
\makeatother
\begin{document}
\chapter{Mon titre\\et la suite}
\lipsum[1-15]
\end{document}

Remarque La définition de la commande \chaptermark dépend de la définition de style des entêtes, donc c'est à ce niveau où les changements doivent être faits. Voir cet (contre) exemple
Code: Tout sélectionner
\documentclass{book}
\usepackage{mwe}
\makeatletter 
\def\chaptermark#1{%
{\let\\\space% <----> cette ligne a été ajouté
      \markboth {\MakeUppercase{%
        \ifnum \c@secnumdepth >\m@ne
          \if@mainmatter
            \@chapapp\ \thechapter. \ %
          \fi
        \fi
        #1}}{}}}% <----> } a été ajouté
\makeatother

\begin{document}
\chapter{Mon titre\\et la suite}
\lipsum[1-15]
\pagestyle{empty}
\lipsum[1-6]
\pagestyle{headings}
\chapter{Mon titre\\et la suite}
\lipsum[1-6]
\end{document}

Re: Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 19:21
par touhami
Une autre solution est de redéfinir la commande interne \@chapter par exemple, en utilisant l'extension etoolbox, il suffit
Code: Tout sélectionner
\patchcmd\@chapter{\chaptermark{#1}}{{\let\\\space\chaptermark{#1}}}{}{}
ECM
Code: Tout sélectionner
\documentclass{book}
\usepackage{mwe}


\usepackage{etoolbox}
\makeatletter 
\patchcmd\@chapter{\chaptermark{#1}}{{\let\\\space\chaptermark{#1}}}{}{}
\makeatother


\usepackage{titlesec}
% exemple extrait de titlesec.pdf
\renewcommand{\thechapter}{\Roman{chapter}}
\titleformat{\chapter}[display]
{\bfseries\Large}
{\filleft\MakeUppercase{\chaptertitlename} \Huge\thechapter}
{4ex}
{\titlerule
\vspace{2ex}%
\filright}
[\vspace{2ex}%
\titlerule]

\begin{document}
\chapter{Mon titre\\et la suite}
\lipsum[1-15]
\end{document}

Re: Titre de chapitre avec retour

MessagePosté: Mardi 27 Juin 2017, 23:39
par balf
Et si l'on lisait la documentation de titlesec au lieu de chercher à réinventer la roue? Depuis la version 2.6, il suffit d'écrire:
Code: Tout sélectionner
\usepackage[newlinetospace]{titlesec}
pour automatiquement convertir les passages à la ligne des titres en espaces dans les entête et la table des matières.

B. A.

Re: Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 02:09
par touhami
Bon jour @balf.
Comme j'ai dit auparavant titlesec ne change pas par défaut les chapitres. Donc, si je ne me suis pas trompé, cette option fonctionne bien pour les (sous)section mais pas pour les chapitres.

Re: Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 08:44
par balf
Bonjout, @touhami

Mais chez moi, ça marche, même sans redéfinir le formatage du chapitre! Rien que le chargement de titlesec avec l'option :!: :?:

B. A.

Re: Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 11:15
par touhami
Bizarre! J'ai titlesec 2016/03/21 v2.10.2.
Qu'est-ce qui se passe au niveau de la table des matières?

Re: Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 13:06
par balf
Vérification faite, ça ne marche pas non plus chez moi pour la table des matières. :cry:
Il faut donc en passer par l'argument optionnel.

B. A.

Re: Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 17:51
par evariste_G
Bonjour à vous.

L'une des solutions de touhami m'a donné l'idée du code suivant :
Code: Tout sélectionner
\renewcommand{\chaptermark}[1]{\let\\\space\markboth{\chaptername~\thechapter~--~#1}{}}

C'était juste l'idée de remplacer les "\\" par un espace qui me manquait... Comme quoi !

Merci à vous !

Re: [Résolu] Titre de chapitre avec retour

MessagePosté: Mercredi 28 Juin 2017, 18:23
par touhami
@evariste_G
Vous avez besoin de coder
Code: Tout sélectionner
\renewcommand{\chaptermark}[1]{{\let\\\space\markboth{\chaptername~\thechapter~--~#1}{}}}

Pour que le changement soit local (limité à cette commande).

@balf
Je pense que ce que vous voyez dans l'entête n'ai pas l’effet de l'option newlinetospace de titlesec c'est plutôt du au fait que l'entête est formater dans une \hbox.
Comparer les entêtes des page paires et impaires
Code: Tout sélectionner
\documentclass{book}
\usepackage{mwe}

\usepackage[newlinetospace]{titlesec}

\begin{document}
\chapter{Mon titre\\et la suite}
\section{Mon titre\\et la suite}
\lipsum[1-15]
\end{document}