Вставить код 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
?). Но синтаксический анализ в одиночку вызовет несколько проблем.
Проблемы с этой реализацией:
- удаляет комментарии
- он не может обрабатывать неверные входы
- он не сохраняет форматирование (новые строки)
- Я уверен, что должно быть несколько других вещей, которые могут пойти не так.