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.
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/(...)
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.
>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 :-)
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
>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.
>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).
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 :( )
> 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.
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 :
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 )
# Références
Posté par kurun . Évalué à 2.
Si tu n'as pas de refs, une compil suffit.
[^] # Re: Références
Posté par Ramso . Évalué à 4.
Ç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 tgl . Évalué à 3.
http://www.phys.psu.edu/~collins/software/latexmk-jcc/(...)
Il est vraiment très bien, mais en même temps, je ne connais pas rubber donc je ne peux pas comparer.
[^] # Re: Références
Posté par Mjules (site web personnel) . Évalué à 2.
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 THE_ALF_ . Évalué à 8.
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 Snark_Boojum . Évalué à 2.
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 THE_ALF_ . Évalué à 2.
>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 Guillaume ARTUS . Évalué à 1.
Tus _ back to these :-( _
[^] # Re: Références
Posté par Sylvain Rampacek (site web personnel) . Évalué à 3.
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 THE_ALF_ . Évalué à 3.
>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 Guillaume ARTUS . Évalué à 1.
Je pense en particulier aux citations, index, ou les paquages un peu exotiques comme varioref...
Tus
[^] # Re: Références
Posté par THE_ALF_ . Évalué à 4.
>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 Nicolas Schoonbroodt . Évalué à 1.
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 tzeentch00 . Évalué à 0.
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 doublehp (site web personnel) . Évalué à 1.
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.