Я не уверен, удовлетворит ли вас следующий подход: я когда-то хотел создать компактный блокнот, содержащий только ячейки инициализации, найденные в моем блокноте для разработки; следующий код записывает ячейки инициализации текущей записной книжки в одну новую записную книжку и автоматически сохраняет файл .m как побочный эффект, но его можно легко адаптировать для создания отдельной записной книжки и файла .m для каждой ячейки инициализации.
In[162]:= nbToExtract = SelectedNotebook[]
In[163]:=
extractInitializationCells[nb_] :=
Block[{nbNew = CreateDocument[], count = 0},
(SelectionMove[nb, Next, Cell];
While[NotebookRead[nb] =!= {}, (If[InitializationCell /.
Options[NotebookSelection[nb], InitializationCell],
(count++;
NotebookWrite[nbNew, NotebookRead[nb]]), {}]; SelectionMove[nb, Next, Cell])];
Print[ToString[count] <> " initialization cell(s) found"];
CurrentValue[nbNew, AutoGeneratedPackage] = Automatic;
NotebookSave[nbNew, fn];
NotebookClose[nbNew];
Clear[nbNew](* just in case *))]
extractInitializationCells[nbToExtract]
Это извлекает только ячейки инициализации ниже ячейки, в которой вызывается функция extractInitializationCells
. И я согласен с предыдущими предостережениями об использовании механизма пакета автоматической генерации. Кроме того, CurrentValue
не защищен на неопределенный срок от обратной несовместимости, но до сих пор сохранился в нескольких основных версиях Mathematica.