Converta o Mathematica para PDF via linha de comando

3

Estou no Linux e gostaria de converter um monte de Notebooks do Mathematica 8 para PDF.

Existe alguma maneira de convertê-los na linha de comando? Eu gostaria de escrever uma regra de makefile para a conversão, para que eu possa converter muitos deles em lote.

    
por Martin Ueding 24.01.2012 / 14:43

1 resposta

5

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}]]
    
por 25.01.2012 / 04:23