静静地运行pdflatex

Nom*_*meN 54 latex pdflatex

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

那么......我如何鼓励pdflatex放弃冗长的产出呢?如果只能看到错误会更好......

Wil*_*son 62

不幸的是(La)TeX并没有真正遵守80年代早期的规则,stdout并且sterr由于(我假设)它的起源.但是您可以调用一些开关来改变显示的信息量.

执行latex与任一-interaction=nonstopmode-interaction=batchmode切换用于非停止行为即使在语法错误的情况下.nonstopmode将打印所有常用的线条,它不会停止.batchmode除了少数几个声明性行之外,它们将会被压制("这是pdfTeX v3.14 ......").

这些也可以在文档中使用\batchmode和调用\nonstopmode,但这对于您描述的情况不太有用.


laa*_*lto 23

要简单地忽略所有输出,请将pdflatex stdout重定向到/ dev/null:

system("pdflatex yourdocument >/dev/null");
Run Code Online (Sandbox Code Playgroud)

您可能希望\nonstopmode在文档的开头添加,以指示tex在遇到错误时继续运行.

要获取错误消息,请将pdflatex输出传递给您的程序,并查找以!(例如)开头的行周围的错误

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

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

pclose(outputf);
Run Code Online (Sandbox Code Playgroud)

  • 我不确定pdflatex是否这样做,但是许多命令行程序都写入stdout(将由你的">/dev/null"捕获)和stderr(不会).要使两个*静音,请在现有的system()字符串后添加"2>&1". (2认同)
  • 另外:在Windows上,必要的设备称为"NUL"(注1"L"),而不是"/ dev/null"."2>&1"部分适用于*nix. (2认同)