2009-06-24 9 views
52

Ich rufe pdflatex aus meinem (C++) Programm mit System(), unnötig zu sagen, dass alle Müll pdflatex auf dem Bildschirm ist in diesem Fall ein bisschen irritierend.Run pdflatex leise

Also ... Wie ermutige ich pdflatex, auf die langen Ausgaben zu verzichten? Es wäre noch besser, wenn nur Fehler sichtbar ...

einfach
+1

Relatex auf tex SE: http://tex.stackexchange.com/questions/27878/pdflatex-bash-script-to-supress-all-output-except-error-meldungen –

Antwort

22

würden alle Ausgaben ignorieren, pdflatex stdout/dev/null umleiten:

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

Sie können hinzufügen möchten \nonstopmode am Anfang von Ihrem Dokument, um tex anzuweisen, weiterzumachen, selbst wenn Fehler auftreten.

Um die Fehlermeldungen zu erhalten, Pipe pdflatex Ausgabe zu Ihrem Programm und suchen Sie nach Fehlern um Zeilen beginnend mit !, z.

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

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

pclose(outputf); 
+2

Ich bin nicht sicher, ob pdflatex tut , aber viele Befehlszeilenprogramme schreiben sowohl auf stdout (was von Ihrem ">/dev/null" erfasst wird) als auch stderr (was nicht der Fall ist). Wenn Sie * beide * stummschalten möchten, fügen Sie "2> & 1" nach Ihrer vorhandenen system() - Zeichenfolge hinzu. –

+2

Auch: Unter Windows wird das notwendige Gerät nur "NUL" genannt (Note 1 "L"), nicht "/ dev/null". Der Teil "2> & 1" funktioniert wie für * nix. –

+0

Das Problem dabei ist, dass, wenn Sie einen Fehler haben, pdflatex stoppt, auf Eingabe wartet, aber Sie würden es nie verstehen. Will Robertsons Antwort ist besser (obwohl pdflatex noch ein paar Zeilen ausgibt) – Shahbaz

61

Leider (La) TeX halten nicht wirklich an die Regeln der stdout und sterr wegen (ich nehme an) zu seinen Ursprung in den frühen 80er Jahren. Es gibt jedoch einige Schalter, die Sie aufrufen können, um die Menge der angezeigten Informationen zu ändern.

Führen Sie latex mit den -interaction=nonstopmode oder -interaction=batchmode Schaltern für nicht haltendes Verhalten auch bei einem Syntaxfehler aus. nonstopmode wird alle üblichen Zeilen drucken, es wird einfach nicht aufhören. batchmode unterdrückt alle außer einer Handvoll deklarativer Zeilen ("das ist pdfTeX v3.14 ...").

Diese können auch innerhalb des Dokuments mit \batchmode und \nonstopmode aufgerufen werden, aber das ist weniger nützlich für die Situation, die Sie beschreiben.

+0

Was meinst du mit "hält sich nicht wirklich an die Regeln von' stdout' und 'stderr'?" Werden andere Ausgabeströme verwendet? –

+0

@Matthew es ist eine Weile her, seit ich das betrachtete, aber mein Gedächtnis ist, dass versucht, nur umzuleiten, sagen die Fehlermeldungen irgendwo überhaupt nicht funktioniert. Aber ich könnte mich irren; Entschuldigung, um vage zu sein. –

+0

@Matthew Leinfang: durch Zufall fand ich [Re: Silencing Latex (leise/Batch-Modus)?] (Http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2007-09/msg00520.html); Ich glaube das klärt auf? Prost! – sdaau

Verwandte Themen