在Mathematica中评估当前单元格而不离开或丢失其中的位置

Cet*_*ert 10 user-interface wolfram-mathematica mathematica-frontend

我正在使用笔记本界面在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];
Run Code Online (Sandbox Code Playgroud)

但我希望只有另一个关键组合或某事.我不知道.

编辑:

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}];
Run Code Online (Sandbox Code Playgroud)

正如Chris Dengen所提出的那样,对我的解决方案来说是一个不错的改进.

编辑2:

NotebookFind[EvaluationNotebook[], "(*1*)", EvaluationCell]
Run Code Online (Sandbox Code Playgroud)

这解决了:

  • 这些仅适用于产生一个或已知数量的输出单元的单元

EvaluationCell记录很少,很难找到,事实上我只是偶然发现它.使用EvaluationCell,搜索从上面开始(消除Do两次构造),因为我们不是来自屏幕下方的输出单元.

还有待解决的问题:

  • 人们需要进行手动细胞保持(细胞水平记录)以在感兴趣的地方着陆
  • 使用基于注释的着陆标记会使输入单元格混乱

注意 此问题是关于在Mathematica笔记本单元格中按SHIFT + ENTER时不会丢失当前位置.它不是关于内容或Manipulate.很抱歉没有在开头说清楚.

临时说明

现在尝试以下方法:

  1. 使用事件处理程序来定义备用评估组合键
  2. 触发时,找到一种方法来存储当前输入单元格中的确切键盘位置
  3. 评估当前的输入单元格
  4. 恢复当前输入单元格中的位置

我内心希望某些功能可能只是照顾商店/恢复机会是乐观的.尽管如此,我首先希望我能找到一种方法来获得当前的键盘位置.如果我的尝试有任何实现,将在此处跟进.

Chr*_*nen 5

您可以反复运行此单元格:

If[NumberQ[x], x++, x = 1];
Print[x]
Do[SelectionMove[EvaluationNotebook[], Previous, Cell], {2}]
Run Code Online (Sandbox Code Playgroud)

此版本将光标放在第1行的Exp之后:

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];
Run Code Online (Sandbox Code Playgroud)