Utiliser un makefile pour produire un document L A TEX Recontre des ingénieurs statisticiens toulousains Thibault LAURENT GREMAQ, Toulouse School of Economics Thibault.Laurent@univ-tlse1.fr 19 février 2013
1 Motivations 2 Exemple 1 3 Exemple 2 4 Bibliographie
Motivations Un exemple de projet Un livre à compiler en L A TEX avec : des figures en couleurs au format.ps, une bibliographie gérée avec BibTeX, un document final devant être fourni à l imprimeur en noir et blanc. = un ensemble d actions à exécuter qui peuvent prendre du temps lorsque il y a dépendance entre les actions et que le travail doit donc être fait à la chaîne.
Motivations Makefile Makefile? fichier appelé makefile ou Makefile, qui contient un ensemble d actions. Utilisations possibles : compilation d un projet en C, archivage d un document, mise à jour de site, etc. Ici, la compilation d un projet L A TEX. fichier mis en forme selon un certain nombre de règles. le programme make, appelé depuis une console, exécute un fichier Makefile. prérequis : connaissance des commandes ou fonctions en shell (latex, ps2pdf, rm, zip, cp, etc.) NB : sous Windows, la commande make ainsi que la plupart des commandes shell font partie des outils inclus dans Rtools (http://cran.r-project.org/bin/windows/rtools/).
Exemple 1 1 Motivations 2 Exemple 1 3 Exemple 2 4 Bibliographie
Exemple 1 Actions possibles pour préparer un sujet de TP Appliquer la fonction Sweave de R pour créer un fichier.tex à partir d un fichier.rnw. Compiler une première fois le fichier.tex pour obtenir un fichier.pdf. Utiliser la commande bibtex pour mettre en forme la bibliographie dans un fichier.bbl. Compiler 2 fois le.tex pour incorporer la bibliographie correctement dans le.pdf. Appliquer la commande Stangle de R pour créer un fichier de codes.r à partir du fichier.rnw. Effacer tous les fichiers intermédiaires créés. Mettre dans une archive.zip le sujet du TP, les codes R et les données.
Exemple 1 Fichier makefile all: R CMD Sweave carto.rnw R CMD Stangle carto pdflatex carto.tex bibtex carto pdflatex carto.tex pdflatex carto.tex rm -f carto.log carto.aux carto.tex carto.blg carto.toc c zip -r TPcarto.zip carto.pdf carto.r Donnees
Exemple 1 Compilation et conseils Compilation : Quelques conseils : Respecter l espacement au début de chaque ligne. Attention à l encodage de votre éditeur de texte. tester éventuellement chaque ligne de commande dans la console toute seule.
Exemple 2 1 Motivations 2 Exemple 1 3 Exemple 2 4 Bibliographie
Exemple 2 Comment améliorer le code précédent? Ne compiler que les parties du Makefile qui ont subi un changement. Comment faire : ajouter les dépendances entre les fichiers. Un fichier qui dépend d un autre fichier n est transformé que si ce dernier est plus récent que lui-même. Les commandes à connaître pour les inclure dans le Makefile : all, clean, mrproper, zip, rar, etc.
Exemple 2 Fichier makefile arrangé all: carto.pdf carto.tex carto.r TPcarto.zip clean carto.pdf: carto.tex biblio.bib pdflatex carto.tex bibtex carto pdflatex carto.tex pdflatex carto.tex carto.tex: carto.rnw R CMD Sweave carto.rnw carto.r: carto.rnw R CMD Stangle carto.rnw TPcarto.zip: carto.pdf carto.r zip -r TPcarto.zip carto.pdf carto.r Donnees clean: rm -f carto.log carto.aux carto.blg carto.toc carto.aux carto.bbl carto.glo carto.ist carto.out biblio.b
Exemple 2 Quelques remarques Ne pas effacer le fichier.tex, sinon toutes les commandes seront exécutées à chaque compilation... En revanche, la commande clean est exécutée systématiquement car elle ne créé par de nouveau fichier. Solution : utiliser une cible particulière. S il n y a pas de changement : Autres fonctionnalités possibles : définition de variables (variables personnalisées, variables internes), commande silencieuse, makefile conditionnel, sous-makefiles, etc.
Bibliographie 1 Motivations 2 Exemple 1 3 Exemple 2 4 Bibliographie
Bibliographie Quelques liens utiles : Make et Sweave : http://www.stat.auckland.ac.nz/ ~stat782/downloads/make-tutorial.pdf Makefile pour du code C : http://gl.developpez.com/tutoriel/outil/makefile/ GNU makefile : http://www.gnu.org/software/make/ manual/html_node/index.html