我正在使用 system() 从我的 (C++) 程序中调用 pdflatex,不用说 pdflatex 放在屏幕上的所有垃圾在这种情况下都有些烦人。
那么......我如何鼓励 pdflatex 放弃冗长的输出?如果只有错误可见就更好了...
不幸的是 (La)TeX 并没有真正遵守 and 的规则stdout
,sterr
因为(我假设)它起源于 80 年代初。但是您可以调用一些开关来更改显示的信息量。
latex
即使在语法错误的情况下,也可以使用-interaction=nonstopmode
或开关执行-interaction=batchmode
非暂停行为。nonstopmode
将打印所有常用行,它不会停止。batchmode
将抑制除少数声明性行之外的所有行(“这是 pdfTeX v3.14 ...”)。
这些也可以从文档中使用\batchmode
and调用\nonstopmode
,但这对于您所描述的情况不太有用。
要简单地忽略所有输出,请将 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);