I am on Linux and would like to convert a bunch of Mathematica 8 Notebooks to PDF.
Is there some way to convert them on the command line? I'd like to write a makefile rule for the conversion, so that I can batch convert many of them.
I am on Linux and would like to convert a bunch of Mathematica 8 Notebooks to PDF.
Is there some way to convert them on the command line? I'd like to write a makefile rule for the conversion, so that I can batch convert many of them.
Basically, there is no way to convert Mathematica notebooks into PDFs without invoking the frontend. To print or convert it, you first need to open it and a naive attempt to open a notebook from the Mathematica command line yields the error FrontEndObject::notavail
In[1]:= NotebookOpen["file.nb"]
FrontEndObject::notavail:
A front end is not available; certain operations require a front end.
This means that you could either make a notebook to do the conversion or call the frontend from the command line. Here's a solution in the form of a Mathematica script - it can easily be turned into a Notebook or package file.
Save the following code as nb2pdf, make it executable and place it the directory with the files you want to convert or somewhere in your path.
#!/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}]]
Something that works with Mathematica 13: 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