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

Sza*_*lcs 7 tortoisesvn wolfram-mathematica wsh mathematica-frontend

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)

Sim*_*mon 4

这是使用 Mathematica 脚本生成笔记本差异的简单示例。

将以下内容另存为diff.m

Needs["AuthorTools`"]
If[Length[$ScriptCommandLine]>=3, 
    {f1, f2} = $ScriptCommandLine[[{2,3}]], 
    {f1, f2} = {"one.nb", "two.nb"}]
diff = FileNameJoin[{$TemporaryDirectory, "diff.nb"}]
Put[NotebookDiff[f1, f2], diff]
Run["Mathematica " <> diff]
DeleteFile[diff]
Exit[]
Run Code Online (Sandbox Code Playgroud)

然后使用从命令行调用它MathematicaScript -script diff.m "one.nb" "two.nb"。这适用于我的系统(Ubuntu 11.10、Mathematica 8.0.1)并且应该与平台无关。如果您使用的 Mathematica 版本早于 v8,那么您必须使用 ,MathKernel -noprompt -run < diff.m并且将使用 的MathematicaScript默认值。{f1, f2}