Запустить pdflatex тихо
Я вызываю pdflatex из моей (С++) программы с помощью system(), само собой разумеется, что все мусор pdflatex помещается на экран, немного раздражает в этом случае.
Итак... как мне заставить pdflatex отказаться от длинных выходов?
Было бы даже лучше, если бы были видны только ошибки...
Ответы
Ответ 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
, но это менее полезно для описываемой ситуации.