2011-11-07 50 views
8

我經常將Mathematica代碼從網站(例如SO)複製到筆記本中。該代碼通常被粘貼爲單個輸入單元格。我正在尋找一種簡單的方法將其粘貼爲多個輸入單元格,以便進行方便的逐步評估。粘貼Mathematica代碼,以便將其分解爲單獨的輸入單元格

例如,

a = 2; 
f[x_] := x^a 

Plot[f[x], {x,0,2}] 

將理想地粘貼爲兩個輸入的細胞。手動格式(即原始換行符)最好也應該保留(默認粘貼時不是這種情況)。

通常,如果選擇所有輸入單元格(按住ALT單擊),將它們複製到文本編輯器中,然後將結果文本複製回筆記本中,應該得到與複製的原始單元格近似相等的值。

回答

15

或....你可以j ust Hit Ctrl + Shift + D您希望將您的單元格分爲兩個單獨的單元格。有時將多個操作分組到單個單元格中(或者不要將它們拆分開始)是有利的。要撤消這種拆分,請選擇兩個單元格(或者如果您願意,可以多於2個)並單擊Ctrl + Shift + M將它們合併爲一個。

+2

+1,我不知道這個快捷方式 – Szabolcs

+1

@Szabolcs在這種情況下難怪你問這個問題。這會很煩人! –

+0

+1,我也不知道那條捷徑。我剛剛生活在一起,並認爲沒有什麼可以做的。 – rcollyer

0

這是一個簡單的實現(我也很感激代碼審查,我不是在前端編程好):

(* This converts a sequence of expressions into boxes *) 
Clear[makeManyBoxes] 
SetAttributes[makeManyBoxes, HoldAllComplete]; 
makeManyBoxes[e__] := [email protected][MakeBoxes /@ HoldComplete[e]] 

(* Split a list at separator *) 
split[list_, sep_] := 
DeleteCases[Split[list, #1 =!= sep && #2 =!= sep &], {sep}] 

wr[e_] := NotebookWrite[InputNotebook[], Cell[BoxData[e], "Input"]] 

[email protected]["Paste!", 
    Module[{clipboard}, 
    clipboard = NotebookGet[ClipboardNotebook[]][[1, 1, 1]]; 
    If[StringQ[clipboard], 

    wr /@ 
    split[ToExpression[clipboard, InputForm, makeManyBoxes], "Null"] 
    ] 
    ] 
    ] 

它在空行破壞細胞。爲此,我們需要首先解析表達式(如果空行出現在長Module的中間怎麼辦?)。但單獨解析會導致幾個問題。

問題與此實現:

  • 它刪除評論
  • 它不能處理不正確輸入
  • 它不保留格式(新行)
  • 我敢肯定有必須是其他幾件可能出錯的東西
+2

現在,我們需要一些能夠提取筆記本並生成SO帖子,交錯輸入和輸出單元格,包括圖形和註釋輸出單元的內容...... –

+0

@belisarius一個好的開始將是一個imgur上傳器。 imgur [g]應該以適當的寬度柵格化參數(對於PNG),將其上傳到imgur,然後返回準備粘貼的標記:'[mma](http://i.imgur.com/ZENa4。 jpg)'這應該是一個很好的起點,但是我無法適應它:http://stackoverflow.com/q/5853134/695132 **編輯:**我想我會提出一個問題 – Szabolcs

相關問題