Konvertieren Sie Mathematica über die Befehlszeile in PDF

Konvertieren Sie Mathematica über die Befehlszeile in PDF

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

verwandte Informationen