标签: mathematica-frontend

将代码从Mathematica复制到其他平台的已知问题?

我刚注意到如果你在MMA(8.0.1/win7-64)中有这个:

在此输入图像描述

然后你把它复制到SO(只是ctrl-c ctrl-v),你得到这个:

(maxY - minY)/stepy/(maxX - minX)/stepx  
Run Code Online (Sandbox Code Playgroud)

这在数学上是等价的.它应该是这样的:

((maxY - minY)/stepy)/((maxX - minX)/stepx)
Run Code Online (Sandbox Code Playgroud)

或者这个(InputForm以上):

((maxY - minY)*stepx)/((maxX - minX)*stepy)
Run Code Online (Sandbox Code Playgroud)

它不是由StackOverflow的内部引起的,因为与NotePad的副本相同.

是否有更多这样的问题(特别是在使用SO时,一般情况下)我们应该注意什么?

是什么导致这种情况,可以在我们这边修好,如果没有,最好的解决办法是什么?

wolfram-mathematica mathematica-frontend

10
推荐指数
1
解决办法
677
查看次数

在新版本的Mathematica中制作版本5的旧版文档的工作副本

在新版本的Mathematica中,我们拥有功能齐全的老式Mathematica帮助浏览器.但是版本5的遗留文档未包含在Mathematica的新版本中.这个遗留文档只占用209МB的磁盘空间,从Mathematica的新版本中访问它是有用的.

Mathematica 5.2和Mathematica 7或8安装在同一台机器上,如何通过老式的帮助浏览器从新版本中访问旧文档?

我试图从中复制Documentation文件夹

C:\Program Files\Wolfram Research\Mathematica\5.2\Documentation
Run Code Online (Sandbox Code Playgroud)

C:\Documents and Settings\All Users\Application Data\Mathematica\Application\LegacyDocumenation
Run Code Online (Sandbox Code Playgroud)

现在,旧版帮助浏览器内部显示"帮助浏览器"作为AddOn.但它不能正常工作.

有关调整Mathematica 5中帮助浏览器外观的一些有用信息,请参见此处.但我不知道如何将其应用于Mathematica的新版本.

wolfram-mathematica mathematica-frontend

9
推荐指数
2
解决办法
385
查看次数

自重启MathKernel - 在Mathematica中是否可行?

这个问题来自最近的问题" 正确的方法来限制Mathematica内存使用? "

我想知道,是否有可能以编程方式重新启动MathKernel,使当前的FrontEnd进程连接到新的MathKernel进程并在新的MathKernel会话中评估一些代码?我的意思是"透明"重启,它允许用户继续使用FrontEnd,同时拥有新的MathKernel流程,其中一些代码来自之前评估/评估的内核?

这个问题的动机是有一种方法可以在不中断计算而占用太多内存的情况下自动重启MathKernel .换句话说,计算应该在新的MathKernel过程中自动继续,而不与用户交互(但保持用户与Mathematica最初交互的能力).在新内核中应该评估什么代码的细节当然是针对每个计算任务的.我正在寻找一个通用的解决方案如何自动继续计算.

wolfram-mathematica mathematica-frontend

9
推荐指数
3
解决办法
3343
查看次数

检测前端令牌是否可用于执行

如何检测前端令牌是否可以执行?或者,如何检测前端令牌是否未能执行?

示例:如果未选择任何内容,则"编辑" - >"复制"命令不可用. FrontEndTokenExecute["Copy"]在这种情况下会发出哔哔声,但它没有给我(编程)指示它已经失败了.

wolfram-mathematica mathematica-frontend

9
推荐指数
1
解决办法
206
查看次数

ContourPlot3D中重叠的网格线

我在Mathematica 7.0.1中Mesh生成的3D表面上渲染线条时遇到问题:ContourPlot3D

p=ContourPlot3D[x^4+y^4+z^4-(x^2+y^2+z^2)^2+3(x^2+y^2+z^2)==3,
      {x, -2,2}, {y, -2, 2}, {z,-2,2},
     BoundaryStyle->Directive[Black,Thickness[.003]],
     ContourStyle->Directive[Orange,Opacity[0.5],Specularity[White,300]],
     PlotPoints->90,Ticks->None,
     MeshStyle->Directive[GrayLevel[.7],Thickness[.001]],
     Lighting->{{"Directional",RGBColor[1,1,1],
                           {ImageScaled@{1,0,1},ImageScaled@{0,0,0}}}}];
p=Graphics[Inset[p,{0,0},Center,{1,1}],
                        PlotRange->{{-.5,.5},{-.5,.5}},Frame->True]
Run Code Online (Sandbox Code Playgroud)

screenshot1

仔细看看它们:

Show[p, PlotRange -> {{-.16, -.05}, {0, .1}}]
Run Code Online (Sandbox Code Playgroud)

screenshot2

您会看到灰色Mesh线条在许多地方与表面形成三角形重叠,甚至看起来是虚线.有办法避免这种情况吗?

3d rendering wolfram-mathematica vector-graphics mathematica-frontend

8
推荐指数
1
解决办法
729
查看次数

如何运行调色板的初始化代码?

有时,最好为调色板(按钮)设置一些初始化代码.例如,它可以定义调色板按钮使用的一些函数.

为调色板定义/运行初始化代码的最简单和最好的方法是什么?

  • 初始化可以在加载调色板或第一次按下任何按钮时运行(可能的问题:如果在加载调色板后重新启动内核会怎样?)
  • 定义应该以某种方式进行本地化(即在他们自己的上下文中 - 这里有独特的笔记本上下文帮助吗?)
  • 如果可能的话,我更喜欢最小化的解决方案(即在尽可能少的地方添加额外的代码,不包含额外包文件的自包含调色板文件,使用调色板菜单的现有便利工具创建调色板CreatePalette等)
  • (您可以假设初始化代码运行得很快,例如它只包含定义)

wolfram-mathematica initialization mathematica-frontend

8
推荐指数
1
解决办法
636
查看次数

粘贴Mathematica代码,以便将其分解为单独的输入单元格

我经常将Mathematica代码从网站(例如SO)复制到笔记本中.代码通常被粘贴为单个输入单元格.我正在寻找一种简单的方法将其粘贴为几个输入单元格,以便于逐步评估.

例如,

a = 2;
f[x_] := x^a

Plot[f[x], {x,0,2}]
Run Code Online (Sandbox Code Playgroud)

理想情况下会粘贴为两个输入单元格.最好还应保留手动格式化(即原始换行符)(默认粘贴不是这种情况).

通常,如果选择所有输入单元格(ALT-单击),将它们复制到文本编辑器中,然后将生成的文本复制回笔记本,应该与复制的原始单元格相当.

wolfram-mathematica cells mathematica-frontend

8
推荐指数
1
解决办法
1276
查看次数

由FrontEnd转换表达式

据我最近了解到,Mathematica中有一些类型的表达式由FrontEnd自动解析.

例如,如果我们评估,HoldComplete[Rotate[Style[expr, Red], 0.5]]我们看到FrontEnd不显示原始表达式:

截图

是否可以控制FrontEnd的这种行为?

是否有可能获得由FrontEnd自动解析的完整表达式列表?


编辑

我们可以看到MakeBoxes使用时的调用Print:

On[MakeBoxes]; Print[HoldComplete@Rotate["text", Pi/2]]
Run Code Online (Sandbox Code Playgroud)

但是复制粘贴打印输出会改变表达式:HoldComplete[Rotate["text", 1.5707963267948966]].它表明Print不尊重HoldComplete.

在创建输出时,Cell也应该有调用MakeBoxes.有没有办法看到它们?

wolfram-mathematica mathematica-frontend

7
推荐指数
2
解决办法
306
查看次数

是否可以从命令行调用Mathematica的diff功能?

TortoiseSVN(以及其他Tortoise客户端)包括一个用于在Mathematica中区分笔记本文件的脚本.Mathematica的Diff功能在AuthorTools包中实现(也许有更好的东西?)

该脚本目前的工作原理是在临时目录中创建一个小型笔记本文件,并在前端打开它.笔记本有一个大按钮,可以做差异,并有文件名进行硬编码.

缺点是具有diff代码的笔记本将保留在临时目录中,并且不会被清除.每次我们做差异时,似乎没有必要打开辅助笔记本.

是否可以从命令行启动diff功能以避免通过临时笔记本?或者有没有其他强大的方法来改善这个过程并避免使用辅助笔记本乱丢临时文件夹?

欢迎任何改善差异化体验的建议!

请注意,由于TortoiseSVN是一个Windows程序,我主要对基于Windows的解决方案感兴趣.


这是脚本生成的示例笔记本.我意识到它需要清理,但是上次我检查它在版本5中工作了(!),所以我不想不必要地触摸它(没有明显改进的东西).

Notebook[{ 
  Cell[BoxData[ButtonBox["\<\"Compare Notebooks\"\>", 
       ButtonFrame->"DialogBox", Active->True, ButtonEvaluator->Automatic,
       ButtonFunction:>(Needs["AuthorTools`"]; NotebookPut[Symbol["NotebookDiff"]["one.nb", "two.nb"]])
  ]], NotebookDefault] },
  Saveable->False, Editable->False, Selectable->False, WindowToolbars->{}, 
  WindowFrame->ModelessDialog, WindowElements->{}, 
  WindowFrameElements->CloseBox, WindowTitle->"Diff", 
  ShowCellBracket->False, WindowSize->{Fit,Fit}
]
Run Code Online (Sandbox Code Playgroud)

tortoisesvn wolfram-mathematica wsh mathematica-frontend

7
推荐指数
1
解决办法
522
查看次数

为变量创建强大的实时监控器

我们可以为这样的变量创建一个实时监视器:

CreatePalette@Panel@Row[{"x = ", Dynamic[x]}]
Run Code Online (Sandbox Code Playgroud)

(如果x恰好是类似的话,这会更有趣和有用$Assumptions.设置一个值然后忘记它就很容易了.)

不幸的是,如果重新启动内核(Quit[]然后评估一些内容),这将停止工作.调色板不会再显示值的变化x.

有没有办法做到这一点,所以它在内核会话中保持工作?我发现自己经常重启内核.(如果生成的调色板导致内核在完成后自动启动Quit.)


更新: 如评论中所述,事实证明,只有在我们通过评估退出时,调色板才会停止工作Quit[].使用时Evaluation -> Quit Kernel -> Local,它会继续工作.


wolfram-mathematica dynamic mathematica-frontend

7
推荐指数
1
解决办法
257
查看次数