Dans l'exemple qui suit, la condition \if\@mainmatter est inactive et je ne comprends pas pourquoi. Faut-il nécessairement activer \pagestyle{fancy} la main ?

Ouvrir dans l'éditeur
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{blindtext}

\makeatletter 
    \if@mainmatter
        \pagestyle{fancy}
        \renewcommand{\footrulewidth}{2pt}
    \fi
\makeatother

\begin{document}
\pagestyle{empty}
\frontmatter
\blinddocument 
\mainmatter
\blinddocument 
\end{document}

Edit Bon, pour résumer, ce que je cherchais est :

Ouvrir dans l'éditeur
\documentclass{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\makeatletter 
\renewcommand{\headrulewidth}{\if@mainmatter 2pt \else 0pt \fi}
\makeatother

... le reste étant identique. Je pose donc une question que je crois être claire : quelle est la fondamentale différence entre le petit morceau de code ci-dessus et celui-ci :

Ouvrir dans l'éditeur
\documentclass{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\makeatletter 
\if@mainmatter 
    \renewcommand{\headrulewidth}{2pt}
\else
    \renewcommand{\headrulewidth}{0pt}
\fi
\makeatother

@touhami y a répondu en partie dans un autre fil.

Posée 01 Mai '16, 21:50

pluton's gravatar image

pluton
1.2k22836
Taux d'acceptation : 34%

Modifiée 01 Nov '16, 01:37

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Activer \pagestyle{fancy} n'est nécessaire qu'une seule fois, lorsque \mainmatter est exécutée. Toute autre solution « automatique » demande plus de caractères à taper et plus d'efforts de conception qu'un simple \pagestyle{fancy} dans le code source !

La question, et sa réponse, ne sont donc pas vouées à rendre les choses plus compliquées ?

(01 Mai '16, 22:31) unbonpetit ♦♦ unbonpetit's gravatar image

@unbonpetit en fait, je souhaite tester si un \chapter est appelé au sein de \frontmatter ou \mainmatter et redéfinir le style plain en fonction. Pour résumer, le dilemme semble être le suivant. J'ai le choix entre (an langage rapide) \definition\plain \if@mainmatter alors 1 sinon 2 ou bien \if@mainmatter \definition\plain 1 sinon \definition\plain 2. Une version semble fonctionner mais pas l'autre.

(02 Mai '16, 00:53) pluton pluton's gravatar image

Vous auriez dû dire dès le début ce que vouliez vraiment. Cela vaut le coup que vous éditiez votre question. Si c'est \chapter qui doit faire le test, il faut redéfinir \chapter pour qu'il décide, selon le booléen \if@mainmatter quel style appliquer ou quel style définir ; j'ai pas trop compris ce que vous voulez faire sur les styles.

(02 Mai '16, 00:58) unbonpetit ♦♦ unbonpetit's gravatar image

@pluton Comme signalé par unbonpetit, ça sent le syndrome XYZ à plein nez ! ;)

(02 Mai '16, 01:25) denis ♦♦ denis's gravatar image

@unbonpetit @denis En fait, l'exemple est suffisant pour ce que je voulais éclaircir. En gros, c'est le test \if@mainmatter que je ne comprenais pas et qui est mal placé dans mon cas. Comme dit @unbonpetit c'est peut-être ailleurs, et autrement, que le test doit être effectué, mais il faut que je regarde de mon côté avant.

(02 Mai '16, 01:41) pluton pluton's gravatar image

Là où \if@mainmatter est développé, il est faux donc rien ne se passe. Si le but est de changer le style de la page dans la partie principale, sans écrire le \pagestyle soi-même au bon endroit, il faudrait redéfinir \mainmatter.

Peut-être quelque chose comme ça (à tester) :

Ouvrir dans l'éditeur
\let\OldMainMatter=\mainmatter
\def\mainmatter{%
\OldMainMatter
\pagestyle{fancy}
\renewcommand{\footrulewidth}{2pt}
\renewcommand{\headrulewidth}{5pt}}

Cependant, dès que le style de page sera redéfini (début de chapitre par exemple), les modifs seront perdues.

Lien permanent
Cette réponse est marquée comme « Wiki ».

Publiée 01 Mai '16, 22:18

Le%20TeXnicien%20de%20surface's gravatar image

Le TeXnicien de surface
2.0k814
Taux d'acceptation : 28%

Modifiée 01 Nov '16, 01:29

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

1

Bien que c'est la bonne solution il faut noter que au contraire \mainmatter est vraie par défaut mais c'est \pagestyle{empty} qui annule le travail fait et vide l'entête.

(01 Mai '16, 22:24) touhami touhami's gravatar image

Si je peux me permettre de suggérer 3 \expandafter pour se passer de la macro auxiliaire \OldMainMatter : \expandafter\def\expandafter\mainmatter\expandafter{\mainmatter\pagestyle{fancy}\renewcommand{\footrulewidth}{2pt}\renewcommand{\headrulewidth}{5pt}}. On peut également avoir recours à \g@addto@macro : \makeatletter\g@addto@macro\mainmatter{\pagestyle{fancy}\renewcommand{\footrulewidth}{2pt}\renewcommand{\headrulewidth}{5pt}}\makeatother

(01 Mai '16, 22:44) unbonpetit ♦♦ unbonpetit's gravatar image

Voici un exemple :

Ouvrir dans l'éditeur
\fancypagestyle{myfancy}{%
\fancyhf{}
\if@mainmatter
\fancyfoot[C]{\thepage}
\renewcommand{\footrulewidth}{2pt}
\renewcommand{\headrulewidth}{5pt}
\else
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\headrulewidth}{0pt}% par défaut 0.4pt
\fi}

À chaque fois que LaTeX rencontre \pagestyle{myfancy} il fait le test \if@mainmatter.

Exemple complet :

Ouvrir dans l'éditeur
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{blindtext}

\makeatletter
\fancypagestyle{myfancy}{%
\fancyhf{}
\if@mainmatter
\fancyfoot[C]{\thepage}
\renewcommand{\footrulewidth}{2pt}
\renewcommand{\headrulewidth}{5pt}
\else
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\headrulewidth}{0pt}% par défaut 0.4pt
\fi}  
\makeatother

\begin{document}
\frontmatter
\pagestyle{myfancy}
\blinddocument 
\mainmatter
\pagestyle{myfancy}
\blinddocument 
\end{document}
Lien permanent

Publiée 02 Mai '16, 01:57

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 01 Nov '16, 01:34

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.