我正在使用system()从我的(C ++)程序中调用pdflatex,不用说在这种情况下,所有垃圾pdflatex放在屏幕上都有点恼火。
那么......我如何鼓励pdflatex放弃冗长的输出? 如果只能看到错误会更好......
答案 0 :(得分:62)
不幸的是(La)TeX并没有真正遵守stdout
和sterr
的规则,因为(我假设)它起源于80年代初期。但是您可以调用一些开关来改变显示的信息量。
即使出现语法错误,也可以使用latex
或-interaction=nonstopmode
开关执行-interaction=batchmode
非停止行为。 nonstopmode
将打印所有常用的行,它不会停止。 batchmode
将压制除少数声明性行之外的所有行(“这是pdfTeX v3.14 ......”)。
也可以使用\batchmode
和\nonstopmode
从文档中调用这些内容,但这对您所描述的情况不太有用。
答案 1 :(得分:23)
要简单地忽略所有输出,请将pdflatex标准输出重定向到/ dev / null:
system("pdflatex yourdocument >/dev/null");
您可能希望在文档的开头添加\nonstopmode
,以指示tex即使遇到错误也能继续运行。
要获取错误消息,请将pdflatex输出传递给您的程序,并查找以!
开头的行周围的错误,例如
FILE *outputf = popen("pdflatex yourdocument", "r");
// ... read and analyze output from outputf ...
pclose(outputf);