web-dev-qa-db-ja.com

pdflatexを静かに実行する

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

だから...どうやってpdflatexに長い出力を控えるよう奨励するのですか?エラーのみが表示される場合はさらに良いでしょう...

54
NomeN

すべての出力を単に無視するには、pdflatex stdoutを/ dev/nullにリダイレクトします。

system("pdflatex yourdocument >/dev/null");

ドキュメントの先頭に\nonstopmodeを追加して、エラーが発生した場合でもtexが続行し続けるように指示できます。

エラーメッセージを取得するには、pdflatexの出力をプログラムにパイプし、!で始まる行の周りのエラーを探します。

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

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

pclose(outputf);
23
laalto

残念ながら、(La)TeXはstdoutsterrのルールを実際に順守していません。これは、80年代前半の起源に起因する(と思われます)。ただし、表示する情報の量を変更するために呼び出すことができるスイッチがいくつかあります。

構文エラーの場合でも、-interaction=nonstopmodeまたは-interaction=batchmodeスイッチを使用してlatexスイッチを実行すると、停止しない動作が得られます。 nonstopmodeは通常の行をすべて出力しますが、停止しません。 batchmodeは、少数の宣言行を除くすべてを抑制します( "this is pdfTeX v3.14 ...")。

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

62
Will Robertson