Вставьте код Mathematica так, чтобы он был разбит на отдельные входные ячейки - PullRequest
8 голосов
/ 07 ноября 2011

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

Например,

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 07 ноября 2011

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

0 голосов
/ 07 ноября 2011

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

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

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

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