我们都知道Mathematica很棒,但它也经常缺乏关键功能.您在Mathematica中使用哪种外部包/工具/资源?
我将编辑(并邀请任何其他人也这样做)这个主要帖子包括专注于科学研究的一般适用性的资源,并且尽可能多的人会觉得有用.随意贡献任何东西,甚至是小代码片段(正如我在下面做的时间例程).
此外,在Mathematica 7及其他您发现自己,或从一些纸张/网站挖出的无证和有用的功能是非常受欢迎的.
请提供简短描述或评论为什么有什么好东西或它提供的实用程序.如果您使用会员链接链接到亚马逊上的书籍,请提及它,例如,在链接后面加上您的姓名.
包:
LevelScheme是一个大大扩展Mathematica生产美观图的能力的软件包.我使用它,如果没有其他任何东西,那么对框架/轴刻度的大大改进控制.它的最新版本称为SciDraw,它将在今年的某个时候发布.Presentation Package(50美元 - 免费更新)grassmannOps软件包提供了使用Grassmann变量和具有非平凡换向关系的算子进行代数和微积分的资源.GrassmannAlgebra与格拉斯曼(Grassmann)和克利福德代数(Clifford algebras)合作的包和书.工具:
MASH是Daniel Reeves出色的Perl脚本,主要为Mathematica v7提供脚本支持.(现在-script可以选择使用Mathematica 8制作.)alternate Mathematica shell与GNU的readline输入(使用python,*nix中只)资源:
MathSource对于各种应用程序,Wolfram自己的存储库有很多有用的缩小笔记本.另请参阅其他部分,例如
Current Documentation, Courseware 讲座, Demos为了演示.在数学维基教科书.
图书:
我刚刚发现这样的MathLink函数,LinkWrite并且LinkRead具有类似于它自己的内部的东西CheckAbort,可以吸收任何中止,并且不会进一步传播它们.
这可以很容易地显示LinkRead:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"];
LinkRead[link];
LinkWrite[link, Unevaluated[Pause[10]]];
{LinkRead[link], Print["!!"]}
Run Code Online (Sandbox Code Playgroud)
在评估上面的代码后按Alt+ .,您将得到以下输出:
During evaluation of In[6]:= !!
Out[9]= {ReturnPacket[$Aborted], Null}
Run Code Online (Sandbox Code Playgroud)
如你所见,中止被吸收了LinkRead.
我的问题是它打破了我自己的评估流量控制CheckAbort.
有没有办法拦截将中止这种功能被吸收LinkRead和LinkWrite?
美好的一天,
这个问题来自关于中止对全部输入序列的评估的问题.
我认为可能通过重新定义FrontEndEventActions两个事件来实现所需的行为:( "EvaluateCells"或按Shift+ Enter)和按Alt+ ..它应该是这样的:
SetOptions[$FrontEndSession,
FrontEndEventActions -> {"EvaluateCells" :> Last$PreRead,
{{"Alt", "."} :> AbortAllNextInputs}}]
Run Code Online (Sandbox Code Playgroud)
要么
SetOptions[$FrontEndSession,
FrontEndEventActions -> {{{"ShiftKey", "ReturnKeyDown"} :> Last$PreRead}
{{"Alt", "."} :> AbortAllNextInputs}}]
Run Code Online (Sandbox Code Playgroud)
其中AbortAllNextInputs和Last$PreRead定义如下:
AbortAllNextInputs := AbortProtect[
$new$PreRead = True;
last$PreRead = ToString[Definition[$PreRead], InputForm];
ClearAll[$PreRead];
$PreRead := # &] /; ! TrueQ[$new$PreRead]
Last$PreRead :=
$PreRead := AbortProtect[
$new$PreRead = False;
ClearAll[$PreRead];
If[last$PreRead === "Null", #,
ToExpression[last$PreRead]; $PreRead@#]
] &
Run Code Online (Sandbox Code Playgroud)
但我无法 …
在回答这个问题时,我建议 OP在他的笔记本开头打开一个流,并在结束时关闭它.但是,如果Abort生成了一个,则流将保持打开状态,如果他们尝试再次打开它而不先检查,则会造成严重破坏.如果仅对单个功能需要流,则解决方案将很简单,但整个笔记本都需要它.显然,可以添加一个检查来查看流是否已经打开,但有没有办法绑定到全局Abort处理程序,以便可以全局处理这类问题?
编辑:具体来说,我正在寻找一种方法来运行任意代码,Abort无论代码当前是否在其中运行CheckAbort.基本上,Abort如果可能的话,我想设置一个全局处理程序.如果这在笔记本级别存在,那就更好了.