任何人都知道在源级别找到两个笔记本之间差异的工具吗?
工作台2中的比较笔记本工具似乎在内部数据结构级别工作,这对我没用。我正在寻找能够查看源级差异的工具(在查看笔记本时看到的内容,即不是FullForm)。
我在Windows上使用Mathematica的V8。
EDIT1:
如何以更易读的形式显示NotebookDiff的输出/报告?
答案 0 :(得分:10)
这个答案是基于对该问题其他部分的评论中的讨论。
它也可以(并且应该)自动化,如果它将被用于任何规律性。
这可以通过标记您想要比较的单元格并使用NotebookFind
来查找要提取和比较的单元格来完成。
仅比较单个大型代码单元的解决方案(有时在制作demonstrations时会发生)是从两个笔记本复制InputForm
中的代码
并将其粘贴到一个简单的差异工具中,例如Quick Diff Online 然后会为您显示标准差异:
上述代码取自one of Nasser's demonstrations。
另一种选择是使用CellDiff
包中的AuthorTools
。
Needs["AuthorTools`"];
CellDiff[Cell["Some text.", "Text"],
Cell["Some different text.", "Text"]]
要在演示中使用,您可以通过右键单击单元格括号来复制两个版本中的单元格表达式:
答案 1 :(得分:9)
内置附加组件($InstallationDirectory/AddOns/Applications
)中有一个名为AuthorTools
的未记录的软件包。加载后,它会公开NotebookDiff
函数,该函数提供一些基本的差异功能:
Needs["AuthorTools`"];
nb1 = NotebookPut[
Notebook[{Cell["Subsection heading", "Subsection"],
Cell["Some text.", "Text"]}]];
nb2 = NotebookPut[
Notebook[{Cell["Edited Subsection heading", "Subsection"],
Cell["Some different text.", "Text"]}]];
NotebookPut@NotebookDiff[nb1, nb2]
由于此软件包未记录,请注意它可能存在错误并且不被视为受支持的功能,但希望您仍然觉得它很有用。
请注意,您还可以使用例如:
获取笔记本电脑的句柄nb1 = NotebookOpen["path/to/a/notebook.nb"]
以及当前在前端打开的笔记本列表
Notebooks[]
答案 2 :(得分:2)
如果您必须使用笔记本电脑,那么AuthorTools中的NotebookDiff可能是您最好的选择。如果这是您的工作流程的重要部分(由于版本控制或其他一些约束)并且您有一些灵活性,您可能需要考虑将代码从现有笔记本(.nb)移动到包文件(.m)中,将保存为纯文本。您仍然可以在Mathematica笔记本前端打开和编辑包文件,但是您还可以使用现有的文本差异工具来区分它们。