58

我正在使用 system() 从我的 (C++) 程序中调用 pdflatex,不用说 pdflatex 放在屏幕上的所有垃圾在这种情况下都有些烦人。

那么......我如何鼓励 pdflatex 放弃冗长的输出?如果只有错误可见就更好了...

4

2 回答 2

67

不幸的是 (La)TeX 并没有真正遵守 and 的规则stdoutsterr因为(我假设)它起源于 80 年代初。但是您可以调用一些开关来更改显示的信息量。

latex即使在语法错误的情况下,也可以使用-interaction=nonstopmode或开关执行-interaction=batchmode非暂停行为。nonstopmode将打印所有常用行,它不会停止。batchmode将抑制除少数声明性行之外的所有行(“这是 pdfTeX v3.14 ...”)。

这些也可以从文档中使用\batchmodeand调用\nonstopmode,但这对于您所描述的情况不太有用。

于 2009-06-26T07:04:43.503 回答
24

要简单地忽略所有输出,请将 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);
于 2009-06-24T12:09:00.190 回答