Forum général.général [LaTeX] Indentation de titres et paragraphes

Posté par  (site web personnel) .
Étiquettes : aucune
0
20
juil.
2009

Bonjour,

J'aide une personne à faire son rapport de fin d'étude avec latex, l'idée étant de la laisser s'occuper du fond, tandis que je me charge de la forme.

Vous me direz, je n'ai pas grand chose à faire, latex fait la mise en page tout seul. Seulement pour le rapport, des instructions précises ont été données. Et bien que j'ai réussie à faire le plus gros, je bloque sur un problème d'indentation des titres.

L'exigence à respecter, c'est d'avoir des titres indentés dans le texte, comme il les sont dans la table des matières, et que les paragraphes soient également indenté de la sorte. En gros donc :

1.   Titre niveau 1  
£spaces£     £/spaces£1.1   Titre niveau 2  
£spaces£           £/spaces£1.1.1   Titre niveau 3  
£spaces£                   £/spaces£1.1.1.1   Titre niveau 4  
£spaces£                             £/spaces£Le paragraphe avec du texte très intéressant.  

Passons sur l'esthétique de la chose, c'est une exigence de l'établissement, ça ne se discute pas.

Le but est d'aligner le début de ligne de la structure de niveau n sur le texte du titre de niveau n-1 (ce qui ne sera peut être pas le cas sur le rendu de l'exemple ci-dessus dans votre navigateur).

Notez que par mesure de simplification, je n'ai mis qu'une seule ligne de paragraphe, et que je n'ai pas fait l'indentation normalement faite sur une première ligne. Aucune exigence n'étant faite à ce niveau là dans le cahier des charges, je pense laisser cette indentation. L'exemple ci-dessus n'est donc pas le reflet exact du résultat attendu.

Pour répondre à l'exigence d'indentation, j'ai pour l'instant fait ceci :

\setcounter{secnumdepth}{3} % On affiche une numérotation sur une profondeur de 3  
\setcounter{tocdepth}{3}        % La table des matières va a une profondeur de 3  
% Alignement des titres :  
\titlespacing{\chapter} {0pt} {*0} {*0} {}   
\titlespacing{\section} {4ex} {*0} {*0} {}   
\titlespacing{\subsection} {10ex} {*0} {*0} {}   
\titlespacing{\subsubsection} {18ex} {*0} {*0} {}   

Ce qui donne exactement le résultat escompté pour les titres. Il reste cependant le problème de l'alignement des paragraphes. En effet, je ne sais pas comment faire pour indiquer de manière global d'indenter le paragraphe en fonction du titre dans lequel il se trouve.

Par avance merci pour vos suggestions lumineuses.

  • # Avec \leftskip

    Posté par  . Évalué à 1.

    \leftskip te permet de mettre une marge plus grande à droite de ton texte. Tu peux donc surcharger les commandes \chapter, \section, etc., afin qu'elles règlent la valeur de leftskip. Concrètement, cela donne :
    \newdimen\saveskip % Un registre pour garder la valeur actuelle de \leftskip
    \newdimen\chapterskip
    \newdimen\sectskip
    \newdimen\subsectskip
    \newdimen\subsubsectskip
    
    \saveskip=\leftskip
    \chapterskip=0pt     % Espacement pour les chapitres
    \sectskip=4ex        % Pour les sections
    \subsectskip=10ex    % etc.
    \subsubsectskip=18ex
    
    % Reprise de ton code ici, mais en appelant les valeurs définies plus haut
    
    \setcounter{secnumdepth}{3} % On affiche une numérotation sur une profondeur de 3
    \setcounter{tocdepth}{3} % La table des matières va a une profondeur de 3
    % Alignement des titres :
    \titlespacing{\chapter} {\chapterskip} {*0} {*0} {}
    \titlespacing{\section} {\sectskip} {*0} {*0} {}
    \titlespacing{\subsection} {\subsectskip} {*0} {*0} {}
    \titlespacing{\subsubsection} {\subsubsectskip} {*0} {*0} {}
    
    % Et ici, on surcharge les commandes \chapter, \section, etc.,
    % afin de modifier \leftskip.
    
    \let\oldchapter\chapter % sauvegarde des vieilles commandes
    \let\oldsection\section
    \let\oldsubsection\subsection
    \let\oldsubsubsection\subsubsection
    
    % Et on les remplace par les nôtres :
    \def\chapter#1{\leftskip=\chapterskip\oldchapter{#1}}
    \def\section#1{\leftskip=\sectskip\oldsection{#1}}
    \def\subsection#1{\leftskip=\subsectskip\oldsubsection{#1}}
    \def\subsubsection#1{\leftskip=\subsubsectskip\oldsubsubsection{#1}}
    
    Je ne suis pas sûr d'avoir compris exactement quel résultat final tu voulais obtenir (par exemple, quand tu parles d'alignement, est-ce en comptant l'indentation du paragraphe ou pas ?), donc je te laisse jouer avec les petits réglages sur les longueurs.
    • [^] # Re: Avec \leftskip

      Posté par  (site web personnel) . Évalué à 2.

      J'ai essayé ton code mais ça ne m'a rien donné, les titres ne sont même plus identés.

      Pour les paragraphes il me faudrait quelque chose comme ça :

      1.   Titre niveau 1
                 Première ligne qui est un peu plus indentée, comme le veut la tradition suivie
            d'une seconde ligne, qui elle est bien axé avec le texte du titre. Tout
            comme le reste du paragraphe d'ailleurs !

      Et pareil pour les titres de niveau inférieur, le paragraphe doit être d'autant indenté.
  • # titlesec ?

    Posté par  . Évalué à 1.

    le package titlesec permet de faire beaucoup de choses (il y a des exemples dans la doc), pas sur que ca permette ce que tu veux mais j'ai l'impression que oui:
    http://www.ctan.org/tex-archive/macros/latex/contrib/titlese(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.