J'ai sans doute déjà posé la question il y a un moment, mais, il y a des gens qui s'y connaissent en Makefile, dans le coin ?
Dans mon manuscrit de thèse, les illustrations doivent être converties en PDF, vu que LaTeX et le SVG, ç'n'est pas trop ça. Donc j'ai besoin d'une règle de ce genre-là :
SVGs=$(wildcard */*.svg)
ILLUs=$(SVGs:.svg=.pdf)
%.pdf: %.svg
rsvg-convert -f pdf $< -o $@
Seulement, il n'y a pas que les dessins qui doivent être en PDF pour être intégrés. Il y a aussi, notamment, les courbes. Donc j'ai aussi besoin d'une règle de ce genre-là :
TSVs=$(wildcard */*.tsv)
PLTs=$(wildcard */*.plt)
CURVs=$(PLTs:.plt=.pdf)
%.pdf: %.tsv %.plt
gnuplot $<
Et là, fatalement, ça coince, parce que ça fait deux⁽¹⁾ règles « %.pdf », donc la seconde n'est pas prise en compte.
Je vois deux moyens de contourner le problème : d'une part, utiliser des extensions supplémentaire pour s'y retrouver, du type :
SVGs=$(wildcard */*.svg)
ILLUs=$(SVGs:.svg=-illu.pdf)
TSVs=$(wildcard */*.tsv)
PLTs=$(wildcard */*.plt)
CURVs=$(PLTs:.plt=-curv.pdf)
%-illu.pdf: %.svg
rsvg-convert -f pdf $< -o $@
%-curv.pdf: %.tsv %.plt
gnuplot $<
(Mais je trouve ça assez moche et pas pratique à l'usage, genre c'est lourd à taper dans les \includegraphics), et d'autre part, ranger ça dans des répertoires particuliers, du type :
SVGs=$(wildcard illus/*.svg)
ILLUs=$(SVGs:.svg=.pdf)
TSVs=$(wildcard curvs/*.tsv)
PLTs=$(wildcard curvs/*.plt)
CURVs=$(PLTs:.plt=.pdf)
illus/%-illu.pdf: illus/%.svg
rsvg-convert -f pdf $< -o $@
curvs/%.pdf: curvs/%.tsv curvs/%.plt
gnuplot $<
(Mais ce n'est pas pratique au niveau rangement, pour retrouver quel fichier sert à quelle partie du manuscrit). Ce que j'aimerais, c'est un règle qui ressemblerait à :
SVGs=$(wildcard */*.svg)
ILLUs=$(SVGs:.svg=.pdf)
TSVs=$(wildcard */*.tsv)
PLTs=$(wildcard */*.plt)
CURVs=$(PLTs:.plt=.pdf)
%.pdf [IF IN $(ILLUs)]: %.svg
rsvg-convert -f pdf $< -o $@
%.pdf [IF IN $(CURVs)]: %.tsv %.plt
gnuplot $<
Mais je n'ai rien trouvé qui y ressemble jusque là. Vous sauriez si c'est faisable ? Et dans le cas contraire, laquelle des deux manières de contourner ci-dessus vous semble la moins moche ?
Edit : ah, ben, à force de chercher, on dirait bien que la bonne façon de faire est :
SVGs=$(wildcard */*.svg)
ILLUs=$(SVGs:.svg=.pdf)
TSVs=$(wildcard */*.tsv)
PLTs=$(wildcard */*.plt)
CURVs=$(PLTs:.plt=.pdf)
$(ILLUs): %.pdf: %.svg
rsvg-convert -f pdf $< -o $@
$(CURVs): %.pdf: %.tsv %.plt
gnuplot $<
😃
Pour la peine, je crois bien que je vais me farcir un petit article de blog sur les bêtises qu'on peut faire avec du LaTeX et du Makefile, un de ces jours. Depuis le temps, j'ai trouvé plein de bricoles chouettes à raconter ^^
(1) D'autant que, je simplifie, vu que j'ai aussi des fichus administratifs qui réclament que j'intègre certaines pages dans le manuscrit, en insistant beaucoup sur le fait que ça doit respecter précisément les dispositions, tailles et polices de leurs documents de référence, mais ne sont fichus de fournir lesdits documents de référence qu'en .doc(x)…
D'ailleurs, si quelqu'un connaît une commande pour convertir ce genre de trucs (enfin, leur reconversion en OpenDocument, 'faut pas exagérer) en PDFs, ça pourrait m'éviter d'avoir à lancer LibreOffice pour faire un export manuel…