Bonjour tout le monde...
Je suis en train de finir mon projet de fin d'études que j'ai rédigé en utilisant latex... J'ai un petit problème qui est que j'aime pas le fait que les noms des chapitres s'écrivent si bas sur la page... je veux que ca s'écrive à 3-4 cm maximum du haut de la page mais la c'est à 7-8 cm...
Est-ce que quelqu'un pourra m'aider ? (je dois rendre mon projet demain :( )
Merci d'avance
Bonne soirée a tous et a toutes
(j'ai écrit en "book")
# IRC
Posté par doublehp (site web personnel) . Évalué à 0.
#latex
dans le topic, y a des tas d URLs.
# Hum, très facile
Posté par Sylvain Sauvage . Évalué à 5.
\def\@makechapterhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
et donc, l'espace au début est dû au \vspace*{50\p@} (un espace vertical de 50 pt).
Il «suffit» donc de modifier cette définition (ben oui, l'espace est codé en dur, ils auraient pu utiliser une longueur (variable modifiable par \setlength)). Pour la redéfinition, il faut ajouter cela avant le \begin{document} :
\makeatletter
\def\@makechapterhead#1{%
\vspace*{10\p@}% <<-------------------- modifier la taille (marche aussi en cm...)
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
\makeatother
Les \makeatletter et \makeatother permettent d'utiliser des @ dans les noms de macro (ce qui est interdit dans un document mais pas dans un .sty ou un .cls).
Voilà, ça a pas l'air très propre mais c'est parce que ce n'est pas prévu : book.cls est un *exemple*, on _devrait_ refaire son style soi-même, mais faut pas pousser, on va pas s'embêter pour si peu.
Bien sûr, si on fait plein de modifications, le plus simple est de copier book.cls dans monbook.cls et d'y faire les modifs directement. Ça permet d'apprendre à faire ses propres classes.
[^] # Re: Hum, très facile
Posté par Sylvain Sauvage . Évalué à 4.
Il faudra donc aussi modifier \@majeshapterhead :
\def\@makeschapterhead#1{%
\vspace*{50\p@}% <<----------------------- là
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
(aussi emballé par \makeat{letter,other})
[^] # Re: Hum, très facile
Posté par THE_ALF_ . Évalué à 2.
[^] # Re: Hum, très facile
Posté par Sylvain Sauvage . Évalué à 3.
Mais, étant donné que c'est du pur TeX, réutiliser \def me semble plus cohérent : je réserve \renewcommand aux macros définies par \newcommand.
Un problème pourrait se poser avec d'autres macros, par exemple celles dont la signature n'est pas simplement \toto[arg1]{arg2}{...}, comme \put(arg1,arg2){arg3} (les parenthèses ne sont pas gérables avec newcommand).
Je préfère n'utiliser que les commandes LaTeX (donc, entre autres, ne pas utiliser \def) dans les .cls et les .sty (destinés uniquement à LaTeX) ; quand cela est possible évidemment : certaines commandes équivalentes LaTeX ne sont pas toujours aussi simples, souples ou robustes (p.ex. \if vs \ifthenelse).
Mais la cohérence n'est pas le fort de LaTeX et des paquets associés : preuve en est l'utilisation très fréquente de commandes TeX (comme \def) dans les classes et dans certains paquets qui sont exclusivement LaTeX (car incompatibles avec plain-TeX ou simplement à cause d'un joli \NeedsTeXFormat{LaTeX2e} au début). Ces commandes étant par ailleurs désavouées par LaTeX, puisque :
1) des macros remplissant ces fonctions y sont définies (\newcommand) ;
2) les documentations officielles les déconseillent.
On pourrait aussi parler de l'habitude d'écrire \z@ pour "0pt", \p@ pour "pt" ou \@ne pour "1pt" et autres écritures très faciles à lire parce que :
1. Knuth le fait ;
2. Knuth dit que ça va plus vite pour TeX (il décompose mieux les terminaux de sa grammaire de cette façon) ;
alors que
1. c'est souvent illisible ;
2. on est plus en 1986, ce n'est sûrement pas la différence entre le découpage de "\@ne " et celui de "1pt " qui fait que (La)TeX est lent.
[^] # Re: Hum, très facile
Posté par THE_ALF_ . Évalué à 2.
En fait, si j'ai posé cette question, c'est que je pensais qu'il vallait mieux utiliser un renewcommand dans le cas où une commande existait déjà, juste pour éviter toute confusion. Par contre, si je comprends bien, le renewcommand aurait été bienvenu si le book.cls avait défini ses makechapterhead à grand coup de newcommand. J'ai bon ?
[^] # Re: Hum, très facile
Posté par Sylvain Sauvage . Évalué à 2.
Parce que \newcommand vérifie si la macro existe et ne permet pas de l'écraser. D'où la nécessité de \renewcommand.
De son côté, \def ne vérifie rien et écrase allégrement.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.