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

时间:2011-11-29 15:28:49

标签: tortoisesvn wolfram-mathematica wsh mathematica-frontend

TortoiseSVN(以及other Tortoise clients)在Mathematica中包含scriptdiff个笔记本文件。 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}
]

1 个答案:

答案 0 :(得分: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[]

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