Wolfram mathematica 粘贴一个代码,以便';是它';s被分成不同的输入单元

Wolfram mathematica 粘贴一个代码,以便';是它';s被分成不同的输入单元,wolfram-mathematica,cells,mathematica-frontend,Wolfram Mathematica,Cells,Mathematica Frontend,我经常将Mathematica代码从网站(如SO)复制到笔记本上。代码通常粘贴为单个输入单元格。我正在寻找一种简单的方法,将其粘贴为多个输入单元格,以便于逐步评估 比如说, a = 2; f[x_] := x^a Plot[f[x], {x,0,2}] 理想情况下将粘贴为两个输入单元格。手动格式(即原始换行符)最好也应保留(默认粘贴时不是这种情况) 通常,如果选择所有输入单元格(ALT单击),将其复制到文本编辑器中,然后将生成的文本复制回笔记本,则应获得与复制的原始单元格近似的等效值。这是一

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

比如说,

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

Plot[f[x], {x,0,2}]
理想情况下将粘贴为两个输入单元格。手动格式(即原始换行符)最好也应保留(默认粘贴时不是这种情况)


通常,如果选择所有输入单元格(ALT单击),将其复制到文本编辑器中,然后将生成的文本复制回笔记本,则应获得与复制的原始单元格近似的等效值。

这是一个简单的实现(我也希望进行代码审查,我不擅长前端编程):

它在空行处打断单元格。为此,我们需要首先解析表达式(如果一个空行出现在长<代码>模块中的中间位置)。但是单是解析就会引起一些问题

此实施中的问题:

  • 它删除注释
  • 它不能处理错误的输入
  • 它不保留格式(换行)
  • 我肯定还有其他一些事情会出错

    • 或。。。。您只需按Ctrl+Shift+D键,即可将单个单元格拆分为两个单独的单元格。有时,将多个操作分组到一个单元(或者不首先拆分它们)是有利的。要撤消这样的拆分,请选择两个单元格(如果您愿意,可以选择两个以上),然后单击Ctrl+Shift+M将它们合并为一个单元格。

      现在我们需要一个可以提取笔记本并生成SO post的工具,交错输入和输出单元格,包括图形和注释输出单元格…@belisarius一个好的开始应该是imgur上传程序。imgur[g]应该以适当的宽度将参数(到PNG)光栅化为SO,将其上载到imgur,并返回准备粘贴的标记:
      [mma](http://i.imgur.com/ZENa4.jpg)
      这应该是一个很好的起点,但我在改编上失败了:编辑:我想我会把它变成一部电影question@Szabolcs在这种情况下,难怪你问这个问题。那太烦人了+我也不知道那条捷径。我只是和它生活在一起,并认为没有什么可以做的。@Szabolcs是的,这是分割和合并的标准快捷方式。现在我想要的是创建/取消创建初始化单元格的快捷方式。没有标准,阿福。有什么建议吗?@magma Alt+C P I切换初始化的速度非常快。@Gr3gK1+1。谢谢你的建议。我不知道Ctrl+Shift+M。至于
      单元格->分割单元格
      (Ctrl+Shift+D),插入点将单元格一分为二,而文本选择将单元格一分为三:之前的所有内容、文本选择和之后的所有内容。看(我也不知道这件事,直到我读了你的答案后才知道)。
      (* 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"]
          ]
         ]
        ]