Подтвердить что ты не робот

Запустить pdflatex тихо

Я вызываю pdflatex из моей (С++) программы с помощью system(), само собой разумеется, что все мусор pdflatex помещается на экран, немного раздражает в этом случае.

Итак... как мне заставить pdflatex отказаться от длинных выходов? Было бы даже лучше, если бы были видны только ошибки...

4b9b3361

Ответ 1

Чтобы просто игнорировать весь вывод, перенаправьте pdflatex stdout на /dev/null:

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

Возможно, вы захотите добавить \nonstopmode в начале документа, чтобы указать, чтобы tex продолжал идти даже при возникновении ошибок.

Чтобы получить сообщения об ошибках, выведите pdflatex в свою программу и найдите ошибки вокруг строк, начиная с !, например.

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

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

pclose(outputf);

Ответ 2

К сожалению (La) TeX действительно не соблюдает правила stdout и sterr, вследствие (я предполагаю) его происхождения в начале 80-х годов. Но есть несколько переключателей, которые вы можете вызвать, чтобы изменить количество отображаемой информации.

Выполнить latex с помощью переключателей -interaction=nonstopmode или -interaction=batchmode для не-остановки поведения даже в случае синтаксической ошибки. nonstopmode будет печатать все обычные строки, он просто не остановится. batchmode будет подавлять все, кроме нескольких декларативных строк ( "это pdfTeX v3.14..." ).

Они также могут быть вызваны из документа с помощью \batchmode и \nonstopmode, но это менее полезно для описываемой ситуации.