Wolfram mathematica 如何在源代码级别区分2台笔记本电脑?

Wolfram mathematica 如何在源代码级别区分2台笔记本电脑?,wolfram-mathematica,Wolfram Mathematica,有人知道在源代码级别查找两个笔记本之间差异的工具吗 workbench 2中的compare Notebook工具似乎在内部数据结构级别工作,这对我来说没有用处。我正在寻找一种工具,它可以在源代码级别上查看差异(人们在查看笔记本时看到的,即不是完整的) 我正在windows上使用Mathematica的V8 编辑1: 如何以更可读的形式显示NotebookDiff的输出/报告 在名为AuthorTools的内置加载项(在$InstallationDirectory/AddOns/Applicat

有人知道在源代码级别查找两个笔记本之间差异的工具吗

workbench 2中的compare Notebook工具似乎在内部数据结构级别工作,这对我来说没有用处。我正在寻找一种工具,它可以在源代码级别上查看差异(人们在查看笔记本时看到的,即不是完整的)

我正在windows上使用Mathematica的V8

编辑1:

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


在名为
AuthorTools
的内置加载项(在
$InstallationDirectory/AddOns/Applications
中)中有一个未记录的包。加载后,它将公开一个
NotebookDiff
函数,该函数提供一些基本的diff功能:

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[]

如果您必须使用笔记本,那么AuthorTools中的NotebookDiff可能是您最好的选择。如果这是工作流的一个重要部分(由于版本控制或其他约束),并且您有一些灵活性,您可能需要考虑将代码从现有的笔记本(.NB)移到包文件(m)中,该文件将被保存为纯文本。您仍然可以在Mathematica笔记本前端打开和编辑程序包文件,但您还可以使用现有的文本差异化工具对其进行差异化。此答案基于对该问题其他部分的评论中的讨论。 它也可以(而且应该)自动化,如果它要以任何规律的方式使用的话。 这可以通过标记要比较的单元格并使用
NotebookFind
查找要提取和比较的单元格来完成


比较单个大代码单元的一种解决方案(制作时有时会发生这种情况)是从两个笔记本电脑中复制
InputForm
中的代码

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

上述代码取自


另一个选项是使用
AuthorTools
包中的
CellDiff

Needs["AuthorTools`"];
CellDiff[Cell["Some text.", "Text"], 
         Cell["Some different text.", "Text"]]

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


您所说的“源代码级别”是指原始文本级别吗?如果是这样的话,您可以使用普通的差异工具,前提是您关闭了产生过多噪音的
FileOutlineCache
TrackCellChangeTimes
。还有一些脚本可以在diff之前删除这些内容(无需修改笔记本)。请参阅和中的注释。我指的是我在屏幕上看到的源代码。正常的源代码。不是原始文本或全文或任何其他形式。我试图找出两个版本的笔记本之间的代码变化。在Mathematica中,人们是如何做到这一点的?Workbench compare笔记本查看原始数据,这些数据很难读取。哎呀,我应该仔细阅读。你只知道“你所看到的”有什么不同,这是一个模糊的概念,是另一回事。也许你应该从旧的
AuthorTools
package.顺便说一句,我已经使用Git来控制笔记本电脑的版本(包括经常检查差异),遵循我第一条评论中链接中的所有提示,它对我很好用。AuthorTools不再出售。我查看了您在那里的链接,然后是指向perl脚本的链接,但我担心这会导致现在的情况。谢谢,我尝试了你上面展示的方法。我需要做什么才能以可读的形式读取结果?请参见“我的编辑1”中的屏幕截图。@Nasser:将调用
NotebookDiff
NotebookPut
打包。谢谢Brett。我现在看到了。但这一结果毫无用处。我有两个不同版本的notesbook,所有代码都包含在一个单元格中(这是一个演示,所以操作代码必须在一个单元格中)。当我得到报告,点击单元格的“查看差异”时,它所做的一切就是并排显示每个笔记本中一个大单元格的代码,但没有显示差异在哪里!没有红线,或者像其他diff工具中那样的其他指示,来告诉我差异在哪里,尽管我可以看到一些差异。只是说细胞是不同的。但不是在哪里@纳赛尔:如果所有东西都在一个单元格中(这对于演示来说不是必需的),那么纯文本差异就足够了。你甚至可以用一个。当然,您需要将大的
操作
复制为
输入文本
——但这应该没什么大不了的。@Simon,谢谢您提供了到diff网页的链接。我试过了,但它确实起到了我想要的作用。我复制了两本笔记本上的单元格内容并粘贴到那里,它确实用颜色显示了差异。我想从现在起我会用它。也易于使用。