Comment obtenir un .tex portable ?

Cette page deviendra bientôt, espérons-le, un simple lien vers une macro que j’ai rédigée, et qui nécessite d’être nettoyée et commentée avant d’être partagée.

Le problème

Votre document contient de nombreux include, input, des .sty et fais appel à un (ou plusieurs) .bib ? Il nécessite un Makefile pour être compilé ?

Pour des questions d’archivage, le communication, pour le mettre sur arixv ou hal, vous avez besoin d’un document portable ?

Je liste ici différents outils qui vous permettent de faire cette manipulation, et ainsi obtenir un simple .tex avec tout ce qu’il faut.

Inclure les dépendances

Vous pouvez lister les dépendances de votre document avec snapshot et ainsi connaitre la liste des paquets employés par votre document. À l’inverse, cmdtrack vous permets de connaitre les newcommand qui ne sont pas employés.

Vous pouvez ensuite utiliser bundledoc, arlatex, combine ou latexpand pour inclure toutes ces dépendances dans un unique fichier .tex.

On supposera que vous utilisez :

latexpand --empty-comments --expand-usepackage --output input.tex --explain output.tex

Plutôt que de ne conserver que le .bbl, je préfère conserver la partie nécessaire des fichiers .bib employé. Vous pouvez exporter la partie utile de votre bibliographie avec bibtool. Faîtes simplement :

bibtool -c -q -x input.aux -o output.bib

Pour ensuite ajouter cette bibliographie au début de votre fihier .tex avec un filecontents, faîtes

echo "\end{filecontents*}" | cat - input.tex > temp && mv temp input.tex; cat output.bib | cat - input.tex > temp &&
mv temp input.tex; echo '\RequirePackage{filecontents}\n\\begin{filecontents*}{output.bib}' | cat - input.tex > temp &&
mv temp input.tex;

Il faut ensuite enlever le renvoi à vos anciens fichiers de bibliographie, et les remplacer par un appel à output.bib. Vous pouvez le faire avec sed :

sed -i '' 's:\bibliography{.*}:\bibliography{output}:' input.tex; sed -i '' 's:\addbibresource{.*}:\addbibresource{output.bib}:' input.tex;

Enfin, Hal et Arxiv semblent compiler avec tex plutôt qu’avec pdflatex par défaut. Si cela vous dérange, ajouter un \pdfoutput=1 au début de votre .tex (dans les cinq premières lignes), comme conseillé par arXiv.

Vérifier le résultat obtenu

Une discussion sur stack exchange vous apprendra comment vérifier que le pdf ainsi obtenu est identique à celui que vous aviez au départ. Parmi les options:

Optimisation et problèmes

À venir, je liste juste quelques outils pour le moment.