3

Я нахожусь на Linux и хотел бы преобразовать кучу Mathematica 8 Notebooks в PDF.

Есть ли способ конвертировать их в командной строке? Я хотел бы написать правило make-файла для преобразования, чтобы я мог конвертировать многие из них.

1 ответ1

5

По сути, нет способа конвертировать блокноты Mathematica в PDF-файлы без использования внешнего интерфейса. Чтобы распечатать или преобразовать его, сначала нужно открыть его, и наивная попытка открыть записную книжку из командной строки Mathematica выдает ошибку FrontEndObject::notavail

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

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

Это означает, что вы можете сделать блокнот для преобразования или вызвать веб-интерфейс из командной строки. Вот решение в виде сценария Mathematica - его можно легко превратить в файл Notebook или пакет.

Сохраните следующий код как nb2pdf , сделайте его исполняемым и поместите его в каталог с файлами, которые вы хотите преобразовать, или где-нибудь на вашем пути.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .