J'ai réalisé séparément plusieurs graphiques TikZ avec la classe standalone : appelons-les document1, document2, etc. J'ai inclus les fichiers pdf ainsi générés dans un autre document (appelons-le master), au moyen de la commande \includegraphics.

Si je modifie l'un des fichiers TikZ, il me faut le recompiler, puis compiler le document dans lequel est inclus le pdf ainsi généré.

Sous linux, je peux évidemment écrire la commande $ pdflatex document1 && pdflatex document2 && pdflatex document3 && ... && pdflatex master. Mais c'est astreignant, et cela devient complexe s'il y a n documents.

Y a-t-il un moyen LaTeXien de lancer toutes les compilations d'un seul coup ?

Posée 27 Sep '17, 20:54

Pathe's gravatar image

Pathe ♦♦
7.5k43204251
Taux d'acceptation : 55%

Une solution TeXienne est une solution basée sur -shell-escape voulez vous vraiment l'utiliser?

(27 Sep '17, 21:35) touhami touhami's gravatar image

Si elle ne fait pas partie des mauvaises manières d'utiliser LaTeX, pourquoi pas ?

(27 Sep '17, 22:04) Pathe ♦♦ Pathe's gravatar image

Une solution (La)TeXienne est une solution basée sur la compilation en mode -shell-escape.

Voici alors une méthode : À compiler avec la commande pdflatex -shell-escape master

Remarque Apres modifications des fichiers documentN.tex supprimer le fichier documentN.pdf

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{graphicx}
\newcommand*{\mtincludegraphics}[2][]{%
\IfFileExists{#2.pdf}{}{%
\immediate\write18{pdflatex #2}}%
\includegraphics[#1]{#2.pdf}}

\begin{document}
\mtincludegraphics{doc1}

\mtincludegraphics[scale=2]{doc2}

\mtincludegraphics{doc3}
\end{document}

Solution 2 Une combinaison de la solution précédente et la réponse de @sztruks

Ouvrir dans l'éditeur Overleaf
\newcommand*{\mtincludegraphics}[2][]{%
\immediate\write18{latexmk -pdf #2}%
\includegraphics[#1]{#2.pdf}}

ECM

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{graphicx}
\newcommand*{\mtincludegraphics}[2][]{%
\immediate\write18{latexmk -pdf #2}%
\includegraphics[#1]{#2.pdf}}

\begin{document}
\mtincludegraphics{doc1}

\mtincludegraphics[scale=2]{doc2}

\mtincludegraphics{doc3}
\end{document}
Lien permanent

Publiée 27 Sep '17, 22:36

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 07 Oct '17, 13:41

Curieuse solution : supprimer le nouveau documentN.pdf pour revenir au document master contenant ce document. Un bel exercice de mémoire, sans réelle garantie de résultat.

(28 Sep '17, 07:25) pzorba75 pzorba75's gravatar image

@pzorba75 : avez-vous mieux à proposer ? Mon idée est d'héberger les documents sur un serveur git où il n'y aurait que les fichiers sources, et de ne générer en local que les fichiers pdf.

(28 Sep '17, 21:50) Pathe ♦♦ Pathe's gravatar image

Mes connaissances Latex et Windows sont trop limitées pour imaginer une solution permettant la compilation d'un document quand une partie des sources a été modifiée, il faudrait disposer de références croisées entre les sources et automatiser le lancement de la compilation du ou des sources impactés. Pas vraiment simple.

(28 Sep '17, 22:26) pzorba75 pzorba75's gravatar image

@pzorba75 Les problèmes de mémoire sans hors sujet :-)

Vous pouvez recompiler tous les fichiers sans poser des question avec

\newcommand*{\mtincludegraphics}[2][]{% \immediate\write18{pdflatex #2}% \includegraphics[#1]{#2.pdf}}

(28 Sep '17, 23:13) touhami touhami's gravatar image

Je ferais pour ma part appel à latexmk :

Ouvrir dans l'éditeur Overleaf
latexmk -pdf master.tex

Latexmk surveille les dépendances présente dans le fichier log : quand on change une photo chargée avec includegraphics, latexmk recompile automatiquement le document.

Citation du manuel :

Latexmk can also be set to run continuously with a suitable previewer. In that case the latex program (or one of its relatives), etc, are rerun whenever one of the source files is modified, and the previewer automatically updates the on-screen view of the compiled document.

Latexmk determines which are the source files by examining the log file. (Optionally, it also examines the list of input and output files generated by the -recorder option of modern versions of latex (and pdflatex, xelatex, lualatex, etc). […] When latexmk is run, it examines properties of the source files, and if any have been changed since the last document generation, latexmk will run the various LaTeX processing programs as necessary. In particular, it will repeat the run of latex (or a related program)) often enough to resolve all cross references; depending on the macro packages used. With some macro packages and document classes, four, or even more, runs may be needed. If necessary, latexmk will also run bibtex, biber, and/or makeindex. In addition, latexmk can be configured to generate other necessary files.

L’option -pvc permet bénéficier d’une compilation automatique, qui lance latexmk en toile de fond : une visonneuse par défaut est ouverte, et latexmk vérifie à intervalle régulier (configurable) si les fichiers ont changé. Si c’est le cas, il lance automatiquement la compilation.

Je cite à nouveau le manuel

The second previewing option is the powerful -pvc option (mnemonic: "preview continuously"). In this case, latexmk runs continuously, regularly monitoring all the source files to see if any have changed. Every time a change is detected, latexmk runs all the programs necessary to generate a new version of the document. A good previewer will then automatically update its display.

Voilà à quoi ressemble mon .latexmkrc

Ouvrir dans l'éditeur Overleaf
$pdf_mode = 1;
$postscript_mode = $dvi_mode = 0;
$biber = 'biber %O %S';
$pdf_previewer = 'start mupdf %O %S';
$recorder = 1 ;
#vérifie toutes les deux secondes si les programmes ont été actualisés.
$sleep_time= 2 ;
#rajoute des extensions à celles identifiant les fichiers auxiliaires
push @generated_exts, "nav","snm","run.xml" ;
$clean_ext= 'tex.bak tex~ bib~' ;

Je recommande donc fortement, après configuration de latexmk, de privilégier la ligne de commande

Ouvrir dans l'éditeur Overleaf
latexmk -pdf -pvc master.tex
Lien permanent

Publiée 30 Sep '17, 20:12

sztruks's gravatar image

sztruks
3681413
Taux d'acceptation : 25%

Modifiée 01 Oct '17, 15:52

Certes, mais remarque-t-il si un autre fichier .tex, qui serait inclus dans le document maître, a subi des modifications depuis sa dernière compilation ?

(30 Sep '17, 20:32) Pathe ♦♦ Pathe's gravatar image

Oui, il reconnaît ces modifications.

(30 Sep '17, 20:44) sztruks sztruks's gravatar image

@Pathe est ce que la commande latexmk -pdf master.tex est vraiment suffisante ? ;-)

(01 Oct '17, 12:54) touhami touhami's gravatar image

@touhami elle suffit, mais cela reste une intervention manuelle et ponctuelle. Pour bénéficier pleinement du confort de latexmk, mieux vaut rajouter l’option -pvc pour automatiser la compilation et obtenir l’effet désiré (j’avais oublié de vérifier mon alias). J’ai actualisé ma réponse en conséquence, merci.

(01 Oct '17, 15:48) sztruks sztruks's gravatar image

@sztruks @touhami j'ai utilisé la commande latexmk -pdf -pvc master.tex ; malheureusement, elle ne fonctionne pas si bien que ça : si je modifie un fichier insert.tex ayant servi à générer un pdf inséré dans master.tex, cette modification ne déclenche pas une re-compilation de insert.tex.

(01 Oct '17, 18:40) Pathe ♦♦ Pathe's gravatar image

@pathe : effectivement, si tu fais appel à \includegraphics pour charger le pdf, latexmk va se contenter de surveiller les modifications du pdf, sans chercher plus loin. Dans ce cas-là, il faut lancer latexmk -pdf -pvc. Latexmk surveillera alors tous les fichiers .tex du dossier. Toutefois, je ne vois pas l’utilité de passer par \includegraphics, alors qu’un \input insert.tex dans ton fichier maître fera tout aussi bien l’affaire. Cela a l’avantage de t’épargner de répéter le même préambule dans chaque fichier TiKZ. Il suffit de le charger dans le préambule du maître.

(01 Oct '17, 19:00) sztruks sztruks's gravatar image

Pour insérer mes pdf, j'utilise la fonction \includepdf de l'extension pdfpages. Cela me permet notamment de redimensionner ma figure, de lui adjoindre des labels, ou des références qui apparaîtront dans les tables de mon document maître. Or ces éléments sont inutiles dans d'autres documents utilisant le même pdf, d'où ce choix... qui n'est peut-être pas très bon.

Ouvrir dans l'éditeur Overleaf
\includepdf[pagecommand = {\pagestyle{scrheadings}}, landscape,
addtotoc={1, subsection, 1, Plan des alimentations électriques, elec1}, scale = 0.95,
    addtolist={1, figure, Alimentations électriques, elec2},
offset = 0mm 5mm
]{insert.pdf}
(01 Oct '17, 20:37) Pathe ♦♦ Pathe's gravatar image

@pathe : dans ce cas, il faut lancer latexmk sur tout le dossier et tu auras l’effet escompté : le manuel précise que si aucun nom de fichier n’est précisé, latexmk tourne sur tous les fichiers du dossier. Avec les options -pdf -pvccela actualisera tes pdf automatiquement, et la compilation du document maître sera normalement automatique. Bref, latexmk -pdf -pvc sans plus.

(01 Oct '17, 20:44) sztruks sztruks's gravatar image

@pathe (je ne vois pas mon précédent commentaire, j’espère que ce n’est pas une redite). Essaie latexmk -pdf -pvc sans donner de nom de fichier. Cela lancera un contrôle de tous les fichiers *tex, donc si ton fichier tikz est modifié, le pdf sera compilé et sa modification lancera la modification du fichier maître. À condition que tout ce petit monde soit dans le même dossier.

(03 Oct '17, 00:28) sztruks sztruks's gravatar image
Affichage de 5 parmi 9 Afficher 4 commentaire(s) en plus
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.