Journal Double compilation avec LaTeX

Posté par  .
Étiquettes : aucune
0
24
sept.
2004
Cher journal,

J'ai déjà lu, dans des articles et tutoriels différents, qu'il fallait toujours compiler deux fois un document LaTeX.

Pourquoi ?

Merci journal ;) !
  • # Références

    Posté par  . Évalué à 2.

    Il faut deux passes de compilations pour que les références soient indexées correctement mais je n'en connais pas la raison.
    Si tu n'as pas de refs, une compil suffit.
    • [^] # Re: Références

      Posté par  . Évalué à 4.

      Une fois pour les générer, la suivante pour les inclure dans le document.

      Ça concerne : table des matières, notes, références, index et glossaire et sûrement d'autres encore.

      Si tu ne veux pas te prendre la tête, utilise le programme rubber, c'est un make dédié à (La)TeX : il détecte et ne compile que le nécessaire.
    • [^] # Re: Références

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

      la première passe il récupère toutes les refs dans le fichier tex et les mets dans un fichier temporaire

      la 2° passe, il crée ce que tu lui a demandé de créer avec les refs (index/table des matières etc) et les numérotes

      mais je sais pas pourquoi ça fonctionne comme ça
    • [^] # Re: Références

      Posté par  . Évalué à 8.

      En gros, lors de la première passe, LaTeX écrit les différentes infos dont il a besoin dans le fichier .aux (citations, labels, références, etc). Lors de la deuxième passe, il introduit ces infos comme il en a besoin, sur la base du .aux alors mis à jour par la passe précédente (remplace tes \ref par la bonne page correspondante, tes \cite par le bon n° de citation, etc...)

      Il a besoin de faire plusieurs passes, car lors de la première, il ne peut pas forcément détenir toutes les infos (par ex si tu fait une référence au début du document à une figure située une centaine de page plus loin, il ne peut pas prévoir à l'avance où cette figure est positionnée tant qu'il ne l'a pas rencontrée) .

      Tu va me dire, pourquoi LaTeX ne fait-il pas automatiquement le nombre de passes qui lui sont nécessaires ? Ça, c'est je pense essentiellement historique: LaTeX ayant été créé dans les années 80, une compilation pouvait demander beaucoup de temps, alors autant limiter au maximum le temps de calcul, quitte à devoir lancer plusieurs fois LaTeX lorsqu'on voudra obtenir la version finale de son document. Maintenant, ce comportement est entré dans les habitudes, mais il existe un utilitaire, rubber, qui te lance autant de compil que nécessaire si ça te chantes (ceci dit, j'ai jamais essayé...) . Voila la description debian:

      Package: rubber
      Priority: optional
      Section: tex
      Installed-Size: 337
      Maintainer: Emmanuel Beffara <manu@beffara.org>
      Architecture: all
      Version: 0.99.8-1
      Depends: python (>= 2.3), python (<< 2.4), tetex-bin
      Suggests: imagemagick, transfig
      Filename: pool/main/r/rubber/rubber_0.99.8-1_all.deb
      Size: 75890
      MD5sum: 0c290dc7651e3491a543b35b7bde1890
      Description: an automated system for building LaTeX documents
      This is a building system for LaTeX documents. It is based on a routine that
      runs just as many compilations as necessary. The module system provides a
      great flexibility that virtually allows support for any package with no user
      intervention, as well as pre- and post-processing of the document. The
      standard modules currently provide support for bibtex, dvips, dvipdfm,
      pdftex, makeindex. A good number of standard packages are supported,
      including graphics/graphicx (with automatic conversion between various
      formats and Metapost compilation).
      .
      Homepage: http://rubber.sourceforge.net/(...)
    • [^] # Re: Références

      Posté par  . Évalué à 2.

      C'est lors de la première passe qu'il fixe les numéros de page. À la seconde, il peut donc mettre les bonnes référence.

      Exemple: si je fais référence en (future) page 2 à un dessin en (future) page 3, (la)tex ne peut pas directement mettre "à la page 3" car il ne sait pas encore le numéro: il va mettre "à la page ??". Et à la seconde compilation il complètera "à la page 3".

      Il me semble qu'il peut aussi arriver que trois passes soient nécessaires, mais je ne sais plus pourquoi.

      Snark
      • [^] # Re: Références

        Posté par  . Évalué à 2.

        >Il me semble qu'il peut aussi arriver que trois passes soient nécessaires,
        >mais je ne sais plus pourquoi.

        par exemple tu as un label qui tombe à la fin d'une page X lors de la première passe. Une référence y est faite plus haut, et va donc être remplacée par "???" (enfin je sais plus comment c'est indiquée, quand la ref est pas trouvée) lors de cette première passe.

        Passe 2: le "???" est remplacé par "page X". Manque de bol, cela implique un léger changement de mise en page, et paf, ton label en fin de page X se retrouve en début de page X+1. Il est alors mis à jour à X+1 dans le .aux, et ton doc n'est toujours pas à jour. Tu as donc besoin d'une troisème passe (mais ceci est indiqué lors de la compilation: si tu a justement eu des labels qui ont changés de position lors d'une passe, il te dit à la fin de la compil que tu devrait en lancer une nouvelle).

        Taper une thèse en LaTeX d'apprends beaucoup de chose sur son fonctionnement :-)
        • [^] # Re: Références

          Posté par  . Évalué à 1.

          Glops... le temps de verifier dans le LaTeX companion est je me suis fait voler la reponse ;-)

          Tus _ back to these :-( _
        • [^] # Re: Références

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

          ou simplement (car c'est souvent le cas), une table des matières qui passent de une page à plusieurs si on n'a pas changé le style de numérotation des pages entre la table et le corps du document...

          car première passe : récupère les infos (table des matières vide pour l'instant), deuxième passe : génération de la table (donc possible plusieurs pages), troisième passe : stabilisation du tout...

          et même souvent, on fait :
          latex
          bibtex
          latex
          latex
          • [^] # Re: Références

            Posté par  . Évalué à 3.

            >et même souvent, on fait :
            >latex
            >bibtex
            >latex
            >latex

            Oui, c'est le plus simple auquel on pense en général en dernier.

            D'ailleurs, en ce qui concerne "l'automatisation" de la compilation LaTeX, avant d'en venir à invoquer rubber et consort, n'oublions pas que nous avons bêtement à notre disposition... emacs. Ainsi, un C-c C-c sur un fichier LaTeX fraichement écrit va nous lancer LaTeX. Un second dans la foulée va lancer BibTeX comme un grand, le troisème re-LaTeX, etc... jusqu'à ce qu'il estime que tout est OK, et il nous proposera alors lors de l'ultime C-c C-c de visionner le DVI avec Xdvi.
      • [^] # Re: Références

        Posté par  . Évalué à 1.

        Par exemple pour gerer le cas ou inserer "a la page 123" en page 99 ferait passer le label a la page 124 ;-)

        Je pense en particulier aux citations, index, ou les paquages un peu exotiques comme varioref...

        Tus
        • [^] # Re: Références

          Posté par  . Évalué à 4.

          >Je pense en particulier aux citations, index, ou les paquages un peu
          >exotiques comme varioref...

          Le pire étant lorsque on veut avoir des références du style "voir figure xyz page suivante". Lorsque tu as le "figure xyz" en fin de page X, "page suivante" sur la page X+1, et la figure en question page X+1. Du coup la ref, n'est pas bonne, et le texte remplacé par "voir figure xyz", puisque sur la même page. Mais du coup c'est plus bon non plus, car la figure est page suivante, alors c'est remplacé lors de la passe suivante par " voir figure xyz page suivante"... ad lib (ceci constitue une implémentation du mouvement perpétuel. faudrait voir comment rubber se tire de telles situations :-) ). Insoluble a part de petites réorganisations dans le texte (et ce cas arrive forcément au moins une fois dans un gros doc bourré de figures par une simple loin statistique agrémentée du principe de Murphy).
          • [^] # Re: Références

            Posté par  . Évalué à 1.

            D'ailleurs (et ca suit la loi de Murphy) c'est toujours assez compliquer à montrer...
            ce genre de comportement est pratiquementirréalisable quand on veux le faire exprès

            Enfin, la fois ou j'ai essayé, en tout cas, ca n'a pas été des plus rapide (et en plus, je n'ai pas gardé le fichier :( )
      • [^] # Re: Références

        Posté par  . Évalué à 0.

        Il me semble qu'il peut aussi arriver que trois passes soient nécessaires, mais je ne sais plus pourquoi.

        Si tu utilise BIBTeX pour ta bibliographie il faut une troisième passe. L'ordre a utiliser est le suivant :
        latex monfichier
        latex monfichier
        bibtex monfichier
        latex monfichier

        Et ça peut être encore pire (il me semble de mémoire) si t'utilise pdflatex et que tu veux inclure des "thumbnails" avec thumpdf.
  • # Avec une bib c est pire ...

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

    Si tu as juste une TOC, des label simples, et des sauts, il fauts deux compilations; si tu as comme moi des apendices et une bibliographie, il faut compiler au moins 3 fois; extrait de mon makefile :

    TEX_FILES := $(wildcard *.tex)
    PDF_FILES = $(TEX_FILES:%.tex=%.pdf)
    [...]
    %.pdf: %.tex %.bib
    $(PDFLATEX) $<
    $(BIBTEX) $(<:%.tex=%.aux)
    $(PDFLATEX) $<
    $(PDFLATEX) $<

    pour la bibliographie, la 1ere passe cre la liste des references, puis tu dois creer le code latex de la table, en 2e passe tu inclus la table dans le document, a la 3e, tu valide les liens vers la bib ( chose impossible en passe 2 si ta table est comme tout le monde a la fin de ton texte)

    n oublie pas que le latex si compile du debut vers la fin: donc si une reference fait appel a un label situe APRES, il te faut au moins 2 passes.

    Normalement, si tu ne fais pas assez de passes, a l endroit ou tu a mis des liens ou des references, des [?] aparaitront.. Fait une recherche sur les '?' ...

    Le texte simple pourrait etre traite en une passe; le probleme, c est les liens ; une TOC normale se gere en 2 passes.

    Note qu a la fin de la compilation, le compilateur dis parfois qu une passe suplementaire est conseillee ( non ce n est pas la derniere ligne affichee; faut fouiller le log ), sauf si ne nettoye jamais ton dossier ( les .toc et co). Mon makefile inclus un clean qui devient parfois incontournable quand de grosse modifs de la TOC sont faites ( il a 6 a 8 fichiers a effacer )

    mes src sont la :http://www.demaine.info/projet_self_tracking_webcam/reports(...)
    ( ce tarball n est pas a jour: il n y a pas la bib )

Suivre le flux des commentaires

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