10

我正在Mathematica(8或以上版本)中使用笔记本界面试验标志设计,我想更改生成公式A LOT。问题是我只知道SHIFT + ENTER,这让我跳到当前单元格外面,失去了我的位置。在Mathematica中评估当前单元而不离开或丢失它的位置

有没有办法评估当前的细胞而不离开它并丢失它的位置?因此:评估一个单元格并返回里面的相同单元格在我按下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}]; 

是一个不错的改进,我的解决方案部分由克里斯Dengen建议。

编辑2:

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

这解决了:

  • 与产生细胞中的这些唯一的工作的一个或一个已知的数输出单元的

EvaluationCell稀疏记录实际上我很难发现,但我偶然发现了它。使用EvaluationCell,搜索从上面开始(消除Do两次构造),因为我们不是从屏幕下方的输出单元出发。

仍有待解决:

  • 需要做的手工细胞保存(簿记在细胞水平),使用基于注释的着陆标志杂波
  • 输入单元格
  • 感兴趣的地方降落

注意 这个问题是关于不丧失当前位置时,一个按Shift + Enter一个Mathematica笔记本细胞内。这不是关于内容或操作。对不起,一开始就没有说清楚。

临时注

现在尝试以下操作:

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

我在内部希望某些功能可能只是照顾存储/恢复,偶然乐观。尽管现实,我首先希望我能找到一种方法来获得当前的键盘位置。如果在我的尝试中发生任何事情,我会跟进。

+0

对任何人关闭:请意识到这是一个关于Wolfram Mathematica的问题,而不是数学! –

+0

@MikeBantegui非常感谢我发现它也很奇怪。 SO上有很多Mathematica用户/专家,我希望这个答案对所有人都很有意思。 –

+0

您是否有更透彻的示例,我们可以一起玩,以及您将要调整的参数? –

回答

5

您可以反复运行该细胞:

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

谢谢,但我真正想要的是退回*在单元格* *在确切的位置我按SHIFT + ENTER在*。 –

+0

你的最终答案是对我最初的一个改进。可以将你的注释中的标记与(* HERE *)结合使用,以便与当前正在工作的位置非常接近,并且不必拆分在NotebookFind的第二个参数中使用的内容。 –

+0

已被接受,因为您是唯一了解问题性质的人:)并且您的建议有助于改善体验,即使只是一点点。非常感谢! –

1

有一个调用的函数“来代替评估”,它可以:

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

这个版本在1号线将光标置于的EXP后你选择一个单元格的一部分,然后对其进行评估。在Mac上,它是命令Enter,而不是Control-Enter。

看看Evaluate菜单,菜单条目应该和绑定的快捷键组合在一起。

+1

等待,用它的评估表达式替换当前选择。那不是你想要的,是吗? –

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[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

有关使用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

+0

这是一个整洁的想法,当然我会记得在某些情况下使用。然而有时候我有矩阵和各种其他的东西,你不会在Manipulate中排版或格式化这些东西。这感觉有点奇怪,就好像我一直抛到终端,我只能输入非排版的纯字符串。 –

+0

你可以使用一些排版形式(部首,幂等等)输入,但我无法在输入字段中获得好的矩阵。 (至少不是没有手动使用** Insert **菜单项,添加行/列的快捷方式在输入字段中不起作用。) –

+0

Brett你可以在InputFields的列表中包装MatrixForm,并获得很好的渲染效果,但当然你需要测试它并在代码中删除它。如果[Head [x] === MatrixForm,First [x],x], {x,MatrixForm [{{2,3},{1,2}}],ControlType - > InputField} ] –

2

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

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

相关问题