Оцените текущую ячейку, не покидая и не теряя позиции в ней в Mathematica - PullRequest
10 голосов
/ 12 декабря 2011

Я экспериментирую с дизайном логотипов в Mathematica (8 или выше), используя интерфейс ноутбука, и я хочу изменить формулу генерации A LOT. Проблема в том, что я знаю только SHIFT + ENTER, что заставляет меня выпрыгнуть из моей текущей ячейки и потерять свою позицию.

Есть ли способ оценить текущую ячейку, не покидая ее и не теряя в ней свою позицию? Итак: оцените ячейку и вернитесь обратно внутрь той же ячейки в том же положении, в котором я нажал SHIFT + ENTER при .

То, что я однажды использовал, было примерно таким:

a = Exp[1.994 \[Pi]/(3 I)];

b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5];

{Re[#], Im[#]} & /@ 
   Accumulate[
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
     Line} & // Graphics

NotebookFind[EvaluationNotebook[], "E" <> "xp", Previous];

но я надеюсь, что есть еще одна комбинация клавиш или что-то еще. что я не знаю.

Edit:

a = Exp[(*1*)1.994 \[Pi]/(3 I)];

b = Nest[{#, a #, a\[Conjugate] #, #} &, (*2*)1, (*3*)5];

{Re[#], Im[#]} & /@ 
   Accumulate[
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
     Line} & // Graphics

Do[NotebookFind[EvaluationNotebook[], "(*1*)", Previous], {2}];

- приятное небольшое улучшение моего решения, частично предложенное Крисом Денгеном.

Редактировать 2:

NotebookFind[EvaluationNotebook[], "(*1*)", EvaluationCell]

Это решает:

  • они работают только с ячейками, которые производят одну или известное количество выходных ячеек

EvaluationCell редко документируется, так что трудно его найти, на самом деле я наткнулся на него. Используя EvaluationCell, поиск начинается сверху (исключая конструкцию Do дважды), так как мы не получаем выходную ячейку, расположенную ниже по экрану.

Что еще предстоит решить:

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

Примечание Это вопрос о том, чтобы не потерять текущую позицию, если нажать клавишу SHIFT + ВВОД внутри ячейки ноутбука Mathematica. Это не о содержании или манипулировании. Извините, что не разъяснил это в начале.

Временное примечание

Теперь попробуем следующее:

  1. использовать обработчики событий для определения альтернативной комбинации клавиш оценки
  2. при запуске найдите способ сохранить точное положение клавиатуры в текущей ячейке ввода
  3. оценка текущей входной ячейки
  4. восстановить позицию в текущей ячейке ввода

Я внутренне надеюсь, что какая-то функция может просто позаботиться о сохранении / восстановлении, случайно будучи оптимистичной. Будучи реалистичным, я сначала надеюсь, что смогу найти способ добраться до текущей позиции клавиатуры. Будем следить здесь, если что-нибудь материализуется из моей попытки.

Ответы [ 5 ]

5 голосов
/ 12 декабря 2011

Вы можете запускать эту ячейку снова и снова:

If[NumberQ[x], x++, x = 1];
Print[x]
Do[SelectionMove[EvaluationNotebook[], Previous, Cell], {2}]

Эта версия помещает курсор после Exp в строке 1:

a = Exp[1.994 \[Pi]/(3 I)];
b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5];
{Re[#], Im[#]} & /@ 
   Accumulate[
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {# // 
     Line} & // Graphics
Do[NotebookFind[EvaluationNotebook[], "Exp", Previous], {3}];
SelectionMove[EvaluationNotebook[], "Exp", After];
3 голосов
/ 12 декабря 2011

Как насчет использования Manipulate? Что-то вроде

Manipulate[
 c = a;
 b = Nest[First@f, 1, 
   5]; {Re[#], Im[#]} & /@ 
    Accumulate[
     Flatten[{0, c b, c\[Conjugate] b, -b}]] // {Red, # // Line} & // 
  Graphics, {a, Exp[1.994 \[Pi]/(3 I)], 
  ControlType -> InputField}, {f, 
  HoldForm[{#, c #, c\[Conjugate] #, #} &], ImageSize -> Full, 
  ControlType -> InputField}]

Вы можете просто отредактировать значения, и после нажатия Enter получить новую версию графика. Вы можете сохранить понравившиеся примеры, используя кнопку «+» в верхнем правом углу Manipulate, чтобы установить закладки или вставить снимок.

enter image description here

2 голосов
/ 13 декабря 2011

Вы можете использовать низкоуровневое программирование записной книжки и функцию под названием закрепленные ячейки, чтобы добавить ячейку в верхнюю часть записной книжки, которая будет выполнять текущую ячейку.Это (теоретически, не пробовал) не должно занимать позицию курсора из ячейки.чтобы программно создать закрепленную ячейку, создайте ячейку, в которой есть кнопка, которая делает то, что вы хотите, затем выполните этот код: SetOptions[SelectedNotebook[],"DockedCells"->{Cell[ BoxData[ToBoxes[...your code for execute button...]] , "DockedCell"]}];

Я делаю это все время с корпоративным логотипом в качестве фиксированной ячейки или «Копироватькак обычный текст "/" Копировать как растровое изображение ".На ноутбуках, которые сильно портят ядро, я добавляю кнопки для управления памятью или даже перезагружаю ядро.Просто серия ярлыков.Вы можете сложить более одного объекта Cell [] как закрепленные ячейки.

2 голосов
/ 12 декабря 2011

Вы можете использовать динамический, чтобы сделать вещи действительно хорошими.

Ячейка для отображения приводит к:

Dynamic[b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5];]
Dynamic[{Re[#], Im[#]} & /@ 
    Accumulate[
     Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
      Line} & // Graphics]

Ячейка для редактирования в:

k = 1.994;
a = Exp[k \[Pi]/(2 I)];
NotebookFind[EvaluationNotebook[], ToString[k], Previous];

Затем вы можете просто отредактировать ячейку под отображаемой. Он автоматически помещает вас туда, где вы ввели свое значение. Если вы хотите сделать вещи еще проще для себя, вы можете использовать Manipulate:

Manipulate[a = Exp[k \[Pi] / (f I)];
 b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5];
 {Re[#], Im[#]} & /@ 
    Accumulate[
     Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
      Line} & // Graphics,
 {{k, 1.994}, -3, 3},
 {{f, 3}, -3, 3}]
1 голос
/ 12 декабря 2011

Есть функция под названием «оценить на месте», которая позволяет вам выбрать секцию ячейки и просто оценить ее.На Mac это Command-Enter, а не control-Enter.

Посмотрите на меню Evaluate, там должен быть пункт меню вместе со связанной комбинацией сочетаний клавиш.

...