Я не уверен, что следующий подход удовлетворит вас: однажды я хотел создать компактные блокноты, содержащие только ячейки инициализации, найденные в моем блокноте разработки; следующий код записывает ячейки инициализации текущей записной книжки в одну новую записную книжку и автоматически сохраняет файл .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.
person
fairflow
schedule
14.02.2013
BoxForm
: я работаю с ведомыми ядрами Mathematica 5.2. Но мы могли бы преобразовать ячейку вInputForm
на лету. - person Alexey Popkov   schedule 11.04.2011