Basicamente, não há como converter os notebooks do Mathematica em PDFs sem invocar o frontend. Para imprimir ou convertê-lo, primeiro você precisa abri-lo e uma tentativa ingênua de abrir um bloco de anotações da linha de comando do Mathematica produz o erro FrontEndObject::notavail
In[1]:= NotebookOpen["file.nb"]
FrontEndObject::notavail:
A front end is not available; certain operations require a front end.
Isso significa que você pode criar um bloco de anotações para fazer a conversão ou chamar o frontend a partir da linha de comando. Aqui está uma solução na forma de um script do Mathematica - ele pode ser facilmente transformado em um bloco de anotações ou arquivo de pacote .
Salve o código a seguir como nb2pdf
, torne-o executável e coloque-o no diretório com os arquivos que você deseja converter ou em algum lugar em seu caminho.
#!/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}]]