警告:新しいドキュメントのインデックスを作成すると、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 XI を使用しているため、次のようになります。
/Users/jmlopez/Library/Mathematica
あなたのものを見つけてください。このディレクトリには、フォルダが表示されますApplications
。内部Applications
に、MMA5 ドキュメントを配置するフォルダーを作成します。短いのでフォルダに名前を付けましMMA5
たが、好きな名前を付けることができます.Alexeyの場合はLegacyDocumentation
. Documentation
このフォルダー内に、MMA5 のインストール ディレクトリにあるという名前のフォルダーのコピーを転送します。
ほぼ完了です。関数を呼び出しますAddDocs
。この関数は引数を 1 つだけ取ります: ドキュメントを追加したいアプリケーションの名前です。私の場合、フォルダーに名前を付けたMMA5
ので、次のように呼びます。
AddDocs["MMA5"]
次に表示されるのは、一連のノートブックの表示と非表示、および一連のメッセージの印刷です。以下は、一連のメッセージの一部です。

MMA5 のドキュメントは非常に広範囲にわたるため、このプロセスにはしばらく時間がかかります。この関数でタイミングを計ったところ、約 40 秒かかったとのことでした (私にはもっと長いように思えました)。
これで完了です。MMA5 のドキュメントは、ドキュメント センターで入手できるようになりました。
試乗
に関する情報を調べたいとしますDSolve
。を検索するDSolve
と、次のように表示されます。

MMA5 ドキュメントをDSolve
検索するには、「DSolve を含むすべてのページを検索」にあるリンクをクリックする必要があります。これで、次のようなものが得られます。

上のスクリーンショットでは、Mathematica 5 のドキュメントにアクセスできるエントリを赤でマークしています。ドキュメント内の各ファイルの適切な要約を書く方法がないので、MathematicaCellTags
にノートブックにあるものを書かせました。これが、文字列のリストが表示される理由です。
最初の赤いエントリをクリックすると、これが得られます

これで、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」に変更することもできます。これは単なるラベルです。もう 1 つの重要なポイントは、keywords
. keywords
変数に設定しましたtags
。ノートブックのすべてのセルには、追加するオプションがありますCellTags
。ドキュメントを作成する場合は、それらを使用する必要があります。これを利用して、ドキュメンテーション センターにドキュメントの検索方法を知らせました。これは私が最近学んだことであり、間違いなくパッケージに実装します。
ドキュメントを含む完全なアプリケーションを作成したい場合は、ノートブックを MMA doc center に統合するという私の投稿をご覧になることをお勧めします。ここでは、ここで提供した機能がどのように機能するかを理解できるようにするための詳細情報を見つけることができます。
最後に、Windows マシンでもこれをテストしたところ、問題なく動作したことを付け加えたいと思います。これが、このコード行の背後にある理由です。
StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]
編集:
MMA7で正しく動作するように機能を変更しました。MMA7 と MMA8 で動作するには、pacletInfo.m
ファイルに次の行が必要であることが判明しました。MathematicaVersion -> 7+
編集2:
関数をコピーして貼り付けるときに間違えました。今すぐ修正する必要があります。MMA7 と MMA8 の両方を持っている場合は、MMA7 で 1 回だけ実行することをお勧めします。そうすれば、ドキュメントは MMA7 と MMA8 の両方で利用できるようになります。