在新版本的Mathematica中制作版本5的旧版文档的工作副本

时间:2011-04-25 15:12:55

标签: wolfram-mathematica mathematica-frontend

在新版本的 Mathematica 中,我们有fully functional old-fashioned Mathematica Help Browser。但是版本5的旧版文档未包含在 Mathematica 的新版本中。这个遗留文档只占用209个磁盘空间,从 Mathematica 的新版本中访问它是有用的。

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

我尝试从

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

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

并且旧版帮助浏览器内部现在将“帮助浏览器”显示为AddOn。但它不能正常工作。

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

2 个答案:

答案 0 :(得分:7)

解决方案

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

键是位于目录中的“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中的“Documentation”文件夹复制到 Mathematica 的新版$InstallationDirectory中替换(将替换一个不重要的文件)。另一种可能性是将其复制到目录(在Windows下)

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

(可能$UserBaseDirectory也适用)。

现在开始 Mathematica 并评估

FrontEndTokenExecute["HelpDialog"]

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

screenshot

修改

我刚刚找到了更简单的解决方案。可以按如下方式修改“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”文件,如下所示(但在这种情况下,所有已安装的版本6之前的附加组件都不会出现在旧版帮助浏览器中):

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

然后评估

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

P.S。将“帮助浏览器”项添加到“帮助”菜单

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

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

screenshot

答案 1 :(得分:5)

警告:我最近了解到,为新文档构建索引会在Windows机器中产生不良影响。有关详细信息,请阅读Alexey的评论。据我所知,在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"]

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

Output

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

你完成了。现在可以在文档中心获取MMA5的文档。

试驾

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

DSolve MM8

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

DSolve MM5

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

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

Jackpot

所以你有它,一个工作副本的遗留文档工作在新版本的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}], "\\" -> "/"]

编辑:

我更改了该功能,以便它可以在MMA7中正常工作。事实证明,pacletInfo.m文件需要包含行MathematicaVersion -> 7+,以便它可以在MMA7和MMA8中工作。

编辑2:

我在复制和粘贴功能时犯了一个错误。它现在应该修复。如果你有MMA7和MMA8,我建议在MMA7中只运行一次。这样,文档将可供MMA7和MMA8使用。