粘贴Mathematica代码,以便将其分解为单独的输入单元格

时间:2011-11-07 08:42:11

标签: wolfram-mathematica cells mathematica-frontend

我经常将Mathematica代码从网站(例如SO)复制到笔记本中。代码通常被粘贴为单个输入单元格。我正在寻找一种简单的方法将其粘贴为几个输入单元格,以便于逐步评估。

例如,

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

Plot[f[x], {x,0,2}]
理想情况下,

会粘贴为两个输入单元格。最好还应保留手动格式(即原始换行符)(默认粘贴不是这种情况)。

通常,如果选择所有输入单元格(ALT-单击),将它们复制到文本编辑器中,然后将生成的文本复制回笔记本,应该与复制的原始单元格相当。

2 个答案:

答案 0 :(得分:15)

或....你可以在你要分开你的那个点的时候点击 Ctrl + Shift + D 细胞分成2个独立的细胞。有时将多个操作分组到单个单元中是有利的(或者不是将它们拆分为开头)。要撤消此类拆分,请选择两个单元格(如果您愿意,也可以选择2个以上),然后单击 Ctrl + Shift + M 进行合并他们合二为一。

答案 1 :(得分:0)

这是一个简单的实现(我也很感谢代码审查,我不擅长前端编程):

(* This converts a sequence of expressions into boxes *)
Clear[makeManyBoxes]
SetAttributes[makeManyBoxes, HoldAllComplete];
makeManyBoxes[e__] := List@ReleaseHold[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"]]

CreatePalette@Button["Paste!",
  Module[{clipboard},
   clipboard = NotebookGet[ClipboardNotebook[]][[1, 1, 1]];
   If[StringQ[clipboard],

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

它在空行处打破细胞。为此,我们需要首先解析表达式(如果空行显示在长Module的中间,会怎样?)。但是单独解析会导致一些问题。

此实施的问题:

  • 删除了评论
  • 无法处理错误输入
  • 它不保留格式(换行符)
  • 我确信必须有其他一些可能出错的事情