Forum Programmation.autre [LaTeX] Redéfinition de la commande \section

Posté par  .
Étiquettes : aucune
0
6
fév.
2008
Bonjour,
j'ai voulu redéfinir la commande \section en m'inspirant du code fourni dans "LaTeX par la pratique" de chez O'reilly.
Le but de cette redéfinition était de faire en sorte que chaque début de section soit en haut de page et soulignées, que les sections ne soient pas numérotées, mais qu'elles apparaissent dans la table des matières.
Voici le code que j'ai rédigé :

\let\presection=\section
\renewcommand{\section}[2]{\newpage\presection*{#2}\vspace{-1.5ex}%
\noindent\rule{\textwidth}{1pt}\vspace*{.5ex}}\addcontentsline{toc}{section}{#1}}

Ce code fonctionnait jusqu'à présent, mais depuis hier, j'ai dû par mégarde tomber dans un cas particulier qui fait que le fichier source contenant ce code fait tourner texi2dvi en boucle, et chauffer mon proc sans pour autant me sortir le moindre pdf.
Ce qui me choque, c'est que latex plop.tex fonctionne, et texi2pdf --pdf plop.tex tourne en rond, avec le même code dans le fichier plop.tex.
Si quelqu'un voit d'où peut venir l'erreur, ou un code qui soit plus adapté à ce que je veux faire, je l'en remercie d'avance.
Pour information, dans la classe que j'ai défini, j'utilise et charge les classes suivantes :

\LoadClass[10pt,a4paper]{report}

\usepackage[latin1]{inputenc}
\usepackage{calc}
\usepackage{fancyhdr}
\usepackage{xtab}
\usepackage{lastpage}
\usepackage[francais]{babel}
\usepackage{geometry}
\usepackage{ifthen}
\usepackage[pdftex,
colorlinks=true,
urlcolor=black, % \href{...}{...} external (URL)
filecolor=black, % \href{...} local file
linkcolor=black, % \ref{...} and \pageref{...}
pagebackref,
pdfpagemode=UseOutlines,
bookmarksopen=true]{hyperref}
  • # quelques précisions de plus?

    Posté par  . Évalué à 2.

    Cela marchait avant, mais ne marche plus maintenant; j'en déduis donc qu'un truc à changé: as-tu ajouté une section ?

    Donc:
    - y a-t'il un truc particulier sur cette section ? (dans le nom, utilisation d'une commande, des accents, charactères spéciaux, très long texte, ...)
    - si commente juste la commande de cette nouvelle section, est-ce que cela re-fonctionne?

    Perso, je penserai pour un bug dans le fait que le mode pdf redéfinit déjà la commande pour inclure un bookmark, et que pour une raison (encore) inconnue, plouf :(

    Dans ce cas... le but est d'isoler le probléme.

    Au passage à essayer aussi: attacher gdb au process pour voir le backtrace, dès fois que cela aide à cerner le problème.

    Dernier détail, pourquoi texi2pdf plutôt que pdflatex ?
    • [^] # Re: quelques précisions de plus?

      Posté par  . Évalué à 2.

      Bon, ben déjà merci pour la réponse...
      Alors le coup du "ça marchait avant, mais ça ne fonctionne plus maintenant", j'avoue que je n'ai absolument pas compris le truc.
      Le document en question est généré depuis un script php qui va piocher des informations dans une base de données postgresql.
      Les titres des sections sont récupérés d'une table, et sont identiques quel que soit le paramétrage de l'édition.
      L'an passé, je sortais cette édition avec les données de 2007, et le .tex compilait sans problèmes (9 sections). Cette année, avec les données de 2008, le .tex ne compile pas, alors qu'il y a moins de sections (5).

      Pour répondre à tes questions :
      - Non, pas de trucs particuliers dans les titres des sections, puisque les 5 de la seconde sont aussi présents dans les 9 de la première édition.
      - En fait si je vire la redéfinition de la commande section ça passe, j'ai presque envie de dire : "forcément".

      Le coup de ton idée perso sur le bug me plaît bien, et j'en était arrivé là moi aussi...

      gdb c'était une bonne idée, mais arrivée trop tard. Je m'explique :
      Les commandes que j'avais données dans mon message initial pour redéfinir la commande \section étaient placées un peu après le \begin{document} ce qui était loin d'être propre.
      Après moults essais, j'ai fini par comprendre qu'il vallait mieux placer tout ça dans un fichier de définition de classe, j'ai donc modifié la classe que j'utilise comme suit pour parvenir au même résultat :

      \renewcommand\section{\@startsection{section}{1}{\z@}%
      {-3.5ex \@plus -1ex \@minus -.2ex}%
      {0.1ex}%
      {\normalfont\Large\bfseries}}
      \let\presection=\section
      \renewcommand{\section}[1]{\newpage%
      \presection*{#1}\addcontentsline{toc}{section}{#1}\vspace{-1.5ex}%
      \noindent\rule{\textwidth}{1pt}\vspace*{.5ex}}


      Du fait des commandes \@, on ne peut placer se set de commandes dans l'en-tête du fichier tex lui même, c'est ce que disent les différentes informations glanées sur le web de-ci de-là.

      Bref, je donne le code car il peut aussi intéresser d'autres que moi. D'autant que la version étoilée de la commande section, si elle n'imprime pas de n° de section, ne remplit pas la table des matières, d'où l'appel à \addcontentsline.

      Enfin, pourquoi texi2pdf plutôt que pdflatex. Bonne question. Ça fait des années que je l'utilise et je crois me souvenir que le premier est fourni en standard avec tex/tetex/latex alors que l'autre est un paquet à part. Du coup, texi2pdf est dispo partout, ce qui n'est pas le cas de pdflatex. Il me semble que c'est pour ça, mais maintenant, ça fait tellement d'années que j'utilise cette commande que j'avoue n'avoir que de vagues souvenirs de cette justification.
      Quoi qu'il en soit, merci pour ton aide, car parfois, se poser quelques questions de plus peut aider...

Suivre le flux des commentaires

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