Convierta Mathematica a PDF mediante la línea de comando

Convierta Mathematica a PDF mediante la línea de comando

Estoy en Linux y me gustaría convertir un montón de cuadernos de Mathematica 8 a PDF.

¿Hay alguna forma de convertirlos en la línea de comando? Me gustaría escribir una regla de archivo MAKE para la conversión, de modo que pueda convertir muchos de ellos por lotes.

Respuesta1

Básicamente, no hay forma de convertir cuadernos de Mathematica en archivos PDF sin invocar la interfaz. Para imprimirlo o convertirlo, primero debe abrirlo y un intento ingenuo de abrir un cuaderno desde elLínea de comando de Matemáticaproduce el error FrontEndObject::no disponible

In[1]:= NotebookOpen["file.nb"]

FrontEndObject::notavail: 
   A front end is not available; certain operations require a front end.

Esto significa que puede crear un cuaderno para realizar la conversión o llamar a la interfaz desde la línea de comando. Aquí tienes una solución en forma deguión matemático- Se puede convertir fácilmente en un cuaderno o en un archivo de paquete.

Guarde el siguiente código como nb2pdf, hágalo ejecutable y colóquelo en el directorio con los archivos que desea convertir o en algún lugar de su ruta.

#!/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}]]

Respuesta2

Algo que funciona con 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

información relacionada