8

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

该脚本当前通过在临时目录中创建一个小笔记本文件并在前端打开它来工作。笔记本有一个大按钮,可以进行比较,并且文件名是硬编码的。

缺点是带有差异代码的笔记本会留在临时目录中,不会被清理。每次进行 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}
]
4

1 回答 1

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)并且应该是平台独立的。如果您使用的 Mathematica 版本早于 v8,那么您必须使用MathKernel -noprompt -run < diff.m而不是,MathematicaScript并且将使用默认值 for {f1, f2}

于 2011-11-29T22:36:12.873 回答