Ale*_*kov 9 wolfram-mathematica mathematica-frontend
在新版本的Mathematica中,我们拥有功能齐全的老式Mathematica帮助浏览器.但是版本5的遗留文档未包含在Mathematica的新版本中.这个遗留文档只占用209МB的磁盘空间,从Mathematica的新版本中访问它是有用的.
将Mathematica 5.2和Mathematica 7或8安装在同一台机器上,如何通过老式的帮助浏览器从新版本中访问旧文档?
我试图从中复制Documentation文件夹
C:\Program Files\Wolfram Research\Mathematica\5.2\Documentation
Run Code Online (Sandbox Code Playgroud)
至
C:\Documents and Settings\All Users\Application Data\Mathematica\Application\LegacyDocumenation
Run Code Online (Sandbox Code Playgroud)
现在,旧版帮助浏览器内部显示"帮助浏览器"作为AddOn.但它不能正常工作.
有关调整Mathematica 5中帮助浏览器外观的一些有用信息,请参见此处.但我不知道如何将其应用于Mathematica的新版本.
顺便说一下,我找到了将所有Mathematica 5.2文档添加到新版Mathematica中的旧版帮助浏览器的方法.
关键是位于目录中的"HelpBrowserSetup.tr"文件(在Windows下)
C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\FrontEnd\TextResources
Run Code Online (Sandbox Code Playgroud)
应该用以下内容替换其内容:
@@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[]}]
}]
Run Code Online (Sandbox Code Playgroud)
然后,从"文档"文件夹$InstallationDirectory中的Mathematica 5.2应该被复制到$InstallationDirectory的新版本数学与更换(一个不重要的文件将被替换).另一种可能性是将其复制到目录(在Windows下)
C:\Documents and Settings\All Users\Application Data\Mathematica
Run Code Online (Sandbox Code Playgroud)
(可能$UserBaseDirectory也是合适的).
现在开始Mathematica并进行评估
FrontEndTokenExecute["HelpDialog"]
Run Code Online (Sandbox Code Playgroud)
旧版帮助浏览器将打开,并将包含5.2版中的所有文档!
我刚刚找到了更简单的解决方案.可以修改"HelpBrowserSetup.tr"文件,如下所示:
@@resource HelpBrowserSetup
HelpDirectoryListing[SystemHelpPath, False, True, True]
Run Code Online (Sandbox Code Playgroud)
(或者只需将此文件从5.2版安装替换为新版本的文件夹).
您无需复制文档.你有两种可能性:
1.)仅将"HelpBrowserSetup.tr"文件从5.2版安装复制到新版本的文件夹.然后评估像
SetOptions[$FrontEnd,
SystemHelpPath ->
Union[SystemHelpPath /.
Options[$FrontEnd,
SystemHelpPath], {"C:/Program Files/Wolfram \
Research/Mathematica/5.2/"}]]
Run Code Online (Sandbox Code Playgroud)
(其中, "C:/程序文件/ Wolfram Research的/数学/ 5.2 /"是$InstallationDirectory的Mathematica的 5.2).
2.)只需修改"HelpBrowserSetup.tr"文件,如下所示(但在这种情况下,所有已安装的版本6之前的附加组件都不会出现在旧版帮助浏览器中):
@@resource HelpBrowserSetup
HelpDirectoryListing[{"C:/Program Files/Wolfram Research/Mathematica/5.2/"}, False, True, True]
Run Code Online (Sandbox Code Playgroud)
然后评估
FrontEndTokenExecute["RebuildHelpIndex"]
FrontEndTokenExecute["HelpDialog"]
Run Code Online (Sandbox Code Playgroud)
为此,我们只需要MenuItem["Help Browser...", "HelpDialog"],在MenuSetup.tr中的适当位置添加行:
HelpMenu["&Help",
{
MenuItem["Documentation &Center", "OpenHelpLink"],
MenuItem["Help Browser...", "HelpDialog"],
Run Code Online (Sandbox Code Playgroud)
警告:我最近了解到,为新文档构建索引会在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[];]
Run Code Online (Sandbox Code Playgroud)
如何使用它:
在新文档或您评估函数的同一个文档中,首先查找此变量的内容:
$UserBaseDirectory
Run Code Online (Sandbox Code Playgroud)
在我的情况下,因为我使用Mac OS XI得到:
/Users/jmlopez/Library/Mathematica
Run Code Online (Sandbox Code Playgroud)
找出你的是什么.在此目录中,您应该看到该文件夹Applications.在里面Applications创建您将放置MMA5文档的文件夹.我命名我的文件夹,MMA5因为它很短但你可以给它任何你想要的名字,在Alexey我们可以称之为LegacyDocumentation.在此文件夹中,传输DocumentationMMA5安装目录中名为found 的文件夹的副本.
我们差不多完成了.现在调用该函数AddDocs.此函数只接受一个参数:我们希望添加其文档的应用程序的名称.在我的情况下,因为我命名文件夹MMA5我会按如下方式调用它:
AddDocs["MMA5"]
Run Code Online (Sandbox Code Playgroud)
接下来你应该看到的是一系列笔记本出现和消失,以及一系列消息被打印出来.以下是该消息序列的一部分:
由于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}], "\\" -> "/"]
},
Run Code Online (Sandbox Code Playgroud)
请注意,我在标签中硬编码了"Mathematica 5.2".如果需要,您甚至可能希望将其更改为"LegacyDocumentation".这只是一个标签.另一个重点是keywords.我已设置keywords为变量tags.笔记本中的每个单元都可以选择添加CellTags.如果你要写一些文档,你应该使用它们.我利用这个让文档中心知道如何搜索文档.这是我刚刚学到的东西,我肯定会在一个包中实现.
如果你想用它的文档编写一个完整的应用程序,我建议你看一下我的帖子将笔记本集成到MMA doc中心.在这里,您将找到更多信息,可以让您了解我在这里提供的功能是如何工作的.
作为最后一点,我想补充一点,我也在Windows机器上对它进行了测试,它运行正常,这就是这行代码背后的原因:
StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]
我更改了功能,以便它可以在MMA7中正常工作.事实证明该pacletInfo.m文件需要具有该行,MathematicaVersion -> 7+以便它可以在MMA7和MMA8中工作.
我在复制和粘贴函数时犯了一个错误.它现在应该修复.如果你有MMA7和MMA8,我建议在MMA7中只运行一次.这样,文档将可供MMA7和MMA8使用.
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |