11

我正在使用笔记本界面在 Mathematica(8 或更高版本)中尝试徽标设计,我想更改生成公式很多。问题是我只知道 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 的文档很少,所以很难找到,事实上我只是偶然发现了它。使用 EvaluationCell 搜索从上方开始(消除 Do 两次构造),因为我们不是来自屏幕下方的输出单元格。

尚待解决的问题:

  • 需要手动记录单元格(单元格级别的簿记)以降落在感兴趣的地方
  • 使用基于注释的着陆标记会使输入单元格混乱

注意 这个问题是关于在 Mathematica 笔记本单元格内按下 SHIFT + ENTER 时不会丢失当前位置。这与内容或操纵无关。很抱歉一开始没有说清楚。

临时说明

现在尝试以下方法:

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

我在内部希望某些功能可能只是偶然乐观地处理存储/恢复。不过现实一点,我首先希望我什至能找到一种方法来获得当前的键盘位置。如果我的尝试有任何实现,将在这里跟进。

4

5 回答 5

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];
于 2011-12-12T19:06:30.920 回答
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}]

您只需编辑这些值,然后按 Enter 键即可获得新版本的绘图。您可以使用右上角的“+”按钮来保存您喜欢的示例,Manipulate以设置书签或粘贴快照。

在此处输入图像描述

于 2011-12-12T19:36:38.973 回答
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}]
于 2011-12-12T19:25:02.377 回答
2

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

我一直使用公司徽标作为固定单元格或“复制为纯文本”/“复制为位图”按钮来执行此操作。在严重破坏内核的笔记本上,我添加了用于内存管理甚至重新启动内核的按钮。只是一系列的捷径。您可以将多个 Cell[] 对象堆叠为停靠的单元格。

于 2011-12-12T20:13:29.207 回答
1

有一个名为“就地评估”的功能,它允许您选择单元格的一部分,然后对其进行评估。在 Mac 上,它是 command-Enter,而不是 control-Enter。

查看 Evaluate 菜单,菜单项应该与绑定的快捷键组合一起出现。

于 2011-12-12T19:16:56.810 回答