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

时间:2011-12-12 19:00:58

标签: 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];

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

修改

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

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

编辑2:

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

这解决了:

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

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

还有待解决的问题:

  • 需要手动细胞保存(细胞水平记账)才能降落在感兴趣的地方
  • 使用基于注释的着陆标记使输入单元格混乱

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

临时说明

现在尝试以下方法:

  1. 使用事件处理程序来定义备用评估组合键
  2. 触发时,找到一种方法来存储当前输入单元格中的确切键盘位置
  3. 评估当前输入单元格
  4. 恢复当前输入单元格中的位置
  5. 我内心希望某些功能可能只是照顾商店/恢复偶然是乐观的。尽管如此,我首先希望我能找到一种方法来获得当前的键盘位置。如果在我的尝试中出现任何问题,我们会在此处跟进。

5 个答案:

答案 0 :(得分:5)

您可以一遍又一遍地运行此单元格:

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

此版本将光标放在第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];

答案 1 :(得分:3)

如何使用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}]

您可以只编辑这些值,点击后输入即可获得新版本的图表。您可以使用&#39; +&#39;来保存您喜欢的示例。 Manipulate右上角的按钮,可以设置书签或粘贴快照。

enter image description here

答案 2 :(得分:2)

你可以使用动态来使事情变得非常好。

要显示的单元格为:

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

答案 3 :(得分:2)

您可以使用低级笔记本编程和称为停靠单元格的功能将单元格添加到笔记本的顶部,该单元格将执行当前单元格。这(理论上还没有尝试过)不应该将光标位置从单元格中取出。以编程方式创建停靠的单元格,创建一个具有按钮的单元格,然后执行此代码:SetOptions[SelectedNotebook[],"DockedCells"->{Cell[ BoxData[ToBoxes[...your code for execute button...]] , "DockedCell"]}];

我一直这样做,公司徽标作为固定单元格或“复制为纯文本”/“复制为位图”按钮。在大量搞乱内核的笔记本上,我添加了用于内存管理的按钮,甚至重新启动了内核。只是一系列的快捷方式。您可以将多个Cell []对象堆叠为停靠的单元格。

答案 4 :(得分:1)

有一个名为'就地评估'的功能,它允许您选择一个单元格的一部分,并只评估它。在Mac上它是命令 - 输入,而不是控制 - 输入。

查看“评估”菜单,菜单条目应与快捷键组合在一起。