8

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

例如,

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

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

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

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

4

2 回答 2

15

或者....您可以在想要将单个单元格拆分为 2 个单独的单元格的位置点击Ctrl++ 。有时,将多个操作分组到一个单元格中(或者不要一开始就将它们拆分)是有利的。要撤消这样的拆分,请选择两个单元格(如果您愿意,可以选择两个以上),然后单击+ +将它们合并为一个。ShiftDCtrlShiftM

于 2011-11-07T18:08:56.323 回答
1

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

(* 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"]
    ]
   ]
  ]

它会在空行处打断单元格。为此,我们需要先解析表达式(如果一个空行出现在 long 的中间Module怎么办?)。但是单独解析会导致几个问题。

此实现的问题:

  • 它删除评论
  • 它无法处理不正确的输入
  • 它不保留格式(换行符)
  • 我确定肯定还有其他一些可能出错的地方
于 2011-11-07T09:25:28.307 回答