如何在源级别区分2个笔记本?

Nas*_*ser 7 wolfram-mathematica

任何人都知道一个工具来找到源级别的2个笔记本之间的差异?

工作台2中的比较笔记本工具似乎在内部数据结构级别工作,这对我没用.我正在寻找能够查看源级差异的工具(在查看笔记本时看到的内容,即不是FullForm).

我在Windows上使用Mathematica的V8.

EDIT1:

我如何以更易读的形式显示NotebookDiff的输出/报告?

在此输入图像描述

Sim*_*mon 10

这个答案是基于对该问题其他部分的评论中的讨论.它也可以(并且应该)自动化,如果它将被用于任何规律性.这可以通过标记您想要比较的细胞并使用NotebookFind来找到用于提取和比较的细胞来完成.


用于比较单个大型代码单元的解决方案(有时在进行演示时会出现)是InputForm从两个笔记本中复制代码

在此输入图像描述

并将其粘贴到一个简单的差异工具,如Quick Diff Online ,然后为您显示标准差异:

在此输入图像描述

上述代码取自纳赛尔的一次演示.


另一种选择是CellDiffAuthorTools包中使用.

Needs["AuthorTools`"];
CellDiff[Cell["Some text.", "Text"], 
         Cell["Some different text.", "Text"]]
Run Code Online (Sandbox Code Playgroud)

CellDiff

要在演示中使用,您可以通过右键单击单元格括号来复制两个版本中的单元格表达式:

在此输入图像描述


Mic*_*lat 9

在内置的附加组件(in $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]
Run Code Online (Sandbox Code Playgroud)

由于此软件包没有文档,请注意它可能是错误的并且不被视为支持的功能,但希望您仍然觉得它很有用.

请注意,您还可以获得笔记本电脑的句柄,例如:

nb1 = NotebookOpen["path/to/a/notebook.nb"]
Run Code Online (Sandbox Code Playgroud)

以及当前在前端打开的笔记本列表

Notebooks[]
Run Code Online (Sandbox Code Playgroud)

  • @Nasser:用`NotebookPut`包含对`NotebookDiff`的调用. (2认同)