Questão Converta o Mathematica para PDF via linha de comando


Eu 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.


3


origem




Respostas:


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 notebook a partir do 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 fazer 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 Mathematica - Ele pode ser facilmente transformado em um arquivo de notebook ou pacote.

Salve o seguinte código 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}]]

5



Isso parece promissor. Eu tentei, mas eu peguei error: 8: Exec format error. Alguma ideia do que isso poderia significar? - Martin Ueding
@queueoverflow: Eu não vi esse erro antes. Algum roteiro do Mathematica funciona para você? Tente isso script "olá mundo". Ou será que o script nb2pdf falha em alguns arquivos? - Simon
Exatamente o mesmo erro com o script de dois hello line… - Martin Ueding
@queueoverflow: ok, tente executar o programa "hello world" usando math -script hello Se isso não funcionar, apague a linha shebang (#!) e tente novamente. - Simon
math -script ~/bin/nb2pdf filename funciona para mim agora. Obrigado pelo roteiro! - Martin Ueding