Exécuter la commande système après la compilation
J'utilise \immediate\write18{...}pour créer un fichier temporaire qui est utilisé dans le corps du document, par exemple:
\documentclass{beamer}
\immediate\write18{sed 's/foo/bar/' in.tsv > out.tmp}
\begin{document}
% Do stuff with out.tmp
\end{document}
Je voudrais supprimer le fichier temporaire out.tmpune fois la compilation terminée, quelque chose comme:
\onExit\write18{rm out.tmp}
ou
...
\end{document}
\write18{rm out.tmp}
Est-ce possible?
Si ça compte, je compile avec pdflatex --shell-escape slides.tex
Réponses
Vous pouvez utiliser le atveryendpackage:
\begin{filecontents*}{\jobname.tsv}
foo
\end{filecontents*}
\documentclass{article}
\usepackage{atveryend}
\immediate\write18{sed 's/foo/bar/' \jobname.tsv > \jobname.tmp}
\AtVeryEndDocument{\immediate\write18{rm \jobname.tmp}}
\begin{document}
\input{\jobname.tmp}
\end{document}
Cela affichera «barre» et il n'y aura pas de .tmpfichier à la fin. J'ai changé les noms de fichiers afin de ne pas risquer d'écraser mes fichiers, mais vous pouvez utiliser le nom que vous voulez.
D'où \AtVeryEndDocumentdiffère- \AtEndDocumentt-il? En ce sens, il est exécuté lorsque tous les fichiers sont fermés, y compris le .auxfichier. Vous pourriez également être servi avec le noyau fourni \AtEndDocument: faites quelques tests.