2009-06-24 2 views
52

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

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

+1

Relatex on tex SE: http://tex.stackexchange.com/questions/27878/pdflatex-bash-script-to-supress-all-output-except-error-messages –

ответ

22

Чтобы просто игнорировать все выходные, перенаправлять pdflatex стандартный вывод в/Dev/нуль:

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

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

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

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

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

pclose(outputf); 
+2

Я не уверен, что pdflatex делает , но многие программы командной строки пишут оба stdout (которые будут записаны вашим «>/dev/null») и stderr (что не будет). Чтобы отключить * оба *, добавьте «2> и 1» после существующей строки system(). –

+2

Также: в Windows необходимое устройство называется «NUL» (примечание 1 «L»), а не «/ dev/null». Часть «2> & 1» работает как для * nix. –

+0

Проблема в том, что если у вас есть ошибка, pdflatex останавливается, ожидая ввода, но вы никогда этого не поймете. Будет ли ответ Робертсона лучше (хотя pdflatex все еще выводит пару строк) – Shahbaz

61

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

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

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

+0

Что вы подразумеваете под «не соблюдает правила' stdout' и 'stderr'?» Использует ли он другие выходные потоки? –

+0

@Matthew это было какое-то время, так как я смотрел на это, но моя память заключается в том, что попытка перенаправления только, скажем, сообщения об ошибках где-то не работают вообще. Но я мог ошибаться; извините, что расплывчаты. –

+0

@Matthew Leingang: случайно я нашел [Re: молчание латекса (тихий/пакетный режим)?] (Http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2007-09/msg00520.html); Я считаю, что это разъясняется? Ура! – sdaau

Смежные вопросы