Konvertieren Sie Mathematica in PDF über die Befehlszeile

2665
Martin Ueding

Ich bin unter Linux und möchte ein paar Mathematica 8 Notebooks nach PDF konvertieren.

Gibt es eine Möglichkeit, sie in der Befehlszeile zu konvertieren? Ich möchte eine Makefile-Regel für die Konvertierung schreiben, damit ich viele davon stapelweise konvertieren kann.

3

1 Antwort auf die Frage

5
Simon

Grundsätzlich gibt es keine Möglichkeit, Mathematica-Notizbücher in PDF-Dateien zu konvertieren, ohne das Frontend aufzurufen. Um es zu drucken oder zu konvertieren, müssen Sie es zuerst öffnen, und ein naiver Versuch, ein Notizbuch über die Mathematica-Befehlszeile zu öffnen, führt zu dem Fehler FrontEndObject :: notavail

In[1]:= NotebookOpen["file.nb"]  FrontEndObject::notavail:  A front end is not available; certain operations require a front end. 

Das bedeutet, dass Sie entweder ein Notebook für die Konvertierung erstellen oder das Frontend von der Befehlszeile aus aufrufen können. Hier ist eine Lösung in Form eines Mathematica-Skripts - es kann leicht in eine Notebook- oder Paketdatei umgewandelt werden.

Speichern Sie den folgenden Code als nb2pdf, machen Sie ihn ausführbar und platzieren Sie das Verzeichnis mit den Dateien, die Sie konvertieren möchten, oder irgendwo in Ihrem Pfad.

#!/usr/local/bin/MathematicaScript -script  (* Convert Mathematica notebooks to PDFs *) (* usage: nb2pdf file1.nb file2.nb etc... *) (* outputs: file1.pdf file2.pdf etc... into the current directoy *) (* If called with no filenames, this script *) (* will convert all notebook files in the current directory *)  dir = Directory[]; files = {}; expandNb = False; (* Expand all cell groups in the Notebook *)  If[Length[$ScriptCommandLine] > 1,  Do[If[FileExistsQ[file],  AppendTo[files, file],  Print["File " <> file <> " does not exist"]], ], files = FileNames["*.nb"]];  With[, Do[nb = UFE@NotebookOpen[FileNameJoin[]]; If[expandNb, UFE@SelectionMove[nb, All, Notebook];  UFE@FrontEndExecute[FrontEndToken["SelectionOpenAllGroups"]]]; UFE@NotebookPrint[nb, FileNameJoin[]]; UFE@NotebookClose[nb], ]] 
Das sieht vielversprechend aus. Ich habe es ausprobiert, aber ich habe `error: 8: Exec format error` erhalten. Irgendeine Idee, was das bedeuten könnte? Martin Ueding vor 12 Jahren 0
@queueoverflow: Ich habe diesen Fehler noch nicht gesehen. Funktionieren irgendwelche Mathematica-Skripte für Sie? Versuchen Sie es mit diesem Skript "Hallo Welt" (http://mathematica.stackexchange.com/q/648/34). Oder schlägt das nb2pdf-Skript bei einigen Dateien fehl? Simon vor 12 Jahren 0
Genau derselbe Fehler mit dem zweizeiligen Hallo-Weltskript… Martin Ueding vor 12 Jahren 0
@queueoverflow: ok, versuchen Sie, das Programm "Hallo Welt" mit "math-script hallo" auszuführen. Wenn dies nicht funktioniert, löschen Sie die Shebang (#!) - Zeile und versuchen Sie es erneut. Simon vor 12 Jahren 0
`math -script ~ / bin / nb2pdf dateiname` funktioniert jetzt für mich. Danke für das Skript! Martin Ueding vor 12 Jahren 0
Kann ich Ihr Skript in einem Open Source-Projekt verwenden? Martin Ueding vor 12 Jahren 0
@queueoverflow: Sicher. Sie müssen nicht einmal den Ursprung des Codes angeben, wenn Sie nicht möchten. Simon vor 12 Jahren 0