Оцените текущую ячейку, не оставляя или не теряя в ней позицию в Mathematica

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

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

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

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];

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

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 + ENTER внутри ячейки ноутбука Mathematica. Речь идет не о содержании или манипуляции. Извините за то, что вы не поняли это в начале.

Временная заметка

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

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

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

Ответ 1

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

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];

Ответ 2

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

Manipulate[
 c = a;
 b = Nest[[email protected], 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}]

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

enter image description here

Ответ 3

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

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

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}]

Ответ 4

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

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

Ответ 5

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

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