Вставить код Mathematica, чтобы он разбился на отдельные входные ячейки

Я часто копирую код Mathematica с веб-сайтов (например, SO) в блокнот. Код обычно вставляется как отдельная ячейка ввода. Я ищу простой способ вставить его как несколько ячеек ввода для удобной пошаговой оценки.

Например,

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

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

идеально вставлял бы как две входные ячейки. Также желательно сохранить форматирование вручную (то есть оригинальные символы новой строки) (это не относится к приклеиванию по умолчанию).

Как правило, если вы выбираете все входные ячейки (ALT-клик), копируете их в текстовый редактор, затем копируете полученный текст обратно в блокнот, нужно получить близкий эквивалент исходных ячеек, которые были скопированы.

Ответ 1

Или... вы можете просто нажать Ctrl + Shift + D в точке, где вы хотите разделить свою ячейку на две отдельные ячейки. Несколько раз выгодно группировать несколько операций в одну ячейку (или, скорее, не разбить их для начала). Чтобы отменить такой раскол, выберите обе ячейки (или более 2, если хотите) и нажмите Ctrl + Shift + M, чтобы объединить их в один.

Ответ 2

Это простая реализация (я также ценю обзор кода, я не очень хорошо разбираюсь в программировании на конце):

(* 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?). Но синтаксический анализ в одиночку вызовет несколько проблем.

Проблемы с этой реализацией:

  • удаляет комментарии
  • он не может обрабатывать неверные входы
  • он не сохраняет форматирование (новые строки)
  • Я уверен, что должно быть несколько других вещей, которые могут пойти не так.