【问题标题】:Making a working copy of the legacy documentation for version 5 inside new versions of Mathematica在 Mathematica 的新版本中制作版本 5 的遗留文档的工作副本
【发布时间】:2011-04-25 15:12:55
【问题描述】:

Mathematica 的新版本中,我们有 fully functional old-fashioned Mathematica Help Browser。但是新版本的Mathematica 中不包含版本 5 的旧文档。这个遗留文档只占用 209 МB 的磁盘空间,如果可以从 Mathematica 的新版本中访问它会很有用。

Mathematica 5.2 和 Mathematica 7 或 8 安装在同一台机器上,如何通过老式帮助从新版本中访问旧文档浏览器?

我试图从

复制文档文件夹
C:\Program Files\Wolfram Research\Mathematica\5.2\Documentation

C:\Documents and Settings\All Users\Application Data\Mathematica\Application\LegacyDocumenation

在旧版帮助浏览器中,“帮助浏览器”现在显示为插件。但它不能正常工作。

关于在Mathematica 5 中调整帮助浏览器外观的一些有用信息可以在here 找到。但我不知道如何将它应用到新版本的 Mathematica

【问题讨论】:

  • 我没有安装 5.2,也从未尝试过这样的事情,所以我无能为力,但 +10 分更接近编辑权限。 ;-)
  • @Mr.Wizard 在第 6 版发布后,很多人抱怨新的文档中心,并指出了前者的优势。我自己仍然偶尔可以在版本 5 的文档中轻松找到那些我无法在新版本的文档中找到答案的问题的答案。所以这不是一个无聊的问题。将两种截然不同的文档导航方式的优点结合起来真是太好了……
  • 你有没有发现如何做到这一点?我没有 MMA5 更少的文档,但我假设它们是笔记本。如果是这种情况,我想我知道如何使用 MMA8 来标记文档。
  • @jmlopez 是的,MMa5 文档由版本 5 笔记本和“BrowserCategories.m”文件组成。与较新文档的主要区别在于,在第 5 版中,不同功能的文档组装在一个笔记本中。例如,19Mb 笔记本“RefGuide.nb”包含所有主要内置函数的文档。
  • 那么您实际上可以在 MMa8 文档中心阅读 MMa5 中每个函数的文档吗?我真希望我能拥有 MMa5 来尝试一下。

标签: wolfram-mathematica mathematica-frontend


【解决方案1】:

解决办法

顺便说一句,我找到了将所有 Mathematica 5.2 文档添加到新版本 Mathematica 中旧版帮助浏览器的方法。

关键是位于目录中的“HelpBrowserSetup.tr”文件(在Windows下)

C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\FrontEnd\TextResources

应将其内容替换为:

@@resource HelpBrowserSetup
BrowserCategory["Help Browser", None, {
    HelpDirectoryListing[{"RefGuide"}, False],
    HelpDirectoryListing[{"AddOns"}, False],
    HelpDirectoryListing[{"MainBook"}, False],
    HelpDirectoryListing[{"OtherInformation"}, False],
    HelpDirectoryListing[{"GettingStarted"}, False],
    HelpDirectoryListing[{"Tour"}, False],
    HelpDirectoryListing[{"Demos"}, False],
    BrowserCategory["Master Index", None, {HelpMasterIndex[]}]
}]

然后,应将 Mathematica 5.2 的 $InstallationDirectory 中的“文档”文件夹复制到 Mathematica 新版本的 $InstallationDirectory 并替换(一个不重要的文件将被替换)。另一种可能性是将其复制到目录(在 Windows 下)

C:\Documents and Settings\All Users\Application Data\Mathematica

(可能$UserBaseDirectory 也是合适的)。

现在开始 Mathematica 并评估

FrontEndTokenExecute["HelpDialog"]

旧版帮助浏览器将打开,其中包含 5.2 版的所有文档!

编辑

我刚刚找到了更简单的解决方案。可以将“HelpBrowserSetup.tr”文件修改如下:

@@resource HelpBrowserSetup
HelpDirectoryListing[SystemHelpPath, False, True, True]

(或者简单地将这个文件从 5.2 版安装复制到新版本的文件夹中)。

对于那些安装了 Mathematica 5.2 的人的补充

您无需复制文档。你有两种可能:

1.) 仅将“HelpBrowserSetup.tr”文件从 5.2 版安装复制到新版本的文件夹。然后评估类似

SetOptions[$FrontEnd, 
 SystemHelpPath -> 
  Union[SystemHelpPath /. 
    Options[$FrontEnd, 
     SystemHelpPath], {"C:/Program Files/Wolfram \
Research/Mathematica/5.2/"}]]

(其中“C:/Program Files/Wolfram Research/Mathematica/5.2/”是Mathematica 5.2 的$InstallationDirectory)。

2.) 只需修改“HelpBrowserSetup.tr”文件如下(但在这种情况下,所有安装的 pre-version 6 Add-Ons 都不会出现在旧版帮助浏览器中):

@@resource HelpBrowserSetup
HelpDirectoryListing[{"C:/Program Files/Wolfram Research/Mathematica/5.2/"}, False, True, True]

然后评估

FrontEndTokenExecute["RebuildHelpIndex"]
FrontEndTokenExecute["HelpDialog"]

附注将帮助浏览器项添加到帮助菜单

为此,我们只需在 MenuSetup.tr 的适当位置添加行 MenuItem["Help Browser...", "HelpDialog"],

HelpMenu["&Help", 
{
    MenuItem["Documentation &Center", "OpenHelpLink"],
    MenuItem["Help Browser...", "HelpDialog"],

【讨论】:

  • 您是如何找到文档放置位置的?我无法在 Mac OS X 中读取它。我有路径 /Users/jmlopez/Library/Mathematica/ApplicationData。我在那里创建了一个目录Mathematica 并将文档放在那里,但是当我运行您提到的命令时,帮助浏览器什么也没有显示。
  • @jmlopez 我刚刚发现将遗留文档文件夹复制到新 Mathematica 的文档文件夹中就足够了(只是为了合并它们)。
  • 我将文件夹 AddsOns 和其余文件夹从 Documentation/English 复制到 MMA8 的主目录中,但这似乎没有任何效果。
  • MMA8的主目录指的是MMA8的文档文件夹。
  • @jmlopez 您是否将其从 MMa 5.2 的文档/英语完全复制到 8.0 的文档/英语?
【解决方案2】:

警告:我最近了解到,为新文档构建索引可能会在 Windows 机器中产生不良影响。请阅读 Alexey 的 cmets 了解更多详情。据我所知,在 Mac OS X 中一切正常。一旦确定问题的根源,我会提供更新。

这里我提出了一个功能,允许任何笔记本成为 Mathematica 8 中文档中心的一部分。您可以先让 Mathematica 评估以下内容:

Clear[FormatDoc, AddDocs];
FormatDoc[dir_, last_, num_, appName_, pacFile_, index_] := 
 Module[{dirs, nbs, nb, str, comma = ",", title, tags}, 
  nbs = FileNames[dir <> "/*.nb"];
  dirs = FileNames[dir <> "/*"];
  Do[If[last && i == Length@nbs, comma = ""];
   str = FileNameDrop[nbs[[i]], {1, num}];
   title = StringDrop[FileNameTake[nbs[[i]]], -3];
   Print[Row[{Style["Adding: ", "MSG", Black], 
      Style[str, "MSG", Blue]}]];
   str = StringDrop[str, -3];
   WriteString[pacFile, 
    "\t\t\t\t\"" <> str <> "\"" <> comma <> "\n"];
   nb = NotebookOpen[nbs[[i]]];
   tags = 
    DeleteDuplicates@
     Flatten@Map[#[[2]] &, 
       Cases[NotebookGet[
         nb], (_Dummy | (CellTags -> _)), \[Infinity]]];
   SetOptions[nb, 
    DockedCells -> 
     FEPrivate`FrontEndResource["FEExpressions", "HelpViewerToolbar"],
     Saveable -> False, 
    WindowTitle -> 
     "Mathematica 5.2 | " <> FileNameDrop[str] <> " | " <> title, 
    TaggingRules -> {"ModificationHighlight" -> False, 
      "Metadata" -> {"context" -> appName <> "`", "keywords" -> tags, 
        "index" -> True, 
        "label" -> "Mathematica 5.2 | " <> FileNameDrop[str], 
        "language" -> "en", "paclet" -> appName, "status" -> "", 
        "summary" -> ToString@tags, "synonyms" -> {}, 
        "title" -> title, "windowtitle" -> title, "type" -> "Doc", 
        "uri" -> 
         StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]}, 
      "SearchTextTranslated" -> "", "LinkTrails" -> ""}];
   NotebookSave[nb];
   NotebookClose[nb];
   DocumentationSearch`AddDocumentationNotebook[index, nbs[[i]]];, {i,
     Length@nbs}];
  Do[If[DirectoryQ[dirs[[i]]], str = FileNameDrop[dirs[[i]], {1, num}];
    Print[
     Row[{Style["Adding from: ", "MSG", Black], 
       Style[str, "MSG", Gray]}]];
    FormatDoc[dirs[[i]], last, num, appName, pacFile, index];], {i, 
    Length@dirs}]]
AddDocs[appName_] := 
 Module[{appDir, appDocs, dirs, pacFile, index, indexDir, str, num}, 
  appDir = FileNameJoin[{$UserBaseDirectory, "Applications"}];
  appDocs = 
   FileNameJoin[{appDir, appName, "Documentation", "English"}];
  indexDir = FileNameJoin[{appDocs, "Index"}];
  dirs = FileNames[appDocs <> "/*"];
  If[Length@dirs == 0, 
   Print[Style["There are no documents to add... ", "MSG", Orange]];
   Return[]];
  Print[Row[{Style["Working in: ", "MSG", Black], 
     Style[appDocs, "MSG", Red]}]];
  num = Length@FileNameSplit[appDocs];
  index = 
   DocumentationSearch`NewDocumentationNotebookIndexer[indexDir];
  pacFile = OpenWrite[FileNameJoin[{appDir, appName, "PacletInfo.m"}]];
  WriteString[pacFile, "Paclet[
                Name -> \"" <> appName <> "\",
                Version -> \"5.2.0\",
                MathematicaVersion -> \"7+\",
                Extensions -> {
                    {
                        \"Kernel\",
                        \"Context\" -> {
                        }
                    },
                    {
                        \"Documentation\",
                        Language -> \"English\",
                        LinkBase -> \"" <> appName <> "\",
                        Resources -> {\n"];
  Do[If[DirectoryQ[dirs[[i]]], str = FileNameDrop[dirs[[i]], {1, num}];
    Print[
     Row[{Style["Adding from: ", "MSG", Black], 
       Style[str, "MSG", Gray]}]];
    FormatDoc[dirs[[i]], i == Length@dirs, num, appName, pacFile, 
     index];], {i, Length@dirs}];
  WriteString[pacFile, "\t\t\t}
                }
            }
          ]\n"];
  Close[pacFile];
  DocumentationSearch`CloseDocumentationNotebookIndexer[index];
  PacletManager`RestartPacletManager[];]

如何使用:

在您评估函数的新文档或同一个文档中,首先要找出这个变量是什么:

$UserBaseDirectory

就我而言,因为我使用的是 Mac OS X,所以我得到:

/Users/jmlopez/Library/Mathematica

找出你的。在此目录中,您应该会看到文件夹 Applications。在Applications 中创建放置MMA5 文档的文件夹。我将我的文件夹命名为MMA5,因为它很短,但你可以给它任何你想要的名字,在 Alexey 的情况下,我们可以称之为LegacyDocumentation。在此文件夹中传输 MMA5 安装目录中名为 Documentation 的文件夹的副本。

我们差不多完成了。现在调用函数AddDocs。这个函数只接受一个参数:我们希望添加其文档的应用程序的名称。就我而言,由于我将文件夹命名为MMA5,因此我将其命名如下:

AddDocs["MMA5"]

接下来您应该看到的是一系列笔记本的出现和消失,以及一系列正在打印的消息。以下是该消息序列的一部分:

由于 MMA5 的文档非常广泛,这个过程需要一段时间。我对这个功能做了一个计时,它说大约需要 40 秒(对我来说似乎要长得多)。

你已经完成了。 MMA5 的文档现在应该可以在文档中心获得。

试驾

假设您希望在DSolve 上查找一些信息。如果您搜索 DSolve,您会看到以下内容:

要查找 MMA5 文档,我们需要单击位于“搜索包含 DSolve 的所有页面”中的 DSolve 链接。现在我们得到这样的东西:

在上面的屏幕截图中,我用红色标记了允许我们访问 Mathematica 5 文档的条目。我无法为文档中的每个文件编写一个很好的摘要,所以我只是让 Mathematica 编写位于笔记本中的CellTags。这就是您看到字符串列表的原因。

如果你点击第一个红色条目,这就是我们得到的

所以你有了它,一份用于新版本 Mathematica 的遗留文档的工作副本。我没有在 MMA7 中测试过这个,但我觉得它会起作用。如果有人尝试这个,请告诉我。

注意事项

如果您想将此应用于不同应用程序中的其他文档。您需要注意这一点:

    WindowTitle -> 
     "Mathematica 5.2 | " <> FileNameDrop[str] <> " | " <> title,
    TaggingRules -> {
      "ModificationHighlight" -> False,
      "Metadata" -> {
        "context" -> appName <> "`",
        "keywords" -> tags,
        "index" -> True,
        "label" -> "Mathematica 5.2 | " <> FileNameDrop[str],
        "language" -> "en",
        "paclet" -> appName,
        "status" -> "",
        "summary" -> ToString@tags,
        "synonyms" -> {},
        "title" -> title,
        "windowtitle" -> title,
        "type" -> "Doc",
        "uri" -> 
         StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]
        },

请注意,我在标签中硬编码了“Mathematica 5.2”。如果需要,您甚至可能希望将其更改为“LegacyDocumentation”。这只是一个标签。另一个重要的点是 keywords。我已将keywords 设置为变量tags。笔记本中的每个单元格都可以选择添加CellTags。如果你要写一些文档,你应该使用它们。我利用这一点让文档中心知道如何搜索文档。这是我最近才学到的东西,我一定会在一个包中实现。

如果您想编写一个完整的应用程序及其文档,我建议您看看我的帖子integrating notebooks to MMA doc center。在这里,您将找到更多信息,让您了解我在此处提供的功能是如何工作的。

作为最后一点,我想补充一点,我也在 windows 机器上测试过它,它运行良好,这就是这行代码背后的原因:

StringReplace[FileNameJoin[{appName, str}], "\\" -&gt; "/"]

编辑:

我更改了功能,以便它可以在 MMA7 中正常工作。原来pacletInfo.m 文件需要有MathematicaVersion -&gt; 7+ 行,这样它才能在MMA7 和MMA8 中工作。

编辑 2:

我在复制和粘贴函数时出错。现在应该修好了。如果你同时拥有 MMA7 和 MMA8,我建议只在 MMA7 中运行一次。这样,MMA7 和 MMA8 都可以使用文档。

【讨论】:

  • 在 MMa 7 中,AddDocs["MMA5"] 已按预期完成工作,但搜索 DSolve 显示另一张图片:在前 3 页上没有指向 Mathematica 5.2 DSolve 的链接,只有 @987654351 之类的链接@。单击时,此类链接会产生“为什么发出哔声?”弹窗:“您尝试打开的文件未找到或无法打开。”
  • @Alexey,我明白了。我只是尝试重复这些步骤,你是对的。链接似乎不起作用。我为使其在我的工作中所做的工作更改了 paclet 文件。尝试修改pacletInfo.m文件,只需将MathematicaVersion -&gt; "8+",行改为MathematicaVersion -&gt; "7+",即可。之后输入 evaluate PacletManagerRestartPacletManager[];` 以使mathematica 知道更改。看看这是否有效。
  • @Alexey,我不知道如何在评论模式下进行反向引用。我希望你知道我的意思是写PacletManager'RestartPacletManager[];,其中' 是反引号。
  • 您可以通过用双后引号将文本换行来插入后引号:''PacletManager'RestartPacletManager[];''(将所有 ' 替换为后引号)。将MathematicaVersion 更改为"7+" 后,搜索页面上的链接开始工作。但其他情况相同:即使搜索DSolve 5.2 也不会提供指向DSolve 旧页面的链接。旧版页面上的链接会打开空的旧版帮助浏览器。
  • 这是我不知道该怎么做的一件事。我从来没有使用过帮助浏览器,所以我不知道如何让它工作。但是,我可以回答有关 DSolve 5.2 没有给您结果的问题。如果您查看代码,我已将关键字设置为文档中找到的所有标签的列表。您需要在包含DSolve 的文档中添加更多关键字,例如DSolve 5.2。您也可以尝试添加关键字,例如 Legacy。为此,请在定义 tags:tags = Flatten@ Append[tags, appName &lt;&gt; "5.2"] 或任何其他允许您查找信息的关键字后添加此行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2010-09-22
相关资源
最近更新 更多