Ich verwende Linux und möchte eine Reihe von Mathematica 8-Notizbüchern in PDF konvertieren.
Gibt es eine Möglichkeit, sie über die Befehlszeile zu konvertieren? Ich möchte eine Makefile-Regel für die Konvertierung schreiben, damit ich viele davon stapelweise konvertieren kann.
Antwort1
Grundsätzlich gibt es keine Möglichkeit, Mathematica-Notebooks in PDFs umzuwandeln, ohne das Frontend aufzurufen. Um es zu drucken oder zu konvertieren, müssen Sie es zuerst öffnen und einen naiven Versuch unternehmen, ein Notebook aus demMathematica-Befehlszeileergibt den Fehler FrontEndObject::nichtverfügbar
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 über die Befehlszeile aufrufen können. Hier ist eine Lösung in Form einesMathematica-Skript– es kann einfach in ein Notebook oder eine Paketdatei umgewandelt werden.
Speichern Sie den folgenden Code als nb2pdf
, machen Sie ihn ausführbar und platzieren Sie ihn im Verzeichnis mit den zu konvertierenden Dateien 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"]],
{file, Rest[$ScriptCommandLine]}],
files = FileNames["*.nb"]];
With[{UFE = UsingFrontEnd},
Do[nb = UFE@NotebookOpen[FileNameJoin[{dir, file}]];
If[expandNb, UFE@SelectionMove[nb, All, Notebook];
UFE@FrontEndExecute[FrontEndToken["SelectionOpenAllGroups"]]];
UFE@NotebookPrint[nb, FileNameJoin[{dir, FileBaseName[file]<>".pdf"}]];
UFE@NotebookClose[nb], {file, files}]]
Antwort2
Etwas, das mit Mathematica 13 funktioniert: https://knanagnostopoulos.blogspot.com/2023/01/convert-many-mathematica-notebooks-to.html
nb2pdf (){ for f in $@;do echo -n "Converting $f to pdf ... "; wolframscript -code nb=\"$f\"';FileConvert[nb, "PDF"];' ;done; }
nb2pdf *.nb