web-dev-qa-db-fra.com

Exécutez pdflatex tranquillement

J'appelle pdflatex depuis mon programme (C++) en utilisant system (), inutile de dire que toutes les ordures que pdflatex met à 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 des erreurs étaient visibles ...

54
NomeN

Pour ignorer simplement toutes les sorties, redirigez pdflatex stdout vers/dev/null:

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

Vous voudrez peut-être ajouter \nonstopmode au début de votre document pour demander à tex de continuer même en cas d'erreurs.

Pour obtenir les messages d'erreur, dirigez 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);
23
laalto

Malheureusement (La) TeX ne respecte pas vraiment les règles de stdout et sterr, en raison (je suppose) de ses origines au début des années 80. Mais vous pouvez invoquer certains commutateurs pour modifier la quantité d'informations affichées.

Exécutez latex avec le -interaction=nonstopmode ou -interaction=batchmode bascule pour un comportement sans interruption même en cas d'erreur de syntaxe. nonstopmode affichera toutes les lignes habituelles, mais ne s'arrêtera pas. batchmode supprimera tout sauf une poignée de lignes déclaratives ("c'est pdfTeX v3.14 ...").

Celles-ci peuvent également être appelées à partir du document avec \batchmode et \nonstopmode, mais cela est moins utile pour la situation que vous décrivez.

62
Will Robertson