54 votes

Exécuter pdflatex tranquillement

J'appelle pdflatex à partir de mon programme (C++) en utilisant system(), inutile de dire que toutes les ordures que pdflatex affiche à l'écran sont un peu irritantes dans ce cas.

Alors... comment puis-je encourager pdflatex à renoncer aux longues sorties ? Ce serait encore mieux si seules les erreurs étaient visibles...

62voto

Will Robertson Points 19581

Malheureusement, (La)TeX ne respecte pas vraiment les règles de l'art. stdout y sterr en raison (je suppose) de ses origines au début des années 80. Mais il y a quelques interrupteurs que vous pouvez invoquer pour modifier la quantité d'informations affichées.

Exécuter latex avec soit le -interaction=nonstopmode o -interaction=batchmode pour un comportement non haletant même dans le cas d'une erreur de syntaxe. nonstopmode imprimera toutes les lignes habituelles, mais il ne s'arrêtera pas. batchmode supprimera tout sauf une poignée de lignes déclaratives ("ceci est pdfTeX v3.14...").

Ceux-ci peuvent également être invoqués à partir du document à l'aide de la commande \batchmode y \nonstopmode mais cela est moins utile dans la situation que vous décrivez.

23voto

laalto Points 50581

Pour simplement ignorer toute sortie, redirigez la sortie stdout de pdflatex vers /dev/null :

system("pdflatex yourdocument >/dev/null");

Vous pouvez ajouter \nonstopmode au début de votre document pour indiquer à tex de continuer même s'il rencontre des erreurs.

Pour obtenir les messages d'erreur, pipez la sortie de pdflatex vers votre programme et recherchez les erreurs autour des lignes commençant par ! par exemple

FILE *outputf = popen("pdflatex yourdocument", "r");

// ... read and analyze output from outputf ...

pclose(outputf);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X