2011-04-08 46 views
2

有沒有辦法創建Notebook,其中每個初始化Cell將自動保存在它自己的.m文件中的任意名稱?一個筆記本中的兩個初始化單元每個自動保存在單獨的.m文件中?

P.S.這個問題與Wolfram Research Inc.開發的Mathematica程序有關。它不是數學或數學。

+0

我不知道答案,但只是好奇:你爲什麼想這樣做? – 2011-04-08 03:29:30

+0

我不認爲這是可以做到的。你可能會編寫一個初始化單元來評估代碼並將其寫入一個唯一的文件,但我認爲這隻會在初始化單元評估時發生,而不是每次保存文件。 – 2011-04-08 03:39:07

+0

@belisarius原因是我正在開發一個旨在通過MathLink使用從內核的應用程序。我需要一個單獨的內核初始化文件。我覺得把我所有的代碼放在**一個**筆記本中是非常舒服的。 – 2011-04-08 03:41:19

回答

1

我不確定下列方法是否能滿足您的要求:我曾經想過一種生成包含我的開發筆記本中初始化單元格的小型筆記本電腦的方法;下面的代碼將當前筆記本的初始化單元寫入單個新筆記本中,並自動保存.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版本中倖存下來。

+0

哦,@ BrettChampion的按鈕或類似的想法將需要這種方法;它不會自動保存。可能有一種方法可以修改前端以便在每次保存時運行此操作。我不知道該怎麼做。 – fairflow 2013-02-14 17:17:39

相關問題