58

私はsystem()を使用して(C ++)プログラム内からpdflatexを呼び出しています。言うまでもなく、この場合、画面に表示されるすべてのゴミpdflatexは少し苛立たしいものです。

それで...どうすればpdflatexに長い出力を見送るように勧めることができますか?エラーだけが表示されるとさらに良いでしょう...

4

2 に答える 2

67

残念ながら、(La)TeXは、(私が推測する)80年代初頭の起源のために、stdoutとの規則を実際には順守していません。sterrただし、表示される情報の量を変更するために呼び出すことができるスイッチがいくつかあります。

構文エラーが発生した場合でも、またはスイッチを使用して非停止動作を実行latexします。通常のすべての行を印刷しますが、停止しません。少数の宣言行を除くすべてを抑制します(「これはpdfTeX v3.14です...」)。-interaction=nonstopmode-interaction=batchmodenonstopmodebatchmode

\batchmodeこれらは、およびを使用してドキュメント内から呼び出すこともできます\nonstopmodeが、これは、説明している状況ではあまり役に立ちません。

于 2009-06-26T07:04:43.503 に答える
24

すべての出力を単に無視するには、pdflatexstdoutを/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 に答える